; ; example.asm for TR8 ; .org 0 ; address of the frame interrupt vector .equ INT_VECT 0xff00 ; setup an int handler so we ; can use the frame int to sync ld a, >INT_VECT ld x, int_handler ld [a : x], b ; enable interrupts cif ; loop filling the screen with one ; colour cycling the whole palette ld b, 0 loop: call fill inc b and b, 15 push b call draw_sprite pop b ; wait 1 second ld x, 60 wait_loop: halt dec x bnz jmp wait_loop jmp loop ; fill frame-buffer with a color in reg b fill: ld a, 0xbf ld x, 0 ld y, 0x40 fill_loop: ld [a : x], b inc x bno jmp fill_loop inc a dec y bnz jmp fill_loop ret int_handler: iret draw_sprite: push y ld y, 16 ld [sp + 0], y ; src ld a, >sprite ld x, 15 ; is transparent cmp x, 16 bnc jmp transparent ld [b : y], x transparent: pop x inc x bo inc a inc y push y ld y, [sp + 1] dec y ld [sp + 1], y pop y bnz jmp line add y, 112 bo inc b cmp x, end_sprite bz jmp done next_row: push y ld y, 16 ld [sp + 1], y pop y jmp line done: pop y ret sprite: .incpng "assets/icon.png" end_sprite: