ベーシックマスタレベル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へのデータ書き込みの記録・・・