96 lines
2.5 KiB
NASM
96 lines
2.5 KiB
NASM
|
org 100h ;specify .COM file
|
||
|
|
||
|
start:
|
||
|
; mov al,13h ;AX=0000 at program start
|
||
|
; int 10h ;init mode 13h
|
||
|
; push word 0A000h ;Requires 80186 or higher to PUSH IMMED
|
||
|
; pop es ;ES now points to mode 13h screen segment
|
||
|
; push word 00000h ;
|
||
|
; pop si
|
||
|
|
||
|
mainloop:
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
;This is where you do your mega-amazing tiny program.
|
||
|
;Write 8-bit values to A000:0000 to draw some pixels.
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
|
||
|
|
||
|
;Check for user wanting to leave by pressing ESC
|
||
|
in al,60h ;read whatever is at keyboard port; looking for ESC which is #1
|
||
|
cmp al,48h
|
||
|
je upkey
|
||
|
cmp al,4bh
|
||
|
je leftkey
|
||
|
cmp al,4dh
|
||
|
je rightkey
|
||
|
cmp al,50h
|
||
|
je downkey
|
||
|
cmp al,39h
|
||
|
je space
|
||
|
cmp al,38h
|
||
|
je lalt
|
||
|
mov dword [lastkeypressed], 0h ;Reset the current key as it is not one we are checking
|
||
|
dec al ;if ESC, AL now 0
|
||
|
jnz mainloop ;fall through if 0, jump otherwise
|
||
|
mov al,03 ;AX=0000 due to mainloop exit condition
|
||
|
int 10h ;Switch back to text mode as a convenience
|
||
|
ret ;.COM files can exit with RET
|
||
|
|
||
|
upkey:
|
||
|
cmp ax, [lastkeypressed]
|
||
|
je mainloop
|
||
|
mov [lastkeypressed], ax
|
||
|
mov ah,02
|
||
|
mov dl,31h
|
||
|
int 21h
|
||
|
jmp mainloop
|
||
|
|
||
|
leftkey:
|
||
|
cmp ax, [lastkeypressed]
|
||
|
je mainloop
|
||
|
mov [lastkeypressed], ax
|
||
|
mov ah,02
|
||
|
mov dl,32h
|
||
|
int 21h
|
||
|
jmp mainloop
|
||
|
|
||
|
rightkey:
|
||
|
cmp ax, [lastkeypressed]
|
||
|
je mainloop
|
||
|
mov [lastkeypressed], ax
|
||
|
mov ah,02
|
||
|
mov dl,33h
|
||
|
int 21h
|
||
|
jmp mainloop
|
||
|
|
||
|
downkey:
|
||
|
cmp ax, [lastkeypressed]
|
||
|
je mainloop
|
||
|
mov [lastkeypressed], ax
|
||
|
mov ah,02
|
||
|
mov dl,34h
|
||
|
int 21h
|
||
|
jmp mainloop
|
||
|
|
||
|
space:
|
||
|
cmp ax, [lastkeypressed]
|
||
|
je mainloop
|
||
|
mov [lastkeypressed], ax
|
||
|
mov ah,02
|
||
|
mov dl,39h
|
||
|
int 21h
|
||
|
jmp mainloop
|
||
|
|
||
|
lalt:
|
||
|
cmp ax, [lastkeypressed]
|
||
|
je mainloop
|
||
|
mov [lastkeypressed], ax
|
||
|
mov ah,02
|
||
|
mov dl,38h
|
||
|
int 21h
|
||
|
jmp mainloop
|
||
|
|
||
|
;Data segment
|
||
|
|
||
|
lastkeypressed: db 0
|