Mercurial > repos > blastem
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 |