This commit is contained in:
Roberto Fresca 2018-09-16 15:56:20 +02:00
commit cdb4ae2fab
59 changed files with 1207 additions and 507 deletions

View File

@ -133,7 +133,7 @@ Example:
.. _mame-commandline-listroms:
**-listroms** [<*pattern*>]
**-listroms** / **-lr** [<*pattern*>]
Displays a list of ROM images referenced by the specified pattern of system or device names. If no pattern is specified, the results will be *all* systems and devices.
@ -174,7 +174,7 @@ Example:
.. _mame-commandline-listslots:
**-listslots** [<*pattern*>]
**-listslots** / **-lslot** [<*pattern*>]
Show available slots and options for each slot (if available). Primarily used for MAME to allow control over internal plug-in cards, much like PCs needing video, sound and other expansion cards.
@ -190,25 +190,25 @@ Example:
.. _mame-commandline-listsoftware:
**-listsoftware** [<*pattern*>]
**-listsoftware** / **-lsoft** [<*pattern*>]
Posts to screen all software lists which can be used by the entered *pattern* or system. Note that this is simply a copy/paste of the .XML file which reside in the HASH folder which are allowed to be used.
.. _mame-commandline-verifysoftware:
**-verifysoftware** [<*pattern*>]
**-verifysoftware** / **-vsoft** [<*pattern*>]
Checks for invalid or missing ROM images in your software lists. By default all drivers that have valid ZIP files or directories in the rompath are verified; however, you can limit this list by specifying a specific driver name or *pattern* after the -verifysoftware command.
.. _mame-commandline-getsoftlist:
**-getsoftlist** [<*pattern*>]
**-getsoftlist** / **-glist** [<*pattern*>]
Posts to screen a specific software list which matches with the system name provided.
.. _mame-commandline-verifysoftlist:
**-verifysoftlist** [softwarelistname]
**-verifysoftlist** / **-vlist** [softwarelistname]
Checks a specified software list for missing ROM images if files exist for issued softwarelistname. By default, all drivers that have valid ZIP files or directories in the rompath are verified; however, you can limit this list by specifying a specific softwarelistname (without .XML) after the -verifysoftlist command.

View File

@ -9266,6 +9266,55 @@
</part>
</software>
<software name="heimdall">
<description>Heimdall</description>
<year>1992</year>
<publisher>Core Design</publisher>
<info name="developer" value="The 8th Day" />
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Heimdall [Core Design] [1992] [3.5HD] [Disk 1 of 5].img" size="1474560" crc="93610141" sha1="6d610d2402cc423169f46333303602251d9c41f1" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Heimdall [Core Design] [1992] [3.5HD] [Disk 2 of 5].img" size="1474560" crc="449bb3cb" sha1="aa57c403aad12b1f9c5258aa5bc0da1d0b3e5059" offset="0"/>
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Heimdall [Core Design] [1992] [3.5HD] [Disk 3 of 5].img" size="1474560" crc="7e5e7097" sha1="fe321736a36b25d794fe6b38e313a18f0ec1740b" offset="0"/>
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Heimdall [Core Design] [1992] [3.5HD] [Disk 4 of 5].img" size="1474560" crc="077b1db2" sha1="3771378b2c6fd94dd018360a6fe647f414256196" offset="0"/>
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Heimdall [Core Design] [1992] [3.5HD] [Disk 5 of 5].img" size="1474560" crc="2531f06f" sha1="bc40b0d2b9c0c61c838c1f858417e32545f1f5c4" offset="0"/>
</dataarea>
</part>
</software>
<software name="heimdal2">
<description>Heimdall 2: Into the Hall of Worlds</description>
<year>1994</year>
<publisher>Core Design</publisher>
<info name="developer" value="The 8th Day" />
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Heimdall 2 [Core Design] [1994] [3.5HD] [Disk 1 of 2].img" size="1474560" crc="36c5583d" sha1="d31a05f78342c21ee75f53e64a2bcf2df34bab0c" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Heimdall 2 [Core Design] [1994] [3.5HD] [Disk 2 of 2].img" size="1474560" crc="350f6993" sha1="b71c6413d3ef4e8593f6a2dbe635dee9beadf7e7" offset="0"/>
</dataarea>
</part>
</software>
<software name="heretic">
<description>Heretic</description>
<year>1994</year>

View File

