Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 1 BIOS Z80 1 ; BIOS / BDOS for the ZXCC environment. 2 ; 3 FE00 org 0FE00h 4 FE00 5A 58 43 43 DEFB 'ZXCC04' ;Serial number 5 ; 6 ; Some CP/M programs expect a jump at the start of BDOS, so here it is. 7 ; 8 FE06 C3 FE09 BDOS0: JP BDOS1 9 10 FE09 3E C0 BDOS1: LD A,0C0h 11 FE0B ED FE DEFB 0EDh,0FEh 12 FE0D C9 RET 13 ; 14 ;This is not a real BIOS, so let its code live below the BIOS jumpblock. 15 ; 16 FE0E DD 22 FE24 UBIOS: LD (XIX),IX 17 FE12 DD E1 POP IX ;IX = address of UBIOS function 18 ; 19 ; ZXCC was written on the assumption that the BIOS jumpblock was a series 20 ; of CALL UBIOS instructions; in which case, IX would be the return address, 21 ; or the address of the jumpblock entry plus 3. 22 ; 23 ; Now that the BIOS jumpblock is a true jumpblock and the CALL instructions 24 ; are elsewhere, the offset is relative to BIOS2 rather than CONST0. So 25 ; adjust the offset. 26 ; 27 FE14 D5 PUSH DE 28 FE15 11 00B0 LD DE,CONST0 - BIOS2 29 FE18 DD 19 ADD IX,DE 30 FE1A D1 POP DE 31 FE1B 3E C3 LD A,0C3h ;C3h = BIOS call 32 FE1D ED FE DEFB 0EDh,0FEh ;ZXCC trap; IX = BIOS function 33 FE1F DD 2A FE24 LD IX,(XIX) 34 FE23 C9 RET 35 ; 36 FE24 0000 XIX: DEFW 0 37 38 FE26 21 FF03 CBOOT: LD HL,WBOOT0 ;ZXCC cold boot: Initialise the Zero Page. 39 FE29 22 0001 LD (1),HL 40 FE2C 21 FE06 LD HL,BDOS0 41 FE2F 22 0006 LD (6),HL 42 FE32 3E C3 LD A,0C3h 43 FE34 32 0000 LD (0),A 44 FE37 32 0005 LD (5),A 45 FE3A 3E C9 LD A,0C9h 46 FE3C 32 0038 LD (038h),A 47 FE3F 3E C1 LD A,0C1h ;C1h = program load 48 FE41 ED FE DEFB 0EDh,0FEh 49 FE43 21 0000 LD HL,0 50 FE46 E5 PUSH HL ;In case called program tries to RET 51 FE47 C3 0100 JP 0100h 52 ; 53 FE4A 3E C3 WBOOT: LD A,0C3h ;Program termination 54 FE4C DD 21 0006 LD IX,6 ;BIOS call 1 55 FE50 ED FE DEFB 0EDh,0FEh 56 FE52 76 HALT 57 FE53 C3 FE53 JP $ 58 ; Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 2 BIOS Z80 59 ; Implementation of all other BIOS functions 60 ; 61 FE56 CD FE0E BIOS2: CALL UBIOS 62 FE59 CD FE0E BIOS3: CALL UBIOS 63 FE5C CD FE0E BIOS4: CALL UBIOS 64 FE5F CD FE0E BIOS5: CALL UBIOS 65 FE62 CD FE0E BIOS6: CALL UBIOS 66 FE65 CD FE0E BIOS7: CALL UBIOS 67 FE68 CD FE0E BIOS8: CALL UBIOS 68 FE6B CD FE0E BIOS9: CALL UBIOS 69 FE6E CD FE0E BIOS10: CALL UBIOS 70 FE71 CD FE0E BIOS11: CALL UBIOS 71 FE74 CD FE0E BIOS12: CALL UBIOS 72 FE77 CD FE0E BIOS13: CALL UBIOS 73 FE7A CD FE0E BIOS14: CALL UBIOS 74 FE7D CD FE0E BIOS15: CALL UBIOS 75 FE80 CD FE0E BIOS16: CALL UBIOS 76 FE83 CD FE0E BIOS17: CALL UBIOS 77 FE86 CD FE0E BIOS18: CALL UBIOS 78 FE89 CD FE0E BIOS19: CALL UBIOS 79 FE8C CD FE0E BIOS20: CALL UBIOS 80 FE8F CD FE0E BIOS21: CALL UBIOS 81 FE92 CD FE0E BIOS22: CALL UBIOS 82 FE95 CD FE0E BIOS23: CALL UBIOS 83 FE98 CD FE0E BIOS24: CALL UBIOS 84 FE9B CD FE0E BIOS25: CALL UBIOS 85 FE9E CD FE0E BIOS26: CALL UBIOS 86 FEA1 CD FE0E BIOS27: CALL UBIOS 87 FEA4 CD FE0E BIOS28: CALL UBIOS 88 FEA7 CD FE0E BIOS29: CALL UBIOS 89 FEAA CD FE0E BIOS30: CALL UBIOS 90 FEAD CD FE0E BIOS31: CALL UBIOS 91 FEB0 CD FE0E BIOS32: CALL UBIOS 92 ; 93 ; 94 FEEC org 0FEECh 95 FEEC FF tmpdrv: defb 0FFh ;Temp drive = current 96 97 98 ; 99 ;TODO: SCB at FE9Ch 100 ; 101 102 ; 103 ; Mallard BASIC (and maybe other programs) assumes that the BIOS 104 ; jumpblock is a list of jumps, not calls. So rather than composing the 105 ; BIOS jumpblock of a sequence of CALL UBIOS, it's now a sequence 106 ; of jumps to CALL UBIOS. 107 ; 108 FF00 org 0FF00h 109 FF00 C3 FE26 JP CBOOT ;FF00 110 FF03 C3 FE4A WBOOT0: JP WBOOT ;03 111 FF06 C3 FE56 CONST0: JP BIOS2 112 FF09 C3 FE59 JP BIOS3 113 FF0C C3 FE5C JP BIOS4 114 FF0F C3 FE5F JP BIOS5 115 FF12 C3 FE62 JP BIOS6 116 FF15 C3 FE65 JP BIOS7 Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 3 BIOS Z80 117 FF18 C3 FE68 JP BIOS8 118 FF1B C3 FE6B JP BIOS9 119 FF1E C3 FE6E JP BIOS10 120 FF21 C3 FE71 JP BIOS11 121 FF24 C3 FE74 JP BIOS12 122 FF27 C3 FE77 JP BIOS13 123 FF2A C3 FE7A JP BIOS14 124 FF2D C3 FE7D JP BIOS15 125 FF30 C3 FE80 JP BIOS16 126 FF33 C3 FE83 JP BIOS17 127 FF36 C3 FE86 JP BIOS18 128 FF39 C3 FE89 JP BIOS19 129 FF3C C3 FE8C JP BIOS20 130 FF3F C3 FE8F JP BIOS21 131 FF42 C3 FE92 JP BIOS22 132 FF45 C3 FE95 JP BIOS23 133 FF48 C3 FE98 JP BIOS24 134 FF4B C3 FE9B JP BIOS25 135 FF4E C3 FE9E JP BIOS26 136 FF51 C3 FEA1 JP BIOS27 137 FF54 C3 FEA4 JP BIOS28 138 FF57 C3 FEA7 JP BIOS29 139 FF5A C3 FEAA JP BIOS30 140 FF5D C3 FEAD JP BIOS31 141 FF60 C3 FEB0 JP BIOS32 142 ; 143 FFC0 org 0FFC0h ;Space for DPB 144 FFC0 0020 dpb: defs 20h 145 146 END 0 Error(s) Detected. 480 Absolute Bytes. 41 Symbols Detected.  JP BIOS10 120 FF21 C3 FE71 JP B