comparison runtime.S @ 64:2b1a65f4b85d

Cleanup 68K timing code. Temporarily omment out fFPS counter as it was causing segfaults
author Mike Pavone <pavone@retrodev.com>
date Wed, 19 Dec 2012 21:25:39 -0800
parents 32650c77008a
children 7a22a0e6c004
comparison
equal deleted inserted replaced
63:a6dd5b7a971b 64:2b1a65f4b85d
29 .asciz "Program tried to access illegal 68K address %X\n" 29 .asciz "Program tried to access illegal 68K address %X\n"
30 30
31 .global m68k_write_word 31 .global m68k_write_word
32 .global try_fifo_write 32 .global try_fifo_write
33 m68k_write_word: 33 m68k_write_word:
34 call inccycles
34 and $0xFFFFFF, %rdi 35 and $0xFFFFFF, %rdi
35 cmp $0x400000, %edi 36 cmp $0x400000, %edi
36 jle cart_w 37 jle cart_w
37 cmp $0xE00000, %edi 38 cmp $0xE00000, %edi
38 jge workram_w 39 jge workram_w
39 cmp $0xC00000, %edi 40 cmp $0xC00000, %edi
40 jge vdp_psg_w 41 jge vdp_psg_w
41 jmp inccycles 42 ret
42 workram_w: 43 workram_w:
43 and $0xFFFF, %rdi 44 and $0xFFFF, %rdi
44 mov %cx, (%r9, %rdi) 45 mov %cx, (%r9, %rdi)
45 jmp inccycles 46 ret
46 cart_w: 47 cart_w:
47 mov %cx, (%r8, %rdi) 48 mov %cx, (%r8, %rdi)
48 jmp inccycles 49 ret
49 vdp_psg_w: 50 vdp_psg_w:
50 test $0x2700E0, %edi 51 test $0x2700E0, %edi
51 jnz crash 52 jnz crash
52 and $0x1F, %edi 53 and $0x1F, %edi
53 cmp $4, %edi 54 cmp $4, %edi
75 mov %rbx, (%rdx) 76 mov %rbx, (%rdx)
76 /* clear pending flag */ 77 /* clear pending flag */
77 andb $0xEF, 19(%rdx) 78 andb $0xEF, 19(%rdx)
78 pop %rbx 79 pop %rbx
79 pop %rdx 80 pop %rdx
80 jmp inccycles 81 ret
81 fifo_fallback: 82 fifo_fallback:
82 pop %rbx 83 pop %rbx
83 pop %rdx 84 pop %rdx
84 jmp do_vdp_port_write 85 jmp do_vdp_port_write
85 crash: 86 crash:
89 mov $1, %rdi 90 mov $1, %rdi
90 call exit 91 call exit
91 92
92 .global m68k_write_byte 93 .global m68k_write_byte
93 m68k_write_byte: 94 m68k_write_byte:
95 call inccycles
94 and $0xFFFFFF, %rdi 96 and $0xFFFFFF, %rdi
95 /* deal with byte swapping */ 97 /* deal with byte swapping */
96 xor $1, %edi 98 xor $1, %edi
97 cmp $0x400000, %edi 99 cmp $0x400000, %edi
98 jle cart_wb 100 jle cart_wb
99 cmp $0xE00000, %edi 101 cmp $0xE00000, %edi
100 jge workram_wb 102 jge workram_wb
101 jmp inccycles 103 ret
102 workram_wb: 104 workram_wb:
103 and $0xFFFF, %rdi 105 and $0xFFFF, %rdi
104 mov %cl, (%r9, %rdi) 106 mov %cl, (%r9, %rdi)
105 jmp inccycles 107 ret
106 cart_wb: 108 cart_wb:
107 mov %cl, (%r8, %rdi) 109 mov %cl, (%r8, %rdi)
108 jmp inccycles 110 ret
109 111
110 .global m68k_write_long_lowfirst 112 .global m68k_write_long_lowfirst
111 m68k_write_long_lowfirst: 113 m68k_write_long_lowfirst:
112 push %rdi 114 push %rdi
113 add $2, %edi 115 add $2, %edi
124 call m68k_write_word 126 call m68k_write_word
125 pop %rcx 127 pop %rcx
126 pop %rdi 128 pop %rdi
127 add $2, %rdi 129 add $2, %rdi
128 jmp m68k_write_word 130 jmp m68k_write_word
131
132 inccycles:
133 cmp %rbp, %rax
134 jge do_limit
135 add $4, %rax
136 ret
137 do_limit:
138 push %rcx
139 push %rdi
140 call handle_cycle_limit
141 pop %rdi
142 pop %rcx
143 add $4, %rax
144 ret
129 145
130 .global m68k_read_word_scratch1 146 .global m68k_read_word_scratch1
131 m68k_read_word_scratch1: 147 m68k_read_word_scratch1:
148 call inccycles
132 and $0xFFFFFF, %rcx 149 and $0xFFFFFF, %rcx
133 cmp $0x400000, %ecx 150 cmp $0x400000, %ecx
134 jle cart 151 jle cart
135 cmp $0xE00000, %ecx 152 cmp $0xE00000, %ecx
136 jge workram 153 jge workram
137 cmp $0xC00000, %ecx 154 cmp $0xC00000, %ecx
138 jge vdp_psg 155 jge vdp_psg
139 xor %cx, %cx 156 xor %cx, %cx
140 dec %cx 157 dec %cx
141 jmp inccycles 158 ret
142 workram: 159 workram:
143 and $0xFFFF, %rcx 160 and $0xFFFF, %rcx
144 mov (%r9, %rcx), %cx 161 mov (%r9, %rcx), %cx
145 jmp inccycles 162 ret
146 vdp_psg: 163 vdp_psg:
147 test $0x2700E0, %ecx 164 test $0x2700E0, %ecx
148 jnz crash 165 jnz crash
149 and $0x1F, %ecx 166 and $0x1F, %ecx
150 jmp do_vdp_port_read 167 jmp do_vdp_port_read
151 cart: 168 cart:
152 mov (%r8, %rcx), %cx 169 mov (%r8, %rcx), %cx
153 inccycles:
154 add $4, %rax
155 cmp %rbp, %rax
156 jge do_limit
157 ret
158 do_limit:
159 push %rcx
160 call handle_cycle_limit
161 pop %rcx
162 ret 170 ret
163 171
164 .global m68k_read_long_scratch1 172 .global m68k_read_long_scratch1
165 m68k_read_long_scratch1: 173 m68k_read_long_scratch1:
166 push %rcx 174 push %rcx
174 or %edi, %ecx 182 or %edi, %ecx
175 ret 183 ret
176 184
177 .global m68k_read_byte_scratch1 185 .global m68k_read_byte_scratch1
178 m68k_read_byte_scratch1: 186 m68k_read_byte_scratch1:
187 call inccycles
179 and $0xFFFFFF, %rcx 188 and $0xFFFFFF, %rcx
180 /* deal with byte swapping */ 189 /* deal with byte swapping */
181 xor $1, %ecx 190 xor $1, %ecx
182 cmp $0x400000, %ecx 191 cmp $0x400000, %ecx
183 jle cart_b 192 jle cart_b
184 cmp $0xE00000, %ecx 193 cmp $0xE00000, %ecx
185 jge workram_b 194 jge workram_b
186 xor %cl, %cl 195 xor %cl, %cl
187 dec %cl 196 dec %cl
188 jmp inccycles 197 ret
189 workram_b: 198 workram_b:
190 and $0xFFFF, %rcx 199 and $0xFFFF, %rcx
191 mov (%r9, %rcx), %cl 200 mov (%r9, %rcx), %cl
192 jmp inccycles 201 ret
193 cart_b: 202 cart_b:
194 mov (%r8, %rcx), %cl 203 mov (%r8, %rcx), %cl
195 jmp inccycles 204 ret
196 205
197 ret_addr_msg: 206 ret_addr_msg:
198 .asciz "Program modified return address on stack: found %X, expected %X\n" 207 .asciz "Program modified return address on stack: found %X, expected %X\n"
199 208
200 .global m68k_modified_ret_addr 209 .global m68k_modified_ret_addr