石原 博の覚書

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

68K-MBCが動いた

2021-07-31 18:48:24 | 日記

[0]ハード
 部品さえ集まればそれほど難しいところはない。コツコツと半田付け。
 メモリはまず動作確認だけだからTC551001BPLが1個で128KByteのみ。

[1]picにプログラムを書き込む
=======================================
PIC18F47Q10にpickit4で書き込む。PICは得意ではないが、手順どおりに実施。
接続pinのレイアウトがライタに合わせてあるため、接続は簡単。
しかしコンデンサにアルミ固体電解コンデンサをおごったためサイズ的にpickit4と干渉。まあ書き込みは滅多にしないから良いか。

PICの型番をセットして、HEXファイルをセットして、

POWERを有効にして

 

書き込む


[3]本体の動作
115200bpsでシリアル接続すると以下のとおり
================================
68k-MBC - A091020-R140221
IOS - I/O Subsystem - S310121-R220721

IOS: Lite HW configuration detected

IOS: Found RTC DS3231 Module (01/01/00 00:00:18)
IOS: RTC DS3231 temperature sensor: 28C
IOS: CP/M Autoexec is OFF
IOS: Current Disk Set 0 (CP/M-68K v1.3)
IOS: Loading boot program (CPM68.BIN)... done

IOS: 68008 CPU is running from now


68k-MBC CP/M-68K BIOS - S150321 - 128KB
CP/M-68K Version 1.3
Copyright (c) 1985 Digital Research Inc.

A>dir


A: DDT68000 68K : README   TXT : SETPRINT 68K : AUTOEXEC TXT : AUTOEXEC SUB 
A: CP68     68K : DDT      68K : USERLED  68K : DUMP     68K : ED       68K 
A: FIND     68K : LO68     68K : MORE     68K : NM68     68K : SENDC68  68K 
A: SIZE68   68K : STAT     68K : RELOC    68K : PIP      68K : XM68     68K 
A>b:

 

B>dir


B: USERLED  BAS : DATETIME BAS : GPELED   BAS : SINX     BAS : USERLED  68K 
B: CB68     DOC : CB68     L68 : CB68     REL : CB68     68K : DATETIME 68K 
B: ASCIIART O   : USERLED  O   : SINX     68K : S        O   : CBLINK   SUB 
B: LINK68   68K : ASCIIART 68K : LINK68   REL : README   TXT : SINX     O   
B: DATETIME O   : SETPRINT BAS : SETPRINT 68K : LO68     REL : CB       BAK 
B: LO68     68K : XM68     REL : ASCIIART BAS : XM68     68K : GPELED   68K 
B: GPELED   O   
B>c:

 

C>dir


C: AR68     68K : AS68     68K : C068     68K : C168     68K : LINK68   68K 
C: CP68     68K : LO68     68K : NM68     68K : SENDC68  68K : SIZE68   68K 
C: AS68INIT     : C        SUB : CLINK    SUB : CE       SUB : MORE     C   
C: SETJMP   H   : MORE     O   : README   TXT : XFLDBIOS H   : C        OUT 
C: CLIB         : AS68SYMB DAT : CLINKF   SUB : CLINKE   SUB : S        O   
C: BDOS     S   : LIBE     A   : LIBF     A   : CPMLIB       : ASSERT   H   
C: BIOSTYPS H   : CTYPE    H   : ERRNO    H   : LOADBIOS H   : NORMBIOS H   
C: OPTION   H   : OSATTR   H   : OSIF     H   : OSIFERR  H   : PORTAB   H   
C: SIGNAL   H   : STDIO    H   : XFNMBIOS H   : XLOADBIO H   : XNORMBIO H   
C: BDOS     O   : MORE     68K 
C>d:

 

D>dir


D: ANNOUNCE     : CGK      SUB : COPYING      : GCMDLINE C   : GKERMIT  C   
D: GKERMIT  DIF : GKERMIT  H   : GKERMIT  NR  : GKERMIT  REL : GPROTO   C   
D: GPROTO   W   : GUNIXIO  C   : GWART    C   : GWART    REL : LOGK     SUB 
D: LOGW     SUB : MAKEFILE     : README       : README   68K : GKERMIT  68K 
D: README   TXT 
D>e:

 

