今日のスナップショット
070527
Dillo(Web Browser)をX-Windowsでなく、Nano-X上で動かすなんてことはできないだろうか?

070526
NanoXのほうは、一部のタイマー関数が機能していないことがわかったが、何とかしようという気になれない。

SDLはblitにmemcpyが使われているので、ロングワード単位の転送に変えたところ、Depthの3FPSが5FPSにUPした。
数値では目覚しい変化はないが、潜水艦がヒコッ。。ヒコッ。。と動いていたのが、ヒコヒコくらいにはなった。よくわかんないか (^。^;)
この変化は結構満足してますけど。
バスの信号を見たわけではないので本当のところはわからないのだけれど、SDRAMのデータの読み書きは、バーストリード,ライトを使用するのが効果的なので、16ビットバスのSH7706ボードであるなら、VIDEOの設定が16bppの色数(2バイト)の設定なので、バーストリードで4pixelまでは一度に読めそうと考えているが、本当のところはどうなんだろうか?
また、元々のmemcpyがどの位非効率なのかは判らない。まさか1バイトづつ転送するようなことがあれば、SDRAMはシングルサイクルでのアクセスになるので、高速SRAMより効率が落ちそう。以下のコードは、まだ改善の位置がありそうだけど、ここに一生懸命になっても全体のどこがネックなのかわかってないので、そこそこにしておこうかな。
SDLのソースにはx86のMMXなんて表記が出てくるのは、面白いところだけど。ここはMMXの機能が生きてくるところではないですね。


千石電商店内で白色LEDの昇圧ユニット(30V20mA出力を探している)を見つけた。
WQVGAのバックライト駆動に使うかも。
キーボードインタフェースのほうはPIC1個でマウスと兼用するのは無理そう。2個載せるか?あるいは今日のMLにあったようにコンソールにPS/2キーボード→RS232変換アダプタを作ってつなぐというのも良いが、ゴテゴテになりそう。
ジョイパッドはGP2S05反射センサ(秋月店頭販売 HPにはない)で指の検出をしてボタンスイッチの代用が出来ないかと思っている。
static void SDL_BlitCopy(SDL_BlitInfo *info)
{
Uint8 *src, *dst;
int w, h;
int srcskip, dstskip;

w = info->d_width*info->dst->BytesPerPixel;
h = info->d_height;
src = info->s_pixels;
dst = info->d_pixels;
srcskip = w+info->s_skip;
dstskip = w+info->d_skip;
#ifdef MMX_ASMBLIT
if(SDL_HasSSE())
{
while ( h-- ) {
SDL_memcpySSE(dst, src, w);
src += srcskip;
dst += dstskip;
}
__asm__ __volatile__ (
" emms\n"
::);
}
else
if(SDL_HasMMX())
{
while ( h-- ) {
SDL_memcpyMMX(dst, src, w);
src += srcskip;
dst += dstskip;
}
__asm__ __volatile__ (
" emms\n"
::);
}
else
#endif
while ( h-- ) {
SDL_memcpySHMIN(dst, src, w);
// SDL_memcpy(dst, src, w);
src += srcskip;
dst += dstskip;
}
}
static void SDL_memcpySHMIN(Uint8 *to, const Uint8 *from, int len)
{
int i;
unsigned long *lsrc ,*ldst;

lsrc =(unsigned long *)from;
ldst =(unsigned long *)to;
for(i=0; i<len/8; i++) {
*ldst++ = *lsrc++;
*ldst++ = *lsrc++;
}
if (len&7)
SDL_memcpy(to, from, len&7);
}

#ifdef MMX_ASMBLIT
static __inline__ void SDL_memcpyMMX(Uint8 *to, const Uint8 *from, int len)
{
int i;

for(i=0; i<len/8; i++) {
__asm__ __volatile__ (
" movq (%0), %%mm0\n"
" movq %%mm0, (%1)\n"
: : "r" (from), "r" (to) : "memory");
from+=8;
to+=8;
}
if (len&7)
SDL_memcpy(to, from, len&7);
}



