GALAXY WALL FX-890P
2009年3月3日
PJ誌上でPC-E200、PC-E500と発表されて、「TWIN」まで製作されている名作に「GALAXY WALL」があります。思わずはまってしまいます。
CPU(CASIO POWER USER)を名乗る私は(冗談ですよ)、友人Fや全国の「FX-890P/Z-1しか持ってないよー。」という人のために開発を始めたのでした。また、今、流行(はや)りの「Z-1GR」にも対応している予定です。(少なくとも文字化けはしません)
なお、この場を借りてオリジナルの作者の咳止組さんとPC-E500版の作者の佐伯俊道さんに感謝いたします。
プログラムの入力方法
マシン語で組まれております。まずマシン語エリアを確保します。BASICかCALで、
CLEAR 1024,1792,4096
と入力します。そしてプログラムリストを、活研モニタやROMモニタなどを使って、2000H~26FFHの範囲を打ちこんでください。
打ち終わったら、必ず外部記憶装置に保存してください。保存しましたね?実行は、
DEFSEG=0
CALL &H2000
です。くれぐれも入力するアドレスに注意してください。
遊び方
一連のシリーズと同じです。[8]と[2]で左端の自機を上下に動かします。[SPACE]で弾を打ちます。最初は2連射です、といっても画面に同時に出現できる弾の数が2つということです。(私は最初、一回[SPACE]を押すと弾が2つでると思っていました)
弾は右に飛んでいき、ブロック(インセキと書かないのは、JFPの辞書にないから)にぶつかると、同化します。縦一列にブロックが揃うとそのラインは消滅します。消滅したラインより左に列がある場合、消滅したラインより左のラインは右に移動します。
ラインが自機の所までくるとゲームオーバーです。なお、[6]でブロックを高速に左移動させることができます。
10ライン消すごとに右からアイテムが流れてきます。自機と重なると取ることができます。アイテムは時間制で複数のアイテムを併用することはできません。
ラインを消すと自機からの距離に応じてスコアが加算されます。
一応、重要なファクター(ポーズ)は見落としていません。[P]を押すとポーズがかかり、[RET]で解除します。リプレイは[RET]です。
アイテムの種類
4種類のアイテムがあります。その内の2つはおじゃまアイテムです。表1にアイテムの種類をまとめておきます。
プログラム
オールマシン語ゲーム二作目です。本当はBASICとLINKしようと思っていたのですが(スコアの表示など)、某氏の記事を読んでやめました。例によってソースリストを公開しますので(リスト2)、初心者の方は参考にして、上級者の方はアドバイスをください。なお、表2にアドレスマップ、主要なラベルとルーチンの解説をつけます。
表1ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
種類 | 効果
① |自機の弾が単発になります。
※ |一定時間動けません。但し、弾は撃てます。
③ |自機の弾が3連射になります。
④ |自機の弾が4連射になります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
表2ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
アドレスマップ
アドレス ラベル 解説
2000H START 初期設定
2055H L_1 スクロ-ルスピ-ド計算、乱数の種、自機消去
20A5H L_K ”STOP!”チェック、上移動
20B5H L_2 下移動
20C6H L_S 自機表示
20D3H PS_CHK ポ-ズチェック
210CH L_3 [スペ-ス]押したらショットする
2145H L_4 スクロ-ルする
2170H NEWBL_1 NEW BLOCK出現
2197H L_5 弾移動
21E9H SHM_P 弾表示
21F2H SHM_N 弾移動メイン
2209H SHM_3 弾移動ル-プ
2215H ATA_1 当り判定
2229H ATA_S 黒いもの表示
2240H ATA_2 BRAM移動ル-プ
2248H ATA_3 ATA_2補助
225EH ADD スコア計算&アイテム出現判定
22B4H SHM_4 ショット回ル-プ
22BFH L_6 アイテム処理
230FH ITEM_1 アイテム獲得
2338H ITEM_2 アイテム表示
233EH ITEM_3 アイテム時間切れ判定
2351H ITEM_4 自機表示
2368H OVER_1 ゲ-ムオ-バ-判定
2390H NO_OVER ゲ-ムオ-バ-ではない
2396H BDISP VRAM→LCDC
2415H BRAMPUT BRAM→VRAM
2440H PRINT PRINT
244DH FONTS 自己書き換え対象(FONTS+1)
2459H FONTO 自己書き換え対象(FONTO+1)
2478H PUT8CHR 8×8ドット表示
2497H GPRINT GPRINT
24D9H XY 座標(AH、AL)→BP
24E9H RND DL=0ー255
24ECH RNDDT 自己書き換え対象(RNDDT+1)
250EH INKEY 同時キ-入力
259BH SUJI DX 10進4桁表示
25BCH WARI 16bit 割算
25DDH CHR8 キャラ、文字デ-タ
269DH BRAM ワ-クエリア
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ダンプリスト
002000 B4 10 CD 41 FA B8 00 A0 8E C0 33 FF B0 23 AA B0
002010 35 AA FB BB 01 00 B4 3A CD 41 89 BF 59 24 8C C7
002020 81 EF 10 00 89 BF 4D 24 4B 8E C3 B8 00 78 8D 3E
002030 25 26 E8 0B 04 47 04 08 3C 20 75 F6 FC 8D 36 8F
002040 26 8D 3E E5 26 B9 0E 00 F3 A4 8D 3E 9D 26 33 C0
002050 B9 20 00 F3 AB 8B 16 EA 26 C7 06 F6 26 05 00 E8
002060 5A 05 8B C2 F7 D8 05 32 00 3D 14 00 7D 03 B8 14
002070 00 88 06 F3 26 32 ED 8A 0E EE 16 FE C1 E8 69 04
002080 E2 FB B4 00 8A 06 E5 26 B2 00 E8 EB 03 8A 2E E6
002090 26 E8 7A 04 8A C8 81 3E EF 26 00 00 74 07 80 3E
0020A0 F1 26 02 74 21 F6 C3 10 74 0B F6 C5 10 75 06 0A
0020B0 C9 74 02 FE C9 F6 C3 40 74 0C F6 C5 40 75 07 80
0020C0 F9 03 74 02 FE C1 88 0E E5 26 B4 00 8A C1 B2 02
0020D0 E8 A5 03 F6 C3 02 74 1A F6 C5 04 75 15 8D 3E 6B
0020E0 26 B8 18 A2 E8 59 03 E8 AC 02 E8 21 04 F6 C3 04
0020F0 74 F8 F6 C3 08 74 15 FE 06 E9 26 80 3E E9 26 04
002100 75 0A C6 06 E9 26 00 C6 06 F2 26 01 F6 C3 01 74
002110 34 F6 C5 01 75 2F 8A 06 F1 26 81 3E EF 26 00 00
002120 75 02 B0 02 3A 06 E7 26 76 1B 8A 06 E7 26 FE 06
002130 E7 26 8D 3E DD 26 32 E4 D0 E0 03 F8 88 25 8A 06
002140 E5 26 88 45 01 FE 0E F2 26 75 4C 8A 16 F3 26 88
002150 16 F2 26 B0 00 B4 01 E8 7F 03 8A 4E 00 88 4E FF
002160 FE C4 80 FC 10 75 F0 FE C0 3C 04 75 E8 B8 00 0F
002170 E8 66 03 C6 46 00 00 FE C0 3C 04 75 F3 B1 03 B4
002180 0F E8 65 03 80 E2 03 8A C2 E8 4D 03 C6 46 00 01
002190 FE C9 75 EB E8 7E 02 FE 0E E8 26 74 03 E9 1F 01
0021A0 C6 06 E8 26 04 8A 1E E7 26 0A DB 75 03 E9 0F 01
0021B0 8D 3E DD 26 8A 25 8A 45 01 B2 00 E8 BA 02 FE C4
0021C0 E8 16 03 FE CC 80 7E 00 00 75 1E FE C4 80 FC 0F
0021D0 74 20 FE 05 FE C4 E8 00 03 FE CC 80 7E 00 00 75
0021E0 08 B2 03 E8 92 02 E9 CB 00 C6 46 FF 01 B2 01 E8
0021F0 86 02 8A EB FE CD 8B F7 0A ED 74 0D 81 C6 02 00
002200 8B 14 89 54 FE FE CD 75 EF FE 0E E7 26 81 EF 02
002210 00 B0 00 8A E8 E8 C1 02 02 6E 00 FE C0 3C 04 75
002220 F4 80 FD 04 74 03 E9 8B 00 B0 00 B2 08 E8 48 02
002230 FE C0 3C 04 75 F7 E8 5D 01 B9 00 08 E2 FE 0A E4
002240 74 1C B0 00 8A FC 8A E7 E8 8E 02 8A 6E FF 88 6E
002250 00 FE CC 75 F3 FE C0 3C 04 75 EB E8 B7 01 8A D7
002260 32 F6 80 F2 0F D0 EA 01 16 EC 26 8B 16 EC 26 B8
002270 08 A8 E8 26 03 FF 06 EA 26 8B 16 EA 26 B0 10 E8
002280 19 03 C7 06 F6 26 0A 00 E8 31 03 0B C9 75 25 C6
002290 06 EE 26 01 C6 06 F8 26 0E C6 06 F4 26 04 E8 48
0022A0 02 80 E2 03 88 16 F9 26 E8 3E 02 80 E2 03 FE C2
0022B0 88 16 FA 26 81 C7 02 00 FE CB 74 03 E9 F5 FE 8D
0022C0 3E 71 26 8A 16 F1 26 D0 E2 8A F2 D0 E2 02 D6 32
0022D0 F6 03 FA B8 18 A2 E8 67 01 80 3E EE 26 00 74 5E
0022E0 8A 26 F8 26 8A 06 F9 26 FE 0E F4 26 75 50 E8 E8
0022F0 01 8A 56 00 E8 81 01 FE 0E F8 26 FE CC C6 06 F4
002300 26 04 80 FC FF 75 08 C6 06 EE 26 00 E9 2F 00 8A
002310 16 FA 26 0A E4 75 21 3A 06 E5 26 75 1B 88 26 EE
002320 26 C7 06 EF 26 F4 01 88 16 F1 26 80 3E F1 26 02
002330 75 06 C7 06 EF 26 C8 00 80 C2 03 E8 3A 01 B4 00
002340 80 3E F1 26 00 74 0A FF 0E EF 26 75 04 88 26 F1
002350 26 B4 00 8A 06 E5 26 B2 02 E8 1C 01 8A 1E F5 26
002360 88 1E E6 26 B2 00 33 C0 E8 6E 01 02 56 00 FE C0
002370 3C 04 75 F4 0A D2 74 18 B8 0C 08 8D 3E 59 26 E8
002380 BE 00 E8 11 00 E8 86 01 F6 C3 04 74 F8 E9 70 FC
002390 E8 03 00 E9 BF FC 60 BE 30 06 FA B8 00 A0 8E C0
0023A0 33 FF B2 04 B0 21 AA 8A C2 AA B0 22 AA B0 00 AA
0023B0 B0 20 AA B9 20 00 AC C0 E8 04 AA 47 E2 F8 FE C2
0023C0 47 B0 21 AA 8A C2 AA B0 22 AA B0 00 AA B0 20 AA
0023D0 B9 20 00 8A 64 E0 AC C1 E8 04 AA 47 E2 F5 80 FA
0023E0 10 75 DB B2 03 81 EE 20 00 FE C2 47 B0 21 AA 8A
0023F0 C2 AA B0 22 AA B0 20 AA B0 20 AA B9 20 00 8A 64
002400 E0 AC C1 E8 04 AA 47 E2 F5 80 FA 10 75 DB 33 C0
002410 8E C0 61 FB C3 50 33 C0 8D 2E 9D 26 8A 56 00 E8
002420 56 00 45 FE C4 80 FC 0F 75 F2 B4 00 45 FE C0 3C
002430 04 75 E9 B4 00 8A 06 E5 26 B2 02 E8 3A 00 58 C3
002440 50 52 26 8A 15 0A D2 74 2C 47 06 57 50 B8 00 E0
002450 8E C0 8A C2 32 E4 C1 E0 03 05 F4 08 8B F8 58 E8
002460 35 00 5F 07 80 C4 06 80 FC BF 72 D6 80 E4 07 04
002470 08 3C 20 72 CD 5A 58 C3 60 32 F6 C0 D2 03 8D 36
002480 DD 25 03 F2 C0 E0 06 C1 E8 03 8B F8 81 C7 30 06
002490 B9 08 00 F3 A4 61 C3 60 B2 08 32 FF 8A D8 8A EC
0024A0 80 E5 07 25 00 F8 C1 E8 06 03 C3 05 30 06 8B F0
0024B0 BB 00 FF 8A CD D3 EB F7 D3 8B C2 26 8A 35 47 32
0024C0 D2 8A CD D3 EA C1 E2 02 20 3C 20 5C 20 08 34 08
0024D0 54 20 46 FE C8 75 E4 61 C3 50 C0 E0 04 0A C4 32
0024E0 E4 8D 2E 9D 26 03 E8 58 C3 50 53 51 B9 DB 03 8A
0024F0 FD 8A D9 03 CB 03 CB 8A D1 02 D5 8A EA 81 C1 38
002500 00 BB 01 00 89 8F EC 24 8A D5 59 5B 58 C3 FA 50
002510 52 BA 00 02 B8 FF 1F EF 33 C0 EF B8 01 00 E8 66
002520 00 32 C4 A8 41 74 04 B4 7F CD 41 33 DB B8 00 01
002530 E8 54 00 24 50 8A D8 B8 00 02 E8 4A 00 C1 D8 03
002540 24 08 0A D8 B8 40 00 E8 3D 00 24 02 0A D8 B8 10
002550 00 E8 33 00 C0 D8 07 24 01 0A D8 B8 80 00 E8 26
002560 00 C1 D8 07 24 04 0A D8 88 1E F5 26 33 C0 E7 46
002570 BA 00 02 B8 FF 07 EF E8 19 00 BA 04 02 B0 03 EE
002580 FE C8 EE 5A 58 FB C3 BA 00 02 EF E8 05 00 BA 02
002590 02 ED C3 51 B9 09 00 E2 FE 59 C3 60 8D 3E FB 26
0025A0 BD 03 00 C7 06 F6 26 0A 00 E8 10 00 80 C1 30 88
0025B0 0B 81 ED 01 00 73 F2 E8 86 FE 61 C3 50 33 C9 B0
0025C0 10 03 D2 87 CA 13 D2 1B 16 F6 26 72 04 41 E9 04
0025D0 00 03 16 F6 26 87 CA 2C 01 75 E6 58 C3 00 00 00
0025E0 00 00 00 00 00 FF 81 AB 97 AB 97 BF FF 77 92 9E
0025F0 F5 9F FE F2 77 00 3F 21 23 23 2F 3F 00 7E F7 E7
002600 F7 F7 F7 E3 7E 42 A5 5A 3C 3C 5A A5 42 7E C3 FB
002610 C3 FB FB C3 7E 7E DB DB C3 FB FB FB 7E FF FF FF
002620 FF FF FF FF FF 7C 47 61 6C 61 78 79 20 57 61 6C
002630 6C 00 7C 20 53 63 6F 72 65 3A 30 30 30 30 00 7C
002640 20 4C 69 6E 65 73 3A 30 30 30 30 00 7C 20 49 74
002650 65 6D 3A 20 20 20 20 20 00 20 47 20 41 20 4D 20
002660 45 20 4F 20 56 20 45 20 52 20 00 50 41 55 53 45
002670 00 20 20 20 20 20 00 31 53 48 4F 54 00 53 54 4F
002680 50 21 00 33 53 48 4F 54 00 34 53 48 4F 54 00 01
002690 00 00 04 00 00 00 00 00 00 00 00 00 01 00 00 00
0026A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0026B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0026C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0026D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0026E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0026F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ソースリスト
;**************************************
;GALAXY WALL FX-890P
;PC-E200 By 咳止組
;PC-E500 By 佐伯 俊道
;FX-890P By ABCP
;From 1995/09/20 21:00:26
;Till 1995/10/24 22:10:52
;**************************************
ORG 2000H
;**************************************
;START
;**************************************
START:
MOV AH,10H ;CLS(BIOS)
INT 41H
CLI ;スクリ-ンモ-ドの変換
MOV AX,0A000H
MOV ES,AX
XOR DI,DI
MOV AL,023H
STOSB
MOV AL,035H
STOSB
STI
MOV BX,0001H
MOV AH,3AH ;フォントアドレス=ES:[DI]
INT 41H
DB 089H,0BFH ;MOV [BX+FONTO],DI
DW FONTO
MOV DI,ES
SUB DI,10H ;CHR$(32)のアドレスが返るから
DB 089H,0BFH ;100 BYTE引く
DW FONTS ;MOV [BX+FONTS],DI
DEC BX ;BX=0
MOV ES,BX
MOV AX,07800H
LEA DI,SCREEN ;LEA=MOV (REGISTER),OFFSET LABEL
PR_LOOP:
CALL PRINT
INC DI
ADD AL,8
CMP AL,32
JNE PR_LOOP
CLD
LEA SI,WRITE ;まとめて転送
LEA DI,Y
MOV CX,14 ;14 BYTE
REP MOVSB
LEA DI,BRAM
XOR AX,AX
MOV CX,32
REP STOSW
;**************************************
;MAIN
;**************************************
L_1:
MOV DX,LINE ;SC=-(LINE\5)+50
MOV WORD PTR WARI1,5 ;(20=<SC=<50)
CALL WARI
MOV AX,DX
NEG AX
ADD AX,50
CMP AX,20
JGE SC_1
MOV AX,20
SC_1:
MOV SC,AL
XOR CH,CH ;TIMERに応じてランダムル-プ
DB 08AH,00EH
DW 016EEH ;MOV CL,[16EE]
INC CL
RND_LOOP:
CALL RND
LOOP RND_LOOP
MOV AH,0 ;自機クリア
MOV AL,Y
MOV DL,0
CALL PUT8CHR
MOV CH,LK ;LK=LAST KEY
CALL INKEY
MOV CL,AL
CMP WORD PTR ITEMT,0 ;"STOP!"チェック
JE L_K
CMP BYTE PTR ITEMG,2
JE L_S
L_K: ;上移動
TEST BL,10H ;8
JZ L_2
TEST CH,10H ;押しっぱなし禁止
JNZ L_2
OR CL,CL ;=CMP CL,0
JE L_2
DEC CL ;Y=Y-1
L_2: ;下移動
TEST BL,40H ;2
JZ L_S
TEST CH,40H
JNZ L_S
CMP CL,3
JE L_S
INC CL
L_S: ;自機表示
MOV Y,CL
MOV AH,0
MOV AL,CL
MOV DL,2
CALL PUT8CHR
PS_CHK: ;ポ-ズチェック
TEST BL,02H ;P
JZ NOT_PS
TEST CH,04H ;CR
JNZ NOT_PS
LEA DI,PAUSE ;PRINT "PAUSE"
MOV AX,0A218H
CALL PRINT
CALL BDISP ;こうしないと見えない
PS_CHK2:
CALL INKEY
TEST BL,04H
JZ PS_CHK2
NOT_PS: ;高速移動
TEST BL,08H ;6
JZ L_3
INC BYTE PTR TIMING
CMP BYTE PTR TIMING,4 ;4回押し続けないとダメ
JNE L_3
MOV BYTE PTR TIMING,0
MOV BYTE PTR SCROLLC,1 ;1=スクロ-ル可能
L_3: ;弾発射
TEST BL,01H ;SPC
JZ L_4
TEST CH,01H
JNZ L_4
MOV AL,ITEMG ;ITEM GET=持ってるアイテム
CMP WORD PTR ITEMT,0 ;ITEM TIME=残り時間
JNE PLUS_1
MOV AL,2
PLUS_1:
CMP AL,SHOT
JNA L_4
MOV AL,SHOT
INC BYTE PTR SHOT
LEA DI,SHOTXY
XOR AH,AH
SAL AL,1
ADD DI,AX
MOV [DI],AH
MOV AL,Y
DB 088H,045H,001H ;MOV [DI+1],AL
L_4: ;スクロ-ル
DEC BYTE PTR SCROLLC
JNZ L_5
MOV DL,SC
MOV SCROLLC,DL
MOV AL,0
SCRL_1:
MOV AH,1
SCRL_2:
CALL XY
MOV CL,[BP]
DB 088H,04EH,0FFH ;MOV [BP-1],CL
INC AH
CMP AH,16
JNE SCRL_2
INC AL
CMP AL,4
JNE SCRL_1
MOV AX,0F00H
NEWBL_1: ;新しいブロック出現場所クリア
CALL XY
MOV BYTE PTR [BP],0
INC AL
CMP AL,4
JNE NEWBL_1
MOV CL,3
NEWBL_2:
MOV AH,15
CALL RND ;DL=RND
AND DL,03H ;DL=(0-3)
MOV AL,DL
CALL XY
MOV BYTE PTR [BP],1
DEC CL
JNE NEWBL_2
CALL BRAMPUT
L_5:
DEC BYTE PTR SHOTC
JZ CO_DOWN
JMP L_6
CO_DOWN:
MOV BYTE PTR SHOTC,4
MOV BL,SHOT
OR BL,BL ;CMP BL,0
JNE SHM_R
JMP L_6
SHM_R:
LEA DI,SHOTXY
SHM_1:
MOV AH,[DI]
DB 08AH,045H,001H ;MOV AL,[DI+1]
MOV DL,00H
CALL PUT8CHR
INC AH
CALL XY
DEC AH
CMP BYTE PTR [BP],0
JNE SHM_P
INC AH
CMP AH,15
JE SHM_N
INC BYTE PTR [DI]
INC AH
CALL XY
DEC AH
CMP BYTE PTR [BP],0
JNE SHM_P
MOV DL,3
CALL PUT8CHR
JMP SHM_4
SHM_P:
DB 0C6H,046H,0FFH,001H ;MOV [BP-1],1
MOV DL,01H
CALL PUT8CHR
SHM_N:
MOV CH,BL
DEC CH
MOV SI,DI
SHM_2:
OR CH,CH ;CMP CH,0
JE SHM_3
ADD SI,2
MOV DX,[SI]
DB 089H,054H,0FEH ;MOV [SI-2],DX
DEC CH
JNZ SHM_2 ;JMPでもJNZでもOK
SHM_3:
DEC BYTE PTR SHOT
SUB DI,2
;**************************************
;当り判定
;**************************************
MOV AL,0
MOV CH,AL
ATA_1:
CALL XY
ADD CH,[BP]
INC AL
CMP AL,4
JNE ATA_1
CMP CH,4 ;揃った?
JE ATA_S
JMP SHM_4
ATA_S:
MOV AL,0
MOV DL,8 ;消えたとき黒くなる
ATA_C:
CALL PUT8CHR
INC AL
CMP AL,4
JNE ATA_C
CALL BDISP
MOV CX,00800H ;WAIT
ATA_L:
LOOP ATA_L
OR AH,AH ;CMP AH,0
JE ADD
MOV AL,0
MOV BH,AH
ATA_2:
MOV AH,BH
ATA_3:
CALL XY
DB 08AH,06EH,0FFH ;MOV CH,[BP-1]
MOV [BP],CH
DEC AH
JNZ ATA_3
INC AL
CMP AL,4
JNE ATA_2
CALL BRAMPUT
ADD:
MOV DL,BH
XOR DH,DH
XOR DL,0FH ;下位4bit反転
SHR DL,1 ;DL=DL\2
ADD SCORE,DX
MOV DX,SCORE
MOV AX,0A808H
CALL SUJI
INC WORD PTR LINE
MOV DX,LINE
MOV AL,10H
CALL SUJI
;ITEM
MOV WORD PTR WARI1,10
CALL WARI
OR CX,CX ;CMP CX,0
JNE SHM_4
MOV BYTE PTR ITEMF,1
MOV BYTE PTR ITEMX,14
MOV BYTE PTR ITEMI,4
CALL RND
AND DL,03H
MOV BYTE PTR ITEMY,DL
CALL RND
AND DL,3
INC DL
MOV BYTE PTR ITEMW,DL
SHM_4:
ADD DI,2
DEC BL
JZ L_6
JMP SHM_1
;**************************************
;アイテム処理
;**************************************
L_6:
LEA DI,ITEMM
MOV DL,ITEMG ;×6
SAL DL,1
MOV DH,DL
SAL DL,1
ADD DL,DH
XOR DH,DH
ADD DI,DX
MOV AX,0A218H
CALL PRINT ;アイテム表示
CMP BYTE PTR ITEMF,0
JE ITEM_3
MOV AH,ITEMX
MOV AL,ITEMY
DEC BYTE PTR ITEMI
JNZ ITEM_3
CALL XY
MOV DL,[BP]
CALL PUT8CHR
DEC BYTE PTR ITEMX
DEC AH
MOV BYTE PTR ITEMI,4
CMP AH,0FFH
JNE ITEM_1
MOV BYTE PTR ITEMF,0
JMP ITEM_3
ITEM_1:
MOV DL,ITEMW
OR AH,AH ;CMP AH,0
JNE ITEM_2
CMP AL,Y
JNE ITEM_2
MOV BYTE PTR ITEMF,AH ;必ずAH=0になっている
MOV WORD PTR ITEMT,500
MOV ITEMG,DL
CMP BYTE PTR ITEMG,2
JNE ITEM_2
MOV WORD PTR ITEMT,200
ITEM_2:
ADD DL,3 ;持っているアイテム表示
CALL PUT8CHR
ITEM_3:
MOV AH,0
CMP BYTE PTR ITEMG,0
JE ITEM_4
DEC WORD PTR ITEMT
JNZ ITEM_4
MOV BYTE PTR ITEMG,AH ;必ずAH=0です
ITEM_4:
MOV AH,0
MOV AL,Y
MOV DL,2
CALL PUT8CHR
MOV BL,KEY_DAT
MOV LK,BL
;**************************************
;GAME OVER
;**************************************
MOV DL,0
XOR AX,AX
OVER_1:
CALL XY
ADD DL,[BP]
INC AL
CMP AL,4
JNE OVER_1
OR DL,DL ;CMP DL,0
JE NO_OVER
MOV AX,080CH
LEA DI,OVER
CALL PRINT
CALL BDISP
OVER_2:
CALL INKEY
TEST BL,04H ;CR
JZ OVER_2
JMP START
NO_OVER:
CALL BDISP
JMP L_1
;**************************************
;サブル-チンズ
;**************************************
BDISP: ;VRAM=>LCD
PUSHA
MOV SI,630H
CLI
MOV AX,0A000H
MOV ES,AX
XOR DI,DI
MOV DL,4
MOV AL,021H
STOSB
MOV AL,DL
STOSB
MOV AL,022H
STOSB
MOV AL,0
STOSB
MOV AL,020H
STOSB
MOV CX,32
BDISP_1:
LODSB
DB 0C0H,0E8H,004H ;SHR AL,4
STOSB
INC DI
LOOP BDISP_1
BDISP_2:
INC DL
INC DI
MOV AL,021H
STOSB
MOV AL,DL
STOSB
MOV AL,022H
STOSB
MOV AL,0
STOSB
MOV AL,020H
STOSB
MOV CX,32
BDISP_3:
DB 08AH,064H,0E0H
LODSB
DB 0C1H,0E8H,004H
STOSB
INC DI
LOOP BDISP_3
CMP DL,16
JNZ BDISP_2
MOV DL,3
SUB SI,32
BDISP_4:
INC DL
INC DI
MOV AL,021H
STOSB
MOV AL,DL
STOSB
MOV AL,022H
STOSB
MOV AL,32
STOSB
MOV AL,020H
STOSB
MOV CX,32
BDISP_5:
DB 08AH,064H,0E0H
LODSB
DB 0C1H,0E8H,004H
STOSB
INC DI
LOOP BDISP_5
CMP DL,16
JNZ BDISP_4
XOR AX,AX
MOV ES,AX
POPA
STI
RET
BRAMPUT: ;ブロックプット
PUSH AX
XOR AX,AX
LEA BP,BRAM
BRAM_1:
MOV DL,[BP]
CALL PUT8CHR
INC BP
INC AH
CMP AH,15
JNE BRAM_1
MOV AH,0
INC BP
INC AL
CMP AL,4
JNE BRAM_1
MOV AH,0
MOV AL,Y
MOV DL,2
CALL PUT8CHR
POP AX
RET
PRINT: ;PRINT
PUSH AX
PUSH DX
PRINT2:
MOV DL,ES:[DI]
OR DL,DL ;CMP DL,0
JZ PR_END
INC DI
PUSH ES
PUSH DI
PUSH AX
FONTS:
MOV AX,0E000H ;自己書き換え
MOV ES,AX
MOV AL,DL
XOR AH,AH
DB 0C1H,0E0H,003H
FONTO:
ADD AX,08F4H ;自己書き換え
MOV DI,AX
POP AX
CALL GPRINT
POP DI
POP ES
ADD AH,6 ;X座標加算
CMP AH,191
JC PRINT2
AND AH,7 ;CR+LF
ADD AL,8
CMP AL,32
JC PRINT2
PR_END:
POP DX
POP AX
RET
PUT8CHR:
PUSHA
XOR DH,DH
DB 0C0H,0D2H,003H ;SHL DL,3
LEA SI,CHR8
ADD SI,DX
DB 0C0H,0E0H,006H ;SHL AX,6
DB 0C1H,0E8H,003H ;SHR AX,3
MOV DI,AX
ADD DI,630H
MOV CX,8
REP MOVSB
POPA
RET
GPRINT: ;活研参照
PUSHA
MOV DL,08H
XOR BH,BH
MOV BL,AL
MOV CH,AH
AND CH,07H
AND AX,0F800H
DB 0C1H,0E8H,006H
ADD AX,BX
ADD AX,630H
MOV SI,AX
MOV BX,0FF00H
MOV CL,CH
SHR BX,CL
NOT BX
MOV AX,DX
GPRINT_1:
MOV DH,ES:[DI]
INC DI
XOR DL,DL
MOV CL,CH
SHR DX,CL
DB 0C1H,0E2H,002H ;SHL DX,2
AND [SI],BH
DB 020H,05CH,020H
OR [SI],DH
DB 008H,054H,020H
INC SI
DEC AL
JNZ GPRINT_1
POPA
RET
XY: ;仮想配列変数
PUSH AX
DB 0C0H,0E0H,004H ;SHL AL,4
OR AL,AH
XOR AH,AH
LEA BP,BRAM
ADD BP,AX
POP AX
RET
RND: ;ランダム
PUSH AX
PUSH BX
PUSH CX
RNDDT:
MOV CX,03DBH
MOV BH,CH
MOV BL,CL
ADD CX,BX
ADD CX,BX
MOV DL,CL
ADD DL,CH
MOV CH,DL
ADD CX,0038H
MOV BX,0001H
DB 089H,08FH
DW RNDDT ;MOV [BX+RNDDT],CX
MOV DL,CH
POP CX
POP BX
POP AX
RET
INKEY: ;INKEY$
CLI
PUSH AX
PUSH DX
MOV DX,200H
MOV AX,1FFFH
OUT DX,AX
XOR AX,AX
OUT DX,AX
MOV AX,0001H
CALL KEY
XOR AL,AH
TEST AL,41H
JZ K_1
MOV AH,07FH
INT 41H
K_1:
XOR BX,BX
MOV AX,0100H ;8,2
CALL KEY
AND AL,50H
MOV BL,AL
MOV AX,0200H ;6
CALL KEY
DB 0C1H,0D8H,003H
AND AL,08H
OR BL,AL
MOV AX,0040H ;P
CALL KEY
AND AL,02H
OR BL,AL
MOV AX,0010H ;SPC
CALL KEY
DB 0C0H,0D8H,007H
AND AL,01H
OR BL,AL
MOV AX,0080H ;CR
CALL KEY
DB 0C1H,0D8H,007H
AND AL,04H
OR BL,AL
MOV KEY_DAT,BL
XOR AX,AX
OUT 46H,AX
MOV DX,200H
MOV AX,007FFH
OUT DX,AX
CALL K_WAIT
MOV DX,204H
MOV AL,03H
OUT DX,AL
DEC AL
OUT DX,AL
POP DX
POP AX
STI
RET
KEY:
MOV DX,200H
OUT DX,AX
CALL K_WAIT
MOV DX,202H
IN AX,DX
RET
K_WAIT:
PUSH CX
MOV CX,0009H
K_LOOP:
LOOP K_LOOP
POP CX
RET
SUJI: ;10進4桁表示
PUSHA
LEA DI,SJWORK
MOV BP,3
MOV WORD PTR WARI1,10
SJ_1:
CALL WARI
ADD CL,48
MOV [DI+BP],CL
SUB BP,1
JNC SJ_1
SJ_2:
CALL PRINT
POPA
RET
WARI: ;DX/[WARI1]=DX...CX
PUSH AX
XOR CX,CX
MOV AL,16
WARLP1:
ADD DX,DX
XCHG CX,DX
ADC DX,DX
SBB DX,WORD PTR WARI1
JC WARSK1
INC CX
JMP WARSK2
WARSK1:
ADD DX,WORD PTR WARI1
WARSK2:
XCHG CX,DX
SUB AL,1
JNZ WARLP1
POP AX
RET
;**************************************
;DATA
;**************************************
CHR8 DB 000H,000H,000H,000H
DB 000H,000H,000H,000H
DB 0FFH,081H,0ABH,097H
DB 0ABH,097H,0BFH,0FFH
DB 077H,092H,09EH,0F5H
DB 09FH,0FEH,0F2H,077H
DB 000H,03FH,021H,023H
DB 023H,02FH,03FH,000H
DB 07EH,0F7H,0E7H,0F7H
DB 0F7H,0F7H,0E3H,07EH
DB 042H,0A5H,05AH,03CH
DB 03CH,05AH,0A5H,042H
DB 07EH,0C3H,0FBH,0C3H
DB 0FBH,0FBH,0C3H,07EH
DB 07EH,0DBH,0DBH,0C3H
DB 0FBH,0FBH,0FBH,07EH
DB 0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH
SCREEN DB '|Galaxy Wall'
DB 0
DB '| Score:0000'
DB 0
DB '| Lines:0000'
DB 0
DB '| Item: '
DB 0
OVER DB ' G A M E O V'
DB ' E R '
DB 0
PAUSE DB 'PAUSE'
DB 0
ITEMM DB ' '
DB 0
DB '1SHOT'
DB 0
DB 'STOP!'
DB 0
DB '3SHOT'
DB 0
DB '4SHOT'
DB 0
WRITE DB 1,0,0,4,0
DW 0,0
DB 0
DW 0
DB 0,1
BRAM DB 64 DUP(?)
SHOTXY DB 8 DUP(?)
Y DB 1 DUP(?)
LK DB 1 DUP(?)
SHOT DB 1 DUP(?)
SHOTC DB 1 DUP(?)
TIMING DB 1 DUP(?)
LINE DW 1 DUP(?)
SCORE DW 1 DUP(?)
ITEMF DB 1 DUP(?)
ITEMT DW 1 DUP(?)
ITEMG DB 1 DUP(?)
SCROLLC DB 1 DUP(?)
SC DB 1 DUP(?)
ITEMI DB 1 DUP(?)
KEY_DAT DB 1 DUP(?)
WARI1 DW 1 DUP(?)
ITEMX DB 1 DUP(?)
ITEMY DB 1 DUP(?)
ITEMW DB 1 DUP(?)
SJWORK DB 4 DUP(?)
DB 0
END
BASIC版インストーラー
ブログの読者の方がBASIC版のインストーラーを作成してくださいました。ありがとうございました。
10 'GALAXYWALL for FX-890P/Z-1
20 '
30 ' 1997(C)ABCP software
40 '
50 'CLEAR 1024,1792,4096トニュウリョク
60 '
100 DEFSEG=0:CLEAR ,1792
110 CLS:GOSUB *DSP:GOSUB *LDBIN
120 PRINT "MAKE BLOCK COLUMNS TO ERASE!"
130 PRINT " HIT RET KEY TO START!"
140 A$=INKEY$:IF A$<>CHR$(13) THEN 140
150 CALL &H2000
160 END
170 '
180 *DSP
190 PRINT " GALAXYWALL for FX-890P/Z-1"
200 PRINT "8,2:move up,down SPACE:missile"
210 PRINT "6:motion acceleration of blocks"
220 RETURN
230 '
240 *LDBIN
250 RESTORE
260 READ ADSTART, BINSIZE
270 DCNT=1
280 READ POI$
290 FOR I=1 TO BINSIZE
300 POKE ADSTART+I-1,VAL("&H"+MID$(POI$,2*DCNT-1,2))
310 DCNT=DCNT+1
320 IF DCNT>16 AND I<BINSIZE THEN DCNT=1:READ POI$:LOCATE 0,3:PRINT "BLOAD:";I;"bytes";
330 NEXT:LOCATE 0,3:PRINT "BLOAD:";BINSIZE;"bytes -- COMPLETED."
340 RETURN
990 DATA 8192, 1792
1000 DATA B410CD41FAB800A08EC033FFB023AAB0
1010 DATA 35AAFBBB0100B43ACD4189BF59248CC7
1020 DATA 81EF100089BF4D244B8EC3B800788D3E
1030 DATA 2526E80B044704083C2075F6FC8D368F
1040 DATA 268D3EE526B90E00F3A48D3E9D2633C0
1050 DATA B92000F3AB8B16EA26C706F6260500E8
1060 DATA 5A058BC2F7D80532003D14007D03B814
1070 DATA 008806F32632ED8A0EEE16FEC1E86904
1080 DATA E2FBB4008A06E526B200E8EB038A2EE6
1090 DATA 26E87A048AC8813EEF2600007407803E
1100 DATA F126027421F6C310740BF6C51075060A
1110 DATA C97402FEC9F6C340740CF6C540750780
1120 DATA F9037402FEC1880EE526B4008AC1B202
1130 DATA E8A503F6C302741AF6C50475158D3E6B
1140 DATA 26B818A2E85903E8AC02E82104F6C304
1150 DATA 74F8F6C3087415FE06E926803EE92604
1160 DATA 750AC606E92600C606F22601F6C30174
1170 DATA 34F6C501752F8A06F126813EEF260000
1180 DATA 7502B0023A06E726761B8A06E726FE06
1190 DATA E7268D3EDD2632E4D0E003F888258A06
1200 DATA E526884501FE0EF226754C8A16F32688
1210 DATA 16F226B000B401E87F038A4E00884EFF
1220 DATA FEC480FC1075F0FEC03C0475E8B8000F
1230 DATA E86603C6460000FEC03C0475F3B103B4
1240 DATA 0FE8650380E2038AC2E84D03C6460001
1250 DATA FEC975EBE87E02FE0EE8267403E91F01
1260 DATA C606E826048A1EE7260ADB7503E90F01
1270 DATA 8D3EDD268A258A4501B200E8BA02FEC4
1280 DATA E81603FECC807E0000751EFEC480FC0F
1290 DATA 7420FE05FEC4E80003FECC807E000075
1300 DATA 08B203E89202E9CB00C646FF01B201E8
1310 DATA 86028AEBFECD8BF70AED740D81C60200
1320 DATA 8B148954FEFECD75EFFE0EE72681EF02
1330 DATA 00B0008AE8E8C102026E00FEC03C0475
1340 DATA F480FD047403E98B00B000B208E84802
1350 DATA FEC03C0475F7E85D01B90008E2FE0AE4
1360 DATA 741CB0008AFC8AE7E88E028A6EFF886E
1370 DATA 00FECC75F3FEC03C0475EBE8B7018AD7
1380 DATA 32F680F20FD0EA0116EC268B16EC26B8
1390 DATA 08A8E82603FF06EA268B16EA26B010E8
1400 DATA 1903C706F6260A00E831030BC97525C6
1410 DATA 06EE2601C606F8260EC606F42604E848
1420 DATA 0280E2038816F926E83E0280E203FEC2
1430 DATA 8816FA2681C70200FECB7403E9F5FE8D
1440 DATA 3E71268A16F126D0E28AF2D0E202D632
1450 DATA F603FAB818A2E86701803EEE2600745E
1460 DATA 8A26F8268A06F926FE0EF4267550E8E8
1470 DATA 018A5600E88101FE0EF826FECCC606F4
1480 DATA 260480FCFF7508C606EE2600E92F008A
1490 DATA 16FA260AE475213A06E526751B8826EE
1500 DATA 26C706EF26F4018816F126803EF12602
1510 DATA 7506C706EF26C80080C203E83A01B400
1520 DATA 803EF12600740AFF0EEF2675048826F1
1530 DATA 26B4008A06E526B202E81C018A1EF526
1540 DATA 881EE626B20033C0E86E01025600FEC0
1550 DATA 3C0475F40AD27418B80C088D3E5926E8
1560 DATA BE00E81100E88601F6C30474F8E970FC
1570 DATA E80300E9BFFC60BE3006FAB800A08EC0
1580 DATA 33FFB204B021AA8AC2AAB022AAB000AA
1590 DATA B020AAB92000ACC0E804AA47E2F8FEC2
1600 DATA 47B021AA8AC2AAB022AAB000AAB020AA
1610 DATA B920008A64E0ACC1E804AA47E2F580FA
1620 DATA 1075DBB20381EE2000FEC247B021AA8A
1630 DATA C2AAB022AAB020AAB020AAB920008A64
1640 DATA E0ACC1E804AA47E2F580FA1075DB33C0
1650 DATA 8EC061FBC35033C08D2E9D268A5600E8
1660 DATA 560045FEC480FC0F75F2B40045FEC03C
1670 DATA 0475E9B4008A06E526B202E83A0058C3
1680 DATA 5052268A150AD2742C47065750B8F0DF
1690 DATA 8EC08AC232E4C1E00305F6098BF858E8
1700 DATA 35005F0780C40680FCBF72D680E40704
1710 DATA 083C2072CD5A58C36032F6C0D2038D36
1720 DATA DD2503F2C0E006C1E8038BF881C73006
1730 DATA B90800F3A461C360B20832FF8AD88AEC
1740 DATA 80E5072500F8C1E80603C30530068BF0
1750 DATA BB00FF8ACDD3EBF7D38BC2268A354732
1760 DATA D28ACDD3EAC1E202203C205C20083408
1770 DATA 542046FEC875E461C350C0E0040AC432
1780 DATA E48D2E9D2603E858C3505351B9DB418A
1790 DATA FD8AD903CB03CB8AD102D58AEA81C138
1800 DATA 00BB0100898FEC248AD5595B58C3FA50
1810 DATA 52BA0002B8FF1FEF33C0EFB80100E866
1820 DATA 0032C4A8417404B47FCD4133DBB80001
1830 DATA E8540024508AD8B80002E84A00C1D803
1840 DATA 24080AD8B84000E83D0024020AD8B810
1850 DATA 00E83300C0D80724010AD8B88000E826
1860 DATA 00C1D80724040AD8881EF52633C0E746
1870 DATA BA0002B8FF07EFE81900BA0402B003EE
1880 DATA FEC8EE5A58FBC3BA0002EFE80500BA02
1890 DATA 02EDC351B90900E2FE59C3608D3EFB26
1900 DATA BD0300C706F6260A00E8100080C13088
1910 DATA 0B81ED010073F2E886FE61C35033C9B0
1920 DATA 1003D287CA13D21B16F626720441E904
1930 DATA 000316F62687CA2C0175E658C3000000
1940 DATA 0000000000FF81AB97AB97BFFF77929E
1950 DATA F59FFEF277003F2123232F3F007EF7E7
1960 DATA F7F7F7E37E42A55A3C3C5AA5427EC3FB
1970 DATA C3FBFBC37E7EDBDBC3FBFBFB7EFFFFFF
1980 DATA FFFFFFFFFF7C47616C6178792057616C
1990 DATA 6C007C2053636F72653A30303030007C
2000 DATA 204C696E65733A30303030007C204974
2010 DATA 656D3A20202020200020472041204D20
2020 DATA 45204F20562045205220005041555345
2030 DATA 002020202020003153484F540053544F
2040 DATA 5021003353484F54003453484F540001
2050 DATA 00000400000000000000000001000001
2060 DATA 00010101010001000101010101000101
2070 DATA 00010000000001010101000101010000
2080 DATA 01000000010100000000000100010101
2090 DATA 01000101000100010001010001000101
2100 DATA 0100FF00010300000303000000000000
2110 DATA 00003232010005000101013030303100
























コメント
コメント(0件)
コメントする
トラックバック
トラックバック(0件)
トラックバック先