E>dir


E: AR68     REL : AS68     REL : AS68INIT     : ASSERT   H   : BDOS     S   
E: BIOS     C   : BIOS     O   : BIOSA    O   : BIOSA    S   : BIOSTYPS H   
E: BOOTER   O   : BOOTER   S   : C        SUB : C068     REL : C168     REL 
E: CBIOS    S   : CE       SUB : CLINKF   SUB : CONFIG   C   : CONFIG   REL 
E: COPY     REL : CP68     REL : CPM      REL : CPM      SYS : CPM15000 MAP 
E: CPM15000 SR  : CPM400   MAP : CPM400   SR  : CPMLDR   SYS : CPMLIB       
E: CTYPE    H   : DDT      REL : DDT10    REL : DDT68000 68K : DDT68010 68K 
E: DUMP     REL : ED       REL : ELDBIOS  S   : ERGBIOS  S   : ERRNO    H   
E: FIND     REL : FORMAT   REL : FORMAT   S   : INIT     REL : INIT     S   
E: LCPM     SUB : LCPM10   SUB : LDBIOS   O   : LDBIOSA  O   : LDBIOSA  S   
E: LDRLIB       : LIBE     A   : LIBF     A   : LINK68   REL : LO68     REL 
E: LOADBIOS H   : LOADBIOS SUB : LOADR    O   : MAKELDR  SUB : MORE     C   
E: MORE     REL : NM68     REL : NOBIOSHI S   : NOBIOSLO S   : NORMBIOS H   
E: NORMBIOS SUB : OPTION   H   : OSATTR   H   : OSIF     H   : OSIFERR  H   
E: OVHDLR   O   : PIP      REL : PORTAB   H   : PUTBOOT  REL : PUTBOOT  S   
E: README   TXT : RELCPM   SUB : RELOC    REL : RELOC1   SUB : RELOC2   SUB 
E: RELOC3   SUB : RELOC4   SUB : RELOC5   SUB : RELOC6   SUB : RELOC7   SUB 
E: RELOC8   SUB : RELOC9   SUB : S        O   : SD       REL : SENDC68  REL 
E: SETJMP   H   : SIGNAL   H   : SIZE68   REL : STAT     REL : STDIO    H   
E: TERM     C   : TERM     REL : TERMA    S   : VT52     C   : VT52     O   
E: XBIOS    C   : XBIOS    O   : XBIOSA   O   : XBIOSA   S   : XBOOTER  O   
E: XBOOTER  S   : XCPM     REL : XCPM     SYS : XCPMLDR  SYS : XFER86   C   
E: XFER86   REL : XFLDBIOS H   : XFNMBIOS H   : XLCPM    SUB : XLDBIOSA O   
E: XLDBIOSA S   : XLOADBIO H   : XLOADBIO SUB : XMAKELDR SUB : XNORMBIO H   
E: XNORMBIO SUB : XPUTBOOT REL : XPUTBOOT S   : CLIB         : CLINK    SUB 
E: CLINKE   SUB 
E>

使っていると68008がほんのりと温かいことに気づいた。昔はNMOSのCPUやメモリでは結構暖かく(熱く)なったものだが、最近使うAVRなどほとんど気づかないほどだった。まあ良く考えれば80486頃以降ノートやデスクトップPCではヒートシンクやファンが必須になっていたんだし、そんなものか。


sbc1802が動いた

2021-07-31 18:48:24 | 日記

[0]ハード
 部品さえ集まればそれほど難しいところはない。コツコツと半田付け。
 メモリはまず動作確認だけだからRAMがUT622561個で32KByte、ROMがW27C512のみ。

[1]ROMの書き込み
 TL866Aを使用
 

 

[2]結果

 

