#include .module crt0 .globl _main .area _HEADER (ABS) .org 0x0000 start: xor a ld i, a ld sp, #0x0000 di ;; Init PIO and check for KEY2 ld a, #PIO_MODE_3 out (PORT_B_CTRL), a ld a, #0x7F out (PORT_B_CTRL), a in a, (PORT_B_DATA) and #0x02 ; is KEY2 pressed? If so, start booloader jr NZ, main ;; Load payload (bootloader) ld HL, #0x7000 ld DE, #0x8000 ld BC, #0x1000 ldir ;; Start bootloader jp 0x8000 main: call gsinit call _main 1$: halt jr 1$ ;; Ordering of segments for the linker. .area _HOME .area _CODE .area _INITIALIZER .area _GSINIT .area _GSFINAL .area _DATA .area _INITIALIZED .area _BSEG .area _BSS .area _HEAP .area _CODE .area _GSINIT gsinit: ;; Default-initialized global variables. ld bc, #l__DATA ld a, b or a, c jr Z, zeroed_data ld hl, #s__DATA ld (hl), #0x00 dec bc ld a, b or a, c jr Z, zeroed_data ld e, l ld d, h inc de ldir zeroed_data: ;; Explicitly initialized global variables. ld bc, #l__INITIALIZER ld a, b or a, c jr Z, gsinit_next ld de, #s__INITIALIZED ld hl, #s__INITIALIZER ldir gsinit_next: .area _GSFINAL ret