EtchedPixels/EmulatorKit でMIKBUGを動かしてみた(4)emu6800も使ってみる

BASICMASTER

rcbus-6800+MIKBUGでプログラムが動くようになったが、デバッグが面倒くさい。

emu6800のように逆アセンブルしながら動作できるとデバッグしやすいので、emu6800にMIKBUG、Altair680の互換サブルーチンを仕込んでみた。

EmulatorKit全部を使うのも大変なので、emu6800関連ファイルだけを別リポジトリにした。ライセンスはオリジナルと同じ(GPLv3)。


仕様・使えるサブルーチン

開始アドレスは $0100 固定。これも指定できるようにした方がいいな。あとで考える。

1文字入力・出力・キー入力の有無確認の3つのサブルーチンが使える。

  • 入力: $FF00 および $E1AC。前者はAccB、後者はAccAに1文字入力する。エコーバックしない。
  • 出力: $FF81 および $E1D1。両方ともAccAの8bit目をマスクして表示(ANDA #$7F)。
  • キーチェック: $FF24。キーボードが押されていたら C=1

MIKBUGのINEEE/OUTEEE、Altair680のINCH/OUTCH/POLCAT相当のルーチンである。

動作例


$ emu6800 6800 basic680.b

MEMORY SIZE? 16384
TERMINAL WIDTH? 80
WANT SIN-COS-TAN-ATN? Y

9946 BYTES FREE

MITS ALTAIR 680 BASIC VERSION 1.1 REV 3.2
COPYRIGHT 1976 BY MITS INC.

OK
10 FOR Y=-12 TO 12
20 FOR X=-39 TO 39
30 CA=X*0.0458
40 CB= Y*0.08333
50 A=CA
60 B=CB
70 FOR I=0 TO 15
80 T=A*A-B*B+CA
90 B=2*A*B+CB
100 A=T
110 IF (A*A+B*B)>4 THEN GOTO 200
120 NEXT I
130 PRINT " ";
140 GOTO 210
200 IF I>9 THEN I=I+7
205 PRINT CHR$(48+I);
210 NEXT X
220 PRINT
230 NEXT Y
LIST

(略)
OK
RUN
000000011111111111111111122222233347E7AB322222111100000000000000000000000000000
000001111111111111111122222222333557BF75433222211111000000000000000000000000000
000111111111111111112222222233445C      643332222111110000000000000000000000000
011111111111111111222222233444556C      654433332211111100000000000000000000000
11111111111111112222233346 D978 BCF    DF9 6556F4221111110000000000000000000000
111111111111122223333334469                 D   6322111111000000000000000000000
1111111111222333333334457DB                    85332111111100000000000000000000
11111122234B744444455556A                      96532211111110000000000000000000
122222233347BAA7AB776679                         A32211111110000000000000000000
2222233334567        9A                         A532221111111000000000000000000
222333346679                                    9432221111111000000000000000000
234445568  F                                   B5432221111111000000000000000000
                                              864332221111111000000000000000000
234445568  F                                   B5432221111111000000000000000000
222333346679                                    9432221111111000000000000000000
2222233334567        9A                         A532221111111000000000000000000
122222233347BAA7AB776679                         A32211111110000000000000000000
11111122234B744444455556A                      96532211111110000000000000000000
1111111111222333333334457DB                    85332111111100000000000000000000
111111111111122223333334469                 D   6322111111000000000000000000000
11111111111111112222233346 D978 BCF    DF9 6556F4221111110000000000000000000000
011111111111111111222222233444556C      654433332211111100000000000000000000000
000111111111111111112222222233445C      643332222111110000000000000000000000000
000001111111111111111122222222333557BF75433222211111000000000000000000000000000
000000011111111111111111122222233347E7AB322222111100000000000000000000000000000

OK

-d オプションを付けると、逆アセンブルしながら実行する。


$ emu6800 -d 6800 basic680.b
0100 : ----I- 00|00 0000 0000 | JMP 0112
0112 : ----I- 00|00 0000 0000 | JMP 18F9
18F9 : ----I- 00|00 0000 0000 | LDX #FFFF
18FC : ---NI- 00|00 FFFF 0000 | STX 8A [0000]
18FE : ---NI- 00|00 FFFF 0000 | LDS #1B1B
1901 : ----I- 00|00 FFFF 1B1B | STS 82 [0000]
1903 : ----I- 00|00 FFFF 1B1B | CLR 0111 [00]
1906 : --Z-I- 00|00 FFFF 1B1B | JSR 0834
0834 : --Z-I- 00|00 FFFF 1B19 | LDAA #0D
0836 : ----I- 0D|00 FFFF 1B19 | STAA 0B [00]
0838 : ----I- 0D|00 FFFF 1B19 | BSR 0895 [0D]
0895 : ----I- 0D|00 FFFF 1B17 | TST 0111 [00]
0898 : --Z-I- 0D|00 FFFF 1B17 | BNE 08B1 [0D]
089A : --Z-I- 0D|00 FFFF 1B17 | PSHA
089B : --Z-I- 0D|00 FFFF 1B16 | CMPA #20
089D : C--NI- 0D|00 FFFF 1B16 | BCS 08AA [0D]
08AA : C--NI- 0D|00 FFFF 1B16 | PULA
08AB : C--NI- 0D|00 FFFF 1B17 | PSHB
08AC : C--NI- 0D|00 FFFF 1B16 | TAB
08AD : C---I- 0D|0D FFFF 1B16 | JSR FF81
FF81 : C---I- 0D|0D FFFF 1B14 | PSHA
FF82 : C---I- 0D|0D FFFF 1B13 | ANDA #7F
FF84 : C---I- 0D|0D FFFF 1B13 | STAA FEFE [FF]
FF87 : C---I- 0D|0D FFFF 1B13 | PULA
FF88 : C---I- 0D|0D FFFF 1B14 | RTS
08B0 : C---I- 0D|0D FFFF 1B16 | PULB
08B1 : C---I- 0D|00 FFFF 1B17 | RTS

デバッグが だいぶ楽になった。ツール大事。

リンク

続く

BASICMASTER

Posted by ず@沖縄