WELCOME TO THE 1802 BASIC3 V1.1
(C)1981 RCA
C/W?
CREADY
:10 FOR A=0 TO 10
:20 PRINT A
:30 NEXT A
:LIST

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


READY
:RUN
0
1
2
3
4
5
6
7
8
9
10

READY
:

やっぱり1802は動きが遅いなあ。

 

・気になった点

SBC1802に関してではないが、TL866AのPGを最新の「minipro_setup685.rar」を導入しようとすると、マカフィーがウイルス検知した(誤検知?)。以前の「minipro_setup660.rar」なら問題なかったので、それを使用した。


V20-MBCが動いた

2021-07-24 19:55:19 | 日記


[0]ハード
 部品さえ集まればそれほど難しいところはない。コツコツと半田付け。ただしSDカードのサブボードがATMEGAにぶつかる(ATMEGAにソケットをつけないと大丈夫そうだけど)。あとでサブボード削ろう。
 メモリはまず動作確認だけだからTC551001BPLが1個で128KByteのみ。

 

[1]atmega32aにプログラムを書き込む
=======================================
ishi@takugaku:~$ avrdude -p atmega32 -c usbasp -U flash:w:S260320_R230520.ino.with_bootloader_atmega32_16000000L.hex

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502 (probably m32)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "S260320_R230520.ino.with_bootloader_atmega32_16000000L.hex"
avrdude: input file S260320_R230520.ino.with_bootloader_atmega32_16000000L.hex auto detected as Intel Hex
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 12.18s

avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against S260320_R230520.ino.with_bootloader_atmega32_16000000L.hex:
avrdude: load data flash data from input file S260320_R230520.ino.with_bootloader_atmega32_16000000L.hex:
avrdude: input file S260320_R230520.ino.with_bootloader_atmega32_16000000L.hex auto detected as Intel Hex
avrdude: input file S260320_R230520.ino.with_bootloader_atmega32_16000000L.hex contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 10.72s

avrdude: verifying ...
avrdude: 32768 bytes of flash verified

avrdude: safemode: Fuses OK (E:FF, H:99, L:E1)

avrdude done.  Thank you.

ishi@takugaku:~$ 

 

[2]atmega32aにfuseを書き込む
=======================================
ishi@takugaku:~$ avrdude -p atmega32 -c usbasp -U hfuse:w:0xd6:m -U lfuse:w:0xaf:m -U lock:w:0xcf:m

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502 (probably m32)
avrdude: reading input file "0xd6"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xd6:
avrdude: load data hfuse data from input file 0xd6:
avrdude: input file 0xd6 contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xaf"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xaf:
avrdude: load data lfuse data from input file 0xaf:
avrdude: input file 0xaf contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xcf"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0xcf:
avrdude: load data lock data from input file 0xcf:
avrdude: input file 0xcf contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude: safemode: Fuses OK (E:FF, H:D6, L:AF)

avrdude done.  Thank you.

ishi@takugaku:~$ 


[3]Micro SDに SD-S260320-R230520-v3.zipを展開したものを書き込む

[4]USB経由でシリアルを接続(私はputtyで115200baud)

[5]RESETを押すと起動メニューが出る。
 (すでに選択している場合は、USERボタンを押しながらRESET)
 メニューの選択が難しい。どこかに解説はないかなあ。

[6]とりあえず動作確認1
===CP/M80===========================================
V20-MBC - A250220
IOS - I/O Subsystem - S260320-R230520

IOS: Found extended serial Rx buffer
IOS: V20 clock set at 8MHz
IOS: Found RTC DS3231 Module (24/07/21 18:26:05)
IOS: RTC DS3231 temperature sensor: 30C
IOS: CP/M Autoexec is OFF

IOS: Select boot mode or system parameters:

 0: No change (5)
 1: iLoad
 2: iLoad-80
 3: Autoboot
 4: Autoboot-80
 5: Load OS from Disk Set 0 (CP/M 2.2)
 6: Change Disk Set 0 (CP/M 2.2)
 7: Change V20 clock speed (->4MHz)
 8: Change CP/M Autoexec (->ON)
 9: Change RTC time/date

