Mercurial > repos > blastem
comparison gdb_remote.c @ 1752:d6d4c006a7b3
Initial attempt at interrupts in new Z80 core and integrating it into main executable
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 10 Feb 2019 11:58:23 -0800 |
parents | 85a90964b557 |
children | 8fe162bdb038 52a47611a273 |
comparison
equal
deleted
inserted
replaced
1751:c5d4e1d14dac | 1752:d6d4c006a7b3 |
---|---|
130 context->flags[i] = value & 1; | 130 context->flags[i] = value & 1; |
131 value >>= 1; | 131 value >>= 1; |
132 } | 132 } |
133 } | 133 } |
134 | 134 |
135 uint8_t read_byte(m68k_context * context, uint32_t address) | 135 uint8_t m68k_read_byte(m68k_context * context, uint32_t address) |
136 { | 136 { |
137 | 137 |
138 genesis_context *gen = context->system; | 138 genesis_context *gen = context->system; |
139 //TODO: Use generated read/write functions to support access to hardware that is not ROM or RAM | 139 //TODO: Use generated read/write functions to support access to hardware that is not ROM or RAM |
140 uint16_t * word = get_native_pointer(address & 0xFFFFFFFE, (void **)context->mem_pointers, &context->options->gen); | 140 uint16_t * word = get_native_pointer(address & 0xFFFFFFFE, (void **)context->mem_pointers, &context->options->gen); |
148 return gen->zram[address & 0x1FFF]; | 148 return gen->zram[address & 0x1FFF]; |
149 } | 149 } |
150 return 0; | 150 return 0; |
151 } | 151 } |
152 | 152 |
153 void write_byte(m68k_context * context, uint32_t address, uint8_t value) | 153 void m68k_write_byte(m68k_context * context, uint32_t address, uint8_t value) |
154 { | 154 { |
155 genesis_context *gen = context->system; | 155 genesis_context *gen = context->system; |
156 //TODO: Use generated read/write functions so that memory map is properly respected | 156 //TODO: Use generated read/write functions so that memory map is properly respected |
157 uint16_t * word = get_native_pointer(address & 0xFFFFFFFE, (void **)context->mem_pointers, &context->options->gen); | 157 uint16_t * word = get_native_pointer(address & 0xFFFFFFFE, (void **)context->mem_pointers, &context->options->gen); |
158 if (word) { | 158 if (word) { |
168 return; | 168 return; |
169 } | 169 } |
170 if (address >= 0xA00000 && address < 0xA04000) { | 170 if (address >= 0xA00000 && address < 0xA04000) { |
171 gen->zram[address & 0x1FFF] = value; | 171 gen->zram[address & 0x1FFF] = value; |
172 genesis_context * gen = context->system; | 172 genesis_context * gen = context->system; |
173 #ifndef NO_Z80 | 173 #if !defined(NO_Z80) && !defined(NEW_CORE) |
174 z80_handle_code_write(address & 0x1FFF, gen->z80); | 174 z80_handle_code_write(address & 0x1FFF, gen->z80); |
175 #endif | 175 #endif |
176 return; | 176 return; |
177 } else { | 177 } else { |
178 return; | 178 return; |
303 size = (sizeof(send_buf)-1)/2; | 303 size = (sizeof(send_buf)-1)/2; |
304 } | 304 } |
305 char *cur = send_buf; | 305 char *cur = send_buf; |
306 while (size) | 306 while (size) |
307 { | 307 { |
308 hex_8(read_byte(context, address), cur); | 308 hex_8(m68k_read_byte(context, address), cur); |
309 cur += 2; | 309 cur += 2; |
310 address++; | 310 address++; |
311 size--; | 311 size--; |
312 } | 312 } |
313 *cur = 0; | 313 *cur = 0; |
324 { | 324 { |
325 char tmp[3]; | 325 char tmp[3]; |
326 tmp[0] = *(cur++); | 326 tmp[0] = *(cur++); |
327 tmp[1] = *(cur++); | 327 tmp[1] = *(cur++); |
328 tmp[2] = 0; | 328 tmp[2] = 0; |
329 write_byte(context, address, strtoul(tmp, NULL, 16)); | 329 m68k_write_byte(context, address, strtoul(tmp, NULL, 16)); |
330 address++; | 330 address++; |
331 size--; | 331 size--; |
332 } | 332 } |
333 gdb_send_command("OK"); | 333 gdb_send_command("OK"); |
334 break; | 334 break; |