所以,我的目标是编写一个子程序,当被调用时,它会挂起,直到用户输入一个由<return>
终止的字符串,然后它返回(可能通过将其写入用户指定的地址)。 / p>
我的问题在于如何最好地从键盘上获取单个角色。我认为有三种方式:
从键盘中侦听中断并获取角色以响应这些。这意味着getline
执行的逻辑将在中断处理程序中,这似乎会导致一些问题。即如何回复getline
以回复<return>
键?在中断处理程序中,您没有方便的返回地址。在中断处理程序中放置太多特定逻辑的模式在我看来......错了......即使我在低级编码方面缺乏经验。
只需按住键盘即可按键。
使用中断处理程序实现旧的1.1行为,方法是将所有按下的字符加载到循环缓冲区(可能长度为1)。
对这些选项的更多看法会很好。
答案 0 :(得分:1)
当你调用getline
时,它应该设置中断处理程序,以便将类型化的键添加到缓冲区并更新索引
然后启动一个忙循环,直到缓冲区的末尾有一个新行并禁用键盘中断
getline:
set push B
set push X
;--coming from interrupt dispatch
SET B, buffer ;--address from argument
SET C, bufferlength ;-- from argument
SET PUSH, 0
SET X, SP ;--address of counter
SET A, startKeyInput
INT softwareInterrupt
IAQ 1;--restart interrupts
startloop:
SET A,buffer
ADD A,SP
IFN [A],'\n'
set PC, startloop ;--busy loop
IFL PEEK, X
set PC, startloop ;-- stopping buffer overflow
IAQ 0;--stop interrupts
set A, stopKeyInput
INT softwareInterrupt
SET C,POP;-- C is return value
SET X,POP
SET B,POP
FRI ;-- from interrupt
并且中断处理程序将类型化的键添加到缓冲区,直到它满,并将1加到计数器中,这可以放在中断处理程序本身,但是你需要在忙循环中重新激活中断