2

0x10cに備えるために、DCPU-16のアセンブリの学習を開始しましたが、実行中のチュートリアルの終わりに到達すると、プログラムがキーボード入力に応答していないことがわかりました。ステップバイステップに入ると、CPUがキーボード入力を待機するように設定されたループでコードがスタックしていることがわかりました。

ここで問題のある行:

IFE [0x9000 + I],0 ; if keyboard buffer is empty
SET PC,loop

コードが古いバージョンのDCPU用であることが原因でしょうか?もしそうなら、それは今どのように機能しますか?

Stackoverflowの最初の投稿です。偽物を作った場合は失礼します。ありがとうございます。完全なコード:

SET A,0
SET B,0
SET C, 0xF000
SET I, 0
:loop
IFE [0x9000 + I],0 ; if keyboard buffer is empty
SET PC,loop
IFE [0x9000 + I],8
SET PC, backspace
IFE [0x9000 + I],10
SET PC, enter
SET B, [0x9000 + I]
BOR B,C
SET [0x8000+A], B
SET [0x9000 + I], 0
ADD A, 1
ADD I, 1
IFE I, 16
SET I, 0
SET PC,loop
:backspace
SUB A, 1
SET [0x8000+A],0
SET [0x9000 + I], 0
ADD I, 1
IFE I, 16
SET I, 0
SET PC,loop
:enter
AND A, 0xFFE0
ADD A, 0x0020
SET [0x9000 + I], 0
ADD I, 1
IFE I, 16
SET I, 0
SET PC,loop
4

2 に答える 2

5

最新の仕様では、キーボードはアドレス 0x9000 でメモリ マッピングを使用する代わりに、割り込みベースです。そのため、最新のエミュレーターを使用している場合、コードは機能しません。

http://dcpu.com/highnerd/rc_1/keyboard.txt

于 2012-05-16T14:05:32.760 に答える
0

古い仕様でも、バッファ開始インデックスは $9010 に格納されていたと思います。そのため、I を 0 に設定する代わりに、次のようにする必要がありました。

SET I, [0x9010]
于 2012-06-11T11:04:59.050 に答える