Mercurial > repos > blastem
comparison runtime.S @ 83:2c7267617d71
Implement Z80 reset and bus request registers.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 26 Dec 2012 17:06:34 -0800 |
parents | 6331ddec228f |
children | 2d1ae596db7a |
comparison
equal
deleted
inserted
replaced
82:6331ddec228f | 83:2c7267617d71 |
---|---|
121 mov 136(%rsi), %cx | 121 mov 136(%rsi), %cx |
122 ret | 122 ret |
123 | 123 |
124 do_io_write: | 124 do_io_write: |
125 call m68k_save_context | 125 call m68k_save_context |
126 and $0xFF, %edi | 126 and $0x3FF, %edi |
127 mov %rcx, %rdx | 127 mov %ecx, %edx |
128 call io_write | 128 call io_write |
129 mov %rax, %rsi | 129 mov %rax, %rsi |
130 call m68k_load_context | 130 call m68k_load_context |
131 ret | 131 ret |
132 do_io_read: | 132 do_io_read: |
133 mov %ecx, %edi | 133 mov %ecx, %edi |
134 and $0xFF, %edi | 134 and $0x3FF, %edi |
135 call m68k_save_context | 135 call m68k_save_context |
136 call io_read | 136 call io_read |
137 mov %rax, %rsi | |
138 call m68k_load_context | |
139 mov 136(%rsi), %cl | |
140 ret | |
141 | |
142 do_io_write_w: | |
143 call m68k_save_context | |
144 and $0x3FF, %edi | |
145 mov %ecx, %edx | |
146 call io_write_w | |
147 mov %rax, %rsi | |
148 call m68k_load_context | |
149 ret | |
150 do_io_read_w: | |
151 mov %ecx, %edi | |
152 and $0x3FF, %edi | |
153 call m68k_save_context | |
154 call io_read_w | |
137 mov %rax, %rsi | 155 mov %rax, %rsi |
138 call m68k_load_context | 156 call m68k_load_context |
139 mov 136(%rsi), %cl | 157 mov 136(%rsi), %cl |
140 ret | 158 ret |
141 | 159 |
206 | 224 |
207 .global m68k_write_byte | 225 .global m68k_write_byte |
208 m68k_write_byte: | 226 m68k_write_byte: |
209 call inccycles | 227 call inccycles |
210 and $0xFFFFFF, %rdi | 228 and $0xFFFFFF, %rdi |
211 /* deal with byte swapping */ | |
212 xor $1, %edi | |
213 cmp $0x400000, %edi | 229 cmp $0x400000, %edi |
214 jle cart_wb | 230 jle cart_wb |
215 cmp $0xE00000, %edi | 231 cmp $0xE00000, %edi |
216 jge workram_wb | 232 jge workram_wb |
217 cmp $0xC00000, %edi | 233 cmp $0xC00000, %edi |
218 jge vdp_psg_wb | 234 jge vdp_psg_wb |
219 cmp $0xA10000, %edi | 235 cmp $0xA10000, %edi |
220 jl not_io_wb | 236 jl not_io_wb |
221 cmp $0xA10100, %edi | 237 cmp $0xA10300, %edi |
222 jge not_io_wb | 238 jge not_io_wb |
223 jmp do_io_write | 239 jmp do_io_write |
224 not_io_wb: | 240 not_io_wb: |
225 ret | 241 ret |
226 workram_wb: | 242 workram_wb: |
243 /* deal with byte swapping */ | |
244 xor $1, %edi | |
227 and $0xFFFF, %rdi | 245 and $0xFFFF, %rdi |
228 mov %cl, (%r9, %rdi) | 246 mov %cl, (%r9, %rdi) |
229 ret | 247 ret |
230 cart_wb: | 248 cart_wb: |
249 /* deal with byte swapping */ | |
250 xor $1, %edi | |
231 mov %cl, (%r8, %rdi) | 251 mov %cl, (%r8, %rdi) |
232 ret | 252 ret |
233 vdp_psg_wb: | 253 vdp_psg_wb: |
234 push %rdx | 254 push %rdx |
235 mov %cl, %dl | 255 mov %cl, %dl |
283 jge workram | 303 jge workram |
284 cmp $0xC00000, %ecx | 304 cmp $0xC00000, %ecx |
285 jge vdp_psg | 305 jge vdp_psg |
286 cmp $0xA10000, %ecx | 306 cmp $0xA10000, %ecx |
287 jl not_io | 307 jl not_io |
288 cmp $0xA10100, %ecx | 308 cmp $0xA10300, %ecx |
289 jge not_io | 309 jge not_io |
290 call do_io_read | 310 call do_io_read_w |
291 mov %cl, %dil | |
292 and $0xFF, %cx | |
293 shl $8, %di | |
294 or %di, %cx | |
295 ret | 311 ret |
296 not_io: | 312 not_io: |
297 xor %cx, %cx | 313 xor %cx, %cx |
298 dec %cx | 314 dec %cx |
299 ret | 315 ret |
325 | 341 |
326 .global m68k_read_byte_scratch1 | 342 .global m68k_read_byte_scratch1 |
327 m68k_read_byte_scratch1: | 343 m68k_read_byte_scratch1: |
328 call inccycles | 344 call inccycles |
329 and $0xFFFFFF, %rcx | 345 and $0xFFFFFF, %rcx |
330 /* deal with byte swapping */ | |
331 xor $1, %ecx | |
332 cmp $0x400000, %ecx | 346 cmp $0x400000, %ecx |
333 jle cart_b | 347 jle cart_b |
334 cmp $0xE00000, %ecx | 348 cmp $0xE00000, %ecx |
335 jge workram_b | 349 jge workram_b |
336 cmp $0xA10000, %ecx | 350 cmp $0xA10000, %ecx |
337 jl not_io_b | 351 jl not_io_b |
338 cmp $0xA10100, %ecx | 352 cmp $0xA10300, %ecx |
339 jge not_io_b | 353 jge not_io_b |
340 jmp do_io_read | 354 jmp do_io_read |
341 not_io_b: | 355 not_io_b: |
342 xor %cl, %cl | 356 xor %cl, %cl |
343 dec %cl | 357 dec %cl |
344 ret | 358 ret |
345 workram_b: | 359 workram_b: |
360 /* deal with byte swapping */ | |
361 xor $1, %ecx | |
346 and $0xFFFF, %rcx | 362 and $0xFFFF, %rcx |
347 mov (%r9, %rcx), %cl | 363 mov (%r9, %rcx), %cl |
348 ret | 364 ret |
349 cart_b: | 365 cart_b: |
366 /* deal with byte swapping */ | |
367 xor $1, %ecx | |
350 mov (%r8, %rcx), %cl | 368 mov (%r8, %rcx), %cl |
351 ret | 369 ret |
352 | 370 |
353 ret_addr_msg: | 371 ret_addr_msg: |
354 .asciz "Program modified return address on stack: found %X, expected %X\n" | 372 .asciz "Program modified return address on stack: found %X, expected %X\n" |