@ -2550,6 +2550,7 @@ speedfrk:
;@s:circus.cpp
crash:
crasha:
smash:
@:maincpu,program,000f,2,00,00
@ -2858,6 +2859,9 @@ sf2ceea:
sf2ceja:
sf2cejb:
sf2cejc:
sf2cems6a:
sf2cems6b:
sf2cems6c:
sf2cet:
sf2ceua:
sf2ceub:
@ -4125,6 +4129,7 @@ stoffyu:
wwfwfest:
wwfwfestj:
wwfwfestu:
wwfwfestu1:
wwfwfestub:
@:maincpu,program,1c00c2,84,08,01
@ -5725,18 +5730,19 @@ asurabusa:
;@s:gaelco.cpp
bioplayc:
@:maincpu,program,ff078a,17,06,2e
;(biomechanical toy (unprotected))
;** you must let the highscore display in attract mode before starting a game **
biomtoy:
biomtoya:
biomtoyb:
biomtoyc:
@:maincpu,program,ff0794,17,06,2e
bioplayc:
@:maincpu,program,ff078a,17,06,2e
;(big karnak) (by GeoMan)
bigkarnk:
@:maincpu,program,102086,a0,00,0a
@ -6854,6 +6860,11 @@ venus:
;@s:halleys.cpp
halleysc87:
@:maincpu,program,fc5a,23,02,54
@:maincpu,program,fc3f,3,02,00
;*******(halley's comet)(By Firebrand)
halleysc:
halleyscj:
@ -6862,16 +6873,16 @@ halleyscja:
@:maincpu,program,fc21,3,02,00
halleyscjp:
@:maincpu,program,fc3c,23,02,2e
@:maincpu,program,fc21,3,02,00
;*******ben bero beh (japan)
benberob:
@:maincpu,program,fa4d,3,00,96
halleysc87:
@:maincpu,program,fc5a,23,02,54
@:maincpu,program,fc3f,3,02,00
;@s:hcastle.cpp
akumajou:
@ -7518,6 +7529,19 @@ pinbos:
;@s:lastduel.cpp
leds2011:
leds2011u:
@:maincpu,program,ff8890,78,00,00
@:maincpu,program,ffcb76,23,41,01
@:maincpu,program,ff87c9,1,d2,d2
leds2011p:
@:maincpu,program,ff8852,78,00,00
@:maincpu,program,ffc936,23,41,01
@:maincpu,program,ff87c9,1,d2,d2
lastduel:
lastduelb:
lastduelo:
@ -7533,12 +7557,6 @@ lastduelo:
@:maincpu,program,fccaed,1,00,00
leds2011u:
@:maincpu,program,ff8890,78,00,00
@:maincpu,program,ffcb76,23,41,01
@:maincpu,program,ff87c9,1,d2,d2
ledstorm:
madgear:
madgearj:
@ -8223,6 +8241,7 @@ magmax:
;Devastators clones
devstors:
devstors2:
devstorsv:
devstorsx:
garuka:
@ -8362,6 +8381,7 @@ springer:
mario:
mariobl:
mariobla:
marioe:
mariof:
marioj:
@ -10096,6 +10116,10 @@ pclubysa:
;@s:nmk16.cpp
hachamfa:
@:maincpu,program,fc000,3df,01,4e
tomagic:
@:maincpu,program,f905c,31,00,20
@ -11530,6 +11554,19 @@ raidenb:
;@s:raiden2.cpp
raiden2:
raiden2dx:
raiden2f:
raiden2hk:
raiden2i:
raiden2j:
raiden2k:
raiden2nl:
raiden2sw:
raiden2u:
@:maincpu,program,9dd4,ef,50,2a
;***** raiden dx fixed (thanks to Takasaki) **********
raidendx:
raidendxa1:
@ -11539,6 +11576,7 @@ raidendxg:
raidendxj:
raidendxk:
raidendxnl:
raidendxpt:
raidendxu:
@:maincpu,program,a25a,2cf,a0,2a
@ -11562,18 +11600,6 @@ zeroteamsr:
@:maincpu,program,9212,4b,40,55
raiden2:
raiden2dx:
raiden2f:
raiden2hk:
raiden2i:
raiden2j:
raiden2nl:
raiden2sw:
raiden2u:
@:maincpu,program,9dd4,ef,50,2a
;@s:rallyx.cpp
dngrtrck:
@ -12024,6 +12050,7 @@ knockoutc:
mariner:
offensiv:
scramb2:
scramb3:
scramblb:
scramble:
scramblebb:
@ -12266,6 +12293,14 @@ hangonjr:
;@s:segag80r.cpp
;******Astro Blaster (version 2a)
astrob1:
astrob2a:
astrob2b:
astrobg:
@:maincpu,program,cb3f,da,00,5c
;monsterb:******monster bash (fixed) *
;monsterb2:******monster bash (2 board version) (fixed) *
monsterb:
@ -12274,11 +12309,11 @@ monsterb2:
@:maincpu,program,c8f6,1,0d,0d
;******Astro Blaster (version 2a)
astrob1:
astrob2a:
astrobg:
@:maincpu,program,cb3f,da,00,5c
;(astro blaster (version 2 & 3))
astrob:
astrob2:
@:maincpu,program,cb3f,f6,00,00
@:maincpu,program,cc18,1,5c,5c
;005:******005 ;[Special thanks to Cananas for enhancing this entry]
@ -12309,13 +12344,6 @@ spaceod2:
@:maincpu,program,c921,1,05,05
;(astro blaster (version 2 & 3))
astrob:
astrob2:
@:maincpu,program,cb3f,f6,00,00
@:maincpu,program,cc18,1,5c,5c
;@s:segag80v.cpp
elim2a:
@ -12754,6 +12782,12 @@ crkdownu:
;@s:segas32.cpp
arescue:
arescuej:
arescueu:
@:mainpcb:maincpu,program,20fb00,9f,a0,49
;alien3u:*******alien 3: the gun (us)
alien3:
alien3j:
@ -12761,11 +12795,6 @@ alien3u:
@:mainpcb:maincpu,program,20f2bc,78,80,00
arescue:
arescuej:
@:mainpcb:maincpu,program,20fb00,9f,a0,49
;*******stadium cross
scross:
scrossa:
@ -13607,6 +13636,18 @@ slapfighb3:
;@s:snk.cpp
;ikarinc:******ikari warriors (us no continues)
;ikaria:******ikari warriors (us)
ikari:
ikaria:
ikaria2:
ikarijp:
ikarijpb:
ikarinc:
@:maincpu,program,ff0b,50,00,49
@:maincpu,program,fc5f,3,00,00
;(athena) (fix)
;** fixed, but delete any athena.hi file before playing first time **
athena:
@ -13688,17 +13729,6 @@ tnk3j:
@:maincpu,program,fc59,3,00,00
;ikarinc:******ikari warriors (us no continues)
;ikaria:******ikari warriors (us)
ikari:
ikaria:
ikarijp:
ikarijpb:
ikarinc:
@:maincpu,program,ff0b,50,00,49
@:maincpu,program,fc5f,3,00,00
ikariram:
@:maincpu,program,ff0b,50,00,4f
@:maincpu,program,fc5f,3,00,00
@ -13798,6 +13828,14 @@ vanguardj:
;@s:snk68.cpp
ikari3:
ikari3j:
ikari3k:
ikari3u:
ikari3w:
@:maincpu,program,4007e,58,00,1d
pow:
powj:
@:maincpu,program,43e8e,4,00,00
@ -13822,13 +13860,6 @@ streetsmw:
@:maincpu,program,43f7e,4,00,00
ikari3:
ikari3j:
ikari3k:
ikari3u:
@:maincpu,program,4007e,58,00,1d
;@s:snowbros.cpp
;******cookie & bibi 2
@ -14125,6 +14156,7 @@ srumbler3:
;********(super shanghai dragon`s eye (world,bootleg))
sshangha:
sshanghab:
sshanghaj:
@:maincpu,program,fec478,13f,00,1c
@ -14566,6 +14598,7 @@ flickya:
flickyo:
flickys1:
flickys2:
flickyup:
@:maincpu,program,e700,31,00,41
@:maincpu,program,c0d5,3,00,00
@ -16045,6 +16078,14 @@ timepltc:
;@s:tmnt.cpp
;********(golfing greats)
glfgreat:
glfgreatj:
glfgreatu:
@:maincpu,program,100320,50,41,9
@:maincpu,program,100400,50,41,9
;Teenage Mutant Ninja Turtles (US & clones)
tmht:
tmht2p:
@ -16125,12 +16166,6 @@ punkshotj:
@:maincpu,program,80700,30,00,40
;********(golfing greats)
glfgreat:
@:maincpu,program,100320,50,41,9
@:maincpu,program,100400,50,41,9
;@s:tnzs.cpp
chukatai:
@ -16653,6 +16688,11 @@ noahsark:
;@s:tumbleb.cpp
;******Super Trio Thanks to Mr Valtric for this addition ******
suprtrio:
@:maincpu,program,f03308,5a,01,4e
;(jump kids) (by GeoMan)
jumpkids:
@:maincpu,program,123c10,a0,50,50
@ -16976,6 +17016,17 @@ vaportrau:
;@s:vastar.cpp
dogfightp:
@:maincpu,program,f16a,82,20,ff
@:maincpu,program,b2df,1,24,24
@:maincpu,program,b2ff,1,24,24
@:maincpu,program,b31f,1,03,03
@:maincpu,program,b33f,1,05,05
@:maincpu,program,b35f,1,02,02
@:maincpu,program,b37f,1,00,00
@:maincpu,program,b39f,1,00,00
pprobe:
@:maincpu,program,f380,45,00,15
@:maincpu,program,cd9e,1,00,00
@ -17449,6 +17500,7 @@ twcup90b:
twcup90b1:
twcup90b2:
twcup90ba:
twcup90c:
twcup90t:
@:maincpu,program,800f,1e,00,00
@:maincpu,program,804d,01,11,11
@ -17485,6 +17537,7 @@ welltrisj:
;** starting a game, for the save to work **
;** THIS SAVE DOES NOT SAVE THE COURSE RECORDS **
wgp:
wgpu:
@:maincpu,program,10bbd9,c5,01,02
@:maincpu,program,10bc9b,1,44,44

View File

@ -3038,12 +3038,18 @@ end
if (BUSES["SBUS"]~=null) then
files {
MAME_DIR .. "src/devices/bus/sbus/artecon.cpp",
MAME_DIR .. "src/devices/bus/sbus/artecon.h",
MAME_DIR .. "src/devices/bus/sbus/bwtwo.cpp",
MAME_DIR .. "src/devices/bus/sbus/bwtwo.h",
MAME_DIR .. "src/devices/bus/sbus/cgsix.cpp",
MAME_DIR .. "src/devices/bus/sbus/cgsix.h",
MAME_DIR .. "src/devices/bus/sbus/cgthree.cpp",
MAME_DIR .. "src/devices/bus/sbus/cgthree.h",
MAME_DIR .. "src/devices/bus/sbus/turbogx.cpp",
MAME_DIR .. "src/devices/bus/sbus/turbogx.h",
MAME_DIR .. "src/devices/bus/sbus/hme.cpp",
MAME_DIR .. "src/devices/bus/sbus/hme.h",
MAME_DIR .. "src/devices/bus/sbus/sunpc.cpp",
MAME_DIR .. "src/devices/bus/sbus/sunpc.h",
MAME_DIR .. "src/devices/bus/sbus/sbus.cpp",
MAME_DIR .. "src/devices/bus/sbus/sbus.h",
}

View File

@ -4840,7 +4840,7 @@ files {
MAME_DIR .. "src/mame/includes/vectrex.h",
MAME_DIR .. "src/mame/video/vectrex.cpp",
MAME_DIR .. "src/mame/machine/vectrex.cpp",
MAME_DIR .. "src/mame/drivers/videolich.cpp",
MAME_DIR .. "src/mame/drivers/video21.cpp",
MAME_DIR .. "src/mame/drivers/videosaa.cpp",
MAME_DIR .. "src/mame/drivers/vlc.cpp",
MAME_DIR .. "src/mame/drivers/voyager.cpp",

View File

@ -0,0 +1,72 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************
Artecon SB-300P 3-serial 1-parallel SBus card skeleton
The Artecon SB series of SBus cards uses up to 4 Cirrus Logic
CL-CD1400 Four-Channel Serial/Parallel Communications Engines.
Each chip supports up to four full-duplex serial channels, or three
full-duplex serial channels and one high-speed bidirectional parallel
channel.
***************************************************************************/
#include "emu.h"
#include "artecon.h"
DEFINE_DEVICE_TYPE(SBUS_SB300P, sbus_artecon_device, "sb300p", "Artecon SB-300P 3S/1P controller")
void sbus_artecon_device::mem_map(address_map &map)
{
map(0x00000000, 0x01ffffff).rw(FUNC(sbus_artecon_device::unknown_r), FUNC(sbus_artecon_device::unknown_w));
map(0x00000000, 0x00003fff).r(FUNC(sbus_artecon_device::rom_r));
}
ROM_START( sbus_artecon )
ROM_REGION32_BE(0x8000, "prom", ROMREGION_ERASEFF)
ROM_LOAD( "artecon_sbus_port.bin", 0x0000, 0x4000, CRC(bced6981) SHA1(1c6006fb8cb555eff0cb7c2783c776d05c6797f8))
ROM_END
const tiny_rom_entry *sbus_artecon_device::device_rom_region() const
{
return ROM_NAME( sbus_artecon );
}
void sbus_artecon_device::device_add_mconfig(machine_config &config)
{
}
sbus_artecon_device::sbus_artecon_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SBUS_SB300P, tag, owner, clock)
, device_sbus_card_interface(mconfig, *this)
, m_rom(*this, "prom")
{
}
void sbus_artecon_device::device_start()
{
}
void sbus_artecon_device::install_device()
{
m_sbus->install_device(m_base, m_base + 0x1ffffff, *this, &sbus_artecon_device::mem_map);
}
READ32_MEMBER(sbus_artecon_device::unknown_r)
{
logerror("%s: unknown_r: %08x & %08x\n", machine().describe_context(), offset << 2, mem_mask);
return 0;
}
WRITE32_MEMBER(sbus_artecon_device::unknown_w)
{
logerror("%s: unknown_w: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask);
}
READ32_MEMBER(sbus_artecon_device::rom_r)
{
return ((uint32_t*)m_rom->base())[offset];
}

View File

@ -0,0 +1,45 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************
Artecon SB-300P 3-serial 1-parallel SBus card skeleton
***************************************************************************/
#ifndef MAME_BUS_SBUS_ARTECON_H
#define MAME_BUS_SBUS_ARTECON_H
#pragma once
#include "sbus.h"
class sbus_artecon_device : public device_t, public device_sbus_card_interface
{
public:
// construction/destruction
sbus_artecon_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device_t overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// device_sbus_slot_interface overrides
virtual void install_device() override;
DECLARE_READ32_MEMBER(unknown_r);
DECLARE_WRITE32_MEMBER(unknown_w);
DECLARE_READ32_MEMBER(rom_r);
private:
void mem_map(address_map &map) override;
required_memory_region m_rom;
};
DECLARE_DEVICE_TYPE(SBUS_SB300P, sbus_artecon_device)
#endif // MAME_BUS_SBUS_ARTECON_H

View File

@ -14,14 +14,18 @@ DEFINE_DEVICE_TYPE(SBUS_BWTWO, sbus_bwtwo_device, "bwtwo", "Sun bwtwo SBus Video
void sbus_bwtwo_device::mem_map(address_map &map)
{
map(0x00000000, 0x000007ff).r(FUNC(sbus_bwtwo_device::rom_r));
map(0x00000000, 0x00007fff).r(FUNC(sbus_bwtwo_device::rom_r));
map(0x00400000, 0x0040001f).rw(FUNC(sbus_bwtwo_device::regs_r), FUNC(sbus_bwtwo_device::regs_w));
map(0x00800000, 0x008fffff).rw(FUNC(sbus_bwtwo_device::vram_r), FUNC(sbus_bwtwo_device::vram_w));
}
ROM_START( sbus_bwtwo )
ROM_REGION32_BE(0x800, "prom", ROMREGION_ERASEFF)
ROM_LOAD( "sunw,501-1561.bin", 0x0000, 0x0800, CRC(e37a3314) SHA1(78761bd2369cb0c58ef1344c697a47d3a659d4bc))
ROM_REGION32_BE(0x8000, "prom", ROMREGION_ERASEFF)
ROM_SYSTEM_BIOS(0, "1081", "P/N 525-1081-01")
ROMX_LOAD( "bw2_525-1081-01.bin", 0x0000, 0x8000, CRC(8b70c8c7) SHA1(fd750ad2fd6efdde957f8b0f9abf962e14fe221a), ROM_BIOS(0) )
ROM_SYSTEM_BIOS(1, "1124", "P/N 525-1124-01")
ROMX_LOAD( "bw2_525-1124-01.bin", 0x0000, 0x0800, CRC(e37a3314) SHA1(78761bd2369cb0c58ef1344c697a47d3a659d4bc), ROM_BIOS(1) )
ROM_END
const tiny_rom_entry *sbus_bwtwo_device::device_rom_region() const

View File

@ -45,7 +45,7 @@ private:
required_device<screen_device> m_screen;
};
// device type definition
DECLARE_DEVICE_TYPE(SBUS_BWTWO, sbus_bwtwo_device)
#endif // MAME_BUS_SBUS_BWTWO_H

View File

@ -2,95 +2,50 @@
// copyright-holders:Ryan Holtz
/***************************************************************************
Sun TurboGX accelerated 8-bit color video controller
Sun cgsix-series accelerated 8-bit color video controller
***************************************************************************/
#include "emu.h"
#include "turbogx.h"
#include "screen.h"
#include "cgsix.h"
DEFINE_DEVICE_TYPE(SBUS_TURBOGX, sbus_turbogx_device, "turbogx", "Sun TurboGX SBus Video")
DEFINE_DEVICE_TYPE(SBUS_TURBOGXP, sbus_turbogxp_device, "turbogxp", "Sun TurboGX+ SBus Video")
void sbus_turbogx_device::mem_map(address_map &map)
//-------------------------------------------------
// base cgsix device
//-------------------------------------------------
void sbus_cgsix_device::base_map(address_map &map)
{
map(0x00000000, 0x01ffffff).rw(FUNC(sbus_turbogx_device::unknown_r), FUNC(sbus_turbogx_device::unknown_w));
map(0x00000000, 0x00007fff).r(FUNC(sbus_turbogx_device::rom_r));
map(0x00200000, 0x00200007).w(FUNC(sbus_turbogx_device::palette_w));
map(0x00700000, 0x00700fff).rw(FUNC(sbus_turbogx_device::fbc_r), FUNC(sbus_turbogx_device::fbc_w));
map(0x00800000, 0x008fffff).rw(FUNC(sbus_turbogx_device::vram_r), FUNC(sbus_turbogx_device::vram_w));
map(0x00000000, 0x01ffffff).rw(FUNC(sbus_cgsix_device::unknown_r), FUNC(sbus_cgsix_device::unknown_w));
map(0x00000000, 0x00007fff).r(FUNC(sbus_cgsix_device::rom_r));
map(0x00200000, 0x0020000f).m(m_ramdac, FUNC(bt458_device::map)).umask32(0xff000000);
map(0x00700000, 0x00700fff).rw(FUNC(sbus_cgsix_device::fbc_r), FUNC(sbus_cgsix_device::fbc_w));
}
ROM_START( sbus_turbogx )
ROM_REGION32_BE(0x8000, "prom", ROMREGION_ERASEFF)
ROM_LOAD( "sunw,501-2325.bin", 0x0000, 0x8000, CRC(bbdc45f8) SHA1(e4a51d78e199cd57f2fcb9d45b25dfae2bd537e4))
ROM_END
const tiny_rom_entry *sbus_turbogx_device::device_rom_region() const
{
return ROM_NAME( sbus_turbogx );
}
void sbus_turbogx_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_screen_update(FUNC(sbus_turbogx_device::screen_update));
screen.set_size(1152, 900);
screen.set_visarea(0, 1152-1, 0, 900-1);
screen.set_refresh_hz(72);
PALETTE(config, m_palette, 256).set_init(DEVICE_SELF, FUNC(sbus_turbogx_device::palette_init));
}
sbus_turbogx_device::sbus_turbogx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SBUS_TURBOGX, tag, owner, clock)
sbus_cgsix_device::sbus_cgsix_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, device_sbus_card_interface(mconfig, *this)
, m_rom(*this, "prom")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_ramdac(*this, "ramdac")
{
}
void sbus_turbogx_device::device_start()
void sbus_cgsix_device::device_start()
{
m_vram = std::make_unique<uint32_t[]>(0x100000/4);
save_item(NAME(m_palette_entry));
save_item(NAME(m_palette_r));
save_item(NAME(m_palette_g));
save_item(NAME(m_palette_b));
save_item(NAME(m_palette_step));
m_vram = std::make_unique<uint32_t[]>(m_vram_size / 4);
}
void sbus_turbogx_device::device_reset()
void sbus_cgsix_device::device_reset()
{
m_palette_entry = 0;
m_palette_r = 0;
m_palette_g = 0;
m_palette_b = 0;
m_palette_step = 0;
memset(&m_fbc, 0, sizeof(m_fbc));
}
void sbus_turbogx_device::install_device()
uint32_t sbus_cgsix_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
m_sbus->install_device(m_base, m_base + 0x1ffffff, *this, &sbus_turbogx_device::mem_map);
}
void sbus_turbogx_device::palette_init(palette_device &palette)
{
for (int i = 0; i < 256; i++)
{
const uint8_t reversed = 255 - i;
palette.set_pen_color(i, rgb_t(reversed, reversed, reversed));
}
}
uint32_t sbus_turbogx_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
const pen_t *pens = m_palette->pens();
const pen_t *pens = m_ramdac->pens();
uint8_t *vram = (uint8_t *)&m_vram[0];
for (int y = 0; y < 900; y++)
@ -106,66 +61,33 @@ uint32_t sbus_turbogx_device::screen_update(screen_device &screen, bitmap_rgb32
return 0;
}
READ32_MEMBER(sbus_turbogx_device::rom_r)
READ32_MEMBER(sbus_cgsix_device::rom_r)
{
return ((uint32_t*)m_rom->base())[offset];
}
READ32_MEMBER(sbus_turbogx_device::unknown_r)
READ32_MEMBER(sbus_cgsix_device::unknown_r)
{
logerror("%s: unknown_r: %08x & %08x\n", machine().describe_context(), offset << 2, mem_mask);
return 0;
}
WRITE32_MEMBER(sbus_turbogx_device::unknown_w)
WRITE32_MEMBER(sbus_cgsix_device::unknown_w)
{
logerror("%s: unknown_w: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask);
}
READ32_MEMBER(sbus_turbogx_device::vram_r)
READ32_MEMBER(sbus_cgsix_device::vram_r)
{
return m_vram[offset];
}
WRITE32_MEMBER(sbus_turbogx_device::vram_w)
WRITE32_MEMBER(sbus_cgsix_device::vram_w)
{
COMBINE_DATA(&m_vram[offset]);
}
WRITE32_MEMBER(sbus_turbogx_device::palette_w)
{
if (offset == 0)
{
m_palette_entry = data >> 24;
logerror("selecting palette entry %d\n", (uint32_t)m_palette_entry);
m_palette_step = 0;
}
else if (offset == 1)
{
switch (m_palette_step)
{
case 0:
logerror("palette entry %d red: %02x\n", (uint32_t)m_palette_entry, data);
m_palette_r = data >> 24;
m_palette_step++;
break;
case 1:
logerror("palette entry %d green: %02x\n", (uint32_t)m_palette_entry, data);
m_palette_g = data >> 24;
m_palette_step++;
break;
case 2:
logerror("palette entry %d blue: %02x\n", (uint32_t)m_palette_entry, data);
m_palette_b = data >> 24;
m_palette->set_pen_color(m_palette_entry, rgb_t(m_palette_r, m_palette_g, m_palette_b));
m_palette_step = 0;
m_palette_entry++;
break;
}
}
}
uint8_t sbus_turbogx_device::perform_rasterop(uint8_t src, uint8_t dst)
uint8_t sbus_cgsix_device::perform_rasterop(uint8_t src, uint8_t dst)
{
const uint32_t rops[4] = { fbc_rasterop_rop00(), fbc_rasterop_rop01(), fbc_rasterop_rop10(), fbc_rasterop_rop11() };
@ -208,7 +130,7 @@ uint8_t sbus_turbogx_device::perform_rasterop(uint8_t src, uint8_t dst)
}
// NOTE: This is basically untested, and probably full of bugs!
void sbus_turbogx_device::handle_draw_command()
void sbus_cgsix_device::handle_draw_command()
{
if (fbc_misc_draw() != FBC_MISC_DRAW_RENDER)
{
@ -252,7 +174,7 @@ void sbus_turbogx_device::handle_draw_command()
}
// NOTE: This is basically untested, and probably full of bugs!
void sbus_turbogx_device::handle_blit_command()
void sbus_cgsix_device::handle_blit_command()
{
uint8_t *vram = (uint8_t*)&m_vram[0];
const uint32_t fbw = (m_fbc.m_clip_maxx + 1);
@ -281,7 +203,7 @@ void sbus_turbogx_device::handle_blit_command()
}
}
READ32_MEMBER(sbus_turbogx_device::fbc_r)
READ32_MEMBER(sbus_cgsix_device::fbc_r)
{
uint32_t ret = 0;
switch (offset)
@ -588,7 +510,7 @@ READ32_MEMBER(sbus_turbogx_device::fbc_r)
return ret;
}
WRITE32_MEMBER(sbus_turbogx_device::fbc_w)
WRITE32_MEMBER(sbus_cgsix_device::fbc_w)
{
static const char* misc_bdisp_name[4] = { "IGNORE", "0", "1", "ILLEGAL" };
static const char* misc_bread_name[4] = { "IGNORE", "0", "1", "ILLEGAL" };
@ -1026,3 +948,86 @@ WRITE32_MEMBER(sbus_turbogx_device::fbc_w)
break;
}
}
//-------------------------------------------------
// TurboGX implementation
//-------------------------------------------------
void sbus_turbogx_device::mem_map(address_map &map)
{
base_map(map);
map(0x00800000, 0x008fffff).rw(FUNC(sbus_turbogx_device::vram_r), FUNC(sbus_turbogx_device::vram_w));
}
ROM_START( sbus_turbogx )
ROM_REGION32_BE(0x8000, "prom", ROMREGION_ERASEFF)
ROM_LOAD( "sunw,501-2325.bin", 0x0000, 0x8000, CRC(bbdc45f8) SHA1(e4a51d78e199cd57f2fcb9d45b25dfae2bd537e4))
ROM_END
const tiny_rom_entry *sbus_turbogx_device::device_rom_region() const
{
return ROM_NAME( sbus_turbogx );
}
void sbus_turbogx_device::device_add_mconfig(machine_config &config)
{
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_screen_update(FUNC(sbus_turbogx_device::screen_update));
m_screen->set_size(1152, 900);
m_screen->set_visarea(0, 1152-1, 0, 900-1);
m_screen->set_refresh_hz(72);
BT458(config, m_ramdac, 0);
}
sbus_turbogx_device::sbus_turbogx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: sbus_cgsix_device(mconfig, SBUS_TURBOGX, tag, owner, clock, 0x100000)
{
}
void sbus_turbogx_device::install_device()
{
m_sbus->install_device(m_base, m_base + 0x1ffffff, *this, &sbus_turbogx_device::mem_map);
}
//-------------------------------------------------
// TurboGX+ implementation
//-------------------------------------------------
void sbus_turbogxp_device::mem_map(address_map &map)
{
base_map(map);
map(0x00800000, 0x00bfffff).rw(FUNC(sbus_turbogxp_device::vram_r), FUNC(sbus_turbogxp_device::vram_w));
}
ROM_START( sbus_turbogxp )
ROM_REGION32_BE(0x8000, "prom", ROMREGION_ERASEFF)
ROM_LOAD( "sunw,501-2253.bin", 0x0000, 0x8000, CRC(525a58db) SHA1(721fc378d4b952b5cbb271e16bd67bc02439efdc))
ROM_END
const tiny_rom_entry *sbus_turbogxp_device::device_rom_region() const
{
return ROM_NAME( sbus_turbogxp );
}
void sbus_turbogxp_device::device_add_mconfig(machine_config &config)
{
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_screen_update(FUNC(sbus_turbogxp_device::screen_update));
m_screen->set_size(1152, 900);
m_screen->set_visarea(0, 1152-1, 0, 900-1);
m_screen->set_refresh_hz(72);
BT467(config, m_ramdac, 0);
}
sbus_turbogxp_device::sbus_turbogxp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: sbus_cgsix_device(mconfig, SBUS_TURBOGXP, tag, owner, clock, 0x400000)
{
}
void sbus_turbogxp_device::install_device()
{
m_sbus->install_device(m_base, m_base + 0x1ffffff, *this, &sbus_turbogxp_device::mem_map);
}

View File

@ -2,52 +2,53 @@
// copyright-holders:Ryan Holtz
/***************************************************************************
Sun TurboGX accelerated 8-bit color video controller
Sun cgsix-series accelerated 8-bit color video controller
***************************************************************************/
#ifndef MAME_BUS_SBUS_TURBOGX_H
#define MAME_BUS_SBUS_TURBOGX_H
#ifndef MAME_BUS_SBUS_CGSIX_H
#define MAME_BUS_SBUS_CGSIX_H
#pragma once
#include "sbus.h"
#include "emupal.h"
#include "video/bt45x.h"
#include "screen.h"
class sbus_turbogx_device : public device_t, public device_sbus_card_interface
class sbus_cgsix_device : public device_t, public device_sbus_card_interface
{
public:
// construction/destruction
sbus_turbogx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// construction/destruction
sbus_cgsix_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint32_t vram_size)
: sbus_cgsix_device(mconfig, type, tag, owner, clock)
{
set_vram_size(vram_size);
}
sbus_cgsix_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// configuration
void set_vram_size(uint32_t vram_size) { m_vram_size = vram_size; }
// device_t overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
// device_sbus_slot_interface overrides
virtual void install_device() override;
void palette_init(palette_device &palette);
DECLARE_READ32_MEMBER(rom_r);
DECLARE_READ32_MEMBER(unknown_r);
DECLARE_WRITE32_MEMBER(unknown_w);
DECLARE_READ32_MEMBER(vram_r);
DECLARE_WRITE32_MEMBER(vram_w);
DECLARE_WRITE32_MEMBER(palette_w);
DECLARE_READ32_MEMBER(fbc_r);
DECLARE_WRITE32_MEMBER(fbc_w);
private:
protected:
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint8_t perform_rasterop(uint8_t src, uint8_t dst);
void handle_blit_command();
void handle_draw_command();
void mem_map(address_map &map) override;
void base_map(address_map &map);
enum
{
@ -466,18 +467,46 @@ private:
required_memory_region m_rom;
std::unique_ptr<uint32_t[]> m_vram;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
uint8_t m_palette_entry;
uint8_t m_palette_r;
uint8_t m_palette_g;
uint8_t m_palette_b;
uint8_t m_palette_step;
required_device<bt458_device> m_ramdac;
fbc_t m_fbc;
uint32_t m_vram_size;
};
// device type definition
DECLARE_DEVICE_TYPE(SBUS_TURBOGX, sbus_turbogx_device)
class sbus_turbogx_device : public sbus_cgsix_device
{
public:
sbus_turbogx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
#endif // MAME_BUS_SBUS_TURBOGX_H
protected:
// device_t overrides
virtual const tiny_rom_entry *device_rom_region() const override;
void device_add_mconfig(machine_config &config) override;
// device_sbus_slot_interface overrides
virtual void install_device() override;
void mem_map(address_map &map) override;
};
class sbus_turbogxp_device : public sbus_cgsix_device
{
public:
sbus_turbogxp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device_t overrides
virtual const tiny_rom_entry *device_rom_region() const override;
void device_add_mconfig(machine_config &config) override;
// device_sbus_slot_interface overrides
virtual void install_device() override;
void mem_map(address_map &map) override;
};
DECLARE_DEVICE_TYPE(SBUS_TURBOGX, sbus_turbogx_device)
DECLARE_DEVICE_TYPE(SBUS_TURBOGXP, sbus_turbogxp_device)
#endif // MAME_BUS_SBUS_CGSIX_H

View File

@ -16,10 +16,10 @@ void sbus_cgthree_device::mem_map(address_map &map)
{
map(0x00000000, 0x01ffffff).rw(FUNC(sbus_cgthree_device::unknown_r), FUNC(sbus_cgthree_device::unknown_w));
map(0x00000000, 0x000007ff).r(FUNC(sbus_cgthree_device::rom_r));
map(0x00400000, 0x00400007).w(FUNC(sbus_cgthree_device::palette_w));
map(0x00400000, 0x0040000f).m(m_ramdac, FUNC(bt458_device::map)).umask32(0xff000000);
map(0x007ff800, 0x007ff81f).rw(FUNC(sbus_cgthree_device::regs_r), FUNC(sbus_cgthree_device::regs_w));
map(0x00800000, 0x008fd1ff).rw(FUNC(sbus_cgthree_device::vram2_r), FUNC(sbus_cgthree_device::vram2_w));
map(0x00bff800, 0x00cfcbff).rw(FUNC(sbus_cgthree_device::vram_r), FUNC(sbus_cgthree_device::vram_w));
map(0x00800000, 0x008fffff).rw(FUNC(sbus_cgthree_device::vram_r), FUNC(sbus_cgthree_device::vram_w));
map(0x00bff800, 0x00cff7ff).rw(FUNC(sbus_cgthree_device::vram_r), FUNC(sbus_cgthree_device::vram_w));
}
ROM_START( sbus_cgthree )
@ -34,13 +34,13 @@ const tiny_rom_entry *sbus_cgthree_device::device_rom_region() const
void sbus_cgthree_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_screen_update(FUNC(sbus_cgthree_device::screen_update));
screen.set_size(1152, 900);
screen.set_visarea(0, 1152-1, 0, 900-1);
screen.set_refresh_hz(72);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_screen_update(FUNC(sbus_cgthree_device::screen_update));
m_screen->set_size(1152, 900);
m_screen->set_visarea(0, 1152-1, 0, 900-1);
m_screen->set_refresh_hz(72);
PALETTE(config, m_palette, 256).set_init(DEVICE_SELF, FUNC(sbus_cgthree_device::palette_init));
BT458(config, m_ramdac, 0);
}
sbus_cgthree_device::sbus_cgthree_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
@ -48,29 +48,17 @@ sbus_cgthree_device::sbus_cgthree_device(const machine_config &mconfig, const ch
, device_sbus_card_interface(mconfig, *this)
, m_rom(*this, "prom")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_ramdac(*this, "ramdac")
{
}
void sbus_cgthree_device::device_start()
{
m_vram = std::make_unique<uint32_t[]>(0x100000/4);
m_vram2 = std::make_unique<uint32_t[]>(0x100000/4);
save_item(NAME(m_palette_entry));
save_item(NAME(m_palette_r));
save_item(NAME(m_palette_g));
save_item(NAME(m_palette_b));
save_item(NAME(m_palette_step));
}
void sbus_cgthree_device::device_reset()
{
m_palette_entry = 0;
m_palette_r = 0;
m_palette_g = 0;
m_palette_b = 0;
m_palette_step = 0;
}
void sbus_cgthree_device::install_device()
@ -78,19 +66,10 @@ void sbus_cgthree_device::install_device()
m_sbus->install_device(m_base, m_base + 0x1ffffff, *this, &sbus_cgthree_device::mem_map);
}
void sbus_cgthree_device::palette_init(palette_device &palette)
{
for (int i = 0; i < 256; i++)
{
const uint8_t reversed = 255 - i;
palette.set_pen_color(i, rgb_t(reversed, reversed, reversed));
}
}
uint32_t sbus_cgthree_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
const pen_t *pens = m_palette->pens();
uint8_t *vram = (uint8_t *)&m_vram2[0];
const pen_t *pens = m_ramdac->pens();
uint8_t *vram = (uint8_t *)&m_vram[0];
for (int y = 0; y < 900; y++)
{
@ -116,35 +95,6 @@ WRITE32_MEMBER(sbus_cgthree_device::unknown_w)
logerror("%s: unknown_w: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask);
}
WRITE32_MEMBER(sbus_cgthree_device::palette_w)
{
if (offset == 0)
{
m_palette_entry = data >> 24;
m_palette_step = 0;
}
else
{
switch (m_palette_step)
{
case 0:
m_palette_r = data >> 24;
m_palette_step++;
break;
case 1:
m_palette_g = data >> 24;
m_palette_step++;
break;
case 2:
m_palette_b = data >> 24;
m_palette->set_pen_color(m_palette_entry, rgb_t(m_palette_r, m_palette_g, m_palette_b));
m_palette_step = 0;
m_palette_entry++;
break;
}
}
}
READ8_MEMBER(sbus_cgthree_device::regs_r)
{
logerror("%s: regs_r: Unimplemented: %08x\n", machine().describe_context(), 0x7ff800 + offset);
@ -170,13 +120,3 @@ WRITE32_MEMBER(sbus_cgthree_device::vram_w)
{
COMBINE_DATA(&m_vram[offset]);
}
READ32_MEMBER(sbus_cgthree_device::vram2_r)
{
return m_vram2[offset];
}
WRITE32_MEMBER(sbus_cgthree_device::vram2_w)
{
COMBINE_DATA(&m_vram2[offset]);
}

View File

@ -12,7 +12,7 @@
#pragma once
#include "sbus.h"
#include "emupal.h"
#include "video/bt45x.h"
class sbus_cgthree_device : public device_t, public device_sbus_card_interface
{
@ -30,8 +30,6 @@ protected:
// device_sbus_slot_interface overrides
virtual void install_device() override;
void palette_init(palette_device &palette);
DECLARE_READ32_MEMBER(unknown_r);
DECLARE_WRITE32_MEMBER(unknown_w);
DECLARE_WRITE32_MEMBER(palette_w);
@ -40,8 +38,6 @@ protected:
DECLARE_READ32_MEMBER(rom_r);
DECLARE_READ32_MEMBER(vram_r);
DECLARE_WRITE32_MEMBER(vram_w);
DECLARE_READ32_MEMBER(vram2_r);
DECLARE_WRITE32_MEMBER(vram2_w);
private:
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@ -50,17 +46,11 @@ private:
required_memory_region m_rom;
std::unique_ptr<uint32_t[]> m_vram;
std::unique_ptr<uint32_t[]> m_vram2; // ???
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
uint8_t m_palette_entry;
uint8_t m_palette_r;
uint8_t m_palette_g;
uint8_t m_palette_b;
uint8_t m_palette_step;
required_device<bt458_device> m_ramdac;
};
// device type definition
DECLARE_DEVICE_TYPE(SBUS_CGTHREE, sbus_cgthree_device)
#endif // MAME_BUS_SBUS_CGTHREE_H

View File

@ -0,0 +1,71 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************
Sun SunSwift 10/100 + Fast Wide SCSI "Colossus" skeleton
Notable parts on board:
- 1x 32-pin PLCC ROM, label 525 / 1409 / -08 on separate lines
- 1x Sun STP2002QFP, marked 100-4156-05 / 609-0392458 / DP03972
- 1x National Semiconductor DP83840AVCE-1 Ethernet Physical Layer
- 1x National Semiconductor DP83223V Twisted Pair Transceiver
***************************************************************************/
#include "emu.h"
#include "hme.h"
DEFINE_DEVICE_TYPE(SBUS_HME, sbus_hme_device, "sbus_hme", "Sun 10/100 + Fast Wide SCSI")
void sbus_hme_device::mem_map(address_map &map)
{
map(0x00000000, 0x01ffffff).rw(FUNC(sbus_hme_device::unknown_r), FUNC(sbus_hme_device::unknown_w));
map(0x00000000, 0x0000ffff).r(FUNC(sbus_hme_device::rom_r));
}
ROM_START( sbus_hme )
ROM_REGION32_BE(0x10000, "prom", ROMREGION_ERASEFF)
ROM_LOAD( "525 1409 -08.bin", 0x00000, 0x10000, CRC(10f0b28f) SHA1(b54bb0f01c45accdbc58c3a86f8de34949374880))
ROM_END
const tiny_rom_entry *sbus_hme_device::device_rom_region() const
{
return ROM_NAME( sbus_hme );
}
void sbus_hme_device::device_add_mconfig(machine_config &config)
{
}
sbus_hme_device::sbus_hme_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SBUS_HME, tag, owner, clock)
, device_sbus_card_interface(mconfig, *this)
, m_rom(*this, "prom")
{
}
void sbus_hme_device::device_start()
{
}
void sbus_hme_device::install_device()
{
m_sbus->install_device(m_base, m_base + 0x1ffffff, *this, &sbus_hme_device::mem_map);
}
READ32_MEMBER(sbus_hme_device::unknown_r)
{
logerror("%s: unknown_r: %08x & %08x\n", machine().describe_context(), offset << 2, mem_mask);
return 0;
}
WRITE32_MEMBER(sbus_hme_device::unknown_w)
{
logerror("%s: unknown_w: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask);
}
READ32_MEMBER(sbus_hme_device::rom_r)
{
return ((uint32_t*)m_rom->base())[offset];
}

View File

@ -0,0 +1,45 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************
Sun SunSwift 10/100 + Fast Wide SCSI "Colossus" skeleton
***************************************************************************/
#ifndef MAME_BUS_SBUS_HME_H
#define MAME_BUS_SBUS_HME_H
#pragma once
#include "sbus.h"
class sbus_hme_device : public device_t, public device_sbus_card_interface
{
public:
// construction/destruction
sbus_hme_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device_t overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// device_sbus_slot_interface overrides
virtual void install_device() override;
DECLARE_READ32_MEMBER(unknown_r);
DECLARE_WRITE32_MEMBER(unknown_w);
DECLARE_READ32_MEMBER(rom_r);
private:
void mem_map(address_map &map) override;
required_memory_region m_rom;
};
DECLARE_DEVICE_TYPE(SBUS_HME, sbus_hme_device)
#endif // MAME_BUS_SBUS_HME_H

View File

@ -7,16 +7,30 @@
***************************************************************************/
#include "emu.h"
// Display boards
#include "bwtwo.h"
#include "cgthree.h"
#include "turbogx.h"
#include "cgsix.h"
// Accelerator boards
#include "sunpc.h"
// Peripheral boards
#include "artecon.h"
#include "hme.h"
#include "sbus.h"
void sbus_cards(device_slot_interface &device)
{
device.option_add("bwtwo", SBUS_BWTWO); /* Sun bwtwo monochrome display board */
device.option_add("cgthree", SBUS_CGTHREE); /* Sun cgthree color display board */
device.option_add("turbogx", SBUS_TURBOGX); /* Sun TurboGX 8-bit color display board */
device.option_add("bwtwo", SBUS_BWTWO); /* Sun bwtwo monochrome display board */
device.option_add("cgthree", SBUS_CGTHREE); /* Sun cgthree color display board */
device.option_add("turbogx", SBUS_TURBOGX); /* Sun TurboGX 8-bit color display board */
device.option_add("turbogxp", SBUS_TURBOGXP); /* Sun TurboGX+ 8-bit color display board */
device.option_add("sunpc", SBUS_SUNPC); /* Sun SunPC 5x86 Accelerator board */
device.option_add("hme", SBUS_HME); /* Sun SunSwift 10/100 + Fast Wide SCSI "Colossus" board */
device.option_add("sb300p", SBUS_SB300P); /* Artecon CB300P 3-serial/4-parallel board */
}
DEFINE_DEVICE_TYPE(SBUS_SLOT, sbus_slot_device, "sbus_slot", "Sun SBus Slot")

View File

@ -0,0 +1,71 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************
Sun SunPC 5x86 Accelerator (501-4230) skeleton
Notable parts on board:
- 1x AMD AM27C256 PLCC ROM
- 1x Motorola SunPC Accelerator 100-3069-03, mfr/date AANL9732
- 6x Cypress CY7B185-10VC 64kBit Static RAM
- 1x AMD 5x86 (under heatsink; markings unknown)
***************************************************************************/
#include "emu.h"
#include "sunpc.h"
DEFINE_DEVICE_TYPE(SBUS_SUNPC, sbus_sunpc_device, "sbus_sunpc", "Sun SunPC accelerator")
void sbus_sunpc_device::mem_map(address_map &map)
{
map(0x00000000, 0x01ffffff).rw(FUNC(sbus_sunpc_device::unknown_r), FUNC(sbus_sunpc_device::unknown_w));
map(0x00000000, 0x00007fff).r(FUNC(sbus_sunpc_device::rom_r));
}
ROM_START( sbus_sunpc )
ROM_REGION32_BE(0x8000, "prom", ROMREGION_ERASEFF)
ROM_LOAD( "sunw,501-1763-01.bin", 0x0000, 0x8000, CRC(171f50f8) SHA1(21c4c02bc5a3a0494301f19c54ba0e207568fb42))
ROM_END
const tiny_rom_entry *sbus_sunpc_device::device_rom_region() const
{
return ROM_NAME( sbus_sunpc );
}
void sbus_sunpc_device::device_add_mconfig(machine_config &config)
{
}
sbus_sunpc_device::sbus_sunpc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SBUS_SUNPC, tag, owner, clock)
, device_sbus_card_interface(mconfig, *this)
, m_rom(*this, "prom")
{
}
void sbus_sunpc_device::device_start()
{
}
void sbus_sunpc_device::install_device()
{
m_sbus->install_device(m_base, m_base + 0x1ffffff, *this, &sbus_sunpc_device::mem_map);
}
READ32_MEMBER(sbus_sunpc_device::unknown_r)
{
logerror("%s: unknown_r: %08x & %08x\n", machine().describe_context(), offset << 2, mem_mask);
return 0;
}
WRITE32_MEMBER(sbus_sunpc_device::unknown_w)
{
logerror("%s: unknown_w: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask);
}
READ32_MEMBER(sbus_sunpc_device::rom_r)
{
return ((uint32_t*)m_rom->base())[offset];
}

View File

@ -0,0 +1,45 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************
Sun SunPC 5x86 Accelerator (501-4230) skeleton
***************************************************************************/
#ifndef MAME_BUS_SBUS_SUNPC_H
#define MAME_BUS_SBUS_SUNPC_H
#pragma once
#include "sbus.h"
class sbus_sunpc_device : public device_t, public device_sbus_card_interface
{
public:
// construction/destruction
sbus_sunpc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device_t overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// device_sbus_slot_interface overrides
virtual void install_device() override;
DECLARE_READ32_MEMBER(unknown_r);
DECLARE_WRITE32_MEMBER(unknown_w);
DECLARE_READ32_MEMBER(rom_r);
private:
void mem_map(address_map &map) override;
required_memory_region m_rom;
};
DECLARE_DEVICE_TYPE(SBUS_SUNPC, sbus_sunpc_device)
#endif // MAME_BUS_SBUS_SUNPC_H

View File

@ -2846,7 +2846,7 @@ void mb86901_device::dispatch_instruction(uint32_t op)
if (illegal_IU_instr)
{
printf("illegal instruction at %08x\n", PC);
printf("illegal instruction at %08x: %08x\n", PC, op);
m_trap = 1;
m_illegal_instruction = 1;
}

View File

@ -11,7 +11,7 @@
#include "sparcdasm.h"
#define SPARCV8 (0)
#define SPARCV8 (1)
#define LOG_FCODES (0)
#if LOG_FCODES

View File

@ -12,7 +12,6 @@
- strobed I/O
- expose register file to disassembler
- decimal adjust instruction
- timer Tin/Tout modes
- serial
- instruction pipeline

View File

@ -308,6 +308,25 @@ INSTRUCTION( cp_IR1_IM ) { mode_IR1_IM(compare) }
void z8_device::decimal_adjust(uint8_t dst)
{
uint8_t data = register_read(dst);
uint16_t new_data = data;
if (flag(D))
{
if (flag(H) | ((data&0xf)>9)) new_data-=6;
if (flag(C) | (data>0x99)) new_data-=0x60;
}
else
{
if (flag(H) | ((data&0xf)>9)) new_data+=6;
if (flag(C) | (data>0x99)) new_data+=0x60;
}
set_flag_c(new_data & 0x100);
set_flag_s(new_data & 0x80);
new_data &= 0xff;
set_flag_z(new_data == 0);
// officially, v is undefined
register_write(dst, new_data);
}
INSTRUCTION( da_R1 ) { mode_R1(decimal_adjust) }

View File

@ -563,11 +563,13 @@ void nscsi_full_device::scsi_data_out(int buf, int size)
c->param2 = size;
}
void nscsi_full_device::sense(bool deferred, uint8_t key)
void nscsi_full_device::sense(bool deferred, uint8_t key, uint8_t asc, uint8_t ascq)
{
memset(scsi_sense_buffer, 0, sizeof(scsi_sense_buffer));
scsi_sense_buffer[0] = deferred ? 0x71 : 0x70;
scsi_sense_buffer[2] = key;
scsi_sense_buffer[12] = asc;
scsi_sense_buffer[13] = ascq;
}
void nscsi_full_device::scsi_unknown_command()
@ -586,7 +588,11 @@ void nscsi_full_device::scsi_command()
switch(scsi_cmdbuf[0]) {
case SC_REQUEST_SENSE:
LOG("command REQUEST SENSE\n");
scsi_data_in(SBUF_SENSE, 8);
/*
* Targets shall be capable of returning eighteen bytes of data in
* response to a REQUEST SENSE command.
*/
scsi_data_in(SBUF_SENSE, 18);
scsi_status_complete(SS_GOOD);
break;
default:
@ -619,7 +625,9 @@ int nscsi_full_device::get_lun(int def)
void nscsi_full_device::bad_lun()
{
scsi_status_complete(SS_CHECK_CONDITION);
sense(false, 2);
// key:illegal request, asc:logical unit not supported
sense(false, 5, 0x25);
}
// Arbitration delay (2.4us)

View File

@ -285,7 +285,7 @@ protected:
void scsi_data_in(int buf, int size);
void scsi_data_out(int buf, int size);
void sense(bool deferred, uint8_t key);
void sense(bool deferred, uint8_t key, uint8_t asc = 0, uint8_t ascq = 0);
int get_lun(int def = 0);
void bad_lun();
@ -354,7 +354,7 @@ protected:
// Fast negation period (30ns)
virtual attotime scsi_fast_negation_period();
uint8_t scsi_cmdbuf[4096], scsi_sense_buffer[8];
uint8_t scsi_cmdbuf[4096], scsi_sense_buffer[18];
int scsi_cmdsize;
uint8_t scsi_identify;

View File

@ -49,6 +49,7 @@ uint8_t nscsi_cdrom_device::scsi_get_data(int id, int pos)
if(id != 2)
return nscsi_full_device::scsi_get_data(id, pos);
const int sector = (lba * bytes_per_block + pos) / bytes_per_sector;
const int extra_pos = (lba * bytes_per_block) % bytes_per_sector;
if(sector != cur_sector) {
cur_sector = sector;
if(!cdrom_read_data(cdrom, sector, sector_buffer, CD_TRACK_MODE1)) {
@ -56,7 +57,7 @@ uint8_t nscsi_cdrom_device::scsi_get_data(int id, int pos)
std::fill_n(sector_buffer, sizeof(sector_buffer), 0);
}
}
return sector_buffer[pos & (bytes_per_sector - 1)];
return sector_buffer[(pos + extra_pos) & (bytes_per_sector - 1)];
}
void nscsi_cdrom_device::return_no_cd()
@ -112,6 +113,22 @@ void nscsi_cdrom_device::scsi_command()
int lun = get_lun(scsi_cmdbuf[1] >> 5);
LOG("command INQUIRY lun=%d EVPD=%d page=%d alloc=%02x link=%02x\n",
lun, scsi_cmdbuf[1] & 1, scsi_cmdbuf[2], scsi_cmdbuf[4], scsi_cmdbuf[5]);
/*
* 7.5.3 Selection of an invalid logical unit
*
* The logical unit may not be valid because:
* a) the target does not support the logical unit (e.g. some targets
* support only one peripheral device). In response to an INQUIRY
* command, the target shall return the INQUIRY data with the
* peripheral qualifier set to the value required in 8.2.5.1.
*
* If the logic from the specification above is applied, Sun SCSI probe
* code gets confused and reports multiple valid logical units are
* attached; proper behaviour is produced when check condition status
* is returned with sense data ILLEGAL REQUEST and LOGICAL UNIT NOT
* SUPPORTED.
*/
if(lun) {
bad_lun();
return;
@ -223,7 +240,7 @@ void nscsi_cdrom_device::scsi_command()
int pmin = page == 0x3f ? 0x00 : page;
for(int page=pmax; page >= pmin; page--) {
switch(page) {
case 0x00: // Unit attention parameters page (weird)
case 0x00: // Vendor specific (does not require page format)
scsi_cmdbuf[pos++] = 0x80; // PS, page id
scsi_cmdbuf[pos++] = 0x02; // Page length
scsi_cmdbuf[pos++] = 0x00; // Meh

View File

@ -274,9 +274,11 @@ void timekeeper_device::counters_from_ram()
void timekeeper_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
logerror("Tick\n");
if( ( m_seconds & SECONDS_ST ) != 0 ||
( m_control & CONTROL_W ) != 0 )
{
logerror("No Tick\n");
return;
}
@ -368,6 +370,7 @@ WRITE8_MEMBER(timekeeper_device::watchdog_write)
WRITE8_MEMBER( timekeeper_device::write )
{
logerror("timekeeper_device::write: %04x = %02x\n", offset, data);
if( offset == m_offset_control )
{
if( ( m_control & CONTROL_W ) != 0 &&
@ -375,6 +378,13 @@ WRITE8_MEMBER( timekeeper_device::write )
{
counters_from_ram();
}
if( ( m_control & CONTROL_R ) != 0 &&
( data & CONTROL_W ) == 0 )
{
counters_to_ram();
}
m_control = data;
}
else if( offset == m_offset_day )
@ -419,6 +429,7 @@ READ8_MEMBER( timekeeper_device::read )
m_reset_cb(CLEAR_LINE);
m_irq_cb(CLEAR_LINE);
}
logerror("timekeeper_device::read: %04x (%02x)\n", offset, result);
return result;
}

View File

@ -29,7 +29,7 @@ watchdog_timer_device::watchdog_timer_device(const machine_config &mconfig, cons
: device_t(mconfig, WATCHDOG_TIMER, tag, owner, clock)
, m_vblank_count(0)
, m_time(attotime::zero)
, m_screen_tag(nullptr)
, m_screen(*this, finder_base::DUMMY_TAG)
{
}
@ -43,9 +43,10 @@ void watchdog_timer_device::device_validity_check(validity_checker &valid) const
{
if (m_vblank_count != 0)
{
screen_device *screen = dynamic_cast<screen_device *>(siblingdevice(m_screen_tag));
if (screen == nullptr)
osd_printf_error("Invalid screen tag specified\n");
if (m_screen.finder_tag() == finder_base::DUMMY_TAG)
osd_printf_error("VBLANK count set without setting screen tag\n");
else if (!m_screen)
osd_printf_error("Screen device %s not found\n", m_screen.finder_tag());
}
}
@ -64,9 +65,8 @@ void watchdog_timer_device::device_start()
if (m_vblank_count != 0)
{
// fetch the screen
screen_device *screen = siblingdevice<screen_device>(m_screen_tag);
if (screen != nullptr)
screen->register_vblank_callback(vblank_state_delegate(&watchdog_timer_device::watchdog_vblank, this));
if (m_screen)
m_screen->register_vblank_callback(vblank_state_delegate(&watchdog_timer_device::watchdog_vblank, this));
}
save_item(NAME(m_enabled));
save_item(NAME(m_counter));

View File

@ -1,11 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
#ifndef MAME_MACHINE_WATCHDOG_H
#define MAME_MACHINE_WATCHDOG_H
#pragma once
#include <screen.h>
//**************************************************************************
// TYPE DEFINITIONS
@ -20,7 +21,7 @@ public:
watchdog_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// inline configuration helpers
void set_vblank_count(const char *screen_tag, int32_t count) { m_screen_tag = screen_tag; m_vblank_count = count; }
template <typename T> void set_vblank_count(T &&screen_tag, int32_t count) { m_screen.set_tag(std::forward<T>(screen_tag)); m_vblank_count = count; }
void set_time(attotime time) { m_time = time; }
// watchdog control
@ -49,13 +50,13 @@ private:
void watchdog_vblank(screen_device &screen, bool vblank_state);
// configuration data
int32_t m_vblank_count; // number of VBLANKs until resetting the machine
int32_t m_vblank_count; // number of VBLANKs until resetting the machine
attotime m_time; // length of time until resetting the machine
const char * m_screen_tag; // the tag of the screen this timer tracks
optional_device<screen_device> m_screen; // the tag of the screen this timer tracks
// internal state
bool m_enabled; // is the watchdog enabled?
int32_t m_counter; // counter for VBLANK tracking
int32_t m_counter; // counter for VBLANK tracking
emu_timer * m_timer; // timer for triggering reset
};

View File

@ -467,7 +467,7 @@ z80dart_channel::z80dart_channel(const machine_config &mconfig, const char *tag,
, m_rx_first(0)
, m_rx_break(0)
, m_rx_rr0_latch(0)
, m_rxd(0)
, m_rxd(1)
, m_ri(0)
, m_cts(0)
, m_dcd(0)
@ -802,7 +802,7 @@ void z80dart_channel::control_write(uint8_t data)
if (!m_dcd) m_rr[0] |= RR0_DCD;
if (m_ri) m_rr[0] |= RR0_RI;
if (m_cts) m_rr[0] |= RR0_CTS;
if (!m_cts) m_rr[0] |= RR0_CTS;
m_rx_rr0_latch = 0;
@ -932,6 +932,8 @@ void z80dart_channel::control_write(uint8_t data)
else
{
// when the RTS bit is reset, the _RTS output goes high after the transmitter empties
if (m_rr[1] & RR1_ALL_SENT)
set_rts(1);
m_rts = 0;
}

View File

@ -17,12 +17,16 @@
* Bt455 170MHz 4 bit 1 bit 1 4 bit
* Bt457 165Mhz 8 bit 2 bit 1 8 bit blinking, multiplexing
* Bt458 165MHz 8 bit 2 bit 3 8 bit blinking, multiplexing
* Bt467 220MHz 8 bit 2 bit 3 8 bit blinking, multiplexing [NOTE: Specs are assumed based on Bt458 compatibility)
*
* Reference: http://www.bitsavers.org/components/brooktree/_dataBooks/1991_Brooktree_Product_Databook.pdf
*
* The bt45x_mono_device_base uses the standard red/green/blue read/write
* cycles defined in the databook, with color data active on the green cycle.
*
* The Bt467 is specified in its datasheet as register-compatible with the Bt458.
* As such, it is currently implemented as a simple alias of the Bt458.
*
* TODO
* - refactor to separate devices with registers
* - implement blinking and overlay
@ -45,6 +49,7 @@ DEFINE_DEVICE_TYPE(BT454, bt454_device, "bt454", "Brooktree Bt454 16 Color RAMDA
DEFINE_DEVICE_TYPE(BT455, bt455_device, "bt455", "Brooktree Bt455 16 Color RAMDAC")
DEFINE_DEVICE_TYPE(BT457, bt457_device, "bt457", "Brooktree Bt457 256 Color RAMDAC")
DEFINE_DEVICE_TYPE(BT458, bt458_device, "bt458", "Brooktree Bt458 256 Color RAMDAC")
DEFINE_DEVICE_TYPE(BT467, bt467_device, "bt467", "Brooktree Bt467 256 Color RAMDAC")
void bt45x_device_base::map(address_map &map)
{
@ -122,8 +127,18 @@ bt457_device::bt457_device(const machine_config &mconfig, const char *tag, devic
{
}
bt458_device::bt458_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: bt45x_rgb_device_base(mconfig, type, tag, owner, clock, 256, 3)
{
}
bt458_device::bt458_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: bt45x_rgb_device_base(mconfig, BT458, tag, owner, clock, 256, 3)
: bt458_device(mconfig, BT458, tag, owner, clock)
{
}
bt467_device::bt467_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: bt458_device(mconfig, BT467, tag, owner, clock)
{
}

View File

@ -169,6 +169,15 @@ class bt458_device : public bt45x_rgb_device_base
{
public:
bt458_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
bt458_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
};
class bt467_device : public bt458_device
{
public:
bt467_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};
DECLARE_DEVICE_TYPE(BT451, bt451_device)
@ -177,5 +186,6 @@ DECLARE_DEVICE_TYPE(BT454, bt454_device)
DECLARE_DEVICE_TYPE(BT455, bt455_device)
DECLARE_DEVICE_TYPE(BT457, bt457_device)
DECLARE_DEVICE_TYPE(BT458, bt458_device)
DECLARE_DEVICE_TYPE(BT467, bt467_device)
#endif // MAME_VIDEO_BT45X_H

View File

@ -282,13 +282,15 @@ static int tzx_cas_handle_block( int16_t **buffer, const uint8_t *bytes, int pau
}
}
/* pause */
if (pause > 0)
{
int start_pause_samples = millisec_to_samplecount(1);
int rest_pause_samples = millisec_to_samplecount(pause - 1);
int start_pause_samples = millisec_to_samplecount(1);
tzx_output_wave(buffer, start_pause_samples);
size += start_pause_samples;
tzx_output_wave(buffer, start_pause_samples);
size += start_pause_samples;
if (pause > 0)
{
int rest_pause_samples = millisec_to_samplecount(pause - 1);
wave_data = WAVE_LOW;
tzx_output_wave(buffer, rest_pause_samples);
size += rest_pause_samples;

View File

@ -1315,7 +1315,7 @@ vendetta.cpp
vertigo.cpp
vicdual.cpp
victory.cpp
videolich.cpp
video21.cpp
videopin.cpp
videopkr.cpp
videosaa.cpp

View File

@ -403,21 +403,21 @@ WRITE8_MEMBER(exidy_sh8253_sound_device::r6532_porta_w)
READ8_MEMBER(exidy_sh8253_sound_device::r6532_porta_r)
{
uint8_t status = 0xff;
if (m_tms.found())
{
logerror("(%f)%s:TMS5220 status read = %02X\n", machine().time().as_double(), machine().describe_context(), m_tms->status_r());
return m_tms->status_r();
status = m_tms->status_r();
logerror("(%f)%s:TMS5220 status read = %02X\n", machine().time().as_double(), machine().describe_context(), status);
}
else
return 0xff;
return status;
}
WRITE8_MEMBER(exidy_sh8253_sound_device::r6532_portb_w)
{
if (m_tms.found())
{
m_tms->rsq_w(data & 0x01);
m_tms->wsq_w((data >> 1) & 0x01);
m_tms->rsq_w(BIT(data, 0));
m_tms->wsq_w(BIT(data, 1));
}
}

View File

@ -42,6 +42,7 @@ public:
private:
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE8_MEMBER(write_54xx);
DECLARE_READ8_MEMBER(read_5840);
DECLARE_WRITE8_MEMBER(write_5840);
DECLARE_READ8_MEMBER(read_5841);
@ -80,6 +81,11 @@ u32 ampex_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, cons
return 0;
}
WRITE8_MEMBER(ampex_state::write_54xx)
{
// Written during keyboard polling
}
READ8_MEMBER(ampex_state::read_5840)
{
logerror("%s: Read from 5840\n", machine().describe_context());
@ -116,7 +122,7 @@ READ8_MEMBER(ampex_state::read_5842)
WRITE8_MEMBER(ampex_state::write_5843)
{
logerror("%s: Write %02X to 5843\n", machine().describe_context(), data);
//logerror("%s: Write %02X to 5843\n", machine().describe_context(), data);
m_attr = (data & 0x78) >> 3;
}
@ -165,7 +171,21 @@ void ampex_state::mem_map(address_map &map)
{
map(0x0000, 0x2fff).rom().region("roms", 0);
map(0x4000, 0x43ff).ram(); // main RAM
map(0x4400, 0x57ff).ram(); // expansion RAM
map(0x4400, 0x53ff).ram(); // expansion RAM
map(0x5400, 0x5400).portr("IN0");
map(0x5401, 0x5401).portr("IN1");
map(0x5402, 0x5402).portr("IN2");
map(0x5403, 0x5403).portr("IN3");
map(0x5404, 0x5404).portr("IN4");
map(0x5405, 0x5405).portr("IN5");
map(0x5406, 0x5406).portr("IN6");
map(0x5407, 0x5407).portr("IN7");
map(0x5408, 0x5408).portr("IN8");
map(0x5409, 0x5409).portr("IN9");
map(0x540a, 0x540a).portr("INA");
map(0x540b, 0x540b).portr("INB");
map(0x540c, 0x540c).portr("INC");
map(0x5400, 0x54ff).w(FUNC(ampex_state::write_54xx));
map(0x5840, 0x5840).rw(FUNC(ampex_state::read_5840), FUNC(ampex_state::write_5840));
map(0x5841, 0x5841).rw(FUNC(ampex_state::read_5841), FUNC(ampex_state::write_5841));
map(0x5842, 0x5842).r(FUNC(ampex_state::read_5842)).w(m_uart, FUNC(ay31015_device::transmit));
@ -178,6 +198,135 @@ void ampex_state::mem_map(address_map &map)
}
static INPUT_PORTS_START( ampex )
PORT_START("IN0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('\\') PORT_CHAR('|') PORT_CODE(KEYCODE_TILDE)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!') PORT_CODE(KEYCODE_1)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('2') PORT_CHAR('"') PORT_CODE(KEYCODE_2)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('3') PORT_CHAR('#') PORT_CODE(KEYCODE_3)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('4') PORT_CHAR('$') PORT_CODE(KEYCODE_4)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('5') PORT_CHAR('%') PORT_CODE(KEYCODE_5)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('6') PORT_CHAR('&') PORT_CODE(KEYCODE_6)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('\'') PORT_CODE(KEYCODE_7)
PORT_START("IN1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(0x1b) PORT_CODE(KEYCODE_TAB)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('q') PORT_CHAR('Q') PORT_CODE(KEYCODE_Q)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('w') PORT_CHAR('W') PORT_CODE(KEYCODE_W)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('e') PORT_CHAR('E') PORT_CODE(KEYCODE_E)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('r') PORT_CHAR('R') PORT_CODE(KEYCODE_R)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('t') PORT_CHAR('T') PORT_CODE(KEYCODE_T)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('y') PORT_CHAR('Y') PORT_CODE(KEYCODE_Y)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('u') PORT_CHAR('U') PORT_CODE(KEYCODE_U)
PORT_START("IN2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_CAPSLOCK)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CHAR(UCHAR_SHIFT_2) PORT_CODE(KEYCODE_LCONTROL)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('a') PORT_CHAR('A') PORT_CODE(KEYCODE_A)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('s') PORT_CHAR('S') PORT_CODE(KEYCODE_S)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('d') PORT_CHAR('D') PORT_CODE(KEYCODE_D)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('f') PORT_CHAR('F') PORT_CODE(KEYCODE_F)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('g') PORT_CHAR('G') PORT_CODE(KEYCODE_G)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('h') PORT_CHAR('H') PORT_CODE(KEYCODE_H)
PORT_START("IN3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x83 (Break?)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift (Left)") PORT_CHAR(UCHAR_SHIFT_1) PORT_CODE(KEYCODE_LSHIFT)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('z') PORT_CHAR('Z') PORT_CODE(KEYCODE_Z)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('x') PORT_CHAR('X') PORT_CODE(KEYCODE_X)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('c') PORT_CHAR('C') PORT_CODE(KEYCODE_C)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('v') PORT_CHAR('V') PORT_CODE(KEYCODE_V)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('b') PORT_CHAR('B') PORT_CODE(KEYCODE_B)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('n') PORT_CHAR('N') PORT_CODE(KEYCODE_N)
PORT_START("IN4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('m') PORT_CHAR('M') PORT_CODE(KEYCODE_M)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(',') PORT_CHAR('<') PORT_CODE(KEYCODE_COMMA)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('.') PORT_CHAR('>') PORT_CODE(KEYCODE_STOP)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('/') PORT_CHAR('?') PORT_CODE(KEYCODE_SLASH)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift (Right)") PORT_CODE(KEYCODE_RSHIFT)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(' ') PORT_CODE(KEYCODE_SPACE)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('j') PORT_CHAR('J') PORT_CODE(KEYCODE_J)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('k') PORT_CHAR('K') PORT_CODE(KEYCODE_K)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('l') PORT_CHAR('L') PORT_CODE(KEYCODE_L)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR('+') PORT_CODE(KEYCODE_COLON)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('[') PORT_CHAR('{') PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(']') PORT_CHAR('}') PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x1f (shifted: 0x8a) (Page New Line?)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x94 (Line Ins?)
PORT_START("IN6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('i') PORT_CHAR('I') PORT_CODE(KEYCODE_I)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('o') PORT_CHAR('O') PORT_CODE(KEYCODE_O)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('p') PORT_CHAR('P') PORT_CODE(KEYCODE_P)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('^') PORT_CHAR('~') PORT_CODE(KEYCODE_QUOTE)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(0x0a) PORT_CODE(KEYCODE_RALT) PORT_NAME("Line Feed")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(0x0d) PORT_CODE(KEYCODE_ENTER)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xd4 (shifted: 0xf4)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xd9 (shifted: 0xf9)
PORT_START("IN7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('8') PORT_CHAR('(') PORT_CODE(KEYCODE_8)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR(')') PORT_CODE(KEYCODE_9)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('0') PORT_CHAR('_') PORT_CODE(KEYCODE_0)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(':') PORT_CHAR('*') PORT_CODE(KEYCODE_MINUS)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('=') PORT_CODE(KEYCODE_EQUALS)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR('@') PORT_CHAR('`') PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(0x09) PORT_CODE(KEYCODE_BACKSPACE)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x90 (shifted: 0x84)
PORT_START("IN8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) PORT_CODE(KEYCODE_ENTER_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CODE(KEYCODE_DEL_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CODE(KEYCODE_0_PAD)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(COMMA_PAD)) PORT_CODE(KEYCODE_COMMA_PAD)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x97 (Char Del?)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CODE(KEYCODE_DOWN)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x96 (Char Ins?)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN9")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x0d (top half of keypad Enter?)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CODE(KEYCODE_3_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CODE(KEYCODE_2_PAD)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CODE(KEYCODE_1_PAD)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CODE(KEYCODE_HOME)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Del") PORT_CODE(KEYCODE_RCONTROL) // 0x7f
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("INA")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(TAB_PAD)) PORT_CODE(KEYCODE_TAB_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CODE(KEYCODE_6_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_CODE(KEYCODE_5_PAD)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CODE(KEYCODE_4_PAD)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x95 (Line Del?)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CODE(KEYCODE_UP)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CODE(KEYCODE_LEFT)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("INB")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_CODE(KEYCODE_MINUS_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_CODE(KEYCODE_9_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CODE(KEYCODE_8_PAD)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CODE(KEYCODE_7_PAD)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x8b (shifted: 0x8c) (Clear?)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xd0 (Page Erase?)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xb4 (shifted: 0xb6) (Line Erase?)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("INC")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x87 (shifted: 0x86)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x85 (shifted: 0x84)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x89 (shifted: 0x88)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x92 (shifted: 0x93)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0x91
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xb5 (shifted: 0xb7)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
void ampex_state::machine_start()

View File

@ -829,7 +829,7 @@ ROM_START( bagmanj )
ROM_LOAD( "bf8_13.t9", 0x1000, 0x1000, CRC(b2120edd) SHA1(52b89dbcc749b084331fa82b13d0876e911fce52) ) // 2732
ROM_END
ROM_START( botanic2 ) // PCB has Valadon logo with 'bajo licencia Itisa (Palamos)'. Most likely just a bootleg Bagman PCB conversion.
ROM_START( botanic2 ) // PCB has Valadon logo with 'bajo licencia Itisa (Palamos)'.
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "5.9e", 0x0000, 0x1000, CRC(c5170449) SHA1(3f85f254f1a318a0b4d6e12d4df756c880751327) ) // 2732
ROM_LOAD( "6.9f", 0x1000, 0x1000, CRC(33b2df44) SHA1(9d3697bdf0d906b27374a1460cdac715ef10565d) ) // 2732
@ -1120,8 +1120,8 @@ GAME( 1984, sbagmans, sbagman, sbagman, sbagman, bagman_state, empty_init,
GAME( 1983, pickin, 0, pickin, pickin, bagman_state, empty_init, ROT270, "Valadon Automation", "Pickin'", MACHINE_SUPPORTS_SAVE )
GAME( 1983, botanic, 0, botanic, botanici, bagman_state, empty_init, ROT90, "Itisa", "Botanic (English / Spanish)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, botanic2, botanic, bagman, botanici2, bagman_state, empty_init, ROT90, "Itisa", "Botanic (English / Spanish, bootleg conversion)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // At the title screen, Botanic in corrupted in the first loop, ok from the second on. Colors likely wrong, too. Has a leftover 5110.
GAME( 1983, botanic, 0, botanic, botanici, bagman_state, empty_init, ROT90, "Itisa", "Botanic (English / Spanish, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, botanic2, botanic, bagman, botanici2, bagman_state, empty_init, ROT90, "Itisa", "Botanic (English / Spanish, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // At the title screen, Botanic in corrupted in the first loop, ok from the second on. Colors likely wrong, too. Has a leftover 5110.
GAME( 1984, botanicf, botanic, botanic, botanicf, bagman_state, empty_init, ROT270, "Itisa (Valadon Automation license)", "Botanic (French)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, squaitsa, 0, botanic, squaitsa, squaitsa_state, empty_init, ROT0, "Itisa", "Squash (Itisa)", MACHINE_SUPPORTS_SAVE )

View File

@ -1365,10 +1365,10 @@ READ8_MEMBER( cmi_state::fdc_r )
{
switch (m_fdc_addr)
{
case 0xc: { return m_wd1791->status_r() ^ 0xff; }
case 0xd: { return m_wd1791->track_r() ^ 0xff; }
case 0xe: { return m_wd1791->sector_r() ^ 0xff; }
case 0xf: { return m_wd1791->data_r() ^ 0xff; }
case 0xc: return m_wd1791->status_r() ^ 0xff;
case 0xd: return m_wd1791->track_r() ^ 0xff;
case 0xe: return m_wd1791->sector_r() ^ 0xff;
case 0xf: return m_wd1791->data_r() ^ 0xff;
default: return 0;
}
}

View File

@ -112,7 +112,7 @@ static INPUT_PORTS_START( coco3_keyboard )
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP), '^')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN), 10)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT), 8)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT), 9)
@ -120,30 +120,30 @@ static INPUT_PORTS_START( coco3_keyboard )
PORT_START("row4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') PORT_CHAR('|')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') PORT_CHAR('^')
PORT_START("row5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') PORT_CHAR('[')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') PORT_CHAR(']')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') PORT_CHAR('{')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=') PORT_CHAR('_')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_CHAR('}')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') PORT_CHAR('\\')
PORT_START("row6")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("CLEAR") PORT_CODE(KEYCODE_HOME) PORT_CHAR(12)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("BREAK") PORT_CODE(KEYCODE_END) PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL), UCHAR_SHIFT_2)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)

View File

@ -330,7 +330,7 @@ MACHINE_CONFIG_START(foodf_state::foodf)
X2212(config, "nvram").set_auto_save(true);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_TIMER_DRIVER_ADD(m_scan_timer, foodf_state, scanline_update_timer)

View File

@ -1650,7 +1650,7 @@ MACHINE_CONFIG_START(bosco_state::bosco)
//m_videolatch->q_out_cb<7>().set("50xx_2", FUNC(namco_50xx_device::reset_w));
//m_videolatch->q_out_cb<7>().append("52xx", FUNC(namco_52xx_device, reset_w));
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
@ -1722,7 +1722,7 @@ MACHINE_CONFIG_START(galaga_state::galaga)
// Q0-Q5 to 05XX for starfield control
m_videolatch->q_out_cb<7>().set(FUNC(galaga_state::flip_screen_w));
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
@ -1825,7 +1825,7 @@ MACHINE_CONFIG_START(xevious_state::xevious)
MCFG_NAMCO_06XX_WRITE_2_CB(WRITE8("50xx", namco_50xx_device, write))
MCFG_NAMCO_06XX_WRITE_3_CB(WRITE8("54xx", namco_54xx_device, write))
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(60000)) /* 1000 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */

View File

@ -1776,10 +1776,10 @@ MACHINE_CONFIG_START(gottlieb_state::gottlieb_core)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(SYSTEM_CLOCK/4, GOTTLIEB_VIDEO_HCOUNT, 0, GOTTLIEB_VIDEO_HBLANK, GOTTLIEB_VIDEO_VCOUNT, 0, GOTTLIEB_VIDEO_VBLANK)
MCFG_SCREEN_UPDATE_DRIVER(gottlieb_state, screen_update_gottlieb)

View File

@ -755,7 +755,7 @@ MACHINE_CONFIG_START(grchamp_state::grchamp)
MCFG_DEVICE_PROGRAM_MAP(sound_map)
MCFG_DEVICE_PERIODIC_INT_DRIVER(grchamp_state, irq0_line_hold, (double)SOUND_CLOCK/4/16/16/10/16)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
/* video hardware */
@ -763,7 +763,7 @@ MACHINE_CONFIG_START(grchamp_state::grchamp)
MCFG_PALETTE_ADD("palette", 32)
MCFG_PALETTE_INIT_OWNER(grchamp_state, grchamp)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(grchamp_state, screen_update)

View File

@ -30,6 +30,7 @@
#include "machine/z80sio.h"
#include "machine/clock.h"
#include "sound/beep.h"
#include "bus/centronics/ctronics.h"
#include "bus/rs232/rs232.h"
#include "emupal.h"
#include "screen.h"
@ -193,7 +194,7 @@ void m79152pc_state::screen_draw_line(bitmap_ind16 &bitmap, unsigned y)
for (u16 x = ma; x < ma + 80; x++)
{
// BIT(attr, 3) should probably be blinking
// BIT(attr, 1) may be used for high-intensity text (
// BIT(attr, 1) may be used for high-intensity text
u8 chr = m_videoram[x];
u8 attr = m_attributes[x];
u8 gfx = m_chargen[(chr << 4) | (BIT(attr, 2) && ra == 15 ? 3 : ra)];
@ -304,7 +305,19 @@ MACHINE_CONFIG_START(m79152pc_state::m79152pc)
mculatch.int_wr_callback().set(m_uart, FUNC(z80sio_device::ctsb_w)).invert();
mculatch.int_wr_callback().append(FUNC(m79152pc_state::latch_full_w));
I8255A(config, "ppi"); // NEC D8255AD-2
i8255_device &ppi(I8255A(config, "ppi")); // NEC D8255AD-2
ppi.out_pb_callback().set("printer", FUNC(centronics_device::write_data0)).bit(0);
ppi.out_pb_callback().append("printer", FUNC(centronics_device::write_data1)).bit(1);
ppi.out_pb_callback().append("printer", FUNC(centronics_device::write_data2)).bit(2);
ppi.out_pb_callback().append("printer", FUNC(centronics_device::write_data3)).bit(3);
ppi.out_pb_callback().append("printer", FUNC(centronics_device::write_data4)).bit(4);
ppi.out_pb_callback().append("printer", FUNC(centronics_device::write_data5)).bit(5);
ppi.out_pb_callback().append("printer", FUNC(centronics_device::write_data6)).bit(6);
ppi.out_pb_callback().append("printer", FUNC(centronics_device::write_data7)).bit(7);
ppi.out_pc_callback().set("printer", FUNC(centronics_device::write_strobe)).bit(1);
centronics_device &printer(CENTRONICS(config, "printer", centronics_devices, nullptr));
printer.ack_handler().set("ppi", FUNC(i8255_device::pc2_w));
z80ctc_device &ctc(Z80CTC(config, "ctc", 4'000'000));
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);