Enter your choice >


A>dir


A: ASCIART  BAS : ASM      COM : AUTOEXEC SUB : AUTOEXEC TXT
A: CATCHUM  COM : CATCHUM  DAT : CATCONF  COM : D        COM
A: DDT      COM : DUMP     COM : ED       COM : GENHEX   COM
A: GPELED   BAS : HELLO    ASM : HELLO    COM : LADCONF  COM
A: LADDER   COM : LADDER   DAT : LOAD     COM : MAC      COM
A: MBASIC   COM : MBASIC85 COM : PIP      COM : RMAC     COM
A: RTC      BAS : SINX     BAS : STARTREK BAS : STAT     COM
A: SUBMIT   COM : TREKINST BAS : USERLED  BAS : XSUB     COM
A: XMODEM   COM : XMODEM   TXT
A>MBASIC ASCIART


BASIC-80 Rev. 5.21
[CP/M Version]
Copyright 1977, 78, 79, 80 (C) by Microsoft
Created: 15-Dec-80
30203 Bytes free
000000011111111111111111122222233347E7AB322222111100000000000000000000000000000
000001111111111111111122222222333557BF75433222211111000000000000000000000000000
000111111111111111112222222233445C      643332222111110000000000000000000000000
011111111111111111222222233444556C      654433332211111100000000000000000000000
11111111111111112222233346 D978 BCF    DF9 6556F4221111110000000000000000000000
111111111111122223333334469                 D   6322111111000000000000000000000
1111111111222333333334457DB                    85332111111100000000000000000000
11111122234B744444455556A                      96532211111110000000000000000000
122222233347BAA7AB776679                         A32211111110000000000000000000
2222233334567        9A                         A532221111111000000000000000000
222333346679                                    9432221111111000000000000000000
234445568  F                                   B5432221111111000000000000000000
                                              864332221111111000000000000000000
234445568  F                                   B5432221111111000000000000000000
222333346679                                    9432221111111000000000000000000
2222233334567        9A                         A532221111111000000000000000000
122222233347BAA7AB776679                         A32211111110000000000000000000
11111122234B744444455556A                      96532211111110000000000000000000
1111111111222333333334457DB                    85332111111100000000000000000000
111111111111122223333334469                 D   6322111111000000000000000000000
11111111111111112222233346 D978 BCF    DF9 6556F4221111110000000000000000000000
011111111111111111222222233444556C      654433332211111100000000000000000000000
000111111111111111112222222233445C      643332222111110000000000000000000000000
000001111111111111111122222222333557BF75433222211111000000000000000000000000000
000000011111111111111111122222233347E7AB322222111100000000000000000000000000000
Ok
system

CP/M WARM BOOT...


CP/M 2.2 Copyright 1979 (c) by Digital Research

A>

所要時間 8080 mode 8MHz 2分59秒、 4MHzだと5分57秒

[7]とりあえず動作確認2
===CP/M86===========================================
USERボタンを押しながらリセット

V20-MBC - A250220
IOS - I/O Subsystem - S260320-R230520

IOS: Found extended serial Rx buffer
IOS: V20 clock set at 8MHz
IOS: Found RTC DS3231 Module (24/07/21 18:26:05)
IOS: RTC DS3231 temperature sensor: 30C
IOS: CP/M Autoexec is OFF

IOS: Select boot mode or system parameters:

 0: No change (5)
 1: iLoad
 2: iLoad-80
 3: Autoboot
 4: Autoboot-80
 5: Load OS from Disk Set 0 (CP/M 2.2)
 6: Change Disk Set 0 (CP/M 2.2)
 7: Change V20 clock speed (->4MHz)
 8: Change CP/M Autoexec (->ON)
 9: Change RTC time/date

Enter your choice >6  Ok

Press CR to accept, ESC to exit or any other key to change

 ->Disk Set 1 (CP/M-86 1.1)                 

 

