2017-12-02 24 views
1

私はこの6502エミュレータでしばらくの間作業していますが、私は単純なエンハンスドBASIC ROMを動作させるために取り組んでいます。正確なクロックタイミングがないにもかかわらず、エミュレータはAllSuiteA.asmを通過しました。 EhBASICでは、そのアドレスに読み込みが行われたときに、$ F001の値を出力することによって出力を得ることができました。EhBASIC入力で6502エミュレータ

しかし、入力プロセスをエミュレートする方法はわかりません。 This postは、EhBASICが入力を望むときはいつでも$ F004をポーリングすると述べています。しかし、私の現在のコードは2つの問題を抱えているようだ:

while(1) 
    { 
    decodeandexecute(); 
    if(lastread == 0xF004) 
     { 
     inputchar = getchar(); 
     CPUMEM[0xF004] = inputchar; 
     } 
    if(lastwrite == 0xF001) 
     { 
     printf("%c",CPUMEM[0xF001]); 
     } 
    } 
  • 入力は、プログラムがメモリサイズを要求した後、任意の入力を与えることがちょうど読書のループを引き起こします
  • (予定)個々の文字を通じてのみ可能です$ F004(LDA $ F004)から - つまり、入力を止める時間をEhBASICに知らせることはできません。

文字列を入力して「メモリサイズ? 。

さらに、EhBASICにメモリサイズを自動的に計算させたい場合は、$ F004に何を入力する必要がありますか?

私は(誰かがいくつかのキーを押すまでは待機します)あなたはコードでgetcharを使用して、私の記憶が正しけれ場合には、ブロッキング・コールでご覧かなりこの分野で初心者....

答えて

1

よ。 ehbasicそれを手動で

は言う:これに対処するため

How to. 
The interpreter calls the system routines via RAM based vectors and, 
as long as the requirements for each routine are met, these can be changed 
on the fly if needs be. 

All the routines exit via an RTS. 

The routines are ... 

Input 
This is a non halting scan of the input device. If a character is ready it 
should be placed in A and the carry flag set, if there is no character then A, 
and the carry flag, should be cleared. 

一つの方法は、2つのスレッドを使用することです。 6502のehbasicを実行するエミュレーションを実行するスレッドとキーボードをポーリングする別のスレッド。 次に、ポーリングスレッドが、入力キーのストロークを、ehbasic入力ルーチンが使用できる小さなバッファにプッシュするようにします。

マニュアル:質問を読んhttp://www.sunrise-ev.com/photos/6502/EhBASIC-manual.pdf

UPDATE /あなたがにリンクされている答え、私はそれが修正さehbasicでご覧ください。 あなたのキーボードポーリングスレッドは、キーストロークを$ F004に読み込む必要があります(そして、しばらくしてから、F004をもう一度クリアしてください)。

UPDATE 2 デバッグのヒント:最初のバージョンでは、10 print "hello" 20 goto 10などの固定入力の文字列があり、そこから$ f004がフィードされます。そうすれば、実際のキーボードを使用する際の問題を心配する必要はありません。

関連する問題