[新連載]復活!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
前へ
次へ
ホームページトップへ戻る