Mercurial > repos > blastem
comparison runtime.S @ 72:7935cd64d5c8
Implement word wide access to IO area
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 21 Dec 2012 16:04:30 -0800 |
parents | 7a22a0e6c004 |
children | 6331ddec228f |
comparison
equal
deleted
inserted
replaced
71:f80fa1776507 | 72:7935cd64d5c8 |
---|---|
20 mov %ecx, %edi | 20 mov %ecx, %edi |
21 call m68k_save_context | 21 call m68k_save_context |
22 call vdp_port_read | 22 call vdp_port_read |
23 mov %rax, %rsi | 23 mov %rax, %rsi |
24 call m68k_load_context | 24 call m68k_load_context |
25 mov 120(%rsi), %cx | 25 mov 128(%rsi), %cx |
26 ret | 26 ret |
27 | 27 |
28 do_io_write: | 28 do_io_write: |
29 call m68k_save_context | 29 call m68k_save_context |
30 and $0xFF, %edi | 30 and $0xFF, %edi |
38 and $0xFF, %edi | 38 and $0xFF, %edi |
39 call m68k_save_context | 39 call m68k_save_context |
40 call io_read | 40 call io_read |
41 mov %rax, %rsi | 41 mov %rax, %rsi |
42 call m68k_load_context | 42 call m68k_load_context |
43 mov 120(%rsi), %cl | 43 mov 128(%rsi), %cl |
44 ret | 44 ret |
45 | 45 |
46 bad_access_msg: | 46 bad_access_msg: |
47 .asciz "Program tried to access illegal 68K address %X\n" | 47 .asciz "Program tried to access illegal 68K address %X\n" |
48 | 48 |
74 jmp do_vdp_port_write | 74 jmp do_vdp_port_write |
75 try_fifo_write: | 75 try_fifo_write: |
76 push %rdx | 76 push %rdx |
77 push %rbx | 77 push %rbx |
78 /* fetch VDP context pointer from 68K context */ | 78 /* fetch VDP context pointer from 68K context */ |
79 mov 112(%rsi), %rdx | 79 mov 120(%rsi), %rdx |
80 /* get fifo_cur and compare it to fifo_end */ | 80 /* get fifo_cur and compare it to fifo_end */ |
81 mov (%rdx), %rbx | 81 mov (%rdx), %rbx |
82 cmp %rbx, 8(%rdx) | 82 cmp %rbx, 8(%rdx) |
83 /* bail out if fifo is full */ | 83 /* bail out if fifo is full */ |
84 je fifo_fallback | 84 je fifo_fallback |
185 jle cart | 185 jle cart |
186 cmp $0xE00000, %ecx | 186 cmp $0xE00000, %ecx |
187 jge workram | 187 jge workram |
188 cmp $0xC00000, %ecx | 188 cmp $0xC00000, %ecx |
189 jge vdp_psg | 189 jge vdp_psg |
190 cmp $0xA10000, %ecx | |
191 jl not_io | |
192 cmp $0xA10100, %ecx | |
193 jge not_io | |
194 call do_io_read | |
195 mov %cl, %dil | |
196 and $0xFF, %cx | |
197 shl $8, %di | |
198 or %di, %cx | |
199 ret | |
200 not_io: | |
190 xor %cx, %cx | 201 xor %cx, %cx |
191 dec %cx | 202 dec %cx |
192 ret | 203 ret |
193 workram: | 204 workram: |
194 and $0xFFFF, %rcx | 205 and $0xFFFF, %rcx |
275 mov %r11d, 12(%rsi) /* d1 */ | 286 mov %r11d, 12(%rsi) /* d1 */ |
276 mov %r12d, 16(%rsi) /* d2 */ | 287 mov %r12d, 16(%rsi) /* d2 */ |
277 mov %r13d, 40(%rsi) /* a0 */ | 288 mov %r13d, 40(%rsi) /* a0 */ |
278 mov %r14d, 44(%rsi) /* a1 */ | 289 mov %r14d, 44(%rsi) /* a1 */ |
279 mov %r15d, 68(%rsi) /* a7 */ | 290 mov %r15d, 68(%rsi) /* a7 */ |
280 mov %eax, 76(%rsi) /* current cycle count */ | 291 mov %eax, 80(%rsi) /* current cycle count */ |
281 ret | 292 ret |
282 | 293 |
283 .global m68k_load_context | 294 .global m68k_load_context |
284 m68k_load_context: | 295 m68k_load_context: |
285 mov 1(%rsi), %bl /* N Flag */ | 296 mov 1(%rsi), %bl /* N Flag */ |
290 mov 12(%rsi), %r11d /* d1 */ | 301 mov 12(%rsi), %r11d /* d1 */ |
291 mov 16(%rsi), %r12d /* d2 */ | 302 mov 16(%rsi), %r12d /* d2 */ |
292 mov 40(%rsi), %r13d /* a0 */ | 303 mov 40(%rsi), %r13d /* a0 */ |
293 mov 44(%rsi), %r14d /* a1 */ | 304 mov 44(%rsi), %r14d /* a1 */ |
294 mov 68(%rsi), %r15d /* a7 */ | 305 mov 68(%rsi), %r15d /* a7 */ |
295 mov 72(%rsi), %ebp /* target cycle count */ | 306 mov 76(%rsi), %ebp /* target cycle count */ |
296 mov 76(%rsi), %eax /* current cycle count */ | 307 mov 80(%rsi), %eax /* current cycle count */ |
297 mov 80(%rsi), %r8d /* cartridge address */ | 308 mov 88(%rsi), %r8d /* cartridge address */ |
298 mov 88(%rsi), %r9d /* work ram address */ | 309 mov 96(%rsi), %r9d /* work ram address */ |
299 ret | 310 ret |
300 | 311 |
301 .global m68k_start_context | 312 .global m68k_start_context |
302 m68k_start_context: | 313 m68k_start_context: |
303 call m68k_load_context | 314 call m68k_load_context |