070524
こんなのも立ち上がる。Joystickがないと怒られるので,ゲームには入れませんけど。何とかしてみようと思います。
このソフトにはAudio関係のSDL_mixerというライブラリーが必要で、コレもクロスコンパイルして用意した。音出ないんですけどね。
DSC02535-w320.jpg

070521
DepthはHalfVGA、QVGAの大きさにフレームバッファを設定しても、フレームレートは3FPSのままだった。
nxdoomのときとは様子が違う。転送以外になにかもっと負荷がかかる部分があるようだが、そもそもこんなものか?
doomが動くほうが、どうにかしているかな?
あまり満足に動くものがないようだと、MES2に出戻りになりそう。やっぱり、Linuxは辛どい。
ちょっとした描画ツールを作るんだって、DIYSをいじっていけば、そこそこなことが出来そうだし。
Linuxは,数年後に再挑戦かな。

070519
Depthのタイトル画面がSH7706ボードで動く。ジョイスティックもキーボードもないのでマウスだけではゲームをスタートできない。
VGA画面では3FPSしかレートが出ていないので,とても描画が遅い。フレームバッファの指定をQVGAにすればそこそこ動くかもしれない。
depth_sh7706.jpg

070518
SDL-imageのコンパイルがアレコレ欲しいとわがままを言うので、いろんなライブラリーが出来てくる。(本当は30分かけて必死になってソースからクロスコンパイルしてるのがわかるでしょ!)
こんなことしなくともここから持ってくれば良かったのかな?
libralies.gif

070516
SDLはマルチプラットフォームで動作するはずなので、WindowsでもLinuxでも動くというのが売り。
depthは懐かしい潜水艦ゲームで、ダウンロードするとWindowsの実行バイナリdepthとdllがあるので、Windowsで遊べる。
Linuxのほうは、FedraCore6開発機でもMakeするだけで実行ファイルが出来て、X-Windows上でも動作した。(コンパイル時にSDLのライブラリーが必要)
そうそう、Windows、Eclipseでコレをコンパイルしてみようという人、居ませんかね。
以下は,開発機でi686コンパイルして普通に動かしている。(いいな!普通に動くんだから。(;_;))
depth002.gif
[root@localhost i386]# cd depth002
[root@localhost depth002]# ls
CBmps.c CEGex.c CList.c CTime.c cs_table.c depthbmp
CBmps.h CEGex.h CList.h CTime.h depth.c num2
CEG2.c CInput.c CSprite.c Makefile depth.exe readme.txt
CEG2.h CInput.h CSprite.h SDL.dll depth002.zip
[root@localhost depth002]# make
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c depth.c
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c CEGex.c
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c CSprite.c
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c CList.c
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c CInput.c
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c CTime.c
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c CEG2.c
gcc -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2 -c CBmps.c
Linking depth ...
gcc -o depth depth.o CEGex.o CSprite.o CList.o CInput.o CTime.o CEG2.o CBmps.o -lm -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL -lpthread
[root@localhost depth002]# ./depth
Couldn't open joystick
frame lost 0.00% : FPS = 30
[root@localhost depth002]#
ZとXキーが魚雷落し。


070514
AVRマイコンとPICマイコンの命令互換表なるものを作ってみる。
ただし、アーキテクチャを良く知らずに使うとひどい目に遭いますぞ。
間違いがあってもノークレームです。
avr2pic.gif


070511
キーボードもつなげようかとこんなページを見てます。
なんか楽しそうで良いじゃないですか。AVRのソースコードもあるようなんですが、
今のPICマイコンに移植しようとすると以下のような課題がありそう。
・キーボードとマウス双方をPIC1つでどう処理するか?
・キーボードとのやり取りに割り込みを使用している。コレを実装するとややこしくなりそう。
・PICマイコンは配列を扱うのが面倒。キーボードのコード変換が必要になる。
 配列を埋め込むには288バイトのデータの格納が必要で、今のPIC16F628Aは128バイトのEPROMであり、ピン互換の16F648Aでも256バイトしかない。
