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"