172
172
cybertnk_state(const machine_config &mconfig, device_type type, const char *tag)
173
: driver_device(mconfig, type, tag) { }
173
: driver_device(mconfig, type, tag) ,
174
m_spr_ram(*this, "spr_ram"),
175
m_tx_vram(*this, "tx_vram"),
176
m_bg_vram(*this, "bg_vram"),
177
m_fg_vram(*this, "fg_vram"),
178
m_io_ram(*this, "io_ram"),
179
m_roadram(*this, "roadram"){ }
175
181
tilemap_t *m_tx_tilemap;
182
required_shared_ptr<UINT16> m_spr_ram;
183
required_shared_ptr<UINT16> m_tx_vram;
184
required_shared_ptr<UINT16> m_bg_vram;
185
required_shared_ptr<UINT16> m_fg_vram;
186
required_shared_ptr<UINT16> m_io_ram;
187
required_shared_ptr<UINT16> m_roadram;
184
190
int m_start_offs;
192
DECLARE_WRITE16_MEMBER(tx_vram_w);
193
DECLARE_READ16_MEMBER(io_r);
194
DECLARE_WRITE16_MEMBER(io_w);
195
DECLARE_READ8_MEMBER(soundport_r);
189
#define LOG_UNKNOWN_WRITE logerror("unknown io write CPU '%s':%08x 0x%08x 0x%04x & 0x%04x\n", space->device().tag(), cpu_get_pc(&space->device()), offset*2, data, mem_mask);
199
#define LOG_UNKNOWN_WRITE logerror("unknown io write CPU '%s':%08x 0x%08x 0x%04x & 0x%04x\n", space.device().tag(), cpu_get_pc(&space.device()), offset*2, data, mem_mask);
191
201
static TILE_GET_INFO( get_tx_tile_info )
510
520
static SCREEN_UPDATE_IND16( cybertnk_right ) { return update_screen(screen, bitmap, cliprect, -256); }
513
static WRITE16_HANDLER( tx_vram_w )
523
WRITE16_MEMBER(cybertnk_state::tx_vram_w)
515
cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
516
COMBINE_DATA(&state->m_tx_vram[offset]);
517
state->m_tx_tilemap->mark_tile_dirty(offset);
525
COMBINE_DATA(&m_tx_vram[offset]);
526
m_tx_tilemap->mark_tile_dirty(offset);
520
static READ16_HANDLER( io_r )
529
READ16_MEMBER(cybertnk_state::io_r)
522
cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
526
return input_port_read(space->machine(), "DSW1");
534
return ioport("DSW1")->read();
528
536
// 0x00110007 is controller device select
529
537
// 0x001100D5 is controller data
530
538
// 0x00110004 low is controller data ready
532
switch( (state->m_io_ram[6/2]) & 0xff )
540
switch( (m_io_ram[6/2]) & 0xff )
535
state->m_io_ram[0xd4/2] = input_port_read(space->machine(), "TRAVERSE");
543
m_io_ram[0xd4/2] = ioport("TRAVERSE")->read();
539
state->m_io_ram[0xd4/2] = input_port_read(space->machine(), "ELEVATE");
547
m_io_ram[0xd4/2] = ioport("ELEVATE")->read();
543
state->m_io_ram[0xd4/2] = input_port_read(space->machine(), "ACCEL");
551
m_io_ram[0xd4/2] = ioport("ACCEL")->read();
564
return input_port_read(space->machine(), "IN0"); // high half
572
return ioport("IN0")->read(); // high half
567
return input_port_read(space->machine(), "IN0"); // low half
575
return ioport("IN0")->read(); // low half
570
return input_port_read(space->machine(), "DSW2");
578
return ioport("DSW2")->read();
573
return state->m_io_ram[offset]; // controller data
581
return m_io_ram[offset]; // controller data
577
585
//popmessage("unknown io read 0x%08x", offset);
578
return state->m_io_ram[offset];
586
return m_io_ram[offset];
583
static WRITE16_HANDLER( io_w )
591
WRITE16_MEMBER(cybertnk_state::io_w)
585
cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
586
COMBINE_DATA(&state->m_io_ram[offset]);
593
COMBINE_DATA(&m_io_ram[offset]);
592
599
if (ACCESSING_BITS_0_7)
593
cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
600
cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
595
602
LOG_UNKNOWN_WRITE
656
static READ8_HANDLER( soundport_r )
663
READ8_MEMBER(cybertnk_state::soundport_r)
658
cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
659
return state->m_io_ram[0] & 0xff;
665
return m_io_ram[0] & 0xff;
662
static ADDRESS_MAP_START( master_mem, AS_PROGRAM, 16 )
668
static ADDRESS_MAP_START( master_mem, AS_PROGRAM, 16, cybertnk_state )
663
669
AM_RANGE(0x000000, 0x03ffff) AM_ROM
664
670
AM_RANGE(0x080000, 0x087fff) AM_RAM /*Work RAM*/
665
AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_BASE_MEMBER(cybertnk_state, m_spr_ram) // non-tile based sprite ram
666
AM_RANGE(0x0c0000, 0x0c1fff) AM_RAM_WRITE(tx_vram_w) AM_BASE_MEMBER(cybertnk_state, m_tx_vram)
667
AM_RANGE(0x0c4000, 0x0c5fff) AM_RAM AM_BASE_MEMBER(cybertnk_state, m_bg_vram)
668
AM_RANGE(0x0c8000, 0x0c9fff) AM_RAM AM_BASE_MEMBER(cybertnk_state, m_fg_vram)
671
AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_SHARE("spr_ram") // non-tile based sprite ram
672
AM_RANGE(0x0c0000, 0x0c1fff) AM_RAM_WRITE(tx_vram_w) AM_SHARE("tx_vram")
673
AM_RANGE(0x0c4000, 0x0c5fff) AM_RAM AM_SHARE("bg_vram")
674
AM_RANGE(0x0c8000, 0x0c9fff) AM_RAM AM_SHARE("fg_vram")
669
675
AM_RANGE(0x0e0000, 0x0e0fff) AM_RAM AM_SHARE("sharedram")
670
AM_RANGE(0x100000, 0x107fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
671
AM_RANGE(0x110000, 0x1101ff) AM_READWRITE(io_r,io_w) AM_BASE_MEMBER(cybertnk_state, m_io_ram)
676
AM_RANGE(0x100000, 0x107fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
677
AM_RANGE(0x110000, 0x1101ff) AM_READWRITE(io_r,io_w) AM_SHARE("io_ram")
674
static ADDRESS_MAP_START( slave_mem, AS_PROGRAM, 16 )
680
static ADDRESS_MAP_START( slave_mem, AS_PROGRAM, 16, cybertnk_state )
675
681
AM_RANGE(0x000000, 0x01ffff) AM_ROM
676
682
AM_RANGE(0x080000, 0x083fff) AM_RAM /*Work RAM*/
677
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM AM_BASE_MEMBER(cybertnk_state, m_roadram)
683
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM AM_SHARE("roadram")
678
684
AM_RANGE(0x100000, 0x100fff) AM_RAM AM_SHARE("sharedram")
679
685
AM_RANGE(0x140000, 0x140003) AM_NOP /*Watchdog? Written during loops and interrupts*/
682
static ADDRESS_MAP_START( sound_mem, AS_PROGRAM, 8 )
688
static ADDRESS_MAP_START( sound_mem, AS_PROGRAM, 8, cybertnk_state )
683
689
AM_RANGE(0x0000, 0x7fff ) AM_ROM
684
690
AM_RANGE(0x8000, 0x9fff ) AM_RAM
685
691
AM_RANGE(0xa001, 0xa001 ) AM_READ(soundport_r)
686
692
AM_RANGE(0xa005, 0xa006 ) AM_NOP
687
AM_RANGE(0xa000, 0xa001 ) AM_DEVREADWRITE("ym1", y8950_r, y8950_w)
688
AM_RANGE(0xc000, 0xc001 ) AM_DEVREADWRITE("ym2", y8950_r, y8950_w)
693
AM_RANGE(0xa000, 0xa001 ) AM_DEVREADWRITE_LEGACY("ym1", y8950_r, y8950_w)
694
AM_RANGE(0xc000, 0xc001 ) AM_DEVREADWRITE_LEGACY("ym2", y8950_r, y8950_w)
691
697
static INPUT_PORTS_START( cybertnk )