View File

@ -1092,7 +1092,7 @@ MACHINE_CONFIG_START(mcr3_state::mcrmono)
m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_ctc->zc_callback<0>().set(m_ctc, FUNC(z80ctc_device::trg1));
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -1101,7 +1101,7 @@ MACHINE_CONFIG_START(mcr3_state::mcrmono)
SPEAKER(config, "rspeaker").front_right();
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_REFRESH_RATE(30)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)

View File

@ -591,7 +591,7 @@ INPUT_PORTS_END
MACHINE_CONFIG_START(meyc8080_state::meyc8080)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", I8080, XTAL(20'000'000) / 10) // divider guessed
MCFG_DEVICE_ADD("maincpu", I8080A, XTAL(20'000'000) / 10) // divider guessed
MCFG_DEVICE_PROGRAM_MAP(meyc8080_map)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);

View File

@ -1157,12 +1157,12 @@ MACHINE_CONFIG_START(missile_state::missile)
MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK/8)
MCFG_DEVICE_PROGRAM_MAP(main_map)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_PALETTE_ADD("palette", 8)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(missile_state, screen_update_missile)
MCFG_SCREEN_PALETTE("palette")

View File

@ -1449,6 +1449,12 @@ static INPUT_PORTS_START( luckywld )
NAMCOS2_MCU_DIPSW_DEFAULT
NAMCOS2_MCU_DIAL_DEFAULT
PORT_MODIFY("DSW")
// this applies to both the World and Japan sets
PORT_DIPNAME( 0x40, 0x40, "Show Winners Don't Use Drugs")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
INPUT_PORTS_END
static INPUT_PORTS_START( sgunner )
@ -2055,6 +2061,9 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(namcos2_state::finalap3)
finallap_c68(config);
m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namcos2_state::TilemapCB_finalap2, this));
MCFG_VIDEO_START_OVERRIDE(namcos2_state, finalap2)
MACHINE_CONFIG_END
@ -3895,17 +3904,25 @@ ROM_START( fourtraxj )
ROM_LOAD( "fx_voi-1.3m", 0x000000, 0x080000, CRC(6173364f) SHA1(cc426f49b7e87b11f1f51e8e10db7cad87ffb44d) )
ROM_END
// this is a strange, it's based on the fx2 set, but with one of the 68k pair modified (21 bytes changed) and a unique GFX rom?
// changes seem to be related to the trackside advertising banners
/* This is a strange set, it's based on the fx2 set, but with one of the 68k pair modified (21 bytes changed) and a unique GFX ROM
Changes seem to be related to the trackside advertising banners. This was around the same time Super Monaco GP was forced to
remove 'real' advertising banners, so could be related.
The changed graphic ROM has tiles for an additional 'awaiting entry' screen, but it is unclear where they are used,
the same tiles in the fx2 set are blank, assuming that one isn't a bad dump.
Previous dumps of the program / sub CPUs were 0x00 filled instead of 0xff filled in the 2nd half due to a dumping error
*/
ROM_START( fourtraxa )
ROM_REGION( 0x040000, "maincpu", 0 ) /* Master CPU */
// the old dump of this set only differed in having a 0x00 fill in the 2nd half instead of a 0xff fill
ROM_LOAD16_BYTE( "fx4_mp0a.11d", 0x000000, 0x020000, CRC(f147cd6b) SHA1(7cdadd68d55dd8fa9b19cbee1434d9266ae1f4b9) ) // == fx2_mp0.11d
ROM_LOAD16_BYTE( "fx4_mp1a.13d", 0x000001, 0x020000, CRC(d1138c85) SHA1(32bf68ae36f72b84f3c3df28425147b6aaac1edf) )
ROM_REGION( 0x040000, "slave", 0 ) /* Slave CPU */
ROM_LOAD16_BYTE( "fx1_sp0.11k", 0x000000, 0x020000, CRC(41687edd) SHA1(1e79dc9abe5614f836e89b376be1dc70deaac889) )
ROM_LOAD16_BYTE( "fx1_sp1.13k", 0x000001, 0x020000, CRC(dbbae326) SHA1(6743054f7796bd5b1d24fa9cf0095544420b2c76) )
ROM_LOAD16_BYTE( "fx1_sp0.11k", 0x000000, 0x020000, CRC(48548e78) SHA1(b3a9de8682fe63c1c3ecab3e3f9380a884efd4af) ) // same content as fx2 set, different label
ROM_LOAD16_BYTE( "fx1_sp1.13k", 0x000001, 0x020000, CRC(d2861383) SHA1(36be5a8c8a19f35f9a9bd3ef725a83c5e58ccbe0) ) // same content as fx2 set, different label
ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU (Banked) */
ROM_LOAD( "fx1_sd0.7j", 0x000000, 0x020000, CRC(acccc934) SHA1(98f1a823ba7e3f258a73d5780953f9339d438e1a) )

