src/mame/drivers/megadriv.c
| r9335 | r9336 | |
| 3798 | 3798 | *************************************************************************************************/ |
| 3799 | 3799 | |
| 3800 | 3800 | static UINT16* segacd_4meg_prgram; // pointer to SubCPU PrgRAM |
| 3801 | static UINT16 segacd_hint_register; |
| 3801 | 3802 | |
| 3802 | | |
| 3803 | 3803 | static UINT16 a12000_halt_reset_reg = 0x0000; |
| 3804 | 3804 | |
| 3805 | 3805 | static WRITE16_HANDLER( scd_a12000_halt_reset_w ) |
| r9335 | r9336 | |
| 4235 | 4235 | } |
| 4236 | 4236 | } |
| 4237 | 4237 | |
| 4238 | static READ16_HANDLER( scd_hint_vector_r ) |
| 4239 | { |
| 4240 | // printf("read HINT offset %d\n", offset); |
| 4238 | 4241 | |
| 4242 | switch (offset&1) |
| 4243 | { |
| 4244 | case 0x00: |
| 4245 | //return 0x00ff; // doesn't make much sense.. |
| 4246 | return 0xffff; |
| 4247 | case 0x01: |
| 4248 | return segacd_hint_register; |
| 4249 | } |
| 4250 | |
| 4251 | return 0; |
| 4239 | 4252 | |
| 4253 | } |
| 4254 | |
| 4255 | static READ16_HANDLER( scd_a12006_hint_register_r ) |
| 4256 | { |
| 4257 | return segacd_hint_register; |
| 4258 | } |
| 4259 | |
| 4260 | static WRITE16_HANDLER( scd_a12006_hint_register_w ) |
| 4261 | { |
| 4262 | COMBINE_DATA(&segacd_hint_register); |
| 4263 | } |
| 4264 | |
| 4265 | |
| 4240 | 4266 | /* main CPU map set up in INIT */ |
| 4241 | 4267 | void segacd_init_main_cpu( running_machine* machine ) |
| 4242 | 4268 | { |
| r9335 | r9336 | |
| 4244 | 4270 | |
| 4245 | 4271 | segacd_4meg_prgbank = 0; |
| 4246 | 4272 | |
| 4273 | |
| 4274 | memory_unmap_readwrite(space, 0x20000,0x3fffff,0,0); |
| 4275 | |
| 4247 | 4276 | memory_install_read_bank(space, 0x0020000, 0x003ffff, 0, 0, "scd_4m_prgbank"); |
| 4248 | 4277 | memory_set_bankptr(space->machine, "scd_4m_prgbank", segacd_4meg_prgram + segacd_4meg_prgbank * 0x20000 ); |
| 4249 | 4278 | memory_install_write16_handler (space, 0x0020000, 0x003ffff, 0, 0, scd_4m_prgbank_ram_w ); |
| r9335 | r9336 | |
| 4253 | 4282 | memory_install_readwrite16_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa12000, 0xa12001, 0, 0, scd_a12000_halt_reset_r, scd_a12000_halt_reset_w); // sub-cpu control |
| 4254 | 4283 | memory_install_readwrite16_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa12002, 0xa12003, 0, 0, scd_a12002_memory_mode_r, scd_a12002_memory_mode_w); // memory mode / write protect |
| 4255 | 4284 | |
| 4285 | memory_install_readwrite16_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa12006, 0xa12007, 0, 0, scd_a12006_hint_register_r, scd_a12006_hint_register_w); // where HINT points on main CPU |
| 4286 | |
| 4287 | |
| 4256 | 4288 | memory_install_readwrite16_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa1200e, 0xa1200f, 0, 0, segacd_comms_flags_r, segacd_comms_flags_maincpu_w); // communication flags block |
| 4257 | 4289 | |
| 4258 | 4290 | memory_install_readwrite16_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa12010, 0xa1201f, 0, 0, segacd_comms_main_part1_r, segacd_comms_main_part1_w); |
| r9335 | r9336 | |
| 4261 | 4293 | |
| 4262 | 4294 | cpu_set_irq_callback(machine->device("segacd_68k"), segacd_sub_int_callback); |
| 4263 | 4295 | |
| 4296 | memory_install_read16_handler (space, 0x0000070, 0x0000073, 0, 0, scd_hint_vector_r ); |
| 4297 | |
| 4298 | |
| 4264 | 4299 | } |
| 4265 | 4300 | |
| 4266 | 4301 | static MACHINE_RESET( segacd ) |
| 4267 | 4302 | { |
| 4268 | 4303 | cpu_set_input_line(_segacd_68k_cpu, INPUT_LINE_RESET, ASSERT_LINE); |
| 4269 | 4304 | cpu_set_input_line(_segacd_68k_cpu, INPUT_LINE_HALT, ASSERT_LINE); |
| 4305 | |
| 4306 | segacd_hint_register = 0xffff; // -1 |
| 4270 | 4307 | } |
| 4271 | 4308 | |
| 4272 | 4309 | |