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件)

トラックバック先

当サイトについて

栃木県宇都宮市在住のWeb屋さんのブログ。サイト設計からコーディング、プログラミングまで幅広く担当します。Web標準,WordPress,jQueryあたりに興味があります。≫PROFILE

Get Adobe Flash playerPlugin by wpburn.com wordpress themes