comparison 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
comparison
equal deleted inserted replaced
65:aef6302770c2 66:7a22a0e6c004
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 120(%rsi), %cx
26 ret
27
28 do_io_write:
29 call m68k_save_context
30 and $0xFF, %edi
31 mov %rcx, %rdx
32 call io_write
33 mov %rax, %rsi
34 call m68k_load_context
35 ret
36 do_io_read:
37 mov %ecx, %edi
38 and $0xFF, %edi
39 call m68k_save_context
40 call io_read
41 mov %rax, %rsi
42 call m68k_load_context
43 mov 120(%rsi), %cl
26 ret 44 ret
27 45
28 bad_access_msg: 46 bad_access_msg:
29 .asciz "Program tried to access illegal 68K address %X\n" 47 .asciz "Program tried to access illegal 68K address %X\n"
30 48
98 xor $1, %edi 116 xor $1, %edi
99 cmp $0x400000, %edi 117 cmp $0x400000, %edi
100 jle cart_wb 118 jle cart_wb
101 cmp $0xE00000, %edi 119 cmp $0xE00000, %edi
102 jge workram_wb 120 jge workram_wb
121 cmp $0xC00000, %edi
122 jge vdp_psg_wb
123 cmp $0xA10000, %edi
124 jl not_io_wb
125 cmp $0xA10100, %edi
126 jge not_io_wb
127 jmp do_io_write
128 not_io_wb:
103 ret 129 ret
104 workram_wb: 130 workram_wb:
105 and $0xFFFF, %rdi 131 and $0xFFFF, %rdi
106 mov %cl, (%r9, %rdi) 132 mov %cl, (%r9, %rdi)
107 ret 133 ret
108 cart_wb: 134 cart_wb:
109 mov %cl, (%r8, %rdi) 135 mov %cl, (%r8, %rdi)
110 ret 136 ret
137 vdp_psg_wb:
138 push %rdx
139 mov %cl, %dl
140 and $0xFF, %cx
141 shl $8, %dx
142 or %dx, %cx
143 pop %rdx
144 jmp vdp_psg_w
111 145
112 .global m68k_write_long_lowfirst 146 .global m68k_write_long_lowfirst
113 m68k_write_long_lowfirst: 147 m68k_write_long_lowfirst:
114 push %rdi 148 push %rdi
115 add $2, %edi 149 add $2, %edi
190 xor $1, %ecx 224 xor $1, %ecx
191 cmp $0x400000, %ecx 225 cmp $0x400000, %ecx
192 jle cart_b 226 jle cart_b
193 cmp $0xE00000, %ecx 227 cmp $0xE00000, %ecx
194 jge workram_b 228 jge workram_b
229 cmp $0xA10000, %ecx
230 jl not_io_b
231 cmp $0xA10100, %ecx
232 jge not_io_b
233 jmp do_io_read
234 not_io_b:
195 xor %cl, %cl 235 xor %cl, %cl
196 dec %cl 236 dec %cl
197 ret 237 ret
198 workram_b: 238 workram_b:
199 and $0xFFFF, %rcx 239 and $0xFFFF, %rcx