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