You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

159 lines
6.6 KiB

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