trunk/src/mame/drivers/dblcrown.c
| r18556 | r18557 | |
| 44 | 44 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 45 | 45 | |
| 46 | 46 | UINT8 m_bank; |
| 47 | UINT8 m_irq_src; |
| 47 | 48 | |
| 48 | 49 | DECLARE_READ8_MEMBER(bank_r); |
| 49 | 50 | DECLARE_WRITE8_MEMBER(bank_w); |
| 51 | DECLARE_READ8_MEMBER(irq_source_r); |
| 52 | DECLARE_WRITE8_MEMBER(irq_source_w); |
| 50 | 53 | |
| 54 | TIMER_DEVICE_CALLBACK_MEMBER(dblcrown_irq_scanline); |
| 55 | |
| 51 | 56 | protected: |
| 52 | 57 | // driver_device overrides |
| 53 | 58 | virtual void machine_start(); |
| r18556 | r18557 | |
| 78 | 83 | membank("rom_bank")->set_entry(m_bank & 0x1f); |
| 79 | 84 | } |
| 80 | 85 | |
| 86 | READ8_MEMBER( dblcrown_state::irq_source_r) |
| 87 | { |
| 88 | return m_irq_src; |
| 89 | } |
| 81 | 90 | |
| 91 | WRITE8_MEMBER( dblcrown_state::irq_source_w) |
| 92 | { |
| 93 | m_irq_src = data; // this effectively acks the irq, by writing 0 |
| 94 | } |
| 95 | |
| 96 | |
| 82 | 97 | static ADDRESS_MAP_START( dblcrown_map, AS_PROGRAM, 8, dblcrown_state ) |
| 83 | 98 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 84 | 99 | AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("rom_bank") |
| r18556 | r18557 | |
| 89 | 104 | AM_RANGE(0xc800, 0xcfff) AM_RAM |
| 90 | 105 | AM_RANGE(0xd000, 0xdfff) AM_RAM // vram |
| 91 | 106 | AM_RANGE(0xf000, 0xf1ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_le_w) AM_SHARE("paletteram") // TODO: correct bit order |
| 92 | | AM_RANGE(0xfe00, 0xfeff) AM_RAM // ??? - both of these seems TC0091LVC-ish ... |
| 93 | | AM_RANGE(0xff00, 0xffff) AM_RAM // ??? / |
| 107 | AM_RANGE(0xfe00, 0xfeff) AM_RAM // ??? |
| 108 | // 0xff00 - 0xff01 RAM banks for 0xd000 |
| 109 | AM_RANGE(0xff04, 0xff04) AM_READWRITE(irq_source_r,irq_source_w) |
| 110 | |
| 111 | AM_RANGE(0xff00, 0xffff) AM_RAM // ???, intentional fall-through |
| 94 | 112 | ADDRESS_MAP_END |
| 95 | 113 | |
| 96 | 114 | static ADDRESS_MAP_START( dblcrown_io, AS_IO, 8, dblcrown_state ) |
| r18556 | r18557 | |
| 188 | 206 | { |
| 189 | 207 | } |
| 190 | 208 | |
| 209 | TIMER_DEVICE_CALLBACK_MEMBER(dblcrown_state::dblcrown_irq_scanline) |
| 210 | { |
| 211 | int scanline = param; |
| 212 | |
| 213 | if (scanline == 240) |
| 214 | { |
| 215 | m_maincpu->set_input_line(0, HOLD_LINE); |
| 216 | m_irq_src = 2; |
| 217 | } |
| 218 | |
| 219 | /* TODO: unknown source */ |
| 220 | if (scanline == 0) |
| 221 | { |
| 222 | m_maincpu->set_input_line(0, HOLD_LINE); |
| 223 | m_irq_src = 4; |
| 224 | } |
| 225 | } |
| 226 | |
| 227 | |
| 191 | 228 | static MACHINE_CONFIG_START( dblcrown, dblcrown_state ) |
| 192 | 229 | |
| 193 | 230 | /* basic machine hardware */ |
| 194 | 231 | MCFG_CPU_ADD("maincpu",Z80,MAIN_CLOCK/6) |
| 195 | 232 | MCFG_CPU_PROGRAM_MAP(dblcrown_map) |
| 196 | 233 | MCFG_CPU_IO_MAP(dblcrown_io) |
| 197 | | MCFG_CPU_VBLANK_INT("screen",irq0_line_hold) |
| 234 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dblcrown_state, dblcrown_irq_scanline, "screen", 0, 1) |
| 198 | 235 | |
| 199 | 236 | /* video hardware */ |
| 200 | 237 | MCFG_SCREEN_ADD("screen", RASTER) |