Mercurial > repos > blastem
comparison runtime.S @ 104:a0fdaa134964
Use unsigned comparisons for address decoding, exit when we hit an unhandled addressing mode for jmp
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 27 Dec 2012 23:00:11 -0800 |
parents | dd3c680c618c |
children | 0a0743a30ca1 |
comparison
equal
deleted
inserted
replaced
103:a71544cd01ea | 104:a0fdaa134964 |
---|---|
176 .global try_fifo_write | 176 .global try_fifo_write |
177 m68k_write_word: | 177 m68k_write_word: |
178 call inccycles | 178 call inccycles |
179 and $0xFFFFFF, %rdi | 179 and $0xFFFFFF, %rdi |
180 cmp $0x400000, %edi | 180 cmp $0x400000, %edi |
181 jle cart_w | 181 jbe cart_w |
182 cmp $0xE00000, %edi | 182 cmp $0xE00000, %edi |
183 jge workram_w | 183 jae workram_w |
184 cmp $0xC00000, %edi | 184 cmp $0xC00000, %edi |
185 jge vdp_psg_w | 185 jae vdp_psg_w |
186 cmp $0xA10000, %edi | 186 cmp $0xA10000, %edi |
187 jl not_io_w | 187 jb not_io_w |
188 cmp $0xA12000, %edi | 188 cmp $0xA12000, %edi |
189 jge not_io_w | 189 jae not_io_w |
190 jmp do_io_write_w | 190 jmp do_io_write_w |
191 not_io_w: | 191 not_io_w: |
192 ret | 192 ret |
193 workram_w: | 193 workram_w: |
194 and $0xFFFF, %rdi | 194 and $0xFFFF, %rdi |
200 vdp_psg_w: | 200 vdp_psg_w: |
201 test $0x2700E0, %edi | 201 test $0x2700E0, %edi |
202 jnz crash | 202 jnz crash |
203 and $0x1F, %edi | 203 and $0x1F, %edi |
204 cmp $4, %edi | 204 cmp $4, %edi |
205 jl try_fifo_write | 205 jb try_fifo_write |
206 jmp do_vdp_port_write | 206 jmp do_vdp_port_write |
207 try_fifo_write: | 207 try_fifo_write: |
208 push %rdx | 208 push %rdx |
209 push %rbx | 209 push %rbx |
210 /* fetch VDP context pointer from 68K context */ | 210 /* fetch VDP context pointer from 68K context */ |
243 .global m68k_write_byte | 243 .global m68k_write_byte |
244 m68k_write_byte: | 244 m68k_write_byte: |
245 call inccycles | 245 call inccycles |
246 and $0xFFFFFF, %rdi | 246 and $0xFFFFFF, %rdi |
247 cmp $0x400000, %edi | 247 cmp $0x400000, %edi |
248 jle cart_wb | 248 jbe cart_wb |
249 cmp $0xE00000, %edi | 249 cmp $0xE00000, %edi |
250 jge workram_wb | 250 jae workram_wb |
251 cmp $0xC00000, %edi | 251 cmp $0xC00000, %edi |
252 jge vdp_psg_wb | 252 jae vdp_psg_wb |
253 cmp $0xA10000, %edi | 253 cmp $0xA10000, %edi |
254 jl not_io_wb | 254 jb not_io_wb |
255 cmp $0xA12000, %edi | 255 cmp $0xA12000, %edi |
256 jge not_io_wb | 256 jae not_io_wb |
257 jmp do_io_write | 257 jmp do_io_write |
258 not_io_wb: | 258 not_io_wb: |
259 ret | 259 ret |
260 workram_wb: | 260 workram_wb: |
261 /* deal with byte swapping */ | 261 /* deal with byte swapping */ |
316 .global m68k_read_word_scratch1 | 316 .global m68k_read_word_scratch1 |
317 m68k_read_word_scratch1: | 317 m68k_read_word_scratch1: |
318 call inccycles | 318 call inccycles |
319 and $0xFFFFFF, %rcx | 319 and $0xFFFFFF, %rcx |
320 cmp $0x400000, %ecx | 320 cmp $0x400000, %ecx |
321 jle cart | 321 jbe cart |
322 cmp $0xE00000, %ecx | 322 cmp $0xE00000, %ecx |
323 jge workram | 323 jae workram |
324 cmp $0xC00000, %ecx | 324 cmp $0xC00000, %ecx |
325 jge vdp_psg | 325 jae vdp_psg |
326 cmp $0xA10000, %ecx | 326 cmp $0xA10000, %ecx |
327 jl not_io | 327 jb not_io |
328 cmp $0xA12000, %ecx | 328 cmp $0xA12000, %ecx |
329 jge not_io | 329 jae not_io |
330 call do_io_read_w | 330 call do_io_read_w |
331 ret | 331 ret |
332 not_io: | 332 not_io: |
333 xor %cx, %cx | 333 xor %cx, %cx |
334 dec %cx | 334 dec %cx |
364 .global m68k_read_byte_scratch1 | 364 .global m68k_read_byte_scratch1 |
365 m68k_read_byte_scratch1: | 365 m68k_read_byte_scratch1: |
366 call inccycles | 366 call inccycles |
367 and $0xFFFFFF, %rcx | 367 and $0xFFFFFF, %rcx |
368 cmp $0x400000, %ecx | 368 cmp $0x400000, %ecx |
369 jle cart_b | 369 jbe cart_b |
370 cmp $0xE00000, %ecx | 370 cmp $0xE00000, %ecx |
371 jge workram_b | 371 jae workram_b |
372 cmp $0xA10000, %ecx | 372 cmp $0xA10000, %ecx |
373 jl not_io_b | 373 jb not_io_b |
374 cmp $0xA12000, %ecx | 374 cmp $0xA12000, %ecx |
375 jge not_io_b | 375 jae not_io_b |
376 jmp do_io_read | 376 jmp do_io_read |
377 not_io_b: | 377 not_io_b: |
378 xor %cl, %cl | 378 xor %cl, %cl |
379 dec %cl | 379 dec %cl |
380 ret | 380 ret |