kolibrios-gitea/programs/emulator/e80/trunk/utils/keyZXtst/keyZXtst.asm

176 lines
3.5 KiB
NASM
Raw Normal View History

; Text CodePage = cp1251
; <--- include all MeOS stuff --->
include "../../../../../macros.inc"
; <--- start of MenuetOS application --->
MEOS_APP_START
include "key_read.inc"
; <--- start of code --->
CODE
mov eax,48 ; get system colors
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
xor ecx, ecx
inc ecx
mcall 66,1 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
redraw: ; redraw event handler
call draw_window ; at first create and draw the window
wait_event: ; main cycle
mcall 10 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; mcall 23, 2 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
; or eax, eax
; jz key.1
dec eax ; if event = 1
jz redraw ; jump to redraw handler
dec eax ; else if event = 2
jz key ; jump to key handler
button: ; button event handler
mov al, 17 ; get button identifier
mcall
cmp ah, 1
jne wait_event ; return if button id != 1
or eax, -1 ; exit application
mcall
key: ; key event handler
; get key code
call load_keys
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.1:
mov ah, 0xfe
mov edx, txt_data.fe
call load_ports
mov ah, 0xfd
mov edx, txt_data.fd
call load_ports
mov ah, 0xfb
mov edx, txt_data.fb
call load_ports
mov ah, 0xf7
mov edx, txt_data.f7
call load_ports
mov ah, 0xef
mov edx, txt_data.ef
call load_ports
mov ah, 0xdf
mov edx, txt_data.df
call load_ports
mov ah, 0xbf
mov edx, txt_data.bf
call load_ports
mov ah, 0x7f
mov edx, txt_data.7f
call load_ports
mov ah, 0x00
mov edx, txt_data.00
call load_ports
jmp redraw
draw_window:
mov eax, 12 ; start drawing
mov ebx, 1
mcall
xor eax, eax ; create and draw the window
mov ebx, 40*65536+560 ; (window_cx)*65536+(window_sx)
mov ecx, 40*65536+240 ; (window_cy)*65536+(window_sy)
mov edx, [sc.work] ; work area color
or edx, 0x33000000 ; & window type 3
mov edi, title ; window title
int 0x40
mov ecx, [sc.work_text]
or ecx, 0x80000000
mov edx, txt_data
mcall 4, 10*65536+40
mov edx, txt_data.2s
mcall 4, 10*65536+60
mov edx, txt_data.3s
mcall 4, 10*65536+80
mov eax, 12 ; finish drawing
mov ebx, 2
mcall
ret
load_ports: ; <20><><EFBFBD><EFBFBD> ah - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
; edx - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mov al, 0xFE
call load_port_FE
rept 8
{
mov bl, '1'
shl al,1
jc @f
mov bl, '0'
@@:
mov byte [edx], bl
inc edx
}
ret
; <--- initialised data --->
DATA
title db 'Key ZX-Spectrum TEST',0
txt_data db '#FE: '
.fe db '******** #FD: '
.fd db '******** #FB: '
.fb db '******** #F7: '
.f7 db '******** ', 0
.2s db '#EF: '
.ef db '******** #DF: '
.df db '******** #BF: '
.bf db '******** #7F: '
.7f db '******** ', 0
.3s db '#00: '
.00 db '******** ', 0
; <--- uninitialised data --->
UDATA
sc system_colors
MEOS_APP_END
; <--- end of MenuetOS application --->