我正在为学校制作合成器,我希望能够在按键被按下的时间内弹奏一个音符。我已经知道 syscall 30 会给我系统时间,但我不知道如何知道何时不再按下该键。
1 回答
0
以下是 MARS & RARS(MARS 的 RISC V 版本)的 Keyboard and Display Simulator 插件工具的一些相关代码:
private class KeyboardKeyListener implements KeyListener {
public void keyTyped(KeyEvent e) {
int updatedReceiverControl = readyBitSet(RECEIVER_CONTROL);
updateMMIOControlAndData(RECEIVER_CONTROL, updatedReceiverControl, RECEIVER_DATA, e.getKeyChar() & 0x00000ff);
if (updatedReceiverControl != 1) {
InterruptController.registerExternalInterrupt(EXTERNAL_INTERRUPT_KEYBOARD);
}
}
/* Ignore key pressed event from the text field. */
public void keyPressed(KeyEvent e) {
}
/* Ignore key released event from the text field. */
public void keyReleased(KeyEvent e) {
}
}
您可以更改此代码以在较低级别的事件处理程序中执行某些操作:keyPressed 和 keyReleased — 而不是较高级别的事件:keyTyped。
这个想法是,您可以在一些新的 MMIO 寄存器位置提供键码数据而不是字符数据,或者劫持现有的接收器数据和控制键码数据而不是字符数据的位置。
于 2020-01-21T19:56:26.170 回答