comparison zruntime.S @ 509:b3738ee58195

Fix accidental use of the conditional jump instruction jp instead of jmp
author Michael Pavone <pavone@retrodev.com>
date Thu, 06 Feb 2014 10:03:59 -0800
parents b976c6d6e5fb
children 6b248602ab84
comparison
equal deleted inserted replaced
508:b976c6d6e5fb 509:b3738ee58195
35 ret /* return to caller of z80_run */ 35 ret /* return to caller of z80_run */
36 36
37 forced_sync: 37 forced_sync:
38 movw $0, 164(%rsi) 38 movw $0, 164(%rsi)
39 call z80_save_context_scratch 39 call z80_save_context_scratch
40 pop %rax /*return address in read/write func*/ 40 pop (%rsi) /*return address in read/write func*/
41 pop 104(%rsi) /*return address in native code*/ 41 pop 104(%rsi) /*return address in native code*/
42 mov %rax, (%rsi)
43 42
44 pop %r15 /* restore callee saved regsiters */ 43 pop %r15 /* restore callee saved regsiters */
45 pop %r14 44 pop %r14
46 pop %r13 45 pop %r13
47 pop %r12 46 pop %r12
120 z80_read_ram: 119 z80_read_ram:
121 and $0x1FFF, %r13 120 and $0x1FFF, %r13
122 mov (%r11, %r13), %r13b 121 mov (%r11, %r13), %r13b
123 ret 122 ret
124 z80_read_bank: 123 z80_read_bank:
124 /* approximation of wait states for normal 68K bus access */
125 add $3, %ebp
125 push %rsi 126 push %rsi
126 mov 144(%rsi), %rsi /* get system context pointer */ 127 mov 144(%rsi), %rsi /* get system context pointer */
127 cmp $0, 120(%rsi) /* check bus busy flag */ 128 cmp $0, 120(%rsi) /* check bus busy flag */
128 pop %rsi 129 pop %rsi
129 jne bus_busy 130 jne bus_busy
130 /* approximation of wait states for normal 68K bus access */
131 add $3, %ebp
132 z80_read_bank_cont: 131 z80_read_bank_cont:
133 and $0x7FFF, %r13 132 and $0x7FFF, %r13
134 cmp $0, %r12 133 cmp $0, %r12
135 je slow_bank_read 134 je slow_bank_read
136 /* 68K memory is byte swapped */ 135 /* 68K memory is byte swapped */
139 ret 138 ret
140 slow_bank_read: 139 slow_bank_read:
141 /* TODO: Call into C to implement this */ 140 /* TODO: Call into C to implement this */
142 ret 141 ret
143 bus_busy: 142 bus_busy:
143 cmp %ebp, %edi
144 jbe no_adjust
144 mov %edi, %ebp 145 mov %edi, %ebp
146 no_adjust:
145 call forced_sync 147 call forced_sync
146 jp z80_read_bank_cont 148 jmp z80_read_bank_cont
147 z80_read_ym2612: 149 z80_read_ym2612:
148 call z80_save_context 150 call z80_save_context
149 mov %r13w, %di 151 mov %r13w, %di
150 push %rsi 152 push %rsi
151 call z80_read_ym 153 call z80_read_ym
236 shl $8, %r13w 238 shl $8, %r13w
237 mov %r14b, %r13b 239 mov %r14b, %r13b
238 ret 240 ret
239 241
240 z80_read_bank_word: 242 z80_read_bank_word:
243 add $3, %ebp /* first read typically has 3 wait states */
241 push %rsi 244 push %rsi
242 mov 144(%rsi), %rsi /* get system context pointer */ 245 mov 144(%rsi), %rsi /* get system context pointer */
243 cmp $0, 120(%rsi) /* check bus busy flag */ 246 cmp $0, 120(%rsi) /* check bus busy flag */
244 pop %rsi 247 pop %rsi
245 jne bus_busy_word 248 jne bus_busy_word
246 add $3, %ebp /* first read typically has 3 wait states */
247 z80_read_bank_word_cont: 249 z80_read_bank_word_cont:
248 push %r13 250 push %r13
249 call z80_read_bank_cont 251 call z80_read_bank_cont
250 mov %r13b, %r14b 252 mov %r13b, %r14b
251 pop %r13 253 pop %r13
252 inc %r13 254 inc %r13
253 call z_inccycles 255 call z_inccycles
256 add $4, %ebp /* second read typically has 4 wait states */
254 push %rsi 257 push %rsi
255 mov 144(%rsi), %rsi /* get system context pointer */ 258 mov 144(%rsi), %rsi /* get system context pointer */
256 cmp $0, 120(%rsi) /* check bus busy flag */ 259 cmp $0, 120(%rsi) /* check bus busy flag */
257 pop %rsi 260 pop %rsi
258 jne bus_busy_word2 261 jne bus_busy_word2
259 add $4, %ebp /* second read typically has 4 wait states */
260 z80_read_bank_word_cont2: 262 z80_read_bank_word_cont2:
261 call z80_read_bank_cont 263 call z80_read_bank_cont
262 shl $8, %r13w 264 shl $8, %r13w
263 mov %r14b, %r13b 265 mov %r14b, %r13b
264 ret 266 ret
265 267
266 bus_busy_word: 268 bus_busy_word:
269 cmp %ebp, %edi
270 jb no_adjust_word
267 mov %edi, %ebp 271 mov %edi, %ebp
272 no_adjust_word:
268 call forced_sync 273 call forced_sync
269 jp z80_read_bank_word_cont 274 jmp z80_read_bank_word_cont
275
276 foofoo:
277 jmp foofoo
270 278
271 bus_busy_word2: 279 bus_busy_word2:
280 cmp %ebp, %edi
281 jb no_adjust_word2
272 mov %edi, %ebp 282 mov %edi, %ebp
283 no_adjust_word2:
273 call forced_sync 284 call forced_sync
274 jp z80_read_bank_word_cont2 285 jmp z80_read_bank_word_cont2
286 blahblah:
287 jmp blahblah
275 288
276 .global z80_write_word_highfirst 289 .global z80_write_word_highfirst
277 z80_write_word_highfirst: 290 z80_write_word_highfirst:
278 call z_inccycles 291 call z_inccycles
279 push %r14 292 push %r14