- ;; Generic crt0.s for a Z80
- .globl __main
-
- .area _HEADER (ABS)
- ;; Reset vector
- .org 0
- jp init
-
- .org 0x08
- reti
- .org 0x10
- reti
- .org 0x18
- reti
- .org 0x20
- reti
- .org 0x28
- reti
- .org 0x30
- reti
- .org 0x38
- reti
-
- .org 0x100
- jp 0x150
-
- .org 0x150
+ ;; Generic crt0.s for a GBZ80
+ .globl _main
+
+ .area _HEADER (ABS)
+ ;; Reset vector
+ .org 0
+ jp init
+
+ .org 0x08
+ reti
+ .org 0x10
+ reti
+ .org 0x18
+ reti
+ .org 0x20
+ reti
+ .org 0x28
+ reti
+ .org 0x30
+ reti
+ .org 0x38
+ reti
+
+ .org 0x100
+ jp 0x150
+
+ .org 0x150
init:
- di
- ;; Stack at the top of memory.
- ld sp,#0xdfff
+ di
+ ;; Stack at the top of memory.
+ ld sp,#0xdfff
+
+ ;; Setup global data
+ call gsinit
- ;; Use _main instead of main to bypass sdcc's intelligence
- call __main
- jp _exit
+ ;; Use _main instead of main to bypass sdcc's intelligence
+ call _main
+ jp _exit
- ;; Ordering of segments for the linker.
- .area _CODE
- .area _DATA
+ ;; Ordering of segments for the linker.
+ .area _HOME
+ .area _CODE
+ .area _GSINIT
+ .area _GSFINAL
+ .area _DATA
+ .area _BSS
+ .area _HEAP
+
+ .area _CODE
__clock::
- ld a,#2
- rst 0x00
- ret
-
-_getsp::
- ld hl,#0
- add hl,sp
- ret
-
-__printTStates::
- ld a,#3
- rst 0x00
- ret
-
+ ld a,#2
+ rst 0x08
+ ret
+
_exit::
- ;; Exit - special code to the emulator
- ld a,#1
- rst 0x00
+ ;; Exit - special code to the emulator
+ ld a,#0
+ rst 0x08
1$:
- halt
- jr 1$
+ halt
+ jr 1$
+
+ .area _GSINIT
+gsinit::
+
+ .area _GSFINAL
+ ret