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