2020.7.15
前へ
次へ
ホームページトップへ戻る

[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第38回]


●TINY BASICのソースプログラムファイル!

以前からいろいろご購入いただいておりますお客様からメールをいただきました。
TINY BASICのソースプログラムをみつけましたとのことで、リンク先を教えていただきました。
当連載で紹介しております雑誌記事コピーのPDFもありますが、なんとTEXT形式のソースプログラムファイルもダウンロードできます!
教えていただいたのはこちら(↓)のサイトです。
https://www.autometer.de/unix4fun/z80pack/ftp/altair/
そこの少し下の方
tinybasic-2.0.asm
がそのファイルです。
拡張子は.asmですが実体は.txtと同じプレーンテキストですからメモ帳やTerapadで開けます。
ただ各行のエンドコードが0D0Aではなくて0Aになっているのでメモ帳で開くと改行してくれません。
Terapadなら問題なく開けます。

さらに同サイトをよく見てみましたら、ソースプログラムファイルだけではなくて、完全なアセンブルリスト(出力ファイル)までありました。
tinybasic-2.0.prn
おお。
これはこれは。
これを使わせていただければ、今までのようにちょっと読みにくいPDFからのコピーではなくて、普通のテキストで読んでいただくことができます。
こんな感じです。

                  ;
                   ;*************************************************************
                   ;
                   ; WHAT FOLLOWS IS THE CODE TO EXECUTE DIRECT AND STATEMENT
                   ; COMMANDS.  CONTROL IS TRANSFERED TO THESE POINTS VIA THE
                   ; COMMAND TABLE LOOKUP CODE OF 'DIRECT' AND 'EXEC' IN LAST
                   ; SECTION.  AFTER THE COMMAND IS EXECUTED, CONTROL IS
                   ; TRANSFERED TO OTHERS SECTIONS AS FOLLOWS:
                   ;
                   ; FOR 'LIST', 'NEW', AND 'STOP': GO BACK TO 'RSTART'
                   ; FOR 'RUN': GO EXECUTE THE FIRST STORED LINE IF ANY, ELSE
                   ; GO BACK TO 'RSTART'.
                   ; FOR 'GOTO' AND 'GOSUB': GO EXECUTE THE TARGET LINE.
                   ; FOR 'RETURN' AND 'NEXT': GO BACK TO SAVED RETURN LINE.
                   ; FOR ALL OTHERS: IF 'CURRENT' -> 0, GO TO 'RSTART', ELSE
                   ; GO EXECUTE NEXT COMMAND.  (THIS IS DONE IN 'FINISH'.)
                   ;*************************************************************
                   ;
                   ; *** NEW *** STOP *** RUN (& FRIENDS) *** & GOTO ***
                   ;
                   ; 'NEW(CR)' SETS 'TXTUNF' TO POINT TO 'TXTBGN'
                   ;
                   ; 'STOP(CR)' GOES BACK TO 'RSTART'
                   ;
                   ; 'RUN(CR)' FINDS THE FIRST STORED LINE, STORE ITS ADDRESS (IN
                   ; 'CURRENT'), AND START EXECUTE IT.  NOTE THAT ONLY THOSE
                   ; COMMANDS IN TAB2 ARE LEGAL FOR STORED PROGRAM.
                   ;
                   ; THERE ARE 3 MORE ENTRIES IN 'RUN':
                   ; 'RUNNXL' FINDS NEXT LINE, STORES ITS ADDR. AND EXECUTES IT.
                   ; 'RUNTSL' STORES THE ADDRESS OF THIS LINE AND EXECUTES IT.
                   ; 'RUNSML' CONTINUES THE EXECUTION ON SAME LINE.
                   ;
                   ; 'GOTO EXPR(CR)' EVALUATES THE EXPRESSION, FIND THE TARGET
                   ; LINE, AND JUMP TO 'RUNTSL' TO DO IT.
                   ;
   0132   CDC504   NEW:    CALL ENDCHK                     ;*** NEW(CR) ***
   0135   211708           LXI  H,TXTBGN
   0138   221508           SHLD TXTUNF
                   ;
   013B   CDC504   STOP:   CALL ENDCHK                     ;*** STOP(CR) ***
   013E   C3BA00           JMP  RSTART
                   ;
   0141   CDC504   RUN:    CALL ENDCHK                     ;*** RUN(CR) ***
   0144   111708           LXI  D,TXTBGN                   ;FIRST SAVED LINE
                   ;
   0147   210000   RUNNXL: LXI  H,0                        ;*** RUNNXL ***
   014A   CD4305           CALL FNDLP                      ;FIND WHATEVER LINE #
1
 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0      
+                                                      13:28  11/10/2019
+                                                                                      PAGE 7
      


   014D   DABA00           JC   RSTART                     ;C:PASSED TXTUNF, QUIT
                   ;
   0150   EB       RUNTSL: XCHG                            ;*** RUNTSL ***
   0151   220108           SHLD CURRNT                     ;SET 'CURRENT'->LINE #
   0154   EB               XCHG
   0155   13               INX  D                          ;BUMP PASS LINE #
   0156   13               INX  D
                   ;
   0157   CD8706   RUNSML: CALL CHKIO                      ;*** RUNSML ***
   015A   21C006           LXI  H,TAB2-1                   ;FIND COMMAND IN TAB2
   015D   C33E07           JMP  EXEC                       ;AND EXECUTE IT
                   ;
   0160   DF       GOTO:   RST  3                          ;*** GOTO EXPR ***
   0161   D5               PUSH D                          ;SAVE FOR ERROR ROUTINE
   0162   CDC504           CALL ENDCHK                     ;MUST FIND A CR
   0165   CD3B05           CALL FNDLN                      ;FIND THE TARGET LINE
   0168   C2A000           JNZ  AHOW                       ;NO SUCH LINE #
   016B   F1               POP  PSW                        ;CLEAR THE PUSH DE
   016C   C35001           JMP  RUNTSL                     ;GO DO IT


さっそく有難く使わせていただこうと思ったのですが…。
さらによくよく見ましたら、昨年出力したばかりのリストのようです。
サイトを確認しますとどうやら個人の方がやってみえるサイトのようで、特に引用不可ということでもないようなのですが。
いや、でも、何十年も昔のものでしたらともかくとしてまだ一年も経っていないような出力したてのリストを黙って使わせていただくというのはいかがなものかと思ってしまいます。
ですので、やっぱりここは今まで通り雑誌からのPDFをコピーしたものを使わせていただくことにいたします。
ちょっと読みにくいというところにつきましては、前記のリンクからきれいな出力リストをダウンロードしていただいて、それをご参照いただきますようお願いいたします。
気分としましては、やっぱりレトロなものを説明するにはレトロなものから引用するほうが似合っているように思います。

それはそれとしまして貴重な情報を教えていただいた広島県のH様には心から感謝申し上げます。
今後ともよろしくお願いいたします。

復活!TINY BASIC[第38回]
2020.7.15upload

前へ
次へ
ホームページトップへ戻る