View File

@ -897,7 +897,7 @@ MACHINE_CONFIG_START(polepos_state::polepos)
MCFG_NAMCO_06XX_WRITE_2_CB(WRITE8("52xx", namco_52xx_device, write))
MCFG_NAMCO_06XX_WRITE_3_CB(WRITE8("54xx", namco_54xx_device, write))
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16); // 128V clocks the same as VBLANK
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16); // 128V clocks the same as VBLANK
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* some interleaving */
@ -1006,7 +1006,7 @@ MACHINE_CONFIG_START(polepos_state::topracern)
MCFG_NAMCO_06XX_READ_0_CB(READ8("51xx", namco_51xx_device, read))
MCFG_NAMCO_06XX_WRITE_0_CB(WRITE8("51xx", namco_51xx_device, write))
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16); // 128V clocks the same as VBLANK
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16); // 128V clocks the same as VBLANK
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* some interleaving */

View File

@ -347,7 +347,7 @@ MACHINE_CONFIG_START(rampart_state::rampart)
EEPROM_2816(config, "eeprom").lock_after_write(true);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_rampart)
@ -358,7 +358,7 @@ MACHINE_CONFIG_START(rampart_state::rampart)
MCFG_ATARI_MOTION_OBJECTS_ADD("mob", "screen", rampart_state::s_mob_config)
MCFG_ATARI_MOTION_OBJECTS_GFXDECODE("gfxdecode")
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */

