;#SECTION "MAIN", CODE org userMem - 2 db 0BBh, 6Dh ; fast mode ld a, 3 out (20h), a ; installInterrupt im 2 ld a, 99h ld i, a ld hl, 9900h ld de, 9901h ld bc, 256 ld (hl), 98h ldir ld a, 0C3h ld (9898h), a ld hl, interrupt ld (9899h), hl call initialize mainMenu: ld bc, 3A00h ld hl, mainMenuOptions ld de, mainMenuButtons call drawButtons ld a, 10000001b ld (runningInterrupts), a call keyWait newGame: loadGame: mainMenuKeyLoop: ld a, 10111111b out (01h), a nop nop nop nop in a, (01h) bit 0, a jq z, exit bit 1, a jq z, help bit 2, a jq z, settings bit 3, a jq z, loadGame bit 4, a jq z, newGame bit 7, a jq z, exit jq mainMenuKeyLoop mainMenuOptions: db " New|Load|Settings|Help|Exit", 0 mainMenuButtons: db 00h, 00h, 80h, 00h, 20h, 00h, 00h, 01h, 00h, 00h, 80h, 00h mainMenuPicData: db 78h, 79h, 0D1h, 0EFh, 0C9h, 0ECh, 0BFh, 0BEh, 7Bh, 0E6h, 0FFh, 0BFh, 2Fh, 2Fh, 0FCh, 0E4h, 7Bh, 0E9h, 7Fh, 0B7h, 0FFh, 0FFh, 0EFh, 0FFh, 78h, 78h, 0C1h, 0FFh, 0E1h, 0EDh, 0BCh db 3Fh, 0EEh, 6Eh, 0FCh, 0BEh, 6Fh, 2Fh, 0ECh, 0FCh, 0E7h, 0EDh, 3Fh, 7Fh, 0FFh, 0F7h, 0FFh, 0EFh, 0F8h, 78h, 0C1h, 6Fh, 0E4h, 0FDh, 38h, 0FCh, 0ECh, 6Eh, 0FEh, 0FEh, 7Fh, 0CFh db 0E0h, 0D0h, 67h, 0EEh, 3Fh, 7Fh, 0FFh, 0F7h, 0FFh, 0FFh, 78h, 0F8h, 0C3h, 0C9h, 0ECh, 0C1h, 0B8h, 7Dh, 0ECh, 0F4h, 0FCh, 0FEh, 7Fh, 0FFh, 0E0h, 0E0h, 0E1h, 0EBh, 3Fh, 0F7h, 0F7h db 0FFh, 0FFh, 0FFh, 0F8h, 78h, 0DFh, 87h, 0E8h, 0DDh, 0F8h, 0F8h, 0C9h, 0ECh, 0ECh, 0FCh, 4Bh, 77h, 0C0h, 0ECh, 0E3h, 0E5h, 0BFh, 0FFh, 0F7h, 0FFh, 0FFh, 0FFh, 0F8h, 0F8h, 0CFh, 73h db 0E8h, 0E5h, 0F8h, 0BBh, 0C5h, 0CFh, 0CCh, 0CCh, 0C9h, 59h, 0C0h, 0E0h, 0E7h, 65h, 3Fh, 0BFh, 0F7h, 0EFh, 0FFh, 0FFh, 0F8h, 0FBh, 0CBh, 49h, 0E1h, 60h, 9Ah, 9Ah, 0CFh, 6Dh, 0Ch db 8Eh, 81h, 59h, 0E0h, 0E0h, 0EEh, 0E7h, 3Fh, 0BAh, 0E7h, 0E7h, 0FFh, 0FFh, 0FFh, 0F4h, 0DBh, 5Fh, 0E0h, 61h, 0FDh, 0FAh, 0CEh, 0CDh, 0Ch, 0Eh, 41h, 93h, 73h, 0EDh, 0E6h, 0F5h db 0F8h, 0B2h, 67h, 0CFh, 0FFh, 0FFh, 0FFh, 0FEh, 0DBh, 17h, 61h, 0ECh, 0F0h, 0F1h, 0C0h, 0C8h, 1Fh, 0Eh, 63h, 0D3h, 61h, 0C1h, 0E5h, 0F2h, 0FBh, 0F4h, 0EFh, 0F7h, 0BEh, 0FFh, 0FDh db 0FCh, 0DBh, 29h, 6Bh, 0F5h, 0F1h, 0D0h, 0C2h, 0D1h, 9Fh, 5Eh, 83h, 54h, 41h, 0B9h, 0FCh, 0EBh, 0F3h, 0FFh, 0E7h, 0E7h, 0FFh, 0BFh, 0F8h, 0F8h, 13h, 63h, 67h, 0FBh, 0C0h, 0D0h db 0C7h, 43h, 7Fh, 9Fh, 20h, 0D1h, 19h, 81h, 0FDh, 0F8h, 0F3h, 0FFh, 0E7h, 0E7h, 0FFh, 0FFh, 0F8h, 70h, 07h, 06h, 69h, 0E6h, 0C0h, 0F0h, 47h, 67h, 3Fh, 9Eh, 0Eh, 16h, 01h db 0Dh, 0B8h, 0FDh, 0F3h, 0BBh, 0E7h, 0E7h, 0FFh, 0FFh, 0F0h, 78h, 07h, 02h, 70h, 80h, 0C0h, 0E0h, 27h, 59h, 3Fh, 1Eh, 0Eh, 0Eh, 01h, 07h, 0B8h, 80h, 0B1h, 0F9h, 0C7h, 0E7h db 0FFh, 0FFh, 0F0h, 78h, 05h, 07h, 0C0h, 20h, 0C0h, 48h, 30h, 68h, 3Eh, 1Fh, 0Eh, 06h, 01h, 62h, 0B0h, 00h, 0B1h, 0B9h, 8Fh, 47h, 0FFh, 0FFh, 0F8h, 0F0h, 06h, 05h, 0C0h db 0A0h, 0C8h, 58h, 30h, 40h, 3Ch, 3Eh, 46h, 46h, 43h, 23h, 0A0h, 60h, 0F1h, 0B9h, 0C7h, 47h, 0FFh, 0FFh, 78h, 0F8h, 03h, 45h, 81h, 80h, 0F0h, 40h, 30h, 30h, 38h, 3Ch db 46h, 46h, 03h, 63h, 00h, 0E0h, 0B1h, 0F9h, 0E7h, 0C7h, 0FFh, 0FFh, 78h, 0F8h, 01h, 43h, 83h, 0C1h, 70h, 70h, 00h, 00h, 38h, 34h, 4Eh, 86h, 03h, 03h, 40h, 0C8h, 71h db 38h, 87h, 0C7h, 0FFh, 0FEh, 78h, 0F8h, 01h, 11h, 0C6h, 0CCh, 0F0h, 74h, 00h, 00h, 38h, 34h, 0Eh, 0CEh, 03h, 03h, 0Ch, 4Ch, 70h, 0F8h, 47h, 87h, 0FFh, 0FFh, 78h, 0FCh db 01h, 31h, 0C0h, 0C0h, 70h, 0E8h, 0C0h, 0C0h, 38h, 34h, 0Eh, 8Eh, 07h, 07h, 0Ch, 8Eh, 38h, 30h, 07h, 03h, 0FFh, 0FFh, 0F8h, 0FDh, 00h, 59h, 41h, 80h, 60h, 70h, 0C0h db 0C2h, 38h, 34h, 8Eh, 06h, 07h, 0Fh, 8Ch, 1Ch, 38h, 38h, 07h, 07h, 0FFh, 0FFh, 0F8h, 0FCh, 50h, 50h, 42h, 0C6h, 60h, 0F0h, 0C0h, 0E0h, 3Ch, 3Ch, 1Eh, 8Ch, 03h, 43h db 8Ch, 0Ch, 39h, 39h, 07h, 07h, 0FFh, 0FFh, 0F8h, 0BCh, 58h, 78h, 0C0h, 60h, 0E0h, 60h, 0E0h, 0C0h, 34h, 38h, 1Eh, 1Ch, 63h, 23h, 8Ch, 1Ch, 39h, 0B9h, 87h, 87h, 0FFh db 0FFh, 0F8h, 0FCh, 78h, 68h, 60h, 0C0h, 60h, 68h, 0E0h, 0E0h, 1Ch, 58h, 1Eh, 3Eh, 23h, 63h, 0Ch, 8Eh, 38h, 39h, 0F7h, 0C7h, 0FFh, 0FFh, 0BCh, 0B8h, 50h, 70h, 0E0h, 0E0h db 79h, 0F8h, 0F0h, 0F0h, 3Ch, 18h, 0FEh, 7Ch, 63h, 0A3h, 8Eh, 04h, 78h, 39h, 0F7h, 0F7h, 0FDh, 0FEh, 38h, 3Ch, 40h, 70h, 0E7h, 0E0h, 0F7h, 0EFh, 0E0h, 0C0h, 3Dh, 3Dh, 9Eh db 7Ch, 33h, 07h, 80h, 80h, 38h, 58h, 8Fh, 0D7h, 0FCh, 0FDh, 78h, 7Ah, 01h, 01h, 0FAh, 0E4h, 0C3h, 0F3h, 0C0h, 0E0h, 38h, 3Fh, 1Ch, 0BEh, 17h, 4Bh, 0A0h, 0C0h, 3Ch, 3Ah db 0CFh, 97h, 0FDh, 0FAh, 3Eh, 3Ch, 01h, 01h, 0E0h, 0E0h, 0C3h, 0C3h, 0A0h, 80h, 3Eh, 78h, 0BCh, 0FEh, 23h, 8Fh, 30h, 38h, 3Eh, 7Eh, 0C7h, 0BFh, 0FFh, 0FFh, 3Eh, 0BCh, 11h db 39h, 0E0h, 0C8h, 83h, 0D3h, 0A1h, 0ADh, 0F0h, 0F0h, 3Fh, 0BCh, 26h, 27h, 3Eh, 3Dh, 0F9h, 7Dh, 0C7h, 0C6h, 0FFh, 0FFh, 3Eh, 7Ch, 73h, 7Bh, 0C8h, 81h, 93h, 99h, 0FDh, 0E0h db 0F0h, 32h, 3Ch, 3Dh, 27h, 26h, 0BFh, 0BFh, 78h, 0FDh, 0C7h, 0C7h, 0FFh, 0FFh, 3Ch, 7Eh, 0F7h, 0FFh, 80h, 98h, 9Dh, 0DFh, 0FFh, 0DEh, 0F0h, 32h, 3Ch, 9Ch, 27h, 47h, 0F8h db 0FAh, 3Ch, 31h, 0C1h, 0CDh, 0FBh, 7Fh, 3Eh, 3Eh, 0FFh, 0FFh, 0C0h, 0C0h, 9Eh, 0DFh, 0CFh, 84h, 70h, 6Eh, 0FCh, 3Ch, 0Eh, 0Dh, 0B0h, 0B0h, 35h, 38h, 0C3h, 0C9h, 0FFh, 0FFh db 3Fh, 7Fh, 0EFh, 0CBh, 0C1h, 80h, 8Eh, 0CEh, 8Eh, 9Eh, 62h, 62h, 78h, 7Ch, 0Eh, 0Dh, 0B0h, 30h, 35h, 18h, 0C7h, 0EFh, 0FFh, 0FFh, 3Fh, 7Fh, 0C3h, 0EFh, 0C9h, 0D1h, 0CCh db 0CEh, 86h, 86h, 62h, 62h, 38h, 78h, 0Dh, 8Fh, 0B0h, 0B8h, 1Dh, 1Dh, 0C7h, 0EFh, 0FEh, 0FFh, 3Fh, 1Fh, 8Bh, 0C5h, 0D9h, 89h, 0CCh, 0F8h, 16h, 16h, 7Ah, 70h, 28h, 39h db 0Fh, 0Ch, 38h, 0B8h, 3Dh, 1Ch, 0E7h, 4Fh, 0FEh, 0FDh, 3Fh, 3Fh, 83h, 9Dh, 99h, 0DBh, 0FCh, 8Eh, 16h, 96h, 70h, 74h, 30h, 38h, 0Eh, 0Dh, 9Ch, 38h, 7Dh, 0F8h, 0CFh db 0EFh, 0FDh, 0FEh, 3Fh, 9Fh, 83h, 0C1h, 9Dh, 0FBh, 0EEh, 0E5h, 0F6h, 3Eh, 40h, 60h, 38h, 0F8h, 0Ch, 0Ch, 9Ch, 3Eh, 3Dh, 0FCh, 0DFh, 0FFh, 0FFh, 0FFh, 3Fh, 0BEh, 0C1h, 87h db 0B8h, 0DCh, 0ECh, 86h, 0FCh, 6Ch, 42h, 0EAh, 38h, 38h, 1Ch, 0Fh, 1Ch, 9Eh, 3Dh, 3Dh, 0BFh, 0FFh, 0FFh, 0FFh, 3Fh, 0BEh, 0C3h, 8Bh, 38h, 0C9h, 8Fh, 0FCh, 28h, 0F8h, 0C0h db 0E6h, 39h, 0BBh, 0Eh, 1Fh, 1Ch, 19h, 3Ch, 39h, 3Fh, 0FFh, 0FFh, 0FDh, 3Eh, 7Fh, 0C3h, 83h, 0F9h, 1Bh, 8Fh, 0CFh, 68h, 0C8h, 0E0h, 0C0h, 3Ah, 1Ah, 4Ch, 1Eh, 1Ch, 9Ch db 1Fh, 9Ch, 0BFh, 77h, 0FDh, 0FFh, 3Fh, 3Eh, 0C3h, 83h, 0FBh, 7Fh, 8Fh, 0CFh, 48h, 0C9h, 0E0h, 0C1h, 38h, 30h, 1Ch, 9Fh, 1Ch, 1Ch, 0BFh, 9Fh, 0BFh, 0EFh, 0FDh, 0FDh, 3Fh db 7Fh, 0C3h, 87h, 7Fh, 0FDh, 8Dh, 0CDh, 19h, 31h, 0E0h, 0C2h, 0FCh, 3Ah, 1Eh, 3Dh, 1Ch, 1Ch, 1Fh, 0BFh, 0FFh, 0FFh, 0FFh, 0FDh, 0FFh, 3Eh, 0C3h, 0C6h, 7Dh, 0F9h, 0CDh, 89h db 31h, 31h, 0C0h, 0A2h, 0Ch, 9Ch, 3Dh, 3Eh, 1Ch, 1Ch, 1Fh, 1Fh, 0BAh, 7Dh, 0FDh, 0FFh, 3Fh, 7Fh, 0C3h, 0C6h, 0DDh, 0FDh, 0C9h, 8Dh, 31h, 71h, 80h, 80h, 0Ch, 0Ch, 0FFh db 0FBh, 1Ch, 1Ch, 0Fh, 5Eh, 39h, 3Bh, 0FDh, 0FFh, 3Fh, 0BFh, 5Ah, 0E1h, 0FFh, 0DDh, 49h, 9Fh, 63h, 73h, 82h, 0E2h, 00h, 34h, 0FFh, 0FFh, 1Ch, 1Ch, 1Fh, 1Eh, 7Fh, 3Fh db 0FFh, 0FDh, 9Fh, 9Fh, 00h, 0D0h, 0BDh, 0DFh, 49h, 5Dh, 67h, 6Fh, 0C2h, 0C2h, 12h, 3Ch, 0FEh, 0FFh, 1Ch, 3Ch, 0Ch, 5Fh, 0FFh, 0FFh, 0FFh, 0FFh, 8Fh, 9Fh, 0C0h, 80h, 3Ch db 5Eh, 59h, 49h, 4Fh, 8Fh, 80h, 82h, 31h, 53h, 0FEh, 0F0h, 3Ch, 1Ch, 1Ch, 0CEh, 0FFh, 0F9h, 0FFh, 0EFh, 8Fh, 1Fh, 80h, 00h, 3Ch, 0BEh, 59h, 4Eh, 0Fh, 0Fh, 80h, 02h db 11h, 0D3h, 70h, 73h, 3Ch, 3Ch, 1Ch, 1Eh, 0FFh, 0FBh, 0FFh, 0EFh, 0BFh, 9Fh, 00h, 84h, 0BEh, 0FCh, 4Ch, 58h, 0Fh, 0Eh, 01h, 01h, 13h, 11h, 0F2h, 72h, 3Ch, 3Ch, 00h db 0Eh, 0FFh, 0FFh, 0FFh, 0EFh, 0BFh, 0BFh, 00h, 80h, 0BEh, 0FDh, 0D8h, 58h, 0Eh, 1Fh, 00h, 00h, 13h, 0B3h, 0F6h, 0E6h, 3Ch, 3Ch, 0Eh, 27h, 0DFh, 0FFh, 0FFh, 0FFh, 9Fh, 0FFh db 0C0h, 00h, 0FCh, 0FFh, 0D8h, 78h, 1Fh, 0Fh, 00h, 80h, 3Ah, 13h, 0E0h, 0F6h, 3Eh, 14h, 0Fh, 22h, 0FFh, 0FFh, 0FFh, 0FFh, 9Fh, 0BEh, 00h, 0C2h, 0FDh, 0FEh, 0FCh, 0D8h, 1Fh db 1Eh, 00h, 81h, 0BEh, 0FEh, 0F0h, 0E0h, 1Ch, 1Ah, 63h, 0AFh, 0FFh, 0FFh, 0FFh, 0FFh, 8Fh, 8Fh, 05h, 83h, 0FDh, 0FFh, 0F8h, 0DCh, 9Fh, 0DFh, 0E1h, 0C0h, 0FFh, 0FFh, 0F0h, 0E6h db 1Ah, 1Eh, 23h, 0BBh, 0FFh, 0EFh, 0FFh, 0FFh, 8Fh, 1Eh, 01h, 09h, 7Dh, 7Fh, 58h, 58h, 1Fh, 0Fh, 0C0h, 0E1h, 0ECh, 0FDh, 0F0h, 0E3h, 1Ah, 1Eh, 03h, 9Bh, 0EFh, 0E5h, 0FFh db 0FEh, 3Fh, 0DEh, 03h, 09h, 7Dh, 36h, 68h, 0DCh, 0Fh, 0Fh, 0E0h, 0C0h, 7Ch, 7Ch, 0F2h, 0F1h, 1Fh, 1Eh, 0C3h, 41h, 0EFh, 0EFh, 0FFh, 0FFh, 1Fh, 0DFh, 03h, 03h, 5Ch, 0B1h db 7Ch, 0ECh, 0Fh, 0Fh, 0C0h, 0C0h, 79h, 0FCh, 0F2h, 0F7h, 1Eh, 3Fh, 81h, 41h, 0FFh, 0EFh, 0FFh, 0FFh, 4Fh, 0DFh, 02h, 03h, 0D4h, 0CDh, 0FCh, 7Ch, 0Fh, 0Fh, 00h, 80h, 0F0h db 7Ch, 0E6h, 4Dh, 3Eh, 3Eh, 01h, 81h, 0FFh, 0FFh, 7Fh, 0FDh, 0CFh, 5Fh, 02h, 0Ah, 44h, 55h, 0FCh, 7Ch, 0Fh, 0Fh, 00h, 80h, 0F8h, 0F4h, 43h, 0F3h, 3Eh, 0BEh, 03h, 63h db 0E7h, 0EFh, 0FFh, 0FFh, 4Fh, 1Fh, 02h, 03h, 45h, 0D4h, 7Ch, 0FEh, 0Fh, 0Fh, 80h, 00h, 0F8h, 0D2h, 67h, 0E3h, 3Eh, 3Fh, 0C3h, 0C3h, 0FAh, 0EEh, 7Fh, 0FFh, 4Eh, 1Fh, 02h db 8Bh, 44h, 55h, 0DCh, 7Eh, 0Fh, 0Fh, 80h, 80h, 0FAh, 74h, 0C7h, 66h, 3Eh, 3Fh, 83h, 0C7h, 0FEh, 0EFh, 0FFh, 0FFh, 4Eh, 9Eh, 8Fh, 0Eh, 44h, 54h, 0DCh, 58h, 0Fh, 07h db 80h, 00h, 78h, 3Ah, 67h, 0C5h, 1Eh, 3Fh, 0E3h, 0C7h, 0EFh, 0FFh, 0FFh, 0FEh, 5Eh, 0CFh, 03h, 1Eh, 0C4h, 14h, 98h, 5Ch, 0Fh, 8Fh, 80h, 0C0h ;#SECTION "SETTINGS", CODE ;this part is not even close to being done settings: di xor a out (30h), a B_CALL _ClrLCDFull ld bc, 3A03h ld hl, settingsOptions ld de, settingsButtons call drawButtons aloop: ld a, 10000000b out (01h), a nop nop nop nop in a, (01h) bit 5, a jq nz, aloop jq mainMenu settingsOptions: db "Back | Next | \x06+\x06 | \x06-\x06 | Exit", 0 settingsButtons: db 00h, 00h, 04h, 00h, 00h, 20h, 00h, 08h, 00h, 02h, 00h, 00h ;#SECTION "HELP", CODE help: di xor a out (30h), a B_CALL _ClrLCDFull ld bc, 3A02h ld hl, helpOptions ld de, helpButtons call drawButtons call drawTopBar call displayPage helpKeyLoop: ld a, 10111111b out (01h), a nop nop nop nop in a, (01h) ld b, a bit 7, b jq z, mainMenu bit 4, b call z, lastPage bit 3, b call z, nextPage bit 0, b jq z, mainMenu ld a, 11111110b out (01h), a nop nop nop nop in a, (01h) ld b, a bit 1, b call z, lastPage bit 2, b call z, nextPage jq helpKeyLoop lastPage: ld a, (page) or a ret z dec a ld (page), a call displayPage ret nextPage: ld a, (page) cp 1 ret z inc a ld (page), a call displayPage ret displayPage: push bc call drawTopBar call clearMidScreen ld a, (page) sla a ld h, 0 ld l, a ld de, pageTable add hl, de ld a, (hl) inc hl ld h, (hl) ld l, a ld de, 01h ld (penCol), de inc d push de set textInverse, (iy + textFlags) ld b, 9 putCharacter: ld a, (hl) or a jq z, newLine B_CALL _VPutMap inc hl jq putCharacter newLine: ld a, 6 pop de ld e, 0 add a, d ld d, a push de ld (penCol), de res textInverse, (iy + textFlags) inc hl djnz putCharacter pop de pop bc ret helpOptions: db "Back | Next | \x06\x06\x06\x06| \x06\x06\x06\x06| Exit", 0 helpButtons: db 00h, 00h, 10h, 00h, 02h, 00h, 00h, 20h, 00h, 01h, 00h, 00h page: db 0 pageTable: dw page0 dw page1 page0: db "Controls", 0 db "\xc1Y=]-\xc1GRAPH]:", 0 db "Function shown above key.", 0 db "Arrow keys:", 0 db "Make a selection.", 0 db "\xc12ND]:", 0 db "Yes, select, or continue.", 0 db "\xc1DEL]:", 0 db "No, cancel, or back.", 0 page1: db "How to play", 0 db "The insects have waged war on", 0 db "the trees! You have to plant", 0 db "trees to fight off the bugs.", 0 db "Each time a bug gets to the", 0 db "end of the map, you lose a", 0 db "life. Kill bugs to earn money.", 0 db "Bugs come in waves. During a", 0 db "wave, you can't plant trees.", 0 ;#SECTION "EXIT", CODE exit: call keyWait di im 1 xor a out (31h), a ld a, 00001011b out (03h), a call LCD_BUSY_QUICK ld a, 05h out (10h), a B_CALL _ClrLCDFull ret saveDataStart: counter: db 172 customAPD: db 3 saveDataEnd: ;#SECTION "ROUTINES", CODE drawButtons: call LCD_BUSY_QUICK ld a, 07h out (10h), a ld (penCol), bc B_CALL _VPutS call LCD_BUSY_QUICK ld a, 07h out (10h), a call LCD_BUSY_QUICK ld a, 20h out (10h), a call LCD_BUSY_QUICK ld a, 0BAh out (10h), a ld b, 12 buttonBorders: call LCD_BUSY_QUICK ld a, (de) out (11h), a inc de djnz buttonBorders call LCD_BUSY_QUICK ld a, 20h out (10h), a call LCD_BUSY_QUICK ld a, 0B9h out (10h), a ld a, 0FFh ld b, 12 solidLine: call LCD_BUSY_QUICK out (11h), a djnz solidLine ret keyWait: ld a, 10000000b out (01h), a nop nop nop nop in a, (01h) inc a jq nz, keyWait ret drawTopBar: call LCD_BUSY_QUICK ld a, 07h out (10h), a ld d, 80h ld b, 7 barRow: call LCD_BUSY_QUICK ld a, d out (10h), a call LCD_BUSY_QUICK ld a, 20h out (10h), a push bc ld b, 12 drawBarRow: call LCD_BUSY_QUICK ld a, 0FFh out (11h), a djnz drawBarRow pop bc inc d djnz barRow ret clearMidScreen: call LCD_BUSY_QUICK ld a, 07h out (10h), a ld d, 87h ld b, 50 midScreenSetRow: call LCD_BUSY_QUICK ld a, 20h out (10h), a call LCD_BUSY_QUICK ld a, d out (10h), a push bc ld b, 12 clearMidScreenRow: call LCD_BUSY_QUICK xor a out (11h), a djnz clearMidScreenRow pop bc inc d djnz midScreenSetRow ret ;#SECTION "INTERUPT", CODE interrupt: ex af, af' exx ; timers and stuff in a, (04h) ld b, a xor a out (03h), a bit 5, b jq z, exitInterrupt initialize: ld a, 40h out (30h), a ld a, 2 out (31h), a ld a, (counter) out (32h), a ; check what to run ld a, (runningInterrupts) bit 7, a call nz, mainMenuDraw ld a, (runningInterrupts) bit 0, a call nz, APD exitInterrupt: ex af, af' exx ei ret mainMenuDraw: ld hl, mainMenuPicData ld a, (grayCarry) rra ld a, (grayMask) push af ld c, 80h newRow: call LCD_BUSY_QUICK ld a, 20h out (10h), a call LCD_BUSY_QUICK ld a, c cp 0B9h jq z, endDraw out (10h), a ld b, 12 ditherLoop: pop af rra push af ld d, a and (hl) ld e, a inc hl ld a, d cpl and (hl) inc hl or e ld e, a call LCD_BUSY_QUICK ld a, e out (11h), a djnz ditherLoop pop af rla push af inc c jq newRow endDraw: pop af rla ld (grayMask), a ld a, 0 rla ld (grayCarry), a call LCD_BUSY_QUICK ret APD: ld hl, (APDCounter) dec hl ld a, h or l ld (APDCounter), hl ret nz ld hl, 1800 ld (APDCounter), hl xor a out (30h), a ld a, 1 out (03h), a halt xor a out (03h), a call initialize ex af, af' exx ret runningInterrupts: ; MM draw,,,,,,,APD db 00000000b grayCarry: db 1 grayMask: db 01101101b APDCounter: dw 1800