ベーシックマスタレベル3でFLEX9を動作させる作戦の続きです。
今回のFLEX9動作環境は64KBの拡張RAMを使っている上にTPAを連続して確保したいので$8000付近にROMとのバンク切替用のワークが取れないのでROMの機能がうまく使えません。
ROMのサブルーチンが上手く使えないのでFLEX9のドライバ内にレベル3のCRT出力とKB入力の機能を実装したいと思います。
64KB拡張RAMで動作しているプログラムからCRT出力するにはVRAMエリアのバンク切換えが必要ですがレベル3にはVRAMエリアのみバンク切り換えできる機能が用意されていました。
64K拡張RAM使用中のVRAMアクセス切替は$FFE8 で 拡張64KRAM $78 ⇔ $7C VRAMエリア
を切替えることでVRAMエリアを切替できました
試しにACIAに文字出力するところでUレジにVRAMの先頭$400をセットしデータを書いてみました
ORG $E020 #; AccA=ASCIIコード OUTPUT EQU * PSHS A OUT01 LDA $FFC4 ANDA #$02 BEQ OUT01 PULS A STA $FFC5 ;send data BSR CRTCHR RTS CRTCHR EQU * CMPA #$20 BLS CHRRTS CMPA #$7F BHI CHRRTS LDB #$07 STB $FFD8 ;COLOR REG LDB #$7C STB $FFE8 ;VRAM SELECT LDU CADRS STA ,U+ STU CADRS LDB #$78 STB $FFE8 ;EXTRAM SELECT CHRRTS RTS
ACIAのデータレジスタを書いた後に追加したので、ACIA出力とVRAMへのデータ書き込みは分かれているはず・・
表示結果はこんな感じで、VRAMに書いた文字は反映されました^^
表示がおかしくなるので$20のスペースはスキップしていますが、文字出力はできるようです。
しかし、ACIAに文字を送信した後にVRAMにデータを書いていますが、なぜだかACIAのデータ送信がおかしくなります
(ACIA送信中に割込みORCC #$50で禁止にしてみても改善なし・・)
VRAMへのスクロールや改行処理を追加しACIAの文字化けを解決すればCRT表示も実装できそうな感じです。
ROMに頼らずBIOS内のプログラムで完結できるように頑張ってみます^^
ざっくり追いかけてみた感じではCRT出力よりもKB入力の方が複雑な感じがしました
そんなVRAMへのデータ書き込みの記録・・・