石原 博の覚書

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

LLLBASIC

2021-07-18 19:06:00 | 日記

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

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

CPMUG002 LLLBASIC
CPMUG010 LLLBASIC DISK I/O追加 

LLLBASICは3つのソース、LLLBASIC.ASM,LLLFP.ASM,LLLMON.ASMから出来ている。もともとはCP/M用ではなかったため、LLLMON.ASMを追加しているようだ。CPMUG002とCPMUG010は、DISK I/Oの追加とメモリレイアウトの差である。
(CPMUG010の方が使いやすいし、COMファイルも小さく出来る)

3つのファイルを結合するため、DDTを使用する必要がある。

アセンブル(CPMUG002の場合)
----------------------
G>ASM LLLBASIC
CP/M ASSEMBLER - VER 2.0
8FDC
00EH USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

G>ASM LLLFP
CP/M ASSEMBLER - VER 2.0
9800
007H USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

G>ASM LLLMON
CP/M ASSEMBLER - VER 2.0
014F
000H USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

G>DDT
DDT VERS 1.4
-ILLLMON.HEX  
-R
NEXT  PC
014F 0000
-ILLLBASIC.HEX
-R
NEXT  PC
8FDC 0000
-ILLLFP.HEX
-R
NEXT  PC
9800 0000
-^C
RunCPM Version 5.3 (CP/M 2.2 60K)

NEXTが9800なので、01〜97の97Hページを保存すれば良い。 16進数で97 => 10進数で151

G>SAVE 151 LLLBASIC.COM
G>LLLBASIC
READY


10 FOR X=0 TO 10
20   PRINT X
30 NEXT X

LIST
10FORX=0TO10
20PRINTX
30NEXTX
40 END
RUN
0.0000E 00
 1.0000E 00
 2.0000E 00
 3.0000E 00
 4.0000E 00
 5.0000E 00
 6.0000E 00
 7.0000E 00
 8.0000E 00
 9.0000E 00
 1.0000E 01
READY


アセンブル(CPMUG010の場合)
--------------------------
G>ASM LLLBASIC
CP/M ASSEMBLER - VER 2.0
10DD
00FH USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

G>ASM LLLFP
CP/M ASSEMBLER - VER 2.0
17AD
007H USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

G>ASM LLLMON
CP/M ASSEMBLER - VER 2.0
2000
001H USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

G>DDT
DDT VERS 1.4
-ILLLBASIC.HEX
-R
NEXT  PC
10DD 0000
-ILLLFP.HEX
-R
NEXT  PC
17AD 0000
-ILLLMON.HEX
-R
NEXT  PC
1A02 0000
-^C
RunCPM Version 5.3 (CP/M 2.2 60K)

NEXTが1A02なので、01〜1Aの1AHページを保存すれば良い。 16進数で1A => 10進数で26

G>SAVE 26 LLLBASIC.COM
G>

感想
LLLBASICはディスクの読み出しで面白い方法を使用している。
起動時にファイル名を指定すると、FCBにそのファイルの状態が保存されることを利用しており、以下のように「PTA」コマンドにより対象ファイルからプログラムを読み込む。
しかし書き込むことは出来ない。EDなどでファイルを作成しそれを読むことを想定している。

G>DIR
G: LLLBASIC ASM : LLLBASIC COM : LLLBASIC DOC : LLLBASIC HEX
G: LLLBASIC PRN : LLLFP    ASM : LLLFP    HEX : LLLFP    PRN
G: LLLMON   ASM : LLLMON   HEX : LLLMON   PRN : TEST     FIL

G>LLLBASIC TEST.FIL
READY
PTA
READY
LIST
10PRINT"THIS IS A SIMPLE BENCHMARK PROGRAM.  IT"
20PRINT"MULTIPLIES, DIVIDES, ADDS AND SUBTRACTS."
25PRINT"INPUT 1ST NUMBER    ";
30INPUTA
35PRINT"INPUT 2ND NUMBER    ";
40INPUTB
45PRINT
50LETC=A+B
60LETA=A+1
70LETE=B/C
80LETF=A*E
90LETC=C-F
95PRINT"A IS";A;"     B IS";B;"     C IS";C
97PRINT"E IS";E;"     F IS";F
98PRINT
99PRINT
100IFA=100THEN200
110GOTO50
200PRINT"THE LOOP IS DONE"
202PRINT"NOW FOR THE FANCY STUFF!!"
203PRINT"WE ARE GOING TO DO A WARM BOOT"
205CALL(1)
210END
READY


コマンド
---------
RUN、PLS、LIS、SCR、PTA


------------
LET、PRI(xx)、REM、STO(x)、END
GOT(x)、IF、INP(xx)、DIM、CAL(x)、GOSU(x)、RET
FOR、NEXT、THEN、TO、STEP
GET、PUT

ここでPRI(xx)とは、通常のBASICのPRINTと同じなのであるが、PRIまで同じなら、PRIxxでも PRIAAでも同じことを示す。

PRIxxA == PRIAAA == PRINTA

TINYBASICのような短縮形ではないため、ユーザプログラムのサイズの減少は出来ない。すこしでもインタプリタのサイズを小さくしようとしたのだと思う。



最新の画像もっと見る

コメントを投稿