steletoの日記 このページをアンテナに追加 RSSフィード

2016-10-24

[][] 2代目 01:51  2代目 - steletoの日記 を含むブックマーク  2代目 - steletoの日記 のブックマークコメント

名古屋にブッ飛ばされている間にZaurusが起動しなくなった。現象としてはAC接続するとメールランプが点滅し、電源ボタンを押しても起動しないというもの。NANDフラッシュバックアップをすると一旦は起動するようになるものの、すぐに起動できない状態に戻る。いろいろやったけど10年以上使い倒してきたし流石にもうハードウェアの限界かなーと。

f:id:steleto:20161025010302j:image

てなわけで中古で2代目ゲット。ちなみにSL-C750とかでも良かったけどなんとなく先代と同じくSL-C700

んで実機は入手したものの10/1くらいのcurrentだとインストールイメージを食わせてみても何故か起動してくれなかったり、CF-LANカードがしばらく使ってなかったから行方不明になってたりタイミング良くSDカードリーダが故障したりしてようやく今日に至るといった具合。

というかこのサイズで物理QWERTYキーつきのデバイスってどっか出してくれませんかねホント…。

2014-04-29

[]▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああああああああ 21:34 ▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああああああああ - steletoの日記 を含むブックマーク ▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああああああああ - steletoの日記 のブックマークコメント

こっちは先週のとある出勤中の出来事。


  1. さて乗り替えで座れたし続きやるか
  2. ポケットからZaurusを取り出す
  3. スタイラス「ポロッ」あっ

f:id:steleto:20140429212629j:image

▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああああああああ

出勤中だったけどあまりのショックでそのまま帰りたくなったよ… orz (※マジです)


なおペン先は折れた衝撃で5mくらい吹っ飛んでた模様。完全に見失ってて半分諦めてたところにわざわざ拾って渡してくれた方本当にありがとうございました。

2014-02-25

[][]WM8731ドライバカッコカリ 03:12 WM8731ドライバカッコカリ - steletoの日記 を含むブックマーク WM8731ドライバカッコカリ - steletoの日記 のブックマークコメント

C700でだいたい再生ができたので。

