kolibrios/programs/emulator/chip8/gui.inc

67 lines
1.9 KiB
PHP
Raw Normal View History

; draw main window
align 4
proc draw_main_window stdcall
DEBUGF DBG_INFO, "draw_main_window() start\n"
mcall 12, 1 ; notify about draw beginning
mcall 48, 3, sys_colors, sizeof.system_colors
mov edx, [sys_colors.work] ; background color
or edx, 0x74000000 ; window type
; DEBUGF DBG_INFO, "mainwindow w, h = %u, %u", GFX_COLS*GFX_PIX_SIZE + 8, GFX_ROWS*GFX_PIX_SIZE + 28
mcall 0, <50, GFX_COLS*GFX_PIX_SIZE + 9>, <50, GFX_ROWS*GFX_PIX_SIZE + 28>, , , main_window_title ;
stdcall draw_screen
mcall 12, 2 ; notify about draw ending
DEBUGF DBG_INFO, "draw_main_window() end\n"
ret
endp
; draw screen
align 4
proc draw_screen stdcall
pushad
locals
row_ind dd ?
col_ind dd ?
color dd ?
endl
xor esi, esi
.loop1:
cmp esi, GFX_SIZE
jae .loop1_end
xor edx, edx
mov eax, esi
mov ecx, GFX_COLS
div ecx ; eax = row index, edx = col index
mov dword [row_ind], eax
mov dword [col_ind], edx
mov dword [color], 0x80FFFFFF ; white
cmp byte [esi + gfx], 0 ; check if cell is 0 or not 0
jne @f
mov dword [color], 0x80000000 ; black
@@:
mov ebx, dword [col_ind]
imul ebx, GFX_PIX_SIZE
;add ebx, WINDOW_BORDER
shl ebx, 16
add ebx, GFX_PIX_SIZE
mov ecx, dword [row_ind]
imul ecx, GFX_PIX_SIZE
;add ecx, WINDOW_BORDER
shl ecx, 16
add ecx, GFX_PIX_SIZE
mov eax, 13
mov edx, dword [color]
int 0x40
inc esi
jmp .loop1
.loop1_end:
popad
ret
endp