・このようなことをやろうとしている方のページが。。。更新されない。


070506 液晶と駆動回路はこんなものです。
今日は、そとは雨ですが、記念すべき日となりました。
いよいよ16バイトDMA転送の実験。
SH7706ボードのコネクタには、CKIOやBSは出ていないので、直に配線。
FIFOメモリへの転送量を640x200ピクセルまで落として、DOOMも程よく動くようになりました。
あのときから3年半かかってしまいました。
ただし、マウスだと、どうやって「扉」を開くんでしょうね。

CPUコアクロックも64MHzより128MHzにしたほうがスムーズに動くので、効果のひとつひとつが目に見えて改善されました。
何フレーム出ているか、後ほど測定してみようかな。
調子に乗って、次はWideQVGAボードを起こしてみましょう。協力者募集しますよ。
Dsc02472.jpg


070505
XilinxCPLDのFIFOへの制御信号のうち、FIFOのライトクロックを変えてみる。
  fifo_wck <= '0'  when ((ncs5 ='0'and we0 ='0') or ((ckio = '0')and(bs = '0')and(dack0 = '0')) else '1';

070504A
SDLのデモも動きましたけど、やはり遅い。
DSC02463-w320.jpg DSC02466-w320.jpg
DSC02465-w320.jpg DSC02464-w320.jpg


070504
SDRAMからDACK付でFIFOへの16バイトDMA転送にはCKIOとBSも必要。。。
こんな感じでどうかな。
dma16byte.gif

070502
Nano-X上でのDOOMは、FIFOへの転送範囲を640x240pixelsに落として、かろうじて、ハングせずゲームに入ることが出来るようになるが、マウスの反応がほとんどない。DMAのロングワードx4回転送でDACK付で転送するとデータが歯抜けになってしまう。この辺りの問題が回避できると転送レートがあがりそう。
Dsc02459-w320.jpg

070501
SDLのクロスコンパイルに成功
一応、フレームバッファとマウスも組み込んだつもり。うまくいけばジョイパッド欲しいな。
./configure --host=sh3-linux --prefix=/usr/target/ --disable-video-qtopia --disable-video-photon --enable-video-fbcon --disable-video-direct --disable-video-ggi --disable-video-svga --disable-video-aalib -disable-video-dummy --disable-video-dga --disable-arts --disable-esd --disable-alsa --disable-video-x11 --disable-nasm --disable-debug


[root@localhost SDL-1.2.11]# make
/bin/sh ./build-scripts/mkinstalldirs build
mkdir -p -- build
/bin/sh ./libtool --mode=compile sh3-linux-gcc -g -O2 -I./include -D_GNU_SOURCE=1 -D_REENTRANT -DHAVE_LINUX_VERSION_H -c ./src/SDL.c -o build/SDL.lo
mkdir build/.libs
sh3-linux-gcc -g -O2 -I./include -D_GNU_SOURCE=1 -D_REENTRANT -DHAVE_LINUX_VERSION_H -c ./src/SDL.c -fPIC -DPIC -o build/.libs/SDL.o
**********************
sh3-linux-ranlib build/.libs/libSDL.a
creating build/libSDL.la
(cd build/.libs && rm -f libSDL.la && ln -s ../libSDL.la libSDL.la)
sh3-linux-gcc -g -O2 -I./include -D_GNU_SOURCE=1 -D_REENTRANT -DHAVE_LINUX_VERSION_H -c ./src/main/dummy/SDL_dummy_main.c -o build/SDL_dummy_main.o
sh3-linux-ar cru build/libSDLmain.a build/SDL_dummy_main.o
sh3-linux-ranlib build/libSDLmain.a v(^o^)

070430
[root@localhost SDL-1.2.11]# make
/bin/sh ./build-scripts/mkinstalldirs build
mkdir -p -- build
/bin/sh ./libtool --mode=compile sh3-linux-gcc -g -O2 -I./include -D_GNU_SOURCE=1 -fvisibility=hidden -D_REENTRANT -DHAVE_LINUX_VERSION_H -c ./src/SDL.c -o build/SDL.lo
libtool: compile: unable to infer tagged configuration
libtool: compile: specify a tag with `--tag'
make: *** [build/SDL.lo] エラー 1

070428
doomは320x200ピクセルなんで、VGA液晶の隅に表示される。
まれにこのようなデモ画面が出てくるが、マウスの反応が鈍い上にセレクトするとハングする。
LANをつなぐとハングしたときにgdbが終了してしまう。
DSC02458-w320.jpg DSC02456-w320.jpg

070424
# cd /usr/nxdoom                                                        
# ls
doom doom1.wad
# ./doom
DOOM Shareware Startup v1.10
V_Init: allocate screens.
M_LoadDefaults: Load system defaults.
Z_Init: Init zone memory allocation daemon.
W_Init: Init WADfiles.
adding ./doom1.wad
added
===========================================================================
Shareware!
===========================================================================
M_Init: Init miscellaneous info.
R_Init: Init DOOM refresh daemon - [.. ]
InitTextures
InitFlats........
InitSprites
InitColormaps
R_InitData
R_InitPointToAngle
R_InitTables
R_InitPlanes
R_InitLightTables
R_InitSkyMap
R_InitTranslationsTables
P_Init: Init Playloop state.
Segmentation fault
emacs_install1.gif


070423
sh3-linux-gcc  -g -O2  -I/usr/mwin/microwindows-0.90/src/include -L/usr/mwin/microwindows-0.90/src/lib -D_REENTRANT  -o doom  am_map.o d_items.o d_main.o d_net.o doomdef.o doomstat.o dstrings.o f_finale.o f_wipe.o g_game.o hu_lib.o hu_stuff.o i_main.o i_net.o 

i_sound.o i_system.o i_video.o info.o m_argv.o m_bbox.o m_cheat.o m_fixed.o m_menu.o m_misc.o m_random.o m_swap.o p_ceilng.o p_doors.o p_enemy.o p_floor.o p_inter.o p_lights.o p_map.o p_maputl.o p_mobj.o p_plats.o p_pspr.o p_saveg.o p_setup.o p_sight.o p_spec.o p_switch.o

p_telept.o p_tick.o p_user.o r_bsp.o r_data.o r_draw.o r_main.o r_plane.o r_segs.o r_sky.o r_things.o s_sound.o sounds.o st_lib.o st_stuff.o tables.o v_video.o w_wad.o wi_stuff.o z_zone.o -lm /usr/target/lib/libnano-X.a /usr/target/lib/libmwengine.a /usr/target/lib/libmwdrivers.a /usr/target/lib/libmwfonts.a
[root@localhost nxdoom]# make install
make[1]: ディレクトリ `/usr/ap/nxdoom' に入ります
/bin/sh ./mkinstalldirs /usr/target/mxdoom/bin
mkdir /usr/target/mxdoom
mkdir /usr/target/mxdoom/bin
/usr/bin/install -c doom /usr/target/mxdoom/bin/doom
make[1]: `install-data-am' に対して行うべき事はありません.
make[1]: ディレクトリ `/usr/ap/nxdoom' から出ます
[root@localhost nxdoom]# cd /usr/target/mxdoom/bin
[root@localhost bin]# ls -l
合計 1708
-rwxr-xr-x 1 root root 1737218 4月 23 22:25 doom
[root@localhost bin]# file doom
doom: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped
[root@localhost bin]# v(^o^)


070421
ついにSH7706ボードでThe Nano-X Window System(旧MicroWindows)が動き始めました。
動作がまだおかしいけど
表示はDIYS_LCDVGAを使ってます。
mwin01-w320.jpg mwin02-w320.jpg
mwin03-w320.jpg mwin04-w320.jpg


070418
# ./diysfb                                                                      
fb0: DIYSFB frame buffer device
Module Size Used by Not tainted
diys_mouse 2104 0
fbcon 32172 5
font 7760 1 fbcon
bitblit 4512 1 fbcon
diysfb 2492 1
cfbfillrect 3888 1 diysfb
cfbimgblt 2464 1 diysfb
softcursor 1584 1 diysfb
fb 28696 4 fbcon,bitblit,diysfb,softcursor
cfbcopyarea 3968 1 diysfb
Enter Main
GsInit #0
640x480x65536 linelen 1280 type 0 visual 2 bpp 16 id:DIYSFB
scr_fb1 MemAllocated psd->addr =0x29697000 psd->size =614400
memory test Address =0x29697000 0xffff
Gdopen #1
Gdopen #2
Gdopen #3
Gdopen #4
createfont: (height == 0) found builtin font System (0)
Gdopen #5
Gdopen #6
Gdopen #7
GsInit #1
GsInit #2
After Mouse Opened
createfont: (height == 0) found builtin font System (0)
After GdCreateFont
After #1
After #2
After #3
Segmentation fault


static struct fb_ops diysfb_ops = {
.owner= THIS_MODULE,
.fb_check_var= diysfb_check_var,
.fb_set_par= diysfb_set_par,
.fb_setcolreg= diysfb_setcolreg,
.fb_blank= diysfb_blank,
.fb_pan_display= diysfb_pan_display,
.fb_fillrect= cfb_fillrect, /* Needed !!! */
.fb_copyarea= cfb_copyarea,/* Needed !!! */
.fb_imageblit= cfb_imageblit,/* Needed !!! */
.fb_cursor= soft_cursor,/* Needed !!! */
};


psd->FillRect(psd, 0, 0, psd->xvirtres-1, psd->yvirtres-1,
GdFindColor(psd, wp->background)
);

void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
{
(?_?)

070404
MicroWindows を開発機で動作確認。
mwin_demo.gif mwin_chess.gif


070401
これかな!?
/* framebuffer information structures */

static struct fb_ops s1d13xxxfb_fbops = {
.owner= THIS_MODULE,
.fb_set_par= s1d13xxxfb_set_par,
.fb_setcolreg= s1d13xxxfb_setcolreg,
.fb_blank= s1d13xxxfb_blank,

.fb_pan_display= s1d13xxxfb_pan_display,

/* to be replaced by any acceleration we can */
.fb_fillrect= cfb_fillrect,
.fb_copyarea= cfb_copyarea,
.fb_imageblit= cfb_imageblit,
.fb_cursor= soft_cursor
};
static struct fb_ops epson1355fb_fbops = {
.owner = THIS_MODULE,
.fb_setcolreg = epson1355fb_setcolreg,
.fb_pan_display = epson1355fb_pan_display,
.fb_blank = epson1355fb_blank,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
.fb_read = epson1355fb_read,
.fb_write = epson1355fb_write, (゜-゜)
.fb_cursor = soft_cursor,
};




070331A
スナップショットにならないが。。。想像してください (^。^;)

妻と一緒に秋月 八潮店に行って来ました。
店内で妻 いわく
「一般的なもの 何もないのね」
・・・・・・・ (-_-;)

070331
# mknod /dev/fb0 c 29 0
# chmod 666 /dev/fb0
# echo 0 > /dev/fb0
-sh: cannot create /dev/fb0: No such device


070330
# cat /proc/interrupts                                                          
CPU0
16: 35947 IPR-IRQ timer
34: 1 IPR-IRQ NE2000
56: 0 IPR-IRQ SCI Receive Error
57: 209 IPR-IRQ SCI Receive Data Full
58: 0 IPR-IRQ SCI Break
59: 213 IPR-IRQ SCI Transmit Data Empty
# cat /proc/ioports
00000300-0000031f : ne

shlinux login: root                                                             
Password:
login[32]: root login on `ttySC1'

# modprobe s1d13xxxfb
# lsmod
Module Size Used by Not tainted
s1d13xxxfb 3840 0
cfbfillrect 3680 1 s1d13xxxfb
cfbimgblt 2464 1 s1d13xxxfb
softcursor 1584 1 s1d13xxxfb
fb 38536 2 s1d13xxxfb,softcursor
cfbcopyarea 3968 1 s1d13xxxfb
# modprobe fbcon
# lsmod
Module Size Used by Not tainted
fbcon 32028 0
font 3488 1 fbcon
bitblit 4512 1 fbcon
s1d13xxxfb 3840 0
cfbfillrect 3680 1 s1d13xxxfb
cfbimgblt 2464 1 s1d13xxxfb
softcursor 1584 1 s1d13xxxfb
fb 38536 4 fbcon,bitblit,s1d13xxxfb,softcursor
cfbcopyarea 3968 1 s1d13xxxfb
# cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
5 /dev/tty
5 /dev/console
5 /dev/ptmx
7 vcs
10 misc
13 input
29 fb
128 ptm
136 pts
204 ttySC

Block devices:
1 ramdisk
7 loop
43 nbd
254 shmmc




[root@localhost shmin]# make ARCH=sh CROSS_COMPILE=sh3-linux- modules
CHK include/linux/version.h
make[1]: `arch/sh/kernel/asm-offsets.s' は更新済みです
CHK include/asm-sh/asm-offsets.h
make[1]: `include/asm-sh/machtypes.h' は更新済みです
Building modules, stage 2.
MODPOST
[root@localhost shmin]# make ARCH=sh CROSS_COMPILE=sh3-linux- modules_install
INSTALL drivers/video/cfbcopyarea.ko
INSTALL drivers/video/cfbfillrect.ko
INSTALL drivers/video/cfbimgblt.ko
INSTALL drivers/video/console/bitblit.ko
INSTALL drivers/video/console/fbcon.ko
INSTALL drivers/video/console/font.ko
INSTALL drivers/video/fb.ko
INSTALL drivers/video/s1d13xxxfb.ko
INSTALL drivers/video/softcursor.ko
if [ -r System.map -a -x /sbin/depmod ]; then /sbin/depmod -ae -F System.map 2.6.12; fi
[root@localhost shmin]# depmod -a
[root@localhost shmin]#
[root@localhost shmin]# cat /lib/modules/2.6.12/modules.dep
/lib/modules/2.6.12/kernel/drivers/video/softcursor.ko: /lib/modules/2.6.12/kernel/drivers/video/fb.ko
/lib/modules/2.6.12/kernel/drivers/video/cfbcopyarea.ko:
/lib/modules/2.6.12/kernel/drivers/video/cfbimgblt.ko:
/lib/modules/2.6.12/kernel/drivers/video/fb.ko:
/lib/modules/2.6.12/kernel/drivers/video/cfbfillrect.ko:
/lib/modules/2.6.12/kernel/drivers/video/s1d13xxxfb.ko: /lib/modules/2.6.12/kernel/drivers/video/cfbfillrect.ko /lib/modules/2.6.12/kernel/drivers/video/cfbimgblt.ko /lib/modules/2.6.12/kernel/drivers/video/softcursor.ko /lib/modules/2.6.12/kernel/drivers/video/fb.ko /lib/modules/2.6.12/kernel/drivers/video/cfbcopyarea.ko
/lib/modules/2.6.12/kernel/drivers/video/console/bitblit.ko: /lib/modules/2.6.12/kernel/drivers/video/fb.ko
/lib/modules/2.6.12/kernel/drivers/video/console/fbcon.ko: /lib/modules/2.6.12/kernel/drivers/video/console/font.ko /lib/modules/2.6.12/kernel/drivers/video/console/bitblit.ko /lib/modules/2.6.12/kernel/drivers/video/fb.ko
/lib/modules/2.6.12/kernel/drivers/video/console/font.ko:



070328
video_resource.gif


070326
s1d13xxx.png
s1d13xxx_after.png
symbol_discarded.png
s1d13xxx_set_par.png