Использование клавиатуры в симуляторе Digital Lab Sim of Mars - PullRequest
1 голос
/ 05 апреля 2020

Мне не удается управлять клавиатурой инструмента Digital Lab Sim Mars 4.2.

В соответствии с указаниями в справке «Значение байта по адресу 0xFFFF0014: получить строку и столбец нажатой клавиши, 0 если не нажата клавиша ". Тем не менее, если вы читаете эту позицию памяти, она не работает. Следующая простая последовательность должна читать клавиатуру, но она не работает

ini:
lui $1,0xffff

lw $2,0x0014($1)


j ini

Она всегда возвращает 0, несмотря на нажатие любой клавиши инструментов.

У меня нет проблем с семью Сегмент ди git этого инструмента вообще. Его довольно просто использовать по адресу 0xFFFF0012. Тем не менее, с клавиатурой этого инструмента никак нельзя

Кто-нибудь знает, как читать клавиатуру Digital Lab Sim of Mars 4.2?

Большое спасибо

1 Ответ

1 голос
/ 05 апреля 2020

Я отвечаю сам.

Прежде чем читать ключ, вы должны выбрать строку. Следующая последовательность проверяет три строки (и это работает):

    sub $0,$0,$0
    lui $2,0xffff       # Base address IO

main:
addi $ 3, $ 0,0x01 # бит 0 = 1 для строки 1 sb $ 3,0x0012 ($ 2) # Выбор строка 1 (запись в порт 0xFFFF 0012) lb $ 4,0x0014 ($ 2) # $ 4 = код нажатой клавиши строки 1 ($ 4 = 0, если не нажата) bne $ 4, $ 0, строка 1 #, если была нажата какая-то клавиша строки 1 - > go row1 # тест строки 2 и $ 3, $ 0,0x02 # бит 1 = 1 для строки 2 sb $ 3,0x0012 ($ 2)
фунт $ 4,0x0014 ($ 2)
bne $ 4, $ 0, row2 # тест строки 3 и $ 3, $ 0,0x04 # бит 2 = 1 для строки 3 sb $ 3,0x0012 ($ 2)
фунт $ 4,0x0014 ($ 2)
bne $ 4, $ 0, строка 3 # тест строки 4 addi $ 3, $ 0,0x08 # бит 3 = 1 для строки 4 sb $ 3,0x0012 ($ 2)
фунт $ 4,0x0014 ($ 2)
bne $ 4, $ 0, строка 4 j основная строка 1: # $ 4 имеет код: нажатая клавиша этой строки row2: # $ 4 содержит код нажатой клавиши этой строки row3: # $ 4 содержит код нажатой клавиши этой строки row4: # $ 4 содержит код нажатой клавиши этой строки

...