IOS: Current Disk Set 1 (CP/M-86 1.1)
IOS: Loading boot program (CPM86.BIN)... Done
IOS: V20 CPU is running from now

 

V20-MBC CP/M-86 BIOS - S220520
CP/M-86 Version 1.1 - 128KB RAM

A>dir


A: ASCIART  BAS : ASM86    CMD : ASM86    COM : AUTOEXEC SUB
A: AUTOEXEC TXT : BASIC    CMD : BASIC    TXT : DDT86    CMD
A: ED       CMD : GENCMD   CMD : GENCMD   COM : GENDEF   CMD
A: GENDEF   COM : GPELED   BAS : HELP     CMD : HELP     HLP
A: PIP      CMD : RTC      BAS : SINX     BAS : STAT     CMD
A: SUBMIT   CMD : MBASIC   CMD : USERLED  BAS
A>mbasic asciart


BASIC-86 Rev. 5.22
[CPM/86 Version]
Copyright 1977-1982 (C) by Microsoft
Created:  5-Mar-82
62390 Bytes free
000000011111111111111111122222233347E7AB322222111100000000000000000000000000000
000001111111111111111122222222333557BF75433222211111000000000000000000000000000
000111111111111111112222222233445C      643332222111110000000000000000000000000
011111111111111111222222233444556C      654433332211111100000000000000000000000
11111111111111112222233346 D978 BCF    DF9 6556F4221111110000000000000000000000
111111111111122223333334469                 D   6322111111000000000000000000000
1111111111222333333334457DB                    85332111111100000000000000000000
11111122234B744444455556A                      96532211111110000000000000000000
122222233347BAA7AB776679                         A32211111110000000000000000000
2222233334567        9A                         A532221111111000000000000000000
222333346679                                    9432221111111000000000000000000
234445568  F                                   B5432221111111000000000000000000
                                              864332221111111000000000000000000
234445568  F                                   B5432221111111000000000000000000
222333346679                                    9432221111111000000000000000000
2222233334567        9A                         A532221111111000000000000000000
122222233347BAA7AB776679                         A32211111110000000000000000000
11111122234B744444455556A                      96532211111110000000000000000000
1111111111222333333334457DB                    85332111111100000000000000000000
111111111111122223333334469                 D   6322111111000000000000000000000
11111111111111112222233346 D978 BCF    DF9 6556F4221111110000000000000000000000
011111111111111111222222233444556C      654433332211111100000000000000000000000
000111111111111111112222222233445C      643332222111110000000000000000000000000
000001111111111111111122222222333557BF75433222211111000000000000000000000000000
000000011111111111111111122222233347E7AB322222111100000000000000000000000000000
Ok

所要時間 2分41秒(8MHz)


diskの内容
=======CP/M86=======
A: ASCIART  BAS : ASM86    CMD : ASM86    COM : AUTOEXEC SUB
A: AUTOEXEC TXT : BASIC    CMD : BASIC    TXT : DDT86    CMD
A: ED       CMD : GENCMD   CMD : GENCMD   COM : GENDEF   CMD
A: GENDEF   COM : GPELED   BAS : HELP     CMD : HELP     HLP
A: PIP      CMD : RTC      BAS : SINX     BAS : STAT     CMD
A: SUBMIT   CMD : MBASIC   CMD : USERLED  BAS

B: ACCESS3  BOX : CALC     HLP : CALC     PAS : CALCDEMO MCS
B: CALCMAIN PAS : CMDLIN   PAS : LISTER   PAS : READ     ME 
B: TINST    CMD : TINST    DTA : TINST    MSG : TURBO    CMD
B: TURBO    MSG : README   TXT : ART      TXT : SA       PAS

C: PRINT    TST : WINSTALL CMD : WS       INS : WSMSGS   OVR
C: WSOVLY1  OVR : WSU      CMD : WS       CMD : README   TXT

