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