部分的にマシン語にするのでニーモニック、マシン語の順番に書く事にしていきます。
マシン語はVRAMのスプライト座標エリアの書き換えプログラムで
単にY座標を211から11にDECしていくプログラムです。
スプライトが定義されていれば、スプライトが動くようになります。
これがメインの流れです。アドレスは3604ではなくて7604hです^^;
D3hから0BhまでDEC(-1)していきます。
ゼロフラグがたたない場合はA000hにもどります。
だいたいバイト数に余裕をもたせるためにA020hにVRAM書き換えのサブになりました。
今のところはMSX-DOSもない、モニタアセンブラもないと、この方法になります。
前回はMSX-DOSを使っていたので別のスロットでしたから、
インタースロットコールしたりしていましたが、
同じスロットのアドレスになっているので、このままできます。
VRAMの読み書きはHLレジスタにVRAMアドレス、
Aレジスタに数値になります。
・VRAMを読み出す:NRDVRM(0174H)
送りのレジスタHL、返りのレジスタAF
変化するレジスタ:F
・VRAMに書き込む:NWRVRM(0177H)
送りのレジスタHL、送りのレジスタAF
変化するレジスタ:AF
ということで、マシン語でやってみると今度は速い。
スターソルジャーの雨のように飛んでくる敵よりも速すぎ(謎)
移動中の文字が見えません。
「インデックスレジスタのPUSH,POPでウエイトをかけるかな。」
ステート数は2つで30になります。
1文字テストではウエイトが欲しかったのですが、
5文字でスルっと動くようになりました。
1000 'save"mmap4.bas"
1010 CLEAR1000,&HA000:LINEINPUT"C:CASH >";I$:IFI$="C"THENCH=1
1020 COLOR15,1,0:I$="0123456789ABCDEFh":L=LEN(I$):SCREEN5:OPEN"grp:"AS#1
1030 IFCH=1THENBLOAD"0123.chr",S:GOTO1210
1040 FORI=1TOL
1050 PRESET(0,0):PRINT#1,MID$(I$,I,1)
1060 FORY=0TO7
1070 SPR$=""
1080 FORX=0TO7
1090 C=POINT(X,Y):S$="0"
1100 IFC=15THENS$="1"
1110 S0$=S0$+S$
1120 NEXT
1130 S1$=S1$+CHR$(VAL("&B"+S0$)):S0$=""
1140 NEXT
1150 S=S+1:SPRITE$(S)=S1$:S1$=""
1160 NEXT
1170 FORI=1TO17
1180 PUTSPRITE1,(100,100),15,I
1190 '
1200 NEXT:'BSAVE"0123.chr",&H7800,&H7FFF,S:END
1210 S=0:CLS
1220 PRESET(0,190):PRINT#1,":";AD$;"_"
1230 C$=INKEY$:IFC$=""GOTO1230
1240 IFS=4GOTO1280
1250 SS=INSTR(I$,C$)
1260 IFSSTHENAD$=AD$+C$:S=S+1:CS(S)=SS:GOTO1220
1270 GOTO1230
1280 CS(5)=17
1290 FORI=1TO4:C$=MID$(AD$,I,1):C=INSTR(I$,C$):NEXT
1300 GOSUB1490:DEFUSR=&HA000:
1340 LINE(50,0)-(511,211),15,B
1350 PUTSPRITE1,( 0,211-J),15,CS(1)
1360 PUTSPRITE2,( 8,211-J),15,CS(2)
1370 PUTSPRITE3,(16,211-J),15,CS(3)
1380 PUTSPRITE4,(24,211-J),15,CS(4)
1390 PUTSPRITE5,(32,211-J),15,CS(5)
1400 A=USR(0)
1410 LINE(50,11)-(511,11),15
1420 I$=INPUT$(1):END
1430 'Spr_atrib @7600h
1440 'x:211DEC11:D3H-0BH
1450 'Start_adr(ORG 0A000h)
1460 'Adrs:7604 7608 760C
1470 ' 7610 7614
1480 '***********************
1490 ' LD A,D3h
1500 POKE&HA000,&H3E
1510 POKE&HA001,&HD3
1520 'A002:CALL 0A020h
1530 POKE&HA002,&HCD
1540 POKE&HA003,&H20
1550 POKE&HA004,&HA0
1560 ' DEC A
1570 POKE&HA005,&H3D
1580 ' CP 0Bh
1590 POKE&HA006,&HFE
1600 POKE&HA007,&HB
1610 ' JP NZ,0A002h
1620 POKE&HA008,&HC2
1630 POKE&HA009,&H2
1640 POKE&HA00A,&HA0
1650 ' RET
1660 POKE&HA00B,&HC9
1670 'A020:LD HL,7604h
1680 POKE&HA020,&H21
1690 POKE&HA021,&H4
1700 POKE&HA022,&H76
1710 ' CALL 0177h
1720 POKE&HA023,&HCD
1730 POKE&HA024,&H77
1740 POKE&HA025,&H1
1790 'A026:LD HL,7608h
1800 POKE&HA026,&H21
1810 POKE&HA027,&H8
1820 POKE&HA028,&H76
1830 ' CALL 0177h
1840 POKE&HA029,&HCD
1850 POKE&HA02A,&H77
1860 POKE&HA02B,&H1
1870 ' RET
1880 'A02C:LD HL,760Ch
1890 POKE&HA02C,&H21
1900 POKE&HA02D,&HC
1910 POKE&HA02E,&H76
1920 ' CALL 0177h
1930 POKE&HA02F,&HCD
1940 POKE&HA030,&H77
1950 POKE&HA031,&H1
1960 'A032:LD HL,7610h
1970 POKE&HA032,&H21
1980 POKE&HA033,&H10
1990 POKE&HA034,&H76
2000 ' CALL 0177h
2010 POKE&HA035,&HCD
2020 POKE&HA036,&H77
2030 POKE&HA037,&H1
2040 'A038:LD HL,7614h
2050 POKE&HA038,&H21
2060 POKE&HA039,&H14
2070 POKE&HA03A,&H76
2080 ' CALL 0177h
2090 POKE&HA03B,&HCD
2100 POKE&HA03C,&H77
2110 POKE&HA03D,&H1
2120 POKE&HA03E,&HC9
2130 '
2140 RETURN
プログラムですが、&HA000からマシン語領域にしています。
まず、キャッシュを作ります。1200行を’BSAVEの’を消してください。
これでキャッシュができました。1200行をもとに戻します。
2回目の実行からCを入力するとスプライトが設定された状態になります。
次に4ケタの16進数の数を入力します。スルっと表示します。
MSX2パソコンで実行すると体感的にはMSXturboRかな。
こんなことも★
GraphicWorksはブログの画像と公開のバージョンの操作性があまりにも
違うのでGraphicWorks1.0gからGraphicWorksLiteというグレードアップしました。
基本操作はほとんど同じですが、Liteということで多少は表示など機能をアップしました。
今回は気合いが入って作ったのでウインドウが上になったり下になったりと
画面表示を自動で移動します。あとはいろいろと付けておきました。
あまりWindowsのスクロールバーって好きではないんです。
画面のかなり端にならないとスクロールしないところがありますからね。
でもワケありです。それはGraphicWorksの基本操作のみです。
GraphicWorksLite:
http://www.vector.co.jp/soft/win95/art/se491733.html
早速、雑誌掲載の依頼が来ました。
やはりネットではなかなか直ぐにはダウンロード数が上がりません。
雑誌などのメディアに載せることができれば、かなり変わってくると思います。
売り込むとなると個人で全国はなかなか難しいです。
こういう話があることはうれしいですね。フリーだからタダなんだけどね。
今まで5000回アクセス達成記念とかやっていたりもしていましたので
何か購読者のためにオマケでも考えたいですね。
IPの9月号に掲載される予定です。
さて、今日も暑かったです。昼休みにいろいろと話をしています。
「今までは28度にしていました。」
「やはり、現場は暑いので25度に戻した。」
「体調不良の熱中症予備軍が多いのでしかたないかな。」
いろいろな方に話をしてみましたが、この温度が多かったですね。
また、タイマーとか、暑くなってからとか、去年よりは節電意識が強いです。
まぁ、私も28度と言えば昼間の気温ですからね、
夕方帰って涼をとるので25度でいいと思います。