D: 8087     SIM : CLEAR87  CMD : CLEARL   L86 : CLEARS   L86
D: CODEGEN  CMD : F32L     OBJ : F32S     OBJ : F77      CMD
D: F77      ERS : F77IO    ERR : LIB86    CMD : LINK86   CMD
D: MCCLMON  F77 : MCCLYMON F77 : PKMEM    F77 : PKMEMRAS A86
D: READ     ME  : SIEVE    F77 : TRYF77   SUB : README   TXT

E: CB86     CMD : CB86     L86 : CB86     OR1 : CB86     OR2
E: CB86     OR3 : LIB86    CMD : LINK86   CMD : RASM86   CMD
E: READ     ME  : README   TXT : ASCIART  BAS : GPELED   BAS
E: RTC      BAS : SINX     BAS : USERLED  BAS

F: 8080     CMD : 8080     DOC : VCPM15   A86 : VCPM15   CMD
F: XMODEM   COM : XMODEM   TXT : ASCIART  BAS : CATCHUM  COM
F: CATCHUM  DAT : CATCONF  COM : HELLO    COM : LADCONF  COM
F: LADDER   COM : LADDER   DAT : MBASIC   COM : MBASIC85 COM
F: RTC      BAS : SINX     BAS : STARTREK BAS : TREKINST BAS
F: USERLED  BAS : HELLO    ASM : ASM      COM : D        COM
F: MAC      COM : DDT      COM : README   TXT


diskの内容
=======CP/M80=======
A: ASCIART  BAS : ASM      COM : AUTOEXEC SUB : AUTOEXEC TXT
A: CATCHUM  COM : CATCHUM  DAT : CATCONF  COM : D        COM
A: DDT      COM : DUMP     COM : ED       COM : GENHEX   COM
A: GPELED   BAS : HELLO    ASM : HELLO    COM : LADCONF  COM
A: LADDER   COM : LADDER   DAT : LOAD     COM : MAC      COM
A: MBASIC   COM : MBASIC85 COM : PIP      COM : RMAC     COM
A: RTC      BAS : SINX     BAS : STARTREK BAS : STAT     COM
A: SUBMIT   COM : TREKINST BAS : USERLED  BAS : XSUB     COM
A: XMODEM   COM : XMODEM   TXT

B: BASCOM   COM : BASCOM   HLP : BASCOM2  HLP : BASLIB   REL
B: BCLOAD       : BRUN     COM : CREF     COM : CREF80   COM
B: README   TXT : L80      COM : LIB80    COM : M80      COM
B: MBASIC   COM : OBSLIB   REL : RANTEST  ASC : RANTEST  BAS
B: RANTEST  COM : RANTEST  REL : SAMPLE   BAS : SAMPLE   COM
B: SAMPLE   REL

C: CDADDS   MAC : CDADDS   REL : CDADM3   MAC : CDADM3   REL
C: CDANSI   MAC : CDANSI   REL : CDBEE    MAC : CDBEE    REL
C: CDHZ15   MAC : CDHZ15   REL : CDISB    MAC : CDISB    REL
C: CDPERK   MAC : CDPERK   REL : CDSROC   MAC : CDSROC   REL
C: CDWH19   MAC : CDWH19   REL : CDZEPH   MAC : CDZEPH   REL
C: COBLBX   REL : COBLIB   REL : COBLOC       : COBOL    COM
C: OPTIONS      : COBOL1   OVR : COBOL2   OVR : COBOL3   OVR
C: COBOL4   OVR : CREF80   COM : CRTDRV   REL : CRTEST   COB
C: CVISAM   COM : DEBUG    REL : L80      COM : LD80     COM
C: LIB      COM : M80      COM : REBUILD  COM : RECOVR   COB
C: RUNCOB   COM : SEQCVT   COM : SQUARO   COB : README   TXT

D: CPMIO    MAC : CRCKLIST CRC : CREF80   COM : DSKDRV   MAC
D: DTBF     MAC : F80      COM : FCHAIN   MAC : FORLIB   REL
D: INIT     MAC : IOINIT   MAC : L80      COM : LIB      COM
D: LPTDRV   MAC : LUNTB    MAC : M80      COM : TTYDRV   MAC
D: README   TXT

