trunk/src/mess/machine/sns_sgb.c
| r23904 | r23905 | |
| 24 | 24 | |
| 25 | 25 | sns_rom_sgb_device::sns_rom_sgb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 26 | 26 | : sns_rom_device(mconfig, SNS_LOROM_SUPERGB, "SNES Super Game Boy Cart", tag, owner, clock, "sns_rom_sgb", __FILE__), |
| 27 | | m_gb_cpu(*this, "supergb"), |
| 27 | m_gb_cpu(*this, "sgb_cpu"), |
| 28 | m_gb_snd(*this, "sgb_snd"), |
| 29 | m_gb_lcd(*this, "sgb_lcd"), |
| 28 | 30 | m_cartslot(*this, "gb_slot") |
| 29 | 31 | { |
| 30 | 32 | } |
| r23904 | r23905 | |
| 66 | 68 | m_cartslot->write_ram(space, offset, data); |
| 67 | 69 | } |
| 68 | 70 | |
| 71 | READ8_MEMBER(sns_rom_sgb_device::gb_echo_r) |
| 72 | { |
| 73 | return space.read_byte(0xc000 + offset); |
| 74 | } |
| 69 | 75 | |
| 76 | WRITE8_MEMBER(sns_rom_sgb_device::gb_echo_w) |
| 77 | { |
| 78 | return space.write_byte(0xc000 + offset, data); |
| 79 | } |
| 80 | |
| 81 | READ8_MEMBER(sns_rom_sgb_device::gb_io_r) |
| 82 | { |
| 83 | return 0; |
| 84 | } |
| 85 | |
| 86 | WRITE8_MEMBER(sns_rom_sgb_device::gb_io_w) |
| 87 | { |
| 88 | } |
| 89 | |
| 90 | READ8_MEMBER(sns_rom_sgb_device::gb_ie_r) |
| 91 | { |
| 92 | // return m_gb_cpu->get_ie(); |
| 93 | return 0; |
| 94 | } |
| 95 | |
| 96 | WRITE8_MEMBER(sns_rom_sgb_device::gb_ie_w) |
| 97 | { |
| 98 | // m_gb_cpu->set_ie(data & 0x1f); |
| 99 | } |
| 100 | |
| 101 | |
| 102 | |
| 70 | 103 | static ADDRESS_MAP_START(supergb_map, AS_PROGRAM, 8, sns_rom_sgb_device ) |
| 71 | 104 | ADDRESS_MAP_UNMAP_HIGH |
| 72 | 105 | AM_RANGE(0x0000, 0x7fff) AM_READWRITE(gb_cart_r, gb_bank_w) |
| 106 | AM_RANGE(0x8000, 0x9fff) AM_DEVREADWRITE("sgb_lcd", sgb_lcd_device, vram_r, vram_w) /* 8k VRAM */ |
| 73 | 107 | AM_RANGE(0xa000, 0xbfff) AM_READWRITE(gb_ram_r, gb_ram_w ) /* 8k switched RAM bank (cartridge) */ |
| 74 | | AM_RANGE(0xc000, 0xfdff) AM_RAM /* 8k low RAM, echo RAM */ |
| 108 | AM_RANGE(0xc000, 0xdfff) AM_RAM /* 8k low RAM */ |
| 109 | AM_RANGE(0xe000, 0xfdff) AM_READWRITE(gb_echo_r, gb_echo_w) /* echo RAM */ |
| 110 | AM_RANGE(0xff00, 0xff0f) AM_READWRITE(gb_io_r, gb_io_w) /* I/O */ |
| 111 | AM_RANGE(0xff10, 0xff26) AM_DEVREADWRITE("sgb_snd", gameboy_sound_device, sound_r, sound_w) /* sound registers */ |
| 112 | AM_RANGE(0xfe00, 0xfeff) AM_DEVREADWRITE("sgb_lcd", sgb_lcd_device, oam_r, oam_w) /* OAM RAM */ |
| 75 | 113 | AM_RANGE(0xff27, 0xff2f) AM_NOP /* unused */ |
| 114 | AM_RANGE(0xff30, 0xff3f) AM_DEVREADWRITE("sgb_snd", gameboy_sound_device, wave_r, wave_w) /* Wave RAM */ |
| 115 | AM_RANGE(0xff40, 0xff7f) AM_DEVREADWRITE("sgb_lcd", sgb_lcd_device, video_r, video_w) /* also disable bios?? */ /* Video controller & BIOS flip-flop */ |
| 76 | 116 | AM_RANGE(0xff80, 0xfffe) AM_RAM /* High RAM */ |
| 117 | AM_RANGE(0xffff, 0xffff) AM_READWRITE(gb_ie_r, gb_ie_w) /* Interrupt enable register */ |
| 77 | 118 | ADDRESS_MAP_END |
| 78 | 119 | |
| 79 | 120 | |
| r23904 | r23905 | |
| 84 | 125 | |
| 85 | 126 | |
| 86 | 127 | static SLOT_INTERFACE_START(supergb_cart) |
| 128 | SLOT_INTERFACE_INTERNAL("rom", GB_STD_ROM) |
| 129 | SLOT_INTERFACE_INTERNAL("rom_mbc1", GB_ROM_MBC1) |
| 87 | 130 | SLOT_INTERFACE_END |
| 88 | 131 | |
| 89 | 132 | static MACHINE_CONFIG_FRAGMENT( supergb ) |
| 90 | | MCFG_CPU_ADD("supergb", LR35902, 4295454) /* 4.295454 MHz */ |
| 133 | MCFG_CPU_ADD("sgb_cpu", LR35902, 4295454) /* 4.295454 MHz */ |
| 91 | 134 | MCFG_CPU_PROGRAM_MAP(supergb_map) |
| 92 | 135 | MCFG_LR35902_TIMER_CB(WRITE8(sns_rom_sgb_device, gb_timer_callback)) |
| 93 | 136 | MCFG_LR35902_HALT_BUG |
| 94 | 137 | |
| 138 | MCFG_GB_LCD_SGB_ADD("sgb_lcd") |
| 139 | |
| 140 | MCFG_SOUND_ADD("sgb_snd", GAMEBOY, 0) |
| 141 | |
| 95 | 142 | MCFG_GB_CARTRIDGE_ADD("gb_slot", supergb_cart, NULL) |
| 96 | 143 | MACHINE_CONFIG_END |
| 97 | 144 | |
trunk/src/mess/machine/sns_sgb.h
| r23904 | r23905 | |
| 4 | 4 | #include "machine/sns_slot.h" |
| 5 | 5 | #include "machine/sns_rom.h" |
| 6 | 6 | |
| 7 | //#include "cpu/lr35902/lr35902.h" |
| 7 | 8 | #include "machine/gb_slot.h" |
| 9 | #include "machine/gb_rom.h" |
| 10 | #include "machine/gb_mbc.h" |
| 11 | #include "video/gb_lcd.h" |
| 12 | #include "audio/gb.h" |
| 8 | 13 | |
| 9 | 14 | |
| 10 | 15 | // ======================> sns_rom_sgb_device |
| r23904 | r23905 | |
| 30 | 35 | virtual DECLARE_WRITE8_MEMBER(gb_bank_w); |
| 31 | 36 | virtual DECLARE_READ8_MEMBER(gb_ram_r); |
| 32 | 37 | virtual DECLARE_WRITE8_MEMBER(gb_ram_w); |
| 38 | virtual DECLARE_READ8_MEMBER(gb_echo_r); |
| 39 | virtual DECLARE_WRITE8_MEMBER(gb_echo_w); |
| 40 | virtual DECLARE_READ8_MEMBER(gb_io_r); |
| 41 | virtual DECLARE_WRITE8_MEMBER(gb_io_w); |
| 42 | virtual DECLARE_READ8_MEMBER(gb_ie_r); |
| 43 | virtual DECLARE_WRITE8_MEMBER(gb_ie_w); |
| 33 | 44 | virtual DECLARE_WRITE8_MEMBER(gb_timer_callback); |
| 34 | 45 | |
| 35 | 46 | required_device<cpu_device> m_gb_cpu; |
| 47 | required_device<gameboy_sound_device> m_gb_snd; |
| 48 | required_device<sgb_lcd_device> m_gb_lcd; |
| 36 | 49 | required_device<gb_cart_slot_device> m_cartslot; |
| 37 | 50 | |
| 38 | 51 | void lcd_render(UINT32 *source); |