DCPU-16 не будет принимать ввод с клавиатуры

Я начал изучать ассемблер для DCPU-16, чтобы подготовиться к 0x10c, но по окончании урока, через который я проходил, я обнаружил, что программа не отвечает на ввод с клавиатуры. Переходя к шагу, я обнаружил, что код застревает в цикле, настроенном на то, чтобы процессор ожидал ввода с клавиатуры.

Оскорбительная линия здесь:

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

Может ли быть так, потому что код для более старой версии DCPU? Если так, то как это будет работать сейчас?

Первый пост о переполнении стека, если я сделал какие-то фальшивки, прошу прощения, и спасибо всем. Полный код:

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

2 ответа

Решение

В последних спецификациях клавиатура основана на прерываниях, а не использует отображение памяти по адресу 0x9000. Так что, если вы используете современный эмулятор, ваш код не будет работать.

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

Даже со старой спецификацией, я полагаю, что индекс начала буфера хранился в $9010, поэтому вместо установки I в 0, вы должны были сделать:

SET I, [0x9010]
Другие вопросы по тегам