[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第34回]
●中日電工版TINY BASIC(2)
前回は「中日電工版」TINY BASICのアセンブルリストをお見せしました。
オリジナルのTINY BASICを出来る限りそのままの形でND80Z3.5(ND8080他の当社ボード)上で動作するように最小限の手を加えたものです。
しかしリストを見ていただきますと、先頭の部分からオリジナルのプログラムとは全く異なっていることにお気付きかもしれません。
オリジナルに対して変更しなければならなかったところは第一にはオリジナル版がTINY BASICプログラム本体を0000から始まるROM上に置いている点です。
これに対して「中日電工版」はデバッグを容易に行なえるようにすることなどの理由からZB3BASICを起動させた後で8000〜のRAM上に置いて動作するようにしてあります。
主としてアドレスの違いによってそれが関係するところは全面的に変更する必要がありました。
それは単にアドレスそのものを変更するだけでは済まなくて、アセンブラの機能の違いによるさらなる手直しが必要でした。
そのことについては今回はちょっと時間が足りませんので次回に説明することにしますが、「中日電工版」の先頭に各命令処理へのジャンプテーブルを置いているのはそのためです。
オリジナルプログラムの先頭部分のリストは[第10回]でお見せしていますが、比較を容易にするため、下の「中日電工版」の先頭部分のリストの次のところに再掲いたしました。
両者を比較していただければすぐにわかりますように、「中日電工版」の先頭のジャンプテーブル部分が終ったところからがオリジナル版のリストの先頭部分に一致しています。
オリジナル版では先頭の基本的なサブルーチンはRST 1〜RST 7に割り当てていて、プログラム本体の中でもそのままRST 1〜RST 7としてコールしています。
しかしプログラム本体の中でRST 1〜RST 7の名前のままでコールしていては一体何をしているのかすぐには思い出せません。
もともとRST 0〜RST 7が割り付けられているアドレス0000〜のエリアはシステムROMが置かれているところなので、そこにTINY BASICを置くわけにはいきません。
となるとどの道RST nの名前でサブルーチンコールをするわけにはいきませんから普通のサブルーチン名をつけて普通にCALL命令で呼び出すことになります。
そういうことでもありますから「中日電工版」ではRST 1〜RST 7についてはどういうサブルーチンなのかを想起し易い名前をつけてCALLするように書き換えました。
ただできるだけオリジナル版と対比し易いように先頭のジャンプテーブルが終ったすぐのところに、オリジナル版のRST 0〜RST 7と同じ順序で対応するサブルーチンを配置しました。
2020/6/6 9: tinybst7.txt
END=9FDE
;;;TINY BASIC from PALO ALTO
;20/3/3 5/8 5/9 5/10 5/11 5/12 5/13 5/28
;6/6
;
;SOUT=$067C;5/10
SOUT=$10AB
;SIN=$06A3
SIN=$10AE
REENT=$1033
;
ORG $8000
8000 C35D80 JMP START
8003 C3D681 JMP LIST
8006 C3A681 JMP RUN
8009 C39781 JMP NEW
800C C3D682 JMP NEXT
800F C3B683 JMP LET
8012 C33B83 JMP IFF;"IF"
8015 C3C581 JMP GOTO
8018 C33482 JMP GOSUB
801B C35682 JMP RETURN
801E C33783 JMP REM
8021 C37182 JMP FOR
8024 C35683 JMP INPUT
8027 C3EE81 JMP PRINT
802A C3A081 JMP STOP
802D C3B083 JMP DEFLT
8030 C3E884 JMP RND
8033 C31585 JMP ABS
8036 C31E85 JMP SIZE
8039 C3C684 JMP XP40
803C C38182 JMP FR1;"TO"
803F C39985 JMP QWHAT;"WHAT"
8042 C38D82 JMP FR2;"STEP"
8045 C39382 JMP FR3
8048 C3CA83 JMP XP11;">="
804B C3D083 JMP XP12;"#"
804E C3D683 JMP XP13;">"
8051 C3E583 JMP XP15;"="
8054 C3DD83 JMP XP14;"<="
8057 C3EB83 JMP XP16;"<"
805A C3F183 JMP XP17
;
START:;LXI SP,STACK
805D 00 NOP
805E 00 NOP
805F 00 NOP
8060 3EFF MVI A,FF
8062 C33387 JMP INIT
;RST 1(test character)
8065 E3 TSTC:XTHL
8066 CD8480 CALL SPJP
8069 BE CMP M
806A C3C780 JMP TC1
;
806D 3E0D CRLF:MVI A,0D
;RST 2(out character)
806F F5 OUTC:PUSH PSW
8070 3A0090 LDA OCSW
8073 B7 ORA A
8074 C34F87 JMP OC2
;RST 3(expression)
8077 CD0884 EXPR:CALL EXPR2
807A E5 PUSH H
807B C3C483 JMP EXPR1
;RST 4(compare HL with DE)
807E 7C HDCP:MOV A,H
807F BA CMP D
8080 C0 RNZ
8081 7D MOV A,L
8082 BB CMP E
8083 C9 RET
;RST 5(jump space code)
8084 1A SPJP:LDAX D
8085 FE20 CPI 20
8087 C0 RNZ
8088 13 INX D
8089 C38480 JMP SPJP
;RST 6(check end)
808C F1 ENDCK:POP PSW
808D CD8085 CALL FIN
8090 C39985 JMP QWHAT
;RST 7(test variables)
8093 CD8480 TSTV:CALL SPJP
8096 D640 SUI 40
8098 D8 RC
8099 C2B780 JNZ TV1
809C 13 INX D
809D CDD784 CALL PARN
80A0 29 DAD H
80A1 DA0081 JC QHOW
80A4 D5 PUSH D
80A5 EB XCHG
80A6 CD1E85 CALL SIZE
80A9 CD7E80 CALL HDCP
80AC DAC985 JC ASORRY
80AF 21669F LXI H,VARBGN
80B2 CD4185 CALL SUBDE
80B5 D1 POP D
80B6 C9 RET
80B7 FE1B TV1:CPI 1B
80B9 3F CMC
80BA D8 RC
80BB 13 INX D
80BC 21669F LXI H,VARBGN
80BF 07 RLC
80C0 85 ADD L
80C1 6F MOV L,A
80C2 3E00 MVI A,00
80C4 8C ADC H
80C5 67 MOV H,A
80C6 C9 RET
;
80C7 23 TC1:INX H
80C8 CAD280 JZ TC2
80CB C5 PUSH B
80CC 4E MOV C,M
80CD 0600 MVI B,00
80CF 09 DAD B
80D0 C1 POP B
80D1 1B DCX D
80D2 13 TC2:INX D
80D3 23 INX H
80D4 E3 XTHL
80D5 C9 RET
;
80D6 210000 TSTNUM:LXI H,$0000
80D9 44 MOV B,H
80DA CD8480 CALL SPJP
80DD FE30 TN1:CPI 30
80DF D8 RC
80E0 FE3A CPI 3A
80E2 D0 RNC
80E3 3EF0 MVI A,F0
80E5 A4 ANA H
80E6 C20081 JNZ QHOW
80E9 04 INR B
80EA C5 PUSH B
80EB 44 MOV B,H
80EC 4D MOV C,L
80ED 29 DAD H
80EE 29 DAD H
80EF 09 DAD B
80F0 29 DAD H
80F1 1A LDAX D
80F2 13 INX D
80F3 E60F ANI 0F
80F5 85 ADD L
80F6 6F MOV L,A
80F7 3E00 MVI A,00
80F9 8C ADC H
80FA 67 MOV H,A
80FB C1 POP B
80FC 1A LDAX D
80FD F2DD80 JP TN1
8100 D5 QHOW:PUSH D
8101 110781 AHOW:LXI D,HOW
8104 C39D85 JMP ERROR
;
8107 484F573F HOW:"HOW?"
810B 0D DB 0D
810C 4F4B OK:"OK"
810E 0D DB 0D
810F 57484154 WHAT: "WHAT"
8113 3F "?"
8114 0D DB 0D
8115 534F5252 SORRY:"SORR"
8119 59 "Y"
811A 0D DB 0D
|
下は[第10回]でお見せしたオリジナル版のTINY BASICの先頭部分のプログラムリストです。
上の「中日電工版」のリストのアドレス805Dからがオリジナル版の先頭部分に相当しています。



復活!TINY BASIC[第34回]
2020.7.7upload
前へ
次へ
ホームページトップへ戻る