[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第35回]
●中日電工版TINY BASIC(3)先頭のジャンプテーブル
「中日電工版」TINY BASICは「オリジナル版」のTINY BASICをできるだけ変更しないでもとのままのプログラムにすることで「オリジナル版」と対比し易いように考えてあります。
原則としてはそのように考えているのですが、前回お見せしました通り「中日電工版」TINY BASICは先頭にコマンド処理ルーチンへのジャンプテーブルを置いています。
そこは「オリジナル版」と大きく異なっているところです。
勿論ここも「オリジナル版」の通りにできないことはないのですが、それをあえて変更したのはプログラム作成(および今後のプログラム変更)作業の効率化を考えてのことです。
TINY BASICの命令解読の仕組みについては[第19回]〜[第22回]で説明をしました。
たとえば「LIST」「RUN」「NEW」については[第19回]で下のコマンドテーブルをお見せしました。
そして以下のように説明をしました。
’LIST’ ’RUN’ ’NEW’ の文字列があって、各文字列に続いてその命令の処理を行なうプログラムの先頭アドレスが書かれています。
アドレスは通常のメモリ内の配置とは逆に上位バイト、下位バイトの順に置かれています。
さらにその上位バイトは最上位ビットが’1’に置き換えられています。
たとえば’LIST’の処理プログラムの先頭アドレスは016Fなのですがその上位バイト01を81に置き換えています。
その部分については、「中日電工版」のTINY BASICはRAMアドレスの8000にロードしますからアドレスの上位ビットを加工しなくてもそのままで最上位ビットは1になっています。
それはそれとして、わざわざプログラムの先頭にジャンプテーブルを置いたのは別の理由があってのことです。
「オリジナル版」ではたとえばプログラムの一部を書き換えた場合、その変更した場所によっては上のテーブルの2バイトのアドレスが変わってしまいます。
これがたとえばJMP LISTなどのようにジャンプ先をラベルで指定していた場合にはアセンブラが自動的にアドレスを算出してオブジェクトプログラムのアドレス部分を書き換えてくれますから、そのようなことを気にする必要はありません。
しかし上のテーブルデータのようにアドレス部分を「固定データ」としてDBで定義している場合には(さらにそのビットを加工している場合にはなおさら)アセンブラではそこまでの自動変更はしてくれません。
「中日電工版」のように先頭にジャンプテーブルを集めてしまえば、「LIST」は8003、「RUN」は8006、「NEW」は8009でこのジャンプテーブルそのものの並び順を変更したりしない限りは、途中のプログラムを変更したりしても命令解読部分のテーブルアドレスは変わりません。
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 ; |
下は今回の最初のところでお見せした「オリジナル版」に対応する部分の「中日電工版」のプログラムリストです。
879C 0D TAB1-1:DB 0D 879D 4C495354 "LIST";TAB1 87A1 80 DB 80 87A2 03 DB 03 87A3 52554E "RUN" 87A6 80 DB 80 87A7 06 DB 06 87A8 4E4557 "NEW" 87AB 80 DB 80 87AC 09 TAB2-1:DB 09 |
ジャンプテーブルを先頭に集めて並べたため、上記以外の命令のテーブル部分のアドレスもほとんど機械的に書き込んで作成することができましたし、今後想定されるプログラム変更によってもそれに伴って命令のテーブル部分のアドレスを変更する必要はありません。
できるだけ「オリジナル版」に忠実にしたいと考える中であえて「オリジナル版」と大きく異なる変更を行なった理由はそこにあります。
復活!TINY BASIC[第35回]
2020.7.10upload
前へ
次へ
ホームページトップへ戻る