mirror of https://github.com/wwarthen/RomWBW.git
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
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
|