|
|
|
@ -1,4 +1,4 @@ |
|
|
|
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.30 Page 1 |
|
|
|
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 1 |
|
|
|
BIOS Z80 |
|
|
|
|
|
|
|
1 ; BIOS / BDOS for the ZXCC environment. |
|
|
|
@ -14,93 +14,146 @@ BIOS Z80 |
|
|
|
11 FE0B ED FE DEFB 0EDh,0FEh |
|
|
|
12 FE0D C9 RET |
|
|
|
13 ; |
|
|
|
14 ; Hack for ZMAC. ZMAC is using contents of 0FE22H to establish a memory pointer. |
|
|
|
15 ; It makes no sense. We stuff 04F4CH here because it is known to work... |
|
|
|
16 ; |
|
|
|
17 FE22 org 0FE22H |
|
|
|
18 FE22 4F4C DEFW 04F4CH |
|
|
|
19 ; |
|
|
|
20 ;This is not a real BIOS, so let its code live below the BIOS jumpblock. |
|
|
|
21 ; |
|
|
|
22 FE24 DD 22 FE33 UBIOS: LD (XIX),IX |
|
|
|
23 FE28 DD E1 POP IX ;IX = address of UBIOS function |
|
|
|
24 FE2A 3E C3 LD A,0C3h ;C3h = BIOS call |
|
|
|
25 FE2C ED FE DEFB 0EDh,0FEh |
|
|
|
26 FE2E DD 2A FE33 LD IX,(XIX) |
|
|
|
27 FE32 C9 RET |
|
|
|
28 ; |
|
|
|
29 FE33 0000 XIX: DEFW 0 |
|
|
|
30 |
|
|
|
31 FE35 21 FF03 CBOOT: LD HL,WBOOT0 |
|
|
|
32 FE38 22 0001 LD (1),HL |
|
|
|
33 FE3B 21 FE06 LD HL,BDOS0 |
|
|
|
34 FE3E 22 0006 LD (6),HL |
|
|
|
35 FE41 3E C3 LD A,0C3h |
|
|
|
36 FE43 32 0000 LD (0),A |
|
|
|
37 FE46 32 0005 LD (5),A |
|
|
|
38 FE49 3E C9 LD A,0C9h |
|
|
|
39 FE4B 32 0038 LD (038h),A |
|
|
|
40 FE4E 3E C1 LD A,0C1h ;C1h = program load |
|
|
|
41 FE50 ED FE DEFB 0EDh,0FEh |
|
|
|
42 FE52 21 0000 LD HL,0 |
|
|
|
43 FE55 E5 PUSH HL ;In case called program tries to RET |
|
|
|
44 FE56 C3 0100 JP 0100h |
|
|
|
45 ; |
|
|
|
46 FE59 3E C3 WBOOT: LD A,0C3h ;Program termination |
|
|
|
47 FE5B DD 21 0006 LD IX,6 ;BIOS call 1 |
|
|
|
48 FE5F ED FE DEFB 0EDh,0FEh |
|
|
|
49 FE61 76 HALT |
|
|
|
50 FE62 C3 FE62 JP $ |
|
|
|
51 ; |
|
|
|
52 FEEC org 0FEECh |
|
|
|
53 FEEC FF tmpdrv: defb 0FFh ;Temp drive = current |
|
|
|
54 |
|
|
|
55 |
|
|
|
56 ; |
|
|
|
57 ;TODO: SCB at FE9Ch |
|
|
|
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.30 Page 2 |
|
|
|
Z80ASM SuperFast Relocating Macro Assembler Z80ASM 1.32 Page 2 |
|
|
|
BIOS Z80 |
|
|
|
|
|
|
|
59 FF00 org 0FF00h |
|
|
|
60 FF00 C3 FE35 JP CBOOT ;FF00 |
|
|
|
61 FF03 C3 FE59 WBOOT0: JP WBOOT ;03 |
|
|
|
62 FF06 CD FE24 CALL UBIOS ;06 |
|
|
|
63 FF09 CD FE24 CALL UBIOS ;09 |
|
|
|
64 FF0C CD FE24 CALL UBIOS ;0C |
|
|
|
65 FF0F CD FE24 CALL UBIOS ;0F |
|
|
|
66 FF12 CD FE24 CALL UBIOS ;12 |
|
|
|
67 FF15 CD FE24 CALL UBIOS ;15 |
|
|
|
68 FF18 CD FE24 CALL UBIOS ;18 |
|
|
|
69 FF1B CD FE24 CALL UBIOS ;1B |
|
|
|
70 FF1E CD FE24 CALL UBIOS ;1E |
|
|
|
71 FF21 CD FE24 CALL UBIOS ;21 |
|
|
|
72 FF24 CD FE24 CALL UBIOS ;24 |
|
|
|
73 FF27 CD FE24 CALL UBIOS ;27 |
|
|
|
74 FF2A CD FE24 CALL UBIOS ;2A |
|
|
|
75 FF2D CD FE24 CALL UBIOS ;2D |
|
|
|
76 FF30 CD FE24 CALL UBIOS ;30 |
|
|
|
77 FF33 CD FE24 CALL UBIOS ;33 |
|
|
|
78 FF36 CD FE24 CALL UBIOS ;36 |
|
|
|
79 FF39 CD FE24 CALL UBIOS ;39 |
|
|
|
80 FF3C CD FE24 CALL UBIOS ;42 |
|
|
|
81 FF3F CD FE24 CALL UBIOS ;45 |
|
|
|
82 FF42 CD FE24 CALL UBIOS ;48 |
|
|
|
83 FF45 CD FE24 CALL UBIOS ;4B |
|
|
|
84 FF48 CD FE24 CALL UBIOS ;4E |
|
|
|
85 FF4B CD FE24 CALL UBIOS ;51 |
|
|
|
86 FF4E CD FE24 CALL UBIOS ;54 |
|
|
|
87 FF51 CD FE24 CALL UBIOS ;57 |
|
|
|
88 FF54 CD FE24 CALL UBIOS ;5A, USERF |
|
|
|
89 FF57 CD FE24 CALL UBIOS ;5D, RESERV1 |
|
|
|
90 FF5A CD FE24 CALL UBIOS ;60, RESERV2 |
|
|
|
91 ; |
|
|
|
92 FFC0 org 0FFC0h ;Space for DPB |
|
|
|
93 FFC0 0020 dpb: defs 20h |
|
|
|
94 |
|
|
|
95 END |
|
|
|
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. 9 Symbols Detected. |
|
|
|
UBIOS ;27 |
|
|
|
74 FF2A CD FE24 CALL UBIOS ;2A |
|
|
|
75 FF2D CD FE24 |
|
|
|
480 Absolute Bytes. 41 Symbols Detected. |
|
|
|
JP BIOS10 |
|
|
|
120 FF21 C3 FE71 JP B |