以下メモっぽい何か。ほぼ終電帰り後なんで整理するほど頭が回ってません。

  • zaudioデバイスはWM8750という別の石なのでコピペして別デバイスを作成
    • つーかいきなり統合させながら作れる能力なんぞないわー
  • んで別デバイスとして作る方向に舵を切ってみたら今度はデバイス名が決まらない
  • 途中で考えるのが面倒になったんで "zaud" というテキトー感のあふれる名前になってる
    • エライ人がきちんとしたものにしてくれると信じてます(ォィ
  • とりあえず自分のC700で一通りのフォーマットで再生できることは確認
    • ただしこの実機はU-Bootで直接起動するようになっているので、通常のzboot経由だとどうなるかは未確認
    • ついでにC3x00での確認もしてない
    • なおサンプリング周波数が32,000Hzのものを再生しようとすると22,050kHzで再生される
    • PXA250のDeveloper's Manualを見る限りだと、I2Sの32,000Hzは非対応っぽいのでたぶんそのせい
  • 録音の動作確認はいまいちやってない
    • 何度か試していたら全く録音できない(50byteくらいから一向に増えない)という現象が発生した

パッチの中身。

  • 基本的にzaudio.cのコピペ
  • レジスタ回りの扱いはWM8750とWM8731で全然違うのでその辺は見直し
    • 同じ会社の石のくせに互換性なにそれおいしいの状態
  • WM8750は出力を2系統もつがWM8731は1系統のみ
    • WM8750ならスピーカーとヘッドフォンに別々に割りふれるんで特に問題ないんだけども、WM8731では1系統しか出力できないので代わりにscoopで出力のON/OFFを指定する仕組み
  • で、スピーカー用のAPIがないのでscoop_set_speaker()を作成(C7x0系専用)
    • SCOOP0_APM_ON…Advanced Power Management? とか思ってたんだが、SHARPの原本みたらAPMとAMPが混在してたんで、用途からするとAMP(Amplifier)だろということでこっそり修正
  • scoop的にはスピーカーとヘッドフォンのON/OFFは独立しているので、どちらもON出力すること自体は可能
    • なのだが、両方制御できるような仕組みが思いつかなかったのと、必要になるユースケースがさっぱり思いつかなかったんでサックリ割り切って今は排他になってる
  • wm8731_formats[]は最初zaudio側のようにいくつか定義してあったんだけど、モノラル音声を再生させたら倍速再生しやがったんで16bit/2chのみに限定
  • …とだけやったら今度は起動時に怒られてデバイスとして使わせてくれなくなったので、uconv_set_converter()の第5引数をfalseからtrueにしたらモノラルも含め鳴るようになった

2013-12-08

[][] w100にshadow fbをつけてみた 18:51  w100にshadow fbをつけてみた - steletoの日記 を含むブックマーク  w100にshadow fbをつけてみた - steletoの日記 のブックマークコメント

気がつけば丸々3ヶ月放置してた。ナツヤスミトハナンダッタノカ

どうも最近rasops(9)が最近のトレンドみたいだったので(違)便乗してみるテスト。つーかrasops(9)のmanにこんなんが定義されていたので、w100の画面スクロールがものくそ遅い問題が回避できないかと試してみた。

/*
 * If you want shadow framebuffer support, point ri_hwbits
 * to the real framebuffer, and ri_bits to the shadow framebuffer
 */
u_char  *ri_hwbits;

んでとりあえず/usr/share/misc/style (476 行)をcatした結果。

  • shadow framebuffer なし: 96秒
  • shadow framebuffer あり: 30秒

shadow framebufferありのほうがメモリのコピー回数が増えているにもかかわらず3倍速くなりおった。つーかどんだけ遅いんだよVRAM。

ただし、

  • shadow framebufferとして常にメモリを614,400byte(640x480x2)消費する
  • 恩恵を受けられるのはrasopsだけで、mlterm-fbとかX.orgの速度には寄与しない(つまりメモリの無駄遣い)
  • ri_hwbitsを使っているドライバがほとんどない
  • w100的にはbitbltとかできる子だった(はず)ので、もっと適切な方法がある

というわけで、「フツーmlterm-fbやX.org使うよね」ということを考えると精々起動がちょっと速くなる(ブートメッセージの画面スクロールの部分)程度であまりおいしくない。

ちなみにmlterm-fbでさっきと同じようにcatを走らせると。

  • mlterm-fb : 0.3秒

∴ もう全部mlterm-fbでいいんじゃないかな

Index: sys/arch/zaurus/conf/GENERIC
==================================================================
--- sys/arch/zaurus/conf/GENERIC
+++ sys/arch/zaurus/conf/GENERIC
@@ -223,10 +223,11 @@
 # LCD
 lcd0 at pxaip?				# PXA2x0 integrated LCD Controller
 options 	PXA2X0_LCD_WRITETHROUGH
 wsdisplay* at lcd? console ?
 w100lcd0 at pxaip?			# ATI Imageon100 LCDcontroller
+#options		W100_SHADOW
 wsdisplay* at w100lcd? console ?
 lcdctl0 at zssp0
 
 # WM8750 Audio
 zaudio0 at iic? addr 0x1b

Index: sys/arch/zaurus/conf/files.zaurus
==================================================================
--- sys/arch/zaurus/conf/files.zaurus
+++ sys/arch/zaurus/conf/files.zaurus
@@ -78,10 +78,11 @@
 # LCD frame buffer for SL-C7x0
 device w100lcd: wsemuldisplaydev, rasops16, rasops8, rasops4, rasops_rotation
 attach w100lcd at pxaip
 file arch/zaurus/dev/w100lcd.c		w100lcd needs-flag
 file arch/zaurus/dev/w100.c		w100lcd
+defflag opt_w100.h			W100_SHADOW
 
 # backlight, brightness Controller
 device lcdctl
 attach lcdctl at zssp
 file arch/zaurus/dev/lcdctl.c		lcdctl needs-flag

Index: sys/arch/zaurus/dev/w100.c
==================================================================
--- sys/arch/zaurus/dev/w100.c
+++ sys/arch/zaurus/dev/w100.c
@@ -33,10 +33,11 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/conf.h>
 #include <sys/uio.h>
 #include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/kernel.h>			/* for cold */
 
 #include <uvm/uvm_extern.h>
 
 #include <dev/cons.h>
@@ -52,10 +53,11 @@
 
 #include <zaurus/dev/w100reg.h>
 #include <zaurus/dev/w100var.h>
 
 #include "wsdisplay.h"
+#include "opt_w100.h"
 
 /* Console */
 struct {
 	int is_console;
 	struct w100_wsscreen_descr *descr;
@@ -196,11 +198,16 @@
 			return;
 		}
 
 		ri = &scr->rinfo;
 		ri->ri_hw = (void *)scr;
-		ri->ri_bits = scr->buf_va;
+		if (scr->shadow != NULL) {
+			ri->ri_hwbits = scr->buf_va;
+			ri->ri_bits = scr->shadow;
+		} else {
+			ri->ri_bits = scr->buf_va;
+		}
 		w100_setup_rasops(sc, ri, descr, geom);
 
 		/* assumes 16 bpp */
 		(*ri->ri_ops.allocattr)(ri, 0, 0, 0, &defattr);
 
@@ -232,19 +239,26 @@
 static int
 w100_new_screen(struct w100_softc *sc, int depth, struct w100_screen **scrpp)
 {
 	struct w100_screen *scr = NULL;
 	int error = 0;
+#ifdef W100_SHADOW
+	size_t fbsize;
+#endif
 
 	scr = malloc(sizeof(*scr), M_DEVBUF, M_NOWAIT);
 	if (scr == NULL)
 		return ENOMEM;
 
 	memset(scr, 0, sizeof(*scr));
 
 	scr->buf_va = (u_char *)bus_space_vaddr(sc->iot, sc->ioh_vram);
 	scr->depth = depth;
+#ifdef W100_SHADOW
+	fbsize = (sc->display_width * depth / 8) * sc->display_height;
+	scr->shadow = kmem_alloc(fbsize, KM_SLEEP);
+#endif
 
 	LIST_INSERT_HEAD(&sc->screens, scr, link);
 	sc->n_screens++;
 
 	*scrpp = scr;
@@ -410,11 +424,16 @@
 	/*
 	 * initialize raster operation for this screen.
 	 */
 	scr->rinfo.ri_flg = 0;
 	scr->rinfo.ri_depth = type->depth;
-	scr->rinfo.ri_bits = scr->buf_va;
+	if (scr->shadow != NULL) {
+		scr->rinfo.ri_hwbits = scr->buf_va;
+		scr->rinfo.ri_bits = scr->shadow;
+	} else {
+		scr->rinfo.ri_bits = scr->buf_va;
+	}
 	scr->rinfo.ri_width = sc->display_width;
 	scr->rinfo.ri_height = sc->display_height;
 	scr->rinfo.ri_stride = scr->rinfo.ri_width * scr->rinfo.ri_depth / 8;
 	scr->rinfo.ri_wsfcookie = -1;	/* XXX */
 

Index: sys/arch/zaurus/dev/w100lcd.c
==================================================================
--- sys/arch/zaurus/dev/w100lcd.c
+++ sys/arch/zaurus/dev/w100lcd.c
@@ -69,11 +69,11 @@
 		.fontwidth = 8,
 		.fontheight = 16,
 		.capabilities = WSSCREEN_WSCOLORS,
 	},
 	.depth = 16,			/* bits per pixel */
-	.flags = 0,
+	.flags = RI_CLEAR,
 };
 
 static const struct wsscreen_descr *w100lcd_scr_descr[] = {
 	&w100lcd_std_screen.c
 };

Index: sys/arch/zaurus/dev/w100var.h
==================================================================
--- sys/arch/zaurus/dev/w100var.h
+++ sys/arch/zaurus/dev/w100var.h
@@ -10,10 +10,13 @@
 	LIST_ENTRY(w100_screen) link;
 
 	/* Frame buffer */
 	void 	*buf_va;
 	int     depth;
+
+	/* shadow framebuffer */
+	void	*shadow;
 
 	/* rasterop */
 	struct rasops_info rinfo;
 };
 

2013-05-07

[] SL-C1000用μSD 00:52  SL-C1000用μSD - steletoの日記 を含むブックマーク  SL-C1000用μSD - steletoの日記 のブックマークコメント

f:id:steleto:20130507033825j:image

とりあえずSL-C1000をpkgsrc回しマシンにすべくμSDと謎機能付きのSD変換ソケット(ぉ)を購入。GWの(唯一の)成果物。しかしまだ開封すらしていない。