Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8724 → Rev 8725

/programs/emulator/chip8/chip8.asm
0,0 → 1,114
; Author: rgimad (2021)
; License: GNU GPL v2
 
format binary as ""
use32
org 0
db 'MENUET01' ; signature
dd 1 ; header version
dd start ; entry point
dd _i_end ; end of image
dd _mem ; required memory size
dd _stacktop ; address of stack top
dd cmdline ; buffer for command line arguments
dd 0 ; buffer for path
 
include 'constants.inc'
 
; application's entry point
align 4
start:
 
stdcall chip8_init ; initialize
 
DEBUGF DBG_INFO, "app started, args = %s\n", cmdline
DEBUGF DBG_INFO, "MAX_GAME_SIZE = %x = %u\n", MAX_GAME_SIZE, MAX_GAME_SIZE
 
; xor ecx, ecx
; @@:
; mov al, byte [chip8_fontset + ecx]
; DEBUGF DBG_INFO, "%x ", al
; cmp ecx, 79
; je @f
; inc ecx
; jmp @b
; @@:
 
mov dword [fread_struct.filename], cmdline
stdcall chip8_loadgame, fread_struct
jz .file_not_found
 
DEBUGF DBG_INFO, "file was read. bytes: %x %x %x..\n", [memory + 0x200], [memory + 0x200 + 4], [memory + 0x200 + 8]
; mov byte [gfx + 5], 1
; mov byte [gfx + 64], 1
; mov byte [gfx + 65], 1
; mov byte [gfx + 64*2 + 3], 1
 
.event_loop:
mcall 23, CLOCK_RATE ; wait for event with CLOCK_RATE timeout
;DEBUGF DBG_INFO, "evenp loop iter i\n"
 
cmp eax, 1
je .event_redraw
 
cmp eax, 2
je .event_key
 
cmp eax, 3
je .event_button
 
jmp .event_default
 
.event_redraw:
stdcall draw_main_window
jmp .event_default
 
.event_key:
mcall 2
stdcall keyboard_update, eax
DEBUGF DBG_INFO, "key scancode %x\n", eax:4
jmp .event_default
 
.event_button:
mcall 17
cmp ah, 1
jne .event_default
mcall -1
 
.event_default:
stdcall chip8_emulatecycle
cmp byte [chip8_draw_flag], 0
jz @f
 
; mov byte [gfx + 64*2 + 3], 1 ; DBG
 
stdcall draw_screen
mov byte [chip8_draw_flag], 0
@@:
stdcall chip8_tick
jmp .event_loop
 
.file_not_found:
DEBUGF DBG_ERR, "Unable to open game file! eax = %u\n", eax
jmp .exit
 
.exit:
mov eax, -1
int 0x40
 
;;;;;;;;;;;;;;;;;;;;;;;
 
 
include 'gui.inc'
 
include 'emu.inc'
 
include 'utils.inc'
 
include 'data.inc'
rb 4096 ; reserve for main thread stack
align 16
_stacktop:
 
_mem: