Previous 199869 Revisions Next

r33400 Friday 14th November, 2014 at 14:42:38 UTC by Vasantha Crabb
Untangle the three basic dooyong board types
[src/mame/drivers]dooyong.c
[src/mame/includes]dooyong.h
[src/mame/video]dooyong.c

trunk/src/mame/drivers/dooyong.c
r241911r241912
8484#include "sound/okim6295.h"
8585#include "includes/dooyong.h"
8686
87WRITE8_MEMBER(dooyong_state::lastday_bankswitch_w)
87WRITE8_MEMBER(dooyong_z80_state::bankswitch_w)
8888{
8989   membank("bank1")->set_entry(data & 0x07);
9090
9191   if (data & 0xf8) popmessage("bankswitch %02x",data);
9292}
9393
94MACHINE_START_MEMBER(dooyong_state,lastday)
94MACHINE_START_MEMBER(dooyong_z80_state, cpu_z80)
9595{
9696   membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000);
9797}
9898
99WRITE8_MEMBER(dooyong_state::flip_screen_w)
99WRITE8_MEMBER(dooyong_z80_state::flip_screen_w)
100100{
101101   flip_screen_set(data);
102102}
103103
104MACHINE_RESET_MEMBER(dooyong_state,sound_ym2203)
104MACHINE_RESET_MEMBER(dooyong_z80_ym2203_state, sound_ym2203)
105105{
106   m_interrupt_line_1=0;
107   m_interrupt_line_2=0;
106   m_interrupt_line_1 = 0;
107   m_interrupt_line_2 = 0;
108108}
109109
110110/***************************************************************************
r241911r241912
113113
114114***************************************************************************/
115115
116static ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_state )
116static ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
117117   AM_RANGE(0x0000, 0x7fff) AM_ROM
118118   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
119   AM_RANGE(0xc000, 0xc007) AM_WRITE(dooyong_bgscroll8_w)
120   AM_RANGE(0xc008, 0xc00f) AM_WRITE(dooyong_fgscroll8_w)
119   AM_RANGE(0xc000, 0xc007) AM_WRITE(bgscroll_w)
120   AM_RANGE(0xc008, 0xc00f) AM_WRITE(fgscroll_w)
121121   AM_RANGE(0xc010, 0xc010) AM_READ_PORT("SYSTEM")
122122   AM_RANGE(0xc010, 0xc010) AM_WRITE(lastday_ctrl_w)   /* coin counter, flip screen */
123123   AM_RANGE(0xc011, 0xc011) AM_READ_PORT("P1")
124   AM_RANGE(0xc011, 0xc011) AM_WRITE(lastday_bankswitch_w)
124   AM_RANGE(0xc011, 0xc011) AM_WRITE(bankswitch_w)
125125   AM_RANGE(0xc012, 0xc012) AM_READ_PORT("P2")
126126   AM_RANGE(0xc012, 0xc012) AM_WRITE(soundlatch_byte_w)
127127   AM_RANGE(0xc013, 0xc013) AM_READ_PORT("DSWA")
128128   AM_RANGE(0xc014, 0xc014) AM_READ_PORT("DSWB")
129129   AM_RANGE(0xc800, 0xcfff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
130   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram")
130   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
131131   AM_RANGE(0xe000, 0xefff) AM_RAM
132132   AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("spriteram")
133133ADDRESS_MAP_END
134134
135static ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_state )
135static ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
136136   AM_RANGE(0x0000, 0x7fff) AM_ROM
137137   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
138138   AM_RANGE(0xc000, 0xcfff) AM_RAM
139139   AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("spriteram")
140   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram")
141   AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSWA") AM_WRITE(lastday_bankswitch_w)
140   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
141   AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSWA") AM_WRITE(bankswitch_w)
142142   AM_RANGE(0xf001, 0xf001) AM_READ_PORT("DSWB")
143143   AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P1")
144144   AM_RANGE(0xf003, 0xf003) AM_READ_PORT("P2")
145145   AM_RANGE(0xf004, 0xf004) AM_READ_PORT("SYSTEM")
146146   AM_RANGE(0xf008, 0xf008) AM_WRITE(pollux_ctrl_w)    /* coin counter, flip screen */
147147   AM_RANGE(0xf010, 0xf010) AM_WRITE(soundlatch_byte_w)
148   AM_RANGE(0xf018, 0xf01f) AM_WRITE(dooyong_bgscroll8_w)
149   AM_RANGE(0xf020, 0xf027) AM_WRITE(dooyong_fgscroll8_w)
148   AM_RANGE(0xf018, 0xf01f) AM_WRITE(bgscroll_w)
149   AM_RANGE(0xf020, 0xf027) AM_WRITE(fgscroll_w)
150150   AM_RANGE(0xf800, 0xffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
151151ADDRESS_MAP_END
152152
153static ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_state )
153static ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
154154   AM_RANGE(0x0000, 0x7fff) AM_ROM
155155   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
156156   AM_RANGE(0xc000, 0xcfff) AM_RAM
157157   AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("spriteram")
158   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram")
158   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
159159   AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSWA")
160   AM_RANGE(0xf000, 0xf000) AM_WRITE(lastday_bankswitch_w)
160   AM_RANGE(0xf000, 0xf000) AM_WRITE(bankswitch_w)
161161   AM_RANGE(0xf001, 0xf001) AM_READ_PORT("DSWB")
162162   AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P2")
163163   AM_RANGE(0xf003, 0xf003) AM_READ_PORT("P1")
164164   AM_RANGE(0xf004, 0xf004) AM_READ_PORT("SYSTEM")
165165   AM_RANGE(0xf008, 0xf008) AM_WRITE(pollux_ctrl_w)    /* coin counter, flip screen */
166166   AM_RANGE(0xf010, 0xf010) AM_WRITE(soundlatch_byte_w)
167   AM_RANGE(0xf018, 0xf01f) AM_WRITE(dooyong_bgscroll8_w)
168   AM_RANGE(0xf020, 0xf027) AM_WRITE(dooyong_fgscroll8_w)
167   AM_RANGE(0xf018, 0xf01f) AM_WRITE(bgscroll_w)
168   AM_RANGE(0xf020, 0xf027) AM_WRITE(fgscroll_w)
169169   AM_RANGE(0xf800, 0xffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
170170ADDRESS_MAP_END
171171
172static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_state )
172static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_z80_state )
173173   AM_RANGE(0x0000, 0x7fff) AM_ROM
174174   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
175175   AM_RANGE(0xc000, 0xc000) AM_READ_PORT("DSWA")
r241911r241912
178178   AM_RANGE(0xc002, 0xc002) AM_READ_PORT("P1")
179179   AM_RANGE(0xc003, 0xc003) AM_READ_PORT("P2")
180180   AM_RANGE(0xc004, 0xc004) AM_READ_PORT("SYSTEM")
181   AM_RANGE(0xc008, 0xc008) AM_WRITE(lastday_bankswitch_w)
181   AM_RANGE(0xc008, 0xc008) AM_WRITE(bankswitch_w)
182182   AM_RANGE(0xc010, 0xc010) AM_WRITE(soundlatch_byte_w)
183   AM_RANGE(0xc018, 0xc01f) AM_WRITE(dooyong_fg2scroll8_w)
184   AM_RANGE(0xc040, 0xc047) AM_WRITE(dooyong_bgscroll8_w)
185   AM_RANGE(0xc048, 0xc04f) AM_WRITE(dooyong_fgscroll8_w)
183   AM_RANGE(0xc018, 0xc01f) AM_WRITE(fg2scroll_w)
184   AM_RANGE(0xc040, 0xc047) AM_WRITE(bgscroll_w)
185   AM_RANGE(0xc048, 0xc04f) AM_WRITE(fgscroll_w)
186186   AM_RANGE(0xc800, 0xcfff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
187   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram")
187   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
188188   AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE("spriteram")
189189   AM_RANGE(0xf000, 0xffff) AM_RAM
190190ADDRESS_MAP_END
191191
192static ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_state )
192static ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_z80_state )
193193   AM_RANGE(0x0000, 0x7fff) AM_ROM
194194   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
195195   AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("spriteram")
196196   AM_RANGE(0xd000, 0xdfff) AM_RAM
197197   AM_RANGE(0xe000, 0xe000) AM_READ_PORT("P1")
198   AM_RANGE(0xe000, 0xe000) AM_WRITE(lastday_bankswitch_w)
198   AM_RANGE(0xe000, 0xe000) AM_WRITE(bankswitch_w)
199199   AM_RANGE(0xe002, 0xe002) AM_READ_PORT("P2")
200200   AM_RANGE(0xe004, 0xe004) AM_READ_PORT("SYSTEM")
201201   AM_RANGE(0xe006, 0xe006) AM_READ_PORT("DSWA")
202202   AM_RANGE(0xe008, 0xe008) AM_READ_PORT("DSWB")
203203   AM_RANGE(0xe010, 0xe010) AM_WRITE(flytiger_ctrl_w)  /* coin counter, flip screen */
204204   AM_RANGE(0xe020, 0xe020) AM_WRITE(soundlatch_byte_w)
205   AM_RANGE(0xe030, 0xe037) AM_WRITE(dooyong_bgscroll8_w)
206   AM_RANGE(0xe040, 0xe047) AM_WRITE(dooyong_fgscroll8_w)
205   AM_RANGE(0xe030, 0xe037) AM_WRITE(bgscroll_w)
206   AM_RANGE(0xe040, 0xe047) AM_WRITE(fgscroll_w)
207207   AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(paletteram_flytiger_w) AM_SHARE("flytiger_palram")
208   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram")
208   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
209209ADDRESS_MAP_END
210210
211static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_state )
211static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_z80_state )
212212   AM_RANGE(0x0000, 0x7fff) AM_ROM
213213   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
214214   AM_RANGE(0xc000, 0xcfff) AM_RAM
215215   AM_RANGE(0xd000, 0xd3ff) AM_RAM /* what is this? looks like a palette? scratchpad RAM maybe? */
216   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(dooyong_txvideoram8_w) AM_SHARE("txvideoram")
216   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
217217   AM_RANGE(0xf000, 0xf7ff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
218218   AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSWA")
219219   AM_RANGE(0xf800, 0xf800) AM_WRITE(primella_ctrl_w)  /* bank switch, flip screen etc */
r241911r241912
222222   AM_RANGE(0xf820, 0xf820) AM_READ_PORT("P1")
223223   AM_RANGE(0xf830, 0xf830) AM_READ_PORT("P2")
224224   AM_RANGE(0xf840, 0xf840) AM_READ_PORT("SYSTEM")
225   AM_RANGE(0xfc00, 0xfc07) AM_WRITE(dooyong_bgscroll8_w)
226   AM_RANGE(0xfc08, 0xfc0f) AM_WRITE(dooyong_fgscroll8_w)
225   AM_RANGE(0xfc00, 0xfc07) AM_WRITE(bgscroll_w)
226   AM_RANGE(0xfc08, 0xfc0f) AM_WRITE(fgscroll_w)
227227ADDRESS_MAP_END
228228
229static ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_state )
229static ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_68k_state )
230230   ADDRESS_MAP_GLOBAL_MASK(0xfffff)    /* super-x needs this and is similar */
231231   AM_RANGE(0x000000, 0x03ffff) AM_ROM
232232   AM_RANGE(0x040000, 0x04cfff) AM_RAM
233   AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram16")
233   AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram")
234234   AM_RANGE(0x04e000, 0x04ffff) AM_RAM
235235   AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW")
236236   AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("P1_P2")
237237   AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("SYSTEM")
238   AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(dooyong_bgscroll16_w)
239   AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(dooyong_bg2scroll16_w)
238   AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(bgscroll_w)
239   AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(bg2scroll_w)
240240   AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
241241   AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w)
242   AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(rshark_ctrl_w)    /* flip screen + unknown stuff */
243   AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(dooyong_fgscroll16_w)
244   AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(dooyong_fg2scroll16_w)
242   AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w)    /* flip screen + unknown stuff */
243   AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(fgscroll_w)
244   AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(fg2scroll_w)
245245ADDRESS_MAP_END
246246
247static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_state )
247static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state )
248248   ADDRESS_MAP_GLOBAL_MASK(0xfffff)
249249   AM_RANGE(0x000000, 0x03ffff) AM_ROM
250250   AM_RANGE(0x0d0000, 0x0dcfff) AM_RAM
251   AM_RANGE(0x0dd000, 0x0ddfff) AM_RAM AM_SHARE("spriteram16")
251   AM_RANGE(0x0dd000, 0x0ddfff) AM_RAM AM_SHARE("spriteram")
252252   AM_RANGE(0x0de000, 0x0dffff) AM_RAM
253253   AM_RANGE(0x080002, 0x080003) AM_READ_PORT("DSW")
254254   AM_RANGE(0x080004, 0x080005) AM_READ_PORT("P1_P2")
255255   AM_RANGE(0x080006, 0x080007) AM_READ_PORT("SYSTEM")
256   AM_RANGE(0x084000, 0x08400f) AM_WRITE(dooyong_bgscroll16_w)
257   AM_RANGE(0x084010, 0x08401f) AM_WRITE(dooyong_bg2scroll16_w)
256   AM_RANGE(0x084000, 0x08400f) AM_WRITE(bgscroll_w)
257   AM_RANGE(0x084010, 0x08401f) AM_WRITE(bg2scroll_w)
258258   AM_RANGE(0x088000, 0x088fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
259259   AM_RANGE(0x080012, 0x080013) AM_WRITE(soundlatch_word_w)
260   AM_RANGE(0x080014, 0x080015) AM_WRITE(rshark_ctrl_w)    /* flip screen + unknown stuff */
261   AM_RANGE(0x08c000, 0x08c00f) AM_WRITE(dooyong_fgscroll16_w)
262   AM_RANGE(0x08c010, 0x08c01f) AM_WRITE(dooyong_fg2scroll16_w)
260   AM_RANGE(0x080014, 0x080015) AM_WRITE(ctrl_w)    /* flip screen + unknown stuff */
261   AM_RANGE(0x08c000, 0x08c00f) AM_WRITE(fgscroll_w)
262   AM_RANGE(0x08c010, 0x08c01f) AM_WRITE(fg2scroll_w)
263263ADDRESS_MAP_END
264264
265static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_state )
265static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state )
266266   ADDRESS_MAP_GLOBAL_MASK(0xfffff)
267267   AM_RANGE(0x000000, 0x03ffff) AM_ROM
268268   AM_RANGE(0x040000, 0x04cfff) AM_RAM
269   AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram16")
269   AM_RANGE(0x04d000, 0x04dfff) AM_RAM AM_SHARE("spriteram")
270270   AM_RANGE(0x04e000, 0x04ffff) AM_RAM
271271   AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW")
272272   AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("P1_P2")
273273   AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("SYSTEM")
274274   AM_RANGE(0x0c0012, 0x0c0013) AM_WRITE(soundlatch_word_w)
275   AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(rshark_ctrl_w)
275   AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(ctrl_w)
276276   AM_RANGE(0x0c0018, 0x0c001b) AM_WRITENOP // ?
277   AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(dooyong_bgscroll16_w)
278   AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(dooyong_bg2scroll16_w) // not used atm
277   AM_RANGE(0x0c4000, 0x0c400f) AM_WRITE(bgscroll_w)
278   AM_RANGE(0x0c4010, 0x0c401f) AM_WRITE(bg2scroll_w) // not used atm
279279   AM_RANGE(0x0c8000, 0x0c8fff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
280   AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(dooyong_fgscroll16_w) // not used atm
281   AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(dooyong_fg2scroll16_w) // not used atm
280   AM_RANGE(0x0cc000, 0x0cc00f) AM_WRITE(fgscroll_w) // not used atm
281   AM_RANGE(0x0cc010, 0x0cc01f) AM_WRITE(fg2scroll_w) // not used atm
282282   AM_RANGE(0x0dc000, 0x0dc01f) AM_RAM // registers of some kind?
283283ADDRESS_MAP_END
284284
285static ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_state )
285static ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
286286   AM_RANGE(0x0000, 0x7fff) AM_ROM
287287   AM_RANGE(0xc000, 0xc7ff) AM_RAM
288288   AM_RANGE(0xc800, 0xc800) AM_READ(soundlatch_byte_r)
r241911r241912
290290   AM_RANGE(0xf002, 0xf003) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
291291ADDRESS_MAP_END
292292
293static ADDRESS_MAP_START( pollux_sound_map, AS_PROGRAM, 8, dooyong_state )
293static ADDRESS_MAP_START( pollux_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
294294   AM_RANGE(0x0000, 0xefff) AM_ROM
295295   AM_RANGE(0xf000, 0xf7ff) AM_RAM
296296   AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r)
r241911r241912
772772   GFXDECODE_ENTRY( "gfx2", 0, popbingo_tilelayout, 256,  1 )
773773GFXDECODE_END
774774
775READ8_MEMBER(dooyong_state::unk_r)
775READ8_MEMBER(dooyong_z80_ym2203_state::unk_r)
776776{
777777   return 0;
778778}
779779
780WRITE_LINE_MEMBER(dooyong_state::irqhandler_2203_1)
780WRITE_LINE_MEMBER(dooyong_z80_ym2203_state::irqhandler_2203_1)
781781{
782782   m_interrupt_line_1=state;
783783   m_audiocpu->set_input_line(0, (m_interrupt_line_1 | m_interrupt_line_2) ? ASSERT_LINE : CLEAR_LINE);
784784}
785785
786WRITE_LINE_MEMBER(dooyong_state::irqhandler_2203_2)
786WRITE_LINE_MEMBER(dooyong_z80_ym2203_state::irqhandler_2203_2)
787787{
788788   m_interrupt_line_2=state;
789789   m_audiocpu->set_input_line(0, (m_interrupt_line_1 | m_interrupt_line_2) ? ASSERT_LINE : CLEAR_LINE);
r241911r241912
800800   MCFG_SPEAKER_STANDARD_MONO("mono")
801801
802802   MCFG_SOUND_ADD("ym1", YM2203, 1500000)
803   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state,irqhandler_2203_1))
804   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r))
803   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_1))
804   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r))
805805   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
806806
807807   MCFG_SOUND_ADD("ym2", YM2203, 1500000)
808   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state, irqhandler_2203_2))
809   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r))
808   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_2))
809   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r))
810810   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
811811MACHINE_CONFIG_END
812812
r241911r241912
834834   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
835835MACHINE_CONFIG_END
836836
837static MACHINE_CONFIG_START( lastday, dooyong_state )
837static MACHINE_CONFIG_START( lastday, dooyong_z80_ym2203_state )
838838
839839   /* basic machine hardware */
840840   MCFG_CPU_ADD("maincpu", Z80, 8000000)   /* ??? */
r241911r241912
844844   MCFG_CPU_ADD("audiocpu", Z80, 8000000)  /* ??? */
845845   MCFG_CPU_PROGRAM_MAP(lastday_sound_map)
846846
847   MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday)
848   MCFG_MACHINE_RESET_OVERRIDE(dooyong_state,sound_ym2203)
847   MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
848   MCFG_MACHINE_RESET_OVERRIDE(dooyong_z80_ym2203_state, sound_ym2203)
849849
850850
851851   /* video hardware */
r241911r241912
856856   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
857857   MCFG_SCREEN_SIZE(64*8, 32*8)
858858   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
859   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_lastday)
859   MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_lastday)
860860   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising)
861861   MCFG_SCREEN_PALETTE("palette")
862862
r241911r241912
864864   MCFG_PALETTE_ADD("palette", 1024)
865865   MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
866866
867   MCFG_VIDEO_START_OVERRIDE(dooyong_state,lastday)
867   MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, lastday)
868868
869869   /* sound hardware */
870870   MCFG_SPEAKER_STANDARD_MONO("mono")
871871
872872   MCFG_SOUND_ADD("ym1", YM2203, 4000000)
873   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state,irqhandler_2203_1))
874   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r))
873   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_1))
874   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r))
875875   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
876876
877877   MCFG_SOUND_ADD("ym2", YM2203, 4000000)
878   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_state, irqhandler_2203_2))
879   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_state, unk_r))
878   MCFG_YM2203_IRQ_HANDLER(WRITELINE(dooyong_z80_ym2203_state, irqhandler_2203_2))
879   MCFG_AY8910_PORT_A_READ_CB(READ8(dooyong_z80_ym2203_state, unk_r))
880880   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
881881
882882MACHINE_CONFIG_END
883883
884static MACHINE_CONFIG_START( gulfstrm, dooyong_state )
884static MACHINE_CONFIG_START( gulfstrm, dooyong_z80_ym2203_state )
885885
886886   /* basic machine hardware */
887887   MCFG_CPU_ADD("maincpu", Z80, 8000000)   /* ??? */
r241911r241912
891891   MCFG_CPU_ADD("audiocpu", Z80, 8000000)  /* ??? */
892892   MCFG_CPU_PROGRAM_MAP(lastday_sound_map)
893893
894   MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday)
895   MCFG_MACHINE_RESET_OVERRIDE(dooyong_state,sound_ym2203)
894   MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
895   MCFG_MACHINE_RESET_OVERRIDE(dooyong_z80_ym2203_state, sound_ym2203)
896896
897897   /* video hardware */
898898   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
r241911r241912
902902   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
903903   MCFG_SCREEN_SIZE(64*8, 32*8)
904904   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
905   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_gulfstrm)
905   MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_gulfstrm)
906906   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising)
907907   MCFG_SCREEN_PALETTE("palette")
908908
r241911r241912
910910   MCFG_PALETTE_ADD("palette", 1024)
911911   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
912912
913   MCFG_VIDEO_START_OVERRIDE(dooyong_state,gulfstrm)
913   MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, gulfstrm)
914914
915915   /* sound hardware */
916916   MCFG_FRAGMENT_ADD( sound_2203 )
917917MACHINE_CONFIG_END
918918
919static MACHINE_CONFIG_START( pollux, dooyong_state )
919static MACHINE_CONFIG_START( pollux, dooyong_z80_ym2203_state )
920920
921921   /* basic machine hardware */
922922   MCFG_CPU_ADD("maincpu", Z80, 8000000)   /* ??? */
r241911r241912
926926   MCFG_CPU_ADD("audiocpu", Z80, 8000000)  /* ??? */
927927   MCFG_CPU_PROGRAM_MAP(pollux_sound_map)
928928
929   MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday)
930   MCFG_MACHINE_RESET_OVERRIDE(dooyong_state,sound_ym2203)
929   MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
930   MCFG_MACHINE_RESET_OVERRIDE(dooyong_z80_ym2203_state, sound_ym2203)
931931
932932   /* video hardware */
933933   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
r241911r241912
937937   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
938938   MCFG_SCREEN_SIZE(64*8, 32*8)
939939   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
940   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_pollux)
940   MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_pollux)
941941   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising)
942942   MCFG_SCREEN_PALETTE("palette")
943943
r241911r241912
945945   MCFG_PALETTE_ADD("palette", 1024)
946946   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
947947
948   MCFG_VIDEO_START_OVERRIDE(dooyong_state,pollux)
948   MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, pollux)
949949
950950   /* sound hardware */
951951   MCFG_FRAGMENT_ADD( sound_2203 )
952952MACHINE_CONFIG_END
953953
954static MACHINE_CONFIG_START( bluehawk, dooyong_state )
954static MACHINE_CONFIG_START( bluehawk, dooyong_z80_state )
955955
956956   /* basic machine hardware */
957957   MCFG_CPU_ADD("maincpu", Z80, 8000000)   /* ??? */
r241911r241912
961961   MCFG_CPU_ADD("audiocpu", Z80, 4000000)  /* ??? */
962962   MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map)
963963
964   MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday)
964   MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
965965
966966   /* video hardware */
967967   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
r241911r241912
971971   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
972972   MCFG_SCREEN_SIZE(64*8, 32*8)
973973   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
974   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_bluehawk)
974   MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_bluehawk)
975975   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising)
976976   MCFG_SCREEN_PALETTE("palette")
977977
r241911r241912
979979   MCFG_PALETTE_ADD("palette", 1024)
980980   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
981981
982   MCFG_VIDEO_START_OVERRIDE(dooyong_state,bluehawk)
982   MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, bluehawk)
983983
984984   /* sound hardware */
985985   MCFG_FRAGMENT_ADD( sound_2151 )
986986MACHINE_CONFIG_END
987987
988static MACHINE_CONFIG_START( flytiger, dooyong_state )
988static MACHINE_CONFIG_START( flytiger, dooyong_z80_state )
989989
990990   /* basic machine hardware */
991991   MCFG_CPU_ADD("maincpu", Z80, 8000000)   /* ??? */
r241911r241912
995995   MCFG_CPU_ADD("audiocpu", Z80, 4000000)  /* ??? */
996996   MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map)
997997
998   MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday)
998   MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
999999
10001000   /* video hardware */
10011001   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
r241911r241912
10051005   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
10061006   MCFG_SCREEN_SIZE(64*8, 32*8)
10071007   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
1008   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_flytiger)
1008   MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_flytiger)
10091009   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising)
10101010   MCFG_SCREEN_PALETTE("palette")
10111011
r241911r241912
10131013   MCFG_PALETTE_ADD("palette", 1024)
10141014   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
10151015
1016   MCFG_VIDEO_START_OVERRIDE(dooyong_state,flytiger)
1016   MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, flytiger)
10171017
10181018   /* sound hardware */
10191019   MCFG_FRAGMENT_ADD( sound_2151 )
10201020MACHINE_CONFIG_END
10211021
1022static MACHINE_CONFIG_START( primella, dooyong_state )
1022static MACHINE_CONFIG_START( primella, dooyong_z80_state )
10231023
10241024   /* basic machine hardware */
10251025   MCFG_CPU_ADD("maincpu", Z80, 8000000)   /* ??? */
r241911r241912
10291029   MCFG_CPU_ADD("audiocpu", Z80, 4000000)  /* ??? */
10301030   MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map)
10311031
1032   MCFG_MACHINE_START_OVERRIDE(dooyong_state,lastday)
1032   MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
10331033
10341034   /* video hardware */
10351035   MCFG_SCREEN_ADD("screen", RASTER)
r241911r241912
10371037   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
10381038   MCFG_SCREEN_SIZE(64*8, 32*8)
10391039   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 0*8, 32*8-1 )
1040   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_primella)
1040   MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_primella)
10411041   MCFG_SCREEN_PALETTE("palette")
10421042
10431043   MCFG_GFXDECODE_ADD("gfxdecode", "palette", primella)
10441044   MCFG_PALETTE_ADD("palette", 1024)
10451045   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
10461046
1047   MCFG_VIDEO_START_OVERRIDE(dooyong_state,primella)
1047   MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, primella)
10481048
10491049   /* sound hardware */
10501050   MCFG_FRAGMENT_ADD( sound_2151 )
10511051MACHINE_CONFIG_END
10521052
1053TIMER_DEVICE_CALLBACK_MEMBER(dooyong_state::rshark_scanline)
1053
1054TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline)
10541055{
10551056   int scanline = param;
10561057
1057   if(scanline == 248) // vblank-out irq
1058   if (scanline == 248) // vblank-out irq
10581059      m_maincpu->set_input_line(5, HOLD_LINE);
10591060
1060   if(scanline == 120) // timer irq?
1061   if (scanline == 120) // timer irq?
10611062      m_maincpu->set_input_line(6, HOLD_LINE);
10621063}
10631064
10641065
1065static MACHINE_CONFIG_START( rshark, dooyong_state )
1066static MACHINE_CONFIG_START( rshark, dooyong_68k_state )
10661067
10671068   /* basic machine hardware */
10681069   MCFG_CPU_ADD("maincpu", M68000, 8000000)    /* measured on super-x */
10691070   MCFG_CPU_PROGRAM_MAP(rshark_map)
1070   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_state, rshark_scanline, "screen", 0, 1)
1071   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1)
10711072
10721073   MCFG_CPU_ADD("audiocpu", Z80, 4000000)  /* measured on super-x */
10731074   MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map)
10741075
10751076   /* video hardware */
1076   MCFG_BUFFERED_SPRITERAM16_ADD("spriteram16")
1077   MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
10771078
10781079   MCFG_SCREEN_ADD("screen", RASTER)
10791080   MCFG_SCREEN_REFRESH_RATE(60)
10801081   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
10811082   MCFG_SCREEN_SIZE(64*8, 32*8)
10821083   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
1083   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_rshark)
1084   MCFG_SCREEN_VBLANK_DEVICE("spriteram16", buffered_spriteram16_device, vblank_copy_rising)
1084   MCFG_SCREEN_UPDATE_DRIVER(dooyong_68k_state, screen_update_rshark)
1085   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising)
10851086   MCFG_SCREEN_PALETTE("palette")
10861087
10871088   MCFG_GFXDECODE_ADD("gfxdecode", "palette", rshark)
10881089   MCFG_PALETTE_ADD("palette", 2048)
10891090   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
10901091
1091   MCFG_VIDEO_START_OVERRIDE(dooyong_state,rshark)
1092   MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, rshark)
10921093
10931094   /* sound hardware */
10941095   MCFG_FRAGMENT_ADD( sound_2151_m68k )
10951096MACHINE_CONFIG_END
10961097
1097static MACHINE_CONFIG_START( superx, dooyong_state ) // dif mem map
1098static MACHINE_CONFIG_START( superx, dooyong_68k_state ) // dif mem map
10981099
10991100   /* basic machine hardware */
11001101   MCFG_CPU_ADD("maincpu", M68000, 8000000)    /* measured on super-x */
11011102   MCFG_CPU_PROGRAM_MAP(superx_map)
1102   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_state, rshark_scanline, "screen", 0, 1)
1103   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1)
11031104
11041105   MCFG_CPU_ADD("audiocpu", Z80, 4000000)  /* measured on super-x */
11051106   MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map)
11061107
11071108   /* video hardware */
1108   MCFG_BUFFERED_SPRITERAM16_ADD("spriteram16")
1109   MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
11091110
11101111   MCFG_SCREEN_ADD("screen", RASTER)
11111112   MCFG_SCREEN_REFRESH_RATE(60)
11121113   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
11131114   MCFG_SCREEN_SIZE(64*8, 32*8)
11141115   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
1115   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_rshark)
1116   MCFG_SCREEN_VBLANK_DEVICE("spriteram16", buffered_spriteram16_device, vblank_copy_rising)
1116   MCFG_SCREEN_UPDATE_DRIVER(dooyong_68k_state, screen_update_rshark)
1117   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising)
11171118   MCFG_SCREEN_PALETTE("palette")
11181119
11191120   MCFG_GFXDECODE_ADD("gfxdecode", "palette", rshark)
11201121   MCFG_PALETTE_ADD("palette", 2048)
11211122   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
11221123
1123   MCFG_VIDEO_START_OVERRIDE(dooyong_state,rshark)
1124   MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, rshark)
11241125
11251126   /* sound hardware */
11261127   MCFG_FRAGMENT_ADD( sound_2151_m68k )
11271128MACHINE_CONFIG_END
11281129
1129static MACHINE_CONFIG_START( popbingo, dooyong_state )
1130static MACHINE_CONFIG_START( popbingo, dooyong_68k_state )
11301131
11311132   /* basic machine hardware */
11321133   MCFG_CPU_ADD("maincpu", M68000, 10000000)
11331134   MCFG_CPU_PROGRAM_MAP(popbingo_map)
1134   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_state, rshark_scanline, "screen", 0, 1)
1135   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dooyong_68k_state, scanline, "screen", 0, 1)
11351136
11361137   MCFG_CPU_ADD("audiocpu", Z80, 4000000)  /* measured on super-x */
11371138   MCFG_CPU_PROGRAM_MAP(bluehawk_sound_map)
11381139
11391140   /* video hardware */
1140   MCFG_BUFFERED_SPRITERAM16_ADD("spriteram16")
1141   MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
11411142
11421143   MCFG_SCREEN_ADD("screen", RASTER)
11431144   MCFG_SCREEN_REFRESH_RATE(60)
11441145   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
11451146   MCFG_SCREEN_SIZE(64*8, 32*8)
11461147   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
1147   MCFG_SCREEN_UPDATE_DRIVER(dooyong_state, screen_update_popbingo)
1148   MCFG_SCREEN_VBLANK_DEVICE("spriteram16", buffered_spriteram16_device, vblank_copy_rising)
1148   MCFG_SCREEN_UPDATE_DRIVER(dooyong_68k_state, screen_update_popbingo)
1149   MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising)
11491150   MCFG_SCREEN_PALETTE("palette")
11501151
11511152   MCFG_GFXDECODE_ADD("gfxdecode", "palette", popbingo)
11521153   MCFG_PALETTE_ADD("palette", 2048)
11531154   MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
11541155
1155   MCFG_VIDEO_START_OVERRIDE(dooyong_state,popbingo)
1156   MCFG_VIDEO_START_OVERRIDE(dooyong_68k_state, popbingo)
11561157
11571158   /* sound hardware */
11581159   MCFG_FRAGMENT_ADD( sound_2151_m68k )
trunk/src/mame/includes/dooyong.h
r241911r241912
55public:
66   dooyong_state(const machine_config &mconfig, device_type type, const char *tag)
77      : driver_device(mconfig, type, tag),
8         m_spriteram(*this, "spriteram"),
9         m_spriteram16(*this, "spriteram16") ,
10      m_txvideoram(*this, "txvideoram"),
11      m_paletteram_flytiger(*this, "flytiger_palram"),
128      m_maincpu(*this, "maincpu"),
139      m_audiocpu(*this, "audiocpu"),
1410      m_gfxdecode(*this, "gfxdecode"),
15      m_palette(*this, "palette")  { }
11      m_palette(*this, "palette")
12   { }
1613
17   optional_device<buffered_spriteram8_device> m_spriteram;
18   optional_device<buffered_spriteram16_device> m_spriteram16;
19   optional_shared_ptr<UINT8> m_txvideoram;
20   optional_shared_ptr<UINT8> m_paletteram_flytiger;
21   UINT8 m_sprites_disabled;
22   UINT8 m_flytiger_palette_bank;
23   UINT8 m_flytiger_pri;
24   UINT8 m_tx_pri;
25   UINT16 m_rshark_pri;
14   inline void lastday_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom, UINT8 *scroll, int graphics);
15   inline void scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map);
16
2617   tilemap_t *m_bg_tilemap;
2718   tilemap_t *m_bg2_tilemap;
2819   tilemap_t *m_fg_tilemap;
r241911r241912
3627   UINT8 *m_bg2_tilerom;
3728   UINT8 *m_fg_tilerom;
3829   UINT8 *m_fg2_tilerom;
39   UINT8 *m_bg_tilerom2;
40   UINT8 *m_bg2_tilerom2;
41   UINT8 *m_fg_tilerom2;
42   UINT8 *m_fg2_tilerom2;
4330   int m_bg_gfx;
4431   int m_bg2_gfx;
4532   int m_fg_gfx;
4633   int m_fg2_gfx;
47   int m_tx_tilemap_mode;
4834
49   int m_interrupt_line_1;
50   int m_interrupt_line_2;
35   required_device<cpu_device> m_maincpu;
36   required_device<cpu_device> m_audiocpu;
37   required_device<gfxdecode_device> m_gfxdecode;
38   required_device<palette_device> m_palette;
39};
5140
52   DECLARE_WRITE8_MEMBER(lastday_bankswitch_w);
41class dooyong_z80_state : public dooyong_state
42{
43public:
44   dooyong_z80_state(const machine_config &mconfig, device_type type, const char *tag)
45      : dooyong_state(mconfig, type, tag),
46      m_txvideoram(*this, "txvideoram"),
47      m_paletteram_flytiger(*this, "flytiger_palram"),
48      m_spriteram(*this, "spriteram")
49   { }
50
51   DECLARE_WRITE8_MEMBER(bgscroll_w);
52   DECLARE_WRITE8_MEMBER(bg2scroll_w);
53   DECLARE_WRITE8_MEMBER(fgscroll_w);
54   DECLARE_WRITE8_MEMBER(fg2scroll_w);
5355   DECLARE_WRITE8_MEMBER(flip_screen_w);
54   DECLARE_WRITE8_MEMBER(dooyong_bgscroll8_w);
55   DECLARE_WRITE8_MEMBER(dooyong_bg2scroll8_w);
56   DECLARE_WRITE8_MEMBER(dooyong_fgscroll8_w);
57   DECLARE_WRITE8_MEMBER(dooyong_fg2scroll8_w);
58   DECLARE_WRITE16_MEMBER(dooyong_bgscroll16_w);
59   DECLARE_WRITE16_MEMBER(dooyong_bg2scroll16_w);
60   DECLARE_WRITE16_MEMBER(dooyong_fgscroll16_w);
61   DECLARE_WRITE16_MEMBER(dooyong_fg2scroll16_w);
62   DECLARE_WRITE8_MEMBER(dooyong_txvideoram8_w);
63   DECLARE_WRITE8_MEMBER(lastday_ctrl_w);
64   DECLARE_WRITE8_MEMBER(pollux_ctrl_w);
56   DECLARE_WRITE8_MEMBER(bankswitch_w);
57   DECLARE_WRITE8_MEMBER(txvideoram_w);
6558   DECLARE_WRITE8_MEMBER(primella_ctrl_w);
6659   DECLARE_WRITE8_MEMBER(paletteram_flytiger_w);
6760   DECLARE_WRITE8_MEMBER(flytiger_ctrl_w);
68   DECLARE_WRITE16_MEMBER(rshark_ctrl_w);
69   DECLARE_READ8_MEMBER(unk_r);
7061   TILE_GET_INFO_MEMBER(get_bg_tile_info);
7162   TILE_GET_INFO_MEMBER(get_bg2_tile_info);
7263   TILE_GET_INFO_MEMBER(get_fg_tile_info);
7364   TILE_GET_INFO_MEMBER(get_fg2_tile_info);
74   TILE_GET_INFO_MEMBER(flytiger_get_fg_tile_info);
7565   TILE_GET_INFO_MEMBER(get_tx_tile_info);
76   inline void lastday_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom, UINT8 *scroll, int graphics);
77   inline void rshark_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics);
78   DECLARE_MACHINE_START(lastday);
79   DECLARE_MACHINE_RESET(sound_ym2203);
80   DECLARE_VIDEO_START(lastday);
81   DECLARE_VIDEO_START(gulfstrm);
82   DECLARE_VIDEO_START(pollux);
66   void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions);
67   UINT32 screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
68   UINT32 screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
69   UINT32 screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
70   DECLARE_MACHINE_START(cpu_z80);
8371   DECLARE_VIDEO_START(bluehawk);
8472   DECLARE_VIDEO_START(flytiger);
8573   DECLARE_VIDEO_START(primella);
86   DECLARE_VIDEO_START(rshark);
87   DECLARE_VIDEO_START(popbingo);
74
75   required_shared_ptr<UINT8> m_txvideoram;
76   optional_shared_ptr<UINT8> m_paletteram_flytiger;
77   UINT8 m_sprites_disabled;
78   UINT8 m_flytiger_palette_bank;
79   UINT8 m_flytiger_pri;
80   UINT8 m_tx_pri;
81   int m_tx_tilemap_mode;
82
83   optional_device<buffered_spriteram8_device> m_spriteram;
84};
85
86class dooyong_z80_ym2203_state : public dooyong_z80_state
87{
88public:
89   dooyong_z80_ym2203_state(const machine_config &mconfig, device_type type, const char *tag)
90      : dooyong_z80_state(mconfig, type, tag)
91   { }
92
93   DECLARE_WRITE8_MEMBER(lastday_ctrl_w);
94   DECLARE_WRITE8_MEMBER(pollux_ctrl_w);
95   DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_1);
96   DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_2);
97   DECLARE_READ8_MEMBER(unk_r);
98   DECLARE_MACHINE_RESET(sound_ym2203);
8899   UINT32 screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
89100   UINT32 screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
90101   UINT32 screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
91   UINT32 screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
92   UINT32 screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
93   UINT32 screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
102   DECLARE_VIDEO_START(lastday);
103   DECLARE_VIDEO_START(gulfstrm);
104   DECLARE_VIDEO_START(pollux);
105
106   int m_interrupt_line_1;
107   int m_interrupt_line_2;
108};
109
110class dooyong_68k_state : public dooyong_state
111{
112public:
113   dooyong_68k_state(const machine_config &mconfig, device_type type, const char *tag)
114      : dooyong_state(mconfig, type, tag),
115      m_spriteram(*this, "spriteram")
116   { }
117
118   DECLARE_WRITE16_MEMBER(bgscroll_w);
119   DECLARE_WRITE16_MEMBER(bg2scroll_w);
120   DECLARE_WRITE16_MEMBER(fgscroll_w);
121   DECLARE_WRITE16_MEMBER(fg2scroll_w);
122   DECLARE_WRITE16_MEMBER(ctrl_w);
123   TIMER_DEVICE_CALLBACK_MEMBER(scanline);
124   TILE_GET_INFO_MEMBER(get_bg_tile_info);
125   TILE_GET_INFO_MEMBER(get_bg2_tile_info);
126   TILE_GET_INFO_MEMBER(get_fg_tile_info);
127   TILE_GET_INFO_MEMBER(get_fg2_tile_info);
128   inline void rshark_get_tile_info(tile_data &tileinfo, int tile_index, const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics);
129   void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
94130   UINT32 screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
95131   UINT32 screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
96   TIMER_DEVICE_CALLBACK_MEMBER(rshark_scanline);
97   inline void dooyong_scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map);
98   void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions);
99   void rshark_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
100   DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_1);
101   DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_2);
102   required_device<cpu_device> m_maincpu;
103   required_device<cpu_device> m_audiocpu;
104   required_device<gfxdecode_device> m_gfxdecode;
105   required_device<palette_device> m_palette;
132   DECLARE_VIDEO_START(rshark);
133   DECLARE_VIDEO_START(popbingo);
134
135   UINT8 *m_bg_tilerom2;
136   UINT8 *m_bg2_tilerom2;
137   UINT8 *m_fg_tilerom2;
138   UINT8 *m_fg2_tilerom2;
139   UINT16 m_bg2_priority;
140
141   required_device<buffered_spriteram16_device> m_spriteram;
106142};
trunk/src/mame/video/dooyong.c
r241911r241912
22#include "includes/dooyong.h"
33
44
5inline void dooyong_state::dooyong_scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map)
5inline void dooyong_state::scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map)
66{
77   UINT8 old = scroll[offset];
88   if (old != data)
r241911r241912
4646/* These handle writes to the tilemap scroll registers in 8-bit machines.
4747   There is one per tilemap, wrapping the above function that does the work. */
4848
49WRITE8_MEMBER(dooyong_state::dooyong_bgscroll8_w)
49WRITE8_MEMBER(dooyong_z80_state::bgscroll_w)
5050{
51   dooyong_scroll8_w(offset, data, m_bgscroll8, m_bg_tilemap);
51   scroll8_w(offset, data, m_bgscroll8, m_bg_tilemap);
5252}
5353
54WRITE8_MEMBER(dooyong_state::dooyong_bg2scroll8_w)
54WRITE8_MEMBER(dooyong_z80_state::bg2scroll_w)
5555{
56   dooyong_scroll8_w(offset, data, m_bg2scroll8, m_bg2_tilemap);
56   scroll8_w(offset, data, m_bg2scroll8, m_bg2_tilemap);
5757}
5858
59WRITE8_MEMBER(dooyong_state::dooyong_fgscroll8_w)
59WRITE8_MEMBER(dooyong_z80_state::fgscroll_w)
6060{
61   dooyong_scroll8_w(offset, data, m_fgscroll8, m_fg_tilemap);
61   scroll8_w(offset, data, m_fgscroll8, m_fg_tilemap);
6262}
6363
64WRITE8_MEMBER(dooyong_state::dooyong_fg2scroll8_w)
64WRITE8_MEMBER(dooyong_z80_state::fg2scroll_w)
6565{
66   dooyong_scroll8_w(offset, data, m_fg2scroll8, m_fg2_tilemap);
66   scroll8_w(offset, data, m_fg2scroll8, m_fg2_tilemap);
6767}
6868
6969
70/* These handle writes to the tilemap scroll registers in 16-bit machines.
71   This is just an 8-bit peripheral in a 16-bit machine. */
72
73WRITE16_MEMBER(dooyong_state::dooyong_bgscroll16_w)
70WRITE8_MEMBER(dooyong_z80_state::txvideoram_w)
7471{
75   if (ACCESSING_BITS_0_7) dooyong_bgscroll8_w(space, offset, data & 0x00ff);
76}
77
78WRITE16_MEMBER(dooyong_state::dooyong_bg2scroll16_w)
79{
80   if (ACCESSING_BITS_0_7) dooyong_bg2scroll8_w(space, offset, data & 0x00ff);
81}
82
83WRITE16_MEMBER(dooyong_state::dooyong_fgscroll16_w)
84{
85   if (ACCESSING_BITS_0_7) dooyong_fgscroll8_w(space, offset, data & 0x00ff);
86}
87
88WRITE16_MEMBER(dooyong_state::dooyong_fg2scroll16_w)
89{
90   if (ACCESSING_BITS_0_7) dooyong_fg2scroll8_w(space, offset, data & 0x00ff);
91}
92
93
94WRITE8_MEMBER(dooyong_state::dooyong_txvideoram8_w)
95{
9672   if (m_txvideoram[offset] != data)
9773   {
9874      m_txvideoram[offset] = data;
r241911r241912
10682
10783/* Control registers seem to be different on every game */
10884
109WRITE8_MEMBER(dooyong_state::lastday_ctrl_w)
85WRITE8_MEMBER(dooyong_z80_ym2203_state::lastday_ctrl_w)
11086{
11187   /* bits 0 and 1 are coin counters */
11288   coin_counter_w(machine(), 0, data & 0x01);
r241911r241912
12197   flip_screen_set(data & 0x40);
12298}
12399
124WRITE8_MEMBER(dooyong_state::pollux_ctrl_w)
100WRITE8_MEMBER(dooyong_z80_ym2203_state::pollux_ctrl_w)
125101{
126102   /* bit 0 is flip screen */
127103   flip_screen_set(data & 0x01);
r241911r241912
136112   /* bit 4 is used but unknown */
137113}
138114
139WRITE8_MEMBER(dooyong_state::primella_ctrl_w)
115WRITE8_MEMBER(dooyong_z80_state::primella_ctrl_w)
140116{
141117   /* bits 0-2 select ROM bank */
142118   membank("bank1")->set_entry(data & 0x07);
r241911r241912
152128//  logerror("%04x: bankswitch = %02x\n",space.device().safe_pc(),data&0xe0);
153129}
154130
155WRITE8_MEMBER(dooyong_state::paletteram_flytiger_w)
131WRITE8_MEMBER(dooyong_z80_state::paletteram_flytiger_w)
156132{
157133   if (m_flytiger_palette_bank)
158134   {
r241911r241912
163139   }
164140}
165141
166WRITE8_MEMBER(dooyong_state::flytiger_ctrl_w)
142WRITE8_MEMBER(dooyong_z80_state::flytiger_ctrl_w)
167143{
168144   /* bit 0 is flip screen */
169145   flip_screen_set(data & 0x01);
r241911r241912
177153   m_flytiger_pri = data & 0x10;
178154}
179155
180WRITE16_MEMBER(dooyong_state::rshark_ctrl_w)
181156
182{
183   if (ACCESSING_BITS_0_7)
184   {
185      /* bit 0 flips screen */
186      flip_screen_set(data & 0x0001);
187
188      /* bit 4 changes tilemaps priority */
189      m_rshark_pri = data & 0x0010;
190
191      /* bit 5 used but unknown */
192   }
193}
194
195
196157/* These games all have ROM-based tilemaps for the backgrounds, title
197158   screens and sometimes "bosses" and special attacks. There are three
198159   schemes for tilemap encoding.  The scheme is chosen based on the
r241911r241912
206167inline void dooyong_state::lastday_get_tile_info(tile_data &tileinfo, int tile_index,
207168      const UINT8 *tilerom, UINT8 *scroll, int graphics)
208169{
209   int offs = (tile_index + ((int)scroll[1] << 6)) * 2;
210   int attr = tilerom[offs];
170   int const offs = (tile_index + ((int)scroll[1] << 6)) * 2;
171   int const attr = tilerom[offs];
211172   int code, color, flags;
212173   if (scroll[6] & 0x20)
213174   {   /* lastday/gulfstrm/pollux/flytiger */
r241911r241912
221182         Y = y flip */
222183      code = tilerom[offs + 1] | ((attr & 0x01) << 8) | ((attr & 0x80) << 2);
223184      color = (attr & 0x78) >> 3;
224      flags = ((attr & 0x02) ? TILE_FLIPX : 0) | ((attr & 0x04) ? TILE_FLIPY : 0);
185      flags = TILE_FLIPYX((attr & 0x06) >> 1);
225186   }
226187   else
227188   {
r241911r241912
245206
246207      code = tilerom[offs + 1] | ((attr & codemask) << 8);
247208      color = (attr & palmask) >> 2;
248      flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0);
209      flags = TILE_FLIPYX((attr & 0xC0) >> 6);
249210   }
250211
251   SET_TILE_INFO_MEMBER(graphics, code, color, flags);
212   tileinfo.set(graphics, code, color, flags);
252213}
253214
254inline void dooyong_state::rshark_get_tile_info(tile_data &tileinfo, int tile_index,
255      const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics)
215TILE_GET_INFO_MEMBER(dooyong_z80_state::get_bg_tile_info)
256216{
257      /* Tiles take two bytes in tile ROM 1:
258                       MSB   LSB
259         [offs + 0x00] YX?c cccc    (Y flip, X flip, bits 12-8 of gfx code)
260         [offs + 0x01] cccc cccc    (bits 7-0 of gfx code)
261         ? = unused/unknown
262         c = gfx code
263         X = x flip
264         Y = y flip */
265   int offs = tile_index + ((int)scroll[1] << 9);
266   int attr = tilerom1[offs * 2];
267   int code = tilerom1[(offs * 2) + 1] | ((attr & 0x1f) << 8);
268   int color = tilerom2[offs] & 0x0f;
269   int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0);
270
271   SET_TILE_INFO_MEMBER(graphics, code, color, flags);
217   lastday_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx);
272218}
273219
274TILE_GET_INFO_MEMBER(dooyong_state::get_bg_tile_info)
220TILE_GET_INFO_MEMBER(dooyong_z80_state::get_bg2_tile_info)
275221{
276   if (m_bg_tilerom2 != NULL)
277      rshark_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bg_tilerom2, m_bgscroll8, m_bg_gfx);
278   else
279      lastday_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx);
222   lastday_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx);
280223}
281224
282TILE_GET_INFO_MEMBER(dooyong_state::get_bg2_tile_info)
225TILE_GET_INFO_MEMBER(dooyong_z80_state::get_fg_tile_info)
283226{
284   if (m_bg2_tilerom2 != NULL)
285      rshark_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2_tilerom2, m_bg2scroll8, m_bg2_gfx);
286   else
287      lastday_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx);
227   lastday_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx);
288228}
289229
290TILE_GET_INFO_MEMBER(dooyong_state::get_fg_tile_info)
230TILE_GET_INFO_MEMBER(dooyong_z80_state::get_fg2_tile_info)
291231{
292   if (m_fg_tilerom2 != NULL)
293      rshark_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fg_tilerom2, m_fgscroll8, m_fg_gfx);
294   else
295      lastday_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx);
232   lastday_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx);
296233}
297234
298TILE_GET_INFO_MEMBER(dooyong_state::get_fg2_tile_info)
235TILE_GET_INFO_MEMBER(dooyong_z80_state::get_tx_tile_info)
299236{
300   if (m_fg2_tilerom2 != NULL)
301      rshark_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2_tilerom2, m_fg2scroll8, m_fg2_gfx);
302   else
303      lastday_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx);
304}
305
306/* flytiger uses some palette banking technique or something maybe a trash protection */
307
308TILE_GET_INFO_MEMBER(dooyong_state::flytiger_get_fg_tile_info)
309{
310   const UINT8 *tilerom = m_fg_tilerom;
311
312   int offs = (tile_index + (m_fgscroll8[1] << 6)) * 2;
313   int attr = tilerom[offs];
314   int code = tilerom[offs + 1] | ((attr & 0x01) << 8) | ((attr & 0x80) << 2);
315   int color = (attr & 0x78) >> 3;
316   int flags = ((attr & 0x02) ? TILE_FLIPX : 0) | ((attr & 0x04) ? TILE_FLIPY : 0);
317
318   SET_TILE_INFO_MEMBER(m_fg_gfx, code, color, flags);
319}
320
321TILE_GET_INFO_MEMBER(dooyong_state::get_tx_tile_info)
322{
323237   /* Each tile takes two bytes of memory:
324238                    MSB   LSB
325239      [offs + 0x00] cccc cccc    (bits 7-0 of gfx code)
326240      [offs + 0x01] CCCC cccc    (bits 3-0 of color code, bits 11-8 of gfx code)
327241      c = gfx code
328242      C = color code */
329   int offs, attr, code, color;
243   int offs, attr;
330244   if (m_tx_tilemap_mode == 0)
331245   {   /* lastday/gulfstrm/pollux/flytiger */
332246      offs = tile_index;
r241911r241912
337251      offs = tile_index * 2;
338252      attr = m_txvideoram[offs + 1];
339253   }
340   code = m_txvideoram[offs] | ((attr & 0x0f) << 8);
341   color = (attr & 0xf0) >> 4;
254   int const code = m_txvideoram[offs] | ((attr & 0x0f) << 8);
255   int const color = (attr & 0xf0) >> 4;
342256
343   SET_TILE_INFO_MEMBER(0, code, color, 0);
257   tileinfo.set(0, code, color, 0);
344258}
345259
346260
347void dooyong_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions)
261void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pollux_extensions)
348262{
349263   /* Sprites take 32 bytes each in memory:
350264                    MSB   LSB
r241911r241912
434348   }
435349}
436350
437void dooyong_state::rshark_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
438{
439   UINT16 *buffered_spriteram16 = m_spriteram16->buffer();
440351
441   /* Sprites take 8 16-bit words each in memory:
442                 MSB             LSB
443      [offs + 0] ???? ???? ???? ???E
444      [offs + 1] ???? ???? hhhh wwww
445      [offs + 2] ???? ???? ???? ????
446      [offs + 3] cccc cccc cccc cccc
447      [offs + 4] ???? ???x xxxx xxxx
448      [offs + 5] ???? ???? ???? ????
449      [offs + 6] ???? ???y yyyy yyyy
450      [offs + 7] ???? ???? ???? CCCC
451      ? = unused/unknown
452      E = enable
453      c = gfx code
454      x = x offset
455      y = y offset (signed)
456      C = color code
457      w = width
458      h = height */
459
460   int offs;
461
462   for (offs = (m_spriteram16->bytes() / 2) - 8; offs >= 0; offs -= 8)
463   {
464      if (buffered_spriteram16[offs] & 0x0001)    /* enable */
465      {
466         int sx, sy, code, color, pri;
467         int flipx = 0, flipy = 0, width, height, x, y;
468
469         sx = buffered_spriteram16[offs+4] & 0x01ff;
470         sy = (INT16)buffered_spriteram16[offs+6] & 0x01ff;
471         if (sy & 0x0100) sy |= ~(int)0x01ff;    // Correctly sign-extend 9-bit number
472         code = buffered_spriteram16[offs+3];
473         color = buffered_spriteram16[offs+7] & 0x000f;
474         //TODO: This priority mechanism works for known games, but seems a bit strange.
475         //Are we missing something?  (The obvious spare palette bit isn't it.)
476         pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
477         width = buffered_spriteram16[offs+1] & 0x000f;
478         height = (buffered_spriteram16[offs+1] & 0x00f0) >> 4;
479
480         if (flip_screen())
481         {
482            sx = 498 - (16 * width) - sx;
483            sy = 240 - (16 * height) - sy;
484            flipx = !flipx;
485            flipy = !flipy;
486         }
487
488         for (y = 0; y <= height; y++)
489         {
490            int _y = sy + (16 * (flipy ? (height - y) : y));
491            for (x = 0; x <= width; x++)
492            {
493               int _x = sx + (16 * (flipx ? (width - x) : x));
494               m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect,
495                     code,
496                     color,
497                     flipx, flipy,
498                     _x, _y,
499                     screen.priority(),
500                     pri, 15);
501               code++;
502            }
503         }
504      }
505   }
506}
507
508
509UINT32 dooyong_state::screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
352UINT32 dooyong_z80_ym2203_state::screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
510353{
511354   bitmap.fill(m_palette->black_pen(), cliprect);
512355   screen.priority().fill(0, cliprect);
r241911r241912
520363   return 0;
521364}
522365
523UINT32 dooyong_state::screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
366UINT32 dooyong_z80_ym2203_state::screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
524367{
525368   bitmap.fill(m_palette->black_pen(), cliprect);
526369   screen.priority().fill(0, cliprect);
r241911r241912
533376   return 0;
534377}
535378
536UINT32 dooyong_state::screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
379UINT32 dooyong_z80_ym2203_state::screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
537380{
538381   bitmap.fill(m_palette->black_pen(), cliprect);
539382   screen.priority().fill(0, cliprect);
r241911r241912
546389   return 0;
547390}
548391
549UINT32 dooyong_state::screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
392UINT32 dooyong_z80_state::screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
550393{
551394   bitmap.fill(m_palette->black_pen(), cliprect);
552395   screen.priority().fill(0, cliprect);
r241911r241912
568411}
569412
570413
571UINT32 dooyong_state::screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
414UINT32 dooyong_z80_state::screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
572415{
573416   bitmap.fill(m_palette->black_pen(), cliprect);
574417   screen.priority().fill(0, cliprect);
r241911r241912
582425   return 0;
583426}
584427
585UINT32 dooyong_state::screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
428UINT32 dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
586429{
587430   bitmap.fill(m_palette->black_pen(), cliprect);
588431
r241911r241912
593436   return 0;
594437}
595438
596UINT32 dooyong_state::screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
439VIDEO_START_MEMBER(dooyong_z80_ym2203_state, lastday)
597440{
598   bitmap.fill(m_palette->black_pen(), cliprect);
599   screen.priority().fill(0, cliprect);
600
601   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1);
602   m_bg2_tilemap->draw(screen, bitmap, cliprect, 0, (m_rshark_pri ? 2 : 1));
603   m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2);
604   m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 2);
605
606   rshark_draw_sprites(screen, bitmap, cliprect);
607   return 0;
608}
609
610UINT32 dooyong_state::screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
611{
612   bitmap.fill(m_palette->black_pen(), cliprect);
613   screen.priority().fill(0, cliprect);
614
615   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1);
616
617   rshark_draw_sprites(screen, bitmap, cliprect);
618   return 0;
619}
620
621
622VIDEO_START_MEMBER(dooyong_state,lastday)
623{
624441   /* Configure tilemap callbacks */
625442   m_bg_tilerom = memregion("gfx5")->base();
626443   m_fg_tilerom = memregion("gfx6")->base();
627   m_bg_tilerom2 = NULL;
628   m_fg_tilerom2 = NULL;
629444   m_bg_gfx = 2;
630445   m_fg_gfx = 3;
631446   m_tx_tilemap_mode = 0;
632447
633448   /* Create tilemaps */
634   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
449   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
635450         32, 32, 32, 8);
636   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
451   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
637452         32, 32, 32, 8);
638   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
453   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
639454         8, 8, 64, 32);
640455
641456   /* Configure tilemap transparency */
r241911r241912
658473   save_item(NAME(m_interrupt_line_2));
659474}
660475
661VIDEO_START_MEMBER(dooyong_state,gulfstrm)
476VIDEO_START_MEMBER(dooyong_z80_ym2203_state, gulfstrm)
662477{
663478   /* Configure tilemap callbacks */
664479   m_bg_tilerom = memregion("gfx5")->base();
665480   m_fg_tilerom = memregion("gfx6")->base();
666   m_bg_tilerom2 = NULL;
667   m_fg_tilerom2 = NULL;
668481   m_bg_gfx = 2;
669482   m_fg_gfx = 3;
670483   m_tx_tilemap_mode = 0;
671484
672485   /* Create tilemaps */
673   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
486   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
674487         32, 32, 32, 8);
675   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
488   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
676489         32, 32, 32, 8);
677   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
490   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
678491         8, 8, 64, 32);
679492
680493   /* Configure tilemap transparency */
r241911r241912
696509   save_item(NAME(m_interrupt_line_2));
697510}
698511
699VIDEO_START_MEMBER(dooyong_state,pollux)
512VIDEO_START_MEMBER(dooyong_z80_ym2203_state, pollux)
700513{
701514   /* Configure tilemap callbacks */
702515   m_bg_tilerom = memregion("gfx5")->base();
703516   m_fg_tilerom = memregion("gfx6")->base();
704   m_bg_tilerom2 = NULL;
705   m_fg_tilerom2 = NULL;
706517   m_bg_gfx = 2;
707518   m_fg_gfx = 3;
708519   m_tx_tilemap_mode = 0;
709520
710521   /* Create tilemaps */
711   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
522   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
712523         32, 32, 32, 8);
713   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
524   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
714525         32, 32, 32, 8);
715   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
526   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
716527         8, 8, 64, 32);
717528
718529   /* Configure tilemap transparency */
r241911r241912
731542   save_item(NAME(m_interrupt_line_2));
732543}
733544
734VIDEO_START_MEMBER(dooyong_state,bluehawk)
545VIDEO_START_MEMBER(dooyong_z80_state,bluehawk)
735546{
736547   /* Configure tilemap callbacks */
737548   m_bg_tilerom = memregion("gfx3")->base() + 0x78000;
738549   m_fg_tilerom = memregion("gfx4")->base() + 0x78000;
739550   m_fg2_tilerom = memregion("gfx5")->base() + 0x38000;
740   m_bg_tilerom2 = NULL;
741   m_fg_tilerom2 = NULL;
742   m_fg2_tilerom2 = NULL;
743551   m_bg_gfx = 2;
744552   m_fg_gfx = 3;
745553   m_fg2_gfx = 4;
746554   m_tx_tilemap_mode = 1;
747555
748556   /* Create tilemaps */
749   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
557   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
750558         32, 32, 32, 8);
751   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
559   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
752560         32, 32, 32, 8);
753   m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg2_tile_info),this), TILEMAP_SCAN_COLS,
561   m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg2_tile_info),this), TILEMAP_SCAN_COLS,
754562         32, 32, 32, 8);
755   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
563   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
756564         8, 8, 64, 32);
757565
758566   /* Configure tilemap transparency */
r241911r241912
771579   save_item(NAME(m_fg2scroll8));
772580}
773581
774VIDEO_START_MEMBER(dooyong_state,flytiger)
582VIDEO_START_MEMBER(dooyong_z80_state,flytiger)
775583{
776584   /* Configure tilemap callbacks */
777585   m_bg_tilerom = memregion("gfx3")->base() + 0x78000;
778586   m_fg_tilerom = memregion("gfx4")->base() + 0x78000;
779   m_bg_tilerom2 = NULL;
780   m_fg_tilerom2 = NULL;
781587   m_bg_gfx = 2;
782588   m_fg_gfx = 3;
783589   m_tx_tilemap_mode = 0;
784590
785591   /* Create tilemaps */
786   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
592   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
787593         32, 32, 32, 8);
788   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::flytiger_get_fg_tile_info),this), TILEMAP_SCAN_COLS,
594   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
789595         32, 32, 32, 8);
790   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
596   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
791597         8, 8, 64, 32);
792598
793599   /* Configure tilemap transparency */
r241911r241912
806612   save_item(NAME(m_flytiger_pri));
807613}
808614
809VIDEO_START_MEMBER(dooyong_state,primella)
615VIDEO_START_MEMBER(dooyong_z80_state,primella)
810616{
811617   /* Configure tilemap callbacks */
812618   m_bg_tilerom = memregion("gfx2")->base() + memregion("gfx2")->bytes() - 0x8000;
813619   m_fg_tilerom = memregion("gfx3")->base() + memregion("gfx3")->bytes() - 0x8000;
814   m_bg_tilerom2 = NULL;
815   m_fg_tilerom2 = NULL;
816620   m_bg_gfx = 1;
817621   m_fg_gfx = 2;
818622   m_tx_tilemap_mode = 1;
819623
820624   /* Create tilemaps */
821   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
625   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
822626         32, 32, 32, 8);
823   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
627   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
824628         32, 32, 32, 8);
825   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
629   m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_z80_state::get_tx_tile_info),this), TILEMAP_SCAN_COLS,
826630         8, 8, 64, 32);
827631
828632   /* Configure tilemap transparency */
r241911r241912
840644   save_item(NAME(m_tx_pri));
841645}
842646
843VIDEO_START_MEMBER(dooyong_state,rshark)
647
648/* These handle writes to the tilemap scroll registers in 16-bit machines.
649   This is just an 8-bit peripheral in a 16-bit machine. */
650
651WRITE16_MEMBER(dooyong_68k_state::bgscroll_w)
844652{
653   if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_bgscroll8, m_bg_tilemap);
654}
655
656WRITE16_MEMBER(dooyong_68k_state::bg2scroll_w)
657{
658   if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_bg2scroll8, m_bg2_tilemap);
659}
660
661WRITE16_MEMBER(dooyong_68k_state::fgscroll_w)
662{
663   if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_fgscroll8, m_fg_tilemap);
664}
665
666WRITE16_MEMBER(dooyong_68k_state::fg2scroll_w)
667{
668   if (ACCESSING_BITS_0_7) scroll8_w(offset, data & 0x00ff, m_fg2scroll8, m_fg2_tilemap);
669}
670
671WRITE16_MEMBER(dooyong_68k_state::ctrl_w)
672
673{
674   if (ACCESSING_BITS_0_7)
675   {
676      /* bit 0 flips screen */
677      flip_screen_set(data & 0x0001);
678
679      /* bit 4 changes tilemaps priority */
680      m_bg2_priority = data & 0x0010;
681
682      /* bit 5 used but unknown */
683   }
684}
685
686
687inline void dooyong_68k_state::rshark_get_tile_info(tile_data &tileinfo, int tile_index,
688      const UINT8 *tilerom1, const UINT8 *tilerom2, UINT8 *scroll, int graphics)
689{
690      /* Tiles take two bytes in tile ROM 1:
691                       MSB   LSB
692         [offs + 0x00] YX?c cccc    (Y flip, X flip, bits 12-8 of gfx code)
693         [offs + 0x01] cccc cccc    (bits 7-0 of gfx code)
694         ? = unused/unknown
695         c = gfx code
696         X = x flip
697         Y = y flip */
698   int const offs = tile_index + ((int)scroll[1] << 9);
699   int const attr = tilerom1[offs * 2];
700   int const code = tilerom1[(offs * 2) + 1] | ((attr & 0x1f) << 8);
701   int const color = tilerom2[offs] & 0x0f;
702   int const flags = TILE_FLIPYX((attr & 0xC0) >> 6);
703
704   tileinfo.set(graphics, code, color, flags);
705}
706
707TILE_GET_INFO_MEMBER(dooyong_68k_state::get_bg_tile_info)
708{
709   if (m_bg_tilerom2 != NULL)
710      rshark_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bg_tilerom2, m_bgscroll8, m_bg_gfx);
711   else
712      lastday_get_tile_info(tileinfo, tile_index, m_bg_tilerom, m_bgscroll8, m_bg_gfx);
713}
714
715TILE_GET_INFO_MEMBER(dooyong_68k_state::get_bg2_tile_info)
716{
717   if (m_bg2_tilerom2 != NULL)
718      rshark_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2_tilerom2, m_bg2scroll8, m_bg2_gfx);
719   else
720      lastday_get_tile_info(tileinfo, tile_index, m_bg2_tilerom, m_bg2scroll8, m_bg2_gfx);
721}
722
723TILE_GET_INFO_MEMBER(dooyong_68k_state::get_fg_tile_info)
724{
725   if (m_fg_tilerom2 != NULL)
726      rshark_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fg_tilerom2, m_fgscroll8, m_fg_gfx);
727   else
728      lastday_get_tile_info(tileinfo, tile_index, m_fg_tilerom, m_fgscroll8, m_fg_gfx);
729}
730
731TILE_GET_INFO_MEMBER(dooyong_68k_state::get_fg2_tile_info)
732{
733   if (m_fg2_tilerom2 != NULL)
734      rshark_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2_tilerom2, m_fg2scroll8, m_fg2_gfx);
735   else
736      lastday_get_tile_info(tileinfo, tile_index, m_fg2_tilerom, m_fg2scroll8, m_fg2_gfx);
737}
738
739
740void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
741{
742   UINT16 *buffered_spriteram = m_spriteram->buffer();
743
744   /* Sprites take 8 16-bit words each in memory:
745                 MSB             LSB
746      [offs + 0] ???? ???? ???? ???E
747      [offs + 1] ???? ???? hhhh wwww
748      [offs + 2] ???? ???? ???? ????
749      [offs + 3] cccc cccc cccc cccc
750      [offs + 4] ???? ???x xxxx xxxx
751      [offs + 5] ???? ???? ???? ????
752      [offs + 6] ???? ???y yyyy yyyy
753      [offs + 7] ???? ???? ???? CCCC
754      ? = unused/unknown
755      E = enable
756      c = gfx code
757      x = x offset
758      y = y offset (signed)
759      C = color code
760      w = width
761      h = height */
762
763   int offs;
764
765   for (offs = (m_spriteram->bytes() / 2) - 8; offs >= 0; offs -= 8)
766   {
767      if (buffered_spriteram[offs] & 0x0001)    /* enable */
768      {
769         int sx, sy, code, color, pri;
770         int flipx = 0, flipy = 0, width, height, x, y;
771
772         sx = buffered_spriteram[offs+4] & 0x01ff;
773         sy = (INT16)buffered_spriteram[offs+6] & 0x01ff;
774         if (sy & 0x0100) sy |= ~(int)0x01ff;    // Correctly sign-extend 9-bit number
775         code = buffered_spriteram[offs+3];
776         color = buffered_spriteram[offs+7] & 0x000f;
777         //TODO: This priority mechanism works for known games, but seems a bit strange.
778         //Are we missing something?  (The obvious spare palette bit isn't it.)
779         pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
780         width = buffered_spriteram[offs+1] & 0x000f;
781         height = (buffered_spriteram[offs+1] & 0x00f0) >> 4;
782
783         if (flip_screen())
784         {
785            sx = 498 - (16 * width) - sx;
786            sy = 240 - (16 * height) - sy;
787            flipx = !flipx;
788            flipy = !flipy;
789         }
790
791         for (y = 0; y <= height; y++)
792         {
793            int _y = sy + (16 * (flipy ? (height - y) : y));
794            for (x = 0; x <= width; x++)
795            {
796               int _x = sx + (16 * (flipx ? (width - x) : x));
797               m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect,
798                     code,
799                     color,
800                     flipx, flipy,
801                     _x, _y,
802                     screen.priority(),
803                     pri, 15);
804               code++;
805            }
806         }
807      }
808   }
809}
810
811UINT32 dooyong_68k_state::screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
812{
813   bitmap.fill(m_palette->black_pen(), cliprect);
814   screen.priority().fill(0, cliprect);
815
816   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1);
817   m_bg2_tilemap->draw(screen, bitmap, cliprect, 0, (m_bg2_priority ? 2 : 1));
818   m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2);
819   m_fg2_tilemap->draw(screen, bitmap, cliprect, 0, 2);
820
821   draw_sprites(screen, bitmap, cliprect);
822   return 0;
823}
824
825UINT32 dooyong_68k_state::screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
826{
827   bitmap.fill(m_palette->black_pen(), cliprect);
828   screen.priority().fill(0, cliprect);
829
830   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1);
831
832   draw_sprites(screen, bitmap, cliprect);
833   return 0;
834}
835
836
837VIDEO_START_MEMBER(dooyong_68k_state, rshark)
838{
845839   /* Configure tilemap callbacks */
846840   m_bg_tilerom = memregion("gfx5")->base();
847841   m_bg2_tilerom = memregion("gfx4")->base();
r241911r241912
857851   m_fg2_gfx = 1;
858852
859853   /* Create tilemaps */
860   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
854   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
861855         16, 16, 64, 32);
862   m_bg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg2_tile_info),this), TILEMAP_SCAN_COLS,
856   m_bg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_bg2_tile_info),this), TILEMAP_SCAN_COLS,
863857         16, 16, 64, 32);
864   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
858   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS,
865859         16, 16, 64, 32);
866   m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_fg2_tile_info),this), TILEMAP_SCAN_COLS,
860   m_fg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_fg2_tile_info),this), TILEMAP_SCAN_COLS,
867861         16, 16, 64, 32);
868862
869863   /* Configure tilemap transparency */
r241911r241912
881875   save_item(NAME(m_bg2scroll8));
882876   save_item(NAME(m_fgscroll8));
883877   save_item(NAME(m_fg2scroll8));
884   save_item(NAME(m_rshark_pri));
878   save_item(NAME(m_bg2_priority));
885879}
886880
887VIDEO_START_MEMBER(dooyong_state,popbingo)
881VIDEO_START_MEMBER(dooyong_68k_state, popbingo)
888882{
889883   /* Configure tilemap callbacks */
890884   m_bg_tilerom = memregion("gfx2")->base();
885   m_bg_tilerom2 = NULL;
891886   m_bg_gfx = 1;
892887
893888   /* Create tilemaps */
894   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
889   m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dooyong_68k_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS,
895890         32, 32, 32, 8);
896891   m_bg2_tilemap = m_fg_tilemap = m_fg2_tilemap = NULL;    /* Stop scroll handler from crashing on these */
897892
r241911r241912
905900   save_item(NAME(m_bg2scroll8));  // Not used atm
906901   save_item(NAME(m_fgscroll8));   // Not used atm
907902   save_item(NAME(m_fg2scroll8));  // Not used atm
908   save_item(NAME(m_rshark_pri));
903   save_item(NAME(m_bg2_priority));
909904}


Previous 199869 Revisions Next


© 1997-2024 The MAME Team