2012-05-16 1 views
2

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

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

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

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

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

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 

ответ

5

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

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

+0

Много оценил, ура! – user1398478

0

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

SET I, [0x9010] 

 Смежные вопросы

  • Нет связанных вопросов^_^