ベーシックマスタレベル3でFLEX9を動作させる作戦の続きです。
レベル3のROM経由でCRT出力やKB入力は難しいので、取り急ぎACIA用のConsole I/O Driverを作ってみました 。
自由にROMと拡張RAMをバンク切り換えできるようになればROMの機能を使えると思うのですが、現状全くうまくいきません・・・
と、いうわけでレベル3を6809のボードコンピュータとして動作させてFLEX9を動かして、動くようになったらそこから拡張してKBやCRTを実装していく作戦です。
今回作成したコンソールI/Oドライバはこんな感じです。
Old68funさんの6809SBCで動作しているConsole I/O Driverを参考にしていますので、ほぼ一緒です^^;;;
1 # ;**********************************************************
2 # ;* HITACHI BASIC MASTER LEVEL 3 MARK5 *
3 # ;* FLEX9 Console I/O Driver (ACIA) for AS63_DOS *
4 # ;* Ver0.03 2021/12/21 修正中 *
5 # ;* BaseSoft TSC 6809 FLEX Adaptation Guide *
6 # ;* old68fun 6809SBC Disk Driver / SNI3 L3-FORTH Disk WORD * *
8 # ;* 6809の考え方 *
10 # ;**********************************************************
11 0000
12 # ;目標
13 # ;マーク5のACIAで入出力できるコンソールI/Oドライバ
14 0000
15 # ;作業メモ
16 # ;v0.03 割込み関連手直し
17 0000
18 FFC4 CMDREG EQU $FFC4 ;ACIAコマンドレジスタ(W)
19 FFC4 STSREG EQU CMDREG ;ACIAステータスレジスタ(R)
20 FFC5 DATAREG EQU CMDREG+1 ;ACIAデータレジスタ(WR)
21 FFD0 MDSEL EQU $FFD0 ;MODE-SELレジスタ
23 0000
24 0043 MRSTA EQU $43 ;master reset
25 0055 CLRTSA EQU $55 ;RTS=H,1stopbit,non pari,8bit,16x
26 0015 SERTSA EQU $15 ;RTS=L,1stopbit,non pari,8bit,16x
27 0000
28 CD00 START EQU $CD00
29 0000
30 D370 ORG $D370
31 D370
32 D370 7E D380 ENTIHND JMP IHND ;割込入口
33 D373
34 #; -----[ INCHNE 文字入力(エコーバックなし) ] --------------------------------
35 #; 引数なし 戻り値AccA=文字
36 D373 INNECH EQU *
37 D373 B6 FFC4 IN01 LDA STSREG
38 D376 84 01 ANDA #$01
39 D378 27 F9 BEQ IN01
40 D37A B6 FFC5 LDA DATAREG ;get data
41 D37D 84 7F ANDA #$7F
42 D37F 39 RET RTS
43 D380
44 D380
45 #; -----[ INHDLR 割込み処理の位置 ]
46 #; 引数なし 戻り値なし
47 D380 IHND EQU *
48 D380 B6 FFC5 LDA DATAREG ;ACIAの空読みでIRQ解除
49 D383 3B RTI
50 D384
51 D384
52 #; -----[ SWIVEC SWI3として処理されるプログラムの実アドレス ]
53 #; 引数なし 戻り値なし
54 #; 未実装
55 D384
56 #; -----[ IRQVEC IRQとして処理されるプログラムの実アドレス ]
57 #; 引数なし 戻り値なし
58 #; 未実装
59 D384
60 D384
61 #; -----[ TMOFF ]
62 #; 引数なし 戻り値なし
63 #; 未実装
64 D384
65 D384
66 #; -----[ TMON ]
67 #; 引数なし 戻り値なし
68 #; 未実装
69 D384
70 D384
71 #; -----[ TMINIT タイマの初期化 ]
72 #; 引数なし 戻り値なし
73 #; 未実装
74 D384
75 D384
76 #; -----[ MONITOR ]
77 #; 引数なし 戻り値なし
78 #; 未実装
79 D384
80 D384
81 #; -----[ INIT ターミナルの初期化 ] -------------------------------------------
82 #; 引数なし 戻り値なし
83 D384 INIT EQU *
84 D384 86 60 LDA #$60 ;40CHR/NOR/RS232C
85 #; LDA #$E0 ;80CHR/HIRES/RS232C
86 D386 B7 FFD0 STA MDSEL ;L3 RS232C選択
87 D389
88 D389 86 43 LDA #MRSTA
89 D38B B7 FFC4 STA CMDREG ;* initialize ACIA(6850)
90 D38E 12 NOP
91 D38F 86 15 LDA #SERTSA ;RTS=L,1stopbit,non pari,8bit,16x
92 D391 B7 FFC4 STA CMDREG
93 D394 B6 FFC5 INI2 LDA DATAREG ;dummy read
94 D397 B6 FFC4 LDA STSREG ;check buffer full
95 D39A 84 01 ANDA #$01
96 D39C 26 F6 BNE INI2 ;*wait acia buffer empty
97 D39E 39 RTS
98 D39F
99 D39F
100 #; -----[ STATUS 入力バッファチェック ] ---------------------------------------
101 #; 引数なし 戻り値 Z=0で入力あり
102 D39F STATUS EQU *
103 D39F 34 02 PSHS A
104 D3A1 B6 FFC4 LDA STSREG
105 D3A4 84 01 ANDA #$01
106 D3A6 35 02 PULS A
107 D3A8 39 RTS
108 D3A9
109 D3A9
110 #; -----[ INPUT 文字入力(エコーバックあり) ] ----------------------------------
111 #; 引数なし 戻り値 AccA=文字コード
112 D3A9 INPUT EQU *
113 D3A9 B6 FFC4 INPUT2 LDA STSREG
114 D3AC 84 01 ANDA #$01
115 D3AE 27 F9 BEQ INPUT2
116 D3B0 B6 FFC5 LDA DATAREG ;get data
117 D3B3 84 7F ANDA #$7F
118 D3B5 8D 01 BSR OUTPUT
119 D3B7 39 RTS
120 D3B8
121 D3B8
122 #; -----[ OUTPUT AccAの文字を出力 ] -------------------------------------------
123 #; 引数 AccA=文字コード 戻り値 AccA=文字コード(レジスタ保存)
124 D3B8 OUTPUT EQU *
125 D3B8 34 02 PSHS A
126 D3BA B6 FFC4 OUT01 LDA STSREG
127 D3BD 84 02 ANDA #$02
128 D3BF 27 F9 BEQ OUT01
129 D3C1 35 02 PULS A
130 D3C3 B7 FFC5 STA DATAREG ;send data
131 D3C6 39 RTS
132 D3C7
133 D3C7
134 D3E5 ORG $D3E5
135 #; I/O FUNCTION テーブル
136 D3E5 D373 INCHNE FDB INNECH ;$D3E5
137 D3E7 D380 IHNDLR FDB IHND
138 D3E9 FFFF SWIVEC FDB $FFFF
139 D3EB FFFF IRQVEC FDB $FFFF
140 D3ED D37F TMOFF FDB RET
141 D3EF D37F TMON FDB RET
142 D3F1 D37F TMINT FDB RET
143 D3F3 DCF4 MONITR FDB $DCF4 ;L3 MONITOR
144 D3F5 D384 TINIT FDB INIT
145 D3F7 D39F STAT FDB STATUS
146 D3F9 D3B8 OUTCH FDB OUTPUT
147 D3FB D3A9 INCH FDB INPUT
148 D3FD
149 D3FD
150 CD00 END START
Total Errors 0
AS63_DOSのアセンブラではORGの指定がアドレスの昇順になっていないとダメなようなのでI/Oの
ファンクションテーブルは下に書く必要がありそうです。
L3エミュのシリアルポートをTELNETで使う場合は「WILL ECHO送信」をオンしておきます。
RS232Cのシリアルポートで最小限のコンソールは接続できそうです。
そんな、Console I/O Driver 作成の記録・・・
ベーシックマスタの情報をお探しの方は是非こちらからどうぞ → Amazon