Being used to programming in C, I wanted to be able to do most my software on the Z-80 in C. Here is examples of creating C programs with Custom Z-80 builds:
/* my custom crt0.s for my system */
.module crt0
.globl _main
.globl _isr_08
.globl _isr_10
.globl _isr_18
.globl _isr_20
.globl _isr_28
.globl _isr_30
.globl _isr_38
.globl _isr_66
.globl _isr_Z80_IO_A
.globl _isr_Z80_IO_B
.globl _isr_trap
.globl l__INITIALIZER
.globl s__INITIALIZED
.globl s__INITIALIZER
.area _HEADER (ABS)
;; Reset vector
.org 0
jp init
.org 0x08
jp _isr_08
.org 0x10
jp _isr_10
.org 0x18
jp _isr_18
.org 0x20
jp _isr_20
.org 0x28
jp _isr_28
.org 0x30
jp _isr_30
.org 0x38
jp _isr_38
.org 0x66
jp _isr_66
.org 0x100
init:
;; Set stack pointer directly above top of memory.
ld sp,#0x3fff
;; Initialise global variables
call gsinit
call _main
jp init
.org 0x0200
.dw _isr_Z80_IO_A
.dw _isr_Z80_IO_B
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
.dw _isr_trap
;; 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 _GSINIT
gsinit::
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