E: ANAGRAM  COM : CHAPTER1 DOC : CHAPTER2 DOC : CHAPTER3 DOC
E: DIARY    DOC : DICTSORT COM : FIND     COM : HOMONYMS TXT
E: HYEXCEPT TXT : HYPHEN   COM : LOOKUP   COM : MAINDICT CMP
E: KIDS         : MARKFIX  COM : MOVEPRN  COM : PATCH    LST
E: PRINT    TST : READ     ME  : README       : STAN
E: REVIEW   COM : RULER    DOC : SAMPLE1  DOC : SAMPLE2  DOC
E: SAMPLE3  DOC : SPELL    COM : TABLE    DOC : TEXT     DOC
E: TW       COM : WC       COM : WINSTALL COM : WORDFREQ COM
E: WS       COM : WS       OVR : WSCHANGE COM : WSCHANGE OVR
E: WSCHHELP OVR : WSHELP   OVR : WSINDEX  XCL : WSMSGS   OVR
E: WSPRINT  OVR : WSSHORT  OVR : README   TXT

プログラムの追加はどうするんだろう。メニューのiLoadあたりと思われるが今後調べる予定。


TINIDISK

2021-07-18 19:58:32 | 日記

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

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

CPMUG011  TINIDISK

アセンブルは問題なく終了
-------------------------
F>ASM TINIDISK
CP/M ASSEMBLER - VER 2.0
2000
00AH USE FACTOR
END OF ASSEMBLY

RunCPM Version 5.3 (CP/M 2.2 60K)

F>LOAD TINIDISK

FIRST ADDRESS 0100
LAST  ADDRESS 0AB8
BYTES READ    0985
RECORDS WRITTEN 14


F>TINIDISK

SHERRY BROTHERS TINY BASIC VER. 3.1

OK
>10 FOR X=0 TO 10
>20   PRINT X
>30 NEXT X
>LIST
  10 FOR X=0 TO 10
  20 PRINT X
  30 NEXT X

OK
>RUN
     0
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

OK
>SAVE TESTPG

OK
>BYE

RunCPM Version 5.3 (CP/M 2.2 60K)

F>dir
F: STARTREK TBI : TESTPG   TBI : TINIDISK ASM : TINIDISK COM
F: TINIDISK DOC : TINIDISK HEX : TINIDISK PRN


感想
ベースは有名なWANGのPalo Alto Tiny BASIC(この時すでにCOPYLEFTになってる)

;*                  TINY BASIC FOR INTEL 8080
;*                      VERSION 1.0
;*                    BY LI-CHEN WANG
;*                     10 JUNE, 1976 
;*                       @COPYLEFT 
;*                  ALL WRONGS RESERVED


