石原 博の覚書

電子工作に関する日々の覚書を記載します

DENVBAS

2021-08-13 15:31:08 | 日記

CP/Mが動くハードが何種類も出来たが、それだけでは面白くない。

有り難いことに、インターネット上に様々なソフトがある。
そこでいくつかダウンロードして動かしてみた。

CPMUG#17 のDENVBAS

CATALOG.17には以下のとおり記載があり、CP/M対応ではない
----
17.3 16K DENVBAS.ASM DENVER TINY BASIC FROM DR. DOBBS
    NO CP/M I/O YET
----

てっとり速く、コンソール入出力だけCP/Mに対応。(他にもASMでアセンブル出来ないためENDM=>ENDMXと変更)

$ git diff
diff --git a/DENVBAS.ASM b/DENVBAS.ASM
index d303cb8..5242f7e 100644
--- a/DENVBAS.ASM
+++ b/DENVBAS.ASM
@@ -1,5 +1,35 @@
-       ORG     3
-; 
+; CP/M I/O
+;--CP/M interface---------------
+BDOS   EQU     5
+ORIGIN EQU     100H
+;
+       ORG     ORIGIN
+       JMP     STRT
+;
+INPUT:
+CIN:   PUSH    H
+       PUSH    D
+       PUSH    B
+       MVI     C,1
+       CALL    BDOS
+       POP     B
+       POP     D
+       POP     H
+       RET
+;
+COUT:  PUSH    H
+       PUSH    D
+       PUSH    B
+       PUSH    PSW
+       MOV     E,A
+       MVI     C,2
+       CALL    BDOS
+       POP     PSW
+       POP     B
+       POP     D
+       POP     H
+       RET
+;
 STAK   EQU     7100H
 ; 
 ; TINY BASIC INTERPRETER
@@ -410,10 +440,10 @@ TPI2:     IN      TAPU
        RZ      
        INX     H
        JMP     TPIN+2
-TVTI:  JMP     3F08H
+TVTI:  JMP     CIN
 TVTO:  PUSH    B
        MOV     C,A
-       CALL    3809H
+       CALL    COUT
        POP     B
        RET
 ; 
@@ -524,7 +554,7 @@ INMS:       DB      'I','N'+128
 RTMS:  DB      'RE','T'+128
        LXI     D,ENMS
        CALL    TST
-       JMP     ENDM
+       JMP     ENDMX
 ENMS:  DB      'EN','D'+128
        LXI     D,LSMS
        CALL    TST
@@ -560,7 +590,7 @@ LDMX:       CALL    TSTV
        JNC     DMER
        LXI     D,DMC2
        CALL    TST
-       JMP     LDMX:
+       JMP     LDMX
 DMC2:  DB      ','+128
        CALL    DONE
        JMP     NXT
@@ -1402,7 +1432,7 @@ MOFE:     MVI     L,80
        JMP     ERR1
 DZER:  MVI     L,85
        JMP     ERR1
-ENDM:  MVI     L,90
+ENDMX: MVI     L,90
        JMP     ERR1
 SUFE:  MVI     L,95
        JMP     ERR1
(END)

アセンブルは問題なく終了
>ASM DENVBAS
CP/M ASSEMBLER - VER 2.0
V0619 0EFF       MVI C,-1
0CE2
009H USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

>LOAD DENVBAS

FIRST ADDRESS 0100
LAST  ADDRESS 0AFD
BYTES READ    09FE
RECORDS WRITTEN 14


予約語は以下のとおり。BASICの一方言と言える。FORはない。
LET、GOTO、GOSUB、PR、IF、IN、RET、END
LIST、RUN、CLEAR、TAPE、LOAD
DIM、SIZE、REM、CLRS
RND

なおTAPEやLOADは、テープからの入力でIN命令を使っている。ハードが対応してないので使えない。

>DENVBAS
>10 A=0
>20 PR A
>30 A=A+1
>40 IF A<10 GOTO 20
>50 END
>LIST
 10 A=0
 20 PR A
 30 A=A+1
 40 IF A<10 GOTO 20
 50 END
>RUN
0
1
2
3
4
5
6
7
8
9

90 AT 50
>

注意点は行番号が1バイトであること。実用的とは言えない。(いまさらTinyBasicで実用って何とも言えるが)。
ただしEOFが01Hであるので、行番号1は使えない。