66
static WRITE8_HANDLER( jack_sh_command_w )
66
WRITE8_MEMBER(jack_state::jack_sh_command_w)
68
jack_state *state = space->machine().driver_data<jack_state>();
69
soundlatch_w(space, 0, data);
70
device_set_input_line(state->m_audiocpu, 0, HOLD_LINE);
68
soundlatch_byte_w(space, 0, data);
69
device_set_input_line(m_audiocpu, 0, HOLD_LINE);
74
73
/* these handlers are guessed, because otherwise you can't enter test mode */
76
static WRITE8_HANDLER( joinem_misc_w )
75
WRITE8_MEMBER(jack_state::joinem_misc_w)
78
jack_state *state = space->machine().driver_data<jack_state>();
79
flip_screen_set(space->machine(), data & 0x80);
80
state->m_joinem_snd_bit = data & 1;
77
flip_screen_set(data & 0x80);
78
m_joinem_snd_bit = data & 1;
83
static CUSTOM_INPUT( sound_check_r )
81
CUSTOM_INPUT_MEMBER(jack_state::sound_check_r)
85
jack_state *state = field.machine().driver_data<jack_state>();
88
if ((input_port_read(field.machine(), "IN2") & 0x80) && !state->m_joinem_snd_bit)
85
if ((ioport("IN2")->read() & 0x80) && !m_joinem_snd_bit)
95
92
Super Triv questions read handler
98
static READ8_HANDLER( striv_question_r )
95
READ8_MEMBER(jack_state::striv_question_r)
100
jack_state *state = space->machine().driver_data<jack_state>();
102
98
// Set-up the remap table for every 16 bytes
103
99
if ((offset & 0xc00) == 0x800)
105
state->m_remap_address[offset & 0x0f] = (offset & 0xf0) >> 4;
101
m_remap_address[offset & 0x0f] = (offset & 0xf0) >> 4;
107
103
// Select which rom to read and the high 5 bits of address
108
104
else if ((offset & 0xc00) == 0xc00)
110
state->m_question_rom = offset & 7;
111
state->m_question_address = (offset & 0xf8) << 7;
106
m_question_rom = offset & 7;
107
m_question_address = (offset & 0xf8) << 7;
113
109
// Read the actual byte from question roms
116
UINT8 *ROM = space->machine().region("user1")->base();
112
UINT8 *ROM = memregion("user1")->base();
117
113
int real_address;
119
real_address = state->m_question_address | (offset & 0x3f0) | state->m_remap_address[offset & 0x0f];
115
real_address = m_question_address | (offset & 0x3f0) | m_remap_address[offset & 0x0f];
121
117
// Check if it wants to read from the upper 8 roms or not
122
118
if (offset & 0x400)
123
real_address |= 0x8000 * (state->m_question_rom + 8);
119
real_address |= 0x8000 * (m_question_rom + 8);
125
real_address |= 0x8000 * state->m_question_rom;
121
real_address |= 0x8000 * m_question_rom;
127
123
return ROM[real_address];
137
133
*************************************/
139
static ADDRESS_MAP_START( jack_map, AS_PROGRAM, 8 )
135
static ADDRESS_MAP_START( jack_map, AS_PROGRAM, 8, jack_state )
140
136
AM_RANGE(0x0000, 0x3fff) AM_ROM
141
137
AM_RANGE(0x4000, 0x5fff) AM_RAM
142
AM_RANGE(0xb000, 0xb07f) AM_RAM AM_BASE_SIZE_MEMBER(jack_state, m_spriteram, m_spriteram_size)
138
AM_RANGE(0xb000, 0xb07f) AM_RAM AM_SHARE("spriteram")
143
139
AM_RANGE(0xb400, 0xb400) AM_WRITE(jack_sh_command_w)
144
140
AM_RANGE(0xb500, 0xb500) AM_READ_PORT("DSW1")
145
141
AM_RANGE(0xb501, 0xb501) AM_READ_PORT("DSW2")
148
144
AM_RANGE(0xb504, 0xb504) AM_READ_PORT("IN2")
149
145
AM_RANGE(0xb505, 0xb505) AM_READ_PORT("IN3")
150
146
AM_RANGE(0xb506, 0xb507) AM_READWRITE(jack_flipscreen_r, jack_flipscreen_w)
151
AM_RANGE(0xb600, 0xb61f) AM_WRITE(jack_paletteram_w) AM_BASE_GENERIC(paletteram)
152
AM_RANGE(0xb800, 0xbbff) AM_RAM_WRITE(jack_videoram_w) AM_BASE_MEMBER(jack_state, m_videoram)
153
AM_RANGE(0xbc00, 0xbfff) AM_RAM_WRITE(jack_colorram_w) AM_BASE_MEMBER(jack_state, m_colorram)
147
AM_RANGE(0xb600, 0xb61f) AM_WRITE(jack_paletteram_w) AM_SHARE("paletteram")
148
AM_RANGE(0xb800, 0xbbff) AM_RAM_WRITE(jack_videoram_w) AM_SHARE("videoram")
149
AM_RANGE(0xbc00, 0xbfff) AM_RAM_WRITE(jack_colorram_w) AM_SHARE("colorram")
154
150
AM_RANGE(0xc000, 0xffff) AM_ROM
157
static ADDRESS_MAP_START( joinem_map, AS_PROGRAM, 8 )
153
static ADDRESS_MAP_START( joinem_map, AS_PROGRAM, 8, jack_state )
158
154
AM_RANGE(0x0000, 0x7fff) AM_ROM
159
155
AM_RANGE(0x8000, 0x8fff) AM_RAM
160
AM_RANGE(0xb000, 0xb0ff) AM_RAM AM_BASE_SIZE_MEMBER(jack_state, m_spriteram, m_spriteram_size)
156
AM_RANGE(0xb000, 0xb0ff) AM_RAM AM_SHARE("spriteram")
161
157
AM_RANGE(0xb400, 0xb400) AM_WRITE(jack_sh_command_w)
162
158
AM_RANGE(0xb500, 0xb500) AM_READ_PORT("DSW1")
163
159
AM_RANGE(0xb501, 0xb501) AM_READ_PORT("DSW2")
166
162
AM_RANGE(0xb504, 0xb504) AM_READ_PORT("IN2")
167
163
AM_RANGE(0xb506, 0xb507) AM_READWRITE(jack_flipscreen_r, jack_flipscreen_w)
168
164
AM_RANGE(0xb700, 0xb700) AM_WRITE(joinem_misc_w)
169
AM_RANGE(0xb800, 0xbbff) AM_RAM_WRITE(jack_videoram_w) AM_BASE_MEMBER(jack_state, m_videoram)
170
AM_RANGE(0xbc00, 0xbfff) AM_RAM_WRITE(jack_colorram_w) AM_BASE_MEMBER(jack_state, m_colorram)
165
AM_RANGE(0xb800, 0xbbff) AM_RAM_WRITE(jack_videoram_w) AM_SHARE("videoram")
166
AM_RANGE(0xbc00, 0xbfff) AM_RAM_WRITE(jack_colorram_w) AM_SHARE("colorram")
174
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
170
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, jack_state )
175
171
AM_RANGE(0x0000, 0x1fff) AM_ROM
176
172
AM_RANGE(0x4000, 0x43ff) AM_RAM
177
173
AM_RANGE(0x6000, 0x6fff) AM_WRITENOP /* R/C filter ??? */
180
static ADDRESS_MAP_START( sound_io_map, AS_IO, 8 )
176
static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, jack_state )
181
177
ADDRESS_MAP_GLOBAL_MASK(0xff)
182
AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("aysnd", ay8910_r, ay8910_data_w)
183
AM_RANGE(0x80, 0x80) AM_DEVWRITE("aysnd", ay8910_address_w)
178
AM_RANGE(0x40, 0x40) AM_DEVREADWRITE_LEGACY("aysnd", ay8910_r, ay8910_data_w)
179
AM_RANGE(0x80, 0x80) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
577
573
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW2:!3" )
578
574
PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW2:!4" )
579
575
PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x00, "SW2:!5" )
580
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(sound_check_r, NULL) // sound check
576
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, jack_state,sound_check_r, NULL) // sound check
581
577
PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x00, "SW2:!7" )
582
578
PORT_DIPNAME( 0x80, 0x00, "Infinite Lives" ) PORT_DIPLOCATION("SW2:!8")
583
579
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
686
682
PORT_DIPSETTING( 0x02, "Horizontal" )
687
683
PORT_DIPSETTING( 0x00, "Vertical" )
688
684
PORT_DIPNAME( 0x05, 0x05, "Gaming Option Number" ) PORT_DIPLOCATION("SW1:!1,!3")
689
PORT_DIPSETTING( 0x01, "2" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_EQUALS, 0x20)
690
PORT_DIPSETTING( 0x05, "3" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_EQUALS, 0x20)
691
PORT_DIPSETTING( 0x00, "4" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_EQUALS, 0x20)
692
PORT_DIPSETTING( 0x04, "5" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_EQUALS, 0x20)
693
PORT_DIPSETTING( 0x01, "4" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_NOTEQUALS, 0x20)
694
PORT_DIPSETTING( 0x05, "5" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_NOTEQUALS, 0x20)
695
PORT_DIPSETTING( 0x00, "6" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_NOTEQUALS, 0x20)
696
PORT_DIPSETTING( 0x04, "7" ) PORT_CONDITION("DSW1", 0x20, PORTCOND_NOTEQUALS, 0x20)
685
PORT_DIPSETTING( 0x01, "2" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
686
PORT_DIPSETTING( 0x05, "3" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
687
PORT_DIPSETTING( 0x00, "4" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
688
PORT_DIPSETTING( 0x04, "5" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
689
PORT_DIPSETTING( 0x01, "4" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
690
PORT_DIPSETTING( 0x05, "5" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
691
PORT_DIPSETTING( 0x00, "6" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
692
PORT_DIPSETTING( 0x04, "7" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
697
693
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!4")
698
694
PORT_DIPSETTING( 0x08, DEF_STR( Upright ) )
699
695
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
1417
1413
// Set-up the weirdest questions read ever done
1418
machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xc000, 0xcfff, FUNC(striv_question_r));
1414
machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xc000, 0xcfff, read8_delegate(FUNC(jack_state::striv_question_r),state));
1420
1416
// Nop out unused sprites writes
1421
1417
machine.device("maincpu")->memory().space(AS_PROGRAM)->nop_write(0xb000, 0xb0ff);