diff options
| author | micko <micko@9849079f-6229-0410-a07f-84406ce305ba> | 2012-07-02 07:51:50 (GMT) |
|---|---|---|
| committer | micko <micko@9849079f-6229-0410-a07f-84406ce305ba> | 2012-07-02 07:51:50 (GMT) |
| commit | 403b478f9850c63fa0f61778e4ca324637748f9b (patch) | |
| tree | 7e8853e02b07fc1c37b5171deaaf882fafdf7c83 | |
| parent | 9ffd0d7f3d76a0866fbe6be0be9140f0060b40a3 (diff) | |
| download | mess-403b478f9850c63fa0f61778e4ca324637748f9b.zip mess-403b478f9850c63fa0f61778e4ca324637748f9b.tar.bz2 | |
Clean-ups and version bump
git-svn-id: svn://messdev.no-ip.org/mess@15525 9849079f-6229-0410-a07f-84406ce305ba
60 files changed, 3805 insertions, 3805 deletions
diff --git a/hash/saturn.xml b/hash/saturn.xml index 55d8f3d..5c4009c 100644 --- a/hash/saturn.xml +++ b/hash/saturn.xml @@ -14785,18 +14785,18 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying Advanced VG (Genteiban) (T-32506G)... --> <!--<software name="advanced01" cloneof="advanced" supported="no"> - <description>Advanced VG (Genteiban) (T-32506G)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Advanced VG (Genteiban) (T-32506G)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> - <part name="cdrom" interface="sat_cdrom"> - <diskarea name="cdrom"> - <disk name="advanced vg (genteiban) (t-32506g)" sha1="41e81a75e402224630d2fb82ba4621351139ddae" /> - </diskarea> - </part> - </software>--> + <part name="cdrom" interface="sat_cdrom"> + <diskarea name="cdrom"> + <disk name="advanced vg (genteiban) (t-32506g)" sha1="41e81a75e402224630d2fb82ba4621351139ddae" /> + </diskarea> + </part> + </software>--> <!-- Identifying Afterburner II (GS-9109)... --> <software name="aburner2" supported="no"> @@ -16258,29 +16258,29 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying Deep Fear Disc 1 (GS-9189)... --> <!--<software name="deepfear" supported="no"> - <description>Deep Fear Disc 1 (GS-9189)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Deep Fear Disc 1 (GS-9189)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = deep fear (disc 1 of 2) (jap) (dw0638) sat_jp:deepfear02 Deep Fear (Disc 1 of 2) (JAP) (DW0638) = deep fear (disc 1 of 2) (jap) (dw0638) sat_jp:deepfear02 Deep Fear (Disc 1 of 2) (JAP) (DW0638) = deep fear (disc 1 of 2) (jap) (dw0638) sat_jp:deepfear02 Deep Fear (Disc 1 of 2) (JAP) (DW0638) - </software>--> + </software>--> <!-- Identifying Deep Fear Disc 2 (GS-9189)... --> <!--<software name="deepfear01" cloneof="deepfear" supported="no"> - <description>Deep Fear Disc 2 (GS-9189)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Deep Fear Disc 2 (GS-9189)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = deep fear (disc 2 of 2) (jap) (dw0638) sat_jp:deepfear03 Deep Fear (Disc 2 of 2) (JAP) (DW0638) = deep fear (disc 2 of 2) (jap) (dw0638) sat_jp:deepfear03 Deep Fear (Disc 2 of 2) (JAP) (DW0638) = deep fear (disc 2 of 2) (jap) (dw0638) sat_jp:deepfear03 Deep Fear (Disc 2 of 2) (JAP) (DW0638) - </software>--> + </software>--> <!-- Identifying Deka Yonku - Tough The Truck (T-4313G)... --> <software name="toughtrk" cloneof="hc4x4" supported="no"> @@ -17371,16 +17371,16 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying Game Basic For Sega Saturn PC CD-ROM (T-2111G)... --> <!--<software name="gamebasi01" cloneof="gamebasi" supported="no"> - <description>Game Basic For Sega Saturn PC CD-ROM (T-2111G)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Game Basic For Sega Saturn PC CD-ROM (T-2111G)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = game basic for segasaturn (japan) (windows cd) sat_jp:gamebasi Game Basic for SegaSaturn (Japan) (Windows CD) = game basic for segasaturn (japan) (windows cd) sat_jp:gamebasi Game Basic for SegaSaturn (Japan) (Windows CD) = game basic for segasaturn (japan) (windows cd) sat_jp:gamebasi Game Basic for SegaSaturn (Japan) (Windows CD) - </software>--> + </software>--> <!-- Identifying Game de Seishun (T-19711G)... --> <software name="gameseis" supported="no"> @@ -18503,16 +18503,16 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying Kidou Senshi Gundam Gaiden I - Senritsu no Blue (T-13307G)... --> <!--<software name="kidousen" supported="no"> - <description>Kidou Senshi Gundam Gaiden I - Senritsu no Blue (T-13307G)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Kidou Senshi Gundam Gaiden I - Senritsu no Blue (T-13307G)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = kidou senshi gundam gaiden i senritsu no blue (jap) (dw0636) sat_jp:kidousen05 Kidou Senshi Gundam Gaiden I Senritsu no Blue (JAP) (DW0636) = kidou senshi gundam gaiden i senritsu no blue (jap) (dw0636) sat_jp:kidousen05 Kidou Senshi Gundam Gaiden I Senritsu no Blue (JAP) (DW0636) = kidou senshi gundam gaiden i senritsu no blue (jap) (dw0636) sat_jp:kidousen05 Kidou Senshi Gundam Gaiden I Senritsu no Blue (JAP) (DW0636) - </software>--> + </software>--> <!-- Identifying Kiss Yori (Shokai Genteiban) (T-19723G)... --> <software name="kissyosg" supported="no"> @@ -20523,16 +20523,16 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying Strikers 1945 (T-14407G)... --> <!--<software name="strikers" supported="no"> - <description>Strikers 1945 (T-14407G)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Strikers 1945 (T-14407G)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = strikers 1945 (jap) (dw0178) sat_jp:strikersa Strikers 1945 (JAP) (DW0178) = strikers 1945 (jap) (dw0178) sat_jp:strikersa Strikers 1945 (JAP) (DW0178) = strikers 1945 (jap) (dw0178) sat_jp:strikersa Strikers 1945 (JAP) (DW0178) - </software>--> + </software>--> <!-- Identifying Suiko Enbu - Fuuun Saiki (T-1305G)... --> <software name="suikoen2" supported="no"> @@ -20650,18 +20650,18 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying Taiheiyou no Arashi 2 Disc 1 (J) (T-15024G)... --> <!-- Identifying Taiheiyou no Arashi 2 Disc 2 (J) (T-15024G)... --> <software name="taiheiy2" supported="no"> - <description>Taiheiyou no Arashi 2 - Shippuu no Moudou (Jpn)</description> - <year>1997</year> - <publisher>Imagineer</publisher> + <description>Taiheiyou no Arashi 2 - Shippuu no Moudou (Jpn)</description> + <year>1997</year> + <publisher>Imagineer</publisher> <info name="serial" value="T-15018G, T-15024G (Shokai Genteiban, 2 disks)"/> <info name="release" value="19970613"/> <info name="alt_title" value="太平洋の嵐2 疾風の艨艟"/> - <sharedfeat name="compatibility" value="NTSC-J"/> - <part name="cdrom" interface="sat_cdrom"> - <diskarea name="cdrom"> - <disk name="taiheiyou no arashi 2 disc 1 (j) (t-15024g)" sha1="0292325dce9f03285a7c7c962fe77bb59e424e56" /> - </diskarea> - </part> + <sharedfeat name="compatibility" value="NTSC-J"/> + <part name="cdrom" interface="sat_cdrom"> + <diskarea name="cdrom"> + <disk name="taiheiyou no arashi 2 disc 1 (j) (t-15024g)" sha1="0292325dce9f03285a7c7c962fe77bb59e424e56" /> + </diskarea> + </part> <part name="cdrom2" interface="sat_cdrom"> <diskarea name="cdrom"> <disk name="taiheiyou no arashi 2 disc 2 (j) (t-15024g)" sha1="34ede0ee26a200a2526760d18eb89c91bcc9a6f0" /> @@ -20821,29 +20821,29 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying Tengai Makyou Dai Yon no Mokujiroku - The Apocalypse IV Disc 1 (T-14301G)... --> <!--<software name="tengaima" supported="no"> - <description>Tengai Makyou Dai Yon no Mokujiroku - The Apocalypse IV Disc 1 (T-14301G)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Tengai Makyou Dai Yon no Mokujiroku - The Apocalypse IV Disc 1 (T-14301G)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = tengai makyou dai - the apocalypse iv (disc 1 of 2) (jap) (dw0262) sat_jp:tengaima03 Tengai Makyou Dai - The Apocalypse IV (Disc 1 of 2) (JAP) (DW0262) = tengai makyou dai - the apocalypse iv (disc 1 of 2) (jap) (dw0262) sat_jp:tengaima03 Tengai Makyou Dai - The Apocalypse IV (Disc 1 of 2) (JAP) (DW0262) = tengai makyou dai - the apocalypse iv (disc 1 of 2) (jap) (dw0262) sat_jp:tengaima03 Tengai Makyou Dai - The Apocalypse IV (Disc 1 of 2) (JAP) (DW0262) - </software>--> + </software>--> <!-- Identifying Tengai Makyou Dai Yon no Mokujiroku - The Apocalypse IV Disc 2 (T-14301G)... --> <!--<software name="tengaima01" cloneof="tengaima" supported="no"> - <description>Tengai Makyou Dai Yon no Mokujiroku - The Apocalypse IV Disc 2 (T-14301G)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>Tengai Makyou Dai Yon no Mokujiroku - The Apocalypse IV Disc 2 (T-14301G)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = tengai makyou dai - the apocalypse iv (disc 2 of 2) (jap) (dw0262) sat_jp:tengaima04 Tengai Makyou Dai - The Apocalypse IV (Disc 2 of 2) (JAP) (DW0262) = tengai makyou dai - the apocalypse iv (disc 2 of 2) (jap) (dw0262) sat_jp:tengaima04 Tengai Makyou Dai - The Apocalypse IV (Disc 2 of 2) (JAP) (DW0262) = tengai makyou dai - the apocalypse iv (disc 2 of 2) (jap) (dw0262) sat_jp:tengaima04 Tengai Makyou Dai - The Apocalypse IV (Disc 2 of 2) (JAP) (DW0262) - </software>--> + </software>--> <!-- Identifying Tenka Seiha (T-15030G)... --> <software name="tenkasei" supported="no"> @@ -20991,16 +20991,16 @@ Olympic Soccer (Fra) T-7904H-09 <!-- Identifying The King of Fighters '95 (T-3101G)... --> <!--<software name="thekingo01" cloneof="thekingo" supported="no"> - <description>The King of Fighters '95 (T-3101G)</description> - <year>199?</year> - <publisher><unknown></publisher> + <description>The King of Fighters '95 (T-3101G)</description> + <year>199?</year> + <publisher><unknown></publisher> <info name="serial" value=""/> <info name="release" value=""/> <info name="alt_title" value=""/> = king of fighters '95, the (jap) (dw0289) sat_jp:kof95a King of Fighters '95, The (JAP) (DW0289) = king of fighters '95, the (jap) (dw0289) sat_jp:kof95a King of Fighters '95, The (JAP) (DW0289) = king of fighters '95, the (jap) (dw0289) sat_jp:kof95a King of Fighters '95, The (JAP) (DW0289) - </software>--> + </software>--> <!-- Identifying The King of Fighters '96 (T-3108G)... --> <software name="kof96c" cloneof="kof96" supported="no"> @@ -25898,7 +25898,7 @@ Olympic Soccer (Fra) T-7904H-09 <disk name="sound novel machi disc 1 (j) (t-34001g)" sha1="0174f2028cf41563218c85a2c04a6593062a4852" /> </diskarea> </part> - <part name="cdrom2" interface="sat_cdrom"> + <part name="cdrom2" interface="sat_cdrom"> <diskarea name="cdrom"> <disk name="sound novel machi disc 2 (j) (t-34001g)" sha1="17b5fbf2b76117740e14938ae58cf77790110086" /> </diskarea> @@ -33060,7 +33060,7 @@ Olympic Soccer (Fra) T-7904H-09 </software> <!-- Identifying 0707-Shellshock-fre... --> - <software name="shellshkf" cloneof="shellshk" supported="no"> + <software name="shellshkf" cloneof="shellshk" supported="no"> <description>Shellshock (Fra)</description> <year>1996</year> <publisher>Core</publisher> diff --git a/hash/x68k_flop.xml b/hash/x68k_flop.xml index 5e5f84a..98490f9 100644 --- a/hash/x68k_flop.xml +++ b/hash/x68k_flop.xml @@ -7217,7 +7217,7 @@ </dataarea> </part> </software> - + <software name="hanahour"> <description>Hanafuda Hourouki</description> <year>1988</year> @@ -7233,7 +7233,7 @@ </dataarea> </part> </software> - + <software name="hanakoi"> <description>Hanafuda Koi Koi</description> <year>19??</year> @@ -7244,7 +7244,7 @@ </dataarea> </part> </software> - + <software name="hanaten"> <description>Hanafuda Tengoku</description> <year>1990</year> @@ -7255,7 +7255,7 @@ </dataarea> </part> </software> - + <software name="hanaiko"> <description>Hanaikoku Pro Uso-68k</description> <year>1990</year> @@ -7266,7 +7266,7 @@ </dataarea> </part> </software> - + <software name="hanayori"> <description>Hana Yori Dango</description> <year>1991</year> @@ -7287,7 +7287,7 @@ </dataarea> </part> </software> - + <software name="harenoch"> <description>Hare Nochi Oosawagi</description> <year>1989</year> @@ -7303,7 +7303,7 @@ </dataarea> </part> </software> - + <software name="hnaugust"> <description>Haruka Naru Augusta</description> <year>1991</year> @@ -7324,7 +7324,7 @@ </dataarea> </part> </software> - + <!-- not bootable, perhaps expansion disks for Haruka Naru Augusta? --> <software name="hn8lakes"> <description>Haruka Naru Eight Lakes</description> @@ -7341,7 +7341,7 @@ </dataarea> </part> </software> - + <software name="hatenkou"> <description>Hatenkou</description> <year>1998</year> @@ -7357,7 +7357,7 @@ </dataarea> </part> </software> - + <software name="hrtsaph"> <description>Heart of Saphilamun</description> <year>1991</year> @@ -7383,7 +7383,7 @@ </dataarea> </part> </software> - + <software name="hvynova"> <description>Heavy Nova</description> <year>1991</year> @@ -7394,7 +7394,7 @@ </dataarea> </part> </software> - + <software name="hnkyo68k"> <description>Heiankyo Alien 68k</description> <year>1988</year> @@ -7405,7 +7405,7 @@ </dataarea> </part> </software> - + <software name="heiankyo"> <description>Heiankyo Alien</description> <year>19??</year> @@ -7416,7 +7416,7 @@ </dataarea> </part> </software> - + <software name="hellhoun"> <description>Hellhound</description> <year>1994</year> @@ -7427,7 +7427,7 @@ </dataarea> </part> </software> - + <software name="helmet"> <description>Helmet</description> <year>1991</year> @@ -7438,7 +7438,7 @@ </dataarea> </part> </software> - + <software name="herohero"> <description>Hero Hero Disk 1</description> <year>19??</year> @@ -7449,7 +7449,7 @@ </dataarea> </part> </software> - + <software name="heroher4"> <description>Hero Hero Disk 4 Indojin no Yabou</description> <year>1990</year> @@ -7460,7 +7460,7 @@ </dataarea> </part> </software> - + <software name="heroher6"> <description>Hero Hero Disk 6</description> <year>1992</year> @@ -7471,7 +7471,7 @@ </dataarea> </part> </software> - + <software name="heroher8"> <description>Hero Hero Disk 8</description> <year>199?</year> @@ -7482,7 +7482,7 @@ </dataarea> </part> </software> - + <!-- screen doesn't clear after updating each frame --> <software name="hetzer"> <description>Hetzer</description> @@ -7494,7 +7494,7 @@ </dataarea> </part> </software> - + <software name="hextris"> <description>Hextris</description> <year>199?</year> @@ -7505,7 +7505,7 @@ </dataarea> </part> </software> - + <software name="heysay"> <description>Hey! Say! Education Committee (v0.12)</description> <year>1993</year> @@ -7516,7 +7516,7 @@ </dataarea> </part> </software> - + <software name="heysay010" cloneof="heysay"> <description>Hey! Say! Education Committee (v0.10)</description> <year>1993</year> @@ -7527,7 +7527,7 @@ </dataarea> </part> </software> - + <software name="higesori"> <description>Higesori Pro Uso-68k</description> <year>1990</year> @@ -7538,7 +7538,7 @@ </dataarea> </part> </software> - + <software name="highlow"> <description>High & Low</description> <year>199?</year> @@ -7549,7 +7549,7 @@ </dataarea> </part> </software> - + <software name="highpos"> <description>High Position</description> <year>1989</year> @@ -7560,7 +7560,7 @@ </dataarea> </part> </software> - + <software name="himegas"> <description>Hi Mega Sister</description> <year>1990</year> @@ -7576,7 +7576,7 @@ </dataarea> </part> </software> - + <software name="himihana"> <description>Himitsu no Hanazono</description> <year>1992</year> @@ -7597,7 +7597,7 @@ </dataarea> </part> </software> - + <software name="hiroshi"> <description>Hiroshi</description> <year>19??</year> @@ -7608,7 +7608,7 @@ </dataarea> </part> </software> - + <software name="hiroshi2"> <description>Hiroshi II</description> <year>1998</year> @@ -7619,7 +7619,7 @@ </dataarea> </part> </software> - + <software name="hishouza"> <description>Hishouzame Flying Shark</description> <year>1991</year> @@ -7630,7 +7630,7 @@ </dataarea> </part> </software> - + <software name="hishouzd"> <description>Hishouzame Flying Shark (Demo)</description> <year>1991</year> @@ -7641,7 +7641,7 @@ </dataarea> </part> </software> - + <software name="hyuusha"> <description>Hissatsu Yuusha Tsuitoshi</description> <year>19??</year> @@ -7652,7 +7652,7 @@ </dataarea> </part> </software> - + <software name="helthled"> <description>History of Elthlead</description> <year>19??</year> @@ -7673,7 +7673,7 @@ </dataarea> </part> </software> - + <software name="hitomiza"> <description>Hitomi Zaka</description> <year>19??</year> @@ -7689,7 +7689,7 @@ </dataarea> </part> </software> - + <software name="horiume"> <description>Hori Hori Ume Ume</description> <year>199?</year> @@ -7705,7 +7705,7 @@ </dataarea> </part> </software> - + <software name="horror"> <description>Horror of Cridewell</description> <year>1990</year> @@ -7716,7 +7716,7 @@ </dataarea> </part> </software> - + <software name="hoshisu2"> <description>Hoshi no Suna Monogatari 2</description> <year>1992</year> @@ -7772,7 +7772,7 @@ </dataarea> </part> </software> - + <software name="hoshisun"> <description>Hoshi no Suna Monogatari</description> <year>1991</year> @@ -7793,7 +7793,7 @@ </dataarea> </part> </software> - + <software name="hotelwar"> <description>Hotel Wars</description> <year>19??</year> @@ -7809,7 +7809,7 @@ </dataarea> </part> </software> - + <software name="hotjump"> <description>Hot Jump (v0.00)</description> <year>199?</year> @@ -7820,7 +7820,7 @@ </dataarea> </part> </software> - + <software name="houmahnt"> <description>Houma Hunter Lime 1</description> <year>1993</year> @@ -7836,7 +7836,7 @@ </dataarea> </part> </software> - + <software name="houmahn2"> <description>Houma Hunter Lime 2</description> <year>1993</year> @@ -7852,7 +7852,7 @@ </dataarea> </part> </software> - + <software name="houmahn3"> <description>Houma Hunter Lime 3</description> <year>1993</year> @@ -7868,7 +7868,7 @@ </dataarea> </part> </software> - + <software name="houmahn6"> <description>Houma Hunter Lime 6</description> <year>1993</year> @@ -7884,7 +7884,7 @@ </dataarea> </part> </software> - + <software name="houmah11"> <description>Houma Hunter Lime 11</description> <year>1994</year> @@ -7905,7 +7905,7 @@ </dataarea> </part> </software> - + <software name="htjewel"> <description>Houseki Tsukai Jewel Master</description> <year>199?</year> @@ -7916,7 +7916,7 @@ </dataarea> </part> </software> - + <software name="hvrcraft"> <description>Hover Craft 68k</description> <year>1993</year> @@ -7927,7 +7927,7 @@ </dataarea> </part> </software> - + <software name="howmanyr"> <description>How Many Robot</description> <year>1988</year> @@ -7938,7 +7938,7 @@ </dataarea> </part> </software> - + <software name="hydlide3"> <description>Hydlide 3 The Space Memories Special Version</description> <year>1990</year> @@ -7954,7 +7954,7 @@ </dataarea> </part> </software> - + <software name="hydlide"> <description>Hydlide</description> <year>1994</year> @@ -7965,7 +7965,7 @@ </dataarea> </part> </software> - + <software name="hydlide2"> <description>Hydlide II Shine of Darkness</description> <year>199?</year> diff --git a/src/emu/ioport.c b/src/emu/ioport.c index 0a68c7c..f2e84fa 100644 --- a/src/emu/ioport.c +++ b/src/emu/ioport.c @@ -2650,13 +2650,13 @@ time_t ioport_manager::initialize() int player_offset = 0; for (device_t *device = iter.first(); device != NULL; device = iter.next()) { - int players = 0; + int players = 0; for (ioport_port *port = first_port(); port != NULL; port = port->next()) { if (&port->device()==device) { for (ioport_field *field = port->first_field(); field != NULL; field = field->next()) - if (field->type_class()==INPUT_CLASS_CONTROLLER) + if (field->type_class()==INPUT_CLASS_CONTROLLER) { if (players < field->player() + 1) players = field->player() + 1; field->set_player(field->player() + player_offset); @@ -3064,7 +3064,7 @@ g_profiler.start(PROFILER_INPUT); ioport_value newvalue = port->read(); for (dynamic_field *dynfield = port->live().writelist.first(); dynfield != NULL; dynfield = dynfield->next()) if (dynfield->field().type() != IPT_OUTPUT) - dynfield->write(newvalue); + dynfield->write(newvalue); } g_profiler.stop(); diff --git a/src/emu/machine/pci.c b/src/emu/machine/pci.c index c956893..6917d43 100644 --- a/src/emu/machine/pci.c +++ b/src/emu/machine/pci.c @@ -207,8 +207,8 @@ WRITE32_MEMBER( pci_bus_legacy_device::write ) -READ64_MEMBER(pci_bus_legacy_device::read_64be) -{ +READ64_MEMBER(pci_bus_legacy_device::read_64be) +{ UINT64 result = 0; mem_mask = FLIPENDIAN_INT64(mem_mask); if (ACCESSING_BITS_0_31) @@ -219,7 +219,7 @@ READ64_MEMBER(pci_bus_legacy_device::read_64be) } WRITE64_MEMBER(pci_bus_legacy_device::write_64be) -{ +{ data = FLIPENDIAN_INT64(data); mem_mask = FLIPENDIAN_INT64(mem_mask); if (ACCESSING_BITS_0_31) @@ -420,8 +420,8 @@ WRITE32_MEMBER( pci_bus_device::write ) -READ64_MEMBER(pci_bus_device::read_64be) -{ +READ64_MEMBER(pci_bus_device::read_64be) +{ UINT64 result = 0; mem_mask = FLIPENDIAN_INT64(mem_mask); if (ACCESSING_BITS_0_31) @@ -432,7 +432,7 @@ READ64_MEMBER(pci_bus_device::read_64be) } WRITE64_MEMBER(pci_bus_device::write_64be) -{ +{ data = FLIPENDIAN_INT64(data); mem_mask = FLIPENDIAN_INT64(mem_mask); if (ACCESSING_BITS_0_31) @@ -480,7 +480,7 @@ void pci_bus_device::device_start() pci_connector *conn = downcast<pci_connector *>(subdevice(id)); if (conn!=NULL) m_device[i] = conn->get_device(); - else + else m_device[i] = NULL; } diff --git a/src/emu/machine/pci.h b/src/emu/machine/pci.h index 6b5c77f..3430cbf 100644 --- a/src/emu/machine/pci.h +++ b/src/emu/machine/pci.h @@ -29,15 +29,15 @@ public: DECLARE_READ64_MEMBER( read_64be ); DECLARE_WRITE64_MEMBER( write_64be ); - + void set_busnum(int busnum) { m_busnum = busnum; } void set_father(const char *father) { m_father = father; } - void set_device(int num, const char *tag, pci_read_func read_func, pci_write_func write_func) { + void set_device(int num, const char *tag, pci_read_func read_func, pci_write_func write_func) { m_devtag[num] = tag; m_read_callback[num] = read_func; m_write_callback[num] = write_func; } - + pci_bus_legacy_device *pci_search_bustree(int busnum, int devicenum, pci_bus_legacy_device *pcibus); void add_sibling(pci_bus_legacy_device *sibling, int busnum); - + protected: // device-level overrides virtual void device_start(); @@ -54,7 +54,7 @@ private: pci_bus_legacy_device * m_siblings[8]; UINT8 m_siblings_busnum[8]; int m_siblings_count; - + offs_t m_address; INT8 m_devicenum; // device number we are addressing INT8 m_busnumber; // pci bus number we are addressing @@ -80,7 +80,7 @@ extern const device_type PCI_BUS_LEGACY; downcast<pci_bus_legacy_device *>(device)->set_father(_father_tag); \ -// NEW IMPLEMENTATION +// NEW IMPLEMENTATION //************************************************************************** // TYPE DEFINITIONS @@ -95,14 +95,14 @@ public: // construction/destruction pci_device_interface(const machine_config &mconfig, device_t &device); virtual ~pci_device_interface(); - + virtual UINT32 pci_read(pci_bus_device *pcibus, int function, int offset, UINT32 mem_mask) = 0; - virtual void pci_write(pci_bus_device *pcibus, int function, int offset, UINT32 data, UINT32 mem_mask) = 0; + virtual void pci_write(pci_bus_device *pcibus, int function, int offset, UINT32 data, UINT32 mem_mask) = 0; private: }; class pci_connector: public device_t, - public device_slot_interface + public device_slot_interface { public: pci_connector(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); @@ -129,15 +129,15 @@ public: DECLARE_READ64_MEMBER( read_64be ); DECLARE_WRITE64_MEMBER( write_64be ); - + void set_busnum(int busnum) { m_busnum = busnum; } void set_father(const char *father) { m_father = father; } - void set_device(int num, const char *tag) { + void set_device(int num, const char *tag) { m_devtag[num] = tag; } - + pci_bus_device *pci_search_bustree(int busnum, int devicenum, pci_bus_device *pcibus); void add_sibling(pci_bus_device *sibling, int busnum); - + protected: // device-level overrides virtual void device_start(); @@ -154,7 +154,7 @@ private: pci_bus_device * m_siblings[8]; UINT8 m_siblings_busnum[8]; int m_siblings_count; - + offs_t m_address; INT8 m_devicenum; // device number we are addressing INT8 m_busnumber; // pci bus number we are addressing @@ -168,7 +168,7 @@ extern const device_type PCI_BUS; /*************************************************************************** DEVICE CONFIGURATION MACROS ***************************************************************************/ - + #define MCFG_PCI_BUS_ADD(_tag, _busnum) \ MCFG_DEVICE_ADD(_tag, PCI_BUS, 0) \ downcast<pci_bus_device *>(device)->set_busnum(_busnum); \ diff --git a/src/emu/sound/qs1000.c b/src/emu/sound/qs1000.c index bbce170..49b473b 100644 --- a/src/emu/sound/qs1000.c +++ b/src/emu/sound/qs1000.c @@ -6,119 +6,119 @@ **************************************************************************** - The QS1000 is a 32-voice wavetable synthesizer, believed to be based on - the OPTi 82C941. It contains an 8051 core, 256b of RAM and an (undumped) - internal program ROM. The internal ROM can be bypassed in favour of an - external ROM. Commands are issued to the chip via the 8051 serial port. - - The QS1000 can access 24Mb of sample ROM. To reduce demand on the CPU, - instrument parameters such as playback rate, envelope and filter values - are encoded in ROM and directly accessed by the wavetable engine. - There are table entries for every note of every instrument. - - Registers - ========= - - [200] = Key on/off - 0 = Key on - 1 = ? - 2 = key off - [201] = Address byte 0 (LSB) - [202] = Address byte 1 - [203] = Address byte 2 - [204] = Pitch - [205] = Pitch high byte? (Usually 0) - [206] = Left volume - [207] = Right volume - [208] = Volume - [209] = ? - [20a] = ? - [20b] = ? - [20c] = ? - [20d] = Velocity - [20e] = Channel select - [20f] = Modulation - [210] = Modulation - [211] = 0 - Select global registers? - 3 - Select channel registers? - - Velocity register values for MIDI range 0-127: - - 01 01 01 01 01 01 01 02 02 03 03 04 04 05 05 06 - 06 07 07 08 08 09 09 0A 0A 0B 0B 0C 0C 0D 0D 0E - 0E 0F 10 11 11 12 13 14 14 15 16 17 17 18 19 1A - 1A 1B 1C 1D 1D 1E 1F 20 20 21 22 23 23 24 25 26 - 26 27 28 29 29 2A 2B 2C 2C 2D 2E 2F 2F 30 31 32 - 35 38 3B 3E 41 44 47 4A 4D 50 4F 51 52 53 54 56 - 57 58 59 5B 5C 5D 5E 60 61 62 63 65 66 67 6A 6B - 6C 6E 6F 70 71 73 74 75 76 78 79 7A 7B 7D 7E 7F - - (TODO: Other register values) - - This is the sequence of register writes used to play the Iron Fortress credit sound: - - [211] 0 Select global registers? - [200] 1 ? - [203] d6 Address byte 2 - [202] a9 Address byte 1 - [201] 1 Address byte 0 - [204] 80 Pitch - [205] 0 ? - [206] 80 Left volume - [207] 80 Right volume - [208] b3 Volume - [209] 0 ? - [20a] ff ? - [20b] 0 ? - [20c] 0 ? - [20d] 78 Velocity - [211] 3 Select channel registers - [20e] 0 Select channel - [200] 0 Key on - - - Sound Headers - ============= - - The address registers point to a 6 byte entry in the sound ROM: - - [019be0] - 097b 397f 1510 - ^ ^ ^ - | | | - | | +----- Sound descriptor pointer - | +---------- ? - +--------------- Playback frequency (fixed point value representing 24MHz clock periods) - - This in turn points to a 24 byte descriptor: - - [1510]: - 0 4502D 4508E 45F91 D0 7F 0F 2A 1F 90 00 FF - ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ - | | | | | | | | | | | | - | | | | | | | | | | | +-- ? - | | | | | | | | | | +----- ? - | | | | | | | | | +-------- ? - | | | | | | | | +----------- ? - | | | | | | | +-------------- ? - | | | | | | +----------------- Bit 7: Format (0:PCM 1:ADPCM) - | | | | | +-------------------- ? - | | | | +----------------------- ? - | | | +----------------------------- Loop end address - | | +----------------------------------- Loop start address - | +----------------------------------------- Start address - +------------------------------------------- Address most-significant nibble (shared with loop addresses) - - * The unknown parameters are most likely envelope and filter parameters. - * Is there a loop flag or do sounds loop indefinitely until stopped? - - - TODO: - * Looping is currently disabled - * Figure out unknown sound header parameters - * Figure out and implement envelopes and filters - * Pitch bending - * Dump the internal ROM + The QS1000 is a 32-voice wavetable synthesizer, believed to be based on + the OPTi 82C941. It contains an 8051 core, 256b of RAM and an (undumped) + internal program ROM. The internal ROM can be bypassed in favour of an + external ROM. Commands are issued to the chip via the 8051 serial port. + + The QS1000 can access 24Mb of sample ROM. To reduce demand on the CPU, + instrument parameters such as playback rate, envelope and filter values + are encoded in ROM and directly accessed by the wavetable engine. + There are table entries for every note of every instrument. + + Registers + ========= + + [200] = Key on/off + 0 = Key on + 1 = ? + 2 = key off + [201] = Address byte 0 (LSB) + [202] = Address byte 1 + [203] = Address byte 2 + [204] = Pitch + [205] = Pitch high byte? (Usually 0) + [206] = Left volume + [207] = Right volume + [208] = Volume + [209] = ? + [20a] = ? + [20b] = ? + [20c] = ? + [20d] = Velocity + [20e] = Channel select + [20f] = Modulation + [210] = Modulation + [211] = 0 - Select global registers? + 3 - Select channel registers? + + Velocity register values for MIDI range 0-127: + + 01 01 01 01 01 01 01 02 02 03 03 04 04 05 05 06 + 06 07 07 08 08 09 09 0A 0A 0B 0B 0C 0C 0D 0D 0E + 0E 0F 10 11 11 12 13 14 14 15 16 17 17 18 19 1A + 1A 1B 1C 1D 1D 1E 1F 20 20 21 22 23 23 24 25 26 + 26 27 28 29 29 2A 2B 2C 2C 2D 2E 2F 2F 30 31 32 + 35 38 3B 3E 41 44 47 4A 4D 50 4F 51 52 53 54 56 + 57 58 59 5B 5C 5D 5E 60 61 62 63 65 66 67 6A 6B + 6C 6E 6F 70 71 73 74 75 76 78 79 7A 7B 7D 7E 7F + + (TODO: Other register values) + + This is the sequence of register writes used to play the Iron Fortress credit sound: + + [211] 0 Select global registers? + [200] 1 ? + [203] d6 Address byte 2 + [202] a9 Address byte 1 + [201] 1 Address byte 0 + [204] 80 Pitch + [205] 0 ? + [206] 80 Left volume + [207] 80 Right volume + [208] b3 Volume + [209] 0 ? + [20a] ff ? + [20b] 0 ? + [20c] 0 ? + [20d] 78 Velocity + [211] 3 Select channel registers + [20e] 0 Select channel + [200] 0 Key on + + + Sound Headers + ============= + + The address registers point to a 6 byte entry in the sound ROM: + + [019be0] + 097b 397f 1510 + ^ ^ ^ + | | | + | | +----- Sound descriptor pointer + | +---------- ? + +--------------- Playback frequency (fixed point value representing 24MHz clock periods) + + This in turn points to a 24 byte descriptor: + + [1510]: + 0 4502D 4508E 45F91 D0 7F 0F 2A 1F 90 00 FF + ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ + | | | | | | | | | | | | + | | | | | | | | | | | +-- ? + | | | | | | | | | | +----- ? + | | | | | | | | | +-------- ? + | | | | | | | | +----------- ? + | | | | | | | +-------------- ? + | | | | | | +----------------- Bit 7: Format (0:PCM 1:ADPCM) + | | | | | +-------------------- ? + | | | | +----------------------- ? + | | | +----------------------------- Loop end address + | | +----------------------------------- Loop start address + | +----------------------------------------- Start address + +------------------------------------------- Address most-significant nibble (shared with loop addresses) + + * The unknown parameters are most likely envelope and filter parameters. + * Is there a loop flag or do sounds loop indefinitely until stopped? + + + TODO: + * Looping is currently disabled + * Figure out unknown sound header parameters + * Figure out and implement envelopes and filters + * Pitch bending + * Dump the internal ROM ***************************************************************************/ #define ADDRESS_MAP_MODERN @@ -183,7 +183,7 @@ ADDRESS_MAP_END // qs1000_device - constructor //------------------------------------------------- qs1000_device::qs1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, QS1000, "QS1000", "qs1000", tag, owner, clock), + : device_t(mconfig, QS1000, "QS1000", "qs1000", tag, owner, clock), device_sound_interface(mconfig, *this), device_memory_interface(mconfig, *this), m_space_config("samples", ENDIANNESS_LITTLE, 8, 24, 0, NULL), @@ -245,7 +245,7 @@ void qs1000_device::device_start() //------------------------------------------------- -// serial_in - send data to the chip +// serial_in - send data to the chip //------------------------------------------------- void qs1000_device::serial_in(UINT8 data) { @@ -258,7 +258,7 @@ void qs1000_device::serial_in(UINT8 data) //------------------------------------------------- -// set_irq - interrupt the internal CPU +// set_irq - interrupt the internal CPU //------------------------------------------------- void qs1000_device::set_irq(int state) { @@ -420,7 +420,7 @@ WRITE8_MEMBER( qs1000_device::wave_w ) // TODO for (int i = 0; i < 16; ++i) m_channels[ch].m_regs[i] = m_wave_regs[i]; - + // Key on start_voice(ch); } @@ -448,7 +448,7 @@ WRITE8_MEMBER( qs1000_device::wave_w ) case 0x0a: case 0x0b: case 0x0c: - case 0x0d: + case 0x0d: { if (m_wave_regs[0x11] == 3) { @@ -462,7 +462,7 @@ WRITE8_MEMBER( qs1000_device::wave_w ) } break; } - + default: m_wave_regs[offset] = data; } @@ -470,14 +470,14 @@ WRITE8_MEMBER( qs1000_device::wave_w ) //------------------------------------------------- -// sound_stream_update - +// sound_stream_update - //------------------------------------------------- void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) { // Rset the output stream memset(outputs[0], 0x0, samples * sizeof(*outputs[0])); memset(outputs[1], 0x0, samples * sizeof(*outputs[1])); - + // Iterate over voices and accumulate sample data for (int ch = 0; ch < QS1000_CHANNELS; ch++) { @@ -485,7 +485,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t ** UINT8 lvol = chan.m_regs[6]; UINT8 rvol = chan.m_regs[7]; - UINT8 vol = chan.m_regs[8]; + UINT8 vol = chan.m_regs[8]; if (chan.m_flags & QS1000_PLAYING) { @@ -503,8 +503,8 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t ** else #endif { - chan.m_flags &= ~QS1000_PLAYING; - break; + chan.m_flags &= ~QS1000_PLAYING; + break; } } @@ -512,10 +512,10 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t ** while (chan.m_start + chan.m_adpcm_addr != chan.m_addr) { chan.m_adpcm_addr++; - + if (chan.m_start + chan.m_adpcm_addr >= chan.m_loop_end) chan.m_adpcm_addr = chan.m_loop_start - chan.m_start; - + UINT8 data = m_direct->read_raw_byte(chan.m_start + (chan.m_adpcm_addr >> 1)); UINT8 nibble = (chan.m_adpcm_addr & 1 ? data : data >> 4) & 0xf; chan.m_adpcm_signal = chan.m_adpcm.clock(nibble); @@ -536,7 +536,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t ** { if (chan.m_addr >= chan.m_loop_end) { -#if 0 // Looping disabled until envelopes work +#if 0 // Looping disabled until envelopes work if (chan.m_flags & QS1000_KEYON) { chan.m_addr = chan.m_loop_start; @@ -544,8 +544,8 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t ** else #endif { - chan.m_flags &= ~QS1000_PLAYING; - break; + chan.m_flags &= ~QS1000_PLAYING; + break; } } @@ -616,8 +616,8 @@ void qs1000_device::start_voice(int ch) UINT8 byte12 = m_direct->read_raw_byte(base + 12); UINT8 byte13 = m_direct->read_raw_byte(base + 13); UINT8 byte14 = m_direct->read_raw_byte(base + 14); - UINT8 byte15 = m_direct->read_raw_byte(base + 15); - + UINT8 byte15 = m_direct->read_raw_byte(base + 15); + printf("[%.6x] Sample Start:%.6x Loop Start:%.6x Loop End:%.6x Params: %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n", base, start_addr, loop_start, loop_end, byte8, byte9, byte10, byte11, byte12, byte13, byte14, byte15); } @@ -633,7 +633,7 @@ void qs1000_device::start_voice(int ch) { m_channels[ch].m_adpcm.reset(); m_channels[ch].m_adpcm_addr = -1; -// m_channels[ch].m_adpcm_signal = -2; +// m_channels[ch].m_adpcm_signal = -2; m_channels[ch].m_flags |= QS1000_ADPCM; } -}
\ No newline at end of file +} diff --git a/src/emu/sound/qs1000.h b/src/emu/sound/qs1000.h index 7749a2a..13d1b43 100644 --- a/src/emu/sound/qs1000.h +++ b/src/emu/sound/qs1000.h @@ -88,21 +88,21 @@ public: DECLARE_READ8_MEMBER( p0_r ); DECLARE_WRITE8_MEMBER( p0_w ); - + DECLARE_READ8_MEMBER( p1_r ); DECLARE_WRITE8_MEMBER( p1_w ); - + DECLARE_READ8_MEMBER( p2_r ); DECLARE_WRITE8_MEMBER( p2_w ); - + DECLARE_READ8_MEMBER( p3_r ); DECLARE_WRITE8_MEMBER( p3_w ); enum { QS1000_KEYON = 1, - QS1000_PLAYING = 2, - QS1000_ADPCM = 4, + QS1000_PLAYING = 2, + QS1000_ADPCM = 4, }; void start_voice(int ch); @@ -118,10 +118,10 @@ public: // Internal state const address_space_config m_space_config; - sound_stream * m_stream; + sound_stream * m_stream; direct_read_data * m_direct; required_device<i8052_device> m_cpu; - + // Wavetable engine UINT8 m_serial_data_in; UINT8 m_wave_regs[18]; @@ -132,7 +132,7 @@ public: INT32 m_adpcm_signal; UINT32 m_start; UINT32 m_addr; - UINT32 m_adpcm_addr; + UINT32 m_adpcm_addr; UINT32 m_loop_start; UINT32 m_loop_end; UINT16 m_freq; diff --git a/src/lib/formats/esq8_dsk.c b/src/lib/formats/esq8_dsk.c index 6a74a28..cfbff25 100644 --- a/src/lib/formats/esq8_dsk.c +++ b/src/lib/formats/esq8_dsk.c @@ -3,7 +3,7 @@ formats/esq8_dsk.c Formats for 8-bit Ensoniq synthesizers and samplers - + Disk is PC MFM, 40 tracks, single (Mirage) or double (SQ-80) sided, with 6 sectors per track. Sectors 0-4 are 1024 bytes, sector 5 is 512 bytes @@ -119,9 +119,9 @@ bool esq8img_format::load(io_generic *io, UINT32 form_factor, floppy_image *imag int track_size = (5*1024) + 512; - for(int track=0; track < track_count; track++) + for(int track=0; track < track_count; track++) { - for(int head=0; head < head_count; head++) + for(int head=0; head < head_count; head++) { io_generic_read(io, sectdata, (track*head_count + head)*track_size, track_size); generate_track(esq_6_desc, track, head, sectors, sector_count, 109376, image); @@ -149,7 +149,7 @@ bool esq8img_format::save(io_generic *io, floppy_image *image) sector_count = 6; UINT8 sectdata[10*512]; - int track_size = (5*1024) + 512; + int track_size = (5*1024) + 512; for(int track=0; track < track_count; track++) { for(int head=0; head < head_count; head++) { diff --git a/src/lib/formats/esq8_dsk.h b/src/lib/formats/esq8_dsk.h index 57e096e..3df6400 100644 --- a/src/lib/formats/esq8_dsk.h +++ b/src/lib/formats/esq8_dsk.h @@ -3,7 +3,7 @@ formats/esq8_dsk.h Formats for 8-bit Ensoniq synthesizers and samplers - + Disk is PC MFM, 40 tracks, single (Mirage) or double (SQ-80) sided, with 6 sectors per track. Sectors 0-4 are 1024 bytes, sector 5 is 512 bytes diff --git a/src/mame/drivers/8080bw.c b/src/mame/drivers/8080bw.c index 0318d40..15e692f 100644 --- a/src/mame/drivers/8080bw.c +++ b/src/mame/drivers/8080bw.c @@ -2516,7 +2516,7 @@ WRITE8_MEMBER(_8080bw_state::invmulti_eeprom_w) // d6: reset eeprom->set_cs_line((data & 0x40) ? CLEAR_LINE : ASSERT_LINE); - + // d4: write latch or select next bit to read eeprom->set_clock_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); } @@ -2532,7 +2532,7 @@ WRITE8_MEMBER(_8080bw_state::invmulti_bank_w) static MACHINE_RESET( invmulti ) { _8080bw_state *state = machine.driver_data<_8080bw_state>(); - + state->invmulti_bank_w(*state->m_maincpu->memory().space(AS_PROGRAM), 0, 0); MACHINE_RESET_CALL(mw8080bw); @@ -2543,9 +2543,9 @@ MACHINE_CONFIG_DERIVED_CLASS( invmulti, invaders, _8080bw_state ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(invmulti_map) - + MCFG_EEPROM_93C46_8BIT_ADD("eeprom") - + MCFG_MACHINE_RESET(invmulti) MACHINE_CONFIG_END diff --git a/src/mame/drivers/atlantis.c b/src/mame/drivers/atlantis.c index 88f09f2..22678df 100644 --- a/src/mame/drivers/atlantis.c +++ b/src/mame/drivers/atlantis.c @@ -8,7 +8,7 @@ * Midway Skins Game * Midway Skins Game Tournament Edition (not dumped) * Midway Swingers Tour (not dumped) - + Hardware overview: * VR4310 CPU (similar to the N64's VR4300) * VR4373 "Nile 3" system controller / PCI bridge @@ -18,12 +18,12 @@ * Midway Zeus-series custom video * TL16c552 dual UART * ADSP-2181 based DCS2 audio (unclear which variant) - + TODO: * Proper VR4373 implementation * Proper PCI bus implementation * PCI peripherals - + ***************************************************************************/ #include "emu.h" @@ -50,7 +50,7 @@ public: static MACHINE_START( mwskins ) { -// atlantis_state *state = machine.driver_data<atlantis_state>(); +// atlantis_state *state = machine.driver_data<atlantis_state>(); /* set the fastest DRC options */ mips3drc_set_options(machine.device("maincpu"), MIPS3DRC_FASTEST_OPTIONS); } @@ -173,7 +173,7 @@ MACHINE_CONFIG_END ROM_START( mwskins ) ROM_REGION32_LE( 0x80000, "user1", 0 ) /* 512k for R4310 code */ - ROM_LOAD( "skins_game_u4_boot_1.00.u4", 0x000000, 0x080000, CRC(0fe87720) SHA1(4b24abbe662a2d7b61e6a3f079e28b73605ba19f) ) + ROM_LOAD( "skins_game_u4_boot_1.00.u4", 0x000000, 0x080000, CRC(0fe87720) SHA1(4b24abbe662a2d7b61e6a3f079e28b73605ba19f) ) DISK_REGION( "drive_0" ) DISK_IMAGE( "mwskins", 0, SHA1(5cb293a6fdb2478293f48ddfc93cdd018acb2bb5) ) @@ -181,7 +181,7 @@ ROM_END ROM_START( mwskinsa ) ROM_REGION32_LE( 0x80000, "user1", 0 ) /* 512k for R4310 code */ - ROM_LOAD( "skins_game_u4_boot_1.00.u4", 0x000000, 0x080000, CRC(0fe87720) SHA1(4b24abbe662a2d7b61e6a3f079e28b73605ba19f) ) + ROM_LOAD( "skins_game_u4_boot_1.00.u4", 0x000000, 0x080000, CRC(0fe87720) SHA1(4b24abbe662a2d7b61e6a3f079e28b73605ba19f) ) DISK_REGION( "drive_0" ) DISK_IMAGE( "mwskinsa", 0, SHA1(72497917b31156eb11a46bbcc6f22a254dcec044) ) diff --git a/src/mame/drivers/blitz68k.c b/src/mame/drivers/blitz68k.c index 8ad14d9..685846e 100644 --- a/src/mame/drivers/blitz68k.c +++ b/src/mame/drivers/blitz68k.c @@ -2807,7 +2807,7 @@ static DRIVER_INIT( cj3play ) // loop ROM[0x2773c/2] = 0x4e71; -// ROM[0x3491a/2] = 0x4e71; +// ROM[0x3491a/2] = 0x4e71; // ERROR CHECKSUM ROM PROGRAM ROM[0x20ab0/2] = 0x6050; diff --git a/src/mame/drivers/centiped.c b/src/mame/drivers/centiped.c index de8becc..88efd0f 100644 --- a/src/mame/drivers/centiped.c +++ b/src/mame/drivers/centiped.c @@ -617,7 +617,7 @@ READ8_MEMBER(centiped_state::bullsdrt_data_port_r) case 0x0033: case 0x6b19: return 0x01; - + default: break; } @@ -873,7 +873,7 @@ WRITE8_MEMBER(centiped_state::multiped_prgbank_w) { m_prg_bank = bank; multiped_gfxbank_w(space, 0, m_gfx_bank << 6); - + // TODO: prg bankswitch and alt memory map layout for centiped } } diff --git a/src/mame/drivers/cmmb.c b/src/mame/drivers/cmmb.c index 5917a91..d369083 100644 --- a/src/mame/drivers/cmmb.c +++ b/src/mame/drivers/cmmb.c @@ -303,7 +303,7 @@ static INTERRUPT_GEN( cmmb_irq ) { //if(device->machine().input().code_pressed_once(KEYCODE_Z)) //if(device->machine().input().code_pressed(KEYCODE_Z)) -// device_set_input_line(device, 0, HOLD_LINE); +// device_set_input_line(device, 0, HOLD_LINE); } static MACHINE_RESET( cmmb ) diff --git a/src/mame/drivers/ddenlovr.c b/src/mame/drivers/ddenlovr.c index 42b4392..0f7f583 100644 --- a/src/mame/drivers/ddenlovr.c +++ b/src/mame/drivers/ddenlovr.c @@ -3724,7 +3724,7 @@ READ8_MEMBER(dynax_state::daimyojn_keyb1_r) else if (!BIT(m_keyb, 3)) val = ioport("KEY3")->read() | hopper_bit; else if (!BIT(m_keyb, 4)) val = ioport("KEY4")->read() | hopper_bit; -// val |= ioport("BET")->read(); +// val |= ioport("BET")->read(); return val; } @@ -8563,7 +8563,7 @@ static const ay8910_interface quiz365_ay8910_interface = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - // A B + // A B DEVCB_HANDLER(quiz365_input_r), DEVCB_NULL, // R DEVCB_NULL, DEVCB_HANDLER(ddenlovr_select_w) // W }; @@ -8963,7 +8963,7 @@ static const ay8910_interface mjmyster_ay8910_interface = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - // A B + // A B DEVCB_NULL, DEVCB_NULL, // R DEVCB_NULL, DEVCB_HANDLER(ddenlovr_select_w) // W }; @@ -9035,7 +9035,7 @@ static const ay8910_interface hginga_ay8910_interface = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - // A B + // A B DEVCB_HANDLER(hginga_dsw_r), DEVCB_NULL, // R DEVCB_NULL, DEVCB_HANDLER(ddenlovr_select_w) // W }; @@ -9355,7 +9355,7 @@ static const ay8910_interface seljan2_ay8910_interface = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - // A B + // A B DEVCB_HANDLER(seljan2_dsw_r), DEVCB_NULL, // R DEVCB_NULL, DEVCB_HANDLER(ddenlovr_select_w) // W }; diff --git a/src/mame/drivers/dec0.c b/src/mame/drivers/dec0.c index fb1bc11..a7f4d24 100644 --- a/src/mame/drivers/dec0.c +++ b/src/mame/drivers/dec0.c @@ -635,8 +635,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( secretab_map, AS_PROGRAM, 16, dec0_automat_state ) AM_RANGE(0x000000, 0x05ffff) AM_ROM -// AM_RANGE(0x240000, 0x240007) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_0_w) -// AM_RANGE(0x240010, 0x240017) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_1_w) +// AM_RANGE(0x240000, 0x240007) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_0_w) +// AM_RANGE(0x240010, 0x240017) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_1_w) AM_RANGE(0x246000, 0x247fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_data_r, deco_bac06_pf_data_w) // AM_RANGE(0x240000, 0x24007f) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_colscroll_r, deco_bac06_pf_colscroll_w) // AM_RANGE(0x240400, 0x2407ff) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_rowscroll_r, deco_bac06_pf_rowscroll_w) diff --git a/src/mame/drivers/eolith.c b/src/mame/drivers/eolith.c index 5b6c811..c76bd10 100644 --- a/src/mame/drivers/eolith.c +++ b/src/mame/drivers/eolith.c @@ -161,7 +161,7 @@ READ32_MEMBER(eolith_state::hidctch3_pen2_r) WRITE32_MEMBER( eolith_state::sound_w ) { -// printf("CPU Command: %x\n", m_sound_data); +// printf("CPU Command: %x\n", m_sound_data); m_sound_data = data; m_soundcpu->set_input_line(MCS51_INT0_LINE, ASSERT_LINE); @@ -196,16 +196,16 @@ WRITE8_MEMBER( eolith_state::sound_p1_w ) *************************************/ /* - Possible port mapping: - - P30 (O) A16 (RxD) - P31 (O) A17 (TxD) - P32 (O) A18 (/INT0) - P33 (I) INT_68 (/INT1) - P34 (O) PCM1 (T0) - P35 (O) SET_INT (T1) - P36 (O) PCM0 - P37 (O) RDB (/RD) + Possible port mapping: + + P30 (O) A16 (RxD) + P31 (O) A17 (TxD) + P32 (O) A18 (/INT0) + P33 (I) INT_68 (/INT1) + P34 (O) PCM1 (T0) + P35 (O) SET_INT (T1) + P36 (O) PCM0 + P37 (O) RDB (/RD) */ READ8_MEMBER( eolith_state::qs1000_p1_r ) @@ -225,12 +225,12 @@ WRITE8_MEMBER( eolith_state::qs1000_p1_w ) * Sound CPU <-> QS1000 CPU * *************************************/ - + static void soundcpu_to_qs1000(device_t *device, int data) { qs1000_device *qs1000 = device->machine().device<qs1000_device>("qs1000"); qs1000->serial_in(data); - + device->machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(250)); } @@ -240,7 +240,7 @@ static void soundcpu_to_qs1000(device_t *device, int data) * Main CPU memory map * *************************************/ - + static ADDRESS_MAP_START( eolith_map, AS_PROGRAM, 32, eolith_state ) AM_RANGE(0x00000000, 0x001fffff) AM_RAM // fort2b wants ram here AM_RANGE(0x40000000, 0x401fffff) AM_RAM @@ -268,7 +268,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, eolith_state ) AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("sound_bank") AM_RANGE(0x8000, 0x8000) AM_READ(sound_cmd_r) - AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(sound_p1_w) + AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(sound_p1_w) ADDRESS_MAP_END @@ -277,7 +277,7 @@ ADDRESS_MAP_END * Inputs * *************************************/ - + static INPUT_PORTS_START( common ) PORT_START("IN0") PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_START1 ) @@ -549,7 +549,7 @@ static QS1000_INTERFACE( qs1000_intf ) { /* External ROM */ true, - + /* P1-P3 read handlers */ DEVCB_DRIVER_MEMBER(eolith_state, qs1000_p1_r), DEVCB_NULL, @@ -582,9 +582,9 @@ static MACHINE_CONFIG_START( eolith45, eolith_state ) MCFG_EEPROM_ADD("eeprom", eeprom_interface_93C66) -// for testing sound sync -// MCFG_QUANTUM_PERFECT_CPU("maincpu") -// MCFG_QUANTUM_TIME(attotime::from_hz(6000)) +// for testing sound sync +// MCFG_QUANTUM_PERFECT_CPU("maincpu") +// MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -694,9 +694,9 @@ ROM_START( ironfort ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "u108", 0x00000, 0x80000, CRC(89233144) SHA1(74e87679a7559450934b80fcfcb667d9845977a7) ) /* 27C040 eprom with no label */ - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "u107", 0x0000, 0x8000, CRC(89450a2f) SHA1(d58efa805f497bec179fdbfb8c5860ac5438b4ec) ) /* 27C256 eprom with no label */ + ROM_LOAD( "u107", 0x0000, 0x8000, CRC(89450a2f) SHA1(d58efa805f497bec179fdbfb8c5860ac5438b4ec) ) /* 27C256 eprom with no label */ ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ ROM_LOAD( "u97", 0x00000, 0x80000, CRC(47b9d43a) SHA1(e0bc42892480cb563dc694fcefa8ca0b984749dd) ) /* 27C040 eprom with no label */ @@ -744,12 +744,12 @@ ROM_START( linkypip ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "u108.bin", 0x00000, 0x80000, CRC(ca65856f) SHA1(f45868552389ccd637b5ccb1067b94e1226001ce) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "u107.bin", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) + ROM_LOAD( "u107.bin", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "u97.bin", 0x00000, 0x80000, CRC(4465fe8d) SHA1(4d77169fff2fee5424e8da833088a544318b2981) ) + ROM_LOAD( "u97.bin", 0x00000, 0x80000, CRC(4465fe8d) SHA1(4d77169fff2fee5424e8da833088a544318b2981) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -844,9 +844,9 @@ ROM_START( nhidctch ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "u108", 0x00000, 0x80000, CRC(2bae46cb) SHA1(7c43f1002dfc20b9c1bb1647f7261dfa7ed2b4f9) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) + ROM_LOAD( "u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ ROM_LOAD( "u97", 0x00000, 0x80000, CRC(ebf9f77b) SHA1(5d472aeb84fc011e19b9e61d34aeddfe7d6ac216) ) @@ -923,15 +923,15 @@ ROM_START( hidctch2 ) ROM_REGION( 0x008000, "soundcpu", 0 ) /* AT89c52 */ /* This is the first 2K of hc2j.u111 from hidctch2a, verify against the internal dump when decapped */ ROM_LOAD( "hc2.103", 0x0000, 0x0800, BAD_DUMP CRC(92797034) SHA1(b600f19972986b2e09c56be0ea0c09f92a9fe422) ) /* MCU internal 2K flash */ - + ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "u108", 0x00000, 0x80000, CRC(75fc7a65) SHA1(308715ab62d28787ee894ddcf7304464e2543b2e) ) ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "u107", 0x0000, 0x8000, CRC(89450a2f) SHA1(d58efa805f497bec179fdbfb8c5860ac5438b4ec) ) + ROM_LOAD( "u107", 0x0000, 0x8000, CRC(89450a2f) SHA1(d58efa805f497bec179fdbfb8c5860ac5438b4ec) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "u97", 0x00000, 0x80000, CRC(a7a1627e) SHA1(a93ced858d839daac1fa9a85f4f8c89cb179bad5) ) + ROM_LOAD( "u97", 0x00000, 0x80000, CRC(a7a1627e) SHA1(a93ced858d839daac1fa9a85f4f8c89cb179bad5) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -962,12 +962,12 @@ ROM_START( hidctch2a ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "u108", 0x00000, 0x80000, CRC(75fc7a65) SHA1(308715ab62d28787ee894ddcf7304464e2543b2e) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ ROM_LOAD( "u107", 0x0000, 0x8000, CRC(89450a2f) SHA1(d58efa805f497bec179fdbfb8c5860ac5438b4ec) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "u97", 0x00000, 0x80000, CRC(a7a1627e) SHA1(a93ced858d839daac1fa9a85f4f8c89cb179bad5) ) + ROM_LOAD( "u97", 0x00000, 0x80000, CRC(a7a1627e) SHA1(a93ced858d839daac1fa9a85f4f8c89cb179bad5) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1053,12 +1053,12 @@ ROM_START( raccoon ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "racoon-u.108", 0x00000, 0x80000, CRC(fc4f30ee) SHA1(74b9e60cceb03ad572e0e080fbe1de5cffa1b2c3) ) - + ROM_REGION( 0x08000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "racoon-u.107", 0x0000, 0x8000, CRC(89450a2f) SHA1(d58efa805f497bec179fdbfb8c5860ac5438b4ec) ) + ROM_LOAD( "racoon-u.107", 0x0000, 0x8000, CRC(89450a2f) SHA1(d58efa805f497bec179fdbfb8c5860ac5438b4ec) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "racoon-u.97", 0x00000, 0x80000, CRC(fef828b1) SHA1(38352b67d18300db40113df9426c2aceec12a29b) ) + ROM_LOAD( "racoon-u.97", 0x00000, 0x80000, CRC(fef828b1) SHA1(38352b67d18300db40113df9426c2aceec12a29b) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1091,12 +1091,12 @@ ROM_START( landbrk ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "rom2.u108", 0x00000, 0x80000, CRC(f3b327ef) SHA1(4b359171afd6ca10275961f795f3fe64f9df9897) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "lb.107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) + ROM_LOAD( "lb.107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "lb_3.u97", 0x00000, 0x80000, CRC(5b34dff0) SHA1(1668763e977e272781ddcc74beba97b53477cc9d) ) + ROM_LOAD( "lb_3.u97", 0x00000, 0x80000, CRC(5b34dff0) SHA1(1668763e977e272781ddcc74beba97b53477cc9d) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1121,12 +1121,12 @@ ROM_START( landbrka ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "lb_2.108", 0x00000, 0x80000, CRC(a99182d7) SHA1(628c8d09efb3917a4e97d9e02b6b0ca1f339825d) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "lb.107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) + ROM_LOAD( "lb.107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "lb_3.u97", 0x00000, 0x80000, CRC(5b34dff0) SHA1(1668763e977e272781ddcc74beba97b53477cc9d) ) + ROM_LOAD( "lb_3.u97", 0x00000, 0x80000, CRC(5b34dff0) SHA1(1668763e977e272781ddcc74beba97b53477cc9d) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1158,9 +1158,9 @@ ROM_START( penfan ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "pfg.u108", 0x00000, 0x80000, CRC(ac97c23b) SHA1(85319cbff811c84af2a802c2f609bd58cf9e7bc3) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "pfg.u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) + ROM_LOAD( "pfg.u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ ROM_LOAD( "pfg.u97", 0x00000, 0x80000, CRC(0c713eef) SHA1(4c4ea19fec5af4f0cb983c8b9f71152d05c15047) ) @@ -1196,12 +1196,12 @@ ROM_START( stealsee ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "ss.u108", 0x00000, 0x80000, CRC(95bd136d) SHA1(a6e2d75fc5e8d600d4dceab13c596f6a7edb6e72) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ ROM_LOAD( "ss.u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "ss.u97", 0x00000, 0x80000, CRC(56c9f4a4) SHA1(dfc7cb8b68ec9e77854287b8998131e3ef4ca18d) ) + ROM_LOAD( "ss.u97", 0x00000, 0x80000, CRC(56c9f4a4) SHA1(dfc7cb8b68ec9e77854287b8998131e3ef4ca18d) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1270,9 +1270,9 @@ ROM_START( fort2b ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "3.u108", 0x00000, 0x80000, CRC(9b996b60) SHA1(c4e34601f754ae2908dd6d59ea9da0c5c6f56f2d) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "5.u107", 0x00000, 0x08000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) + ROM_LOAD( "5.u107", 0x00000, 0x08000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sapmle ROMs */ ROM_LOAD( "2.u97", 0x00000, 0x80000, CRC(8a431b14) SHA1(5a9824280f30ef2e7b7f16652b2f9f9559cb764f) ) @@ -1299,12 +1299,12 @@ ROM_START( fort2ba ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "ftii009.u108", 0x00000, 0x80000, CRC(9b996b60) SHA1(c4e34601f754ae2908dd6d59ea9da0c5c6f56f2d) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "ftii010.u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) + ROM_LOAD( "ftii010.u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "ftii011.u97", 0x00000, 0x80000, CRC(8a431b14) SHA1(5a9824280f30ef2e7b7f16652b2f9f9559cb764f) ) + ROM_LOAD( "ftii011.u97", 0x00000, 0x80000, CRC(8a431b14) SHA1(5a9824280f30ef2e7b7f16652b2f9f9559cb764f) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1337,12 +1337,12 @@ ROM_START( puzzlekg ) ROM_REGION( 0x080000, "sounddata", 0 ) /* Music data */ ROM_LOAD( "u108.bin", 0x00000, 0x80000, CRC(e4555c6b) SHA1(128196a5b47d13ee7163981043b96f7b4b27204b) ) - + ROM_REGION( 0x008000, "qs1000:cpu", 0 ) /* QDSP (8052) Code */ - ROM_LOAD( "u107.bin", 0x0000, 0x8000, CRC(f3add818) SHA1(96e77950154ced9f3234200de2aa29060c00d47f) ) + ROM_LOAD( "u107.bin", 0x0000, 0x8000, CRC(f3add818) SHA1(96e77950154ced9f3234200de2aa29060c00d47f) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "u97.bin", 0x00000, 0x80000, CRC(f4604ce8) SHA1(e061b203ef5df386120dbf089ece094d16a1b59b) ) + ROM_LOAD( "u97.bin", 0x00000, 0x80000, CRC(f4604ce8) SHA1(e061b203ef5df386120dbf089ece094d16a1b59b) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1428,7 +1428,7 @@ ROM_START( hidctch3 ) ROM_LOAD( "u107", 0x0000, 0x8000, CRC(afd5263d) SHA1(71ace1b749d8a6b84d08b97185e7e512d04e4b8d) ) ROM_REGION( 0x1000000, "qs1000", 0 ) /* QDSP sample ROMs */ - ROM_LOAD( "u97", 0x00000, 0x80000, CRC(6d37aa1a) SHA1(6827e500d9bf66e2e9236be563456ff88c78db91) ) + ROM_LOAD( "u97", 0x00000, 0x80000, CRC(6d37aa1a) SHA1(6827e500d9bf66e2e9236be563456ff88c78db91) ) ROM_LOAD( "qs1001a.u96", 0x80000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) ROM_END @@ -1446,7 +1446,7 @@ static DRIVER_INIT( eolith ) // Sound CPU -> QS1000 CPU serial link i8051_set_serial_tx_callback(machine.device("soundcpu"), soundcpu_to_qs1000); - + // Configure the sound ROM banking machine.root_device().membank("sound_bank")->configure_entries(0, 16, state->memregion("sounddata")->base(), 0x8000); } @@ -1478,7 +1478,7 @@ static DRIVER_INIT( hidctch2 ) //it fails compares in memory like in landbrka UINT32 *rombase = (UINT32*)machine.root_device().memregion("maincpu")->base(); rombase[0xbcc8/4] = (rombase[0xbcc8/4] & 0xffff) | 0x03000000; /* Change BR to NOP */ - + DRIVER_INIT_CALL(eolith); } diff --git a/src/mame/drivers/eolithsp.c b/src/mame/drivers/eolithsp.c index de02750..a7c1680 100644 --- a/src/mame/drivers/eolithsp.c +++ b/src/mame/drivers/eolithsp.c @@ -25,7 +25,7 @@ void eolith_speedup_read(address_space *space) // printf("%s:eolith speedup_read data %02x\n",space->machine().describe_context(), eolith_vblank); if (eolith_vblank==0 && eolith_scanline < eolith_speedup_resume_scanline) - { + { int pc = cpu_get_pc(&space->device()); if ((pc==eolith_speedup_address) || (pc==eolith_speedup_address2)) @@ -60,9 +60,9 @@ static const struct { "fort2ba", 0x000081e0, -1, 240 }, { "penfan", 0x4001FA66, -1, 240 }, { "candy", 0x4001990C, -1, 240 }, - /* eolith16.c */ + /* eolith16.c */ { "klondkp", 0x0001a046, -1, 240 }, - /* vegaeo.c */ + /* vegaeo.c */ { "crazywar", 0x00008cf8, -1, 240 }, { NULL, 0, 0 } }; diff --git a/src/mame/drivers/ghosteo.c b/src/mame/drivers/ghosteo.c index 9243c2b..2dfcf5f 100644 --- a/src/mame/drivers/ghosteo.c +++ b/src/mame/drivers/ghosteo.c @@ -375,7 +375,7 @@ READ32_MEMBER( ghosteo_state::touryuu_port_10000000_r ) case 0xB : data = machine().root_device().ioport( "10000000-0B")->read(); break; case 0xC : data = machine().root_device().ioport( "10000000-0C")->read(); break; } -// logerror( "touryuu_port_10000000_r (%08X) -> %08X\n", port_g, data); +// logerror( "touryuu_port_10000000_r (%08X) -> %08X\n", port_g, data); return data; } @@ -729,4 +729,4 @@ static DRIVER_INIT( touryuu ) GAME( 2003, bballoon, 0, bballoon, bballoon, bballoon, ROT0, "Eolith", "BnB Arcade", GAME_NO_SOUND ) GAME( 2005, hapytour, 0, bballoon, bballoon, bballoon, ROT0, "GAV Company", "Happy Tour", GAME_NO_SOUND ) -GAME( 2005, touryuu, 0, touryuu, touryuu, touryuu, ROT0, "Yuki Enterprise", "Touryuumon (V1.1)?", GAME_NO_SOUND ) // On first boot inputs won't work, TODO: hook-up default eeprom
\ No newline at end of file +GAME( 2005, touryuu, 0, touryuu, touryuu, touryuu, ROT0, "Yuki Enterprise", "Touryuumon (V1.1)?", GAME_NO_SOUND ) // On first boot inputs won't work, TODO: hook-up default eeprom diff --git a/src/mame/drivers/igs011.c b/src/mame/drivers/igs011.c index 38e51e9..4d91e2f 100644 --- a/src/mame/drivers/igs011.c +++ b/src/mame/drivers/igs011.c @@ -748,8 +748,8 @@ static void nkishusp_decrypt(running_machine &machine) // ryukobou xor: -// if ( (j & 0x00100) && (j & 0x00400) ) -// x ^= 0x0200; +// if ( (j & 0x00100) && (j & 0x00400) ) +// x ^= 0x0200; if ( !(j & 0x00004) || !(j & 0x02000) || (!(j & 0x00080) && !(j & 0x00010) ) ) x ^= 0x0020; diff --git a/src/mame/drivers/limenko.c b/src/mame/drivers/limenko.c index 647dc2a..377e752 100644 --- a/src/mame/drivers/limenko.c +++ b/src/mame/drivers/limenko.c @@ -73,11 +73,11 @@ public: DECLARE_READ32_MEMBER(sb2003_speedup_r); DECLARE_READ32_MEMBER(spotty_speedup_r); DECLARE_CUSTOM_INPUT_MEMBER(spriteram_bit_r); - + DECLARE_READ8_MEMBER(qs1000_p1_r); DECLARE_WRITE8_MEMBER(qs1000_p1_w); DECLARE_WRITE8_MEMBER(qs1000_p2_w); - DECLARE_WRITE8_MEMBER(qs1000_p3_w); + DECLARE_WRITE8_MEMBER(qs1000_p3_w); }; @@ -164,12 +164,12 @@ WRITE32_MEMBER(limenko_state::spriteram_buffer_w) WRITE32_MEMBER(limenko_state::limenko_soundlatch_w) { - qs1000_device *qs1000 = machine().device<qs1000_device>("qs1000"); - + qs1000_device *qs1000 = machine().device<qs1000_device>("qs1000"); + soundlatch_byte_w(space, 0, data >> 16); qs1000->set_irq(ASSERT_LINE); - - machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); + + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } WRITE32_MEMBER(limenko_state::spotty_soundlatch_w) @@ -178,7 +178,7 @@ WRITE32_MEMBER(limenko_state::spotty_soundlatch_w) } READ8_MEMBER(limenko_state::qs1000_p1_r) -{ +{ return soundlatch_byte_r(space, 0); } @@ -199,7 +199,7 @@ WRITE8_MEMBER(limenko_state::qs1000_p3_w) // ..x. .... - /IRQ clear qs1000_device *qs1000 = machine().device<qs1000_device>("qs1000"); - + membank("qs1000:bank")->set_entry(data & 0x07); if (!BIT(data, 5)) @@ -727,12 +727,12 @@ static QS1000_INTERFACE( qs1000_intf ) { /* External ROM */ true, - + /* P1-P3 read handlers */ DEVCB_DRIVER_MEMBER(limenko_state, qs1000_p1_r), DEVCB_NULL, DEVCB_NULL, - + /* P1-P3 write handlers */ DEVCB_DRIVER_MEMBER(limenko_state, qs1000_p1_w), DEVCB_DRIVER_MEMBER(limenko_state, qs1000_p2_w), @@ -1118,8 +1118,8 @@ static DRIVER_INIT( common ) // Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM machine.device("qs1000:cpu")->memory().space(AS_IO)->install_read_bank(0x0100, 0xffff, "bank"); - state->membank("qs1000:bank")->configure_entries(0, 8, state->memregion("qs1000:cpu")->base()+0x100, 0x10000); - + state->membank("qs1000:bank")->configure_entries(0, 8, state->memregion("qs1000:cpu")->base()+0x100, 0x10000); + state->m_spriteram_bit = 1; } diff --git a/src/mame/drivers/midvunit.c b/src/mame/drivers/midvunit.c index cd8c379..c0578c5 100644 --- a/src/mame/drivers/midvunit.c +++ b/src/mame/drivers/midvunit.c @@ -719,7 +719,7 @@ static INPUT_PORTS_START( crusnwld ) PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x0020, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x0000, "Sitdown" ) - PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:2" ) /* Manual shows Not Used */ + PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:2" ) /* Manual shows Not Used */ PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW2:1" ) /* DSW3 at U19 */ @@ -834,7 +834,7 @@ static INPUT_PORTS_START( offroadc ) PORT_START("DSW") /* DSW2 at U97 */ - PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW2:8" ) /* Manual shows Not Used & "No Effect" for both On & Off */ + PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW2:8" ) /* Manual shows Not Used & "No Effect" for both On & Off */ PORT_DIPNAME( 0x0002, 0x0000, "Gear Shifter Switch" ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x0002, "Normally Closed" ) PORT_DIPSETTING( 0x0000, "Normally Open" ) @@ -844,7 +844,7 @@ static INPUT_PORTS_START( offroadc ) PORT_DIPNAME( 0x0008, 0x0008, "Graphic Effects" ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x0008, "Roadkill Present" ) PORT_DIPSETTING( 0x0000, "Roadkill Missing" ) - PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW2:4" ) /* Manual shows Not Used & "No Effect" for both On & Off */ + PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW2:4" ) /* Manual shows Not Used & "No Effect" for both On & Off */ PORT_DIPNAME( 0x0020, 0x0020, "Link" ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x0020, "Disabled" ) PORT_DIPSETTING( 0x0000, "Enabled" ) diff --git a/src/mame/drivers/missile.c b/src/mame/drivers/missile.c index 235f377..f51cf25 100644 --- a/src/mame/drivers/missile.c +++ b/src/mame/drivers/missile.c @@ -1310,7 +1310,7 @@ static DRIVER_INIT( missilem ) { int a = BITSWAP16(i, 15,2,3,0,8,9,7,5,1,4,6,14,13,12,10,11); int d = BITSWAP8(src[a], 3,2,4,5,6,1,7,0); - + a = i; a ^= (~a >> 1 & 0x400); a ^= (~a >> 4 & 0x100); diff --git a/src/mame/drivers/pacman.c b/src/mame/drivers/pacman.c index afaded8..6702844 100644 --- a/src/mame/drivers/pacman.c +++ b/src/mame/drivers/pacman.c @@ -798,7 +798,7 @@ READ8_MEMBER(pacman_state::rocktrv2_question_r) /* This is a kit that upgrades an original Midway Pacman PCB to allow it to run many Pacman games. - It includes two small PCBs and two PROMs. The large PCB plugs into the CPU socket at 6B and the + It includes two small PCBs and two PROMs. The large PCB plugs into the CPU socket at 6B and the Sync Bus Controller socket at 6D. The CPU that was in the socket at 6B plugs into the Super ABC PCB. The large PCB contains the following parts..... @@ -821,7 +821,7 @@ WRITE8_MEMBER(pacman_state::superabc_bank_w) membank("bank1")->set_base(memregion("maincpu")->base() + bank * 0x10000 + 0x0000); membank("bank2")->set_base(memregion("maincpu")->base() + bank * 0x10000 + 0x4000); membank("bank3")->set_base(memregion("maincpu")->base() + bank * 0x10000 + 0xa000); // looks like a15 is not connected and a16-onwards is shifted 1 bit - + if (bank != m_charbank) { m_spritebank = bank; diff --git a/src/mame/drivers/pgm2.c b/src/mame/drivers/pgm2.c index efb0fc5..24d9355 100644 --- a/src/mame/drivers/pgm2.c +++ b/src/mame/drivers/pgm2.c @@ -12,10 +12,10 @@ PGM2 Motherboard Components: - IS61LV25616AL(SRAM) - IGS037(GFX PROCESSOR) - YMZ774-S(SOUND) - R5F21256SN(extra MCU for protection and ICcard communication) + IS61LV25616AL(SRAM) + IGS037(GFX PROCESSOR) + YMZ774-S(SOUND) + R5F21256SN(extra MCU for protection and ICcard communication) */ diff --git a/src/mame/drivers/vamphalf.c b/src/mame/drivers/vamphalf.c index a2473b5..2a49cb7 100644 --- a/src/mame/drivers/vamphalf.c +++ b/src/mame/drivers/vamphalf.c @@ -95,7 +95,7 @@ public: UINT8 *m_finalgdr_backupram; int m_has_extra_gfx; UINT8 m_qs1000_data; - + DECLARE_WRITE16_MEMBER(flipscreen_w); DECLARE_WRITE32_MEMBER(flipscreen32_w); DECLARE_WRITE16_MEMBER(jmpbreak_flipscreen_w); @@ -107,7 +107,7 @@ public: DECLARE_WRITE32_MEMBER(finalgdr_prize_w); DECLARE_WRITE16_MEMBER(boonggab_prize_w); DECLARE_WRITE16_MEMBER(boonggab_lamps_w); - DECLARE_CUSTOM_INPUT_MEMBER(boonggab_photo_sensors_r); + DECLARE_CUSTOM_INPUT_MEMBER(boonggab_photo_sensors_r); DECLARE_READ16_MEMBER(vamphalf_speedup_r); DECLARE_READ16_MEMBER(vamphafk_speedup_r); @@ -136,16 +136,16 @@ public: DECLARE_WRITE32_MEMBER(finalgdr_eeprom_w); DECLARE_WRITE32_MEMBER(finalgdr_backupram_bank_w); DECLARE_READ32_MEMBER(finalgdr_backupram_r); - DECLARE_WRITE32_MEMBER(finalgdr_backupram_w); + DECLARE_WRITE32_MEMBER(finalgdr_backupram_w); DECLARE_WRITE32_MEMBER(finalgdr_oki_bank_w); DECLARE_WRITE32_MEMBER(aoh_oki_bank_w); DECLARE_WRITE16_MEMBER(boonggab_oki_bank_w); DECLARE_WRITE32_MEMBER(wyvernwg_snd_w); DECLARE_WRITE16_MEMBER(misncrft_snd_w); - + DECLARE_READ8_MEMBER(qs1000_p1_r); - DECLARE_WRITE8_MEMBER(qs1000_p3_w); + DECLARE_WRITE8_MEMBER(qs1000_p3_w); }; READ16_MEMBER(vamphalf_state::eeprom_r) @@ -363,7 +363,7 @@ WRITE32_MEMBER( vamphalf_state::wyvernwg_snd_w ) m_qs1000_data = data & 0xff; qs1000->set_irq(ASSERT_LINE); - machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } WRITE16_MEMBER( vamphalf_state::misncrft_snd_w ) @@ -372,7 +372,7 @@ WRITE16_MEMBER( vamphalf_state::misncrft_snd_w ) m_qs1000_data = data & 0xff; qs1000->set_irq(ASSERT_LINE); - machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } READ8_MEMBER( vamphalf_state::qs1000_p1_r ) @@ -422,7 +422,7 @@ static ADDRESS_MAP_START( misncrft_io, AS_IO, 16, vamphalf_state ) AM_RANGE(0x200, 0x203) AM_READ_PORT("P1_P2") AM_RANGE(0x240, 0x243) AM_READ_PORT("SYSTEM") AM_RANGE(0x3c0, 0x3c3) AM_WRITE(eeprom_w) - AM_RANGE(0x400, 0x403) AM_WRITE(misncrft_snd_w) + AM_RANGE(0x400, 0x403) AM_WRITE(misncrft_snd_w) AM_RANGE(0x580, 0x583) AM_READ(eeprom_r) ADDRESS_MAP_END @@ -731,7 +731,7 @@ static SCREEN_UPDATE_IND16( common ) static SCREEN_UPDATE_IND16( aoh ) { -// vamphalf_handle_flipped_visible_area(screen); // not on this? +// vamphalf_handle_flipped_visible_area(screen); // not on this? bitmap.fill(0, cliprect); draw_sprites_aoh(screen, bitmap); return 0; @@ -933,7 +933,7 @@ static QS1000_INTERFACE( qs1000_intf ) { /* External ROM */ true, - + /* P1-P3 read handlers */ DEVCB_DRIVER_MEMBER(vamphalf_state, qs1000_p1_r), DEVCB_NULL, @@ -1869,7 +1869,7 @@ ROM_START( misncrft ) ROM_RELOAD( 0x20000, 0x20000 ) ROM_RELOAD( 0x40000, 0x20000 ) ROM_RELOAD( 0x60000, 0x20000 ) - + ROM_REGION( 0x800000, "gfx1", 0 ) ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(748c5ae5) SHA1(28005f655920e18c82eccf05c0c449dac16ee36e) ) ROM_LOAD32_WORD( "romh00", 0x000002, 0x200000, CRC(f34ae697) SHA1(2282e3ef2d100f3eea0167b25b66b35a64ddb0f8) ) @@ -2461,10 +2461,10 @@ static DRIVER_INIT( misncrft ) state->m_palshift = 0; state->m_flip_bit = 1; - + // Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM machine.device("qs1000:cpu")->memory().space(AS_IO)->install_read_bank(0x0100, 0xffff, "data"); - state->membank("qs1000:data")->configure_entries(0, 16, state->memregion("qs1000:cpu")->base()+0x100, 0x8000-0x100); + state->membank("qs1000:data")->configure_entries(0, 16, state->memregion("qs1000:cpu")->base()+0x100, 0x8000-0x100); } static DRIVER_INIT( coolmini ) diff --git a/src/mame/drivers/vegaeo.c b/src/mame/drivers/vegaeo.c index e0c2fa2..e6fde2e 100644 --- a/src/mame/drivers/vegaeo.c +++ b/src/mame/drivers/vegaeo.c @@ -64,7 +64,7 @@ WRITE8_MEMBER( vegaeo_state::qs1000_p3_w ) qs1000_device *qs1000 = machine().device<qs1000_device>("qs1000"); - membank("qs1000:bank")->set_entry(data & 0x07); + membank("qs1000:bank")->set_entry(data & 0x07); if (!BIT(data, 5)) qs1000->set_irq(CLEAR_LINE); diff --git a/src/mame/drivers/wildpkr.c b/src/mame/drivers/wildpkr.c index 5718e7d..a54ddc6 100644 --- a/src/mame/drivers/wildpkr.c +++ b/src/mame/drivers/wildpkr.c @@ -22,7 +22,7 @@ CPU: - 1x MC68000P12 ; 68000 CPU @ 12 MHz, from Motorola. - 1x D8751H ; 8751 MCU (3.6864 MHz?) - + Sound device: - 1x AY8930 ; Sound IC, from Yamaha. @@ -32,12 +32,12 @@ - 2x HD63486CP32 ; Hitachi - Graphic Video Attribute Controller (GVAC). Other: - - 1x MC68681 ; Motorola - Dual Asynchronous Receiver/Transmitter. + - 1x MC68681 ; Motorola - Dual Asynchronous Receiver/Transmitter. - 4x XTALs.... ; 3.6864 / 12.000 / 26.000 / 24.000 MHz. - + .--------. PCB Layout: --+--------+-- - .---------------------------------------------------------------------------------------+ +-----------------------------------------------------. + .---------------------------------------------------------------------------------------+ +-----------------------------------------------------. | | DB9 | | | .--------. .--------. | | .--------. | | |::::::::| |::::::::| '--------' |74HCT32P| | @@ -101,12 +101,12 @@ XTAL 1: 3.6864 MHz. XTAL 2: 12.000 MHz. XTAL 3: 26.000 MHz. - XTAL 4: 24.000 MHz. + XTAL 4: 24.000 MHz. TL: TL7705ACP - DSW1: DSW2: DSW3: DSW4: + DSW1: DSW2: DSW3: DSW4: .--------. .--------. .--------. .--------. 1| oo oooo|8 1|oooooooo|8 1|oooooooo|8 1| o |8 ON |--------| |--------| |--------| |--------| @@ -128,7 +128,7 @@ --------------------------------- 00000 - 7FFFF ; ROM space. - + ******************************************************************************* @@ -184,7 +184,7 @@ static VIDEO_START( wildpkr ) static SCREEN_UPDATE_IND16( wildpkr ) { -// wildpkr_state *state = screen.machine().driver_data<wildpkr_state>(); +// wildpkr_state *state = screen.machine().driver_data<wildpkr_state>(); return 0; } @@ -266,7 +266,7 @@ static MACHINE_CONFIG_START( wildpkr, wildpkr_state ) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1) MCFG_SCREEN_UPDATE_STATIC(wildpkr) -// MCFG_HD63484_ADD("hd63484", wildpkr_hd63484_intf) +// MCFG_HD63484_ADD("hd63484", wildpkr_hd63484_intf) MCFG_PALETTE_INIT(wildpkr) MCFG_PALETTE_LENGTH(256) diff --git a/src/mame/includes/eolith.h b/src/mame/includes/eolith.h index d6f6659..8efe788 100644 --- a/src/mame/includes/eolith.h +++ b/src/mame/includes/eolith.h @@ -4,13 +4,13 @@ public: eolith_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_soundcpu(*this, "soundcpu") + m_soundcpu(*this, "soundcpu") { } int m_coin_counter_bit; int m_buffer; UINT32 *m_vram; - + UINT8 m_sound_data; UINT8 m_data_to_qs1000; @@ -19,17 +19,17 @@ public: DECLARE_READ32_MEMBER(eolith_custom_r); DECLARE_WRITE32_MEMBER(systemcontrol_w); - DECLARE_WRITE32_MEMBER(sound_w); + DECLARE_WRITE32_MEMBER(sound_w); DECLARE_READ32_MEMBER(hidctch3_pen1_r); DECLARE_READ32_MEMBER(hidctch3_pen2_r); DECLARE_WRITE32_MEMBER(eolith_vram_w); DECLARE_READ32_MEMBER(eolith_vram_r); DECLARE_CUSTOM_INPUT_MEMBER(eolith_speedup_getvblank); DECLARE_CUSTOM_INPUT_MEMBER(stealsee_speedup_getvblank); - + DECLARE_READ8_MEMBER(sound_cmd_r); DECLARE_WRITE8_MEMBER(sound_p1_w); - + DECLARE_READ8_MEMBER(qs1000_p1_r); DECLARE_WRITE8_MEMBER(qs1000_p1_w); }; diff --git a/src/mame/video/dec0.c b/src/mame/video/dec0.c index 703954c..88bdaf8 100644 --- a/src/mame/video/dec0.c +++ b/src/mame/video/dec0.c @@ -386,7 +386,7 @@ VIDEO_START( dec0 ) VIDEO_START( automat ) { -// dec0_state *state = machine.driver_data<dec0_state>(); +// dec0_state *state = machine.driver_data<dec0_state>(); } /******************************************************************************/ diff --git a/src/mame/video/decmxc06.c b/src/mame/video/decmxc06.c index 4020a7c..6615a64 100644 --- a/src/mame/video/decmxc06.c +++ b/src/mame/video/decmxc06.c @@ -167,7 +167,7 @@ void deco_mxc06_device::draw_sprites_bootleg( running_machine &machine, bitmap_i while (offs < 0x800 / 2) { int sx, sy, code, color, flipx, flipy; - + code = spriteram[offs]; sy = 240-spriteram[offs + 1]; // 241- will align robocop with the ground but causes other issues too sx = spriteram[offs + 2]; diff --git a/src/mess/drivers/at.c b/src/mess/drivers/at.c index ffc7b4e..fcbf20a 100644 --- a/src/mess/drivers/at.c +++ b/src/mess/drivers/at.c @@ -207,7 +207,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( at586_io, AS_IO, 32, at586_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_device, read, write) + AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_device, read, write) ADDRESS_MAP_END static ADDRESS_MAP_START( megapc_io, AS_IO, 32, at_state ) @@ -607,7 +607,7 @@ MACHINE_CONFIG_END const struct i82439tx_interface tx_config = { - "maincpu", + "maincpu", "isa" }; @@ -627,14 +627,14 @@ static MACHINE_CONFIG_START( at586, at586_state ) MCFG_RAM_DEFAULT_SIZE("4M") MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M") - MCFG_PCI_BUS_ADD("pcibus", 0) + MCFG_PCI_BUS_ADD("pcibus", 0) MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "i82439tx", NULL, &tx_config, 0, true) MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "i82371ab", NULL, NULL, 0, true) - MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa1", pc_isa16_cards, "svga_et4k", NULL, false) + MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa1", pc_isa16_cards, "svga_et4k", NULL, false) MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa2", pc_isa16_cards, NULL, NULL, false) MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa3", pc_isa16_cards, NULL, NULL, false) - MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa4", pc_isa16_cards, NULL, NULL, false) + MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa4", pc_isa16_cards, NULL, NULL, false) MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa5", pc_isa16_cards, "ide_cd", ide_2nd, false) //2nd-ary IDE MACHINE_CONFIG_END diff --git a/src/mess/drivers/bebox.c b/src/mess/drivers/bebox.c index f5c7857..de3bf51 100644 --- a/src/mess/drivers/bebox.c +++ b/src/mess/drivers/bebox.c @@ -163,7 +163,7 @@ static MACHINE_CONFIG_START( bebox, bebox_state ) MCFG_PCI_BUS_ADD("pcibus", 0) MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "mpc105", NULL, &mpc105_config, 0, true) MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "cirrus", NULL, NULL, 0, true) - + /*MCFG_PCI_BUS_DEVICE(12, NULL, scsi53c810_pci_read, scsi53c810_pci_write)*/ MCFG_SMC37C78_ADD("smc37c78", pc_fdc_upd765_connected_1_drive_interface) diff --git a/src/mess/drivers/c64.c b/src/mess/drivers/c64.c index 971e2f5..b3fd6c9 100644 --- a/src/mess/drivers/c64.c +++ b/src/mess/drivers/c64.c @@ -2,12 +2,12 @@ TODO: - - tsuit215 test failures + - tsuit215 test failures - - CPUPORT (0=FF 1=FF 0=00 1=FF 1=FF 1=FF, AFTER 00 17, RIGHT 00 DF) - - IRQ (WRONG $DC0D) - - NMI (WRONG $DD0D) - - all CIA tests + - CPUPORT (0=FF 1=FF 0=00 1=FF 1=FF 1=FF, AFTER 00 17, RIGHT 00 DF) + - IRQ (WRONG $DC0D) + - NMI (WRONG $DD0D) + - all CIA tests - 64C PLA dump - clean up inputs diff --git a/src/mess/drivers/esq5505.c b/src/mess/drivers/esq5505.c index 7fc4c2f..d58e971 100644 --- a/src/mess/drivers/esq5505.c +++ b/src/mess/drivers/esq5505.c @@ -22,20 +22,20 @@ 0x340000-0x3bffff EPS/EPS-16 sample RAM 0xc00000-0xc3ffff OS ROM 0xff0000-0xffffff work RAM hi (may or may not be mirrored with work RAM low) - + Interrupts: 68681 uses custom vector 0x40 (address 0x100) 5505 interrupts are on normal autovector IRQ 1 - + 68681 GPIO lines (from VFX schematics): I0: CARTIN (if cartridge is present) - + O0: "AN0" O1: "AN1" O2: "AN2" (disk side select on EPS/EPS-16) O6: To ESPHALT pin on ES5510 O7: "SACK" - + ***************************************************************************/ @@ -536,8 +536,8 @@ ROM_START( vfx ) ROM_REGION(0x200000, "waverom", ROMREGION_ERASE00) ROM_LOAD( "u14.bin", 0x000000, 0x080000, NO_DUMP ) // type 234000 on the schematic - ROM_LOAD( "u15.bin", 0x080000, 0x080000, NO_DUMP ) - ROM_LOAD( "u16.bin", 0x100000, 0x080000, NO_DUMP ) + ROM_LOAD( "u15.bin", 0x080000, 0x080000, NO_DUMP ) + ROM_LOAD( "u16.bin", 0x100000, 0x080000, NO_DUMP ) ROM_END ROM_START( vfxsd ) @@ -547,12 +547,12 @@ ROM_START( vfxsd ) ROM_REGION(0x200000, "waverom", ROMREGION_ERASE00) ROM_LOAD( "u54.bin", 0x000000, 0x010000, NO_DUMP ) - ROM_LOAD( "u55.bin", 0x010000, 0x010000, NO_DUMP ) - ROM_LOAD( "u56.bin", 0x020000, 0x010000, NO_DUMP ) - ROM_LOAD( "u57.bin", 0x030000, 0x080000, NO_DUMP ) - ROM_LOAD( "u58.bin", 0x038000, 0x080000, NO_DUMP ) - ROM_LOAD( "u59.bin", 0x040000, 0x010000, NO_DUMP ) - ROM_LOAD( "u60.bin", 0x050000, 0x080000, NO_DUMP ) + ROM_LOAD( "u55.bin", 0x010000, 0x010000, NO_DUMP ) + ROM_LOAD( "u56.bin", 0x020000, 0x010000, NO_DUMP ) + ROM_LOAD( "u57.bin", 0x030000, 0x080000, NO_DUMP ) + ROM_LOAD( "u58.bin", 0x038000, 0x080000, NO_DUMP ) + ROM_LOAD( "u59.bin", 0x040000, 0x010000, NO_DUMP ) + ROM_LOAD( "u60.bin", 0x050000, 0x080000, NO_DUMP ) ROM_REGION(0x200000, "waverom2", ROMREGION_ERASE00) ROM_END diff --git a/src/mess/drivers/geniusiq.c b/src/mess/drivers/geniusiq.c index 0c702be..c50b2db 100644 --- a/src/mess/drivers/geniusiq.c +++ b/src/mess/drivers/geniusiq.c @@ -81,5 +81,5 @@ ROM_END /* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1997, geniusiq, 0, 0, geniusiq, geniusiq, 0, "Video Technology", "Genius IQ 128 (France)", GAME_NO_SOUND_HW)
+COMP( 1997, geniusiq, 0, 0, geniusiq, geniusiq, 0, "Video Technology", "Genius IQ 128 (France)", GAME_NO_SOUND_HW)
COMP( 1997, geniusiq_de, geniusiq, 0, geniusiq, geniusiq, 0, "Video Technology", "Genius IQ 128 (Germany)", GAME_NO_SOUND_HW)
diff --git a/src/mess/drivers/mirage.c b/src/mess/drivers/mirage.c index 254ba76..880ae5e 100644 --- a/src/mess/drivers/mirage.c +++ b/src/mess/drivers/mirage.c @@ -31,9 +31,9 @@ LED patterns 10 76543210 PORT A: 111xyzzz - -PA4/PA5 are the "enable" for the two LEDs - + +PA4/PA5 are the "enable" for the two LEDs + 7seg Display Bits '0' %11111100 $FC '1' %01100000 $60 @@ -58,7 +58,7 @@ PA4/PA5 are the "enable" for the two LEDs 'r' %00001010 $0A 'U' %01111100 $7C 'c' %00011010 $1A -'u' %01111000 $38 +'u' %01111000 $38 ***************************************************************************/ diff --git a/src/mess/drivers/pc.c b/src/mess/drivers/pc.c index 45298db..f1bcbc0 100644 --- a/src/mess/drivers/pc.c +++ b/src/mess/drivers/pc.c @@ -1256,10 +1256,10 @@ static MACHINE_CONFIG_START( mc1502, pc_state ) MCFG_PIT8253_ADD( "pit8253", mc1502_pit8253_config ) MCFG_PIC8259_ADD( "pic8259", ibm5150_pic8259_config ) - + MCFG_I8255_ADD( "ppi8255", mc1502_ppi8255_interface ) /* not complete */ MCFG_I8255_ADD( "ppi8255n2", mc1502_ppi8255_interface_2 ) /* not complete */ - + MCFG_I8251_ADD( "upd8251", default_i8251_interface ) /* video hardware */ diff --git a/src/mess/drivers/sg1000.c b/src/mess/drivers/sg1000.c index 70451b2..a20b84b 100644 --- a/src/mess/drivers/sg1000.c +++ b/src/mess/drivers/sg1000.c @@ -53,7 +53,7 @@ Notes: TODO: - - slot interface for cartridges + - slot interface for cartridges - SC-3000 return instruction referenced by R when reading ports 60-7f,e0-ff - connect PSG /READY signal to Z80 WAIT - accurate video timing diff --git a/src/mess/includes/c64.h b/src/mess/includes/c64.h index 4eb257e..62c1ba2 100644 --- a/src/mess/includes/c64.h +++ b/src/mess/includes/c64.h @@ -100,7 +100,7 @@ public: DECLARE_READ8_MEMBER( cia1_pa_r ); DECLARE_READ8_MEMBER( cia1_pb_r ); DECLARE_WRITE8_MEMBER( cia1_pb_w ); - + DECLARE_WRITE_LINE_MEMBER( cia2_irq_w ); DECLARE_READ8_MEMBER( cia2_pa_r ); DECLARE_WRITE8_MEMBER( cia2_pa_w ); diff --git a/src/mess/machine/i82371ab.c b/src/mess/machine/i82371ab.c index 005cc9a..81e5153 100644 --- a/src/mess/machine/i82371ab.c +++ b/src/mess/machine/i82371ab.c @@ -160,7 +160,7 @@ void i82371ab_device::pci_acpi_w(device_t *busdevice, int offset, UINT32 data, U UINT32 cdata = 0; int i; COMBINE_DATA(&cdata); - + logerror("i82371ab_pci_isa_w, offset = %02x, data = %08x, mem_mask = %08x\n", offset, data, mem_mask); for(i = 0; i < 4; i++, offset++, cdata >>= 8) @@ -223,7 +223,7 @@ void i82371ab_device::device_start() southbridge_device::device_start(); /* setup save states */ save_item(NAME(m_regs)); - + device_set_irq_callback(machine().device(":maincpu"), at_irq_callback); } diff --git a/src/mess/machine/i82371ab.h b/src/mess/machine/i82371ab.h index bf2c7a4..f3d8e46 100644 --- a/src/mess/machine/i82371ab.h +++ b/src/mess/machine/i82371ab.h @@ -35,13 +35,13 @@ protected: UINT32 pci_ide_r(device_t *busdevice, int offset, UINT32 mem_mask); void pci_ide_w(device_t *busdevice, int offset, UINT32 data, UINT32 mem_mask); - + UINT32 pci_usb_r(device_t *busdevice, int offset, UINT32 mem_mask); void pci_usb_w(device_t *busdevice, int offset, UINT32 data, UINT32 mem_mask); UINT32 pci_acpi_r(device_t *busdevice, int offset, UINT32 mem_mask); void pci_acpi_w(device_t *busdevice, int offset, UINT32 data, UINT32 mem_mask); - + private: UINT8 m_regs[4][0x100]; }; diff --git a/src/mess/machine/i82371sb.c b/src/mess/machine/i82371sb.c index cf39bbe..8ac1d70 100644 --- a/src/mess/machine/i82371sb.c +++ b/src/mess/machine/i82371sb.c @@ -153,7 +153,7 @@ void i82371sb_device::device_start() southbridge_device::device_start();
/* setup save states */
save_item(NAME(m_regs));
-
+
device_set_irq_callback(machine().device(":maincpu"), at_irq_callback);
}
diff --git a/src/mess/machine/i82371sb.h b/src/mess/machine/i82371sb.h index c136615..d029eda 100644 --- a/src/mess/machine/i82371sb.h +++ b/src/mess/machine/i82371sb.h @@ -35,7 +35,7 @@ protected: UINT32 pci_ide_r(device_t *busdevice, int offset, UINT32 mem_mask);
void pci_ide_w(device_t *busdevice, int offset, UINT32 data, UINT32 mem_mask);
-
+
UINT32 pci_usb_r(device_t *busdevice, int offset, UINT32 mem_mask);
void pci_usb_w(device_t *busdevice, int offset, UINT32 data, UINT32 mem_mask);
private:
diff --git a/src/mess/machine/i82439tx.h b/src/mess/machine/i82439tx.h index 0764798..1bbdea8 100644 --- a/src/mess/machine/i82439tx.h +++ b/src/mess/machine/i82439tx.h @@ -17,7 +17,7 @@ struct i82439tx_interface { const char *m_cputag; - const char *m_rom_region; + const char *m_rom_region; }; // ======================> i82439tx_device @@ -38,16 +38,16 @@ protected: virtual void device_start(); virtual void device_reset(); virtual void device_config_complete(); - + void i82439tx_configure_memory(UINT8 val, offs_t begin, offs_t end); - + private: address_space *m_space; UINT8 *m_rom; UINT32 m_regs[8]; UINT32 m_bios_ram[0x40000 / 4]; - + }; // device type definition diff --git a/src/mess/machine/isa.h b/src/mess/machine/isa.h index 17d89b6..5e5599f 100644 --- a/src/mess/machine/isa.h +++ b/src/mess/machine/isa.h @@ -236,7 +236,7 @@ public: static void static_set_isabus(device_t &device, device_t *isa_device); public: isa8_device *m_isa; - device_t *m_isa_dev; + device_t *m_isa_dev; device_isa8_card_interface *m_next; }; diff --git a/src/mess/machine/kb_7007_3.h b/src/mess/machine/kb_7007_3.h index b521503..ac80635 100644 --- a/src/mess/machine/kb_7007_3.h +++ b/src/mess/machine/kb_7007_3.h @@ -1,5 +1,5 @@ -/* - * MC 7007 keyboard, variant 3, used by mc1502. +/* + * MC 7007 keyboard, variant 3, used by mc1502. * * Rus/Lat key is mapped to RAlt. */ @@ -16,13 +16,13 @@ INPUT_PORTS_START( mc7007_3_keyboard ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_PGUP) PORT_START("Y2") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) /* 2 */ - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') /* */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) /* */ - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) /* */ - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_RALT) /* */ - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_INSERT) /* */ - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete") PORT_CODE(KEYCODE_DEL_PAD) /* */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) /* ??2 */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') /* ??? */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) /* ??? */ + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) /* ??? */ + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_RALT) /* ??? */ + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_INSERT) /* ??? */ + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete") PORT_CODE(KEYCODE_DEL_PAD) /* ???? */ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD) PORT_START("Y3") @@ -30,7 +30,7 @@ INPUT_PORTS_START( mc7007_3_keyboard ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) /* */ + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) /* ???? */ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_END) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_DOWN) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_PGDN) diff --git a/src/mess/machine/mpc105.c b/src/mess/machine/mpc105.c index ccd0666..4a7dcfe 100644 --- a/src/mess/machine/mpc105.c +++ b/src/mess/machine/mpc105.c @@ -74,7 +74,7 @@ void mpc105_device::device_config_complete() { memset(&m_cputag, 0, sizeof(m_cputag)); m_bank_base_default = 0; - + } m_shortname = "mpc105"; } diff --git a/src/mess/machine/northbridge.c b/src/mess/machine/northbridge.c index cc066f9..15bcd16 100644 --- a/src/mess/machine/northbridge.c +++ b/src/mess/machine/northbridge.c @@ -15,7 +15,7 @@ northbridge_device::northbridge_device(const machine_config &mconfig, device_typ : device_t(mconfig, type, name, tag, owner, clock), m_maincpu(*this, ":maincpu"), m_ram(*this, ":" RAM_TAG) -{ +{ } //------------------------------------------------- diff --git a/src/mess/machine/northbridge.h b/src/mess/machine/northbridge.h index 9364487..75282b0 100644 --- a/src/mess/machine/northbridge.h +++ b/src/mess/machine/northbridge.h @@ -14,7 +14,7 @@ // ======================> northbridge_device class northbridge_device : - public device_t + public device_t { public: // construction/destruction @@ -29,4 +29,4 @@ public: }; -#endif /* __NORTHBRIDGE_H__ */
\ No newline at end of file +#endif /* __NORTHBRIDGE_H__ */ diff --git a/src/mess/machine/pc.c b/src/mess/machine/pc.c index 30a55ba..ebf0bbe 100644 --- a/src/mess/machine/pc.c +++ b/src/mess/machine/pc.c @@ -1253,7 +1253,7 @@ DRIVER_INIT( pcjr ) { mess_init_pc_common(machine, PCCOMMON_KEYBOARD_PC, pcjr_set_keyb_int, pc_set_irq_line); } - + DRIVER_INIT( mc1502 ) { mess_init_pc_common(machine, 0, NULL, pc_set_irq_line); diff --git a/src/mess/machine/southbridge.c b/src/mess/machine/southbridge.c index fd28f9c..69c10f6 100644 --- a/src/mess/machine/southbridge.c +++ b/src/mess/machine/southbridge.c @@ -172,7 +172,7 @@ southbridge_device::southbridge_device(const machine_config &mconfig, device_typ m_speaker(*this, SPEAKER_TAG), m_mc146818(*this, "rtc"), m_pc_kbdc(*this, "pc_kbdc") -{ +{ } /********************************************************** * @@ -182,9 +182,9 @@ southbridge_device::southbridge_device(const machine_config &mconfig, device_typ /* IRQ_CALLBACK(southbridge_device::at_irq_callback) { - device_t *pic = device->machine().device(":pcibus:1:i82371ab:pic8259_master"); - //return pic8259_acknowledge(m_pic8259_master); - return pic8259_acknowledge(pic); + device_t *pic = device->machine().device(":pcibus:1:i82371ab:pic8259_master"); + //return pic8259_acknowledge(m_pic8259_master); + return pic8259_acknowledge(pic); } */ //------------------------------------------------- @@ -194,7 +194,7 @@ IRQ_CALLBACK(southbridge_device::at_irq_callback) void southbridge_device::device_start() { address_space* spaceio = machine().device(":maincpu")->memory().space(AS_IO); - + spaceio->install_legacy_readwrite_handler(*m_dma8237_1, 0x0000, 0x001f, FUNC(i8237_r), FUNC(i8237_w), 0xffffffff); spaceio->install_legacy_readwrite_handler(*m_pic8259_master, 0x0020, 0x003f, FUNC(pic8259_r), FUNC(pic8259_w), 0xffffffff); spaceio->install_legacy_readwrite_handler(*m_pit8254, 0x0040, 0x005f, FUNC(pit8253_r), FUNC(pit8253_w), 0xffffffff); @@ -202,10 +202,10 @@ void southbridge_device::device_start() spaceio->install_readwrite_handler(0x0064, 0x0067, read8_delegate(FUNC(at_keyboard_controller_device::status_r),&(*m_keybc)), write8_delegate(FUNC(at_keyboard_controller_device::command_w),&(*m_keybc)), 0xffffffff); spaceio->install_readwrite_handler(0x0070, 0x007f, read8_delegate(FUNC(mc146818_device::read),&(*m_mc146818)), write8_delegate(FUNC(mc146818_device::write),&(*m_mc146818)), 0xffffffff); spaceio->install_readwrite_handler(0x0080, 0x009f, read8_delegate(FUNC(southbridge_device::at_page8_r),this), write8_delegate(FUNC(southbridge_device::at_page8_w),this), 0xffffffff); - spaceio->install_legacy_readwrite_handler(*m_pic8259_slave, 0x00a0, 0x00bf, FUNC(pic8259_r), FUNC(pic8259_w), 0xffffffff); + spaceio->install_legacy_readwrite_handler(*m_pic8259_slave, 0x00a0, 0x00bf, FUNC(pic8259_r), FUNC(pic8259_w), 0xffffffff); spaceio->install_readwrite_handler(0x00c0, 0x00df, read8_delegate(FUNC(southbridge_device::at_dma8237_2_r),this), write8_delegate(FUNC(southbridge_device::at_dma8237_2_w),this), 0xffffffff); spaceio->nop_readwrite(0x00e0, 0x00ef); - + m_at_offset1 = 0xff; //device_set_irq_callback(machine().device(":maincpu"), at_irq_callback); diff --git a/src/mess/machine/southbridge.h b/src/mess/machine/southbridge.h index 40b5040..805941b 100644 --- a/src/mess/machine/southbridge.h +++ b/src/mess/machine/southbridge.h @@ -58,7 +58,7 @@ // ======================> southbridge_device class southbridge_device : - public device_t + public device_t { public: // construction/destruction @@ -145,4 +145,4 @@ protected: UINT8 m_nmi_enabled; }; -#endif /* __SOUTHBRIDGE_H__ */
\ No newline at end of file +#endif /* __SOUTHBRIDGE_H__ */ diff --git a/src/mess/machine/vcsctrl.h b/src/mess/machine/vcsctrl.h index ce51241..ff517c6 100644 --- a/src/mess/machine/vcsctrl.h +++ b/src/mess/machine/vcsctrl.h @@ -38,7 +38,7 @@ class device_vcs_control_port_interface;
class vcs_control_port_device : public device_t,
- public device_slot_interface
+ public device_slot_interface
{
public:
// construction/destruction
diff --git a/src/mess/machine/wangpc_wdc.c b/src/mess/machine/wangpc_wdc.c index d88e7f7..b5d9d97 100644 --- a/src/mess/machine/wangpc_wdc.c +++ b/src/mess/machine/wangpc_wdc.c @@ -197,7 +197,7 @@ void wangpc_wdc_device::device_reset() UINT16 wangpc_wdc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset, UINT16 mem_mask)
{
UINT16 data = 0xffff;
-
+
return data;
}
@@ -317,19 +317,19 @@ bool wangpc_wdc_device::wangpcbus_have_dack(int line) READ8_MEMBER( wangpc_wdc_device::port_r )
{
/*
-
- bit description
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
-
- */
+
+ bit description
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+
+ */
return 0x72; // TODO
}
@@ -342,7 +342,7 @@ READ8_MEMBER( wangpc_wdc_device::port_r ) WRITE8_MEMBER( wangpc_wdc_device::status_w )
{
logerror("WDC status %02x\n", data);
-
+
m_status = data;
}
diff --git a/src/mess/video/crtc_ega.c b/src/mess/video/crtc_ega.c index 17a6823..478335f 100644 --- a/src/mess/video/crtc_ega.c +++ b/src/mess/video/crtc_ega.c @@ -291,8 +291,8 @@ void crtc_ega_device::set_cur(int state) { m_cur = state; -// if ( !m_res_out_cur_func.isnull() ) -// m_res_out_cur_func( m_cur ); +// if ( !m_res_out_cur_func.isnull() ) +// m_res_out_cur_func( m_cur ); } } diff --git a/src/mess/video/isa_ega.c b/src/mess/video/isa_ega.c index 4f3fc2e..6acba3d 100644 --- a/src/mess/video/isa_ega.c +++ b/src/mess/video/isa_ega.c @@ -1198,7 +1198,7 @@ WRITE8_MEMBER( isa8_ega_device::pc_ega8_3X0_w ) { if ( VERBOSE_EGA ) { -// logerror("pc_ega_3X0_w: offset = %02x, data = %02x\n", offset, data ); +// logerror("pc_ega_3X0_w: offset = %02x, data = %02x\n", offset, data ); } switch ( offset ) @@ -1266,7 +1266,7 @@ READ8_MEMBER(isa8_ega_device::pc_ega8_3c0_r ) if ( VERBOSE_EGA ) { -// logerror("pc_ega_3c0_r: offset = %02x\n", offset ); +// logerror("pc_ega_3c0_r: offset = %02x\n", offset ); } switch ( offset ) @@ -1325,7 +1325,7 @@ WRITE8_MEMBER(isa8_ega_device::pc_ega8_3c0_w ) if ( VERBOSE_EGA ) { -// logerror("pc_ega_3c0_w: offset = %02x, data = %02x\n", offset, data ); +// logerror("pc_ega_3c0_w: offset = %02x, data = %02x\n", offset, data ); } switch ( offset ) diff --git a/src/mess/video/mos6566.c b/src/mess/video/mos6566.c index 9b6ea49..0465b8e 100644 --- a/src/mess/video/mos6566.c +++ b/src/mess/video/mos6566.c @@ -1,2817 +1,2817 @@ -/*************************************************************************** - - MOS 6566/6567/6569 Video Interface Chip (VIC-II) emulation - - A part of the code (cycle routine and drawing routines) is a modified version of the vic ii emulation used in - commodore 64 emulator "frodo" by Christian Bauer - - http://frodo.cebix.net/ - The rights on the source code remain at the author. - It may not - not even in parts - used for commercial purposes without explicit written permission by the author. - Permission to use it for non-commercial purposes is hereby granted als long as my copyright notice remains in the program. - You are not allowed to use the source to create and distribute a modified version of Frodo. - - Copyright the MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -***************************************************************************/ - -/* - - TODO: - - - cleanup - - light pen - - 1:1 sync with CPU - - remove RDY hack - - VIC IIe - -*/ - -#include "mos6566.h" - - - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define LOG 0 - - -enum -{ - REGISTER_M0X = 0, - REGISTER_M0Y, - REGISTER_M1X, - REGISTER_M1Y, - REGISTER_M2X, - REGISTER_M2Y, - REGISTER_M3X, - REGISTER_M3Y, - REGISTER_M4X, - REGISTER_M4Y, - REGISTER_M5X, - REGISTER_M5Y, - REGISTER_M6X, - REGISTER_M6Y, - REGISTER_M7X, - REGISTER_M7Y, - REGISTER_MX_MSB, - REGISTER_CR1, - REGISTER_RASTER, - REGISTER_LPX, - REGISTER_LPY, - REGISTER_ME, - REGISTER_CR2, - REGISTER_MYE, - REGISTER_MP, - REGISTER_IRQ, - REGISTER_IE, - REGISTER_MDP, - REGISTER_MMC, - REGISTER_MXE, - REGISTER_MM, - REGISTER_MD, - REGISTER_EC, - REGISTER_B0C, - REGISTER_B1C, - REGISTER_B2C, - REGISTER_B3C, - REGISTER_MM0, - REGISTER_MM1, - REGISTER_M0C, - REGISTER_M1C, - REGISTER_M2C, - REGISTER_M3C, - REGISTER_M4C, - REGISTER_M5C, - REGISTER_M6C, - REGISTER_M7C -}; - - -static const UINT8 PALETTE[] = -{ -// black, white, red, cyan -// purple, green, blue, yellow -// orange, brown, light red, dark gray, -// medium gray, light green, light blue, light gray -// taken from the vice emulator - 0x00, 0x00, 0x00, 0xfd, 0xfe, 0xfc, 0xbe, 0x1a, 0x24, 0x30, 0xe6, 0xc6, - 0xb4, 0x1a, 0xe2, 0x1f, 0xd2, 0x1e, 0x21, 0x1b, 0xae, 0xdf, 0xf6, 0x0a, - 0xb8, 0x41, 0x04, 0x6a, 0x33, 0x04, 0xfe, 0x4a, 0x57, 0x42, 0x45, 0x40, - 0x70, 0x74, 0x6f, 0x59, 0xfe, 0x59, 0x5f, 0x53, 0xfe, 0xa4, 0xa7, 0xa2 -}; - - -#define VERBOSE_LEVEL 0 -#define DBG_LOG(N,M,A) \ - do { \ - if(VERBOSE_LEVEL >= N) \ - { \ - if( M ) \ - logerror("%11.6f: %-24s", machine().time().as_double(), (char*) M ); \ - logerror A; \ - } \ - } while (0) - -#define IS_PAL ((m_variant == TYPE_6569) || (m_variant == TYPE_6572) || (m_variant == TYPE_6573) || (m_variant == TYPE_8565) || (m_variant == TYPE_8565) || (m_variant == TYPE_8569)) -#define IS_VICIIE ((m_variant == TYPE_8564) || (m_variant == TYPE_8566) || (m_variant == TYPE_8569)) - -#define ROW25_YSTART 0x33 -#define ROW25_YSTOP 0xfb -#define ROW24_YSTART 0x37 -#define ROW24_YSTOP 0xf7 - -#define RASTERLINE_2_C64(a) (a) -#define C64_2_RASTERLINE(a) (a) -#define XPOS (VIC2_STARTVISIBLECOLUMNS + (VIC2_VISIBLECOLUMNS - VIC2_HSIZE) / 2) -#define YPOS (VIC2_STARTVISIBLELINES /* + (VIC2_VISIBLELINES - VIC2_VSIZE) / 2 */) -#define FIRSTCOLUMN 50 - -/* 2008-05 FP: lightpen code needs to read input port from c64.c and cbmb.c */ - -#define LIGHTPEN_BUTTON (m_in_lightpen_button_func(0)) -#define LIGHTPEN_X_VALUE (m_in_lightpen_x_func(0)) -#define LIGHTPEN_Y_VALUE (m_in_lightpen_y_func(0)) - -/* lightpen delivers values from internal counters; they do not start with the visual area or frame area */ -#define VIC2_MAME_XPOS 0 -#define VIC2_MAME_YPOS 0 -#define VIC6567_X_BEGIN 38 -#define VIC6567_Y_BEGIN -6 /* first 6 lines after retrace not for lightpen! */ -#define VIC6569_X_BEGIN 38 -#define VIC6569_Y_BEGIN -6 -#define VIC2_X_BEGIN (IS_PAL ? VIC6569_X_BEGIN : VIC6567_X_BEGIN) -#define VIC2_Y_BEGIN (IS_PAL ? VIC6569_Y_BEGIN : VIC6567_Y_BEGIN) -#define VIC2_X_VALUE ((LIGHTPEN_X_VALUE / 1.3) + 12) -#define VIC2_Y_VALUE ((LIGHTPEN_Y_VALUE ) + 10) - -#define VIC2E_K0_LEVEL (m_reg[0x2f] & 0x01) -#define VIC2E_K1_LEVEL (m_reg[0x2f] & 0x02) -#define VIC2E_K2_LEVEL (m_reg[0x2f] & 0x04) - - -/* sprites 0 .. 7 */ -#define SPRITEON(nr) (m_reg[0x15] & (1 << nr)) -#define SPRITE_Y_EXPAND(nr) (m_reg[0x17] & (1 << nr)) -#define SPRITE_Y_SIZE(nr) (SPRITE_Y_EXPAND(nr) ? 2 * 21 : 21) -#define SPRITE_X_EXPAND(nr) (m_reg[0x1d] & (1 << nr)) -#define SPRITE_X_SIZE(nr) (SPRITE_X_EXPAND(nr) ? 2 * 24 : 24) -#define SPRITE_X_POS(nr) (m_reg[(nr) * 2] | (m_reg[0x10] & (1 << (nr)) ? 0x100 : 0)) -#define SPRITE_Y_POS(nr) (m_reg[1 + 2 * (nr)]) -#define SPRITE_MULTICOLOR(nr) (m_reg[0x1c] & (1 << nr)) -#define SPRITE_PRIORITY(nr) (m_reg[0x1b] & (1 << nr)) -#define SPRITE_MULTICOLOR1 (m_reg[0x25] & 0x0f) -#define SPRITE_MULTICOLOR2 (m_reg[0x26] & 0x0f) -#define SPRITE_COLOR(nr) (m_reg[0x27+nr] & 0x0f) -#define SPRITE_ADDR(nr) (m_videoaddr | 0x3f8 | nr) -#define SPRITE_COLL (m_reg[0x1e]) -#define SPRITE_BG_COLL (m_reg[0x1f]) - -#define GFXMODE ((m_reg[0x11] & 0x60) | (m_reg[0x16] & 0x10)) >> 4 -#define SCREENON (m_reg[0x11] & 0x10) -#define VERTICALPOS (m_reg[0x11] & 0x07) -#define HORIZONTALPOS (m_reg[0x16] & 0x07) -#define ECMON (m_reg[0x11] & 0x40) -#define HIRESON (m_reg[0x11] & 0x20) -#define COLUMNS40 (m_reg[0x16] & 0x08) /* else 38 Columns */ - -#define VIDEOADDR ((m_reg[0x18] & 0xf0) << (10 - 4)) -#define CHARGENADDR ((m_reg[0x18] & 0x0e) << 10) -#define BITMAPADDR ((data & 0x08) << 10) - -#define RASTERLINE (((m_reg[0x11] & 0x80) << 1) | m_reg[0x12]) - -#define FRAMECOLOR (m_reg[0x20] & 0x0f) -#define BACKGROUNDCOLOR (m_reg[0x21] & 0x0f) -#define MULTICOLOR1 (m_reg[0x22] & 0x0f) -#define MULTICOLOR2 (m_reg[0x23] & 0x0f) -#define FOREGROUNDCOLOR (m_reg[0x24] & 0x0f) - -#define VIC2_LINES (IS_PAL ? VIC6569_LINES : VIC6567_LINES) -#define VIC2_FIRST_DMA_LINE (IS_PAL ? VIC6569_FIRST_DMA_LINE : VIC6567_FIRST_DMA_LINE) -#define VIC2_LAST_DMA_LINE (IS_PAL ? VIC6569_LAST_DMA_LINE : VIC6567_LAST_DMA_LINE) -#define VIC2_FIRST_DISP_LINE (IS_PAL ? VIC6569_FIRST_DISP_LINE : VIC6567_FIRST_DISP_LINE) -#define VIC2_LAST_DISP_LINE (IS_PAL ? VIC6569_LAST_DISP_LINE : VIC6567_LAST_DISP_LINE) -#define VIC2_RASTER_2_EMU(a) (IS_PAL ? VIC6569_RASTER_2_EMU(a) : VIC6567_RASTER_2_EMU(a)) -#define VIC2_FIRSTCOLUMN (IS_PAL ? VIC6569_FIRSTCOLUMN : VIC6567_FIRSTCOLUMN) -#define VIC2_X_2_EMU(a) (IS_PAL ? VIC6569_X_2_EMU(a) : VIC6567_X_2_EMU(a)) - - - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type MOS6566 = &device_creator<mos6566_device>; -const device_type MOS6567 = &device_creator<mos6567_device>; -const device_type MOS8562 = &device_creator<mos8562_device>; -const device_type MOS6569 = &device_creator<mos6569_device>; -const device_type MOS8565 = &device_creator<mos8565_device>; - - -// default address maps -static ADDRESS_MAP_START( mos6566_videoram_map, AS_0, 8, mos6566_device ) - AM_RANGE(0x0000, 0x3fff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( mos6566_colorram_map, AS_1, 8, mos6566_device ) - AM_RANGE(0x000, 0x3ff) AM_RAM -ADDRESS_MAP_END - - -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *mos6566_device::memory_space_config(address_spacenum spacenum) const -{ - switch (spacenum) - { - case AS_0: return &m_videoram_space_config; - case AS_1: return &m_colorram_space_config; - default: return NULL; - } -} - - - -//************************************************************************** -// INLINE HELPERS -//************************************************************************** - -inline void mos6566_device::vic2_set_interrupt( int mask ) -{ - if (((m_reg[0x19] ^ mask) & m_reg[0x1a] & 0xf)) - { - if (!(m_reg[0x19] & 0x80)) - { - DBG_LOG(2, "vic2", ("irq start %.2x\n", mask)); - m_reg[0x19] |= 0x80; - m_out_irq_func(1); - } - } - m_reg[0x19] |= mask; -} - -inline void mos6566_device::vic2_clear_interrupt( int mask ) -{ - m_reg[0x19] &= ~mask; - if ((m_reg[0x19] & 0x80) && !(m_reg[0x19] & m_reg[0x1a] & 0xf)) - { - DBG_LOG(2, "vic2", ("irq end %.2x\n", mask)); - m_reg[0x19] &= ~0x80; - m_out_irq_func(0); - } -} - -inline UINT8 mos6566_device::read_videoram(offs_t offset) -{ - return space(AS_0)->read_byte(offset & 0x3fff); -} - -inline UINT8 mos6566_device::read_colorram(offs_t offset) -{ - return space(AS_1)->read_byte(offset & 0x3ff); -} - -// Idle access -inline void mos6566_device::vic2_idle_access() -{ - read_videoram(0x3fff); -} - -// Fetch sprite data pointer -inline void mos6566_device::vic2_spr_ptr_access( int num ) -{ - m_spr_ptr[num] = read_videoram(SPRITE_ADDR(num)) << 6; -} - -// Fetch sprite data, increment data counter -inline void mos6566_device::vic2_spr_data_access( int num, int bytenum ) -{ - if (m_spr_dma_on & (1 << num)) - { - m_spr_data[num][bytenum] = read_videoram((m_mc[num] & 0x3f) | m_spr_ptr[num]); - m_mc[num]++; - } - else - if (bytenum == 1) - vic2_idle_access(); -} - -// Turn on display if Bad Line -inline void mos6566_device::vic2_display_if_bad_line() -{ - if (m_is_bad_line) - m_display_state = 1; -} - -// Suspend CPU -inline void mos6566_device::vic2_suspend_cpu() -{ - if (m_device_suspended == 0) - { - m_first_ba_cycle = m_cycles_counter; - if (m_in_rdy_workaround_func(0) != 7 ) - { -// device_suspend(machine.firstcpu, SUSPEND_REASON_SPIN, 0); - } - m_device_suspended = 1; - } -} - -// Resume CPU -inline void mos6566_device::vic2_resume_cpu() -{ - if (m_device_suspended == 1) - { - // device_resume(machine.firstcpu, SUSPEND_REASON_SPIN); - m_device_suspended = 0; - } -} - -// Refresh access -inline void mos6566_device::vic2_refresh_access() -{ - read_videoram(0x3f00 | m_ref_cnt--); -} - - -inline void mos6566_device::vic2_fetch_if_bad_line() -{ - if (m_is_bad_line) - m_display_state = 1; -} - - -// Turn on display and matrix access and reset RC if Bad Line -inline void mos6566_device::vic2_rc_if_bad_line() -{ - if (m_is_bad_line) - { - m_display_state = 1; - m_rc = 0; - } -} - -// Sample border color and increment m_graphic_x -inline void mos6566_device::vic2_sample_border() -{ - if (m_draw_this_line) - { - if (m_border_on) - m_border_color_sample[m_cycle - 13] = FRAMECOLOR; - m_graphic_x += 8; - } -} - - -// Turn on sprite DMA if necessary -inline void mos6566_device::vic2_check_sprite_dma() -{ - int i; - UINT8 mask = 1; - - for (i = 0; i < 8; i++, mask <<= 1) - if (SPRITEON(i) && ((m_rasterline & 0xff) == SPRITE_Y_POS(i))) - { - m_spr_dma_on |= mask; - m_mc_base[i] = 0; - if (SPRITE_Y_EXPAND(i)) - m_spr_exp_y &= ~mask; - } -} - -// Video matrix access -inline void mos6566_device::vic2_matrix_access() -{ -// if (m_device_suspended == 1) - { - if (m_cycles_counter < m_first_ba_cycle) - m_matrix_line[m_ml_index] = m_color_line[m_ml_index] = 0xff; - else - { - UINT16 adr = (m_vc & 0x03ff) | VIDEOADDR; - m_matrix_line[m_ml_index] = read_videoram(adr); - m_color_line[m_ml_index] = read_colorram((adr & 0x03ff)); - } - } -} - -// Graphics data access -inline void mos6566_device::vic2_graphics_access() -{ - if (m_display_state == 1) - { - UINT16 adr; - if (HIRESON) - adr = ((m_vc & 0x03ff) << 3) | m_bitmapaddr | m_rc; - else - adr = (m_matrix_line[m_ml_index] << 3) | m_chargenaddr | m_rc; - if (ECMON) - adr &= 0xf9ff; - m_gfx_data = read_videoram(adr); - m_char_data = m_matrix_line[m_ml_index]; - m_color_data = m_color_line[m_ml_index]; - m_ml_index++; - m_vc++; - } - else - { - m_gfx_data = read_videoram((ECMON ? 0x39ff : 0x3fff)); - m_char_data = 0; - } -} - -inline void mos6566_device::vic2_draw_background() -{ - if (m_draw_this_line) - { - UINT8 c; - - switch (GFXMODE) - { - case 0: - case 1: - case 3: - c = m_colors[0]; - break; - case 2: - c = m_last_char_data & 0x0f; - break; - case 4: - if (m_last_char_data & 0x80) - if (m_last_char_data & 0x40) - c = m_colors[3]; - else - c = m_colors[2]; - else - if (m_last_char_data & 0x40) - c = m_colors[1]; - else - c = m_colors[0]; - break; - default: - c = 0; - break; - } - m_bitmap->plot_box(m_graphic_x, VIC2_RASTER_2_EMU(m_rasterline), 8, 1, c); - } -} - -inline void mos6566_device::vic2_draw_mono( UINT16 p, UINT8 c0, UINT8 c1 ) -{ - UINT8 c[2]; - UINT8 data = m_gfx_data; - - c[0] = c0; - c[1] = c1; - - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = c[data & 1]; - m_fore_coll_buf[p + 7] = data & 1; data >>= 1; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = c[data & 1]; - m_fore_coll_buf[p + 6] = data & 1; data >>= 1; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = c[data & 1]; - m_fore_coll_buf[p + 5] = data & 1; data >>= 1; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = c[data & 1]; - m_fore_coll_buf[p + 4] = data & 1; data >>= 1; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = c[data & 1]; - m_fore_coll_buf[p + 3] = data & 1; data >>= 1; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = c[data & 1]; - m_fore_coll_buf[p + 2] = data & 1; data >>= 1; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = c[data & 1]; - m_fore_coll_buf[p + 1] = data & 1; data >>= 1; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = c[data]; - m_fore_coll_buf[p + 0] = data & 1; -} - -inline void mos6566_device::vic2_draw_multi( UINT16 p, UINT8 c0, UINT8 c1, UINT8 c2, UINT8 c3 ) -{ - UINT8 c[4]; - UINT8 data = m_gfx_data; - - c[0] = c0; - c[1] = c1; - c[2] = c2; - c[3] = c3; - - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = c[data & 3]; - m_fore_coll_buf[p + 7] = data & 2; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = c[data & 3]; - m_fore_coll_buf[p + 6] = data & 2; data >>= 2; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = c[data & 3]; - m_fore_coll_buf[p + 5] = data & 2; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = c[data & 3]; - m_fore_coll_buf[p + 4] = data & 2; data >>= 2; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = c[data & 3]; - m_fore_coll_buf[p + 3] = data & 2; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = c[data & 3]; - m_fore_coll_buf[p + 2] = data & 2; data >>= 2; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = c[data]; - m_fore_coll_buf[p + 1] = data & 2; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = c[data]; - m_fore_coll_buf[p + 0] = data & 2; -} - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// mos6566_device - constructor -//------------------------------------------------- - -mos6566_device::mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, MOS6566, "MOS6566", tag, owner, clock), - device_memory_interface(mconfig, *this), - device_execute_interface(mconfig, *this), - m_icount(0), - m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)), - m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map)) -{ - m_variant = TYPE_6566; -} - -mos6566_device::mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, type, name, tag, owner, clock), - device_memory_interface(mconfig, *this), - device_execute_interface(mconfig, *this), - m_icount(0), - m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)), - m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map)) -{ -} - -mos6567_device::mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - :mos6566_device(mconfig, MOS6567, "MOS6567", tag, owner, clock) { m_variant = TYPE_6567; } - -mos6567_device::mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) - :mos6566_device(mconfig, type, name, tag, owner, clock) { } - -mos8562_device::mos8562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - :mos6567_device(mconfig, MOS8562, "MOS8562", tag, owner, clock) { m_variant = TYPE_8562; } - -mos6569_device::mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - :mos6566_device(mconfig, MOS6566, "MOS6569", tag, owner, clock) { m_variant = TYPE_6569; } - -mos6569_device::mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) - :mos6566_device(mconfig, type, name, tag, owner, clock) { } - -mos8565_device::mos8565_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - :mos6569_device(mconfig, MOS8565, "MOS8565", tag, owner, clock) { m_variant = TYPE_8565; } - - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void mos6566_device::device_config_complete() -{ - // inherit a copy of the static data - const mos6566_interface *intf = reinterpret_cast<const mos6566_interface *>(static_config()); - if (intf != NULL) - *static_cast<mos6566_interface *>(this) = *intf; - - // or initialize to defaults if none provided - else - { - } -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void mos6566_device::device_start() -{ - // set our instruction counter - m_icountptr = &m_icount; - - // resolve callbacks - m_out_irq_func.resolve(m_out_irq_cb, *this); - m_out_rdy_func.resolve(m_out_rdy_cb, *this); - m_in_lightpen_x_func.resolve(m_in_x_cb, *this); - m_in_lightpen_y_func.resolve(m_in_y_cb, *this); - m_in_lightpen_button_func.resolve(m_in_button_cb, *this); - m_in_rdy_workaround_func.resolve(m_in_rdy_cb, *this); - - m_cpu = machine().device<cpu_device>(m_cpu_tag); - - m_screen = machine().device<screen_device>(m_screen_tag); - int width = m_screen->width(); - int height = m_screen->height(); - - m_bitmap = auto_bitmap_ind16_alloc(machine(), width, height); - - // initialize palette - int i; - - for (i = 0; i < 16; i++) - { - palette_set_color_rgb(machine(), i, PALETTE[i * 3], PALETTE[i * 3 + 1], PALETTE[i * 3 + 2]); - } - - for (i = 0; i < 256; i++) - { - m_expandx[i] = 0; - if (i & 1) - m_expandx[i] |= 3; - if (i & 2) - m_expandx[i] |= 0xc; - if (i & 4) - m_expandx[i] |= 0x30; - if (i & 8) - m_expandx[i] |= 0xc0; - if (i & 0x10) - m_expandx[i] |= 0x300; - if (i & 0x20) - m_expandx[i] |= 0xc00; - if (i & 0x40) - m_expandx[i] |= 0x3000; - if (i & 0x80) - m_expandx[i] |= 0xc000; - } - - for (i = 0; i < 256; i++) - { - m_expandx_multi[i] = 0; - if (i & 1) - m_expandx_multi[i] |= 5; - if (i & 2) - m_expandx_multi[i] |= 0xa; - if (i & 4) - m_expandx_multi[i] |= 0x50; - if (i & 8) - m_expandx_multi[i] |= 0xa0; - if (i & 0x10) - m_expandx_multi[i] |= 0x500; - if (i & 0x20) - m_expandx_multi[i] |= 0xa00; - if (i & 0x40) - m_expandx_multi[i] |= 0x5000; - if (i & 0x80) - m_expandx_multi[i] |= 0xa000; - } - - // state saving - save_item(NAME(m_reg)); - - save_item(NAME(m_on)); - - //save_item(NAME(m_bitmap)); - - save_item(NAME(m_chargenaddr)); - save_item(NAME(m_videoaddr)); - save_item(NAME(m_bitmapaddr)); - - save_item(NAME(m_colors)); - save_item(NAME(m_spritemulti)); - - save_item(NAME(m_rasterline)); - save_item(NAME(m_cycles_counter)); - save_item(NAME(m_cycle)); - save_item(NAME(m_raster_x)); - save_item(NAME(m_graphic_x)); - - save_item(NAME(m_dy_start)); - save_item(NAME(m_dy_stop)); - - save_item(NAME(m_draw_this_line)); - save_item(NAME(m_is_bad_line)); - save_item(NAME(m_bad_lines_enabled)); - save_item(NAME(m_display_state)); - save_item(NAME(m_char_data)); - save_item(NAME(m_gfx_data)); - save_item(NAME(m_color_data)); - save_item(NAME(m_last_char_data)); - save_item(NAME(m_matrix_line)); - save_item(NAME(m_color_line)); - save_item(NAME(m_vblanking)); - save_item(NAME(m_ml_index)); - save_item(NAME(m_rc)); - save_item(NAME(m_vc)); - save_item(NAME(m_vc_base)); - save_item(NAME(m_ref_cnt)); - - save_item(NAME(m_spr_coll_buf)); - save_item(NAME(m_fore_coll_buf)); - save_item(NAME(m_spr_exp_y)); - save_item(NAME(m_spr_dma_on)); - save_item(NAME(m_spr_draw)); - save_item(NAME(m_spr_disp_on)); - save_item(NAME(m_spr_ptr)); - save_item(NAME(m_mc_base)); - save_item(NAME(m_mc)); - - for (i = 0; i < 8; i++) - { - save_item(NAME(m_spr_data[i]), i); - save_item(NAME(m_spr_draw_data[i]), i); - } - - save_item(NAME(m_border_on)); - save_item(NAME(m_ud_border_on)); - save_item(NAME(m_border_on_sample)); - save_item(NAME(m_border_color_sample)); - - save_item(NAME(m_first_ba_cycle)); - save_item(NAME(m_device_suspended)); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void mos6566_device::device_reset() -{ - int i, j; - - memset(m_reg, 0, ARRAY_LENGTH(m_reg)); - - for (i = 0; i < ARRAY_LENGTH(m_mc); i++) - m_mc[i] = 63; - - // from 0 to 311 (0 first, PAL) or from 0 to 261 (? first, NTSC 6567R56A) or from 0 to 262 (? first, NTSC 6567R8) - m_rasterline = 0; // VIC2_LINES - 1; - - m_cycles_counter = -1; - m_cycle = 63; - - m_on = 1; - - m_dy_start = ROW24_YSTART; - m_dy_stop = ROW24_YSTOP; - - m_draw_this_line = 0; - m_is_bad_line = 0; - m_bad_lines_enabled = 0; - m_display_state = 0; - m_char_data = 0; - m_gfx_data = 0; - m_color_data = 0; - m_last_char_data = 0; - m_vblanking = 0; - m_ml_index = 0; - m_rc = 0; - m_vc = 0; - m_vc_base = 0; - m_ref_cnt = 0; - - m_spr_exp_y = 0; - m_spr_dma_on = 0; - m_spr_draw = 0; - m_spr_disp_on = 0; - - - m_border_on = 0; - m_ud_border_on = 0; - - m_first_ba_cycle = 0; - m_device_suspended = 0; - - memset(m_matrix_line, 0, ARRAY_LENGTH(m_matrix_line)); - memset(m_color_line, 0, ARRAY_LENGTH(m_color_line)); - - memset(m_spr_coll_buf, 0, ARRAY_LENGTH(m_spr_coll_buf)); - memset(m_fore_coll_buf, 0, ARRAY_LENGTH(m_fore_coll_buf)); - memset(m_border_on_sample, 0, ARRAY_LENGTH(m_border_on_sample)); - memset(m_border_color_sample, 0, ARRAY_LENGTH(m_border_color_sample)); - - for (i = 0; i < 8; i++) - { - m_spr_ptr[i] = 0; - m_mc_base[i] = 0; - m_mc[i] = 0; - for (j = 0; j < 4; j++) - { - m_spr_draw_data[i][j] = 0; - m_spr_data[i][j] = 0; - } - } -} - - -//------------------------------------------------- -// execute_run - -//------------------------------------------------- - -void mos6566_device::execute_run() -{ - do - { - int i; - UINT8 mask; - m_cycles_counter++; - - switch (m_cycle) - { - - // Sprite 3, raster counter, raster IRQ, bad line - case 1: - if (m_rasterline == (VIC2_LINES - 1)) - { - m_vblanking = 1; - - // if (LIGHTPEN_BUTTON) - { - m_reg[0x13] = VIC2_X_VALUE; - m_reg[0x14] = VIC2_Y_VALUE; - } - vic2_set_interrupt(8); - } - else - { - m_rasterline++; - - if (m_rasterline == VIC2_FIRST_DMA_LINE) - m_bad_lines_enabled = SCREENON; - - m_is_bad_line = ((m_rasterline >= VIC2_FIRST_DMA_LINE) && (m_rasterline <= VIC2_LAST_DMA_LINE) && - ((m_rasterline & 0x07) == VERTICALPOS) && m_bad_lines_enabled); - - m_draw_this_line = ((VIC2_RASTER_2_EMU(m_rasterline) >= VIC2_RASTER_2_EMU(VIC2_FIRST_DISP_LINE)) && - (VIC2_RASTER_2_EMU(m_rasterline ) <= VIC2_RASTER_2_EMU(VIC2_LAST_DISP_LINE))); - } - - m_border_on_sample[0] = m_border_on; - vic2_spr_ptr_access(3); - vic2_spr_data_access(3, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x08) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 3 - case 2: - if (m_vblanking) - { - // Vertical blank, reset counters - m_rasterline = m_vc_base = 0; - m_ref_cnt = 0xff; - m_vblanking = 0; - - // Trigger raster IRQ if IRQ in line 0 - if (RASTERLINE == 0) - { - vic2_set_interrupt(1); - } - } - - if (m_rasterline == RASTERLINE) - { - vic2_set_interrupt(1); - } - - m_graphic_x = VIC2_X_2_EMU(0); - - vic2_spr_data_access(3, 1); - vic2_spr_data_access(3, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 4 - case 3: - vic2_spr_ptr_access(4); - vic2_spr_data_access(4, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x10) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 4 - case 4: - vic2_spr_data_access(4, 1); - vic2_spr_data_access(4, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 5 - case 5: - vic2_spr_ptr_access(5); - vic2_spr_data_access(5, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x20) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 5 - case 6: - vic2_spr_data_access(5, 1); - vic2_spr_data_access(5, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 6 - case 7: - vic2_spr_ptr_access(6); - vic2_spr_data_access(6, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x40) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 6 - case 8: - vic2_spr_data_access(6, 1); - vic2_spr_data_access(6, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 7 - case 9: - vic2_spr_ptr_access(7); - vic2_spr_data_access(7, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x80) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 7 - case 10: - vic2_spr_data_access(7, 1); - vic2_spr_data_access(7, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Refresh - case 11: - vic2_refresh_access(); - vic2_display_if_bad_line(); - - vic2_resume_cpu(); - - m_cycle++; - break; - - // Refresh, fetch if bad line - case 12: - vic2_refresh_access(); - vic2_fetch_if_bad_line(); - - m_cycle++; - break; - - // Refresh, fetch if bad line, raster_x - case 13: - vic2_draw_background(); - vic2_sample_border(); - vic2_refresh_access(); - vic2_fetch_if_bad_line(); - - m_raster_x = 0xfffc; - - m_cycle++; - break; - - // Refresh, fetch if bad line, RC, VC - case 14: - vic2_draw_background(); - vic2_sample_border(); - vic2_refresh_access(); - vic2_rc_if_bad_line(); - - m_vc = m_vc_base; - - m_cycle++; - break; - - // Refresh, fetch if bad line, sprite y expansion - case 15: - vic2_draw_background(); - vic2_sample_border(); - vic2_refresh_access(); - vic2_fetch_if_bad_line(); - - for (i = 0; i < 8; i++) - if (m_spr_exp_y & (1 << i)) - m_mc_base[i] += 2; - - if (m_is_bad_line) - vic2_suspend_cpu(); - - m_ml_index = 0; - vic2_matrix_access(); - - m_cycle++; - break; - - // Graphics, sprite y expansion, sprite DMA - case 16: - vic2_draw_background(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_fetch_if_bad_line(); - - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - { - if (m_spr_exp_y & mask) - m_mc_base[i]++; - if ((m_mc_base[i] & 0x3f) == 0x3f) - m_spr_dma_on &= ~mask; - } - - vic2_matrix_access(); - - m_cycle++; - break; - - // Graphics, check border - case 17: - if (COLUMNS40) - { - if (m_rasterline == m_dy_stop) - m_ud_border_on = 1; - else - { - if (SCREENON) - { - if (m_rasterline == m_dy_start) - m_border_on = m_ud_border_on = 0; - else - if (m_ud_border_on == 0) - m_border_on = 0; - } - else - if (m_ud_border_on == 0) - m_border_on = 0; - } - } - - // Second sample of border state - m_border_on_sample[1] = m_border_on; - - vic2_draw_background(); - vic2_draw_graphics(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_fetch_if_bad_line(); - vic2_matrix_access(); - - m_cycle++; - break; - - // Check border - case 18: - if (!COLUMNS40) - { - if (m_rasterline == m_dy_stop) - m_ud_border_on = 1; - else - { - if (SCREENON) - { - if (m_rasterline == m_dy_start) - m_border_on = m_ud_border_on = 0; - else - if (m_ud_border_on == 0) - m_border_on = 0; - } - else - if (m_ud_border_on == 0) - m_border_on = 0; - } - } - - // Third sample of border state - m_border_on_sample[2] = m_border_on; - - // Graphics - - case 19: - case 20: - case 21: - case 22: - case 23: - case 24: - case 25: - case 26: - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - case 38: - case 39: - case 40: - case 41: - case 42: - case 43: - case 44: - case 45: - case 46: - case 47: - case 48: - case 49: - case 50: - case 51: - case 52: - case 53: - case 54: - vic2_draw_graphics(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_fetch_if_bad_line(); - vic2_matrix_access(); - m_last_char_data = m_char_data; - - m_cycle++; - break; - - // Graphics, sprite y expansion, sprite DMA - case 55: - vic2_draw_graphics(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_display_if_bad_line(); - - // sprite y expansion - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - if (SPRITE_Y_EXPAND (i)) - m_spr_exp_y ^= mask; - - vic2_check_sprite_dma(); - - vic2_resume_cpu(); - - m_cycle++; - break; - - // Check border, sprite DMA - case 56: - if (!COLUMNS40) - m_border_on = 1; - - // Fourth sample of border state - m_border_on_sample[3] = m_border_on; - - vic2_draw_graphics(); - vic2_sample_border(); - vic2_idle_access(); - vic2_display_if_bad_line(); - vic2_check_sprite_dma(); - - m_cycle++; - break; - - // Check border, sprites - case 57: - if (COLUMNS40) - m_border_on = 1; - - // Fifth sample of border state - m_border_on_sample[4] = m_border_on; - - // Sample spr_disp_on and spr_data for sprite drawing - m_spr_draw = m_spr_disp_on; - if (m_spr_draw) - memcpy(m_spr_draw_data, m_spr_data, 8 * 4); - - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - if ((m_spr_disp_on & mask) && !(m_spr_dma_on & mask)) - m_spr_disp_on &= ~mask; - - vic2_draw_background(); - vic2_sample_border(); - vic2_idle_access(); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // for NTSC 6567R8 - case 58: - vic2_draw_background(); - vic2_sample_border(); - vic2_idle_access(); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // for NTSC 6567R8 - case 59: - vic2_draw_background(); - vic2_sample_border(); - vic2_idle_access(); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 0, sprite DMA, MC, RC - case 60: - vic2_draw_background(); - vic2_sample_border(); - - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - { - m_mc[i] = m_mc_base[i]; - if ((m_spr_dma_on & mask) && ((m_rasterline & 0xff) == SPRITE_Y_POS(i))) - m_spr_disp_on |= mask; - } - - vic2_spr_ptr_access(0); - vic2_spr_data_access(0, 0); - - if (m_rc == 7) - { - m_vc_base = m_vc; - m_display_state = 0; - } - - if (m_is_bad_line || m_display_state) - { - m_display_state = 1; - m_rc = (m_rc + 1) & 7; - } - - if (m_spr_dma_on & 0x01) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 0 - case 61: - vic2_draw_background(); - vic2_sample_border(); - vic2_spr_data_access(0, 1); - vic2_spr_data_access(0, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 1, draw - case 62: - vic2_draw_background(); - vic2_sample_border(); - - if (m_draw_this_line) - { - vic2_draw_sprites(); - - if (m_border_on_sample[0]) - for (i = 0; i < 4; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]); - - if (m_border_on_sample[1]) - m_bitmap->plot_box(VIC2_X_2_EMU(4 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[4]); - - if (m_border_on_sample[2]) - for (i = 5; i < 43; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]); - - if (m_border_on_sample[3]) - m_bitmap->plot_box(VIC2_X_2_EMU(43 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[43]); - - if (m_border_on_sample[4]) - { - for (i = 44; i < 48; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]); - for (i = 48; i < 53; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[47]); - } - } - - vic2_spr_ptr_access(1); - vic2_spr_data_access(1, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x02) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 1 - case 63: - vic2_spr_data_access(1, 1); - vic2_spr_data_access(1, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 2 - case 64: - vic2_spr_ptr_access(2); - vic2_spr_data_access(2, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x04) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - m_cycle++; - break; - - // Sprite 2 - case 65: - vic2_spr_data_access(2, 1); - vic2_spr_data_access(2, 2); - vic2_display_if_bad_line(); - - if (m_rasterline == m_dy_stop) - m_ud_border_on = 1; - else - if (SCREENON && (m_rasterline == m_dy_start)) - m_ud_border_on = 0; - - // Last cycle - m_cycle = 1; - } - - m_raster_x += 8; - m_icount--; - } while (m_icount > 0); -} - - -//------------------------------------------------- -// execute_run - -//------------------------------------------------- - -void mos6569_device::execute_run() -{ - do - { - int i; - UINT8 mask; - //static int adjust[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; - - UINT8 cpu_cycles = m_cpu->total_cycles() & 0xff; - UINT8 vic_cycles = (m_cycles_counter + 1) & 0xff; - m_cycles_counter++; - - // printf("%02x %02x %02x\n",cpu_cycles,vic_cycles,m_rdy_cycles); - #if 0 - if (machine.input().code_pressed(KEYCODE_X)) - { - if (machine.input().code_pressed_once(KEYCODE_Q)) adjust[1]++; - if (machine.input().code_pressed_once(KEYCODE_W)) adjust[2]++; - if (machine.input().code_pressed_once(KEYCODE_E)) adjust[3]++; - if (machine.input().code_pressed_once(KEYCODE_R)) adjust[4]++; - if (machine.input().code_pressed_once(KEYCODE_T)) adjust[5]++; - if (machine.input().code_pressed_once(KEYCODE_Y)) adjust[6]++; - if (machine.input().code_pressed_once(KEYCODE_U)) adjust[7]++; - if (machine.input().code_pressed_once(KEYCODE_I)) adjust[8]++; - if (machine.input().code_pressed_once(KEYCODE_A)) adjust[1]--; - if (machine.input().code_pressed_once(KEYCODE_S)) adjust[2]--; - if (machine.input().code_pressed_once(KEYCODE_D)) adjust[3]--; - if (machine.input().code_pressed_once(KEYCODE_F)) adjust[4]--; - if (machine.input().code_pressed_once(KEYCODE_G)) adjust[5]--; - if (machine.input().code_pressed_once(KEYCODE_H)) adjust[6]--; - if (machine.input().code_pressed_once(KEYCODE_J)) adjust[7]--; - if (machine.input().code_pressed_once(KEYCODE_K)) adjust[8]--; - if (machine.input().code_pressed_once(KEYCODE_C)) adjust[0]++; - if (machine.input().code_pressed_once(KEYCODE_V)) adjust[0]--; - if (machine.input().code_pressed_once(KEYCODE_Z)) printf("b:%02x 1:%02x 2:%02x 3:%02x 4:%02x 5:%02x 6:%02x 7:%02x 8:%02x\n", - adjust[0],adjust[1],adjust[2],adjust[3],adjust[4],adjust[5],adjust[6],adjust[7],adjust[8]); - } - #define adjust(x) adjust[x] - #else - #define adjust(x) 0 - #endif - - switch(m_cycle) - { - - // Sprite 3, raster counter, raster IRQ, bad line - case 1: - if (m_rasterline == (VIC2_LINES - 1)) - { - m_vblanking = 1; - - // if (LIGHTPEN_BUTTON) - { - m_reg[0x13] = VIC2_X_VALUE; - m_reg[0x14] = VIC2_Y_VALUE; - } - vic2_set_interrupt(8); - } - else - { - m_rasterline++; - - if (m_rasterline == VIC2_FIRST_DMA_LINE) - m_bad_lines_enabled = SCREENON; - - m_is_bad_line = ((m_rasterline >= VIC2_FIRST_DMA_LINE) && (m_rasterline <= VIC2_LAST_DMA_LINE) && - ((m_rasterline & 0x07) == VERTICALPOS) && m_bad_lines_enabled); - - m_draw_this_line = ((VIC2_RASTER_2_EMU(m_rasterline) >= VIC2_RASTER_2_EMU(VIC2_FIRST_DISP_LINE)) && - (VIC2_RASTER_2_EMU(m_rasterline ) <= VIC2_RASTER_2_EMU(VIC2_LAST_DISP_LINE))); - } - - m_border_on_sample[0] = m_border_on; - vic2_spr_ptr_access(3); - vic2_spr_data_access(3, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x08) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x08) m_rdy_cycles += (2 + adjust(1)); - - m_cycle++; - break; - - // Sprite 3 - case 2: - if (m_vblanking) - { - // Vertical blank, reset counters - m_rasterline = m_vc_base = 0; - m_ref_cnt = 0xff; - m_vblanking = 0; - - // Trigger raster IRQ if IRQ in line 0 - if (RASTERLINE == 0) - { - vic2_set_interrupt(1); - } - } - - if (m_rasterline == RASTERLINE) - { - vic2_set_interrupt(1); - } - - m_graphic_x = VIC2_X_2_EMU(0); - - vic2_spr_data_access(3, 1); - vic2_spr_data_access(3, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 4 - case 3: - vic2_spr_ptr_access(4); - vic2_spr_data_access(4, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x10) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x10) m_rdy_cycles += (2 + adjust(2)); - - m_cycle++; - break; - - // Sprite 4 - case 4: - vic2_spr_data_access(4, 1); - vic2_spr_data_access(4, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 5 - case 5: - vic2_spr_ptr_access(5); - vic2_spr_data_access(5, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x20) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x20) m_rdy_cycles += (2 + adjust(3)); - - m_cycle++; - break; - - // Sprite 5 - case 6: - vic2_spr_data_access(5, 1); - vic2_spr_data_access(5, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 6 - case 7: - vic2_spr_ptr_access(6); - vic2_spr_data_access(6, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x40) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x40) m_rdy_cycles += (2 + adjust(4)); - - m_cycle++; - break; - - // Sprite 6 - case 8: - vic2_spr_data_access(6, 1); - vic2_spr_data_access(6, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 7 - case 9: - vic2_spr_ptr_access(7); - vic2_spr_data_access(7, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x80) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x80) m_rdy_cycles += (2 + adjust(5)); - - m_cycle++; - break; - - // Sprite 7 - case 10: - vic2_spr_data_access(7, 1); - vic2_spr_data_access(7, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Refresh - case 11: - vic2_refresh_access(); - vic2_display_if_bad_line(); - - vic2_resume_cpu(); - - m_cycle++; - break; - - // Refresh, fetch if bad line - case 12: - vic2_refresh_access(); - vic2_fetch_if_bad_line(); - - m_cycle++; - break; - - // Refresh, fetch if bad line, raster_x - case 13: - vic2_draw_background(); - vic2_sample_border(); - vic2_refresh_access(); - vic2_fetch_if_bad_line(); - - m_raster_x = 0xfffc; - - if ((m_in_rdy_workaround_func(0) == 0 ) && (m_is_bad_line)) - m_rdy_cycles += (43+adjust(0)); - - m_cycle++; - break; - - // Refresh, fetch if bad line, RC, VC - case 14: - vic2_draw_background(); - vic2_sample_border(); - vic2_refresh_access(); - vic2_rc_if_bad_line(); - - m_vc = m_vc_base; - - if ((m_in_rdy_workaround_func(0) == 1 ) && (m_is_bad_line)) - m_rdy_cycles += (42+adjust(0)); - - m_cycle++; - break; - - // Refresh, fetch if bad line, sprite y expansion - case 15: - vic2_draw_background(); - vic2_sample_border(); - vic2_refresh_access(); - vic2_fetch_if_bad_line(); - - for (i = 0; i < 8; i++) - if (m_spr_exp_y & (1 << i)) - m_mc_base[i] += 2; - - m_ml_index = 0; - vic2_matrix_access(); - - if ((m_in_rdy_workaround_func(0) == 2 ) && (m_is_bad_line)) - m_rdy_cycles += (41+adjust(0)); - - m_cycle++; - break; - - // Graphics, sprite y expansion, sprite DMA - case 16: - vic2_draw_background(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_fetch_if_bad_line(); - - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - { - if (m_spr_exp_y & mask) - m_mc_base[i]++; - if ((m_mc_base[i] & 0x3f) == 0x3f) - m_spr_dma_on &= ~mask; - } - - vic2_matrix_access(); - - if ((m_in_rdy_workaround_func(0) == 3 ) && (m_is_bad_line)) - m_rdy_cycles += (40+adjust(0)); - - m_cycle++; - break; - - // Graphics, check border - case 17: - if (COLUMNS40) - { - if (m_rasterline == m_dy_stop) - m_ud_border_on = 1; - else - { - if (SCREENON) - { - if (m_rasterline == m_dy_start) - m_border_on = m_ud_border_on = 0; - else - if (m_ud_border_on == 0) - m_border_on = 0; - } else - if (m_ud_border_on == 0) - m_border_on = 0; - } - } - - // Second sample of border state - m_border_on_sample[1] = m_border_on; - - vic2_draw_background(); - vic2_draw_graphics(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_fetch_if_bad_line(); - vic2_matrix_access(); - - if ((m_in_rdy_workaround_func(0) == 4 ) && (m_is_bad_line)) - m_rdy_cycles += (40+adjust(0)); - - m_cycle++; - break; - - // Check border - case 18: - if (!COLUMNS40) - { - if (m_rasterline == m_dy_stop) - m_ud_border_on = 1; - else - { - if (SCREENON) - { - if (m_rasterline == m_dy_start) - m_border_on = m_ud_border_on = 0; - else - if (m_ud_border_on == 0) - m_border_on = 0; - } else - if (m_ud_border_on == 0) - m_border_on = 0; - } - } - - // Third sample of border state - m_border_on_sample[2] = m_border_on; - - // Graphics - - case 19: - case 20: - case 21: - case 22: - case 23: - case 24: - case 25: - case 26: - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - case 38: - case 39: - case 40: - case 41: - case 42: - case 43: - case 44: - case 45: - case 46: - case 47: - case 48: - case 49: - case 50: - case 51: - case 52: - case 53: - case 54: - vic2_draw_graphics(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_fetch_if_bad_line(); - vic2_matrix_access(); - m_last_char_data = m_char_data; - - m_cycle++; - break; - - // Graphics, sprite y expansion, sprite DMA - case 55: - vic2_draw_graphics(); - vic2_sample_border(); - vic2_graphics_access(); - vic2_display_if_bad_line(); - - // sprite y expansion - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - if (SPRITE_Y_EXPAND (i)) - m_spr_exp_y ^= mask; - - vic2_check_sprite_dma(); - - vic2_resume_cpu(); - - m_cycle++; - break; - - // Check border, sprite DMA - case 56: - if (!COLUMNS40) - m_border_on = 1; - - // Fourth sample of border state - m_border_on_sample[3] = m_border_on; - - vic2_draw_graphics(); - vic2_sample_border(); - vic2_idle_access(); - vic2_display_if_bad_line(); - vic2_check_sprite_dma(); - - m_cycle++; - break; - - // Check border, sprites - case 57: - if (COLUMNS40) - m_border_on = 1; - - // Fifth sample of border state - m_border_on_sample[4] = m_border_on; - - // Sample spr_disp_on and spr_data for sprite drawing - m_spr_draw = m_spr_disp_on; - if (m_spr_draw) - memcpy(m_spr_draw_data, m_spr_data, 8 * 4); - - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - if ((m_spr_disp_on & mask) && !(m_spr_dma_on & mask)) - m_spr_disp_on &= ~mask; - - vic2_draw_background(); - vic2_sample_border(); - vic2_idle_access(); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 0, sprite DMA, MC, RC - case 58: - vic2_draw_background(); - vic2_sample_border(); - - mask = 1; - for (i = 0; i < 8; i++, mask <<= 1) - { - m_mc[i] = m_mc_base[i]; - if ((m_spr_dma_on & mask) && ((m_rasterline & 0xff) == SPRITE_Y_POS(i))) - m_spr_disp_on |= mask; - } - - vic2_spr_ptr_access(0); - vic2_spr_data_access(0, 0); - - if (m_rc == 7) - { - m_vc_base = m_vc; - m_display_state = 0; - } - - if (m_is_bad_line || m_display_state) - { - m_display_state = 1; - m_rc = (m_rc + 1) & 7; - } - - if (m_spr_dma_on & 0x01) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x01) m_rdy_cycles += (2 + adjust(6)); - - m_cycle++; - break; - - // Sprite 0 - case 59: - vic2_draw_background(); - vic2_sample_border(); - vic2_spr_data_access(0, 1); - vic2_spr_data_access(0, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 1, draw - case 60: - vic2_draw_background(); - vic2_sample_border(); - - if (m_draw_this_line) - { - vic2_draw_sprites(); - - if (m_border_on_sample[0]) - for (i = 0; i < 4; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]); - - if (m_border_on_sample[1]) - m_bitmap->plot_box(VIC2_X_2_EMU(4 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[4]); - - if (m_border_on_sample[2]) - for (i = 5; i < 43; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]); - - if (m_border_on_sample[3]) - m_bitmap->plot_box(VIC2_X_2_EMU(43 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[43]); - - if (m_border_on_sample[4]) - { - for (i = 44; i < 48; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]); - for (i = 48; i < 51; i++) - m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[47]); - } - } - - vic2_spr_ptr_access(1); - vic2_spr_data_access(1, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x02) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x02) m_rdy_cycles += (2 + adjust(7)); - - m_cycle++; - break; - - // Sprite 1 - case 61: - vic2_spr_data_access(1, 1); - vic2_spr_data_access(1, 2); - vic2_display_if_bad_line(); - - m_cycle++; - break; - - // Sprite 2 - case 62: - vic2_spr_ptr_access(2); - vic2_spr_data_access(2, 0); - vic2_display_if_bad_line(); - - if (m_spr_dma_on & 0x04) - vic2_suspend_cpu(); - else - vic2_resume_cpu(); - - if (m_spr_dma_on & 0x04) m_rdy_cycles += (2 + adjust(8)); - - m_cycle++; - break; - - // Sprite 2 - case 63: - vic2_spr_data_access(2, 1); - vic2_spr_data_access(2, 2); - vic2_display_if_bad_line(); - - if (m_rasterline == m_dy_stop) - m_ud_border_on = 1; - else - if (SCREENON && (m_rasterline == m_dy_start)) - m_ud_border_on = 0; - - // Last cycle - m_cycle = 1; - } - - if ((cpu_cycles == vic_cycles) && (m_rdy_cycles > 0)) - { - device_spin_until_time (m_cpu, m_cpu->cycles_to_attotime(m_rdy_cycles)); - m_rdy_cycles = 0; - } - - m_raster_x += 8; - m_icount--; - } while (m_icount > 0); -} - -// Graphics display (8 pixels) -void mos6566_device::vic2_draw_graphics() -{ - if (m_draw_this_line == 0) - { - UINT16 p = m_graphic_x + HORIZONTALPOS; - m_fore_coll_buf[p + 7] = 0; - m_fore_coll_buf[p + 6] = 0; - m_fore_coll_buf[p + 5] = 0; - m_fore_coll_buf[p + 4] = 0; - m_fore_coll_buf[p + 3] = 0; - m_fore_coll_buf[p + 2] = 0; - m_fore_coll_buf[p + 1] = 0; - m_fore_coll_buf[p + 0] = 0; - } - else if (m_ud_border_on) - { - UINT16 p = m_graphic_x + HORIZONTALPOS; - m_fore_coll_buf[p + 7] = 0; - m_fore_coll_buf[p + 6] = 0; - m_fore_coll_buf[p + 5] = 0; - m_fore_coll_buf[p + 4] = 0; - m_fore_coll_buf[p + 3] = 0; - m_fore_coll_buf[p + 2] = 0; - m_fore_coll_buf[p + 1] = 0; - m_fore_coll_buf[p + 0] = 0; - vic2_draw_background(); - } - else - { - UINT8 tmp_col; - UINT16 p = m_graphic_x + HORIZONTALPOS; - switch (GFXMODE) - { - case 0: - vic2_draw_mono(p, m_colors[0], m_color_data & 0x0f); - break; - case 1: - if (m_color_data & 0x08) - vic2_draw_multi(p, m_colors[0], m_colors[1], m_colors[2], m_color_data & 0x07); - else - vic2_draw_mono(p, m_colors[0], m_color_data & 0x0f); - break; - case 2: - vic2_draw_mono(p, m_char_data & 0x0f, m_char_data >> 4); - break; - case 3: - vic2_draw_multi(p, m_colors[0], m_char_data >> 4, m_char_data & 0x0f, m_color_data & 0x0f); - break; - case 4: - if (m_char_data & 0x80) - if (m_char_data & 0x40) - tmp_col = m_colors[3]; - else - tmp_col = m_colors[2]; - else - if (m_char_data & 0x40) - tmp_col = m_colors[1]; - else - tmp_col = m_colors[0]; - vic2_draw_mono(p, tmp_col, m_color_data & 0x0f); - break; - case 5: - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = 0; - m_fore_coll_buf[p + 7] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = 0; - m_fore_coll_buf[p + 6] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = 0; - m_fore_coll_buf[p + 5] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = 0; - m_fore_coll_buf[p + 4] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = 0; - m_fore_coll_buf[p + 3] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = 0; - m_fore_coll_buf[p + 2] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = 0; - m_fore_coll_buf[p + 1] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = 0; - m_fore_coll_buf[p + 0] = 0; - break; - case 6: - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = 0; - m_fore_coll_buf[p + 7] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = 0; - m_fore_coll_buf[p + 6] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = 0; - m_fore_coll_buf[p + 5] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = 0; - m_fore_coll_buf[p + 4] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = 0; - m_fore_coll_buf[p + 3] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = 0; - m_fore_coll_buf[p + 2] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = 0; - m_fore_coll_buf[p + 1] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = 0; - m_fore_coll_buf[p + 0] = 0; - break; - case 7: - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = 0; - m_fore_coll_buf[p + 7] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = 0; - m_fore_coll_buf[p + 6] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = 0; - m_fore_coll_buf[p + 5] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = 0; - m_fore_coll_buf[p + 4] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = 0; - m_fore_coll_buf[p + 3] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = 0; - m_fore_coll_buf[p + 2] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = 0; - m_fore_coll_buf[p + 1] = 0; - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = 0; - m_fore_coll_buf[p + 0] = 0; - break; - } - } -} - -void mos6566_device::vic2_draw_sprites() -{ - int i; - UINT8 snum, sbit; - UINT8 spr_coll = 0, gfx_coll = 0; - UINT32 plane0_l, plane0_r, plane1_l, plane1_r; - UINT32 sdata_l = 0, sdata_r = 0; - - for (i = 0; i < 0x400; i++) - m_spr_coll_buf[i] = 0; - - for (snum = 0, sbit = 1; snum < 8; snum++, sbit <<= 1) - { - if ((m_spr_draw & sbit) && (SPRITE_X_POS(snum) <= (403 - (VIC2_FIRSTCOLUMN + 1)))) - { - UINT16 p = SPRITE_X_POS(snum) + VIC2_X_2_EMU(0) + 8; - UINT8 color = SPRITE_COLOR(snum); - UINT32 sdata = (m_spr_draw_data[snum][0] << 24) | (m_spr_draw_data[snum][1] << 16) | (m_spr_draw_data[snum][2] << 8); - - if (SPRITE_X_EXPAND(snum)) - { - if (SPRITE_X_POS(snum) > (403 - 24 - (VIC2_FIRSTCOLUMN + 1))) - continue; - - if (SPRITE_MULTICOLOR(snum)) - { - sdata_l = (m_expandx_multi[(sdata >> 24) & 0xff] << 16) | m_expandx_multi[(sdata >> 16) & 0xff]; - sdata_r = m_expandx_multi[(sdata >> 8) & 0xff] << 16; - plane0_l = (sdata_l & 0x55555555) | (sdata_l & 0x55555555) << 1; - plane1_l = (sdata_l & 0xaaaaaaaa) | (sdata_l & 0xaaaaaaaa) >> 1; - plane0_r = (sdata_r & 0x55555555) | (sdata_r & 0x55555555) << 1; - plane1_r = (sdata_r & 0xaaaaaaaa) | (sdata_r & 0xaaaaaaaa) >> 1; - for (i = 0; i < 32; i++, plane0_l <<= 1, plane1_l <<= 1) - { - UINT8 col; - - if (plane1_l & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - if (plane0_l & 0x80000000) - col = m_spritemulti[3]; - else - col = color; - } - else - { - if (plane0_l & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - col = m_spritemulti[1]; - } - else - continue; - } - - if (m_spr_coll_buf[p + i]) - spr_coll |= m_spr_coll_buf[p + i] | sbit; - else - { - if (SPRITE_PRIORITY(snum)) - { - if (m_fore_coll_buf[p + i] == 0) - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col; - m_spr_coll_buf[p + i] = sbit; - } - else - { - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col; - m_spr_coll_buf[p + i] = sbit; - } - } - } - - for (; i < 48; i++, plane0_r <<= 1, plane1_r <<= 1) - { - UINT8 col; - - if(plane1_r & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - - if (plane0_r & 0x80000000) - col = m_spritemulti[3]; - else - col = color; - } - else - { - if (plane0_r & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - col = m_spritemulti[1]; - } - else - continue; - } - - if (m_spr_coll_buf[p + i]) - spr_coll |= m_spr_coll_buf[p + i] | sbit; - else - { - if (SPRITE_PRIORITY(snum)) - { - if (m_fore_coll_buf[p + i] == 0) - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col; - m_spr_coll_buf[p + i] = sbit; - } - else - { - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col; - m_spr_coll_buf[p + i] = sbit; - } - } - } - } - else - { - sdata_l = (m_expandx[(sdata >> 24) & 0xff] << 16) | m_expandx[(sdata >> 16) & 0xff]; - sdata_r = m_expandx[(sdata >> 8) & 0xff] << 16; - - for (i = 0; i < 32; i++, sdata_l <<= 1) - if (sdata_l & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - - if (m_spr_coll_buf[p + i]) - spr_coll |= m_spr_coll_buf[p + i] | sbit; - else - { - if (SPRITE_PRIORITY(snum)) - { - if (m_fore_coll_buf[p + i] == 0) - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color; - m_spr_coll_buf[p + i] = sbit; - } - else - { - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color; - m_spr_coll_buf[p + i] = sbit; - } - } - } - - for (; i < 48; i++, sdata_r <<= 1) - if (sdata_r & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - - if (m_spr_coll_buf[p + i]) - spr_coll |= m_spr_coll_buf[p + i] | sbit; - else - { - if (SPRITE_PRIORITY(snum)) - { - if (m_fore_coll_buf[p + i] == 0) - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color; - m_spr_coll_buf[p + i] = sbit; - } - else - { - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color; - m_spr_coll_buf[p + i] = sbit; - } - } - } - } - } - else - { - if (SPRITE_MULTICOLOR(snum)) - { - UINT32 plane0 = (sdata & 0x55555555) | (sdata & 0x55555555) << 1; - UINT32 plane1 = (sdata & 0xaaaaaaaa) | (sdata & 0xaaaaaaaa) >> 1; - - for (i = 0; i < 24; i++, plane0 <<= 1, plane1 <<= 1) - { - UINT8 col; - - if (plane1 & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - - if (plane0 & 0x80000000) - col = m_spritemulti[3]; - else - col = color; - } - else - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - - if (plane0 & 0x80000000) - col = m_spritemulti[1]; - else - continue; - } - - if (m_spr_coll_buf[p + i]) - spr_coll |= m_spr_coll_buf[p + i] | sbit; - else - { - if (SPRITE_PRIORITY(snum)) - { - if (m_fore_coll_buf[p + i] == 0) - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col; - m_spr_coll_buf[p + i] = sbit; - } - else - { - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col; - m_spr_coll_buf[p + i] = sbit; - } - } - } - } - else - { - for (i = 0; i < 24; i++, sdata <<= 1) - { - if (sdata & 0x80000000) - { - if (m_fore_coll_buf[p + i]) - { - gfx_coll |= sbit; - } - if (m_spr_coll_buf[p + i]) - { - spr_coll |= m_spr_coll_buf[p + i] | sbit; - } - else - { - if (SPRITE_PRIORITY(snum)) - { - if (m_fore_coll_buf[p + i] == 0) - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color; - m_spr_coll_buf[p + i] = sbit; - } - else - { - m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color; - m_spr_coll_buf[p + i] = sbit; - } - } - } - } - } - } - } - } - - if (SPRITE_COLL) - SPRITE_COLL |= spr_coll; - else - { - SPRITE_COLL = spr_coll; - if (SPRITE_COLL) - vic2_set_interrupt(4); - } - - if (SPRITE_BG_COLL) - SPRITE_BG_COLL |= gfx_coll; - else - { - SPRITE_BG_COLL = gfx_coll; - if (SPRITE_BG_COLL) - vic2_set_interrupt(2); - } -} - - -//------------------------------------------------- -// screen_update - -//------------------------------------------------- - -UINT32 mos6566_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - if (m_on) - copybitmap(bitmap, *m_bitmap, 0, 0, 0, 0, cliprect); - - return 0; -} - - -//------------------------------------------------- -// read - -//------------------------------------------------- - -READ8_MEMBER( mos6566_device::read ) -{ - UINT8 val = 0; - - offset &= 0x3f; - - switch (offset) - { - case 0x11: - val = (m_reg[offset] & ~0x80) | ((m_rasterline & 0x100) >> 1); - break; - - case 0x12: - val = m_rasterline & 0xff; - break; - - case 0x16: - val = m_reg[offset] | 0xc0; - break; - - case 0x18: - val = m_reg[offset] | 0x01; - break; - - case 0x19: /* interrupt flag register */ - /* vic2_clear_interrupt(0xf); */ - val = m_reg[offset] | 0x70; - break; - - case 0x1a: - val = m_reg[offset] | 0xf0; - break; - - case 0x1e: /* sprite to sprite collision detect */ - val = m_reg[offset]; - m_reg[offset] = 0; - vic2_clear_interrupt(4); - break; - - case 0x1f: /* sprite to background collision detect */ - val = m_reg[offset]; - m_reg[offset] = 0; - vic2_clear_interrupt(2); - break; - - case 0x20: - case 0x21: - case 0x22: - case 0x23: - case 0x24: - val = m_reg[offset]; - break; - - case 0x00: - case 0x01: - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - case 0x08: - case 0x09: - case 0x0a: - case 0x0b: - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: - case 0x10: - case 0x17: - case 0x1b: - case 0x1c: - case 0x1d: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - case 0x29: - case 0x2a: - case 0x2b: - case 0x2c: - case 0x2d: - case 0x2e: - val = m_reg[offset]; - break; - - case 0x2f: - case 0x30: - if (IS_VICIIE) - { - val = m_reg[offset]; - DBG_LOG(2, "vic read", ("%.2x:%.2x\n", offset, val)); - } - else - val = 0xff; - break; - - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3a: - case 0x3b: - case 0x3c: - case 0x3d: - case 0x3e: - case 0x3f: /* not used */ - // val = m_reg[offset]; // - val = 0xff; - DBG_LOG(2, "vic read", ("%.2x:%.2x\n", offset, val)); - break; - - default: - val = m_reg[offset]; - } - - if ((offset != 0x11) && (offset != 0x12)) - DBG_LOG(2, "vic read", ("%.2x:%.2x\n", offset, val)); - - return val; -} - - -//------------------------------------------------- -// write - -//------------------------------------------------- - -WRITE8_MEMBER( mos6566_device::write ) -{ - DBG_LOG(2, "vic write", ("%.2x:%.2x\n", offset, data)); - offset &= 0x3f; - - switch (offset) - { - case 0x01: - case 0x03: - case 0x05: - case 0x07: - case 0x09: - case 0x0b: - case 0x0d: - case 0x0f: - m_reg[offset] = data; /* sprite y positions */ - break; - - case 0x00: - case 0x02: - case 0x04: - case 0x06: - case 0x08: - case 0x0a: - case 0x0c: - case 0x0e: - m_reg[offset] = data; /* sprite x positions */ - break; - - case 0x10: - m_reg[offset] = data; /* sprite x positions */ - break; - - case 0x17: /* sprite y size */ - m_spr_exp_y |= ~data; - if (m_reg[offset] != data) - { - m_reg[offset] = data; - } - break; - - case 0x1d: /* sprite x size */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - } - break; - - case 0x1b: /* sprite background priority */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - } - break; - - case 0x1c: /* sprite multicolor mode select */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - } - break; - - case 0x27: - case 0x28: - case 0x29: - case 0x2a: - case 0x2b: - case 0x2c: - case 0x2d: - case 0x2e: - /* sprite colors */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - } - break; - - case 0x25: /* sprite multicolor */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - m_spritemulti[1] = SPRITE_MULTICOLOR1; - } - break; - - case 0x26: /* sprite multicolor */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - m_spritemulti[3] = SPRITE_MULTICOLOR2; - } - break; - - case 0x19: - vic2_clear_interrupt(data & 0x0f); - break; - - case 0x1a: /* irq mask */ - m_reg[offset] = data; - vic2_set_interrupt(0); // beamrider needs this - break; - - case 0x11: - if (m_reg[offset] != data) - { - m_reg[offset] = data; - if (data & 8) - { - m_dy_start = ROW25_YSTART; - m_dy_stop = ROW25_YSTOP; - } - else - { - m_dy_start = ROW24_YSTART; - m_dy_stop = ROW24_YSTOP; - } - } - break; - - case 0x12: - if (data != m_reg[offset]) - { - m_reg[offset] = data; - } - break; - - case 0x16: - if (m_reg[offset] != data) - { - m_reg[offset] = data; - } - break; - - case 0x18: - if (m_reg[offset] != data) - { - m_reg[offset] = data; - m_videoaddr = VIDEOADDR; - m_chargenaddr = CHARGENADDR; - m_bitmapaddr = BITMAPADDR; - } - break; - - case 0x21: /* background color */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - m_colors[0] = BACKGROUNDCOLOR; - } - break; - - case 0x22: /* background color 1 */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - m_colors[1] = MULTICOLOR1; - } - break; - - case 0x23: /* background color 2 */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - m_colors[2] = MULTICOLOR2; - } - break; - - case 0x24: /* background color 3 */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - m_colors[3] = FOREGROUNDCOLOR; - } - break; - - case 0x20: /* framecolor */ - if (m_reg[offset] != data) - { - m_reg[offset] = data; - } - break; - - case 0x2f: - if (IS_VICIIE) - { - DBG_LOG(2, "vic write", ("%.2x:%.2x\n", offset, data)); - m_reg[offset] = data; - } - break; - - case 0x30: - if (IS_VICIIE) - { - m_reg[offset] = data; - } - break; - - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3a: - case 0x3b: - case 0x3c: - case 0x3d: - case 0x3e: - case 0x3f: - m_reg[offset] = data; - DBG_LOG(2, "vic write", ("%.2x:%.2x\n", offset, data)); - break; - - default: - m_reg[offset] = data; - break; - } -} - - -//------------------------------------------------- -// lp_w - light pen strobe -//------------------------------------------------- - -WRITE_LINE_MEMBER( mos6566_device::lp_w ) -{ -} +/***************************************************************************
+
+ MOS 6566/6567/6569 Video Interface Chip (VIC-II) emulation
+
+ A part of the code (cycle routine and drawing routines) is a modified version of the vic ii emulation used in
+ commodore 64 emulator "frodo" by Christian Bauer
+
+ http://frodo.cebix.net/
+ The rights on the source code remain at the author.
+ It may not - not even in parts - used for commercial purposes without explicit written permission by the author.
+ Permission to use it for non-commercial purposes is hereby granted als long as my copyright notice remains in the program.
+ You are not allowed to use the source to create and distribute a modified version of Frodo.
+
+ Copyright the MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+***************************************************************************/
+
+/*
+
+ TODO:
+
+ - cleanup
+ - light pen
+ - 1:1 sync with CPU
+ - remove RDY hack
+ - VIC IIe
+
+*/
+
+#include "mos6566.h"
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define LOG 0
+
+
+enum
+{
+ REGISTER_M0X = 0,
+ REGISTER_M0Y,
+ REGISTER_M1X,
+ REGISTER_M1Y,
+ REGISTER_M2X,
+ REGISTER_M2Y,
+ REGISTER_M3X,
+ REGISTER_M3Y,
+ REGISTER_M4X,
+ REGISTER_M4Y,
+ REGISTER_M5X,
+ REGISTER_M5Y,
+ REGISTER_M6X,
+ REGISTER_M6Y,
+ REGISTER_M7X,
+ REGISTER_M7Y,
+ REGISTER_MX_MSB,
+ REGISTER_CR1,
+ REGISTER_RASTER,
+ REGISTER_LPX,
+ REGISTER_LPY,
+ REGISTER_ME,
+ REGISTER_CR2,
+ REGISTER_MYE,
+ REGISTER_MP,
+ REGISTER_IRQ,
+ REGISTER_IE,
+ REGISTER_MDP,
+ REGISTER_MMC,
+ REGISTER_MXE,
+ REGISTER_MM,
+ REGISTER_MD,
+ REGISTER_EC,
+ REGISTER_B0C,
+ REGISTER_B1C,
+ REGISTER_B2C,
+ REGISTER_B3C,
+ REGISTER_MM0,
+ REGISTER_MM1,
+ REGISTER_M0C,
+ REGISTER_M1C,
+ REGISTER_M2C,
+ REGISTER_M3C,
+ REGISTER_M4C,
+ REGISTER_M5C,
+ REGISTER_M6C,
+ REGISTER_M7C
+};
+
+
+static const UINT8 PALETTE[] =
+{
+// black, white, red, cyan
+// purple, green, blue, yellow
+// orange, brown, light red, dark gray,
+// medium gray, light green, light blue, light gray
+// taken from the vice emulator
+ 0x00, 0x00, 0x00, 0xfd, 0xfe, 0xfc, 0xbe, 0x1a, 0x24, 0x30, 0xe6, 0xc6,
+ 0xb4, 0x1a, 0xe2, 0x1f, 0xd2, 0x1e, 0x21, 0x1b, 0xae, 0xdf, 0xf6, 0x0a,
+ 0xb8, 0x41, 0x04, 0x6a, 0x33, 0x04, 0xfe, 0x4a, 0x57, 0x42, 0x45, 0x40,
+ 0x70, 0x74, 0x6f, 0x59, 0xfe, 0x59, 0x5f, 0x53, 0xfe, 0xa4, 0xa7, 0xa2
+};
+
+
+#define VERBOSE_LEVEL 0
+#define DBG_LOG(N,M,A) \
+ do { \
+ if(VERBOSE_LEVEL >= N) \
+ { \
+ if( M ) \
+ logerror("%11.6f: %-24s", machine().time().as_double(), (char*) M ); \
+ logerror A; \
+ } \
+ } while (0)
+
+#define IS_PAL ((m_variant == TYPE_6569) || (m_variant == TYPE_6572) || (m_variant == TYPE_6573) || (m_variant == TYPE_8565) || (m_variant == TYPE_8565) || (m_variant == TYPE_8569))
+#define IS_VICIIE ((m_variant == TYPE_8564) || (m_variant == TYPE_8566) || (m_variant == TYPE_8569))
+
+#define ROW25_YSTART 0x33
+#define ROW25_YSTOP 0xfb
+#define ROW24_YSTART 0x37
+#define ROW24_YSTOP 0xf7
+
+#define RASTERLINE_2_C64(a) (a)
+#define C64_2_RASTERLINE(a) (a)
+#define XPOS (VIC2_STARTVISIBLECOLUMNS + (VIC2_VISIBLECOLUMNS - VIC2_HSIZE) / 2)
+#define YPOS (VIC2_STARTVISIBLELINES /* + (VIC2_VISIBLELINES - VIC2_VSIZE) / 2 */)
+#define FIRSTCOLUMN 50
+
+/* 2008-05 FP: lightpen code needs to read input port from c64.c and cbmb.c */
+
+#define LIGHTPEN_BUTTON (m_in_lightpen_button_func(0))
+#define LIGHTPEN_X_VALUE (m_in_lightpen_x_func(0))
+#define LIGHTPEN_Y_VALUE (m_in_lightpen_y_func(0))
+
+/* lightpen delivers values from internal counters; they do not start with the visual area or frame area */
+#define VIC2_MAME_XPOS 0
+#define VIC2_MAME_YPOS 0
+#define VIC6567_X_BEGIN 38
+#define VIC6567_Y_BEGIN -6 /* first 6 lines after retrace not for lightpen! */
+#define VIC6569_X_BEGIN 38
+#define VIC6569_Y_BEGIN -6
+#define VIC2_X_BEGIN (IS_PAL ? VIC6569_X_BEGIN : VIC6567_X_BEGIN)
+#define VIC2_Y_BEGIN (IS_PAL ? VIC6569_Y_BEGIN : VIC6567_Y_BEGIN)
+#define VIC2_X_VALUE ((LIGHTPEN_X_VALUE / 1.3) + 12)
+#define VIC2_Y_VALUE ((LIGHTPEN_Y_VALUE ) + 10)
+
+#define VIC2E_K0_LEVEL (m_reg[0x2f] & 0x01)
+#define VIC2E_K1_LEVEL (m_reg[0x2f] & 0x02)
+#define VIC2E_K2_LEVEL (m_reg[0x2f] & 0x04)
+
+
+/* sprites 0 .. 7 */
+#define SPRITEON(nr) (m_reg[0x15] & (1 << nr))
+#define SPRITE_Y_EXPAND(nr) (m_reg[0x17] & (1 << nr))
+#define SPRITE_Y_SIZE(nr) (SPRITE_Y_EXPAND(nr) ? 2 * 21 : 21)
+#define SPRITE_X_EXPAND(nr) (m_reg[0x1d] & (1 << nr))
+#define SPRITE_X_SIZE(nr) (SPRITE_X_EXPAND(nr) ? 2 * 24 : 24)
+#define SPRITE_X_POS(nr) (m_reg[(nr) * 2] | (m_reg[0x10] & (1 << (nr)) ? 0x100 : 0))
+#define SPRITE_Y_POS(nr) (m_reg[1 + 2 * (nr)])
+#define SPRITE_MULTICOLOR(nr) (m_reg[0x1c] & (1 << nr))
+#define SPRITE_PRIORITY(nr) (m_reg[0x1b] & (1 << nr))
+#define SPRITE_MULTICOLOR1 (m_reg[0x25] & 0x0f)
+#define SPRITE_MULTICOLOR2 (m_reg[0x26] & 0x0f)
+#define SPRITE_COLOR(nr) (m_reg[0x27+nr] & 0x0f)
+#define SPRITE_ADDR(nr) (m_videoaddr | 0x3f8 | nr)
+#define SPRITE_COLL (m_reg[0x1e])
+#define SPRITE_BG_COLL (m_reg[0x1f])
+
+#define GFXMODE ((m_reg[0x11] & 0x60) | (m_reg[0x16] & 0x10)) >> 4
+#define SCREENON (m_reg[0x11] & 0x10)
+#define VERTICALPOS (m_reg[0x11] & 0x07)
+#define HORIZONTALPOS (m_reg[0x16] & 0x07)
+#define ECMON (m_reg[0x11] & 0x40)
+#define HIRESON (m_reg[0x11] & 0x20)
+#define COLUMNS40 (m_reg[0x16] & 0x08) /* else 38 Columns */
+
+#define VIDEOADDR ((m_reg[0x18] & 0xf0) << (10 - 4))
+#define CHARGENADDR ((m_reg[0x18] & 0x0e) << 10)
+#define BITMAPADDR ((data & 0x08) << 10)
+
+#define RASTERLINE (((m_reg[0x11] & 0x80) << 1) | m_reg[0x12])
+
+#define FRAMECOLOR (m_reg[0x20] & 0x0f)
+#define BACKGROUNDCOLOR (m_reg[0x21] & 0x0f)
+#define MULTICOLOR1 (m_reg[0x22] & 0x0f)
+#define MULTICOLOR2 (m_reg[0x23] & 0x0f)
+#define FOREGROUNDCOLOR (m_reg[0x24] & 0x0f)
+
+#define VIC2_LINES (IS_PAL ? VIC6569_LINES : VIC6567_LINES)
+#define VIC2_FIRST_DMA_LINE (IS_PAL ? VIC6569_FIRST_DMA_LINE : VIC6567_FIRST_DMA_LINE)
+#define VIC2_LAST_DMA_LINE (IS_PAL ? VIC6569_LAST_DMA_LINE : VIC6567_LAST_DMA_LINE)
+#define VIC2_FIRST_DISP_LINE (IS_PAL ? VIC6569_FIRST_DISP_LINE : VIC6567_FIRST_DISP_LINE)
+#define VIC2_LAST_DISP_LINE (IS_PAL ? VIC6569_LAST_DISP_LINE : VIC6567_LAST_DISP_LINE)
+#define VIC2_RASTER_2_EMU(a) (IS_PAL ? VIC6569_RASTER_2_EMU(a) : VIC6567_RASTER_2_EMU(a))
+#define VIC2_FIRSTCOLUMN (IS_PAL ? VIC6569_FIRSTCOLUMN : VIC6567_FIRSTCOLUMN)
+#define VIC2_X_2_EMU(a) (IS_PAL ? VIC6569_X_2_EMU(a) : VIC6567_X_2_EMU(a))
+
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type MOS6566 = &device_creator<mos6566_device>;
+const device_type MOS6567 = &device_creator<mos6567_device>;
+const device_type MOS8562 = &device_creator<mos8562_device>;
+const device_type MOS6569 = &device_creator<mos6569_device>;
+const device_type MOS8565 = &device_creator<mos8565_device>;
+
+
+// default address maps
+static ADDRESS_MAP_START( mos6566_videoram_map, AS_0, 8, mos6566_device )
+ AM_RANGE(0x0000, 0x3fff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( mos6566_colorram_map, AS_1, 8, mos6566_device )
+ AM_RANGE(0x000, 0x3ff) AM_RAM
+ADDRESS_MAP_END
+
+
+//-------------------------------------------------
+// memory_space_config - return a description of
+// any address spaces owned by this device
+//-------------------------------------------------
+
+const address_space_config *mos6566_device::memory_space_config(address_spacenum spacenum) const
+{
+ switch (spacenum)
+ {
+ case AS_0: return &m_videoram_space_config;
+ case AS_1: return &m_colorram_space_config;
+ default: return NULL;
+ }
+}
+
+
+
+//**************************************************************************
+// INLINE HELPERS
+//**************************************************************************
+
+inline void mos6566_device::vic2_set_interrupt( int mask )
+{
+ if (((m_reg[0x19] ^ mask) & m_reg[0x1a] & 0xf))
+ {
+ if (!(m_reg[0x19] & 0x80))
+ {
+ DBG_LOG(2, "vic2", ("irq start %.2x\n", mask));
+ m_reg[0x19] |= 0x80;
+ m_out_irq_func(1);
+ }
+ }
+ m_reg[0x19] |= mask;
+}
+
+inline void mos6566_device::vic2_clear_interrupt( int mask )
+{
+ m_reg[0x19] &= ~mask;
+ if ((m_reg[0x19] & 0x80) && !(m_reg[0x19] & m_reg[0x1a] & 0xf))
+ {
+ DBG_LOG(2, "vic2", ("irq end %.2x\n", mask));
+ m_reg[0x19] &= ~0x80;
+ m_out_irq_func(0);
+ }
+}
+
+inline UINT8 mos6566_device::read_videoram(offs_t offset)
+{
+ return space(AS_0)->read_byte(offset & 0x3fff);
+}
+
+inline UINT8 mos6566_device::read_colorram(offs_t offset)
+{
+ return space(AS_1)->read_byte(offset & 0x3ff);
+}
+
+// Idle access
+inline void mos6566_device::vic2_idle_access()
+{
+ read_videoram(0x3fff);
+}
+
+// Fetch sprite data pointer
+inline void mos6566_device::vic2_spr_ptr_access( int num )
+{
+ m_spr_ptr[num] = read_videoram(SPRITE_ADDR(num)) << 6;
+}
+
+// Fetch sprite data, increment data counter
+inline void mos6566_device::vic2_spr_data_access( int num, int bytenum )
+{
+ if (m_spr_dma_on & (1 << num))
+ {
+ m_spr_data[num][bytenum] = read_videoram((m_mc[num] & 0x3f) | m_spr_ptr[num]);
+ m_mc[num]++;
+ }
+ else
+ if (bytenum == 1)
+ vic2_idle_access();
+}
+
+// Turn on display if Bad Line
+inline void mos6566_device::vic2_display_if_bad_line()
+{
+ if (m_is_bad_line)
+ m_display_state = 1;
+}
+
+// Suspend CPU
+inline void mos6566_device::vic2_suspend_cpu()
+{
+ if (m_device_suspended == 0)
+ {
+ m_first_ba_cycle = m_cycles_counter;
+ if (m_in_rdy_workaround_func(0) != 7 )
+ {
+// device_suspend(machine.firstcpu, SUSPEND_REASON_SPIN, 0);
+ }
+ m_device_suspended = 1;
+ }
+}
+
+// Resume CPU
+inline void mos6566_device::vic2_resume_cpu()
+{
+ if (m_device_suspended == 1)
+ {
+ // device_resume(machine.firstcpu, SUSPEND_REASON_SPIN);
+ m_device_suspended = 0;
+ }
+}
+
+// Refresh access
+inline void mos6566_device::vic2_refresh_access()
+{
+ read_videoram(0x3f00 | m_ref_cnt--);
+}
+
+
+inline void mos6566_device::vic2_fetch_if_bad_line()
+{
+ if (m_is_bad_line)
+ m_display_state = 1;
+}
+
+
+// Turn on display and matrix access and reset RC if Bad Line
+inline void mos6566_device::vic2_rc_if_bad_line()
+{
+ if (m_is_bad_line)
+ {
+ m_display_state = 1;
+ m_rc = 0;
+ }
+}
+
+// Sample border color and increment m_graphic_x
+inline void mos6566_device::vic2_sample_border()
+{
+ if (m_draw_this_line)
+ {
+ if (m_border_on)
+ m_border_color_sample[m_cycle - 13] = FRAMECOLOR;
+ m_graphic_x += 8;
+ }
+}
+
+
+// Turn on sprite DMA if necessary
+inline void mos6566_device::vic2_check_sprite_dma()
+{
+ int i;
+ UINT8 mask = 1;
+
+ for (i = 0; i < 8; i++, mask <<= 1)
+ if (SPRITEON(i) && ((m_rasterline & 0xff) == SPRITE_Y_POS(i)))
+ {
+ m_spr_dma_on |= mask;
+ m_mc_base[i] = 0;
+ if (SPRITE_Y_EXPAND(i))
+ m_spr_exp_y &= ~mask;
+ }
+}
+
+// Video matrix access
+inline void mos6566_device::vic2_matrix_access()
+{
+// if (m_device_suspended == 1)
+ {
+ if (m_cycles_counter < m_first_ba_cycle)
+ m_matrix_line[m_ml_index] = m_color_line[m_ml_index] = 0xff;
+ else
+ {
+ UINT16 adr = (m_vc & 0x03ff) | VIDEOADDR;
+ m_matrix_line[m_ml_index] = read_videoram(adr);
+ m_color_line[m_ml_index] = read_colorram((adr & 0x03ff));
+ }
+ }
+}
+
+// Graphics data access
+inline void mos6566_device::vic2_graphics_access()
+{
+ if (m_display_state == 1)
+ {
+ UINT16 adr;
+ if (HIRESON)
+ adr = ((m_vc & 0x03ff) << 3) | m_bitmapaddr | m_rc;
+ else
+ adr = (m_matrix_line[m_ml_index] << 3) | m_chargenaddr | m_rc;
+ if (ECMON)
+ adr &= 0xf9ff;
+ m_gfx_data = read_videoram(adr);
+ m_char_data = m_matrix_line[m_ml_index];
+ m_color_data = m_color_line[m_ml_index];
+ m_ml_index++;
+ m_vc++;
+ }
+ else
+ {
+ m_gfx_data = read_videoram((ECMON ? 0x39ff : 0x3fff));
+ m_char_data = 0;
+ }
+}
+
+inline void mos6566_device::vic2_draw_background()
+{
+ if (m_draw_this_line)
+ {
+ UINT8 c;
+
+ switch (GFXMODE)
+ {
+ case 0:
+ case 1:
+ case 3:
+ c = m_colors[0];
+ break;
+ case 2:
+ c = m_last_char_data & 0x0f;
+ break;
+ case 4:
+ if (m_last_char_data & 0x80)
+ if (m_last_char_data & 0x40)
+ c = m_colors[3];
+ else
+ c = m_colors[2];
+ else
+ if (m_last_char_data & 0x40)
+ c = m_colors[1];
+ else
+ c = m_colors[0];
+ break;
+ default:
+ c = 0;
+ break;
+ }
+ m_bitmap->plot_box(m_graphic_x, VIC2_RASTER_2_EMU(m_rasterline), 8, 1, c);
+ }
+}
+
+inline void mos6566_device::vic2_draw_mono( UINT16 p, UINT8 c0, UINT8 c1 )
+{
+ UINT8 c[2];
+ UINT8 data = m_gfx_data;
+
+ c[0] = c0;
+ c[1] = c1;
+
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = c[data & 1];
+ m_fore_coll_buf[p + 7] = data & 1; data >>= 1;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = c[data & 1];
+ m_fore_coll_buf[p + 6] = data & 1; data >>= 1;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = c[data & 1];
+ m_fore_coll_buf[p + 5] = data & 1; data >>= 1;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = c[data & 1];
+ m_fore_coll_buf[p + 4] = data & 1; data >>= 1;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = c[data & 1];
+ m_fore_coll_buf[p + 3] = data & 1; data >>= 1;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = c[data & 1];
+ m_fore_coll_buf[p + 2] = data & 1; data >>= 1;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = c[data & 1];
+ m_fore_coll_buf[p + 1] = data & 1; data >>= 1;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = c[data];
+ m_fore_coll_buf[p + 0] = data & 1;
+}
+
+inline void mos6566_device::vic2_draw_multi( UINT16 p, UINT8 c0, UINT8 c1, UINT8 c2, UINT8 c3 )
+{
+ UINT8 c[4];
+ UINT8 data = m_gfx_data;
+
+ c[0] = c0;
+ c[1] = c1;
+ c[2] = c2;
+ c[3] = c3;
+
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = c[data & 3];
+ m_fore_coll_buf[p + 7] = data & 2;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = c[data & 3];
+ m_fore_coll_buf[p + 6] = data & 2; data >>= 2;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = c[data & 3];
+ m_fore_coll_buf[p + 5] = data & 2;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = c[data & 3];
+ m_fore_coll_buf[p + 4] = data & 2; data >>= 2;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = c[data & 3];
+ m_fore_coll_buf[p + 3] = data & 2;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = c[data & 3];
+ m_fore_coll_buf[p + 2] = data & 2; data >>= 2;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = c[data];
+ m_fore_coll_buf[p + 1] = data & 2;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = c[data];
+ m_fore_coll_buf[p + 0] = data & 2;
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// mos6566_device - constructor
+//-------------------------------------------------
+
+mos6566_device::mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MOS6566, "MOS6566", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_execute_interface(mconfig, *this),
+ m_icount(0),
+ m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)),
+ m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map))
+{
+ m_variant = TYPE_6566;
+}
+
+mos6566_device::mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, type, name, tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_execute_interface(mconfig, *this),
+ m_icount(0),
+ m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)),
+ m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map))
+{
+}
+
+mos6567_device::mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ :mos6566_device(mconfig, MOS6567, "MOS6567", tag, owner, clock) { m_variant = TYPE_6567; }
+
+mos6567_device::mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
+ :mos6566_device(mconfig, type, name, tag, owner, clock) { }
+
+mos8562_device::mos8562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ :mos6567_device(mconfig, MOS8562, "MOS8562", tag, owner, clock) { m_variant = TYPE_8562; }
+
+mos6569_device::mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ :mos6566_device(mconfig, MOS6566, "MOS6569", tag, owner, clock) { m_variant = TYPE_6569; }
+
+mos6569_device::mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
+ :mos6566_device(mconfig, type, name, tag, owner, clock) { }
+
+mos8565_device::mos8565_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ :mos6569_device(mconfig, MOS8565, "MOS8565", tag, owner, clock) { m_variant = TYPE_8565; }
+
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void mos6566_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const mos6566_interface *intf = reinterpret_cast<const mos6566_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<mos6566_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ }
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void mos6566_device::device_start()
+{
+ // set our instruction counter
+ m_icountptr = &m_icount;
+
+ // resolve callbacks
+ m_out_irq_func.resolve(m_out_irq_cb, *this);
+ m_out_rdy_func.resolve(m_out_rdy_cb, *this);
+ m_in_lightpen_x_func.resolve(m_in_x_cb, *this);
+ m_in_lightpen_y_func.resolve(m_in_y_cb, *this);
+ m_in_lightpen_button_func.resolve(m_in_button_cb, *this);
+ m_in_rdy_workaround_func.resolve(m_in_rdy_cb, *this);
+
+ m_cpu = machine().device<cpu_device>(m_cpu_tag);
+
+ m_screen = machine().device<screen_device>(m_screen_tag);
+ int width = m_screen->width();
+ int height = m_screen->height();
+
+ m_bitmap = auto_bitmap_ind16_alloc(machine(), width, height);
+
+ // initialize palette
+ int i;
+
+ for (i = 0; i < 16; i++)
+ {
+ palette_set_color_rgb(machine(), i, PALETTE[i * 3], PALETTE[i * 3 + 1], PALETTE[i * 3 + 2]);
+ }
+
+ for (i = 0; i < 256; i++)
+ {
+ m_expandx[i] = 0;
+ if (i & 1)
+ m_expandx[i] |= 3;
+ if (i & 2)
+ m_expandx[i] |= 0xc;
+ if (i & 4)
+ m_expandx[i] |= 0x30;
+ if (i & 8)
+ m_expandx[i] |= 0xc0;
+ if (i & 0x10)
+ m_expandx[i] |= 0x300;
+ if (i & 0x20)
+ m_expandx[i] |= 0xc00;
+ if (i & 0x40)
+ m_expandx[i] |= 0x3000;
+ if (i & 0x80)
+ m_expandx[i] |= 0xc000;
+ }
+
+ for (i = 0; i < 256; i++)
+ {
+ m_expandx_multi[i] = 0;
+ if (i & 1)
+ m_expandx_multi[i] |= 5;
+ if (i & 2)
+ m_expandx_multi[i] |= 0xa;
+ if (i & 4)
+ m_expandx_multi[i] |= 0x50;
+ if (i & 8)
+ m_expandx_multi[i] |= 0xa0;
+ if (i & 0x10)
+ m_expandx_multi[i] |= 0x500;
+ if (i & 0x20)
+ m_expandx_multi[i] |= 0xa00;
+ if (i & 0x40)
+ m_expandx_multi[i] |= 0x5000;
+ if (i & 0x80)
+ m_expandx_multi[i] |= 0xa000;
+ }
+
+ // state saving
+ save_item(NAME(m_reg));
+
+ save_item(NAME(m_on));
+
+ //save_item(NAME(m_bitmap));
+
+ save_item(NAME(m_chargenaddr));
+ save_item(NAME(m_videoaddr));
+ save_item(NAME(m_bitmapaddr));
+
+ save_item(NAME(m_colors));
+ save_item(NAME(m_spritemulti));
+
+ save_item(NAME(m_rasterline));
+ save_item(NAME(m_cycles_counter));
+ save_item(NAME(m_cycle));
+ save_item(NAME(m_raster_x));
+ save_item(NAME(m_graphic_x));
+
+ save_item(NAME(m_dy_start));
+ save_item(NAME(m_dy_stop));
+
+ save_item(NAME(m_draw_this_line));
+ save_item(NAME(m_is_bad_line));
+ save_item(NAME(m_bad_lines_enabled));
+ save_item(NAME(m_display_state));
+ save_item(NAME(m_char_data));
+ save_item(NAME(m_gfx_data));
+ save_item(NAME(m_color_data));
+ save_item(NAME(m_last_char_data));
+ save_item(NAME(m_matrix_line));
+ save_item(NAME(m_color_line));
+ save_item(NAME(m_vblanking));
+ save_item(NAME(m_ml_index));
+ save_item(NAME(m_rc));
+ save_item(NAME(m_vc));
+ save_item(NAME(m_vc_base));
+ save_item(NAME(m_ref_cnt));
+
+ save_item(NAME(m_spr_coll_buf));
+ save_item(NAME(m_fore_coll_buf));
+ save_item(NAME(m_spr_exp_y));
+ save_item(NAME(m_spr_dma_on));
+ save_item(NAME(m_spr_draw));
+ save_item(NAME(m_spr_disp_on));
+ save_item(NAME(m_spr_ptr));
+ save_item(NAME(m_mc_base));
+ save_item(NAME(m_mc));
+
+ for (i = 0; i < 8; i++)
+ {
+ save_item(NAME(m_spr_data[i]), i);
+ save_item(NAME(m_spr_draw_data[i]), i);
+ }
+
+ save_item(NAME(m_border_on));
+ save_item(NAME(m_ud_border_on));
+ save_item(NAME(m_border_on_sample));
+ save_item(NAME(m_border_color_sample));
+
+ save_item(NAME(m_first_ba_cycle));
+ save_item(NAME(m_device_suspended));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void mos6566_device::device_reset()
+{
+ int i, j;
+
+ memset(m_reg, 0, ARRAY_LENGTH(m_reg));
+
+ for (i = 0; i < ARRAY_LENGTH(m_mc); i++)
+ m_mc[i] = 63;
+
+ // from 0 to 311 (0 first, PAL) or from 0 to 261 (? first, NTSC 6567R56A) or from 0 to 262 (? first, NTSC 6567R8)
+ m_rasterline = 0; // VIC2_LINES - 1;
+
+ m_cycles_counter = -1;
+ m_cycle = 63;
+
+ m_on = 1;
+
+ m_dy_start = ROW24_YSTART;
+ m_dy_stop = ROW24_YSTOP;
+
+ m_draw_this_line = 0;
+ m_is_bad_line = 0;
+ m_bad_lines_enabled = 0;
+ m_display_state = 0;
+ m_char_data = 0;
+ m_gfx_data = 0;
+ m_color_data = 0;
+ m_last_char_data = 0;
+ m_vblanking = 0;
+ m_ml_index = 0;
+ m_rc = 0;
+ m_vc = 0;
+ m_vc_base = 0;
+ m_ref_cnt = 0;
+
+ m_spr_exp_y = 0;
+ m_spr_dma_on = 0;
+ m_spr_draw = 0;
+ m_spr_disp_on = 0;
+
+
+ m_border_on = 0;
+ m_ud_border_on = 0;
+
+ m_first_ba_cycle = 0;
+ m_device_suspended = 0;
+
+ memset(m_matrix_line, 0, ARRAY_LENGTH(m_matrix_line));
+ memset(m_color_line, 0, ARRAY_LENGTH(m_color_line));
+
+ memset(m_spr_coll_buf, 0, ARRAY_LENGTH(m_spr_coll_buf));
+ memset(m_fore_coll_buf, 0, ARRAY_LENGTH(m_fore_coll_buf));
+ memset(m_border_on_sample, 0, ARRAY_LENGTH(m_border_on_sample));
+ memset(m_border_color_sample, 0, ARRAY_LENGTH(m_border_color_sample));
+
+ for (i = 0; i < 8; i++)
+ {
+ m_spr_ptr[i] = 0;
+ m_mc_base[i] = 0;
+ m_mc[i] = 0;
+ for (j = 0; j < 4; j++)
+ {
+ m_spr_draw_data[i][j] = 0;
+ m_spr_data[i][j] = 0;
+ }
+ }
+}
+
+
+//-------------------------------------------------
+// execute_run -
+//-------------------------------------------------
+
+void mos6566_device::execute_run()
+{
+ do
+ {
+ int i;
+ UINT8 mask;
+ m_cycles_counter++;
+
+ switch (m_cycle)
+ {
+
+ // Sprite 3, raster counter, raster IRQ, bad line
+ case 1:
+ if (m_rasterline == (VIC2_LINES - 1))
+ {
+ m_vblanking = 1;
+
+ // if (LIGHTPEN_BUTTON)
+ {
+ m_reg[0x13] = VIC2_X_VALUE;
+ m_reg[0x14] = VIC2_Y_VALUE;
+ }
+ vic2_set_interrupt(8);
+ }
+ else
+ {
+ m_rasterline++;
+
+ if (m_rasterline == VIC2_FIRST_DMA_LINE)
+ m_bad_lines_enabled = SCREENON;
+
+ m_is_bad_line = ((m_rasterline >= VIC2_FIRST_DMA_LINE) && (m_rasterline <= VIC2_LAST_DMA_LINE) &&
+ ((m_rasterline & 0x07) == VERTICALPOS) && m_bad_lines_enabled);
+
+ m_draw_this_line = ((VIC2_RASTER_2_EMU(m_rasterline) >= VIC2_RASTER_2_EMU(VIC2_FIRST_DISP_LINE)) &&
+ (VIC2_RASTER_2_EMU(m_rasterline ) <= VIC2_RASTER_2_EMU(VIC2_LAST_DISP_LINE)));
+ }
+
+ m_border_on_sample[0] = m_border_on;
+ vic2_spr_ptr_access(3);
+ vic2_spr_data_access(3, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x08)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 3
+ case 2:
+ if (m_vblanking)
+ {
+ // Vertical blank, reset counters
+ m_rasterline = m_vc_base = 0;
+ m_ref_cnt = 0xff;
+ m_vblanking = 0;
+
+ // Trigger raster IRQ if IRQ in line 0
+ if (RASTERLINE == 0)
+ {
+ vic2_set_interrupt(1);
+ }
+ }
+
+ if (m_rasterline == RASTERLINE)
+ {
+ vic2_set_interrupt(1);
+ }
+
+ m_graphic_x = VIC2_X_2_EMU(0);
+
+ vic2_spr_data_access(3, 1);
+ vic2_spr_data_access(3, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 4
+ case 3:
+ vic2_spr_ptr_access(4);
+ vic2_spr_data_access(4, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x10)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 4
+ case 4:
+ vic2_spr_data_access(4, 1);
+ vic2_spr_data_access(4, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 5
+ case 5:
+ vic2_spr_ptr_access(5);
+ vic2_spr_data_access(5, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x20)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 5
+ case 6:
+ vic2_spr_data_access(5, 1);
+ vic2_spr_data_access(5, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 6
+ case 7:
+ vic2_spr_ptr_access(6);
+ vic2_spr_data_access(6, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x40)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 6
+ case 8:
+ vic2_spr_data_access(6, 1);
+ vic2_spr_data_access(6, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 7
+ case 9:
+ vic2_spr_ptr_access(7);
+ vic2_spr_data_access(7, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x80)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 7
+ case 10:
+ vic2_spr_data_access(7, 1);
+ vic2_spr_data_access(7, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Refresh
+ case 11:
+ vic2_refresh_access();
+ vic2_display_if_bad_line();
+
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line
+ case 12:
+ vic2_refresh_access();
+ vic2_fetch_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line, raster_x
+ case 13:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_refresh_access();
+ vic2_fetch_if_bad_line();
+
+ m_raster_x = 0xfffc;
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line, RC, VC
+ case 14:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_refresh_access();
+ vic2_rc_if_bad_line();
+
+ m_vc = m_vc_base;
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line, sprite y expansion
+ case 15:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_refresh_access();
+ vic2_fetch_if_bad_line();
+
+ for (i = 0; i < 8; i++)
+ if (m_spr_exp_y & (1 << i))
+ m_mc_base[i] += 2;
+
+ if (m_is_bad_line)
+ vic2_suspend_cpu();
+
+ m_ml_index = 0;
+ vic2_matrix_access();
+
+ m_cycle++;
+ break;
+
+ // Graphics, sprite y expansion, sprite DMA
+ case 16:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_fetch_if_bad_line();
+
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ {
+ if (m_spr_exp_y & mask)
+ m_mc_base[i]++;
+ if ((m_mc_base[i] & 0x3f) == 0x3f)
+ m_spr_dma_on &= ~mask;
+ }
+
+ vic2_matrix_access();
+
+ m_cycle++;
+ break;
+
+ // Graphics, check border
+ case 17:
+ if (COLUMNS40)
+ {
+ if (m_rasterline == m_dy_stop)
+ m_ud_border_on = 1;
+ else
+ {
+ if (SCREENON)
+ {
+ if (m_rasterline == m_dy_start)
+ m_border_on = m_ud_border_on = 0;
+ else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ }
+ else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ }
+ }
+
+ // Second sample of border state
+ m_border_on_sample[1] = m_border_on;
+
+ vic2_draw_background();
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_fetch_if_bad_line();
+ vic2_matrix_access();
+
+ m_cycle++;
+ break;
+
+ // Check border
+ case 18:
+ if (!COLUMNS40)
+ {
+ if (m_rasterline == m_dy_stop)
+ m_ud_border_on = 1;
+ else
+ {
+ if (SCREENON)
+ {
+ if (m_rasterline == m_dy_start)
+ m_border_on = m_ud_border_on = 0;
+ else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ }
+ else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ }
+ }
+
+ // Third sample of border state
+ m_border_on_sample[2] = m_border_on;
+
+ // Graphics
+
+ case 19:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ case 32:
+ case 33:
+ case 34:
+ case 35:
+ case 36:
+ case 37:
+ case 38:
+ case 39:
+ case 40:
+ case 41:
+ case 42:
+ case 43:
+ case 44:
+ case 45:
+ case 46:
+ case 47:
+ case 48:
+ case 49:
+ case 50:
+ case 51:
+ case 52:
+ case 53:
+ case 54:
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_fetch_if_bad_line();
+ vic2_matrix_access();
+ m_last_char_data = m_char_data;
+
+ m_cycle++;
+ break;
+
+ // Graphics, sprite y expansion, sprite DMA
+ case 55:
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_display_if_bad_line();
+
+ // sprite y expansion
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ if (SPRITE_Y_EXPAND (i))
+ m_spr_exp_y ^= mask;
+
+ vic2_check_sprite_dma();
+
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Check border, sprite DMA
+ case 56:
+ if (!COLUMNS40)
+ m_border_on = 1;
+
+ // Fourth sample of border state
+ m_border_on_sample[3] = m_border_on;
+
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_idle_access();
+ vic2_display_if_bad_line();
+ vic2_check_sprite_dma();
+
+ m_cycle++;
+ break;
+
+ // Check border, sprites
+ case 57:
+ if (COLUMNS40)
+ m_border_on = 1;
+
+ // Fifth sample of border state
+ m_border_on_sample[4] = m_border_on;
+
+ // Sample spr_disp_on and spr_data for sprite drawing
+ m_spr_draw = m_spr_disp_on;
+ if (m_spr_draw)
+ memcpy(m_spr_draw_data, m_spr_data, 8 * 4);
+
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ if ((m_spr_disp_on & mask) && !(m_spr_dma_on & mask))
+ m_spr_disp_on &= ~mask;
+
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_idle_access();
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // for NTSC 6567R8
+ case 58:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_idle_access();
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // for NTSC 6567R8
+ case 59:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_idle_access();
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 0, sprite DMA, MC, RC
+ case 60:
+ vic2_draw_background();
+ vic2_sample_border();
+
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ {
+ m_mc[i] = m_mc_base[i];
+ if ((m_spr_dma_on & mask) && ((m_rasterline & 0xff) == SPRITE_Y_POS(i)))
+ m_spr_disp_on |= mask;
+ }
+
+ vic2_spr_ptr_access(0);
+ vic2_spr_data_access(0, 0);
+
+ if (m_rc == 7)
+ {
+ m_vc_base = m_vc;
+ m_display_state = 0;
+ }
+
+ if (m_is_bad_line || m_display_state)
+ {
+ m_display_state = 1;
+ m_rc = (m_rc + 1) & 7;
+ }
+
+ if (m_spr_dma_on & 0x01)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 0
+ case 61:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_spr_data_access(0, 1);
+ vic2_spr_data_access(0, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 1, draw
+ case 62:
+ vic2_draw_background();
+ vic2_sample_border();
+
+ if (m_draw_this_line)
+ {
+ vic2_draw_sprites();
+
+ if (m_border_on_sample[0])
+ for (i = 0; i < 4; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]);
+
+ if (m_border_on_sample[1])
+ m_bitmap->plot_box(VIC2_X_2_EMU(4 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[4]);
+
+ if (m_border_on_sample[2])
+ for (i = 5; i < 43; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]);
+
+ if (m_border_on_sample[3])
+ m_bitmap->plot_box(VIC2_X_2_EMU(43 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[43]);
+
+ if (m_border_on_sample[4])
+ {
+ for (i = 44; i < 48; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]);
+ for (i = 48; i < 53; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[47]);
+ }
+ }
+
+ vic2_spr_ptr_access(1);
+ vic2_spr_data_access(1, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x02)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 1
+ case 63:
+ vic2_spr_data_access(1, 1);
+ vic2_spr_data_access(1, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 2
+ case 64:
+ vic2_spr_ptr_access(2);
+ vic2_spr_data_access(2, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x04)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Sprite 2
+ case 65:
+ vic2_spr_data_access(2, 1);
+ vic2_spr_data_access(2, 2);
+ vic2_display_if_bad_line();
+
+ if (m_rasterline == m_dy_stop)
+ m_ud_border_on = 1;
+ else
+ if (SCREENON && (m_rasterline == m_dy_start))
+ m_ud_border_on = 0;
+
+ // Last cycle
+ m_cycle = 1;
+ }
+
+ m_raster_x += 8;
+ m_icount--;
+ } while (m_icount > 0);
+}
+
+
+//-------------------------------------------------
+// execute_run -
+//-------------------------------------------------
+
+void mos6569_device::execute_run()
+{
+ do
+ {
+ int i;
+ UINT8 mask;
+ //static int adjust[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+ UINT8 cpu_cycles = m_cpu->total_cycles() & 0xff;
+ UINT8 vic_cycles = (m_cycles_counter + 1) & 0xff;
+ m_cycles_counter++;
+
+ // printf("%02x %02x %02x\n",cpu_cycles,vic_cycles,m_rdy_cycles);
+ #if 0
+ if (machine.input().code_pressed(KEYCODE_X))
+ {
+ if (machine.input().code_pressed_once(KEYCODE_Q)) adjust[1]++;
+ if (machine.input().code_pressed_once(KEYCODE_W)) adjust[2]++;
+ if (machine.input().code_pressed_once(KEYCODE_E)) adjust[3]++;
+ if (machine.input().code_pressed_once(KEYCODE_R)) adjust[4]++;
+ if (machine.input().code_pressed_once(KEYCODE_T)) adjust[5]++;
+ if (machine.input().code_pressed_once(KEYCODE_Y)) adjust[6]++;
+ if (machine.input().code_pressed_once(KEYCODE_U)) adjust[7]++;
+ if (machine.input().code_pressed_once(KEYCODE_I)) adjust[8]++;
+ if (machine.input().code_pressed_once(KEYCODE_A)) adjust[1]--;
+ if (machine.input().code_pressed_once(KEYCODE_S)) adjust[2]--;
+ if (machine.input().code_pressed_once(KEYCODE_D)) adjust[3]--;
+ if (machine.input().code_pressed_once(KEYCODE_F)) adjust[4]--;
+ if (machine.input().code_pressed_once(KEYCODE_G)) adjust[5]--;
+ if (machine.input().code_pressed_once(KEYCODE_H)) adjust[6]--;
+ if (machine.input().code_pressed_once(KEYCODE_J)) adjust[7]--;
+ if (machine.input().code_pressed_once(KEYCODE_K)) adjust[8]--;
+ if (machine.input().code_pressed_once(KEYCODE_C)) adjust[0]++;
+ if (machine.input().code_pressed_once(KEYCODE_V)) adjust[0]--;
+ if (machine.input().code_pressed_once(KEYCODE_Z)) printf("b:%02x 1:%02x 2:%02x 3:%02x 4:%02x 5:%02x 6:%02x 7:%02x 8:%02x\n",
+ adjust[0],adjust[1],adjust[2],adjust[3],adjust[4],adjust[5],adjust[6],adjust[7],adjust[8]);
+ }
+ #define adjust(x) adjust[x]
+ #else
+ #define adjust(x) 0
+ #endif
+
+ switch(m_cycle)
+ {
+
+ // Sprite 3, raster counter, raster IRQ, bad line
+ case 1:
+ if (m_rasterline == (VIC2_LINES - 1))
+ {
+ m_vblanking = 1;
+
+ // if (LIGHTPEN_BUTTON)
+ {
+ m_reg[0x13] = VIC2_X_VALUE;
+ m_reg[0x14] = VIC2_Y_VALUE;
+ }
+ vic2_set_interrupt(8);
+ }
+ else
+ {
+ m_rasterline++;
+
+ if (m_rasterline == VIC2_FIRST_DMA_LINE)
+ m_bad_lines_enabled = SCREENON;
+
+ m_is_bad_line = ((m_rasterline >= VIC2_FIRST_DMA_LINE) && (m_rasterline <= VIC2_LAST_DMA_LINE) &&
+ ((m_rasterline & 0x07) == VERTICALPOS) && m_bad_lines_enabled);
+
+ m_draw_this_line = ((VIC2_RASTER_2_EMU(m_rasterline) >= VIC2_RASTER_2_EMU(VIC2_FIRST_DISP_LINE)) &&
+ (VIC2_RASTER_2_EMU(m_rasterline ) <= VIC2_RASTER_2_EMU(VIC2_LAST_DISP_LINE)));
+ }
+
+ m_border_on_sample[0] = m_border_on;
+ vic2_spr_ptr_access(3);
+ vic2_spr_data_access(3, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x08)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x08) m_rdy_cycles += (2 + adjust(1));
+
+ m_cycle++;
+ break;
+
+ // Sprite 3
+ case 2:
+ if (m_vblanking)
+ {
+ // Vertical blank, reset counters
+ m_rasterline = m_vc_base = 0;
+ m_ref_cnt = 0xff;
+ m_vblanking = 0;
+
+ // Trigger raster IRQ if IRQ in line 0
+ if (RASTERLINE == 0)
+ {
+ vic2_set_interrupt(1);
+ }
+ }
+
+ if (m_rasterline == RASTERLINE)
+ {
+ vic2_set_interrupt(1);
+ }
+
+ m_graphic_x = VIC2_X_2_EMU(0);
+
+ vic2_spr_data_access(3, 1);
+ vic2_spr_data_access(3, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 4
+ case 3:
+ vic2_spr_ptr_access(4);
+ vic2_spr_data_access(4, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x10)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x10) m_rdy_cycles += (2 + adjust(2));
+
+ m_cycle++;
+ break;
+
+ // Sprite 4
+ case 4:
+ vic2_spr_data_access(4, 1);
+ vic2_spr_data_access(4, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 5
+ case 5:
+ vic2_spr_ptr_access(5);
+ vic2_spr_data_access(5, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x20)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x20) m_rdy_cycles += (2 + adjust(3));
+
+ m_cycle++;
+ break;
+
+ // Sprite 5
+ case 6:
+ vic2_spr_data_access(5, 1);
+ vic2_spr_data_access(5, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 6
+ case 7:
+ vic2_spr_ptr_access(6);
+ vic2_spr_data_access(6, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x40)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x40) m_rdy_cycles += (2 + adjust(4));
+
+ m_cycle++;
+ break;
+
+ // Sprite 6
+ case 8:
+ vic2_spr_data_access(6, 1);
+ vic2_spr_data_access(6, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 7
+ case 9:
+ vic2_spr_ptr_access(7);
+ vic2_spr_data_access(7, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x80)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x80) m_rdy_cycles += (2 + adjust(5));
+
+ m_cycle++;
+ break;
+
+ // Sprite 7
+ case 10:
+ vic2_spr_data_access(7, 1);
+ vic2_spr_data_access(7, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Refresh
+ case 11:
+ vic2_refresh_access();
+ vic2_display_if_bad_line();
+
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line
+ case 12:
+ vic2_refresh_access();
+ vic2_fetch_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line, raster_x
+ case 13:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_refresh_access();
+ vic2_fetch_if_bad_line();
+
+ m_raster_x = 0xfffc;
+
+ if ((m_in_rdy_workaround_func(0) == 0 ) && (m_is_bad_line))
+ m_rdy_cycles += (43+adjust(0));
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line, RC, VC
+ case 14:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_refresh_access();
+ vic2_rc_if_bad_line();
+
+ m_vc = m_vc_base;
+
+ if ((m_in_rdy_workaround_func(0) == 1 ) && (m_is_bad_line))
+ m_rdy_cycles += (42+adjust(0));
+
+ m_cycle++;
+ break;
+
+ // Refresh, fetch if bad line, sprite y expansion
+ case 15:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_refresh_access();
+ vic2_fetch_if_bad_line();
+
+ for (i = 0; i < 8; i++)
+ if (m_spr_exp_y & (1 << i))
+ m_mc_base[i] += 2;
+
+ m_ml_index = 0;
+ vic2_matrix_access();
+
+ if ((m_in_rdy_workaround_func(0) == 2 ) && (m_is_bad_line))
+ m_rdy_cycles += (41+adjust(0));
+
+ m_cycle++;
+ break;
+
+ // Graphics, sprite y expansion, sprite DMA
+ case 16:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_fetch_if_bad_line();
+
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ {
+ if (m_spr_exp_y & mask)
+ m_mc_base[i]++;
+ if ((m_mc_base[i] & 0x3f) == 0x3f)
+ m_spr_dma_on &= ~mask;
+ }
+
+ vic2_matrix_access();
+
+ if ((m_in_rdy_workaround_func(0) == 3 ) && (m_is_bad_line))
+ m_rdy_cycles += (40+adjust(0));
+
+ m_cycle++;
+ break;
+
+ // Graphics, check border
+ case 17:
+ if (COLUMNS40)
+ {
+ if (m_rasterline == m_dy_stop)
+ m_ud_border_on = 1;
+ else
+ {
+ if (SCREENON)
+ {
+ if (m_rasterline == m_dy_start)
+ m_border_on = m_ud_border_on = 0;
+ else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ } else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ }
+ }
+
+ // Second sample of border state
+ m_border_on_sample[1] = m_border_on;
+
+ vic2_draw_background();
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_fetch_if_bad_line();
+ vic2_matrix_access();
+
+ if ((m_in_rdy_workaround_func(0) == 4 ) && (m_is_bad_line))
+ m_rdy_cycles += (40+adjust(0));
+
+ m_cycle++;
+ break;
+
+ // Check border
+ case 18:
+ if (!COLUMNS40)
+ {
+ if (m_rasterline == m_dy_stop)
+ m_ud_border_on = 1;
+ else
+ {
+ if (SCREENON)
+ {
+ if (m_rasterline == m_dy_start)
+ m_border_on = m_ud_border_on = 0;
+ else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ } else
+ if (m_ud_border_on == 0)
+ m_border_on = 0;
+ }
+ }
+
+ // Third sample of border state
+ m_border_on_sample[2] = m_border_on;
+
+ // Graphics
+
+ case 19:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ case 32:
+ case 33:
+ case 34:
+ case 35:
+ case 36:
+ case 37:
+ case 38:
+ case 39:
+ case 40:
+ case 41:
+ case 42:
+ case 43:
+ case 44:
+ case 45:
+ case 46:
+ case 47:
+ case 48:
+ case 49:
+ case 50:
+ case 51:
+ case 52:
+ case 53:
+ case 54:
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_fetch_if_bad_line();
+ vic2_matrix_access();
+ m_last_char_data = m_char_data;
+
+ m_cycle++;
+ break;
+
+ // Graphics, sprite y expansion, sprite DMA
+ case 55:
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_graphics_access();
+ vic2_display_if_bad_line();
+
+ // sprite y expansion
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ if (SPRITE_Y_EXPAND (i))
+ m_spr_exp_y ^= mask;
+
+ vic2_check_sprite_dma();
+
+ vic2_resume_cpu();
+
+ m_cycle++;
+ break;
+
+ // Check border, sprite DMA
+ case 56:
+ if (!COLUMNS40)
+ m_border_on = 1;
+
+ // Fourth sample of border state
+ m_border_on_sample[3] = m_border_on;
+
+ vic2_draw_graphics();
+ vic2_sample_border();
+ vic2_idle_access();
+ vic2_display_if_bad_line();
+ vic2_check_sprite_dma();
+
+ m_cycle++;
+ break;
+
+ // Check border, sprites
+ case 57:
+ if (COLUMNS40)
+ m_border_on = 1;
+
+ // Fifth sample of border state
+ m_border_on_sample[4] = m_border_on;
+
+ // Sample spr_disp_on and spr_data for sprite drawing
+ m_spr_draw = m_spr_disp_on;
+ if (m_spr_draw)
+ memcpy(m_spr_draw_data, m_spr_data, 8 * 4);
+
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ if ((m_spr_disp_on & mask) && !(m_spr_dma_on & mask))
+ m_spr_disp_on &= ~mask;
+
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_idle_access();
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 0, sprite DMA, MC, RC
+ case 58:
+ vic2_draw_background();
+ vic2_sample_border();
+
+ mask = 1;
+ for (i = 0; i < 8; i++, mask <<= 1)
+ {
+ m_mc[i] = m_mc_base[i];
+ if ((m_spr_dma_on & mask) && ((m_rasterline & 0xff) == SPRITE_Y_POS(i)))
+ m_spr_disp_on |= mask;
+ }
+
+ vic2_spr_ptr_access(0);
+ vic2_spr_data_access(0, 0);
+
+ if (m_rc == 7)
+ {
+ m_vc_base = m_vc;
+ m_display_state = 0;
+ }
+
+ if (m_is_bad_line || m_display_state)
+ {
+ m_display_state = 1;
+ m_rc = (m_rc + 1) & 7;
+ }
+
+ if (m_spr_dma_on & 0x01)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x01) m_rdy_cycles += (2 + adjust(6));
+
+ m_cycle++;
+ break;
+
+ // Sprite 0
+ case 59:
+ vic2_draw_background();
+ vic2_sample_border();
+ vic2_spr_data_access(0, 1);
+ vic2_spr_data_access(0, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 1, draw
+ case 60:
+ vic2_draw_background();
+ vic2_sample_border();
+
+ if (m_draw_this_line)
+ {
+ vic2_draw_sprites();
+
+ if (m_border_on_sample[0])
+ for (i = 0; i < 4; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]);
+
+ if (m_border_on_sample[1])
+ m_bitmap->plot_box(VIC2_X_2_EMU(4 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[4]);
+
+ if (m_border_on_sample[2])
+ for (i = 5; i < 43; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]);
+
+ if (m_border_on_sample[3])
+ m_bitmap->plot_box(VIC2_X_2_EMU(43 * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[43]);
+
+ if (m_border_on_sample[4])
+ {
+ for (i = 44; i < 48; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[i]);
+ for (i = 48; i < 51; i++)
+ m_bitmap->plot_box(VIC2_X_2_EMU(i * 8), VIC2_RASTER_2_EMU(m_rasterline), 8, 1, m_border_color_sample[47]);
+ }
+ }
+
+ vic2_spr_ptr_access(1);
+ vic2_spr_data_access(1, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x02)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x02) m_rdy_cycles += (2 + adjust(7));
+
+ m_cycle++;
+ break;
+
+ // Sprite 1
+ case 61:
+ vic2_spr_data_access(1, 1);
+ vic2_spr_data_access(1, 2);
+ vic2_display_if_bad_line();
+
+ m_cycle++;
+ break;
+
+ // Sprite 2
+ case 62:
+ vic2_spr_ptr_access(2);
+ vic2_spr_data_access(2, 0);
+ vic2_display_if_bad_line();
+
+ if (m_spr_dma_on & 0x04)
+ vic2_suspend_cpu();
+ else
+ vic2_resume_cpu();
+
+ if (m_spr_dma_on & 0x04) m_rdy_cycles += (2 + adjust(8));
+
+ m_cycle++;
+ break;
+
+ // Sprite 2
+ case 63:
+ vic2_spr_data_access(2, 1);
+ vic2_spr_data_access(2, 2);
+ vic2_display_if_bad_line();
+
+ if (m_rasterline == m_dy_stop)
+ m_ud_border_on = 1;
+ else
+ if (SCREENON && (m_rasterline == m_dy_start))
+ m_ud_border_on = 0;
+
+ // Last cycle
+ m_cycle = 1;
+ }
+
+ if ((cpu_cycles == vic_cycles) && (m_rdy_cycles > 0))
+ {
+ device_spin_until_time (m_cpu, m_cpu->cycles_to_attotime(m_rdy_cycles));
+ m_rdy_cycles = 0;
+ }
+
+ m_raster_x += 8;
+ m_icount--;
+ } while (m_icount > 0);
+}
+
+// Graphics display (8 pixels)
+void mos6566_device::vic2_draw_graphics()
+{
+ if (m_draw_this_line == 0)
+ {
+ UINT16 p = m_graphic_x + HORIZONTALPOS;
+ m_fore_coll_buf[p + 7] = 0;
+ m_fore_coll_buf[p + 6] = 0;
+ m_fore_coll_buf[p + 5] = 0;
+ m_fore_coll_buf[p + 4] = 0;
+ m_fore_coll_buf[p + 3] = 0;
+ m_fore_coll_buf[p + 2] = 0;
+ m_fore_coll_buf[p + 1] = 0;
+ m_fore_coll_buf[p + 0] = 0;
+ }
+ else if (m_ud_border_on)
+ {
+ UINT16 p = m_graphic_x + HORIZONTALPOS;
+ m_fore_coll_buf[p + 7] = 0;
+ m_fore_coll_buf[p + 6] = 0;
+ m_fore_coll_buf[p + 5] = 0;
+ m_fore_coll_buf[p + 4] = 0;
+ m_fore_coll_buf[p + 3] = 0;
+ m_fore_coll_buf[p + 2] = 0;
+ m_fore_coll_buf[p + 1] = 0;
+ m_fore_coll_buf[p + 0] = 0;
+ vic2_draw_background();
+ }
+ else
+ {
+ UINT8 tmp_col;
+ UINT16 p = m_graphic_x + HORIZONTALPOS;
+ switch (GFXMODE)
+ {
+ case 0:
+ vic2_draw_mono(p, m_colors[0], m_color_data & 0x0f);
+ break;
+ case 1:
+ if (m_color_data & 0x08)
+ vic2_draw_multi(p, m_colors[0], m_colors[1], m_colors[2], m_color_data & 0x07);
+ else
+ vic2_draw_mono(p, m_colors[0], m_color_data & 0x0f);
+ break;
+ case 2:
+ vic2_draw_mono(p, m_char_data & 0x0f, m_char_data >> 4);
+ break;
+ case 3:
+ vic2_draw_multi(p, m_colors[0], m_char_data >> 4, m_char_data & 0x0f, m_color_data & 0x0f);
+ break;
+ case 4:
+ if (m_char_data & 0x80)
+ if (m_char_data & 0x40)
+ tmp_col = m_colors[3];
+ else
+ tmp_col = m_colors[2];
+ else
+ if (m_char_data & 0x40)
+ tmp_col = m_colors[1];
+ else
+ tmp_col = m_colors[0];
+ vic2_draw_mono(p, tmp_col, m_color_data & 0x0f);
+ break;
+ case 5:
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = 0;
+ m_fore_coll_buf[p + 7] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = 0;
+ m_fore_coll_buf[p + 6] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = 0;
+ m_fore_coll_buf[p + 5] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = 0;
+ m_fore_coll_buf[p + 4] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = 0;
+ m_fore_coll_buf[p + 3] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = 0;
+ m_fore_coll_buf[p + 2] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = 0;
+ m_fore_coll_buf[p + 1] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = 0;
+ m_fore_coll_buf[p + 0] = 0;
+ break;
+ case 6:
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = 0;
+ m_fore_coll_buf[p + 7] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = 0;
+ m_fore_coll_buf[p + 6] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = 0;
+ m_fore_coll_buf[p + 5] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = 0;
+ m_fore_coll_buf[p + 4] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = 0;
+ m_fore_coll_buf[p + 3] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = 0;
+ m_fore_coll_buf[p + 2] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = 0;
+ m_fore_coll_buf[p + 1] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = 0;
+ m_fore_coll_buf[p + 0] = 0;
+ break;
+ case 7:
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 7) = 0;
+ m_fore_coll_buf[p + 7] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 6) = 0;
+ m_fore_coll_buf[p + 6] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 5) = 0;
+ m_fore_coll_buf[p + 5] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 4) = 0;
+ m_fore_coll_buf[p + 4] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 3) = 0;
+ m_fore_coll_buf[p + 3] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 2) = 0;
+ m_fore_coll_buf[p + 2] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 1) = 0;
+ m_fore_coll_buf[p + 1] = 0;
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + 0) = 0;
+ m_fore_coll_buf[p + 0] = 0;
+ break;
+ }
+ }
+}
+
+void mos6566_device::vic2_draw_sprites()
+{
+ int i;
+ UINT8 snum, sbit;
+ UINT8 spr_coll = 0, gfx_coll = 0;
+ UINT32 plane0_l, plane0_r, plane1_l, plane1_r;
+ UINT32 sdata_l = 0, sdata_r = 0;
+
+ for (i = 0; i < 0x400; i++)
+ m_spr_coll_buf[i] = 0;
+
+ for (snum = 0, sbit = 1; snum < 8; snum++, sbit <<= 1)
+ {
+ if ((m_spr_draw & sbit) && (SPRITE_X_POS(snum) <= (403 - (VIC2_FIRSTCOLUMN + 1))))
+ {
+ UINT16 p = SPRITE_X_POS(snum) + VIC2_X_2_EMU(0) + 8;
+ UINT8 color = SPRITE_COLOR(snum);
+ UINT32 sdata = (m_spr_draw_data[snum][0] << 24) | (m_spr_draw_data[snum][1] << 16) | (m_spr_draw_data[snum][2] << 8);
+
+ if (SPRITE_X_EXPAND(snum))
+ {
+ if (SPRITE_X_POS(snum) > (403 - 24 - (VIC2_FIRSTCOLUMN + 1)))
+ continue;
+
+ if (SPRITE_MULTICOLOR(snum))
+ {
+ sdata_l = (m_expandx_multi[(sdata >> 24) & 0xff] << 16) | m_expandx_multi[(sdata >> 16) & 0xff];
+ sdata_r = m_expandx_multi[(sdata >> 8) & 0xff] << 16;
+ plane0_l = (sdata_l & 0x55555555) | (sdata_l & 0x55555555) << 1;
+ plane1_l = (sdata_l & 0xaaaaaaaa) | (sdata_l & 0xaaaaaaaa) >> 1;
+ plane0_r = (sdata_r & 0x55555555) | (sdata_r & 0x55555555) << 1;
+ plane1_r = (sdata_r & 0xaaaaaaaa) | (sdata_r & 0xaaaaaaaa) >> 1;
+ for (i = 0; i < 32; i++, plane0_l <<= 1, plane1_l <<= 1)
+ {
+ UINT8 col;
+
+ if (plane1_l & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+ if (plane0_l & 0x80000000)
+ col = m_spritemulti[3];
+ else
+ col = color;
+ }
+ else
+ {
+ if (plane0_l & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+ col = m_spritemulti[1];
+ }
+ else
+ continue;
+ }
+
+ if (m_spr_coll_buf[p + i])
+ spr_coll |= m_spr_coll_buf[p + i] | sbit;
+ else
+ {
+ if (SPRITE_PRIORITY(snum))
+ {
+ if (m_fore_coll_buf[p + i] == 0)
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ else
+ {
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ }
+ }
+
+ for (; i < 48; i++, plane0_r <<= 1, plane1_r <<= 1)
+ {
+ UINT8 col;
+
+ if(plane1_r & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+
+ if (plane0_r & 0x80000000)
+ col = m_spritemulti[3];
+ else
+ col = color;
+ }
+ else
+ {
+ if (plane0_r & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+ col = m_spritemulti[1];
+ }
+ else
+ continue;
+ }
+
+ if (m_spr_coll_buf[p + i])
+ spr_coll |= m_spr_coll_buf[p + i] | sbit;
+ else
+ {
+ if (SPRITE_PRIORITY(snum))
+ {
+ if (m_fore_coll_buf[p + i] == 0)
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ else
+ {
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ }
+ }
+ }
+ else
+ {
+ sdata_l = (m_expandx[(sdata >> 24) & 0xff] << 16) | m_expandx[(sdata >> 16) & 0xff];
+ sdata_r = m_expandx[(sdata >> 8) & 0xff] << 16;
+
+ for (i = 0; i < 32; i++, sdata_l <<= 1)
+ if (sdata_l & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+
+ if (m_spr_coll_buf[p + i])
+ spr_coll |= m_spr_coll_buf[p + i] | sbit;
+ else
+ {
+ if (SPRITE_PRIORITY(snum))
+ {
+ if (m_fore_coll_buf[p + i] == 0)
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ else
+ {
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ }
+ }
+
+ for (; i < 48; i++, sdata_r <<= 1)
+ if (sdata_r & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+
+ if (m_spr_coll_buf[p + i])
+ spr_coll |= m_spr_coll_buf[p + i] | sbit;
+ else
+ {
+ if (SPRITE_PRIORITY(snum))
+ {
+ if (m_fore_coll_buf[p + i] == 0)
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ else
+ {
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (SPRITE_MULTICOLOR(snum))
+ {
+ UINT32 plane0 = (sdata & 0x55555555) | (sdata & 0x55555555) << 1;
+ UINT32 plane1 = (sdata & 0xaaaaaaaa) | (sdata & 0xaaaaaaaa) >> 1;
+
+ for (i = 0; i < 24; i++, plane0 <<= 1, plane1 <<= 1)
+ {
+ UINT8 col;
+
+ if (plane1 & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+
+ if (plane0 & 0x80000000)
+ col = m_spritemulti[3];
+ else
+ col = color;
+ }
+ else
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+
+ if (plane0 & 0x80000000)
+ col = m_spritemulti[1];
+ else
+ continue;
+ }
+
+ if (m_spr_coll_buf[p + i])
+ spr_coll |= m_spr_coll_buf[p + i] | sbit;
+ else
+ {
+ if (SPRITE_PRIORITY(snum))
+ {
+ if (m_fore_coll_buf[p + i] == 0)
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ else
+ {
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = col;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < 24; i++, sdata <<= 1)
+ {
+ if (sdata & 0x80000000)
+ {
+ if (m_fore_coll_buf[p + i])
+ {
+ gfx_coll |= sbit;
+ }
+ if (m_spr_coll_buf[p + i])
+ {
+ spr_coll |= m_spr_coll_buf[p + i] | sbit;
+ }
+ else
+ {
+ if (SPRITE_PRIORITY(snum))
+ {
+ if (m_fore_coll_buf[p + i] == 0)
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ else
+ {
+ m_bitmap->pix16(VIC2_RASTER_2_EMU(m_rasterline), p + i) = color;
+ m_spr_coll_buf[p + i] = sbit;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (SPRITE_COLL)
+ SPRITE_COLL |= spr_coll;
+ else
+ {
+ SPRITE_COLL = spr_coll;
+ if (SPRITE_COLL)
+ vic2_set_interrupt(4);
+ }
+
+ if (SPRITE_BG_COLL)
+ SPRITE_BG_COLL |= gfx_coll;
+ else
+ {
+ SPRITE_BG_COLL = gfx_coll;
+ if (SPRITE_BG_COLL)
+ vic2_set_interrupt(2);
+ }
+}
+
+
+//-------------------------------------------------
+// screen_update -
+//-------------------------------------------------
+
+UINT32 mos6566_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ if (m_on)
+ copybitmap(bitmap, *m_bitmap, 0, 0, 0, 0, cliprect);
+
+ return 0;
+}
+
+
+//-------------------------------------------------
+// read -
+//-------------------------------------------------
+
+READ8_MEMBER( mos6566_device::read )
+{
+ UINT8 val = 0;
+
+ offset &= 0x3f;
+
+ switch (offset)
+ {
+ case 0x11:
+ val = (m_reg[offset] & ~0x80) | ((m_rasterline & 0x100) >> 1);
+ break;
+
+ case 0x12:
+ val = m_rasterline & 0xff;
+ break;
+
+ case 0x16:
+ val = m_reg[offset] | 0xc0;
+ break;
+
+ case 0x18:
+ val = m_reg[offset] | 0x01;
+ break;
+
+ case 0x19: /* interrupt flag register */
+ /* vic2_clear_interrupt(0xf); */
+ val = m_reg[offset] | 0x70;
+ break;
+
+ case 0x1a:
+ val = m_reg[offset] | 0xf0;
+ break;
+
+ case 0x1e: /* sprite to sprite collision detect */
+ val = m_reg[offset];
+ m_reg[offset] = 0;
+ vic2_clear_interrupt(4);
+ break;
+
+ case 0x1f: /* sprite to background collision detect */
+ val = m_reg[offset];
+ m_reg[offset] = 0;
+ vic2_clear_interrupt(2);
+ break;
+
+ case 0x20:
+ case 0x21:
+ case 0x22:
+ case 0x23:
+ case 0x24:
+ val = m_reg[offset];
+ break;
+
+ case 0x00:
+ case 0x01:
+ case 0x02:
+ case 0x03:
+ case 0x04:
+ case 0x05:
+ case 0x06:
+ case 0x07:
+ case 0x08:
+ case 0x09:
+ case 0x0a:
+ case 0x0b:
+ case 0x0c:
+ case 0x0d:
+ case 0x0e:
+ case 0x0f:
+ case 0x10:
+ case 0x17:
+ case 0x1b:
+ case 0x1c:
+ case 0x1d:
+ case 0x25:
+ case 0x26:
+ case 0x27:
+ case 0x28:
+ case 0x29:
+ case 0x2a:
+ case 0x2b:
+ case 0x2c:
+ case 0x2d:
+ case 0x2e:
+ val = m_reg[offset];
+ break;
+
+ case 0x2f:
+ case 0x30:
+ if (IS_VICIIE)
+ {
+ val = m_reg[offset];
+ DBG_LOG(2, "vic read", ("%.2x:%.2x\n", offset, val));
+ }
+ else
+ val = 0xff;
+ break;
+
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case 0x3a:
+ case 0x3b:
+ case 0x3c:
+ case 0x3d:
+ case 0x3e:
+ case 0x3f: /* not used */
+ // val = m_reg[offset]; //
+ val = 0xff;
+ DBG_LOG(2, "vic read", ("%.2x:%.2x\n", offset, val));
+ break;
+
+ default:
+ val = m_reg[offset];
+ }
+
+ if ((offset != 0x11) && (offset != 0x12))
+ DBG_LOG(2, "vic read", ("%.2x:%.2x\n", offset, val));
+
+ return val;
+}
+
+
+//-------------------------------------------------
+// write -
+//-------------------------------------------------
+
+WRITE8_MEMBER( mos6566_device::write )
+{
+ DBG_LOG(2, "vic write", ("%.2x:%.2x\n", offset, data));
+ offset &= 0x3f;
+
+ switch (offset)
+ {
+ case 0x01:
+ case 0x03:
+ case 0x05:
+ case 0x07:
+ case 0x09:
+ case 0x0b:
+ case 0x0d:
+ case 0x0f:
+ m_reg[offset] = data; /* sprite y positions */
+ break;
+
+ case 0x00:
+ case 0x02:
+ case 0x04:
+ case 0x06:
+ case 0x08:
+ case 0x0a:
+ case 0x0c:
+ case 0x0e:
+ m_reg[offset] = data; /* sprite x positions */
+ break;
+
+ case 0x10:
+ m_reg[offset] = data; /* sprite x positions */
+ break;
+
+ case 0x17: /* sprite y size */
+ m_spr_exp_y |= ~data;
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x1d: /* sprite x size */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x1b: /* sprite background priority */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x1c: /* sprite multicolor mode select */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x27:
+ case 0x28:
+ case 0x29:
+ case 0x2a:
+ case 0x2b:
+ case 0x2c:
+ case 0x2d:
+ case 0x2e:
+ /* sprite colors */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x25: /* sprite multicolor */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ m_spritemulti[1] = SPRITE_MULTICOLOR1;
+ }
+ break;
+
+ case 0x26: /* sprite multicolor */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ m_spritemulti[3] = SPRITE_MULTICOLOR2;
+ }
+ break;
+
+ case 0x19:
+ vic2_clear_interrupt(data & 0x0f);
+ break;
+
+ case 0x1a: /* irq mask */
+ m_reg[offset] = data;
+ vic2_set_interrupt(0); // beamrider needs this
+ break;
+
+ case 0x11:
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ if (data & 8)
+ {
+ m_dy_start = ROW25_YSTART;
+ m_dy_stop = ROW25_YSTOP;
+ }
+ else
+ {
+ m_dy_start = ROW24_YSTART;
+ m_dy_stop = ROW24_YSTOP;
+ }
+ }
+ break;
+
+ case 0x12:
+ if (data != m_reg[offset])
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x16:
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x18:
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ m_videoaddr = VIDEOADDR;
+ m_chargenaddr = CHARGENADDR;
+ m_bitmapaddr = BITMAPADDR;
+ }
+ break;
+
+ case 0x21: /* background color */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ m_colors[0] = BACKGROUNDCOLOR;
+ }
+ break;
+
+ case 0x22: /* background color 1 */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ m_colors[1] = MULTICOLOR1;
+ }
+ break;
+
+ case 0x23: /* background color 2 */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ m_colors[2] = MULTICOLOR2;
+ }
+ break;
+
+ case 0x24: /* background color 3 */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ m_colors[3] = FOREGROUNDCOLOR;
+ }
+ break;
+
+ case 0x20: /* framecolor */
+ if (m_reg[offset] != data)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x2f:
+ if (IS_VICIIE)
+ {
+ DBG_LOG(2, "vic write", ("%.2x:%.2x\n", offset, data));
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x30:
+ if (IS_VICIIE)
+ {
+ m_reg[offset] = data;
+ }
+ break;
+
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case 0x3a:
+ case 0x3b:
+ case 0x3c:
+ case 0x3d:
+ case 0x3e:
+ case 0x3f:
+ m_reg[offset] = data;
+ DBG_LOG(2, "vic write", ("%.2x:%.2x\n", offset, data));
+ break;
+
+ default:
+ m_reg[offset] = data;
+ break;
+ }
+}
+
+
+//-------------------------------------------------
+// lp_w - light pen strobe
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mos6566_device::lp_w )
+{
+}
diff --git a/src/mess/video/mos6566.h b/src/mess/video/mos6566.h index 08cd88b..28777d4 100644 --- a/src/mess/video/mos6566.h +++ b/src/mess/video/mos6566.h @@ -1,488 +1,488 @@ -/*************************************************************************** - - MOS 6566/6567/6569 Video Interface Chip II (VIC-II) emulation - - Copyright the MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -**************************************************************************** - _____ _____ - DB6 1 |* \_/ | 40 Vcc - DB5 2 | | 39 DB7 - DB4 3 | | 38 DB8 - DB3 4 | | 37 DB9 - DB2 5 | | 36 DB10 - DB1 6 | | 35 DB11 - DB0 7 | | 34 A13 - _IRQ 8 | | 33 A12 - LP 9 | | 32 A11 - _CS 10 | MOS6566 | 31 A10 - R/W 11 | | 30 A9 - BA 12 | | 29 A8 - Vdd 13 | | 28 A7 - COLOR 14 | | 27 A6 - S/LUM 15 | | 26 A5 - AEC 16 | | 25 A4 - PH0 17 | | 24 A3 - PHIN 18 | | 23 A2 - PHCOL 19 | | 22 A1 - Vss 20 |_____________| 21 A0 - - _____ _____ - DB6 1 |* \_/ | 40 Vcc - DB5 2 | | 39 DB7 - DB4 3 | | 38 DB8 - DB3 4 | | 37 DB9 - DB2 5 | | 36 DB10 - DB1 6 | | 35 DB11 - DB0 7 | | 34 A10 - _IRQ 8 | | 33 A9 - LP 9 | MOS6567 | 32 A8 - _CS 10 | MOS6569 | 31 A7 - R/W 11 | MOS8562 | 30 A6 - BA 12 | MOS8565 | 29 A5/A13 - Vdd 13 | | 28 A4/A12 - COLOR 14 | | 27 A3/A11 - S/LUM 15 | | 26 A2/A10 - AEC 16 | | 25 A1/A9 - PH0 17 | | 24 A0/A8 - _RAS 18 | | 23 A11 - CAS 19 | | 22 PHIN - Vss 20 |_____________| 21 PHCL - - _____ _____ - D6 1 |* \_/ | 48 Vcc - D5 2 | | 47 D7 - D4 3 | | 46 D8 - D3 4 | | 45 D9 - D2 5 | | 44 D10 - D1 6 | | 43 D11 - D0 7 | | 42 MA10 - _IRQ 8 | | 41 MA9 - _LP 9 | | 40 MA8 - BA 10 | | 39 A7 - _DMARQST 11 | | 38 A6 - AEC 12 | MOS8564 | 37 MA5 - _CS 13 | MOS8566 | 36 MA4 - R/W 14 | | 35 MA3 - _DMAACK 15 | | 34 MA2 - CHROMA 16 | | 33 MA1 - SYNC/LUM 17 | | 32 MA0 - 1 MHZ 18 | | 31 MA11 - _RAS 19 | | 30 PHI IN - _CAS 20 | | 29 PHI COLOR - MUX 21 | | 28 K2 - _IOACC 22 | | 27 K1 - 2 MHZ 23 | | 26 K0 - Vss 24 |_____________| 25 Z80 PHI - -***************************************************************************/ - -#pragma once - -#ifndef __MOS656X__ -#define __MOS656X__ - -#include "emu.h" - - - -/*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define MCFG_MOS6566_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \ - MCFG_DEVICE_ADD(_tag, MOS6566, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \ - MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_REFRESH_RATE(VIC6566_VRETRACERATE) \ - MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) \ - MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \ - MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6566_device, screen_update) \ - MCFG_PALETTE_LENGTH(16) - -#define MCFG_MOS6567_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \ - MCFG_DEVICE_ADD(_tag, MOS6567, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \ - MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) \ - MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) \ - MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \ - MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6567_device, screen_update) \ - MCFG_PALETTE_LENGTH(16) - -#define MCFG_MOS8562_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \ - MCFG_DEVICE_ADD(_tag, MOS8562, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \ - MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) \ - MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) \ - MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \ - MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8562_device, screen_update) \ - MCFG_PALETTE_LENGTH(16) - -#define MCFG_MOS6569_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \ - MCFG_DEVICE_ADD(_tag, MOS6569, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \ - MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) \ - MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) \ - MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \ - MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6569_device, screen_update) \ - MCFG_PALETTE_LENGTH(16) - -#define MCFG_MOS8565_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \ - MCFG_DEVICE_ADD(_tag, MOS8565, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \ - MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) \ - MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) \ - MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \ - MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8565_device, screen_update) \ - MCFG_PALETTE_LENGTH(16) - - -#define MOS6566_INTERFACE(_name) \ - const mos6566_interface (_name) = - -#define MOS6567_INTERFACE(_name) \ - const mos6566_interface (_name) = - -#define MOS6569_INTERFACE(_name) \ - const mos6566_interface (_name) = - - - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define VIC6566_CLOCK (XTAL_8MHz / 8) // 1000000 -#define VIC6567R56A_CLOCK (XTAL_8MHz / 8) // 1000000 -#define VIC6567_CLOCK (XTAL_14_31818MHz / 14) // 1022727 -#define VIC6569_CLOCK (XTAL_17_734472MHz / 18) // 985248 - -#define VIC6566_DOTCLOCK (VIC6566_CLOCK * 8) // 8000000 -#define VIC6567R56A_DOTCLOCK (VIC6567R56A_CLOCK * 8) // 8000000 -#define VIC6567_DOTCLOCK (VIC6567_CLOCK * 8) // 8181818 -#define VIC6569_DOTCLOCK (VIC6569_CLOCK * 8) // 7881988 - -#define VIC6567_CYCLESPERLINE 65 -#define VIC6569_CYCLESPERLINE 63 - -#define VIC6567_LINES 263 -#define VIC6569_LINES 312 - -#define VIC6566_VRETRACERATE ((float)VIC6566_CLOCK / 262 / 64) -#define VIC6567R56A_VRETRACERATE ((float)VIC6567R56A_CLOCK / 262 / 64) -#define VIC6567_VRETRACERATE ((float)VIC6567_CLOCK / 263 / 65) -#define VIC6569_VRETRACERATE ((float)VIC6569_CLOCK / 312 / 63) - -#define VIC6566_HRETRACERATE (VIC6566_CLOCK / VIC6566_CYCLESPERLINE) -#define VIC6567_HRETRACERATE (VIC6567_CLOCK / VIC6567_CYCLESPERLINE) -#define VIC6569_HRETRACERATE (VIC6569_CLOCK / VIC6569_CYCLESPERLINE) - -#define VIC2_HSIZE 320 -#define VIC2_VSIZE 200 - -#define VIC6567_VISIBLELINES 235 -#define VIC6569_VISIBLELINES 284 - -#define VIC6567_FIRST_DMA_LINE 0x30 -#define VIC6569_FIRST_DMA_LINE 0x30 - -#define VIC6567_LAST_DMA_LINE 0xf7 -#define VIC6569_LAST_DMA_LINE 0xf7 - -#define VIC6567_FIRST_DISP_LINE 0x29 -#define VIC6569_FIRST_DISP_LINE 0x10 - -#define VIC6567_LAST_DISP_LINE (VIC6567_FIRST_DISP_LINE + VIC6567_VISIBLELINES - 1) -#define VIC6569_LAST_DISP_LINE (VIC6569_FIRST_DISP_LINE + VIC6569_VISIBLELINES - 1) - -#define VIC6567_RASTER_2_EMU(a) ((a >= VIC6567_FIRST_DISP_LINE) ? (a - VIC6567_FIRST_DISP_LINE) : (a + 222)) -#define VIC6569_RASTER_2_EMU(a) (a - VIC6569_FIRST_DISP_LINE) - -#define VIC6567_FIRSTCOLUMN 50 -#define VIC6569_FIRSTCOLUMN 50 - -#define VIC6567_VISIBLECOLUMNS 418 -#define VIC6569_VISIBLECOLUMNS 403 - -#define VIC6567_X_2_EMU(a) (a) -#define VIC6569_X_2_EMU(a) (a) - -#define VIC6567_STARTVISIBLELINES ((VIC6567_LINES - VIC6567_VISIBLELINES)/2) -#define VIC6569_STARTVISIBLELINES 16 /* ((VIC6569_LINES - VIC6569_VISIBLELINES)/2) */ - -#define VIC6567_FIRSTRASTERLINE 34 -#define VIC6569_FIRSTRASTERLINE 0 - -#define VIC6567_COLUMNS 512 -#define VIC6569_COLUMNS 504 - -#define VIC6567_STARTVISIBLECOLUMNS ((VIC6567_COLUMNS - VIC6567_VISIBLECOLUMNS)/2) -#define VIC6569_STARTVISIBLECOLUMNS ((VIC6569_COLUMNS - VIC6569_VISIBLECOLUMNS)/2) - -#define VIC6567_FIRSTRASTERCOLUMNS 412 -#define VIC6569_FIRSTRASTERCOLUMNS 404 - -#define VIC6569_FIRST_X 0x194 -#define VIC6567_FIRST_X 0x19c - -#define VIC6569_FIRST_VISIBLE_X 0x1e0 -#define VIC6567_FIRST_VISIBLE_X 0x1e8 - -#define VIC6569_MAX_X 0x1f7 -#define VIC6567_MAX_X 0x1ff - -#define VIC6569_LAST_VISIBLE_X 0x17c -#define VIC6567_LAST_VISIBLE_X 0x184 - -#define VIC6569_LAST_X 0x193 -#define VIC6567_LAST_X 0x19b - - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -// ======================> mos6566_interface - -struct mos6566_interface -{ - const char *m_screen_tag; - const char *m_cpu_tag; - - devcb_write_line m_out_irq_cb; - devcb_write_line m_out_rdy_cb; - - devcb_read8 m_in_x_cb; - devcb_read8 m_in_y_cb; - devcb_read8 m_in_button_cb; - - devcb_read8 m_in_rdy_cb; -}; - - -// ======================> mos6566_device - -class mos6566_device : public device_t, - public device_memory_interface, - public device_execute_interface, - public mos6566_interface -{ -public: - // construction/destruction - mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); - mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const; - - DECLARE_READ8_MEMBER( read ); - DECLARE_WRITE8_MEMBER( write ); - - DECLARE_WRITE_LINE_MEMBER( lp_w ); - - UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - -protected: - enum - { - TYPE_6566, // NTSC-M (SRAM) - TYPE_6567, // NTSC-M (NMOS) - TYPE_8562, // NTSC-M (HMOS) - TYPE_8564, // NTSC-M VIC-IIe (C128) - - TYPE_6569, // PAL-B - TYPE_6572, // PAL-N - TYPE_6573, // PAL-M - TYPE_8565, // PAL-B (HMOS) - TYPE_8566, // PAL-B VIC-IIe (C128) - TYPE_8569 // PAL-N VIC-IIe (C128) - }; - - // device-level overrides - virtual void device_config_complete(); - virtual void device_start(); - virtual void device_reset(); - virtual void execute_run(); - - int m_icount; - int m_variant; - - const address_space_config m_videoram_space_config; - const address_space_config m_colorram_space_config; - - inline void vic2_set_interrupt( int mask ); - inline void vic2_clear_interrupt( int mask ); - inline UINT8 read_videoram(offs_t offset); - inline UINT8 read_colorram(offs_t offset); - inline void vic2_idle_access(); - inline void vic2_spr_ptr_access( int num ); - inline void vic2_spr_data_access( int num, int bytenum ); - inline void vic2_display_if_bad_line(); - inline void vic2_suspend_cpu(); - inline void vic2_resume_cpu(); - inline void vic2_refresh_access(); - inline void vic2_fetch_if_bad_line(); - inline void vic2_rc_if_bad_line(); - inline void vic2_sample_border(); - inline void vic2_check_sprite_dma(); - inline void vic2_matrix_access(); - inline void vic2_graphics_access(); - inline void vic2_draw_background(); - inline void vic2_draw_mono( UINT16 p, UINT8 c0, UINT8 c1 ); - inline void vic2_draw_multi( UINT16 p, UINT8 c0, UINT8 c1, UINT8 c2, UINT8 c3 ); - void vic2_draw_graphics(); - void vic2_draw_sprites(); - - screen_device *m_screen; // screen which sets bitmap properties - cpu_device *m_cpu; - - UINT8 m_rdy_cycles; - UINT8 m_reg[0x80]; - - int m_on; /* rastering of the screen */ - - UINT16 m_chargenaddr, m_videoaddr, m_bitmapaddr; - - bitmap_ind16 *m_bitmap; - - UINT16 m_colors[4], m_spritemulti[4]; - - int m_rasterline; - UINT64 m_cycles_counter; - UINT8 m_cycle; - UINT16 m_raster_x; - UINT16 m_graphic_x; - - /* convert multicolor byte to background/foreground for sprite collision */ - UINT16 m_expandx[256]; - UINT16 m_expandx_multi[256]; - - /* Display */ - UINT16 m_dy_start; - UINT16 m_dy_stop; - - /* GFX */ - UINT8 m_draw_this_line; - UINT8 m_is_bad_line; - UINT8 m_bad_lines_enabled; - UINT8 m_display_state; - UINT8 m_char_data; - UINT8 m_gfx_data; - UINT8 m_color_data; - UINT8 m_last_char_data; - UINT8 m_matrix_line[40]; // Buffer for video line, read in Bad Lines - UINT8 m_color_line[40]; // Buffer for color line, read in Bad Lines - UINT8 m_vblanking; - UINT16 m_ml_index; - UINT8 m_rc; - UINT16 m_vc; - UINT16 m_vc_base; - UINT8 m_ref_cnt; - - /* Sprites */ - UINT8 m_spr_coll_buf[0x400]; // Buffer for sprite-sprite collisions and priorities - UINT8 m_fore_coll_buf[0x400]; // Buffer for foreground-sprite collisions and priorities - UINT8 m_spr_draw_data[8][4]; // Sprite data for drawing - UINT8 m_spr_exp_y; - UINT8 m_spr_dma_on; - UINT8 m_spr_draw; - UINT8 m_spr_disp_on; - UINT16 m_spr_ptr[8]; - UINT8 m_spr_data[8][4]; - UINT16 m_mc_base[8]; // Sprite data counter bases - UINT16 m_mc[8]; // Sprite data counters - - /* Border */ - UINT8 m_border_on; - UINT8 m_ud_border_on; - UINT8 m_border_on_sample[5]; - UINT8 m_border_color_sample[0x400 / 8]; // Samples of border color at each "displayed" cycle - - /* Cycles */ - UINT64 m_first_ba_cycle; - UINT8 m_device_suspended; - - /* IRQ */ - devcb_resolved_write_line m_out_irq_func; - - /* RDY */ - devcb_resolved_write_line m_out_rdy_func; - devcb_resolved_read8 m_in_rdy_workaround_func; - - /* lightpen */ - devcb_resolved_read8 m_in_lightpen_button_func; - devcb_resolved_read8 m_in_lightpen_x_func; - devcb_resolved_read8 m_in_lightpen_y_func; -}; - - -// ======================> mos6567_device - -class mos6567_device : public mos6566_device -{ -public: - // construction/destruction - mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); -}; - - -// ======================> mos8562_device - -class mos8562_device : public mos6567_device -{ -public: - // construction/destruction - mos8562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); -}; - - -// ======================> mos6569_device - -class mos6569_device : public mos6566_device -{ -public: - // construction/destruction - mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual void execute_run(); -}; - - -// ======================> mos8565_device - -class mos8565_device : public mos6569_device -{ -public: - // construction/destruction - mos8565_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); -}; - - -// device type definition -extern const device_type MOS6566; -extern const device_type MOS6567; -extern const device_type MOS8562; -extern const device_type MOS6569; -extern const device_type MOS8565; - - - -#endif +/***************************************************************************
+
+ MOS 6566/6567/6569 Video Interface Chip II (VIC-II) emulation
+
+ Copyright the MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+****************************************************************************
+ _____ _____
+ DB6 1 |* \_/ | 40 Vcc
+ DB5 2 | | 39 DB7
+ DB4 3 | | 38 DB8
+ DB3 4 | | 37 DB9
+ DB2 5 | | 36 DB10
+ DB1 6 | | 35 DB11
+ DB0 7 | | 34 A13
+ _IRQ 8 | | 33 A12
+ LP 9 | | 32 A11
+ _CS 10 | MOS6566 | 31 A10
+ R/W 11 | | 30 A9
+ BA 12 | | 29 A8
+ Vdd 13 | | 28 A7
+ COLOR 14 | | 27 A6
+ S/LUM 15 | | 26 A5
+ AEC 16 | | 25 A4
+ PH0 17 | | 24 A3
+ PHIN 18 | | 23 A2
+ PHCOL 19 | | 22 A1
+ Vss 20 |_____________| 21 A0
+
+ _____ _____
+ DB6 1 |* \_/ | 40 Vcc
+ DB5 2 | | 39 DB7
+ DB4 3 | | 38 DB8
+ DB3 4 | | 37 DB9
+ DB2 5 | | 36 DB10
+ DB1 6 | | 35 DB11
+ DB0 7 | | 34 A10
+ _IRQ 8 | | 33 A9
+ LP 9 | MOS6567 | 32 A8
+ _CS 10 | MOS6569 | 31 A7
+ R/W 11 | MOS8562 | 30 A6
+ BA 12 | MOS8565 | 29 A5/A13
+ Vdd 13 | | 28 A4/A12
+ COLOR 14 | | 27 A3/A11
+ S/LUM 15 | | 26 A2/A10
+ AEC 16 | | 25 A1/A9
+ PH0 17 | | 24 A0/A8
+ _RAS 18 | | 23 A11
+ CAS 19 | | 22 PHIN
+ Vss 20 |_____________| 21 PHCL
+
+ _____ _____
+ D6 1 |* \_/ | 48 Vcc
+ D5 2 | | 47 D7
+ D4 3 | | 46 D8
+ D3 4 | | 45 D9
+ D2 5 | | 44 D10
+ D1 6 | | 43 D11
+ D0 7 | | 42 MA10
+ _IRQ 8 | | 41 MA9
+ _LP 9 | | 40 MA8
+ BA 10 | | 39 A7
+ _DMARQST 11 | | 38 A6
+ AEC 12 | MOS8564 | 37 MA5
+ _CS 13 | MOS8566 | 36 MA4
+ R/W 14 | | 35 MA3
+ _DMAACK 15 | | 34 MA2
+ CHROMA 16 | | 33 MA1
+ SYNC/LUM 17 | | 32 MA0
+ 1 MHZ 18 | | 31 MA11
+ _RAS 19 | | 30 PHI IN
+ _CAS 20 | | 29 PHI COLOR
+ MUX 21 | | 28 K2
+ _IOACC 22 | | 27 K1
+ 2 MHZ 23 | | 26 K0
+ Vss 24 |_____________| 25 Z80 PHI
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __MOS656X__
+#define __MOS656X__
+
+#include "emu.h"
+
+
+
+/***************************************************************************
+ DEVICE CONFIGURATION MACROS
+***************************************************************************/
+
+#define MCFG_MOS6566_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
+ MCFG_DEVICE_ADD(_tag, MOS6566, _clock) \
+ MCFG_DEVICE_CONFIG(_config) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
+ MCFG_SCREEN_ADD(_screen_tag, RASTER) \
+ MCFG_SCREEN_REFRESH_RATE(VIC6566_VRETRACERATE) \
+ MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) \
+ MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
+ MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6566_device, screen_update) \
+ MCFG_PALETTE_LENGTH(16)
+
+#define MCFG_MOS6567_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
+ MCFG_DEVICE_ADD(_tag, MOS6567, _clock) \
+ MCFG_DEVICE_CONFIG(_config) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
+ MCFG_SCREEN_ADD(_screen_tag, RASTER) \
+ MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) \
+ MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) \
+ MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
+ MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6567_device, screen_update) \
+ MCFG_PALETTE_LENGTH(16)
+
+#define MCFG_MOS8562_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
+ MCFG_DEVICE_ADD(_tag, MOS8562, _clock) \
+ MCFG_DEVICE_CONFIG(_config) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
+ MCFG_SCREEN_ADD(_screen_tag, RASTER) \
+ MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) \
+ MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) \
+ MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
+ MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8562_device, screen_update) \
+ MCFG_PALETTE_LENGTH(16)
+
+#define MCFG_MOS6569_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
+ MCFG_DEVICE_ADD(_tag, MOS6569, _clock) \
+ MCFG_DEVICE_CONFIG(_config) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
+ MCFG_SCREEN_ADD(_screen_tag, RASTER) \
+ MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) \
+ MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) \
+ MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \
+ MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6569_device, screen_update) \
+ MCFG_PALETTE_LENGTH(16)
+
+#define MCFG_MOS8565_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
+ MCFG_DEVICE_ADD(_tag, MOS8565, _clock) \
+ MCFG_DEVICE_CONFIG(_config) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
+ MCFG_SCREEN_ADD(_screen_tag, RASTER) \
+ MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) \
+ MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) \
+ MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \
+ MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8565_device, screen_update) \
+ MCFG_PALETTE_LENGTH(16)
+
+
+#define MOS6566_INTERFACE(_name) \
+ const mos6566_interface (_name) =
+
+#define MOS6567_INTERFACE(_name) \
+ const mos6566_interface (_name) =
+
+#define MOS6569_INTERFACE(_name) \
+ const mos6566_interface (_name) =
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define VIC6566_CLOCK (XTAL_8MHz / 8) // 1000000
+#define VIC6567R56A_CLOCK (XTAL_8MHz / 8) // 1000000
+#define VIC6567_CLOCK (XTAL_14_31818MHz / 14) // 1022727
+#define VIC6569_CLOCK (XTAL_17_734472MHz / 18) // 985248
+
+#define VIC6566_DOTCLOCK (VIC6566_CLOCK * 8) // 8000000
+#define VIC6567R56A_DOTCLOCK (VIC6567R56A_CLOCK * 8) // 8000000
+#define VIC6567_DOTCLOCK (VIC6567_CLOCK * 8) // 8181818
+#define VIC6569_DOTCLOCK (VIC6569_CLOCK * 8) // 7881988
+
+#define VIC6567_CYCLESPERLINE 65
+#define VIC6569_CYCLESPERLINE 63
+
+#define VIC6567_LINES 263
+#define VIC6569_LINES 312
+
+#define VIC6566_VRETRACERATE ((float)VIC6566_CLOCK / 262 / 64)
+#define VIC6567R56A_VRETRACERATE ((float)VIC6567R56A_CLOCK / 262 / 64)
+#define VIC6567_VRETRACERATE ((float)VIC6567_CLOCK / 263 / 65)
+#define VIC6569_VRETRACERATE ((float)VIC6569_CLOCK / 312 / 63)
+
+#define VIC6566_HRETRACERATE (VIC6566_CLOCK / VIC6566_CYCLESPERLINE)
+#define VIC6567_HRETRACERATE (VIC6567_CLOCK / VIC6567_CYCLESPERLINE)
+#define VIC6569_HRETRACERATE (VIC6569_CLOCK / VIC6569_CYCLESPERLINE)
+
+#define VIC2_HSIZE 320
+#define VIC2_VSIZE 200
+
+#define VIC6567_VISIBLELINES 235
+#define VIC6569_VISIBLELINES 284
+
+#define VIC6567_FIRST_DMA_LINE 0x30
+#define VIC6569_FIRST_DMA_LINE 0x30
+
+#define VIC6567_LAST_DMA_LINE 0xf7
+#define VIC6569_LAST_DMA_LINE 0xf7
+
+#define VIC6567_FIRST_DISP_LINE 0x29
+#define VIC6569_FIRST_DISP_LINE 0x10
+
+#define VIC6567_LAST_DISP_LINE (VIC6567_FIRST_DISP_LINE + VIC6567_VISIBLELINES - 1)
+#define VIC6569_LAST_DISP_LINE (VIC6569_FIRST_DISP_LINE + VIC6569_VISIBLELINES - 1)
+
+#define VIC6567_RASTER_2_EMU(a) ((a >= VIC6567_FIRST_DISP_LINE) ? (a - VIC6567_FIRST_DISP_LINE) : (a + 222))
+#define VIC6569_RASTER_2_EMU(a) (a - VIC6569_FIRST_DISP_LINE)
+
+#define VIC6567_FIRSTCOLUMN 50
+#define VIC6569_FIRSTCOLUMN 50
+
+#define VIC6567_VISIBLECOLUMNS 418
+#define VIC6569_VISIBLECOLUMNS 403
+
+#define VIC6567_X_2_EMU(a) (a)
+#define VIC6569_X_2_EMU(a) (a)
+
+#define VIC6567_STARTVISIBLELINES ((VIC6567_LINES - VIC6567_VISIBLELINES)/2)
+#define VIC6569_STARTVISIBLELINES 16 /* ((VIC6569_LINES - VIC6569_VISIBLELINES)/2) */
+
+#define VIC6567_FIRSTRASTERLINE 34
+#define VIC6569_FIRSTRASTERLINE 0
+
+#define VIC6567_COLUMNS 512
+#define VIC6569_COLUMNS 504
+
+#define VIC6567_STARTVISIBLECOLUMNS ((VIC6567_COLUMNS - VIC6567_VISIBLECOLUMNS)/2)
+#define VIC6569_STARTVISIBLECOLUMNS ((VIC6569_COLUMNS - VIC6569_VISIBLECOLUMNS)/2)
+
+#define VIC6567_FIRSTRASTERCOLUMNS 412
+#define VIC6569_FIRSTRASTERCOLUMNS 404
+
+#define VIC6569_FIRST_X 0x194
+#define VIC6567_FIRST_X 0x19c
+
+#define VIC6569_FIRST_VISIBLE_X 0x1e0
+#define VIC6567_FIRST_VISIBLE_X 0x1e8
+
+#define VIC6569_MAX_X 0x1f7
+#define VIC6567_MAX_X 0x1ff
+
+#define VIC6569_LAST_VISIBLE_X 0x17c
+#define VIC6567_LAST_VISIBLE_X 0x184
+
+#define VIC6569_LAST_X 0x193
+#define VIC6567_LAST_X 0x19b
+
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+// ======================> mos6566_interface
+
+struct mos6566_interface
+{
+ const char *m_screen_tag;
+ const char *m_cpu_tag;
+
+ devcb_write_line m_out_irq_cb;
+ devcb_write_line m_out_rdy_cb;
+
+ devcb_read8 m_in_x_cb;
+ devcb_read8 m_in_y_cb;
+ devcb_read8 m_in_button_cb;
+
+ devcb_read8 m_in_rdy_cb;
+};
+
+
+// ======================> mos6566_device
+
+class mos6566_device : public device_t,
+ public device_memory_interface,
+ public device_execute_interface,
+ public mos6566_interface
+{
+public:
+ // construction/destruction
+ mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
+ mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
+ DECLARE_READ8_MEMBER( read );
+ DECLARE_WRITE8_MEMBER( write );
+
+ DECLARE_WRITE_LINE_MEMBER( lp_w );
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+protected:
+ enum
+ {
+ TYPE_6566, // NTSC-M (SRAM)
+ TYPE_6567, // NTSC-M (NMOS)
+ TYPE_8562, // NTSC-M (HMOS)
+ TYPE_8564, // NTSC-M VIC-IIe (C128)
+
+ TYPE_6569, // PAL-B
+ TYPE_6572, // PAL-N
+ TYPE_6573, // PAL-M
+ TYPE_8565, // PAL-B (HMOS)
+ TYPE_8566, // PAL-B VIC-IIe (C128)
+ TYPE_8569 // PAL-N VIC-IIe (C128)
+ };
+
+ // device-level overrides
+ virtual void device_config_complete();
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void execute_run();
+
+ int m_icount;
+ int m_variant;
+
+ const address_space_config m_videoram_space_config;
+ const address_space_config m_colorram_space_config;
+
+ inline void vic2_set_interrupt( int mask );
+ inline void vic2_clear_interrupt( int mask );
+ inline UINT8 read_videoram(offs_t offset);
+ inline UINT8 read_colorram(offs_t offset);
+ inline void vic2_idle_access();
+ inline void vic2_spr_ptr_access( int num );
+ inline void vic2_spr_data_access( int num, int bytenum );
+ inline void vic2_display_if_bad_line();
+ inline void vic2_suspend_cpu();
+ inline void vic2_resume_cpu();
+ inline void vic2_refresh_access();
+ inline void vic2_fetch_if_bad_line();
+ inline void vic2_rc_if_bad_line();
+ inline void vic2_sample_border();
+ inline void vic2_check_sprite_dma();
+ inline void vic2_matrix_access();
+ inline void vic2_graphics_access();
+ inline void vic2_draw_background();
+ inline void vic2_draw_mono( UINT16 p, UINT8 c0, UINT8 c1 );
+ inline void vic2_draw_multi( UINT16 p, UINT8 c0, UINT8 c1, UINT8 c2, UINT8 c3 );
+ void vic2_draw_graphics();
+ void vic2_draw_sprites();
+
+ screen_device *m_screen; // screen which sets bitmap properties
+ cpu_device *m_cpu;
+
+ UINT8 m_rdy_cycles;
+ UINT8 m_reg[0x80];
+
+ int m_on; /* rastering of the screen */
+
+ UINT16 m_chargenaddr, m_videoaddr, m_bitmapaddr;
+
+ bitmap_ind16 *m_bitmap;
+
+ UINT16 m_colors[4], m_spritemulti[4];
+
+ int m_rasterline;
+ UINT64 m_cycles_counter;
+ UINT8 m_cycle;
+ UINT16 m_raster_x;
+ UINT16 m_graphic_x;
+
+ /* convert multicolor byte to background/foreground for sprite collision */
+ UINT16 m_expandx[256];
+ UINT16 m_expandx_multi[256];
+
+ /* Display */
+ UINT16 m_dy_start;
+ UINT16 m_dy_stop;
+
+ /* GFX */
+ UINT8 m_draw_this_line;
+ UINT8 m_is_bad_line;
+ UINT8 m_bad_lines_enabled;
+ UINT8 m_display_state;
+ UINT8 m_char_data;
+ UINT8 m_gfx_data;
+ UINT8 m_color_data;
+ UINT8 m_last_char_data;
+ UINT8 m_matrix_line[40]; // Buffer for video line, read in Bad Lines
+ UINT8 m_color_line[40]; // Buffer for color line, read in Bad Lines
+ UINT8 m_vblanking;
+ UINT16 m_ml_index;
+ UINT8 m_rc;
+ UINT16 m_vc;
+ UINT16 m_vc_base;
+ UINT8 m_ref_cnt;
+
+ /* Sprites */
+ UINT8 m_spr_coll_buf[0x400]; // Buffer for sprite-sprite collisions and priorities
+ UINT8 m_fore_coll_buf[0x400]; // Buffer for foreground-sprite collisions and priorities
+ UINT8 m_spr_draw_data[8][4]; // Sprite data for drawing
+ UINT8 m_spr_exp_y;
+ UINT8 m_spr_dma_on;
+ UINT8 m_spr_draw;
+ UINT8 m_spr_disp_on;
+ UINT16 m_spr_ptr[8];
+ UINT8 m_spr_data[8][4];
+ UINT16 m_mc_base[8]; // Sprite data counter bases
+ UINT16 m_mc[8]; // Sprite data counters
+
+ /* Border */
+ UINT8 m_border_on;
+ UINT8 m_ud_border_on;
+ UINT8 m_border_on_sample[5];
+ UINT8 m_border_color_sample[0x400 / 8]; // Samples of border color at each "displayed" cycle
+
+ /* Cycles */
+ UINT64 m_first_ba_cycle;
+ UINT8 m_device_suspended;
+
+ /* IRQ */
+ devcb_resolved_write_line m_out_irq_func;
+
+ /* RDY */
+ devcb_resolved_write_line m_out_rdy_func;
+ devcb_resolved_read8 m_in_rdy_workaround_func;
+
+ /* lightpen */
+ devcb_resolved_read8 m_in_lightpen_button_func;
+ devcb_resolved_read8 m_in_lightpen_x_func;
+ devcb_resolved_read8 m_in_lightpen_y_func;
+};
+
+
+// ======================> mos6567_device
+
+class mos6567_device : public mos6566_device
+{
+public:
+ // construction/destruction
+ mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
+};
+
+
+// ======================> mos8562_device
+
+class mos8562_device : public mos6567_device
+{
+public:
+ // construction/destruction
+ mos8562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+
+// ======================> mos6569_device
+
+class mos6569_device : public mos6566_device
+{
+public:
+ // construction/destruction
+ mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void execute_run();
+};
+
+
+// ======================> mos8565_device
+
+class mos8565_device : public mos6569_device
+{
+public:
+ // construction/destruction
+ mos8565_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+
+// device type definition
+extern const device_type MOS6566;
+extern const device_type MOS6567;
+extern const device_type MOS8562;
+extern const device_type MOS6569;
+extern const device_type MOS8565;
+
+
+
+#endif
diff --git a/src/version.c b/src/version.c index 20c0889..85b1cdb 100644 --- a/src/version.c +++ b/src/version.c @@ -38,4 +38,4 @@ ***************************************************************************/ extern const char build_version[]; -const char build_version[] = "0.146u1 ("__DATE__")"; +const char build_version[] = "0.146u2 ("__DATE__")"; |
