Mercurial > repos > blastem
comparison zruntime.S @ 253:3b34deba4ca0
Squashing some bugs introduced when I switched the register assignments for z80_write_byte around.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 29 Apr 2013 22:32:21 -0700 |
parents | 63b9a500a00b |
children | d9417261366f |
comparison
equal
deleted
inserted
replaced
252:63b9a500a00b | 253:3b34deba4ca0 |
---|---|
86 | 86 |
87 .global z80_write_byte | 87 .global z80_write_byte |
88 z80_write_byte: | 88 z80_write_byte: |
89 call z_inccycles | 89 call z_inccycles |
90 z80_write_byte_noinc: | 90 z80_write_byte_noinc: |
91 cmp $0x4000, %r13w | 91 cmp $0x4000, %r14w |
92 jb z80_write_ram | 92 jb z80_write_ram |
93 cmp $0x8000, %r13w | 93 cmp $0x8000, %r14w |
94 jae z80_write_bank | 94 jae z80_write_bank |
95 cmp $0x6000, %r13w | 95 cmp $0x6000, %r14w |
96 je z80_write_bank_reg | 96 je z80_write_bank_reg |
97 /* TODO: YM-2612, PSG/VDP */ | 97 /* TODO: YM-2612, PSG/VDP */ |
98 ret | 98 ret |
99 z80_write_ram: | 99 z80_write_ram: |
100 and $0x1FFF, %r13 | 100 and $0x1FFF, %r14 |
101 mov %r14b, (%r11, %r13) | 101 mov %r13b, (%r11, %r14) |
102 mov %r13d, %r14d | 102 mov %r14d, %r13d |
103 shr $7, %r14d | 103 shr $7, %r13d |
104 bt %r14d, 152(%rsi) | 104 bt %r13d, 152(%rsi) |
105 jnc not_code | 105 jnc not_code |
106 call z80_save_context | 106 call z80_save_context |
107 mov %r13d, %edi | 107 mov %r14d, %edi |
108 call z80_handle_code_write | 108 call z80_handle_code_write |
109 mov %rax, %rsi | 109 mov %rax, %rsi |
110 not_code: | 110 not_code: |
111 ret | 111 ret |
112 z80_write_bank: | 112 z80_write_bank: |
113 and $0x7FFF, %r13 | 113 and $0x7FFF, %r14 |
114 cmp $0, %r12 | 114 cmp $0, %r12 |
115 je slow_bank_write | 115 je slow_bank_write |
116 /* 68K memory is byte swapped */ | 116 /* 68K memory is byte swapped */ |
117 xor $1, %r13 | 117 xor $1, %r14 |
118 mov %r14b, (%r12, %r13) | 118 mov %r13b, (%r12, %r14) |
119 ret | 119 ret |
120 slow_bank_write: | 120 slow_bank_write: |
121 /* TODO: Call into C to implement this */ | 121 /* TODO: Call into C to implement this */ |
122 ret | 122 ret |
123 z80_write_bank_reg: | 123 z80_write_bank_reg: |
124 and $1, %r14w | 124 and $1, %r13w |
125 shl %r15w | 125 shl %r15w |
126 or %r14w, %r15w | 126 or %r13w, %r15w |
127 and $0x1FF, %r15w | 127 and $0x1FF, %r15w |
128 xor %r12, %r12 | 128 xor %r12, %r12 |
129 cmp $0x80, %r15w | 129 cmp $0x80, %r15w |
130 jb update_bank_ptr | 130 jb update_bank_ptr |
131 ret | 131 ret |
152 .global z80_write_word_highfirst | 152 .global z80_write_word_highfirst |
153 z80_write_word_highfirst: | 153 z80_write_word_highfirst: |
154 call z_inccycles | 154 call z_inccycles |
155 push %r14 | 155 push %r14 |
156 push %r13 | 156 push %r13 |
157 add $1, %r13w | 157 add $1, %r14w |
158 shr $8, %r14w | 158 shr $8, %r13w |
159 call z80_write_byte_noinc | 159 call z80_write_byte_noinc |
160 pop %r13 | 160 pop %r13 |
161 pop %r14 | 161 pop %r14 |
162 call z_inccycles | 162 call z_inccycles |
163 call z80_write_byte_noinc | 163 call z80_write_byte_noinc |
169 push %r14 | 169 push %r14 |
170 push %r13 | 170 push %r13 |
171 call z80_write_byte_noinc | 171 call z80_write_byte_noinc |
172 pop %r13 | 172 pop %r13 |
173 pop %r14 | 173 pop %r14 |
174 add $1, %r13w | 174 add $1, %r14w |
175 shr $8, %r14w | 175 shr $8, %r13w |
176 call z_inccycles | 176 call z_inccycles |
177 call z80_write_byte_noinc | 177 call z80_write_byte_noinc |
178 ret | 178 ret |
179 | 179 |
180 .global z80_retrans_stub | 180 .global z80_retrans_stub |