Frage

I've started learning assembly for the DCPU-16 to prepare for 0x10c, but upon arriving at the conclusion of the tutorial I was running through, I found that the program wasn't responding to keyboard input. Going into step by step, I found that the code was getting stuck at the loop set up to have the cpu wait for keyboard input.

Offending line here:

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

Could it be because the code is for an older version of the DCPU? If so, how would it work now?

First post on Stack overflow, if I've made any faux pas please excuse me, and thank you all. Full Code:

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
War es hilfreich?

Lösung

In the latest specs, the keyboard is interrupt-based instead of using memory mapping at address 0x9000. So if you're using an up-to-date emulator, your code won't work.

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

Andere Tipps

Even with the old spec, I believe that the start-of-buffer index was stored in $9010, so instead of setting I to 0, you should have done:

SET I, [0x9010]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top