MB-6892 マーク5の拡張RAMでFLEX9を試す その4 (Console I/O Driver)

Last Updated on 2022年1月8日 by kabekin

ベーシックマスタレベル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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください