Difference between revisions of "Input"
From SizeCoding
								
												
				 (Created page with "== Checking for ESCAPE ==  This is fairly easy:  Monitor the keyboard scancode port for ESC which is #1, then deal with it:  <syntaxhighlight lang=nasm>         in      al,60h...")  | 
				|||
| Line 8: | Line 8: | ||
         jnz     mainloop        ;fall through if 0, do jump somewhere else if otherwise  |          jnz     mainloop        ;fall through if 0, do jump somewhere else if otherwise  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
| + | |||
| + | == Checking for '''any''' keypress ==  | ||
| + | |||
| + | If you need to shave a byte, it might be possible in some environments to check for any keypress instead of just escape using less code:  | ||
| + | |||
| + | <syntaxhighlight lang=nasm>  | ||
| + |         in      al,60h          ;read whatever is at keyboard port  | ||
| + |         das                     ;If non-zero, parity will be set  | ||
| + |         jp      mainloop        ;Jump if parity  | ||
| + | </syntaxhighlight>  | ||
| + | |||
| + | An alternative if not running DOSBox:  | ||
| + | |||
| + | <syntaxhighlight lang=nasm>  | ||
| + |         in      al,60h          ;read whatever is at keyboard port  | ||
| + |         aaa  | ||
| + |         jz      mainloop        ;Jump if zero  | ||
| + | </syntaxhighlight>  | ||
| + | |||
| + | The above are somewhat flaky due to different hardware, VMs, and emulators not honoring flags correctly.  | ||
Revision as of 00:57, 7 August 2016
Checking for ESCAPE
This is fairly easy: Monitor the keyboard scancode port for ESC which is #1, then deal with it:
        in      al,60h          ;read whatever is at keyboard port; looking for ESC which is #1
        dec     ax              ;if ESC, AX now 0
        jnz     mainloop        ;fall through if 0, do jump somewhere else if otherwise
Checking for any keypress
If you need to shave a byte, it might be possible in some environments to check for any keypress instead of just escape using less code:
        in      al,60h          ;read whatever is at keyboard port
        das                     ;If non-zero, parity will be set
        jp      mainloop        ;Jump if parity
An alternative if not running DOSBox:
        in      al,60h          ;read whatever is at keyboard port
        aaa
        jz      mainloop        ;Jump if zero
The above are somewhat flaky due to different hardware, VMs, and emulators not honoring flags correctly.