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は使えない。
※コメント投稿者のブログIDはブログ作成者のみに通知されます