View File

@ -573,12 +573,12 @@ MACHINE_CONFIG_START(sbrkout_state::sbrkout)
// coin counter activity as stated in Atari bulletin B-0054 (which recommends tying it to the
// CPU reset line instead).
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_sbrkout)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/2, 384, 0, 256, 262, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(sbrkout_state, screen_update_sbrkout)
MCFG_SCREEN_PALETTE("palette")

View File

@ -497,10 +497,10 @@ MACHINE_CONFIG_START(sprint2_state::sprint2)
MCFG_DEVICE_PROGRAM_MAP(sprint2_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", sprint2_state, sprint2)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(12.096_MHz_XTAL, 768, 0, 512, 262, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(sprint2_state, screen_update_sprint2)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, sprint2_state, screen_vblank_sprint2))

View File

@ -385,10 +385,10 @@ MACHINE_CONFIG_START(sprint4_state::sprint4)
MCFG_DEVICE_ADD("maincpu", M6502, PIXEL_CLOCK / 8)
MCFG_DEVICE_PROGRAM_MAP(sprint4_cpu_map)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, 0, 256, VTOTAL, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(sprint4_state, screen_update)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, sprint4_state, screen_vblank))

View File

@ -580,9 +580,6 @@ private:
DECLARE_READ32_MEMBER( ram_r );
DECLARE_WRITE32_MEMBER( ram_w );
DECLARE_READ32_MEMBER( ss1_sl0_id );
DECLARE_READ32_MEMBER( ss1_sl1_id );
DECLARE_READ32_MEMBER( ss1_sl2_id );
DECLARE_READ32_MEMBER( ss1_sl3_id );
DECLARE_READ32_MEMBER( timer_r );
DECLARE_WRITE32_MEMBER( timer_w );
DECLARE_READ8_MEMBER( irq_r );
@ -620,7 +617,7 @@ private:
required_device<mb86901_device> m_maincpu;
required_device<mk48t12_device> m_timekpr;
required_device<m48t02_device> m_timekpr;
required_device<z80scc_device> m_scc1;
required_device<z80scc_device> m_scc2;
@ -710,6 +707,9 @@ uint32_t sun4_state::read_insn_data_4c(uint8_t asi, address_space &space, uint32
default:
printf("sun4c: access to memory type not defined in sun4c\n");
m_maincpu->set_mae();
m_buserr[0] = 0x20;
m_buserr[1] = offset << 2;
return 0;
}
}
@ -717,7 +717,7 @@ uint32_t sun4_state::read_insn_data_4c(uint8_t asi, address_space &space, uint32
{
if (!machine().side_effects_disabled())
{
//printf("sun4c: INVALID PTE entry %d %08x accessed! vaddr=%x PC=%x\n", entry, m_pagemap[entry], offset <<2, m_maincpu->pc());
printf("sun4c: INVALID PTE entry %d %08x accessed! vaddr=%x PC=%x\n", entry, m_pagemap[entry], offset <<2, m_maincpu->pc());
m_maincpu->set_mae();
m_buserr[0] |= 0x80; // invalid PTE
m_buserr[0] &= ~0x8000; // read
@ -778,12 +778,15 @@ void sun4_state::write_insn_data_4c(uint8_t asi, address_space &space, uint32_t
return;
default:
printf("sun4c: access to memory type not defined\n");
m_maincpu->set_mae();
m_buserr[0] = 0x8020;
m_buserr[1] = offset << 2;
return;
}
}
else
{
//printf("sun4c: INVALID PTE entry %d %08x accessed! data=%08x vaddr=%x PC=%x\n", entry, m_pagemap[entry], data, offset <<2, m_maincpu->pc());
printf("sun4c: INVALID PTE entry %d %08x accessed! data=%08x vaddr=%x PC=%x\n", entry, m_pagemap[entry], data, offset <<2, m_maincpu->pc());
m_maincpu->set_mae();
m_buserr[0] |= 0x8080; // write cycle, invalid PTE
m_buserr[1] = offset<<2;
@ -1043,7 +1046,7 @@ uint32_t sun4_state::read_insn_data(uint8_t asi, address_space &space, uint32_t
{
if (!machine().side_effects_disabled())
{
//printf("sun4: INVALID PTE entry %d %08x accessed! vaddr=%x PC=%x\n", entry, m_pagemap[entry], offset <<2, m_maincpu->pc());
printf("sun4: INVALID PTE entry %d %08x accessed! vaddr=%x PC=%x\n", entry, m_pagemap[entry], offset <<2, m_maincpu->pc());
m_maincpu->set_mae();
m_buserr[0] |= 0x80; // invalid PTE
m_buserr[0] &= ~0x8000; // read
@ -1583,7 +1586,7 @@ READ8_MEMBER( sun4_state::irq_r )
WRITE8_MEMBER( sun4_state::irq_w )
{
//printf("%02x to IRQ\n", data);
printf("%02x to IRQ\n", data);
m_irq_reg = data;
@ -1594,6 +1597,7 @@ WRITE8_MEMBER( sun4_state::irq_w )
WRITE_LINE_MEMBER( sun4_state::scc1_int )
{
logerror("scc1\n");
m_scc1_int = state;
m_maincpu->set_input_line(SPARC_IRQ12, ((m_scc1_int || m_scc2_int) && (m_irq_reg & 0x01)) ? ASSERT_LINE : CLEAR_LINE);
@ -1601,6 +1605,7 @@ WRITE_LINE_MEMBER( sun4_state::scc1_int )
WRITE_LINE_MEMBER( sun4_state::scc2_int )
{
logerror("scc2\n");
m_scc2_int = state;
m_maincpu->set_input_line(SPARC_IRQ12, ((m_scc1_int || m_scc2_int) && (m_irq_reg & 0x01)) ? ASSERT_LINE : CLEAR_LINE);
@ -1618,6 +1623,7 @@ void sun4_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
start_timer(0);
if ((m_irq_reg & 0x21) == 0x21)
{
logerror("t0\n");
m_maincpu->set_input_line(SPARC_IRQ10, ASSERT_LINE);
//printf("Taking INT10\n");
}
@ -1631,6 +1637,7 @@ void sun4_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
//m_c1_timer->adjust(attotime::never);
if ((m_irq_reg & 0x81) == 0x81)
{
logerror("t1\n");
m_maincpu->set_input_line(SPARC_IRQ14, ASSERT_LINE);
//printf("Taking INT14\n");
}
@ -1658,6 +1665,7 @@ READ32_MEMBER( sun4_state::timer_r )
//printf("Read timer limit 0 (%08x) @ %x, mask %08x\n", ret, m_maincpu->pc(), mem_mask);
m_counter[0] &= ~0x80000000;
m_counter[1] &= ~0x80000000;
logerror("tc0\n");
m_maincpu->set_input_line(SPARC_IRQ10, CLEAR_LINE);
}
@ -1670,6 +1678,7 @@ READ32_MEMBER( sun4_state::timer_r )
//printf("Read timer limit 1 (%08x) @ %x, mask %08x\n", ret, m_maincpu->pc(), mem_mask);
m_counter[2] &= ~0x80000000;
m_counter[3] &= ~0x80000000;
logerror("tc1\n");
m_maincpu->set_input_line(SPARC_IRQ14, CLEAR_LINE);
}
return ret;
@ -1738,6 +1747,7 @@ void sun4_state::dma_check_interrupts()
if (old_irq != m_dma_irq)
{
//logerror("m_dma_irq %d because irq_or_err_pending:%d and irq_enabled:%d\n", m_dma_irq ? 1 : 0, irq_or_err_pending, irq_enabled);
logerror("dma\n");
m_maincpu->set_input_line(SPARC_IRQ3, m_dma_irq ? ASSERT_LINE : CLEAR_LINE);
}
}
@ -1964,32 +1974,6 @@ READ32_MEMBER( sun4_state::ss1_sl0_id )
return 0xfe810101;
}
// indicate 4/60 color video card exists
READ32_MEMBER( sun4_state::ss1_sl3_id )
{
return 0xfe010101;
}
// indicate no card exists
READ32_MEMBER( sun4_state::ss1_sl1_id )
{
m_maincpu->set_mae();
m_buserr[0] |= 0x20; // timeout
m_buserr[0] &= ~0x8000; // read
m_buserr[1] = 0xffa00000;
return 0;
}
// indicate no card exists
READ32_MEMBER( sun4_state::ss1_sl2_id )
{
m_maincpu->set_mae();
m_buserr[0] |= 0x20; // timeout
m_buserr[0] &= ~0x8000; // read
m_buserr[1] = 0xffc00000;
return 0;
}
FLOPPY_FORMATS_MEMBER( sun4_state::floppy_formats )
FLOPPY_PC_FORMAT
FLOPPY_FORMATS_END
@ -1999,11 +1983,17 @@ static void sun_floppies(device_slot_interface &device)
device.option_add("35hd", FLOPPY_35_HD);
}
static void sun4_cdrom(device_t *device)
{
downcast<nscsi_cdrom_device &>(*device).set_block_size(512);
}
static void sun_scsi_devices(device_slot_interface &device)
{
device.option_add("cdrom", NSCSI_CDROM);
device.option_add("harddisk", NSCSI_HARDDISK);
device.option_add_internal("ncr53c90a", NCR53C90A);
device.set_option_machine_config("cdrom", sun4_cdrom);
}
void sun4_state::ncr53c90a(device_t *device)
@ -2023,7 +2013,7 @@ MACHINE_CONFIG_START(sun4_state::sun4)
RAM(config, RAM_TAG).set_default_size("16M").set_default_value(0x00);
MCFG_DEVICE_ADD(TIMEKEEPER_TAG, MK48T12, 0)
M48T02(config, TIMEKEEPER_TAG, 0);
MCFG_N82077AA_ADD(FDC_TAG, n82077aa_device::MODE_PS2)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", sun_floppies, "35hd", sun4_state::floppy_formats)
@ -2083,7 +2073,7 @@ MACHINE_CONFIG_START(sun4_state::sun4c)
RAM(config, RAM_TAG).set_default_size("16M").set_default_value(0x00);
MCFG_DEVICE_ADD(TIMEKEEPER_TAG, MK48T12, 0)
M48T02(config, TIMEKEEPER_TAG, 0);
MCFG_N82077AA_ADD(FDC_TAG, n82077aa_device::MODE_PS2)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", sun_floppies, "35hd", sun4_state::floppy_formats)

View File

@ -254,12 +254,11 @@ READ16_MEMBER(tecmosys_state::unk880000_r)
switch( offset )
{
case 0:
if ( m_screen->vpos() >= 240) return 0;
else return 1;
case 0:
return (m_screen->vpos() >= 240) ? 0 : 1;
default:
return 0;
default:
return 0;
}
}
@ -459,7 +458,7 @@ MACHINE_CONFIG_START(tecmosys_state::tecmosys)
MCFG_DEVICE_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", tecmosys_state, irq1_line_hold)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 400); // guess
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 400); // guess
MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(16'000'000)/2 )
MCFG_DEVICE_PROGRAM_MAP(sound_map)
@ -469,7 +468,7 @@ MACHINE_CONFIG_START(tecmosys_state::tecmosys)
EEPROM_93C46_16BIT(config, "eeprom", eeprom_serial_streaming::ENABLE);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_REFRESH_RATE(57.4458)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(3000))

