140 lines
2.2 KiB
NASM
140 lines
2.2 KiB
NASM
; window event routines
|
|
|
|
; event types
|
|
const EVENT_TYPE_BUTTON_CLICK: 0x80000000
|
|
|
|
const WINDOW_EVENT_SIZE: 32
|
|
|
|
; get the next window event and remove it from the event queue
|
|
; inputs:
|
|
; r0: pointer to window struct
|
|
; outputs:
|
|
; r0: event type
|
|
; r1-r7: event parameters
|
|
get_next_window_event:
|
|
push r10
|
|
push r11
|
|
|
|
; r10: event_queue_ptr
|
|
mov r10, r0
|
|
add r10, 4
|
|
|
|
; r11: event_queue_bottom
|
|
mov r11, r0
|
|
add r11, 8
|
|
|
|
cmp [r10], [r11]
|
|
ifz pop r11
|
|
ifz pop r10
|
|
ifz jmp window_event_empty
|
|
|
|
get_next_window_event_0:
|
|
push r8
|
|
push r9
|
|
|
|
mov r8, [r11]
|
|
call window_event_load
|
|
mov r8, window_event_temp
|
|
call window_event_store
|
|
|
|
mov r9, [r11]
|
|
|
|
get_next_window_event_1:
|
|
add r9, WINDOW_EVENT_SIZE
|
|
|
|
cmp [r10], r9
|
|
ifz jmp get_next_window_event_2
|
|
|
|
mov r8, r9
|
|
call window_event_load
|
|
|
|
mov r8, r9
|
|
sub r8, WINDOW_EVENT_SIZE
|
|
call window_event_store
|
|
|
|
jmp get_next_window_event_1
|
|
|
|
get_next_window_event_2:
|
|
mov r8, window_event_temp
|
|
call window_event_load
|
|
|
|
sub [r10], WINDOW_EVENT_SIZE
|
|
|
|
pop r9
|
|
pop r8
|
|
pop r11
|
|
pop r10
|
|
ret
|
|
|
|
; add an event to a window's event queue
|
|
; inputs:
|
|
; r0: event type
|
|
; r1-r7: event parameters
|
|
; r8: pointer to window struct
|
|
; outputs:
|
|
; none
|
|
new_window_event:
|
|
push r8
|
|
push r9
|
|
|
|
mov r9, r8
|
|
add r9, 4 ; point to event_queue_ptr in the window struct
|
|
mov r8, [r9]
|
|
call window_event_store
|
|
mov [r9], r8
|
|
|
|
pop r9
|
|
pop r8
|
|
ret
|
|
|
|
window_event_load:
|
|
mov r0, [r8]
|
|
add r8, 4
|
|
mov r1, [r8]
|
|
add r8, 4
|
|
mov r2, [r8]
|
|
add r8, 4
|
|
mov r3, [r8]
|
|
add r8, 4
|
|
mov r4, [r8]
|
|
add r8, 4
|
|
mov r5, [r8]
|
|
add r8, 4
|
|
mov r6, [r8]
|
|
add r8, 4
|
|
mov r7, [r8]
|
|
add r8, 4
|
|
ret
|
|
|
|
window_event_store:
|
|
mov [r8], r0
|
|
add r8, 4
|
|
mov [r8], r1
|
|
add r8, 4
|
|
mov [r8], r2
|
|
add r8, 4
|
|
mov [r8], r3
|
|
add r8, 4
|
|
mov [r8], r4
|
|
add r8, 4
|
|
mov [r8], r5
|
|
add r8, 4
|
|
mov [r8], r6
|
|
add r8, 4
|
|
mov [r8], r7
|
|
add r8, 4
|
|
ret
|
|
|
|
window_event_empty:
|
|
mov r0, EVENT_TYPE_EMPTY
|
|
mov r1, 0
|
|
mov r2, 0
|
|
mov r3, 0
|
|
mov r4, 0
|
|
mov r5, 0
|
|
mov r6, 0
|
|
mov r7, 0
|
|
ret
|
|
|
|
window_event_temp: data.fill 0, 32 ; 8 entries * 4 bytes per word
|