1 .title EZ80 Banked .adl and .z80 Modes
\r
3 .sbttl Memory Organization
\r
5 ; 111111111122222222223333333333444444444455555555556
\r
6 ; 123456789012345678901234567890123456789012345678901234567890
\r
8 ; -------------------- ADL_BANK_0 0x000000
\r
15 ; -------------------- 0x01FFFF
\r
17 ; -------------------- Z80_BANK_02 0x020000
\r
21 ; -------------------- 0x02FFFF
\r
23 ; -------------------- 0x030000
\r
25 ; -------------------- 0x03FFFF
\r
27 ; -------------------- Z80_BANK_04 0x040000
\r
31 ; -------------------- 0x04FFFF
\r
33 ; -------------------- 0x050000
\r
35 ; -------------------- 0x05FFFF
\r
37 ; -------------------- Z80_BANK_06 0x060000
\r
41 ; -------------------- 0x06FFFF
\r
43 ; -------------------- ADL_BANK_1 0x048000
\r
52 ; -------------------- 0xFFFFFF
\r
58 .Bank ADL_BANK_0 (Base=0x000000, Size=0x020000)
\r
59 .Bank ADL_BANK_1 (Base=0x048000)
\r
61 .Bank Z80_BANK_02 (Base=0x020000, Size=0x010000, FSFX=_02)
\r
62 .Bank Z80_BANK_04 (Base=0x040000, Size=0x010000, FSFX=_04)
\r
63 .Bank Z80_BANK_06 (Base=0x060000, Size=0x010000, FSFX=_06)
\r
68 .area ADL_Sys_1 (rel,con,CSEG,Bank=ADL_BANK_0)
\r
69 .area ADL_Sys_2 (rel,con,CSEG,Bank=ADL_BANK_1)
\r
71 .area Z80_Vm_0 (rel,con,CSEG,Bank=Z80_BANK_02)
\r
72 .area Z80_Vm_1 (rel,con,CSEG,Bank=Z80_BANK_04)
\r
73 .area Z80_Vm_2 (rel,con,CSEG,Bank=Z80_BANK_06)
\r
76 .msb 2 ; select MSB as 3rd byte of address (0,1,[2],3)
\r
79 .sbttl Code in Area ADL_Sys_1
\r
81 ;*****-----*****-----*****-----******-----******-----*****
\r
85 ;*****-----*****-----*****-----******-----******-----*****
\r
88 .adl ; ADL Memory Mode
\r
90 Sys_1: ; Beginning Address of Area
\r
91 ; Prepare mb for 'call'
\r
92 ld a,#>z80_0_sub ; 3ER00
\r
95 ; call the 1st Z80 VM
\r
96 call.is z80_0_sub ; 49 CDr13s00
\r
98 ; Prepare mb for 'call'
\r
99 ld a,#>z80_1_sub ; 3ER00
\r
102 ; call the 2nd Z80 VM
\r
103 call.is z80_1_sub ; 49 CDr13s00
\r
105 ; Prepare mb for 'call'
\r
106 ld a,#>z80_2_sub ; 3ER00
\r
109 ; call the 3rd Z80 VM
\r
110 call.is z80_2_sub ; 49 CDr13s00
\r
112 ; call a routine in current bank
\r
113 call sys_1_sub ; CDr20s00R00
\r
115 ; call a routine in other ADL bank
\r
116 call sys_2_sub ; CDr20s00R00
\r
122 .sbttl Code in Area Z80_Vm_1
\r
124 ;*****-----*****-----*****-----******-----******-----*****
\r
128 ;*****-----*****-----*****-----******-----******-----*****
\r
131 .z80 ; Z80 Memory Mode
\r
133 VM_0: ; Beginning Address of Area
\r
134 ; call a routine in the 1st ADL bank
\r
135 call.il sys_1_sub ; 52 CDr20s00R00
\r
137 ; call a routine in the 2nd ADL bank
\r
138 call.il sys_2_sub ; 52 CDr20s00R00
\r
140 ; call a routine in the current bank
\r
141 call z80_0_sub ; CD*13n00
\r
143 ; call a routine in the other Z80 bank
\r
144 ; *** PageX Link Error during linking ***
\r
145 call z80_1_sub ; CD*13n00
\r
147 ; call a routine in the other Z80 bank
\r
148 ; *** PageX Link Error during linking ***
\r
149 call z80_2_sub ; CD*13n00
\r
154 ; Prepare for a Linker PAGE Boundary Check
\r
155 bytes = 0x010000 - (.-VM_0) - 3
\r
157 ; Instruction completely within PAGE
\r
158 call z80_0_sub ; CD*13n00
\r
162 .sbttl Code in Area Z80_Vm_1
\r
164 ;*****-----*****-----*****-----******-----******-----*****
\r
168 ;*****-----*****-----*****-----******-----******-----*****
\r
171 .z80 ; Z80 Memory Mode
\r
173 VM_1: ; Beginning Address of Area
\r
174 ; call a routine in the 1st ADL bank
\r
175 call.il sys_1_sub ; 52 CDr20s00R00
\r
177 ; call a routine in the 2nd ADL bank
\r
178 call.il sys_2_sub ; 52 CDr20s00R00
\r
180 ; call a routine in the other Z80 bank
\r
181 ; *** PageX Link Error during linking ***
\r
182 call z80_0_sub ; CD*13n00
\r
184 ; call a routine in the current bank
\r
185 call z80_1_sub ; CD*13n00
\r
187 ; call a routine in the other Z80 bank
\r
188 ; *** PageX Link Error during linking ***
\r
189 call z80_2_sub ; CD*13n00
\r
194 ; Prepare for a Linker PAGE Boundary Check
\r
195 bytes = 0x010000 - (.-VM_1) - 2
\r
197 ; Last Byte of Address is outside PAGE
\r
198 ; *** PageX Link Error during linking ***
\r
199 ; *** Bank Size Error during linking ***
\r
200 call z80_1_sub ; CD*13n00
\r
204 .sbttl Code in Area Z80_Vm_2
\r
206 ;*****-----*****-----*****-----******-----******-----*****
\r
210 ;*****-----*****-----*****-----******-----******-----*****
\r
213 .z80 ; Z80 Memory Mode
\r
215 VM_2: ; Beginning Address of Area
\r
216 ; call a routine in the 1st ADL bank
\r
217 call.il sys_1_sub ; 52 CDr20s00R00
\r
219 ; call a routine in the 2nd ADL bank
\r
220 call.il sys_2_sub ; 52 CDr20s00R00
\r
222 ; call a routine in the other Z80 bank
\r
223 ; *** PageX Link Error during linking ***
\r
224 call z80_0_sub ; CD*13n00
\r
226 ; call a routine in the other Z80 bank
\r
227 ; *** PageX Link Error during linking ***
\r
228 call z80_1_sub ; CD*13n00
\r
230 ; call a routine in the current Z80 bank
\r
231 call z80_2_sub ; CD*13n00
\r
236 ; Prepare for a Linker PAGE Boundary Check
\r
237 bytes = 0x010000 - (.-VM_2) - 1
\r
239 ; Both Bytes of Address are outside PAGE
\r
240 ; *** PageX Link Error during linking ***
\r
241 ; *** Bank Size Error during linking ***
\r
242 call z80_2_sub ; CD*13n00
\r
246 .sbttl Code in Area ADL_Sys_2
\r
248 ;*****-----*****-----*****-----******-----******-----*****
\r
252 ;*****-----*****-----*****-----******-----******-----*****
\r
255 .adl ; ADL Memoy Mode
\r
257 Sys_2: ; Beginning Address of Area
\r
258 ; Prepare mb for 'call'
\r
259 ld a,#>z80_0_sub ; 3ER00
\r
262 ; call the 1st Z80 VM
\r
263 call.is z80_0_sub ; 49 CDr13s00
\r
265 ; Prepare mb for 'call'
\r
266 ld a,#>z80_1_sub ; 3ER00
\r
269 ; call the 2nd Z80 VM
\r
270 call.is z80_1_sub ; 49 CDr13s00
\r
272 ; Prepare mb for 'call'
\r
273 ld a,#>z80_2_sub ; 3ER00
\r
276 ; call the 3rd Z80 VM
\r
277 call.is z80_2_sub ; 49 CDr13s00
\r
279 ; call a routine in current bank
\r
280 call sys_2_sub ; CDr20s00R00
\r
282 ; call a routine in other ADL bank
\r
283 call sys_1_sub ; CDr20s00R00
\r