View File

@ -211,7 +211,7 @@ MACHINE_CONFIG_START(toobin_state::toobin)
EEPROM_2804(config, "eeprom").lock_after_write(true);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 4, toobin_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 128,64)
@ -219,7 +219,7 @@ MACHINE_CONFIG_START(toobin_state::toobin)
MCFG_ATARI_MOTION_OBJECTS_ADD("mob", "screen", toobin_state::s_mob_config)
MCFG_ATARI_MOTION_OBJECTS_GFXDECODE("gfxdecode")
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/2, 640, 0, 512, 416, 0, 384)
MCFG_SCREEN_UPDATE_DRIVER(toobin_state, screen_update)

View File

@ -302,10 +302,10 @@ MACHINE_CONFIG_START(ultratnk_state::ultratnk)
latch.q_out_cb<6>().set("discrete", FUNC(discrete_device::write_line<ULTRATNK_FIRE_EN_2>));
latch.q_out_cb<7>().set("discrete", FUNC(discrete_device::write_line<ULTRATNK_FIRE_EN_1>));
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, 0, 256, VTOTAL, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(ultratnk_state, screen_update)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ultratnk_state, screen_vblank))

View File

@ -4,20 +4,23 @@
2018-09-15
Unknown b&w gambling game.
Video 21 blackjack game. Thanks to hap who figured out the inputs and the name of the game.
VIDEO-GAMES - LICH/GERMANY 1017a
NEC D8080AFC (i8080), unknown xtal, bank of 7 dips. 10x 4-bit proms, type F93453 (=82S137)
Video Ram = 7 x 2102 (bit 7 omitted). Main Ram = 2x MCM145101 (=M5101L).
The game has sound (there's a LM380N visible), looks like there's a bunch of chips
The game has sound (there's a LM380N visible), looks like there's a bunch of TTL chips
involved, and a 555.
To Do:
- Sound
- Inputs / the correct dip settings
- CPU clock
- Name of the machine
- unknown status bits? eg. hopper
- color overlay as seen on flyer upright cabinet
When booted, press W to get it going.
*******************************************************************************************/
@ -27,17 +30,17 @@ To Do:
#include "emupal.h"
class videolich_state : public driver_device
class video21_state : public driver_device
{
public:
videolich_state(const machine_config &mconfig, device_type type, const char *tag)
video21_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this,"maincpu")
, m_p_videoram(*this, "videoram")
, m_p_chargen(*this, "chargen")
{ }
void videolich(machine_config &config);
void video21(machine_config &config);
private:
@ -50,7 +53,7 @@ private:
};
uint32_t videolich_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t video21_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint8_t y,ra,chr,gfx;
uint16_t sy=0,ma=0,x;
@ -82,78 +85,84 @@ uint32_t videolich_state::screen_update(screen_device &screen, bitmap_ind16 &bit
return 0;
}
void videolich_state::mem_map(address_map &map) {
void video21_state::mem_map(address_map &map) {
map(0x0000,0x0fff).rom().mirror(0x3000);
map(0xe000,0xe3ff).ram().share("videoram");
map(0xff00,0xffff).ram();
}
void videolich_state::io_map(address_map &map) {
void video21_state::io_map(address_map &map) {
map(0x02,0x02).nopw(); // lots of unknown writes, might be some kind of dac
map(0x04,0x04); //.w unknown write
map(0x08,0x08); //.w unknown write
map(0x41,0x41).portr("IN41");
map(0x42,0x42).portr("IN42");
map(0x44,0x44); //.r in the code, but was never reached
map(0x44,0x44).portr("IN44");
}
static INPUT_PORTS_START( videolich )
PORT_START("IN41")
static INPUT_PORTS_START( video21 )
PORT_START("IN41") // dips and tilt
PORT_DIPNAME( 0x01, 0x01, "41b0" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "41b1" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "41b2" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "41b3" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "41b4" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "41b5" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "41b6" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "41b7" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_TILT )
PORT_START("IN42")
PORT_DIPNAME( 0x01, 0x01, "42b0" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "42b1" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "42b2" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "42b3" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "42b4" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, "42b5" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Stay")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Payout")
PORT_DIPNAME( 0x40, 0x40, "42b6" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "42b7" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL )
PORT_START("IN44")
PORT_DIPNAME( 0x01, 0x01, "44b0" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "44b1" )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "44b2" )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
PORT_DIPNAME( 0x20, 0x20, "44b5" )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "44b6" )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "44b7" )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static const gfx_layout videolich_charlayout =
static const gfx_layout video21_charlayout =
{
8, 8, // 8 x 8 characters
128, // 128 characters, but only the first 76 look useful
@ -166,13 +175,13 @@ static const gfx_layout videolich_charlayout =
8*8 /* every char takes 8 bytes */
};
static GFXDECODE_START( gfx_videolich )
GFXDECODE_ENTRY( "chargen", 0x0000, videolich_charlayout, 0, 1 )
static GFXDECODE_START( gfx_video21 )
GFXDECODE_ENTRY( "chargen", 0x0000, video21_charlayout, 0, 1 )
GFXDECODE_END
MACHINE_CONFIG_START( videolich_state::videolich )
MACHINE_CONFIG_START( video21_state::video21 )
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", I8080, 20.79_MHz_XTAL / 8) // crystal confirmed but divisor unknown
MCFG_DEVICE_ADD("maincpu", I8080A, 20.79_MHz_XTAL / 16) // crystal confirmed but divisor unknown
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
@ -180,12 +189,12 @@ MACHINE_CONFIG_START( videolich_state::videolich )
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::white())
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(250))
MCFG_SCREEN_UPDATE_DRIVER(videolich_state, screen_update)
MCFG_SCREEN_UPDATE_DRIVER(video21_state, screen_update)
MCFG_SCREEN_SIZE(32*8, 28*8)
MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 28*8-1)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_videolich)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_video21)
MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
@ -193,7 +202,7 @@ MACHINE_CONFIG_END
ROM_START( videolich )
ROM_START( video21 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD_NIB_HIGH( "lich_prg.02", 0x0000, 0x0400, CRC(05585e39) SHA1(7eefb5d63b4499a303ecdcad6af5df9fe9c89205) )
ROM_LOAD_NIB_LOW ( "lich_prg.03", 0x0000, 0x0400, CRC(b9134e96) SHA1(e7a8ff71f735add608d3c9dcc287ca37414debcb) )
@ -209,5 +218,5 @@ ROM_START( videolich )
ROM_LOAD_NIB_LOW ( "lich_gfx.43", 0x0000, 0x0400, CRC(0ecb0aab) SHA1(7f3f1b93a5d38828ae3e97e5f8ef1a6a96dc798b) )
ROM_END
GAME(19??, videolich, 0, videolich, videolich, videolich_state, empty_init, ROT0, "Video Games GmbH", "unnamed gambling game", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1980, video21, 0, video21, video21, video21_state, empty_init, ROT0, "Video Games GmbH", "Video 21", MACHINE_NO_SOUND)

View File

@ -636,7 +636,7 @@ WRITE_LINE_MEMBER(vpoker_state::ptm_irq)
MACHINE_CONFIG_START(vpoker_state::vpoker)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu",M6809,XTAL(4'000'000))
MCFG_DEVICE_ADD("maincpu", MC6809, XTAL(4'000'000))
MCFG_DEVICE_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", vpoker_state, irq0_line_hold) //irq0 valid too
@ -655,7 +655,7 @@ MACHINE_CONFIG_START(vpoker_state::vpoker)
MCFG_PALETTE_ADD_3BIT_GBR("palette")
/* 6840 PTM */
ptm6840_device &ptm(PTM6840(config, "6840ptm", XTAL(4'000'000)));
ptm6840_device &ptm(PTM6840(config, "6840ptm", XTAL(4'000'000) / 4));
ptm.set_external_clocks(0, 0, 0);
ptm.irq_callback().set(FUNC(vpoker_state::ptm_irq));

View File

@ -38214,8 +38214,8 @@ victory // (c) 1982
@source:vidbrain.cpp
vidbrain //
@source:videolich.cpp
videolich // Videogames gmbh (unnamed)
@source:video21.cpp
video21 // Videogames gmbh 1980
@source:videopin.cpp
solarwar // 036154-036169 1979 [6502]