1 ;-------------------------------------------------------------------------- 2 ; cpm0.s - Generic cpm0.s for a Z80 CP/M-80 v2.2 Application 3 ; Copyright (C) 2011, Douglas Goodall All Rights Reserved. 4 ;-------------------------------------------------------------------------- 5 6 .area _CODE 0000 7 .ds 0x0100 0100 8 init: 9 ;; Define an adequate stack 0100 31r00r01 [10] 10 ld sp, #stktop 11 12 ;; Initialise global variables 0103 CDr00r00 [17] 13 call gsinit 14 15 ;; Call the C main routine 0106 CDr00r00 [17] 16 call _main 17 18 ;; Return back to CP/M 0109 0E 00 [ 7] 19 ld c, #0 010B CD 05 00 [17] 20 call 5 21 22 ;; Ordering of segments for the linker. 23 .area _TPA 24 25 .area _HOME 26 .area _CODE 27 .area _INITIALIZER 28 .area _GSINIT 29 .area _GSFINAL 30 .area _DATA 31 .area _INITIALIZED 32 33 .area _STACK 0000 34 .ds 256 0100 35 stktop: 36 37 .area _GSINIT 0000 38 gsinit:: 0000 01r00r00 [10] 39 ld bc, #l__INITIALIZER 0003 78 [ 4] 40 ld a, b 0004 B1 [ 4] 41 or a, c 0005 28 08 [12] 42 jr z, gsinit_next 0007 11r00r00 [10] 43 ld de, #s__INITIALIZED 000A 21r00r00 [10] 44 ld hl, #s__INITIALIZER 000D ED B0 [21] 45 ldir 000F 46 gsinit_next: 47 .area _GSFINAL 0000 C9 [10] 48 ret 49 50 ;;;;;;;;;;;;;;;; 51 ; eof - cpm0.s ; 52 ;;;;;;;;;;;;;;;;