面白いのは、もともとのWANGのTINY BASICはRST1〜7をサブルーチンの代わりに使用し、インタープリタを小さくしているため、CP/Mでは変更が必要となる。通常ならCALLに置き換えてアセンブルし直すのだが、このプログラムでは、なんと初期化でRST1〜7を上書きしている。
(なのでRST7を使用するDDTでのデバッグは出来ない)

                ; RESTART TABLE
 0A50            ORG 0A50H
                RSTBL:
 0A50 E3               XTHL           ;*** TSTC OR RST 1 *** 
 0A51 EF               RST  5         ;IGNORE BLANKS AND 
 0A52 BE               CMP  M         ;TEST CHARACTER
 0A53 C32F01           JMP  TC1       ;REST OF THIS IS AT TC1
                ;* 
 000E =         CRLF: EQU 0EH ;EXECUTE TIME LOCATION OF THIS INSTRUCTION.
 0A56 3E0D       MVI  A,0DH     ;*** CRLF ***
                ;* 
 0A58 F5               PUSH PSW       ;*** OUTC OR RST 2 *** 
 0A59 3AC009           LDA  OCSW      ;PRINT CHARACTER ONLY
 0A5C B7               ORA  A         ;IFF OCSW SWITCH IS ON
 0A5D C35D09           JMP  OC2       ;REST OF THIS IS AT OC2
                ;* 
 0A60 CD1606           CALL EXPR2     ;*** EXPR OR RST 3 *** 
 0A63 E5               PUSH H         ;EVALUATE AN EXPRESION 
 0A64 C3D205           JMP  EXPR1     ;REST OF IT IS AT EXPR1
 0A67 57               DB   'W' 
                ;* 
 0A68 7C               MOV  A,H       ;*** COMP OR RST 4 *** 
 0A69 BA               CMP  D         ;COMPARE HL WITH DE
 0A6A C0               RNZ            ;RETURN CORRECT C AND
 0A6B 7D               MOV  A,L       ;Z FLAGS 
 0A6C BB               CMP  E         ;BUT OLD A IS LOST 
 0A6D C9               RET
 0A6E 414E             DB   'AN'
                ;* 
 0028 =         SS1: EQU 28H ;EXECUTE TIME LOCATION OF THIS INSTRUCTION.
 0A70 1A         LDAX D         ;*** IGNBLK/RST 5 ***
 0A71 FE20             CPI  40Q       ;IGNORE BLANKS 
 0A73 C0               RNZ            ;IN TEXT (WHERE DE->)
 0A74 13               INX  D         ;AND RETURN THE FIRST
 0A75 C32800           JMP  SS1       ;NON-BLANK CHAR. IN A
                ;* 
 0A78 F1               POP  PSW       ;*** FINISH/RST 6 ***
 0A79 CDCD07           CALL FIN       ;CHECK END OF COMMAND
 0A7C C3E007           JMP  QWHAT     ;PRINT "WHAT?" IFF WRONG
 0A7F 47               DB   'G' 
                ;* 
 0A80 EF               RST  5         ;*** TSTV OR RST 7 *** 
 0A81 D640             SUI  100Q      ;TEST VARIABLES
 0A83 D8               RC             ;C:NOT A VARIABLE
 0A84 C30301           JMP  TSTV1     ;JUMP AROUND RESERVED AREA
                ; ROUTINE TO COPY RESTART TABLE INTO LOW MEMORY
 0008 =         RST1: EQU 8 ;LOCATION FIRST REATART ROUTINE
                
 0040 =         EOT: EQU 40H ;LAST LOC TO BE FILLED
                
 0AA0            ORG 0AA0H
 0AA0 210800    NINIT: LXI H,RST1  ;POINT TO BEGINNING OF MODEL TABLE
 0AA3 11500A     LXI D,RSTBL
 0AA6 1A        NXT: LDAX D
 0AA7 77         MOV M,A
 0AA8 23         INX H
 0AA9 13         INX D
 0AAA 3E40       MVI A,EOT
 0AAC BD         CMP L
 0AAD C2A60A     JNZ NXT
 0AB0 21FF09     LXI H,INIT
 0AB3 220101     SHLD START+1
 0AB6 C30001     JMP START
 0F00                  ORG  0F00H
 0F00 =         TXTEND EQU  $         ;TEXT SAVE AREA ENDS 
 0F00           VARBGN DS   2*27      ;VARIABLE @(0)
 0F36                  DS   1         ;EXTRA BYTE FOR BUFFER
 0F37           BUFFER DS   80        ;INPUT BUFFER
 0F87 =         BUFEND EQU  $         ;BUFFER ENDS
 0F87                  DS   40        ;EXTRA BYTES FOR STACK
 0FAF =         STKLMT EQU  $         ;TOP LIMIT FOR STACK
 2000                  ORG  2000H
 2000 =         STACK  EQU  $         ;STACK STARTS HERE
 2000                  END

 

コマンド
-------
LIST,RUN,NEW,LOAD,SAVE,BYE


--------
NEXT,LET,OUT,POKE,WAIT,IF
GOTO,GOSUB,RETURN
REM,FOR,INPUT,PRINT,STOP

関数
--------
RND,INP,PEEK,USR,ABS,SIZE


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