Mercurial > repos > blastem
diff runtime.S @ 66:7a22a0e6c004
Gamepad support
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 20 Dec 2012 00:44:59 -0800 |
parents | 2b1a65f4b85d |
children | 7935cd64d5c8 |
line wrap: on
line diff
--- a/runtime.S Wed Dec 19 22:15:16 2012 -0800 +++ b/runtime.S Thu Dec 20 00:44:59 2012 -0800 @@ -25,6 +25,24 @@ mov 120(%rsi), %cx ret +do_io_write: + call m68k_save_context + and $0xFF, %edi + mov %rcx, %rdx + call io_write + mov %rax, %rsi + call m68k_load_context + ret +do_io_read: + mov %ecx, %edi + and $0xFF, %edi + call m68k_save_context + call io_read + mov %rax, %rsi + call m68k_load_context + mov 120(%rsi), %cl + ret + bad_access_msg: .asciz "Program tried to access illegal 68K address %X\n" @@ -100,6 +118,14 @@ jle cart_wb cmp $0xE00000, %edi jge workram_wb + cmp $0xC00000, %edi + jge vdp_psg_wb + cmp $0xA10000, %edi + jl not_io_wb + cmp $0xA10100, %edi + jge not_io_wb + jmp do_io_write +not_io_wb: ret workram_wb: and $0xFFFF, %rdi @@ -108,6 +134,14 @@ cart_wb: mov %cl, (%r8, %rdi) ret +vdp_psg_wb: + push %rdx + mov %cl, %dl + and $0xFF, %cx + shl $8, %dx + or %dx, %cx + pop %rdx + jmp vdp_psg_w .global m68k_write_long_lowfirst m68k_write_long_lowfirst: @@ -192,6 +226,12 @@ jle cart_b cmp $0xE00000, %ecx jge workram_b + cmp $0xA10000, %ecx + jl not_io_b + cmp $0xA10100, %ecx + jge not_io_b + jmp do_io_read +not_io_b: xor %cl, %cl dec %cl ret