Last Updated on 2022年2月19日 by kabekin
ベーシックマスタレベル3でFLEX9を動作させる作戦の続きです。
VRAMへのデータ書込みでROMのルーチンに頼らずCRT表示ができることが確認できたので
ROMルーチンに頼らないKB入力について調べてみました。
どうやらROM内にKBのスキャンコードとASCIIコードの変換テーブルがあり、そのテーブルで変換していることが分かったので、テーブル部分の一部を抜き出してKB入力を試してみました。
とりあえず、KBスキャンコードからASCIIコードに変換できることは確認できましたが、
CRT出力以上にKB入力は難しそうです・・・^^;;;
ACIAのデータ入力をキーボードからのデータ読込に差替えてみたところ、入力はできますがキースキャンが高速なのでちょっとキーを押しただけでも大量に取り込んでしまいます^^;;
IRQ割込みでキースキャンコードをASCIIコードに変換して変数に代入、読み出したら変数クリアで次のキーを入力可にしていますがスキャンが速い・・・
キーボードから読み込む処理はIRQ割込で、データの読込はConsoleドライバのINPUTサブルーチンとそれぞれ同期していないので何か同期する工夫が必要なのかもしれません。
ConsoleドライバのSTATサブルーチンで常時キー入力を監視しているのかと思っていましたが、トレースすると毎回STATに入っているわけでは無さそうで、キー入力監視につかえるのかどうかわかりませんでした・・・
こちらも、CRT出力同様ハードルが高そうです・・・
試したコードはこんな感じ。
IRQ割込みでキースキャンコードをASCIIコードに変換し変数にセット
Console I/OドライバのIHNDサブルーチン
#; -----[ INHDLR 割込み処理 ] #; 引数なし 戻り値なし IHND EQU * #; LDA DATAREG ;ACIAの空読みでIRQ解除 #; LDA KBREG ;KBレジスタ空読み JSR KBENC LDA #$80 STA TIMEMASK ;内部タイマ停止 LDA FDSTREG ;空読みでNMI解除 RTI
キースキャンエンコード処理
#; --- KB入力 #; IN=KB OUT AccA=ASCIIコード CCR=Z KBENC EQU * LDB $FFE0 ;KB-REG CMPB #$FF BEQ KBENC2 ;#$FFならRTS CMPB #0 BMI KBENC3 ;b7オンならKEY入力ありでKBENC3へ CLRA STA KBCHR ;b7がオフならKBCHRをクリア KBENC2 RTS KBENC3 ANDB #$7F LDX #KBTBL LDA B,X STA KBCHR ;ASCIIに変換してKBCHRへセット RTS KBTBL EQU * FCB $20,$1E,$3F,$1D,$1F,$1C,$00,$00,$00,$00,$00,$00,$1B,$38,$39,$2A FCB $37,$34,$36,$38,$30,$5E,$2D,$33,$08,$35,$31,$32,$39,$37,$08,$5C FCB $55,$52,$59,$49,$50,$5B,$40,$30,$51,$54,$57,$45,$4F,$2E,$0C,$0D FCB $4A,$46,$48,$4B,$3B,$5D,$3A,$34,$41,$47,$53,$44,$4C,$35,$36,$2D FCB $4D,$56,$4E,$2C,$2F,$2F,$5F,$31,$5A,$42,$58,$43,$2E,$32,$33,$2B FCB $27,$24,$26,$28,$30,$5E,$3D,$23,$12,$25,$21,$22,$29,$37,$12,$5C FCB $55,$52,$59,$49,$50,$00,$40,$30,$51,$54,$57,$45,$4F,$2E,$0B,$0D FCB $4A,$46,$48,$4B,$2B,$5D,$2A,$34,$41,$47,$53,$44,$4C,$35,$36,$2D
(ASCIIコード代入用のKBCHR変数はNULLならデータなしと判断することにしています)
Console I/OドライバのINPUTサブルーチンでデータ入力(ACIAのデータ待ちをそのまま差替え)
#; -----[ INPUT 文字入力(エコーバックあり) ] ---------------------------------- #; 引数なし 戻り値 AccA=文字コード INPUT EQU * #;INPUT2 LDA STSREG #; ANDA #$01 #; BEQ INPUT2 #; LDA DATAREG ;get data #; ANDA #$7F #; BSR OUTPUT #; RTS INPUT2 LDA KBCHR BEQ INPUT2 ANDA #$7F CLRB STB KBCHR ;読み出したらKBCHRをクリア BSR OUTPUT INPUT3 RTS
SHIFTキーやGRAPHキーの処理を含め、完全なKB入力を作るのは相当難しそうです^^
こちらも夜な夜な調べていますが、今のところよくわかりません^^;;;
こう使ったらいい等、ご存じの方アドバイスを頂けると幸いです。
そんなレベル3のキーボード入力の記録・・・・
s1,l3のキー入力について 辻川淳氏
i/o p259 landom box
何月号かはわかりません。
参考になれば幸いです。
sni3さんの記事は1986年12月号ですね。
sni3さん、かつみんさん
情報ありがとうございます^^
I/O誌の1986年12月号は持っていないので、該当の記事を探してみます
すぐ眠くなりますが、ROMの逆アセンブルとトレースをもう少し頑張ってみます^^;;;