#include #include agbx_err agbx_main(void) { agbx_set10(0x500'0000u,0x0u); agbx_set10(0x500'0002u,0x19u); agbx_set10(0x500'0004u,0xFFFFu); agbx_set10(0x400'0000u,0x404u); agbx_clrscrn4(0x600'0000u,0x0u); agbx_clrscrn4(0x600'A000u,0x0u); agbx_i10 const cols[] = { 0b11111u, 0b1111100000u, 0b111110000000000u, }; agbx_i8 col = 0x0u; struct { agbx_i8 x; agbx_i8 y; } pos = {.x = 0x0u,.y = 0x0u,}; agbx_setpx1(0x600'0000u,0x0u,0x2u); agbx_i20 vaddr = 0x600'0000u; for (;;) { agbx_vsync(); agbx_keymap const keymap = agbx_getkeymap(); if (agbx_chkkey(keymap,agbx_key_b)) { return (agbx_err)(((agbx_i10)pos.x + (agbx_i10)pos.y)/0x2u); } if (agbx_chkkey(keymap,agbx_key_a)) { return agbx_err_ok; } if (agbx_chkkey(keymap,agbx_key_l)) { agbx_plot4(vaddr,pos.x,pos.y,0x1u); vaddr = agbx_flip(); agbx_plot4(vaddr,pos.x,pos.y,0x2u); while (agbx_chkkey(agbx_getkeymap(),agbx_key_l)) {} continue; } if (agbx_chkkey(keymap,agbx_key_r)) { if (col == 0x2u) {col = 0x0u;} else {++col;} agbx_set10(0x500'0002u,cols[col]); while (agbx_chkkey(agbx_getkeymap(),agbx_key_r)) {} continue; } typeof (pos) const prevpos = pos; agbx_key key = agbx_key_pade; if (agbx_chkkey(keymap,key)) { if (pos.x != 0xEFu) { ++pos.x; goto drw; } } key = agbx_key_padn; if (agbx_chkkey(keymap,key)) { if (pos.y != 0x0u) { --pos.y; goto drw; } } key = agbx_key_pads; if (agbx_chkkey(keymap,key)) { if (pos.y != 0x9Fu) { ++pos.y; goto drw; } } key = agbx_key_padw; if (agbx_chkkey(keymap,key)) { if (pos.x != 0x0u) { --pos.x; goto drw; } } continue; drw:; agbx_plot4(vaddr,prevpos.x,prevpos.y,0x1u); agbx_plot4(vaddr,pos.x,pos.y,0x2u); while (agbx_chkkey(agbx_getkeymap(),key)) {} } }