Cleanups and version bump

This commit is contained in:
Miodrag Milanovic 2015-09-30 08:29:01 +02:00
parent 9fd990dea8
commit 8e4ced4b53
117 changed files with 2730 additions and 2747 deletions

View File

@ -3434,7 +3434,7 @@ But how do later protos fit with this theory? Maybe the later protos were from t
<info name="serial" value="HPC-6214"/> <info name="serial" value="HPC-6214"/>
<info name="release" value="200306xx"/> <info name="release" value="200306xx"/>
<!-- * ピーターパン ネバーランドへ いこう!<10th> - Peter Pan - Neverland e Ikou! ~10th Anniversary Edition~ (Sega Toys - 200306xx - HPC-6124) [reprint HPC-6047] <!-- * ピーターパン ネバーランドへ いこう!<10th> - Peter Pan - Neverland e Ikou! ~10th Anniversary Edition~ (Sega Toys - 200306xx - HPC-6124) [reprint HPC-6047]
malformed token? Used normal Peter Pan alt_title for now --> malformed token? Used normal Peter Pan alt_title for now -->
<info name="alt_title" value="ピーターパン ネバーランドへ いこう!"/> <info name="alt_title" value="ピーターパン ネバーランドへ いこう!"/>
<part name="cart" interface="pico_cart"> <part name="cart" interface="pico_cart">
<feature name="pcb" value="171-7090A" /> <feature name="pcb" value="171-7090A" />

View File

@ -218,7 +218,7 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="mazeptrl"> <software name="mazeptrl">
<description>Maze Patrol (Jpn)</description> <description>Maze Patrol (Jpn)</description>
<year>1983</year> <year>1983</year>
@ -270,7 +270,7 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="mysteryg"> <software name="mysteryg">
<description>Mystery Gold (Jpn)</description> <description>Mystery Gold (Jpn)</description>
<year>1983</year> <year>1983</year>
@ -283,7 +283,7 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="mrdo"> <software name="mrdo">
<description>Mr. Do! (Jpn)</description> <description>Mr. Do! (Jpn)</description>
<year>1983</year> <year>1983</year>

View File

@ -25,7 +25,7 @@ Titles, publishers and release dates taken from:
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="blckonyx" supported="no"> <software name="blckonyx" supported="no">
<description>The Black Onyx</description> <description>The Black Onyx</description>
<year>1985</year> <year>1985</year>
@ -90,7 +90,7 @@ Titles, publishers and release dates taken from:
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="cball"> <software name="cball">
<description>Cannon Ball</description> <description>Cannon Ball</description>
<year>1983</year> <year>1983</year>
@ -322,7 +322,7 @@ Titles, publishers and release dates taken from:
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="machgjoe"> <software name="machgjoe">
<description>Ginkou Goutou - Machinegun Joe vs. the Mafia</description> <description>Ginkou Goutou - Machinegun Joe vs. the Mafia</description>
<year>1983</year> <year>1983</year>

View File

@ -17,15 +17,15 @@
// ======================> nec_p72_t // ======================> nec_p72_t
class nec_p72_t : public device_t, class nec_p72_t : public device_t,
public device_centronics_peripheral_interface public device_centronics_peripheral_interface
{ {
public: public:
// construction/destruction // construction/destruction
nec_p72_t(const machine_config &mconfig, const char *tag, nec_p72_t(const machine_config &mconfig, const char *tag,
device_t *owner, UINT32 clock); device_t *owner, UINT32 clock);
nec_p72_t(const machine_config &mconfig, device_type type, nec_p72_t(const machine_config &mconfig, device_type type,
const char *name, const char *tag, device_t *owner, const char *name, const char *tag, device_t *owner,
UINT32 clock, const char *shortname, const char *source); UINT32 clock, const char *shortname, const char *source);
// optional information overrides // optional information overrides
virtual const rom_entry *device_rom_region() const; virtual const rom_entry *device_rom_region() const;

View File

@ -33,7 +33,7 @@
* GND 49 50 CLOCK * GND 49 50 CLOCK
* *
* Aleste 520EX expansion port is 62-pin. Same as the CPC above, except that pin 40 is not connected, plus the following: * Aleste 520EX expansion port is 62-pin. Same as the CPC above, except that pin 40 is not connected, plus the following:
* *
* MAP14 A26 B26 MAP15 * MAP14 A26 B26 MAP15
* MAP16 A27 B27 MAP17 * MAP16 A27 B27 MAP17
* MAP18 A28 B28 MAPBLK * MAP18 A28 B28 MAPBLK

View File

@ -6,7 +6,7 @@
* Magic Sound Board for the Aleste 520EX * Magic Sound Board for the Aleste 520EX
* *
*/ */
#include "emu.h" #include "emu.h"
#include "magicsound.h" #include "magicsound.h"
#include "includes/amstrad.h" #include "includes/amstrad.h"
@ -22,7 +22,7 @@ const device_type AL_MAGICSOUND = &device_creator<al_magicsound_device>;
static MACHINE_CONFIG_FRAGMENT( al_magicsound ) static MACHINE_CONFIG_FRAGMENT( al_magicsound )
MCFG_DEVICE_ADD( "dmac", AM9517A, XTAL_4MHz ) // CLK from expansion port MCFG_DEVICE_ADD( "dmac", AM9517A, XTAL_4MHz ) // CLK from expansion port
// According to the schematics, the TC pin (EOP on western chips) is connected to NMI on the expansion port. // According to the schematics, the TC pin (EOP on western chips) is connected to NMI on the expansion port.
// NMIs seem to occur too quickly when this is active, so either EOP is not triggered at the correct time, or // NMIs seem to occur too quickly when this is active, so either EOP is not triggered at the correct time, or
// the K1810WT37 is different to the i8237/AM9517A // the K1810WT37 is different to the i8237/AM9517A
//MCFG_I8237_OUT_EOP_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w)) // MCFG_DEVCB_INVERT //MCFG_I8237_OUT_EOP_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w)) // MCFG_DEVCB_INVERT
MCFG_I8237_OUT_HREQ_CB(DEVWRITELINE("dmac", am9517a_device, hack_w)) MCFG_I8237_OUT_HREQ_CB(DEVWRITELINE("dmac", am9517a_device, hack_w))
@ -56,7 +56,7 @@ static MACHINE_CONFIG_FRAGMENT( al_magicsound )
MCFG_PIT8253_CLK2(XTAL_4MHz) MCFG_PIT8253_CLK2(XTAL_4MHz)
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_DAC_ADD("dac1") MCFG_DAC_ADD("dac1")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
// no pass-through(?) // no pass-through(?)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -94,9 +94,9 @@ void al_magicsound_device::device_start()
space.install_write_handler(0xf9d0,0xf9df,0,0,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); space.install_write_handler(0xf9d0,0xf9df,0,0,write8_delegate(FUNC(al_magicsound_device::timer_w),this));
space.install_write_handler(0xfad0,0xfadf,0,0,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); space.install_write_handler(0xfad0,0xfadf,0,0,write8_delegate(FUNC(al_magicsound_device::volume_w),this));
space.install_write_handler(0xfbd0,0xfbdf,0,0,write8_delegate(FUNC(al_magicsound_device::mapper_w),this)); space.install_write_handler(0xfbd0,0xfbdf,0,0,write8_delegate(FUNC(al_magicsound_device::mapper_w),this));
m_ramptr = machine().device<ram_device>(":" RAM_TAG); m_ramptr = machine().device<ram_device>(":" RAM_TAG);
for(int x=0;x<4;x++) for(int x=0;x<4;x++)
{ {
save_item(NAME(m_output[x]),x); save_item(NAME(m_output[x]),x);
@ -167,7 +167,7 @@ READ8_MEMBER(al_magicsound_device::dma_read_byte)
{ {
UINT8 ret = 0xff; UINT8 ret = 0xff;
UINT8 page = (offset & 0xc000) >> 14; UINT8 page = (offset & 0xc000) >> 14;
if(m_current_channel != -1) if(m_current_channel != -1)
ret = m_ramptr->read(m_page[m_current_channel][page] + (offset & 0x3fff)); ret = m_ramptr->read(m_page[m_current_channel][page] + (offset & 0x3fff));
return ret; return ret;
@ -187,4 +187,3 @@ void al_magicsound_device::set_timer_gate(bool state)
m_timer2->write_gate1(state); m_timer2->write_gate1(state);
m_timer2->write_gate2(state); m_timer2->write_gate2(state);
} }

View File

@ -6,7 +6,7 @@
* Magic Sound Board for the Aleste 520EX * Magic Sound Board for the Aleste 520EX
* *
* DMA-based 4-channel sound board * DMA-based 4-channel sound board
* *
* 1x K1810WT37 DMA controller (i8237/AM9517A) * 1x K1810WT37 DMA controller (i8237/AM9517A)
* 2x K1810WT54 programmable timers (i8254) * 2x K1810WT54 programmable timers (i8254)
* 1x K1118PA1 DAC (MC10318) * 1x K1118PA1 DAC (MC10318)
@ -72,9 +72,9 @@ private:
required_device<am9517a_device> m_dmac; required_device<am9517a_device> m_dmac;
required_device<pit8254_device> m_timer1; required_device<pit8254_device> m_timer1;
required_device<pit8254_device> m_timer2; required_device<pit8254_device> m_timer2;
void set_timer_gate(bool state); void set_timer_gate(bool state);
UINT8 m_volume[4]; UINT8 m_volume[4];
UINT32 m_page[4][4]; UINT32 m_page[4][4];
UINT8 m_output[4]; UINT8 m_output[4];

View File

@ -77,9 +77,9 @@ ROM_END
static INPUT_PORTS_START( pgc ) static INPUT_PORTS_START( pgc )
PORT_START("DSW") PORT_START("DSW")
/* /*
PORT_DIPNAME( 0x01, 0x00, "CGA emulator") PORT_DIPNAME( 0x01, 0x00, "CGA emulator")
PORT_DIPSETTING( 0x00, DEF_STR(No) ) PORT_DIPSETTING( 0x00, DEF_STR(No) )
PORT_DIPSETTING( 0x01, DEF_STR(Yes) ) PORT_DIPSETTING( 0x01, DEF_STR(Yes) )
*/ */
PORT_DIPNAME( 0x02, 0x00, "Communication area") PORT_DIPNAME( 0x02, 0x00, "Communication area")
PORT_DIPSETTING( 0x00, "C6000" ) PORT_DIPSETTING( 0x00, "C6000" )
@ -88,19 +88,19 @@ INPUT_PORTS_END
/* /*
write only write only
30000 LUT WR O L 30000 LUT WR O L
30001 LUT WR I L 30001 LUT WR I L
32000 MODE WT L 32000 MODE WT L
32001 NIBBLE WT L 32001 NIBBLE WT L
3200A ?? 3200A ??
34000 FUNCTION WT L 34000 FUNCTION WT L
34001 STARTADD WT L 34001 STARTADD WT L
36001 CURSOR WT L 36001 CURSOR WT L
read only read only
38000 LUT RD O L 38000 LUT RD O L
38001 LUT RD I L 38001 LUT RD I L
3C001 INIT L/INIT H 3C001 INIT L/INIT H
*/ */
static ADDRESS_MAP_START( pgc_map, AS_PROGRAM, 8, isa8_pgc_device ) static ADDRESS_MAP_START( pgc_map, AS_PROGRAM, 8, isa8_pgc_device )
@ -108,10 +108,10 @@ static ADDRESS_MAP_START( pgc_map, AS_PROGRAM, 8, isa8_pgc_device )
AM_RANGE(0x00000, 0x07fff) AM_ROM AM_RANGE(0x00000, 0x07fff) AM_ROM
AM_RANGE(0x08000, 0x0ffff) AM_ROM AM_REGION("maincpu", 0x8000) AM_RANGE(0x08000, 0x0ffff) AM_ROM AM_REGION("maincpu", 0x8000)
AM_RANGE(0x10000, 0x1001f) AM_READWRITE(stateparam_r, stateparam_w) AM_RANGE(0x10000, 0x1001f) AM_READWRITE(stateparam_r, stateparam_w)
// AM_RANGE(0x18000, 0x18fff) AM_RAM // ?? // AM_RANGE(0x18000, 0x18fff) AM_RAM // ??
AM_RANGE(0x28000, 0x287ff) AM_RAM AM_REGION("commarea", 0) AM_MIRROR(0x800) AM_RANGE(0x28000, 0x287ff) AM_RAM AM_REGION("commarea", 0) AM_MIRROR(0x800)
AM_RANGE(0x3c000, 0x3c001) AM_READ(init_r) AM_RANGE(0x3c000, 0x3c001) AM_READ(init_r)
// AM_RANGE(0x3e000, 0x3efff) AM_RAM // ?? // AM_RANGE(0x3e000, 0x3efff) AM_RAM // ??
AM_RANGE(0xf8000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x8000) AM_RANGE(0xf8000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x8000)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -311,7 +311,7 @@ WRITE8_MEMBER( isa8_pgc_device::lut_w ) {
if (offset & 1) { if (offset & 1) {
m_lut[o + 2] = (data & 15) << 4; m_lut[o + 2] = (data & 15) << 4;
m_palette->set_pen_color( offset >> 1, m_lut[o], m_lut[o + 1], m_lut[o + 2] ); m_palette->set_pen_color( offset >> 1, m_lut[o], m_lut[o + 1], m_lut[o + 2] );
DBG_LOG(1,"lut",("W @ %02X <- %d %d %d\n", DBG_LOG(1,"lut",("W @ %02X <- %d %d %d\n",
offset >> 1, m_lut[o], m_lut[o + 1], m_lut[o + 2] )); offset >> 1, m_lut[o], m_lut[o + 1], m_lut[o + 2] ));
} else { } else {
m_lut[o ] = data & 0xf0; m_lut[o ] = data & 0xf0;
@ -330,7 +330,7 @@ READ8_MEMBER( isa8_pgc_device::init_r ) {
DBG_LOG(1,"INIT",("mapping LUT\n")); DBG_LOG(1,"INIT",("mapping LUT\n"));
space.install_write_handler(0xf8400, 0xf85ff, space.install_write_handler(0xf8400, 0xf85ff,
write8_delegate(FUNC(isa8_pgc_device::lut_w), this)); write8_delegate(FUNC(isa8_pgc_device::lut_w), this));
return 0; // XXX ignored return 0; // XXX ignored
} }
@ -341,7 +341,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(isa8_pgc_device::scanline_callback)
UINT8 *v; UINT8 *v;
// XXX hpos shifts every frame -- fix // XXX hpos shifts every frame -- fix
if (y == 0) DBG_LOG(2,"scanline_cb", if (y == 0) DBG_LOG(2,"scanline_cb",
("frame %d x %.4d y %.3d\n", ("frame %d x %.4d y %.3d\n",
(int) m_screen->frame_number(), m_screen->hpos(), y)); (int) m_screen->frame_number(), m_screen->hpos(), y));

View File

@ -2,7 +2,7 @@
// copyright-holders:Barry Rodewald // copyright-holders:Barry Rodewald
/* /*
VIA VT82C505 ISA/VL PCI bridge VIA VT82C505 ISA/VL PCI bridge
*/ */
@ -27,7 +27,7 @@ vt82c505_device::vt82c505_device(const machine_config &mconfig, const char *tag,
UINT32 vt82c505_device::pci_read(pci_bus_device *pcibus, int function, int offset, UINT32 mem_mask) UINT32 vt82c505_device::pci_read(pci_bus_device *pcibus, int function, int offset, UINT32 mem_mask)
{ {
UINT32 result = 0; UINT32 result = 0;
if (function != 0) if (function != 0)
return result; return result;
@ -94,4 +94,3 @@ void vt82c505_device::device_start()
void vt82c505_device::device_reset() void vt82c505_device::device_reset()
{ {
} }

View File

@ -2,7 +2,7 @@
// copyright-holders:Barry Rodewald // copyright-holders:Barry Rodewald
/* /*
VIA VT82C505 PCI bridge VIA VT82C505 PCI bridge
*/ */

View File

@ -416,7 +416,7 @@ WRITE8_MEMBER( iskr_1030_keyboard_device::ram_w )
READ8_MEMBER( iskr_1030_keyboard_device::ram_r ) READ8_MEMBER( iskr_1030_keyboard_device::ram_r )
{ {
DBG_LOG(2,0,( "%s: ram_r[%02x] = %02x\n", tag(), offset, m_ram[offset])); DBG_LOG(2,0,( "%s: ram_r[%02x] = %02x\n", tag(), offset, m_ram[offset]));
return m_ram[offset]; return m_ram[offset];
} }

View File

@ -34872,5 +34872,3 @@ void m68ki_build_opcode_table(void)
/* ======================================================================== */ /* ======================================================================== */
/* ============================== END OF FILE ============================= */ /* ============================== END OF FILE ============================= */
/* ======================================================================== */ /* ======================================================================== */

View File

@ -2845,7 +2845,7 @@ void mips3_device::execute_run()
case 0x2e: /* SWR */ (this->*m_swr)(op); break; case 0x2e: /* SWR */ (this->*m_swr)(op); break;
case 0x2f: /* CACHE */ /* effective no-op */ break; case 0x2f: /* CACHE */ /* effective no-op */ break;
case 0x30: /* LL */ if (RWORD(SIMMVAL+RSVAL32, &temp) && RTREG) RTVAL64 = (UINT32)temp; m_ll_value = RTVAL32; break; case 0x30: /* LL */ if (RWORD(SIMMVAL+RSVAL32, &temp) && RTREG) RTVAL64 = (UINT32)temp; m_ll_value = RTVAL32; break;
case 0x31: /* LWC1 */ case 0x31: /* LWC1 */
if (!(SR & SR_COP1)) if (!(SR & SR_COP1))
{ {
m_badcop_value = 1; m_badcop_value = 1;
@ -2855,7 +2855,7 @@ void mips3_device::execute_run()
case 0x32: /* LWC2 */ if (RWORD(SIMMVAL+RSVAL32, &temp)) set_cop2_reg(RTREG, temp); break; case 0x32: /* LWC2 */ if (RWORD(SIMMVAL+RSVAL32, &temp)) set_cop2_reg(RTREG, temp); break;
case 0x33: /* PREF */ /* effective no-op */ break; case 0x33: /* PREF */ /* effective no-op */ break;
case 0x34: /* LLD */ if (RDOUBLE(SIMMVAL+RSVAL32, &temp64) && RTREG) RTVAL64 = temp64; m_lld_value = temp64; break; case 0x34: /* LLD */ if (RDOUBLE(SIMMVAL+RSVAL32, &temp64) && RTREG) RTVAL64 = temp64; m_lld_value = temp64; break;
case 0x35: /* LDC1 */ case 0x35: /* LDC1 */
if (!(SR & SR_COP1)) if (!(SR & SR_COP1))
{ {
m_badcop_value = 1; m_badcop_value = 1;
@ -2877,7 +2877,7 @@ void mips3_device::execute_run()
} }
} }
break; break;
case 0x39: /* SWC1 */ case 0x39: /* SWC1 */
if (!(SR & SR_COP1)) if (!(SR & SR_COP1))
{ {
m_badcop_value = 1; m_badcop_value = 1;

View File

@ -10,10 +10,10 @@
/*static const char *const reg[32] = /*static const char *const reg[32] =
{ {
"0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
"r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31" "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
}; };
*/ */

View File

@ -365,7 +365,7 @@ void t11_device::device_reset()
void k1801vm2_device::device_reset() void k1801vm2_device::device_reset()
{ {
t11_device::device_reset(); t11_device::device_reset();
PC = RWORD(c_initial_mode); PC = RWORD(c_initial_mode);
PSW = RWORD(c_initial_mode+2); PSW = RWORD(c_initial_mode+2);
} }

View File

@ -27,21 +27,21 @@ const device_type PIT68230 = &device_creator<pit68230_device>;
// pit68230_device - constructors // pit68230_device - constructors
//------------------------------------------------- //-------------------------------------------------
pit68230_device::pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) pit68230_device::pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source)
: device_t (mconfig, type, name, tag, owner, clock, shortname, source), : device_t (mconfig, type, name, tag, owner, clock, shortname, source),
device_execute_interface (mconfig, *this) device_execute_interface (mconfig, *this)
, m_icount (0) , m_icount (0)
, m_write_pa (*this) , m_write_pa (*this)
, m_write_h2 (*this) , m_write_h2 (*this)
{ {
} }
pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t (mconfig, PIT68230, "PIT68230", tag, owner, clock, "pit68230", __FILE__), : device_t (mconfig, PIT68230, "PIT68230", tag, owner, clock, "pit68230", __FILE__),
device_execute_interface (mconfig, *this) device_execute_interface (mconfig, *this)
, m_icount (0) , m_icount (0)
, m_write_pa (*this) , m_write_pa (*this)
, m_write_h2 (*this) , m_write_h2 (*this)
{ {
} }
@ -50,12 +50,12 @@ pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag,
//------------------------------------------------- //-------------------------------------------------
void pit68230_device::device_start () void pit68230_device::device_start ()
{ {
LOG (logerror ("PIT68230 device started\n")); LOG (logerror ("PIT68230 device started\n"));
m_icountptr = &m_icount; m_icountptr = &m_icount;
// resolve callbacks // resolve callbacks
m_write_pa.resolve_safe (); m_write_pa.resolve_safe ();
m_write_h2.resolve_safe (); m_write_h2.resolve_safe ();
} }
//------------------------------------------------- //-------------------------------------------------
@ -63,17 +63,17 @@ void pit68230_device::device_start ()
//------------------------------------------------- //-------------------------------------------------
void pit68230_device::device_reset () void pit68230_device::device_reset ()
{ {
LOG (logerror ("PIT68230 device reseted\n")); LOG (logerror ("PIT68230 device reseted\n"));
m_pgcr = 0; m_pgcr = 0;
m_psrr = 0; m_psrr = 0;
m_paddr = 0; m_paddr = 0;
m_pbddr = 0; m_pbddr = 0;
m_pcddr = 0; m_pcddr = 0;
m_pacr = 0; m_write_h2 (m_pacr); m_pacr = 0; m_write_h2 (m_pacr);
m_pbcr = 0; m_pbcr = 0;
m_padr = 0; m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR m_padr = 0; m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR
m_pbdr = 0; m_pbdr = 0;
m_psr = 0; m_psr = 0;
} }
//------------------------------------------------- //-------------------------------------------------
@ -85,16 +85,16 @@ void pit68230_device::device_timer (emu_timer &timer, device_timer_id id, INT32
void pit68230_device::h1_set (UINT8 state) void pit68230_device::h1_set (UINT8 state)
{ {
LOG (logerror ("h1_set %d @ m_psr %2x => ", state, m_psr)); LOG (logerror ("h1_set %d @ m_psr %2x => ", state, m_psr));
if (state) m_psr |= 1; else m_psr &= ~1; if (state) m_psr |= 1; else m_psr &= ~1;
LOG (logerror ("%02x %lld\n", m_psr, machine ().firstcpu->total_cycles ())); LOG (logerror ("%02x %lld\n", m_psr, machine ().firstcpu->total_cycles ()));
} }
void pit68230_device::portb_setbit (UINT8 bit, UINT8 state) void pit68230_device::portb_setbit (UINT8 bit, UINT8 state)
{ {
LOG (logerror ("portb_setbit %d/%d @ m_pbdr %2x => ", bit, state, m_pbdr)); LOG (logerror ("portb_setbit %d/%d @ m_pbdr %2x => ", bit, state, m_pbdr));
if (state) m_pbdr |= (1 << bit); else m_pbdr &= ~(1 << bit); if (state) m_pbdr |= (1 << bit); else m_pbdr &= ~(1 << bit);
LOG (logerror ("%02x %lld\n", m_pbdr, machine ().firstcpu->total_cycles ())); LOG (logerror ("%02x %lld\n", m_pbdr, machine ().firstcpu->total_cycles ()));
} }
//------------------------------------------------- //-------------------------------------------------
@ -102,11 +102,11 @@ void pit68230_device::portb_setbit (UINT8 bit, UINT8 state)
//------------------------------------------------- //-------------------------------------------------
void pit68230_device::execute_run () void pit68230_device::execute_run ()
{ {
do { do {
synchronize (); synchronize ();
m_icount--; m_icount--;
} while (m_icount > 0); } while (m_icount > 0);
} }
LOG (static INT32 ow_cnt = 0); LOG (static INT32 ow_cnt = 0);
@ -114,75 +114,75 @@ LOG (static INT32 ow_data = 0);
LOG (static INT32 ow_ofs = 0); LOG (static INT32 ow_ofs = 0);
WRITE8_MEMBER (pit68230_device::write){ WRITE8_MEMBER (pit68230_device::write){
switch (offset) { switch (offset) {
case PIT_68230_PGCR: case PIT_68230_PGCR:
m_pgcr = data; m_pgcr = data;
break; break;
case PIT_68230_PSRR: case PIT_68230_PSRR:
m_psrr = data; m_psrr = data;
break; break;
case PIT_68230_PADDR: case PIT_68230_PADDR:
m_paddr = data; m_paddr = data;
break; break;
case PIT_68230_PBDDR: case PIT_68230_PBDDR:
m_pbddr = data; m_pbddr = data;
break; break;
case PIT_68230_PCDDR: case PIT_68230_PCDDR:
m_pcddr = data; m_pcddr = data;
break; break;
case PIT_68230_PACR: case PIT_68230_PACR:
m_pacr = data; m_pacr = data;
// callbacks // callbacks
/*PACR in Mode 0 /*PACR in Mode 0
* 5 43 H2 Control in Submode 00 && 01 * 5 43 H2 Control in Submode 00 && 01
* ------------------------------------ * ------------------------------------
* 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge.
* 1 00 Output pin - negated, H2S is always clear. * 1 00 Output pin - negated, H2S is always clear.
* 1 01 Output pin - asserted, H2S is always clear. * 1 01 Output pin - asserted, H2S is always clear.
* 1 10 Output pin - interlocked input handshake protocol, H2S is always clear. * 1 10 Output pin - interlocked input handshake protocol, H2S is always clear.
* 1 11 Output pin - pulsed input handshake protocol, H2S is always clear. * 1 11 Output pin - pulsed input handshake protocol, H2S is always clear.
* *
* 5 43 H2 Control in Submode 1x * 5 43 H2 Control in Submode 1x
* ------------------------------------ * ------------------------------------
* 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge.
* 1 X0 Output pin - negated, H2S is always cleared. * 1 X0 Output pin - negated, H2S is always cleared.
* 1 X1 Output pin - asserted, H2S is always cleared. * 1 X1 Output pin - asserted, H2S is always cleared.
*/ */
m_write_h2 (m_pacr & 0x08 ? 1 : 0); // TODO: Check mode and submodes m_write_h2 (m_pacr & 0x08 ? 1 : 0); // TODO: Check mode and submodes
break; break;
case PIT_68230_PBCR: case PIT_68230_PBCR:
m_pbcr = data; m_pbcr = data;
break; break;
case PIT_68230_PADR: case PIT_68230_PADR:
m_padr = data; m_padr = data;
// callbacks // callbacks
m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR
break; break;
case PIT_68230_PSR: case PIT_68230_PSR:
m_psr = data; m_psr = data;
break; break;
default: default:
LOG (logerror ("unhandled register %02x", offset)); LOG (logerror ("unhandled register %02x", offset));
} }
LOG (if (offset != ow_ofs || data != ow_data || ow_cnt >= 1000) { LOG (if (offset != ow_ofs || data != ow_data || ow_cnt >= 1000) {
logerror ("\npit68230_device::write: previous identical operation performed %02x times\n", ow_cnt); logerror ("\npit68230_device::write: previous identical operation performed %02x times\n", ow_cnt);
ow_cnt = 0; ow_cnt = 0;
ow_data = data; ow_data = data;
ow_ofs = offset; ow_ofs = offset;
logerror ("pit68230_device::write: offset=%02x data=%02x %lld\n", ow_ofs, ow_data, machine ().firstcpu->total_cycles ()); logerror ("pit68230_device::write: offset=%02x data=%02x %lld\n", ow_ofs, ow_data, machine ().firstcpu->total_cycles ());
} }
else else
ow_cnt++; ) ow_cnt++; )
} }
LOG (static INT32 or_cnt = 0); LOG (static INT32 or_cnt = 0);
@ -190,76 +190,76 @@ LOG (static INT32 or_data = 0);
LOG (static INT32 or_ofs = 0); LOG (static INT32 or_ofs = 0);
READ8_MEMBER (pit68230_device::read){ READ8_MEMBER (pit68230_device::read){
UINT8 data = 0; UINT8 data = 0;
switch (offset) { switch (offset) {
case PIT_68230_PGCR: case PIT_68230_PGCR:
data = m_pgcr; data = m_pgcr;
break; break;
case PIT_68230_PSRR: case PIT_68230_PSRR:
data = m_psrr; data = m_psrr;
break; break;
case PIT_68230_PADDR: case PIT_68230_PADDR:
data = m_paddr; data = m_paddr;
break; break;
case PIT_68230_PBDDR: case PIT_68230_PBDDR:
data = m_pbddr; data = m_pbddr;
break; break;
case PIT_68230_PCDDR: case PIT_68230_PCDDR:
data = m_pcddr; data = m_pcddr;
break; break;
case PIT_68230_PACR: case PIT_68230_PACR:
data = m_pacr; data = m_pacr;
break; break;
case PIT_68230_PBCR: case PIT_68230_PBCR:
data = m_pbcr; data = m_pbcr;
break; break;
case PIT_68230_PADR: case PIT_68230_PADR:
data = m_padr; data = m_padr;
break; break;
case PIT_68230_PBDR: case PIT_68230_PBDR:
/* 4.6.2. PORT B DATA REGISTER (PBDR). The port B data register is a holding /* 4.6.2. PORT B DATA REGISTER (PBDR). The port B data register is a holding
* register for moving data to and from port B pins. The port B data direction * register for moving data to and from port B pins. The port B data direction
* register determines whether each pin is an input (zero) or an output (one). * register determines whether each pin is an input (zero) or an output (one).
* This register is readable and writable at all times. Depending on the chosen * This register is readable and writable at all times. Depending on the chosen
* mode/submode, reading or writing may affect the double-buffered handshake * mode/submode, reading or writing may affect the double-buffered handshake
* mechanism. The port B data register is not affected by the assertion of the * mechanism. The port B data register is not affected by the assertion of the
* RESET pin. PB0-PB7 sits on pins 17-24 on a 48 pin DIP package */ * RESET pin. PB0-PB7 sits on pins 17-24 on a 48 pin DIP package */
data = m_pbdr; data = m_pbdr;
break; break;
case PIT_68230_PSR: case PIT_68230_PSR:
/* 4.8. PORT STATUS REGISTER (PSR) The port status register contains information about /* 4.8. PORT STATUS REGISTER (PSR) The port status register contains information about
* handshake pin activity. Bits 7-4 show the instantaneous level of the respective handshake * handshake pin activity. Bits 7-4 show the instantaneous level of the respective handshake
* pin, and are independent of the handshake pin sense bits in the port general control * pin, and are independent of the handshake pin sense bits in the port general control
* register. Bits 3-0 are the respective status bits referred to throughout this document. * register. Bits 3-0 are the respective status bits referred to throughout this document.
* Their interpretation depends on the programmed mode/submode of the PI/T. For bits * Their interpretation depends on the programmed mode/submode of the PI/T. For bits
* 3-0 a one is the active or asserted state. */ * 3-0 a one is the active or asserted state. */
data = m_psr; data = m_psr;
break; break;
default: default:
LOG (logerror ("unhandled register %02x", offset)); LOG (logerror ("unhandled register %02x", offset));
data = 0; data = 0;
} }
LOG (if (offset != or_ofs || data != or_data || or_cnt >= 1000) { LOG (if (offset != or_ofs || data != or_data || or_cnt >= 1000) {
logerror ("\npit68230_device::read: previous identical operation performed %02x times\n", or_cnt); logerror ("\npit68230_device::read: previous identical operation performed %02x times\n", or_cnt);
or_cnt = 0; or_cnt = 0;
or_data = data; or_data = data;
or_ofs = offset; or_ofs = offset;
logerror ("pit68230_device::read: offset=%02x data=%02x %lld\n", or_ofs, or_data, machine ().firstcpu->total_cycles ()); logerror ("pit68230_device::read: offset=%02x data=%02x %lld\n", or_ofs, or_data, machine ().firstcpu->total_cycles ());
} }
else else
or_cnt++; ) or_cnt++; )
return data; return data;
} }

View File

@ -44,13 +44,13 @@
//************************************************************************** //**************************************************************************
#define MCFG_PIT68230_PA_OUTPUT_CALLBACK(_write) \ #define MCFG_PIT68230_PA_OUTPUT_CALLBACK(_write) \
devcb = &pit68230_device::set_pa_wr_callback (*device, DEVCB_ ## _write); devcb = &pit68230_device::set_pa_wr_callback (*device, DEVCB_ ## _write);
#define MCFG_PIT68230_PB_OUTPUT_CALLBACK(_write) \ #define MCFG_PIT68230_PB_OUTPUT_CALLBACK(_write) \
devcb = &pit68230_device::set_pb_wr_callback (*device, DEVCB_ ## _write); devcb = &pit68230_device::set_pb_wr_callback (*device, DEVCB_ ## _write);
#define MCFG_PIT68230_H2_CALLBACK(_write) \ #define MCFG_PIT68230_H2_CALLBACK(_write) \
devcb = &pit68230_device::set_h2_wr_callback (*device, DEVCB_ ## _write); devcb = &pit68230_device::set_h2_wr_callback (*device, DEVCB_ ## _write);
/*----------------------------------------------------------------------- /*-----------------------------------------------------------------------
* Registers RS1-RS5 R/W Description * Registers RS1-RS5 R/W Description
@ -90,11 +90,11 @@ pit68230_device(const machine_config &mconfig, device_type type, const char *nam
pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
template<class _Object> static devcb_base &set_pa_wr_callback (device_t &device, _Object object) template<class _Object> static devcb_base &set_pa_wr_callback (device_t &device, _Object object)
{ {
return downcast<pit68230_device &>(device).m_write_pa.set_callback (object); return downcast<pit68230_device &>(device).m_write_pa.set_callback (object);
} }
template<class _Object> static devcb_base &set_h2_wr_callback (device_t &device, _Object object) template<class _Object> static devcb_base &set_h2_wr_callback (device_t &device, _Object object)
{ {
return downcast<pit68230_device &>(device).m_write_h2.set_callback (object); return downcast<pit68230_device &>(device).m_write_h2.set_callback (object);
} }
DECLARE_WRITE8_MEMBER (write); DECLARE_WRITE8_MEMBER (write);

View File

@ -501,7 +501,7 @@ void i8271_device::live_run(attotime limit)
scan_cnt[1] = slot >> 9; scan_cnt[1] = slot >> 9;
scan_done = true; scan_done = true;
rr = command[4] & 0xc0 ? ERR_SMNE : ERR_SMEQ; rr = command[4] & 0xc0 ? ERR_SMNE : ERR_SMEQ;
} }
else else
{ {
scan_match = true; scan_match = true;
@ -753,7 +753,7 @@ void i8271_device::start_command(int cmd)
{ {
floppy_info &fi = flopi[BIT(command[0], 7)]; floppy_info &fi = flopi[BIT(command[0], 7)];
rr = (get_ready(1) ? 0x40 : 0) | (fi.dev->idx_r() ? 0x10 : 0) | (fi.dev->wpt_r() ? 0 : 8) | rr = (get_ready(1) ? 0x40 : 0) | (fi.dev->idx_r() ? 0x10 : 0) | (fi.dev->wpt_r() ? 0 : 8) |
(get_ready(0) ? 4 : 0) | (fi.dev->trk00_r() ? 1 : 0); (get_ready(0) ? 4 : 0) | (fi.dev->trk00_r() ? 1 : 0);
flopi[0].ready = true; flopi[0].ready = true;
flopi[1].ready = true; flopi[1].ready = true;
main_phase = PHASE_IDLE; main_phase = PHASE_IDLE;
@ -819,7 +819,7 @@ void i8271_device::start_command(int cmd)
case 0x22: { case 0x22: {
floppy_info &fi = flopi[BIT(command[0], 7)]; floppy_info &fi = flopi[BIT(command[0], 7)];
rr = (get_ready(1) ? 0x40 : 0) | (fi.dev->idx_r() ? 0x10 : 0) | (fi.dev->wpt_r() ? 0 : 8) | rr = (get_ready(1) ? 0x40 : 0) | (fi.dev->idx_r() ? 0x10 : 0) | (fi.dev->wpt_r() ? 0 : 8) |
(get_ready(0) ? 4 : 0) | (fi.dev->trk00_r() ? 1 : 0); (get_ready(0) ? 4 : 0) | (fi.dev->trk00_r() ? 1 : 0);
break; break;
} }
case 0x23: case 0x23:

View File

@ -2,7 +2,7 @@
// copyright-holders:Barry Rodewald // copyright-holders:Barry Rodewald
/* /*
VIA VT82C496G "Green PC" system chipset VIA VT82C496G "Green PC" system chipset
*/ */
@ -30,9 +30,9 @@ void vt82c496_device::device_start()
/* get rom region */ /* get rom region */
m_rom = machine().root_device().memregion(m_region_tag)->base(); m_rom = machine().root_device().memregion(m_region_tag)->base();
save_pointer(m_reg,"Registers",0x100); save_pointer(m_reg,"Registers",0x100);
m_ram = machine().device<ram_device>(RAM_TAG); m_ram = machine().device<ram_device>(RAM_TAG);
} }
@ -106,7 +106,7 @@ void vt82c496_device::update_mem_c0(UINT8 data)
} }
else else
m_space->nop_write(0xcc000,0xcffff,0,0); m_space->nop_write(0xcc000,0xcffff,0,0);
if(data & 0x20) if(data & 0x20)
machine().root_device().membank("bios_c8_r")->set_base(m_ram->pointer()+0xc8000); machine().root_device().membank("bios_c8_r")->set_base(m_ram->pointer()+0xc8000);
else else
@ -118,7 +118,7 @@ void vt82c496_device::update_mem_c0(UINT8 data)
} }
else else
m_space->nop_write(0xc8000,0xcbfff,0,0); m_space->nop_write(0xc8000,0xcbfff,0,0);
if(data & 0x08) if(data & 0x08)
machine().root_device().membank("bios_c4_r")->set_base(m_ram->pointer()+0xc4000); machine().root_device().membank("bios_c4_r")->set_base(m_ram->pointer()+0xc4000);
else else
@ -130,7 +130,7 @@ void vt82c496_device::update_mem_c0(UINT8 data)
} }
else else
m_space->nop_write(0xc4000,0xc7fff,0,0); m_space->nop_write(0xc4000,0xc7fff,0,0);
if(data & 0x02) if(data & 0x02)
machine().root_device().membank("bios_c0_r")->set_base(m_ram->pointer()+0xc0000); machine().root_device().membank("bios_c0_r")->set_base(m_ram->pointer()+0xc0000);
else else
@ -157,7 +157,7 @@ void vt82c496_device::update_mem_d0(UINT8 data)
} }
else else
m_space->nop_write(0xdc000,0xdffff,0,0); m_space->nop_write(0xdc000,0xdffff,0,0);
if(data & 0x20) if(data & 0x20)
machine().root_device().membank("bios_d8_r")->set_base(m_ram->pointer()+0xd8000); machine().root_device().membank("bios_d8_r")->set_base(m_ram->pointer()+0xd8000);
else else
@ -169,7 +169,7 @@ void vt82c496_device::update_mem_d0(UINT8 data)
} }
else else
m_space->nop_write(0xd8000,0xdbfff,0,0); m_space->nop_write(0xd8000,0xdbfff,0,0);
if(data & 0x08) if(data & 0x08)
machine().root_device().membank("bios_d4_r")->set_base(m_ram->pointer()+0xd4000); machine().root_device().membank("bios_d4_r")->set_base(m_ram->pointer()+0xd4000);
else else
@ -181,7 +181,7 @@ void vt82c496_device::update_mem_d0(UINT8 data)
} }
else else
m_space->nop_write(0xd4000,0xd7fff,0,0); m_space->nop_write(0xd4000,0xd7fff,0,0);
if(data & 0x02) if(data & 0x02)
machine().root_device().membank("bios_d0_r")->set_base(m_ram->pointer()+0xd0000); machine().root_device().membank("bios_d0_r")->set_base(m_ram->pointer()+0xd0000);
else else
@ -214,7 +214,7 @@ void vt82c496_device::update_mem_e0(UINT8 data)
machine().root_device().membank("bios_f0_r")->set_base(m_ram->pointer()+0xf0000); machine().root_device().membank("bios_f0_r")->set_base(m_ram->pointer()+0xf0000);
else else
machine().root_device().membank("bios_f0_r")->set_base(m_rom+0x30000); machine().root_device().membank("bios_f0_r")->set_base(m_rom+0x30000);
if(data & 0x10) if(data & 0x10)
{ {
m_space->install_write_bank(0xf0000,0xfffff,0,0,"bios_f0_w"); m_space->install_write_bank(0xf0000,0xfffff,0,0,"bios_f0_w");
@ -223,4 +223,3 @@ void vt82c496_device::update_mem_e0(UINT8 data)
else else
m_space->nop_write(0xf0000,0xfffff,0,0); m_space->nop_write(0xf0000,0xfffff,0,0);
} }

View File

@ -2,7 +2,7 @@
// copyright-holders:Barry Rodewald // copyright-holders:Barry Rodewald
/* /*
VIA VT82C496G "Green PC" system chipset VIA VT82C496G "Green PC" system chipset
*/ */
@ -40,14 +40,14 @@ protected:
private: private:
const char* m_cpu_tag; const char* m_cpu_tag;
const char* m_region_tag; const char* m_region_tag;
// cpu_device* m_maincpu; // cpu_device* m_maincpu;
address_space* m_space; address_space* m_space;
ram_device* m_ram; ram_device* m_ram;
UINT8* m_rom; UINT8* m_rom;
UINT8 m_reg[0x100]; UINT8 m_reg[0x100];
UINT8 m_reg_select; UINT8 m_reg_select;
void update_mem_c0(UINT8 data); void update_mem_c0(UINT8 data);
void update_mem_d0(UINT8 data); void update_mem_d0(UINT8 data);
void update_mem_e0(UINT8 data); void update_mem_e0(UINT8 data);
@ -58,4 +58,3 @@ extern const device_type VT82C496;
#endif /* __VT82C496_H__ */ #endif /* __VT82C496_H__ */

File diff suppressed because it is too large Load Diff

View File

@ -126,41 +126,41 @@ public:
virtual void rcv_callback(); virtual void rcv_callback();
virtual void rcv_complete(); virtual void rcv_complete();
// read register handlers // read register handlers
UINT8 do_sccreg_rr0(); UINT8 do_sccreg_rr0();
UINT8 do_sccreg_rr1(); UINT8 do_sccreg_rr1();
UINT8 do_sccreg_rr2(); UINT8 do_sccreg_rr2();
UINT8 do_sccreg_rr3(); UINT8 do_sccreg_rr3();
UINT8 do_sccreg_rr4(); UINT8 do_sccreg_rr4();
UINT8 do_sccreg_rr5(); UINT8 do_sccreg_rr5();
UINT8 do_sccreg_rr6(); UINT8 do_sccreg_rr6();
UINT8 do_sccreg_rr7(); UINT8 do_sccreg_rr7();
UINT8 do_sccreg_rr8(); UINT8 do_sccreg_rr8();
UINT8 do_sccreg_rr9(); UINT8 do_sccreg_rr9();
UINT8 do_sccreg_rr10(); UINT8 do_sccreg_rr10();
UINT8 do_sccreg_rr11(); UINT8 do_sccreg_rr11();
UINT8 do_sccreg_rr12(); UINT8 do_sccreg_rr12();
UINT8 do_sccreg_rr13(); UINT8 do_sccreg_rr13();
UINT8 do_sccreg_rr14(); UINT8 do_sccreg_rr14();
UINT8 do_sccreg_rr15(); UINT8 do_sccreg_rr15();
// write register handlers // write register handlers
void do_sccreg_wr0(UINT8 data); void do_sccreg_wr0(UINT8 data);
void do_sccreg_wr1(UINT8 data); void do_sccreg_wr1(UINT8 data);
void do_sccreg_wr2(UINT8 data); void do_sccreg_wr2(UINT8 data);
void do_sccreg_wr3(UINT8 data); void do_sccreg_wr3(UINT8 data);
void do_sccreg_wr4(UINT8 data); void do_sccreg_wr4(UINT8 data);
void do_sccreg_wr5(UINT8 data); void do_sccreg_wr5(UINT8 data);
void do_sccreg_wr6(UINT8 data); void do_sccreg_wr6(UINT8 data);
void do_sccreg_wr7(UINT8 data); void do_sccreg_wr7(UINT8 data);
void do_sccreg_wr8(UINT8 data); void do_sccreg_wr8(UINT8 data);
void do_sccreg_wr9(UINT8 data); void do_sccreg_wr9(UINT8 data);
void do_sccreg_wr10(UINT8 data); void do_sccreg_wr10(UINT8 data);
void do_sccreg_wr11(UINT8 data); void do_sccreg_wr11(UINT8 data);
void do_sccreg_wr12(UINT8 data); void do_sccreg_wr12(UINT8 data);
void do_sccreg_wr13(UINT8 data); void do_sccreg_wr13(UINT8 data);
void do_sccreg_wr14(UINT8 data); void do_sccreg_wr14(UINT8 data);
void do_sccreg_wr15(UINT8 data); void do_sccreg_wr15(UINT8 data);
UINT8 control_read(); UINT8 control_read();
void control_write(UINT8 data); void control_write(UINT8 data);
@ -170,7 +170,7 @@ public:
void receive_data(UINT8 data); void receive_data(UINT8 data);
void m_rx_fifo_rp_step(); void m_rx_fifo_rp_step();
UINT8 m_rx_fifo_rp_data(); UINT8 m_rx_fifo_rp_data();
DECLARE_WRITE_LINE_MEMBER( write_rx ); DECLARE_WRITE_LINE_MEMBER( write_rx );
DECLARE_WRITE_LINE_MEMBER( cts_w ); DECLARE_WRITE_LINE_MEMBER( cts_w );
@ -184,9 +184,9 @@ public:
int m_txc; int m_txc;
// Register state // Register state
// read registers enum // read registers enum
#if 0 //defined by z80sio.h #if 0 //defined by z80sio.h
UINT8 m_rr0; // REG_RR0_STATUS UINT8 m_rr0; // REG_RR0_STATUS
UINT8 m_rr1; // REG_RR1_SPEC_RCV_COND UINT8 m_rr1; // REG_RR1_SPEC_RCV_COND
UINT8 m_rr2; // REG_RR2_INTERRUPT_VECT UINT8 m_rr2; // REG_RR2_INTERRUPT_VECT
#endif #endif
@ -204,18 +204,18 @@ public:
UINT8 m_rr14; // REG_RR14_WR7_OR_R10 UINT8 m_rr14; // REG_RR14_WR7_OR_R10
UINT8 m_rr15; // REG_RR15_WR15_EXT_STAT UINT8 m_rr15; // REG_RR15_WR15_EXT_STAT
// write registers enum // write registers enum
#if 0 //defined by z80sio.h #if 0 //defined by z80sio.h
UINT8 m_wr0; // REG_WR0_COMMAND_REGPT UINT8 m_wr0; // REG_WR0_COMMAND_REGPT
UINT8 m_wr1; // REG_WR1_INT_DMA_ENABLE UINT8 m_wr1; // REG_WR1_INT_DMA_ENABLE
UINT8 m_wr2; // REG_WR2_INT_VECTOR UINT8 m_wr2; // REG_WR2_INT_VECTOR
UINT8 m_wr3; // REG_WR3_RX_CONTROL UINT8 m_wr3; // REG_WR3_RX_CONTROL
UINT8 m_wr4; // REG_WR4_RX_TX_MODES UINT8 m_wr4; // REG_WR4_RX_TX_MODES
UINT8 m_wr5; // REG_WR5_TX_CONTROL UINT8 m_wr5; // REG_WR5_TX_CONTROL
UINT8 m_wr6; // REG_WR6_SYNC_OR_SDLC_A UINT8 m_wr6; // REG_WR6_SYNC_OR_SDLC_A
UINT8 m_wr7; // REG_WR7_SYNC_OR_SDLC_F UINT8 m_wr7; // REG_WR7_SYNC_OR_SDLC_F
#endif #endif
UINT8 m_wr8; // REG_WR8_TRANSMIT_DATA UINT8 m_wr8; // REG_WR8_TRANSMIT_DATA
UINT8 m_wr9; // REG_WR9_MASTER_INT_CTRL UINT8 m_wr9; // REG_WR9_MASTER_INT_CTRL
UINT8 m_wr10; // REG_WR10_MSC_RX_TX_CTRL UINT8 m_wr10; // REG_WR10_MSC_RX_TX_CTRL
UINT8 m_wr11; // REG_WR11_CLOCK_MODES UINT8 m_wr11; // REG_WR11_CLOCK_MODES
@ -223,7 +223,7 @@ public:
UINT8 m_wr13; // REG_WR13_HI_BAUD_GEN UINT8 m_wr13; // REG_WR13_HI_BAUD_GEN
UINT8 m_wr14; // REG_WR14_MISC_CTRL UINT8 m_wr14; // REG_WR14_MISC_CTRL
UINT8 m_wr15; // REG_WR15_EXT_ST_INT_CTRL UINT8 m_wr15; // REG_WR15_EXT_ST_INT_CTRL
protected: protected:
enum enum
@ -231,50 +231,50 @@ protected:
INT_TRANSMIT = 0, INT_TRANSMIT = 0,
INT_EXTERNAL = 1, INT_EXTERNAL = 1,
INT_RECEIVE = 2, INT_RECEIVE = 2,
INT_SPECIAL = 3 INT_SPECIAL = 3
}; };
// Read registers // Read registers
enum enum
{ {
REG_RR0_STATUS = 0, // SIO REG_RR0_STATUS = 0, // SIO
REG_RR1_SPEC_RCV_COND = 1, // SIO REG_RR1_SPEC_RCV_COND = 1, // SIO
REG_RR2_INTERRUPT_VECT = 2, // SIO REG_RR2_INTERRUPT_VECT = 2, // SIO
REG_RR3_INTERUPPT_PEND = 3, REG_RR3_INTERUPPT_PEND = 3,
REG_RR4_WR4_OR_RR0 = 4, REG_RR4_WR4_OR_RR0 = 4,
REG_RR5_WR5_OR_RR0 = 5, REG_RR5_WR5_OR_RR0 = 5,
REG_RR6_LSB_OR_RR2 = 6, REG_RR6_LSB_OR_RR2 = 6,
REG_RR7_MSB_OR_RR3 = 7, REG_RR7_MSB_OR_RR3 = 7,
REG_RR8_RECEIVE_DATA = 8, REG_RR8_RECEIVE_DATA = 8,
REG_RR9_WR3_OR_RR13 = 9, REG_RR9_WR3_OR_RR13 = 9,
REG_RR10_MISC_STATUS = 10, REG_RR10_MISC_STATUS = 10,
REG_RR11_WR10_OR_RR15 = 11, REG_RR11_WR10_OR_RR15 = 11,
REG_RR12_LO_TIME_CONST = 12, REG_RR12_LO_TIME_CONST = 12,
REG_RR13_HI_TIME_CONST = 13, REG_RR13_HI_TIME_CONST = 13,
REG_RR14_WR7_OR_R10 = 14, REG_RR14_WR7_OR_R10 = 14,
REG_RR15_WR15_EXT_STAT = 15 REG_RR15_WR15_EXT_STAT = 15
}; };
// Write registers // Write registers
enum enum
{ {
REG_WR0_COMMAND_REGPT = 0, // SIO REG_WR0_COMMAND_REGPT = 0, // SIO
REG_WR1_INT_DMA_ENABLE = 1, // SIO REG_WR1_INT_DMA_ENABLE = 1, // SIO
REG_WR2_INT_VECTOR = 2, // SIO REG_WR2_INT_VECTOR = 2, // SIO
REG_WR3_RX_CONTROL = 3, // SIO REG_WR3_RX_CONTROL = 3, // SIO
REG_WR4_RX_TX_MODES = 4, // SIO REG_WR4_RX_TX_MODES = 4, // SIO
REG_WR5_TX_CONTROL = 5, // SIO REG_WR5_TX_CONTROL = 5, // SIO
REG_WR6_SYNC_OR_SDLC_A = 6, // SIO REG_WR6_SYNC_OR_SDLC_A = 6, // SIO
REG_WR7_SYNC_OR_SDLC_F = 7, // SIO REG_WR7_SYNC_OR_SDLC_F = 7, // SIO
REG_WR8_TRANSMIT_DATA = 8, REG_WR8_TRANSMIT_DATA = 8,
REG_WR9_MASTER_INT_CTRL = 9, REG_WR9_MASTER_INT_CTRL = 9,
REG_WR10_MSC_RX_TX_CTRL = 10, REG_WR10_MSC_RX_TX_CTRL = 10,
REG_WR11_CLOCK_MODES = 11, REG_WR11_CLOCK_MODES = 11,
REG_WR12_LO_BAUD_GEN = 12, REG_WR12_LO_BAUD_GEN = 12,
REG_WR13_HI_BAUD_GEN = 13, REG_WR13_HI_BAUD_GEN = 13,
REG_WR14_MISC_CTRL = 14, REG_WR14_MISC_CTRL = 14,
REG_WR15_EXT_ST_INT_CTRL= 15 REG_WR15_EXT_ST_INT_CTRL= 15
}; };
enum enum
{ {
@ -282,7 +282,7 @@ protected:
RR0_ZC = 0x02, // SCC bit RR0_ZC = 0x02, // SCC bit
RR0_TX_BUFFER_EMPTY = 0x04, // SIO RR0_TX_BUFFER_EMPTY = 0x04, // SIO
RR0_DCD = 0x08, // SIO RR0_DCD = 0x08, // SIO
RR0_RI = 0x10, // DART bit? TODO: investigate function and remove RR0_RI = 0x10, // DART bit? TODO: investigate function and remove
RR0_SYNC_HUNT = 0x10, // SIO bit, not supported RR0_SYNC_HUNT = 0x10, // SIO bit, not supported
RR0_CTS = 0x20, // SIO bit RR0_CTS = 0x20, // SIO bit
RR0_TX_UNDERRUN = 0x40, // SIO bit, not supported RR0_TX_UNDERRUN = 0x40, // SIO bit, not supported
@ -299,30 +299,30 @@ protected:
RR1_END_OF_FRAME = 0x80 // SIO/SCC bits, not supported RR1_END_OF_FRAME = 0x80 // SIO/SCC bits, not supported
}; };
enum enum
{ // TODO: overload SIO functionality { // TODO: overload SIO functionality
RR2_INT_VECTOR_MASK = 0xff, // SCC channel A, SIO channel B (special case) RR2_INT_VECTOR_MASK = 0xff, // SCC channel A, SIO channel B (special case)
RR2_INT_VECTOR_V1 = 0x02, // SIO (special case) /SCC Channel B RR2_INT_VECTOR_V1 = 0x02, // SIO (special case) /SCC Channel B
RR2_INT_VECTOR_V2 = 0x04, // SIO (special case) /SCC Channel B RR2_INT_VECTOR_V2 = 0x04, // SIO (special case) /SCC Channel B
RR2_INT_VECTOR_V3 = 0x08 // SIO (special case) /SCC Channel B RR2_INT_VECTOR_V3 = 0x08 // SIO (special case) /SCC Channel B
}; };
enum enum
{ {
RR3_CHANB_EXT_IP = 0x01, // SCC IP pending registers RR3_CHANB_EXT_IP = 0x01, // SCC IP pending registers
RR3_CHANB_TX_IP = 0x02, // only read in Channel A (for both channels) RR3_CHANB_TX_IP = 0x02, // only read in Channel A (for both channels)
RR3_CHANB_RX_IP = 0x04, // channel B return all zero RR3_CHANB_RX_IP = 0x04, // channel B return all zero
RR3_CHANA_EXT_IP = 0x08, RR3_CHANA_EXT_IP = 0x08,
RR3_CHANA_TX_IP = 0x10, RR3_CHANA_TX_IP = 0x10,
RR3_CHANA_RX_IP = 0x20 RR3_CHANA_RX_IP = 0x20
}; };
enum // Universal Bus WR0 commands for 85X30 enum // Universal Bus WR0 commands for 85X30
{ {
WR0_REGISTER_MASK = 0x07, WR0_REGISTER_MASK = 0x07,
WR0_COMMAND_MASK = 0x38, // COMMANDS WR0_COMMAND_MASK = 0x38, // COMMANDS
WR0_NULL = 0x00, // 0 0 0 WR0_NULL = 0x00, // 0 0 0
WR0_POINT_HIGH = 0x08, // 0 0 1 WR0_POINT_HIGH = 0x08, // 0 0 1
WR0_RESET_EXT_STATUS = 0x10, // 0 1 0 WR0_RESET_EXT_STATUS = 0x10, // 0 1 0
WR0_SEND_ABORT = 0x18, // 0 1 1 WR0_SEND_ABORT = 0x18, // 0 1 1
WR0_ENABLE_INT_NEXT_RX = 0x20, // 1 0 0 WR0_ENABLE_INT_NEXT_RX = 0x20, // 1 0 0
@ -340,17 +340,17 @@ protected:
{ {
WR0_Z_COMMAND_MASK = 0x38, // COMMANDS WR0_Z_COMMAND_MASK = 0x38, // COMMANDS
WR0_Z_NULL_1 = 0x00, // 0 0 0 WR0_Z_NULL_1 = 0x00, // 0 0 0
WR0_Z_NULL_2 = 0x08, // 0 0 1 WR0_Z_NULL_2 = 0x08, // 0 0 1
WR0_Z_RESET_EXT_STATUS = 0x10, // 0 1 0 WR0_Z_RESET_EXT_STATUS = 0x10, // 0 1 0
WR0_Z_SEND_ABORT = 0x18, // 0 1 1 WR0_Z_SEND_ABORT = 0x18, // 0 1 1
WR0_Z_ENABLE_INT_NEXT_RX = 0x20, // 1 0 0 WR0_Z_ENABLE_INT_NEXT_RX = 0x20, // 1 0 0
WR0_Z_RESET_TX_INT = 0x28, // 1 0 1 WR0_Z_RESET_TX_INT = 0x28, // 1 0 1
WR0_Z_ERROR_RESET = 0x30, // 1 1 0 WR0_Z_ERROR_RESET = 0x30, // 1 1 0
WR0_Z_RESET_HIGHEST_IUS = 0x38, // 1 1 1 WR0_Z_RESET_HIGHEST_IUS = 0x38, // 1 1 1
WR0_Z_SHIFT_MASK = 0x03, // SHIFT mode SDLC chan B WR0_Z_SHIFT_MASK = 0x03, // SHIFT mode SDLC chan B
WR0_Z_SEL_SHFT_LEFT = 0x02, // 1 0 WR0_Z_SEL_SHFT_LEFT = 0x02, // 1 0
WR0_Z_SEL_SHFT_RIGHT = 0x03 // 1 1 WR0_Z_SEL_SHFT_RIGHT = 0x03 // 1 1
}; };
enum enum
{ {
@ -417,62 +417,62 @@ protected:
WR5_DTR = 0x80 WR5_DTR = 0x80
}; };
/* SCC specifics */ /* SCC specifics */
enum enum
{ {
WR9_CMD_MASK = 0xC0, WR9_CMD_MASK = 0xC0,
WR9_CMD_NORESET = 0x00, WR9_CMD_NORESET = 0x00,
WR9_CMD_CHNB_RESET = 0x40, WR9_CMD_CHNB_RESET = 0x40,
WR9_CMD_CHNA_RESET = 0x80, WR9_CMD_CHNA_RESET = 0x80,
WR9_CMD_HW_RESET = 0xC0, WR9_CMD_HW_RESET = 0xC0,
WR9_BIT_VIS = 0x01, WR9_BIT_VIS = 0x01,
WR9_BIT_NV = 0x02, WR9_BIT_NV = 0x02,
WR9_BIT_DLC = 0x04, WR9_BIT_DLC = 0x04,
WR9_BIT_MIE = 0x08, WR9_BIT_MIE = 0x08,
WR9_BIT_SHSL = 0x10, WR9_BIT_SHSL = 0x10,
WR9_BIT_IACK = 0x20 WR9_BIT_IACK = 0x20
}; };
enum enum
{ {
WR11_RCVCLK_TYPE = 0x80, WR11_RCVCLK_TYPE = 0x80,
WR11_RCVCLK_SRC_MASK = 0x60, // RCV CLOCK WR11_RCVCLK_SRC_MASK = 0x60, // RCV CLOCK
WR11_RCVCLK_SRC_RTXC = 0x00, // 0 0 WR11_RCVCLK_SRC_RTXC = 0x00, // 0 0
WR11_RCVCLK_SRC_TRXC = 0x20, // 0 1 WR11_RCVCLK_SRC_TRXC = 0x20, // 0 1
WR11_RCVCLK_SRC_BR = 0x40, // 1 0 WR11_RCVCLK_SRC_BR = 0x40, // 1 0
WR11_RCVCLK_SRC_DPLL = 0x60, // 1 1 WR11_RCVCLK_SRC_DPLL = 0x60, // 1 1
WR11_TRACLK_SRC_MASK = 0x18, // TRA CLOCK WR11_TRACLK_SRC_MASK = 0x18, // TRA CLOCK
WR11_TRACLK_SRC_RTXC = 0x00, // 0 0 WR11_TRACLK_SRC_RTXC = 0x00, // 0 0
WR11_TRACLK_SRC_TRXC = 0x08, // 0 1 WR11_TRACLK_SRC_TRXC = 0x08, // 0 1
WR11_TRACLK_SRC_BR = 0x10, // 1 0 WR11_TRACLK_SRC_BR = 0x10, // 1 0
WR11_TRACLK_SRC_DPLL = 0x18, // 1 1 WR11_TRACLK_SRC_DPLL = 0x18, // 1 1
WR11_TRXC_DIRECTION = 0x04, WR11_TRXC_DIRECTION = 0x04,
WR11_TRXSRC_SRC_MASK = 0x03, // TRXX CLOCK WR11_TRXSRC_SRC_MASK = 0x03, // TRXX CLOCK
WR11_TRXSRC_SRC_XTAL = 0x00, // 0 0 WR11_TRXSRC_SRC_XTAL = 0x00, // 0 0
WR11_TRXSRC_SRC_TRA = 0x01, // 0 1 WR11_TRXSRC_SRC_TRA = 0x01, // 0 1
WR11_TRXSRC_SRC_BR = 0x02, // 1 0 WR11_TRXSRC_SRC_BR = 0x02, // 1 0
WR11_TRXSRC_SRC_DPLL = 0x03, // 1 1 WR11_TRXSRC_SRC_DPLL = 0x03, // 1 1
}; };
enum enum
{ {
WR14_DPLL_CMD_MASK = 0xe0, // Command WR14_DPLL_CMD_MASK = 0xe0, // Command
WR14_CMD_NULL = 0x00, // 0 0 0 WR14_CMD_NULL = 0x00, // 0 0 0
WR14_CMD_ESM = 0x20, // 0 0 1 WR14_CMD_ESM = 0x20, // 0 0 1
WR14_CMD_RMC = 0x40, // 0 1 0 WR14_CMD_RMC = 0x40, // 0 1 0
WR14_CMD_DISABLE_DPLL = 0x60, // 0 1 1 WR14_CMD_DISABLE_DPLL = 0x60, // 0 1 1
WR14_CMD_SS_BGR = 0x80, // 1 0 0 WR14_CMD_SS_BGR = 0x80, // 1 0 0
WR14_CMD_SS_RTXC = 0xa0, // 1 0 1 WR14_CMD_SS_RTXC = 0xa0, // 1 0 1
WR14_CMD_SET_FM = 0xc0, // 1 1 0 WR14_CMD_SET_FM = 0xc0, // 1 1 0
WR14_CMD_SET_NRZI = 0xe0 // 1 1 1 WR14_CMD_SET_NRZI = 0xe0 // 1 1 1
}; };
void update_serial(); void update_serial();
void set_dtr(int state); void set_dtr(int state);
void set_rts(int state); void set_rts(int state);
int get_clock_mode(); int get_clock_mode();
void update_rts(); void update_rts();
stop_bits_t get_stop_bits(); stop_bits_t get_stop_bits();
int get_rx_word_length(); int get_rx_word_length();
int get_tx_word_length(); int get_tx_word_length();
@ -482,7 +482,7 @@ protected:
UINT8 m_rx_error_fifo[8]; // receive error FIFO UINT8 m_rx_error_fifo[8]; // receive error FIFO
UINT8 m_rx_error; // current receive error UINT8 m_rx_error; // current receive error
//int m_rx_fifo // receive FIFO pointer //int m_rx_fifo // receive FIFO pointer
int m_rx_fifo_rp; // receive FIFO read pointer int m_rx_fifo_rp; // receive FIFO read pointer
int m_rx_fifo_wp; // receive FIFO write pointer int m_rx_fifo_wp; // receive FIFO write pointer
int m_rx_fifo_sz; // receive FIFO size int m_rx_fifo_sz; // receive FIFO size
@ -506,19 +506,19 @@ protected:
// synchronous state // synchronous state
UINT16 m_sync; // sync character UINT16 m_sync; // sync character
// int m_index; // int m_index;
z80scc_device *m_uart; z80scc_device *m_uart;
// SCC specifics // SCC specifics
int m_ph; // Point high command to access regs 08-0f int m_ph; // Point high command to access regs 08-0f
UINT8 m_zc; UINT8 m_zc;
}; };
// ======================> z80scc_device // ======================> z80scc_device
class z80scc_device : public device_t class z80scc_device : public device_t
,public device_z80daisy_interface ,public device_z80daisy_interface
{ {
friend class z80scc_channel; friend class z80scc_channel;
@ -604,7 +604,7 @@ protected:
void trigger_interrupt(int index, int state); void trigger_interrupt(int index, int state);
int get_channel_index(z80scc_channel *ch) { return (ch == m_chanA) ? 0 : 1; } int get_channel_index(z80scc_channel *ch) { return (ch == m_chanA) ? 0 : 1; }
// Variants in the SCC family // Variants in the SCC family
enum enum
{ {
TYPE_Z80SCC = 0x001, TYPE_Z80SCC = 0x001,
@ -615,7 +615,7 @@ protected:
TYPE_SCC85C30 = 0x020, TYPE_SCC85C30 = 0x020,
TYPE_SCC85230 = 0x040, TYPE_SCC85230 = 0x040,
TYPE_SCC85233 = 0x080, TYPE_SCC85233 = 0x080,
TYPE_SCC8523L = 0x100 TYPE_SCC8523L = 0x100
}; };
#define SET_NMOS ( z80scc_device::TYPE_SCC8030 | z80scc_device::TYPE_SCC8530 ) #define SET_NMOS ( z80scc_device::TYPE_SCC8030 | z80scc_device::TYPE_SCC8530 )
@ -624,7 +624,7 @@ protected:
#define SET_EMSCC z80scc_device::TYPE_SCC85233 #define SET_EMSCC z80scc_device::TYPE_SCC85233
#define SET_Z80X30 ( z80scc_device::TYPE_SCC8030 | z80scc_device::TYPE_SCC80C30 | z80scc_device::TYPE_SCC80230 ) #define SET_Z80X30 ( z80scc_device::TYPE_SCC8030 | z80scc_device::TYPE_SCC80C30 | z80scc_device::TYPE_SCC80230 )
#define SET_Z85X3X ( z80scc_device::TYPE_SCC8530 | z80scc_device::TYPE_SCC85C30 | z80scc_device::TYPE_SCC85230 \ #define SET_Z85X3X ( z80scc_device::TYPE_SCC8530 | z80scc_device::TYPE_SCC85C30 | z80scc_device::TYPE_SCC85230 \
| z80scc_device::TYPE_SCC8523L | z80scc_device::TYPE_SCC85233 ) | z80scc_device::TYPE_SCC8523L | z80scc_device::TYPE_SCC85233 )
enum enum
{ {

View File

@ -5,13 +5,13 @@
Z80-SIO Serial Input/Output emulation Z80-SIO Serial Input/Output emulation
The variants in the SIO family are only different in the packaging The variants in the SIO family are only different in the packaging
but has the same register features. However, since some signals are but has the same register features. However, since some signals are
not connected to the pins on the package or share a pin with another not connected to the pins on the package or share a pin with another
signal the functionality is limited. However, this driver does not signal the functionality is limited. However, this driver does not
check that an operation is invalid because of package type but relies check that an operation is invalid because of package type but relies
on the software to be adapated for the particular version. on the software to be adapated for the particular version.
Package: DIP40 SIO/0, SIO/1, SIO/2, Package: DIP40 SIO/0, SIO/1, SIO/2,
QFP44 SIO/3 QFP44 SIO/3
PLCC44 SIO/4 PLCC44 SIO/4
------------------------------------------------------------------- -------------------------------------------------------------------
@ -21,25 +21,25 @@
6MHz 1200Kbps 6MHz 1200Kbps
10MHz 2500Kbps 10MHz 2500Kbps
-- Asynchrounous features ------------------------------------------- -- Asynchrounous features -------------------------------------------
5-8 bit per char Y 5-8 bit per char Y
1,1.5,2 stop bits Y 1,1.5,2 stop bits Y
odd/even parity Y odd/even parity Y
x1,x16,x32,x64 Y x1,x16,x32,x64 Y
break det/gen Y break det/gen Y
parity, framing & Y parity, framing & Y
overrun error det Y overrun error det Y
-- Byte oriented synchrounous features ------------------------------- -- Byte oriented synchrounous features -------------------------------
Int/ext char sync Y Int/ext char sync Y
1/2 synch chars Y 1/2 synch chars Y
Aut synch char insertion Y Aut synch char insertion Y
Aut CRC gen/det Y Aut CRC gen/det Y
-- SDLC/HDLC capabilities -------------------------------------------- -- SDLC/HDLC capabilities --------------------------------------------
Abort seq gen/chk Y Abort seq gen/chk Y
Aut zero ins/det Y Aut zero ins/det Y
Aut flag insert Y Aut flag insert Y
Addr field rec Y Addr field rec Y
1-fld resid hand Y 1-fld resid hand Y
Valid rec msg protection Y Valid rec msg protection Y
-- --
Receiver FIFO 3 Receiver FIFO 3
Transmitter FIFO 1 Transmitter FIFO 1
@ -135,29 +135,29 @@ z80sio_device::z80sio_device(const machine_config &mconfig, device_type type, co
z80sio_device::z80sio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) z80sio_device::z80sio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, Z80SIO, "Z80 SIO", tag, owner, clock, "z80sio", __FILE__), : device_t(mconfig, Z80SIO, "Z80 SIO", tag, owner, clock, "z80sio", __FILE__),
device_z80daisy_interface(mconfig, *this), device_z80daisy_interface(mconfig, *this),
m_chanA(*this, CHANA_TAG), m_chanA(*this, CHANA_TAG),
m_chanB(*this, CHANB_TAG), m_chanB(*this, CHANB_TAG),
m_rxca(0), m_rxca(0),
m_txca(0), m_txca(0),
m_rxcb(0), m_rxcb(0),
m_txcb(0), m_txcb(0),
m_out_txda_cb(*this), m_out_txda_cb(*this),
m_out_dtra_cb(*this), m_out_dtra_cb(*this),
m_out_rtsa_cb(*this), m_out_rtsa_cb(*this),
m_out_wrdya_cb(*this), m_out_wrdya_cb(*this),
m_out_synca_cb(*this), m_out_synca_cb(*this),
m_out_txdb_cb(*this), m_out_txdb_cb(*this),
m_out_dtrb_cb(*this), m_out_dtrb_cb(*this),
m_out_rtsb_cb(*this), m_out_rtsb_cb(*this),
m_out_wrdyb_cb(*this), m_out_wrdyb_cb(*this),
m_out_syncb_cb(*this), m_out_syncb_cb(*this),
m_out_int_cb(*this), m_out_int_cb(*this),
m_out_rxdrqa_cb(*this), m_out_rxdrqa_cb(*this),
m_out_txdrqa_cb(*this), m_out_txdrqa_cb(*this),
m_out_rxdrqb_cb(*this), m_out_rxdrqb_cb(*this),
m_out_txdrqb_cb(*this), m_out_txdrqb_cb(*this),
m_variant(TYPE_Z80SIO) m_variant(TYPE_Z80SIO)
{ {
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
m_int_state[i] = 0; m_int_state[i] = 0;
@ -169,7 +169,7 @@ z80sio_device::z80sio_device(const machine_config &mconfig, const char *tag, dev
void z80sio_device::device_start() void z80sio_device::device_start()
{ {
LOG(("%s\n", FUNCNAME)); LOG(("%s\n", FUNCNAME));
// resolve callbacks // resolve callbacks
m_out_txda_cb.resolve_safe(); m_out_txda_cb.resolve_safe();
m_out_dtra_cb.resolve_safe(); m_out_dtra_cb.resolve_safe();
@ -222,8 +222,8 @@ int z80sio_device::z80daisy_irq_state()
int i; int i;
LOG(("Z80SIO \"%s\" : Interrupt State A:%d%d%d%d B:%d%d%d%d\n", tag(), LOG(("Z80SIO \"%s\" : Interrupt State A:%d%d%d%d B:%d%d%d%d\n", tag(),
m_int_state[0], m_int_state[1], m_int_state[2], m_int_state[3], m_int_state[0], m_int_state[1], m_int_state[2], m_int_state[3],
m_int_state[4], m_int_state[5], m_int_state[6], m_int_state[7])); m_int_state[4], m_int_state[5], m_int_state[6], m_int_state[7]));
// loop over all interrupt sources // loop over all interrupt sources
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
@ -386,7 +386,7 @@ void z80sio_device::trigger_interrupt(int index, int state)
// status affects vector // status affects vector
vector = (m_chanB->m_wr2 & 0xf1) | (!index << 3) | (state << 1); vector = (m_chanB->m_wr2 & 0xf1) | (!index << 3) | (state << 1);
} }
// } // }
LOG(("Z80SIO \"%s\" Channel %c : Interrupt Request %u\n", tag(), 'A' + index, state)); LOG(("Z80SIO \"%s\" Channel %c : Interrupt Request %u\n", tag(), 'A' + index, state));
@ -422,7 +422,7 @@ READ8_MEMBER( z80sio_device::cd_ba_r )
int cd = BIT(offset, 1); int cd = BIT(offset, 1);
z80sio_channel *channel = ba ? m_chanB : m_chanA; z80sio_channel *channel = ba ? m_chanB : m_chanA;
// LOG(("z80sio_device::cd_ba_r ba:%02x cd:%02x\n", ba, cd)); // LOG(("z80sio_device::cd_ba_r ba:%02x cd:%02x\n", ba, cd));
return cd ? channel->control_read() : channel->data_read(); return cd ? channel->control_read() : channel->data_read();
} }
@ -438,7 +438,7 @@ WRITE8_MEMBER( z80sio_device::cd_ba_w )
int cd = BIT(offset, 1); int cd = BIT(offset, 1);
z80sio_channel *channel = ba ? m_chanB : m_chanA; z80sio_channel *channel = ba ? m_chanB : m_chanA;
LOG(("z80sio_device::cd_ba_w ba:%02x cd:%02x\n", ba, cd)); LOG(("z80sio_device::cd_ba_w ba:%02x cd:%02x\n", ba, cd));
if (cd) if (cd)
channel->control_write(data); channel->control_write(data);
@ -457,7 +457,7 @@ READ8_MEMBER( z80sio_device::ba_cd_r )
int cd = BIT(offset, 0); int cd = BIT(offset, 0);
z80sio_channel *channel = ba ? m_chanB : m_chanA; z80sio_channel *channel = ba ? m_chanB : m_chanA;
// LOG(("z80sio_device::ba_cd_r ba:%02x cd:%02x\n", ba, cd)); // LOG(("z80sio_device::ba_cd_r ba:%02x cd:%02x\n", ba, cd));
return cd ? channel->control_read() : channel->data_read(); return cd ? channel->control_read() : channel->data_read();
} }
@ -473,7 +473,7 @@ WRITE8_MEMBER( z80sio_device::ba_cd_w )
int cd = BIT(offset, 0); int cd = BIT(offset, 0);
z80sio_channel *channel = ba ? m_chanB : m_chanA; z80sio_channel *channel = ba ? m_chanB : m_chanA;
LOG(("z80sio_device::ba_cd_w ba:%02x cd:%02x\n", ba, cd)); LOG(("z80sio_device::ba_cd_w ba:%02x cd:%02x\n", ba, cd));
if (cd) if (cd)
channel->control_write(data); channel->control_write(data);
@ -508,9 +508,9 @@ z80sio_channel::z80sio_channel(const machine_config &mconfig, const char *tag, d
m_rts(0), m_rts(0),
m_sync(0) m_sync(0)
{ {
// Reset all registers // Reset all registers
m_rr0 = m_rr1 = m_rr2 = 0; m_rr0 = m_rr1 = m_rr2 = 0;
m_wr0 = m_wr1 = m_wr2 = m_wr3 = m_wr4 = m_wr5 = m_wr6 = m_wr7 = 0; m_wr0 = m_wr1 = m_wr2 = m_wr3 = m_wr4 = m_wr5 = m_wr6 = m_wr7 = 0;
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{ {
@ -526,7 +526,7 @@ z80sio_channel::z80sio_channel(const machine_config &mconfig, const char *tag, d
void z80sio_channel::device_start() void z80sio_channel::device_start()
{ {
LOG(("%s\n",FUNCNAME)); LOG(("%s\n",FUNCNAME));
m_uart = downcast<z80sio_device *>(owner()); m_uart = downcast<z80sio_device *>(owner());
m_index = m_uart->get_channel_index(this); m_index = m_uart->get_channel_index(this);
@ -568,7 +568,7 @@ void z80sio_channel::device_start()
void z80sio_channel::device_reset() void z80sio_channel::device_reset()
{ {
LOG(("%s\n", FUNCNAME)); LOG(("%s\n", FUNCNAME));
receive_register_reset(); receive_register_reset();
transmit_register_reset(); transmit_register_reset();
@ -722,11 +722,11 @@ int z80sio_channel::get_clock_mode()
} }
/* From "uPD7201/7201A MULTI PROTOCOL SERIAL COMMUNICATION CONTROLLER" by NEC: /* From "uPD7201/7201A MULTI PROTOCOL SERIAL COMMUNICATION CONTROLLER" by NEC:
"RTSA (Request to Send A): The state of the RTS bit (01 of the CR5 register) controls this pin. If "RTSA (Request to Send A): The state of the RTS bit (01 of the CR5 register) controls this pin. If
the RTS bit is reset in the asynchronous mode, a high level will not be output on the RTS pin until the RTS bit is reset in the asynchronous mode, a high level will not be output on the RTS pin until
all transmit characters are written and the all sent bit (D0 of the SR1 register) is set. In the all transmit characters are written and the all sent bit (D0 of the SR1 register) is set. In the
synchronous mode, the state of the RTS bit is used as is. That is, when the RTS bit is 0, the RTS synchronous mode, the state of the RTS bit is used as is. That is, when the RTS bit is 0, the RTS
pin is 1. When the RTS bit is 1, the RTS pin is O." pin is 1. When the RTS bit is 1, the RTS pin is O."
CR5 = m_wr5 and SR1 = m_rr1 CR5 = m_wr5 and SR1 = m_rr1
@ -742,20 +742,20 @@ void z80sio_channel::set_rts(int state)
void z80sio_channel::update_rts() void z80sio_channel::update_rts()
{ {
if (m_wr5 & WR5_RTS) if (m_wr5 & WR5_RTS)
{ {
// when the RTS bit is set, the _RTS output goes low // when the RTS bit is set, the _RTS output goes low
set_rts(0); set_rts(0);
m_rts = 1; m_rts = 1;
} }
else else
{ {
// when the RTS bit is reset, the _RTS output goes high after the transmitter empties // when the RTS bit is reset, the _RTS output goes high after the transmitter empties
m_rts = 0; m_rts = 0;
} }
// data terminal ready output follows the state programmed into the DTR bit*/ // data terminal ready output follows the state programmed into the DTR bit*/
set_dtr((m_wr5 & WR5_DTR) ? 0 : 1); set_dtr((m_wr5 & WR5_DTR) ? 0 : 1);
} }
//------------------------------------------------- //-------------------------------------------------
@ -820,14 +820,14 @@ int z80sio_channel::get_tx_word_length()
* Break/Abort latch. */ * Break/Abort latch. */
UINT8 z80sio_channel::do_sioreg_rr0() UINT8 z80sio_channel::do_sioreg_rr0()
{ {
return m_rr0; return m_rr0;
} }
/* /*
* This register contains the Special Receive condition status bits and Residue * This register contains the Special Receive condition status bits and Residue
* codes for the I-Field in the SDLC Receive Mode. */ * codes for the I-Field in the SDLC Receive Mode. */
UINT8 z80sio_channel::do_sioreg_rr1() UINT8 z80sio_channel::do_sioreg_rr1()
{ {
return m_rr1; return m_rr1;
} }
/* /*
* This register contains the interrupt vector written into WR2 if the Status * This register contains the interrupt vector written into WR2 if the Status
@ -839,8 +839,8 @@ no interrupts are pending, the vector is modified with V3 = 0, V2 = 1, and
V1 = 1. This register is read only through Channel B. */ V1 = 1. This register is read only through Channel B. */
UINT8 z80sio_channel::do_sioreg_rr2() UINT8 z80sio_channel::do_sioreg_rr2()
{ {
// channel B only // channel B only
return m_index == z80sio_device::CHANNEL_B ? m_rr2 : 0; return m_index == z80sio_device::CHANNEL_B ? m_rr2 : 0;
} }
@ -851,7 +851,7 @@ UINT8 z80sio_channel::do_sioreg_rr2()
UINT8 z80sio_channel::control_read() UINT8 z80sio_channel::control_read()
{ {
UINT8 data = 0; UINT8 data = 0;
UINT8 reg = m_wr0 & WR0_REGISTER_MASK; UINT8 reg = m_wr0 & WR0_REGISTER_MASK;
if (reg != 0) if (reg != 0)
{ {
@ -865,7 +865,7 @@ UINT8 z80sio_channel::control_read()
case REG_RR1_SPEC_RCV_COND: data = do_sioreg_rr1(); break; case REG_RR1_SPEC_RCV_COND: data = do_sioreg_rr1(); break;
case REG_RR2_INTERRUPT_VECT: data = do_sioreg_rr2(); break; case REG_RR2_INTERRUPT_VECT: data = do_sioreg_rr2(); break;
default: default:
logerror("Z80SIO \"%s\" Channel %c : Unsupported RRx register:%02x\n", m_owner->tag(), 'A' + m_index, reg); logerror("Z80SIO \"%s\" Channel %c : Unsupported RRx register:%02x\n", m_owner->tag(), 'A' + m_index, reg);
} }
//LOG(("Z80SIO \"%s\" Channel %c : Register R%d read '%02x'\n", m_owner->tag(), 'A' + m_index, reg, data)); //LOG(("Z80SIO \"%s\" Channel %c : Register R%d read '%02x'\n", m_owner->tag(), 'A' + m_index, reg, data));
@ -876,158 +876,158 @@ UINT8 z80sio_channel::control_read()
Handle the WR0 CRC Reset/Init bits separatelly, needed by derived devices separatelly from the commands */ Handle the WR0 CRC Reset/Init bits separatelly, needed by derived devices separatelly from the commands */
void z80sio_channel::do_sioreg_wr0_resets(UINT8 data) void z80sio_channel::do_sioreg_wr0_resets(UINT8 data)
{ {
switch (data & WR0_CRC_RESET_CODE_MASK) switch (data & WR0_CRC_RESET_CODE_MASK)
{ {
case WR0_CRC_RESET_NULL: case WR0_CRC_RESET_NULL:
LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_NULL\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_NULL\n", m_owner->tag(), 'A' + m_index));
break; break;
case WR0_CRC_RESET_RX: /* In Synchronous mode: all Os (zeros) (CCITT-O CRC-16) */ case WR0_CRC_RESET_RX: /* In Synchronous mode: all Os (zeros) (CCITT-O CRC-16) */
LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_RX - not implemented\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_RX - not implemented\n", m_owner->tag(), 'A' + m_index));
break; break;
case WR0_CRC_RESET_TX: /* In HDLC mode: all 1s (ones) (CCITT-1) */ case WR0_CRC_RESET_TX: /* In HDLC mode: all 1s (ones) (CCITT-1) */
LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_TX - not implemented\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_TX - not implemented\n", m_owner->tag(), 'A' + m_index));
break; break;
case WR0_CRC_RESET_TX_UNDERRUN: /* Resets Tx underrun/EOM bit (D6 of the SRO register) */ case WR0_CRC_RESET_TX_UNDERRUN: /* Resets Tx underrun/EOM bit (D6 of the SRO register) */
LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_TX_UNDERRUN - not implemented\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : CRC_RESET_TX_UNDERRUN - not implemented\n", m_owner->tag(), 'A' + m_index));
break; break;
default: /* Will not happen unless someone messes with the mask */ default: /* Will not happen unless someone messes with the mask */
logerror("Z80SIO \"%s\" Channel %c : %s Wrong CRC reset/init command:%02x\n", m_owner->tag(), 'A' + m_index, FUNCNAME, data & WR0_CRC_RESET_CODE_MASK); logerror("Z80SIO \"%s\" Channel %c : %s Wrong CRC reset/init command:%02x\n", m_owner->tag(), 'A' + m_index, FUNCNAME, data & WR0_CRC_RESET_CODE_MASK);
} }
} }
void z80sio_channel::do_sioreg_wr0(UINT8 data) void z80sio_channel::do_sioreg_wr0(UINT8 data)
{ {
m_wr0 = data; m_wr0 = data;
switch (data & WR0_COMMAND_MASK) switch (data & WR0_COMMAND_MASK)
{ {
case WR0_NULL: case WR0_NULL:
LOG(("Z80SIO \"%s\" Channel %c : Null\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : Null\n", m_owner->tag(), 'A' + m_index));
break; break;
case WR0_RESET_EXT_STATUS: case WR0_RESET_EXT_STATUS:
// reset external/status interrupt // reset external/status interrupt
m_rr0 &= ~(RR0_DCD | RR0_SYNC_HUNT | RR0_CTS | RR0_BREAK_ABORT); m_rr0 &= ~(RR0_DCD | RR0_SYNC_HUNT | RR0_CTS | RR0_BREAK_ABORT);
// release the latch // release the latch
m_rx_rr0_latch = 0; m_rx_rr0_latch = 0;
// update register to reflect wire values TODO: Check if this will fire new interrupts // update register to reflect wire values TODO: Check if this will fire new interrupts
if (!m_dcd) m_rr0 |= RR0_DCD; if (!m_dcd) m_rr0 |= RR0_DCD;
if (m_sync) m_rr0 |= RR0_SYNC_HUNT; if (m_sync) m_rr0 |= RR0_SYNC_HUNT;
if (m_cts) m_rr0 |= RR0_CTS; if (m_cts) m_rr0 |= RR0_CTS;
LOG(("Z80SIO \"%s\" Channel %c : Reset External/Status Interrupt\n", m_owner->tag(), 'A' + m_index));
break;
case WR0_CHANNEL_RESET:
// channel reset
LOG(("Z80SIO \"%s\" Channel %c : Channel Reset\n", m_owner->tag(), 'A' + m_index));
device_reset();
break;
case WR0_ENABLE_INT_NEXT_RX:
// enable interrupt on next receive character
LOG(("Z80SIO \"%s\" Channel %c : Enable Interrupt on Next Received Character\n", m_owner->tag(), 'A' + m_index));
m_rx_first = 1;
break;
case WR0_RESET_TX_INT:
// reset transmitter interrupt pending
LOG(("Z80SIO \"%s\" Channel %c : Reset Transmitter Interrupt Pending\n", m_owner->tag(), 'A' + m_index));
logerror("Z80SIO \"%s\" Channel %c : unsupported command: Reset Transmitter Interrupt Pending\n", m_owner->tag(), 'A' + m_index);
break;
case WR0_ERROR_RESET:
// error reset
LOG(("Z80SIO \"%s\" Channel %c : Error Reset\n", m_owner->tag(), 'A' + m_index));
m_rr1 &= ~(RR1_CRC_FRAMING_ERROR | RR1_RX_OVERRUN_ERROR | RR1_PARITY_ERROR);
break;
case WR0_RETURN_FROM_INT:
// return from interrupt
LOG(("Z80SIO \"%s\" Channel %c : Return from Interrupt\n", m_owner->tag(), 'A' + m_index));
m_uart->z80daisy_irq_reti();
break;
default:
LOG(("Z80SIO \"%s\" Channel %c : Unsupported WR0 command %02x mask %02x\n", m_owner->tag(), 'A' + m_index, data, WR0_REGISTER_MASK));
} LOG(("Z80SIO \"%s\" Channel %c : Reset External/Status Interrupt\n", m_owner->tag(), 'A' + m_index));
do_sioreg_wr0_resets(data); break;
case WR0_CHANNEL_RESET:
// channel reset
LOG(("Z80SIO \"%s\" Channel %c : Channel Reset\n", m_owner->tag(), 'A' + m_index));
device_reset();
break;
case WR0_ENABLE_INT_NEXT_RX:
// enable interrupt on next receive character
LOG(("Z80SIO \"%s\" Channel %c : Enable Interrupt on Next Received Character\n", m_owner->tag(), 'A' + m_index));
m_rx_first = 1;
break;
case WR0_RESET_TX_INT:
// reset transmitter interrupt pending
LOG(("Z80SIO \"%s\" Channel %c : Reset Transmitter Interrupt Pending\n", m_owner->tag(), 'A' + m_index));
logerror("Z80SIO \"%s\" Channel %c : unsupported command: Reset Transmitter Interrupt Pending\n", m_owner->tag(), 'A' + m_index);
break;
case WR0_ERROR_RESET:
// error reset
LOG(("Z80SIO \"%s\" Channel %c : Error Reset\n", m_owner->tag(), 'A' + m_index));
m_rr1 &= ~(RR1_CRC_FRAMING_ERROR | RR1_RX_OVERRUN_ERROR | RR1_PARITY_ERROR);
break;
case WR0_RETURN_FROM_INT:
// return from interrupt
LOG(("Z80SIO \"%s\" Channel %c : Return from Interrupt\n", m_owner->tag(), 'A' + m_index));
m_uart->z80daisy_irq_reti();
break;
default:
LOG(("Z80SIO \"%s\" Channel %c : Unsupported WR0 command %02x mask %02x\n", m_owner->tag(), 'A' + m_index, data, WR0_REGISTER_MASK));
}
do_sioreg_wr0_resets(data);
} }
void z80sio_channel::do_sioreg_wr1(UINT8 data) void z80sio_channel::do_sioreg_wr1(UINT8 data)
{ {
/* TODO: implement vector modifications when WR1 bit D2 is changed */ /* TODO: implement vector modifications when WR1 bit D2 is changed */
m_wr1 = data; m_wr1 = data;
LOG(("Z80SIO \"%s\" Channel %c : External Interrupt Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_EXT_INT_ENABLE) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : External Interrupt Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_EXT_INT_ENABLE) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Transmit Interrupt Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_TX_INT_ENABLE) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Transmit Interrupt Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_TX_INT_ENABLE) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Status Affects Vector %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_STATUS_VECTOR) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Status Affects Vector %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_STATUS_VECTOR) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Wait/Ready Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_WRDY_ENABLE) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Wait/Ready Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR1_WRDY_ENABLE) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Wait/Ready Function %s\n", m_owner->tag(), 'A' + m_index, (data & WR1_WRDY_FUNCTION) ? "Ready" : "Wait")); LOG(("Z80SIO \"%s\" Channel %c : Wait/Ready Function %s\n", m_owner->tag(), 'A' + m_index, (data & WR1_WRDY_FUNCTION) ? "Ready" : "Wait"));
LOG(("Z80SIO \"%s\" Channel %c : Wait/Ready on %s\n", m_owner->tag(), 'A' + m_index, (data & WR1_WRDY_ON_RX_TX) ? "Receive" : "Transmit")); LOG(("Z80SIO \"%s\" Channel %c : Wait/Ready on %s\n", m_owner->tag(), 'A' + m_index, (data & WR1_WRDY_ON_RX_TX) ? "Receive" : "Transmit"));
switch (data & WR1_RX_INT_MODE_MASK) switch (data & WR1_RX_INT_MODE_MASK)
{ {
case WR1_RX_INT_DISABLE: case WR1_RX_INT_DISABLE:
LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt Disabled\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt Disabled\n", m_owner->tag(), 'A' + m_index));
break; break;
case WR1_RX_INT_FIRST: case WR1_RX_INT_FIRST:
LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt on First Character\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt on First Character\n", m_owner->tag(), 'A' + m_index));
break; break;
case WR1_RX_INT_ALL_PARITY: case WR1_RX_INT_ALL_PARITY:
LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt on All Characters, Parity Affects Vector\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt on All Characters, Parity Affects Vector\n", m_owner->tag(), 'A' + m_index));
break; break;
case WR1_RX_INT_ALL: case WR1_RX_INT_ALL:
LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt on All Characters\n", m_owner->tag(), 'A' + m_index)); LOG(("Z80SIO \"%s\" Channel %c : Receiver Interrupt on All Characters\n", m_owner->tag(), 'A' + m_index));
break; break;
} }
} }
void z80sio_channel::do_sioreg_wr2(UINT8 data) void z80sio_channel::do_sioreg_wr2(UINT8 data)
{ {
m_wr2 = data; m_wr2 = data;
if (m_index == z80sio_device::CHANNEL_B) if (m_index == z80sio_device::CHANNEL_B)
{ {
if (m_wr1 & z80sio_channel::WR1_STATUS_VECTOR) if (m_wr1 & z80sio_channel::WR1_STATUS_VECTOR)
m_rr2 = ( m_rr2 & 0x0e ) | ( m_wr2 & 0xF1); m_rr2 = ( m_rr2 & 0x0e ) | ( m_wr2 & 0xF1);
else else
m_rr2 = m_wr2; m_rr2 = m_wr2;
} }
m_uart->check_interrupts(); m_uart->check_interrupts();
LOG(("Z80SIO \"%s\" Channel %c : Interrupt Vector %02x\n", m_owner->tag(), 'A' + m_index, data)); LOG(("Z80SIO \"%s\" Channel %c : Interrupt Vector %02x\n", m_owner->tag(), 'A' + m_index, data));
} }
void z80sio_channel::do_sioreg_wr3(UINT8 data) void z80sio_channel::do_sioreg_wr3(UINT8 data)
{ {
m_wr3 = data; m_wr3 = data;
LOG(("Z80SIO \"%s\" Channel %c : Receiver Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR3_RX_ENABLE) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Receiver Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR3_RX_ENABLE) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Auto Enables %u\n", m_owner->tag(), 'A' + m_index, (data & WR3_AUTO_ENABLES) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Auto Enables %u\n", m_owner->tag(), 'A' + m_index, (data & WR3_AUTO_ENABLES) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Receiver Bits/Character %u\n", m_owner->tag(), 'A' + m_index, get_rx_word_length())); LOG(("Z80SIO \"%s\" Channel %c : Receiver Bits/Character %u\n", m_owner->tag(), 'A' + m_index, get_rx_word_length()));
} }
void z80sio_channel::do_sioreg_wr4(UINT8 data) void z80sio_channel::do_sioreg_wr4(UINT8 data)
{ {
m_wr4 = data; m_wr4 = data;
LOG(("Z80SIO \"%s\" Channel %c : Parity Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR4_PARITY_ENABLE) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Parity Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR4_PARITY_ENABLE) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Parity %s\n", m_owner->tag(), 'A' + m_index, (data & WR4_PARITY_EVEN) ? "Even" : "Odd")); LOG(("Z80SIO \"%s\" Channel %c : Parity %s\n", m_owner->tag(), 'A' + m_index, (data & WR4_PARITY_EVEN) ? "Even" : "Odd"));
LOG(("Z80SIO \"%s\" Channel %c : Stop Bits %s\n", m_owner->tag(), 'A' + m_index, stop_bits_tostring(get_stop_bits()))); LOG(("Z80SIO \"%s\" Channel %c : Stop Bits %s\n", m_owner->tag(), 'A' + m_index, stop_bits_tostring(get_stop_bits())));
LOG(("Z80SIO \"%s\" Channel %c : Clock Mode %uX\n", m_owner->tag(), 'A' + m_index, get_clock_mode())); LOG(("Z80SIO \"%s\" Channel %c : Clock Mode %uX\n", m_owner->tag(), 'A' + m_index, get_clock_mode()));
} }
void z80sio_channel::do_sioreg_wr5(UINT8 data) void z80sio_channel::do_sioreg_wr5(UINT8 data)
{ {
m_wr5 = data; m_wr5 = data;
LOG(("Z80SIO \"%s\" Channel %c : Transmitter Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_TX_ENABLE) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Transmitter Enable %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_TX_ENABLE) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Transmitter Bits/Character %u\n", m_owner->tag(), 'A' + m_index, get_tx_word_length())); LOG(("Z80SIO \"%s\" Channel %c : Transmitter Bits/Character %u\n", m_owner->tag(), 'A' + m_index, get_tx_word_length()));
LOG(("Z80SIO \"%s\" Channel %c : Send Break %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_SEND_BREAK) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Send Break %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_SEND_BREAK) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Request to Send %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_RTS) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Request to Send %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_RTS) ? 1 : 0));
LOG(("Z80SIO \"%s\" Channel %c : Data Terminal Ready %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_DTR) ? 1 : 0)); LOG(("Z80SIO \"%s\" Channel %c : Data Terminal Ready %u\n", m_owner->tag(), 'A' + m_index, (data & WR5_DTR) ? 1 : 0));
} }
void z80sio_channel::do_sioreg_wr6(UINT8 data) void z80sio_channel::do_sioreg_wr6(UINT8 data)
{ {
LOG(("Z80SIO \"%s\" Channel %c : Transmit Sync %02x\n", m_owner->tag(), 'A' + m_index, data)); LOG(("Z80SIO \"%s\" Channel %c : Transmit Sync %02x\n", m_owner->tag(), 'A' + m_index, data));
m_sync = (m_sync & 0xff00) | data; m_sync = (m_sync & 0xff00) | data;
} }
void z80sio_channel::do_sioreg_wr7(UINT8 data) void z80sio_channel::do_sioreg_wr7(UINT8 data)
{ {
LOG(("Z80SIO \"%s\" Channel %c : Receive Sync %02x\n", m_owner->tag(), 'A' + m_index, data)); LOG(("Z80SIO \"%s\" Channel %c : Receive Sync %02x\n", m_owner->tag(), 'A' + m_index, data));
m_sync = (data << 8) | (m_sync & 0xff); m_sync = (data << 8) | (m_sync & 0xff);
} }
//------------------------------------------------- //-------------------------------------------------
@ -1036,7 +1036,7 @@ void z80sio_channel::do_sioreg_wr7(UINT8 data)
void z80sio_channel::control_write(UINT8 data) void z80sio_channel::control_write(UINT8 data)
{ {
UINT8 reg = m_wr0 & WR0_REGISTER_MASK; UINT8 reg = m_wr0 & WR0_REGISTER_MASK;
if (reg != 0) if (reg != 0)
{ {
@ -1057,7 +1057,7 @@ void z80sio_channel::control_write(UINT8 data)
case REG_WR6_SYNC_OR_SDLC_A: do_sioreg_wr6(data); break; case REG_WR6_SYNC_OR_SDLC_A: do_sioreg_wr6(data); break;
case REG_WR7_SYNC_OR_SDLC_F: do_sioreg_wr7(data); break; case REG_WR7_SYNC_OR_SDLC_F: do_sioreg_wr7(data); break;
default: default:
logerror("Z80SIO \"%s\" Channel %c : Unsupported WRx register:%02x\n", m_owner->tag(), 'A' + m_index, reg); logerror("Z80SIO \"%s\" Channel %c : Unsupported WRx register:%02x\n", m_owner->tag(), 'A' + m_index, reg);
} }
} }
@ -1142,9 +1142,9 @@ void z80sio_channel::receive_data(UINT8 data)
{ {
case WR1_RX_INT_FIRST: case WR1_RX_INT_FIRST:
if (!m_rx_first) if (!m_rx_first)
{ {
m_uart->trigger_interrupt(m_index, INT_SPECIAL); m_uart->trigger_interrupt(m_index, INT_SPECIAL);
} }
break; break;
case WR1_RX_INT_ALL_PARITY: case WR1_RX_INT_ALL_PARITY:
@ -1347,7 +1347,7 @@ void z80sio_channel::update_serial()
stop_bits_t stop_bits = get_stop_bits(); stop_bits_t stop_bits = get_stop_bits();
parity_t parity; parity_t parity;
LOG(("Z80SIO update_serial\n")); LOG(("Z80SIO update_serial\n"));
if (m_wr4 & WR4_PARITY_ENABLE) if (m_wr4 & WR4_PARITY_ENABLE)
{ {

View File

@ -10,44 +10,44 @@
D3 2| |39 D2 : |39 D2 : |39 D2 D3 2| |39 D2 : |39 D2 : |39 D2
D5 3| |38 D4 : |38 D4 : |38 D4 D5 3| |38 D4 : |38 D4 : |38 D4
D7 4| |37 D6 : |37 D6 : |37 D6 D7 4| |37 D6 : |37 D6 : |37 D6
_INT 5| |36 _IORQ : |36 _IORQ : |36 _IORQ _INT 5| |36 _IORQ : |36 _IORQ : |36 _IORQ
IEO 6| |35 _CE : |35 _CE : |35 _CE IEO 6| |35 _CE : |35 _CE : |35 _CE
IEI 7| |34 B/_A : |34 B/_A : |34 B/_A IEI 7| |34 B/_A : |34 B/_A : |34 B/_A
_M1 8| |33 C/_D : |33 C/_D : |33 C/_D _M1 8| |33 C/_D : |33 C/_D : |33 C/_D
VDD 9| DIP40 |32 _RD : DIP40 |32 _RD : DIP40 |32 _RD VDD 9| DIP40 |32 _RD : DIP40 |32 _RD : DIP40 |32 _RD
_W//RDYA 10| Z80 |31 GND : Z80 |31 GND : Z80 |31 GND _W//RDYA 10| Z80 |31 GND : Z80 |31 GND : Z80 |31 GND
_SYNCA 11| SIO/0 |30 _W/_RDYB: SIO/1 |30 _W/_RDYB: SIO/2 |30 _W/_RDYB _SYNCA 11| SIO/0 |30 _W/_RDYB: SIO/1 |30 _W/_RDYB: SIO/2 |30 _W/_RDYB
RxDA 12| |29 _SYNCB : |29 _SYNCB : |29 _SYNCB RxDA 12| |29 _SYNCB : |29 _SYNCB : |29 _SYNCB
_RxCA 13| |28 RxDB : |28 RxDB : |28 _RxCB _RxCA 13| |28 RxDB : |28 RxDB : |28 _RxCB
_TxCA 14| |27 _RxTxCB : |27 _RxCB : |27 _TxCB _TxCA 14| |27 _RxTxCB : |27 _RxCB : |27 _TxCB
TxDA 15| |26 TxDB : |26 _TxCB : |26 TxDB TxDA 15| |26 TxDB : |26 _TxCB : |26 TxDB
_DTRA 16| |25 _DTRB : |25 TxD_B : |25 _DTRB _DTRA 16| |25 _DTRB : |25 TxD_B : |25 _DTRB
_RTSA 17| |24 _RTSB : |24 _RTSB : |24 _RTSB _RTSA 17| |24 _RTSB : |24 _RTSB : |24 _RTSB
_CTSA 18| |23 _CTSB : |23 _CTSB : |23 _CTSB _CTSA 18| |23 _CTSB : |23 _CTSB : |23 _CTSB
_DCDA 19| |22 _DCDB : |22 _DCDB : |22 _DCDB _DCDA 19| |22 _DCDB : |22 _DCDB : |22 _DCDB
CLK 20|_____________|21 _RESET :_______|21 _RESET :_______|21 _RESET CLK 20|_____________|21 _RESET :_______|21 _RESET :_______|21 _RESET
*I *I *I *I
*I N O *I O *I N O *I O
N D D D D / D D D D R N D D D D D D D D R*C N D D D D / D D D D R N D D D D D D D D R*C
T 7 5 3 1 C 0 2 4 6 Q T 7 5 3 1 0 2 4 6 Q E T 7 5 3 1 C 0 2 4 6 Q T 7 5 3 1 0 2 4 6 Q E
+----------------------+ +----------------------+ +----------------------+ +----------------------+
IEI|34 22| *CE IEI|6 5 4 3 2 1 44 42 40|B/ *A IEI|34 22| *CE IEI|6 5 4 3 2 1 44 42 40|B/ *A
IEO|35 21| B/ *A IEO|8 43 41 |C/ *D IEO|35 21| B/ *A IEO|8 43 41 |C/ *D
*M1| | C/ *D *M1|9 37|*RD *M1| | C/ *D *M1|9 37|*RD
+5v| | *RD +5V|10 36|GND +5v| | *RD +5V|10 36|GND
*W/ *RDYA| QFP44 | GND *W/ *RDYA|11 PLCC44 35|*W/ *RDYB *W/ *RDYA| QFP44 | GND *W/ *RDYA|11 PLCC44 35|*W/ *RDYB
N/C| Z80 SIO/3 | N/C *SYNCA|12 Z80 SIO/4 34|*SYNCB N/C| Z80 SIO/3 | N/C *SYNCA|12 Z80 SIO/4 34|*SYNCB
*SYNCA| Z804C43 | *W/ *RDYB RxDA|13 33|RxDB *SYNCA| Z804C43 | *W/ *RDYB RxDA|13 33|RxDB
RxDA| | *SYNCB *RxCA|14 32|*RxCB RxDA| | *SYNCB *RxCA|14 32|*RxCB
*RxCA|42 | RxDB *TxCA|15 31|*TxCB *RxCA|42 | RxDB *TxCA|15 31|*TxCB
*TxCA|43 1 1 | *RxCB TxDA| 19 21 23 25 30|TxDB *TxCA|43 1 1 | *RxCB TxDA| 19 21 23 25 30|TxDB
TxDA`. 2 3 4 5 6 7 8 9 0 1 | *TxCB N/C|18 20 22 24 26 29|N/C TxDA`. 2 3 4 5 6 7 8 9 0 1 | *TxCB N/C|18 20 22 24 26 29|N/C
`--------------------+ +----------------------+ `--------------------+ +----------------------+
*D*R*C*D C*R*D*C*R*D*T *D*R*C*D C*R*D*C*R*D N *D*R*C*D C*R*D*C*R*D*T *D*R*C*D C*R*D*C*R*D N
T T T C L E C*T T T x T T T C L E C T T T / T T T C L E C*T T T x T T T C L E C T T T /
R S S D K S D S S R D R S S D K S D S S R C R S S D K S D S S R D R S S D K S D S S R C
A A A A E B B B B B A A A A E B B B B A A A A E B B B B B A A A A E B B B B
T T T T
***************************************************************************/ ***************************************************************************/
@ -124,7 +124,7 @@
class z80sio_device; class z80sio_device;
class z80sio_channel : public device_t, class z80sio_channel : public device_t,
public device_serial_interface public device_serial_interface
{ {
friend class z80sio_device; friend class z80sio_device;
@ -142,21 +142,21 @@ public:
virtual void rcv_callback(); virtual void rcv_callback();
virtual void rcv_complete(); virtual void rcv_complete();
// read register handlers // read register handlers
UINT8 do_sioreg_rr0(); UINT8 do_sioreg_rr0();
UINT8 do_sioreg_rr1(); UINT8 do_sioreg_rr1();
UINT8 do_sioreg_rr2(); UINT8 do_sioreg_rr2();
// write register handlers // write register handlers
void do_sioreg_wr0(UINT8 data); void do_sioreg_wr0(UINT8 data);
void do_sioreg_wr0_resets(UINT8 data); void do_sioreg_wr0_resets(UINT8 data);
void do_sioreg_wr1(UINT8 data); void do_sioreg_wr1(UINT8 data);
void do_sioreg_wr2(UINT8 data); void do_sioreg_wr2(UINT8 data);
void do_sioreg_wr3(UINT8 data); void do_sioreg_wr3(UINT8 data);
void do_sioreg_wr4(UINT8 data); void do_sioreg_wr4(UINT8 data);
void do_sioreg_wr5(UINT8 data); void do_sioreg_wr5(UINT8 data);
void do_sioreg_wr6(UINT8 data); void do_sioreg_wr6(UINT8 data);
void do_sioreg_wr7(UINT8 data); void do_sioreg_wr7(UINT8 data);
UINT8 control_read(); UINT8 control_read();
void control_write(UINT8 data); void control_write(UINT8 data);
@ -178,19 +178,19 @@ public:
int m_txc; int m_txc;
// Register state // Register state
// read registers enum // read registers enum
UINT8 m_rr0; // REG_RR0_STATUS UINT8 m_rr0; // REG_RR0_STATUS
UINT8 m_rr1; // REG_RR1_SPEC_RCV_COND UINT8 m_rr1; // REG_RR1_SPEC_RCV_COND
UINT8 m_rr2; // REG_RR2_INTERRUPT_VECT UINT8 m_rr2; // REG_RR2_INTERRUPT_VECT
// write registers enum // write registers enum
UINT8 m_wr0; // REG_WR0_COMMAND_REGPT UINT8 m_wr0; // REG_WR0_COMMAND_REGPT
UINT8 m_wr1; // REG_WR1_INT_DMA_ENABLE UINT8 m_wr1; // REG_WR1_INT_DMA_ENABLE
UINT8 m_wr2; // REG_WR2_INT_VECTOR UINT8 m_wr2; // REG_WR2_INT_VECTOR
UINT8 m_wr3; // REG_WR3_RX_CONTROL UINT8 m_wr3; // REG_WR3_RX_CONTROL
UINT8 m_wr4; // REG_WR4_RX_TX_MODES UINT8 m_wr4; // REG_WR4_RX_TX_MODES
UINT8 m_wr5; // REG_WR5_TX_CONTROL UINT8 m_wr5; // REG_WR5_TX_CONTROL
UINT8 m_wr6; // REG_WR6_SYNC_OR_SDLC_A UINT8 m_wr6; // REG_WR6_SYNC_OR_SDLC_A
UINT8 m_wr7; // REG_WR7_SYNC_OR_SDLC_F UINT8 m_wr7; // REG_WR7_SYNC_OR_SDLC_F
int m_variant; // Set in device int m_variant; // Set in device
@ -203,26 +203,26 @@ protected:
INT_SPECIAL INT_SPECIAL
}; };
// Read registers // Read registers
enum enum
{ {
REG_RR0_STATUS = 0, REG_RR0_STATUS = 0,
REG_RR1_SPEC_RCV_COND = 1, REG_RR1_SPEC_RCV_COND = 1,
REG_RR2_INTERRUPT_VECT = 2, REG_RR2_INTERRUPT_VECT = 2,
}; };
// Write registers // Write registers
enum enum
{ {
REG_WR0_COMMAND_REGPT = 0, REG_WR0_COMMAND_REGPT = 0,
REG_WR1_INT_DMA_ENABLE = 1, REG_WR1_INT_DMA_ENABLE = 1,
REG_WR2_INT_VECTOR = 2, REG_WR2_INT_VECTOR = 2,
REG_WR3_RX_CONTROL = 3, REG_WR3_RX_CONTROL = 3,
REG_WR4_RX_TX_MODES = 4, REG_WR4_RX_TX_MODES = 4,
REG_WR5_TX_CONTROL = 5, REG_WR5_TX_CONTROL = 5,
REG_WR6_SYNC_OR_SDLC_A = 6, REG_WR6_SYNC_OR_SDLC_A = 6,
REG_WR7_SYNC_OR_SDLC_F = 7, REG_WR7_SYNC_OR_SDLC_F = 7,
}; };
enum enum
{ {
@ -233,7 +233,7 @@ protected:
RR0_SYNC_HUNT = 0x10, RR0_SYNC_HUNT = 0x10,
RR0_CTS = 0x20, RR0_CTS = 0x20,
RR0_TX_UNDERRUN = 0x40, RR0_TX_UNDERRUN = 0x40,
RR0_BREAK_ABORT = 0x80 RR0_BREAK_ABORT = 0x80
}; };
enum enum
@ -243,16 +243,16 @@ protected:
RR1_PARITY_ERROR = 0x10, RR1_PARITY_ERROR = 0x10,
RR1_RX_OVERRUN_ERROR = 0x20, RR1_RX_OVERRUN_ERROR = 0x20,
RR1_CRC_FRAMING_ERROR = 0x40, RR1_CRC_FRAMING_ERROR = 0x40,
RR1_END_OF_FRAME = 0x80 RR1_END_OF_FRAME = 0x80
}; };
enum enum
{ // TODO: overload SIO functionality { // TODO: overload SIO functionality
RR2_INT_VECTOR_MASK = 0xff, // SCC channel A, SIO channel B (special case) RR2_INT_VECTOR_MASK = 0xff, // SCC channel A, SIO channel B (special case)
RR2_INT_VECTOR_V1 = 0x02, // SIO (special case) /SCC Channel B RR2_INT_VECTOR_V1 = 0x02, // SIO (special case) /SCC Channel B
RR2_INT_VECTOR_V2 = 0x04, // SIO (special case) /SCC Channel B RR2_INT_VECTOR_V2 = 0x04, // SIO (special case) /SCC Channel B
RR2_INT_VECTOR_V3 = 0x08 // SIO (special case) /SCC Channel B RR2_INT_VECTOR_V3 = 0x08 // SIO (special case) /SCC Channel B
}; };
enum enum
{ {
@ -356,7 +356,7 @@ protected:
}; };
void update_serial(); void update_serial();
void update_rts(); void update_rts();
void set_dtr(int state); void set_dtr(int state);
void set_rts(int state); void set_rts(int state);
@ -399,7 +399,7 @@ protected:
// ======================> z80sio_device // ======================> z80sio_device
class z80sio_device : public device_t, class z80sio_device : public device_t,
public device_z80daisy_interface public device_z80daisy_interface
{ {
friend class z80sio_channel; friend class z80sio_channel;

View File

@ -67,4 +67,4 @@ void sega_315_5641_pcm_device::device_reset()
m_fifo_write = 0x00; m_fifo_write = 0x00;
upd775x_device::device_reset(); upd775x_device::device_reset();
} }

View File

@ -16,9 +16,9 @@ public:
DECLARE_WRITE8_MEMBER(port_w); DECLARE_WRITE8_MEMBER(port_w);
UINT8 m_fifo_data[0x40]; UINT8 m_fifo_data[0x40];
UINT8 m_fifo_read; // last read offset (will read in m_fifo_read+1) UINT8 m_fifo_read; // last read offset (will read in m_fifo_read+1)
UINT8 m_fifo_write; // write offset UINT8 m_fifo_write; // write offset
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start(); virtual void device_start();
@ -27,4 +27,4 @@ protected:
}; };
extern const device_type SEGA_315_5641_PCM; extern const device_type SEGA_315_5641_PCM;

View File

@ -13,10 +13,10 @@
Supports 8-bit linear and 8-bit muLaw samples Supports 8-bit linear and 8-bit muLaw samples
Output: digital, 16 bit, 4 channels Output: digital, 16 bit, 4 channels
Output sample rate is the input clock / (288 * 2). Output sample rate is the input clock / (288 * 2).
superctr: The clock divider appears to be configurable for each system. superctr: The clock divider appears to be configurable for each system.
Below is a list of the divider values followed by the systems that use it. Below is a list of the divider values followed by the systems that use it.
* 228: System 11. * 228: System 11.
* 288: System 22, Super 22, NB-1/2, ND-1, FL. * 288: System 22, Super 22, NB-1/2, ND-1, FL.
* 296: System 23, Super 23. * 296: System 23, Super 23.

View File

@ -109,7 +109,7 @@
27/06/2012: Michael Zapf 27/06/2012: Michael Zapf
Converted to modern device, legacy devices were gradually removed afterwards. Converted to modern device, legacy devices were gradually removed afterwards.
16/09/2015: Lord Nightmare 16/09/2015: Lord Nightmare
Fix PSG chips to have volume reg inited on reset to 0x0 based on tests by Fix PSG chips to have volume reg inited on reset to 0x0 based on tests by
ValleyBell. Made Sega PSG chips start up with register 0x3 selected (volume ValleyBell. Made Sega PSG chips start up with register 0x3 selected (volume

View File

@ -525,9 +525,9 @@ void tms5110_device::process(INT16 *buffer, unsigned int size)
fprintf(stderr,"K%d:%04d ", i+1, m_current_k[i]); fprintf(stderr,"K%d:%04d ", i+1, m_current_k[i]);
fprintf(stderr,"Out:%06d ", this_sample); fprintf(stderr,"Out:%06d ", this_sample);
//#ifdef PERFECT_INTERPOLATION_HACK //#ifdef PERFECT_INTERPOLATION_HACK
// fprintf(stderr,"%d%d%d%d",m_old_zpar,m_zpar,m_old_uv_zpar,m_uv_zpar); // fprintf(stderr,"%d%d%d%d",m_old_zpar,m_zpar,m_old_uv_zpar,m_uv_zpar);
//#else //#else
// fprintf(stderr,"x%dx%d",m_zpar,m_uv_zpar); // fprintf(stderr,"x%dx%d",m_zpar,m_uv_zpar);
//#endif //#endif
fprintf(stderr,"\n"); fprintf(stderr,"\n");
#endif #endif

View File

@ -568,7 +568,7 @@ NOTE FROM DECAP: immediately to the left of each of the K1,2,3,4,5,and 6
patent 4,335,277. They are likely related to the multiplicative interpolator patent 4,335,277. They are likely related to the multiplicative interpolator
described in us patent 4,419,540; whether the 5200/2501E and the 5220 or 5220C described in us patent 4,419,540; whether the 5200/2501E and the 5220 or 5220C
actually implement this interpolator or not is unclear. This interpolator actually implement this interpolator or not is unclear. This interpolator
seems intended for chips with variable frame rate, so if it exists at all, seems intended for chips with variable frame rate, so if it exists at all,
it may only exist on the TMS/TSP5220C and CD2501ECD. it may only exist on the TMS/TSP5220C and CD2501ECD.
*/ */

View File

@ -919,9 +919,9 @@ void tms5220_device::process(INT16 *buffer, unsigned int size)
fprintf(stderr,"K%d:%04d ", i+1, m_current_k[i]); fprintf(stderr,"K%d:%04d ", i+1, m_current_k[i]);
fprintf(stderr,"Out:%06d ", this_sample); fprintf(stderr,"Out:%06d ", this_sample);
//#ifdef PERFECT_INTERPOLATION_HACK //#ifdef PERFECT_INTERPOLATION_HACK
// fprintf(stderr,"%d%d%d%d",m_old_zpar,m_zpar,m_old_uv_zpar,m_uv_zpar); // fprintf(stderr,"%d%d%d%d",m_old_zpar,m_zpar,m_old_uv_zpar,m_uv_zpar);
//#else //#else
// fprintf(stderr,"x%dx%d",m_zpar,m_uv_zpar); // fprintf(stderr,"x%dx%d",m_zpar,m_uv_zpar);
//#endif //#endif
fprintf(stderr,"\n"); fprintf(stderr,"\n");
#endif #endif

View File

@ -86,8 +86,8 @@ int gregorian_days_in_month(int month, int year)
assert(month >= 1 && month <= 12); assert(month >= 1 && month <= 12);
int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
days[1] += gregorian_is_leap_year(year) ? 1 : 0; days[1] += gregorian_is_leap_year(year) ? 1 : 0;
return days[month-1]; return days[month-1];
} }

View File

@ -361,9 +361,9 @@ anteateruk // (c) 1983 Free Enterprise Games
rescue // (c) 1982 Stern rescue // (c) 1982 Stern
rescueb // (c) Videl Games (Rescue bootleg) rescueb // (c) Videl Games (Rescue bootleg)
aponow // bootleg aponow // bootleg
rescuefe // bootleg rescuefe // bootleg
minefld // (c) 1983 Stern minefld // (c) 1983 Stern
minefldfe // bootleg minefldfe // bootleg
losttomb // (c) 1982 Stern losttomb // (c) 1982 Stern
losttombh // (c) 1982 Stern losttombh // (c) 1982 Stern
superbon // bootleg superbon // bootleg
@ -846,7 +846,7 @@ genpeitd // (c) 1986
rthunder // (c) 1986 rthunder // (c) 1986
rthunder2 // (c) 1986 rthunder2 // (c) 1986
rthunder1 // (c) 1986 rthunder1 // (c) 1986
rthunder0 // (c) 1986 rthunder0 // (c) 1986
wndrmomo // (c) 1987 wndrmomo // (c) 1987
// Thunder Ceptor HW // Thunder Ceptor HW
@ -4570,8 +4570,8 @@ enduror // (c) 1985 (FD1089B)
enduror1 // (c) 1985 (FD1089B) enduror1 // (c) 1985 (FD1089B)
endurob2 // (c) 1985 (Beta bootleg) endurob2 // (c) 1985 (Beta bootleg)
endurobl // (c) 1985 (Herb bootleg) endurobl // (c) 1985 (Herb bootleg)
endurord // bootleg endurord // bootleg
enduror1d // bootleg enduror1d // bootleg
hangon // (c) 1985 (Rev A) hangon // (c) 1985 (Rev A)
hangon1 // (c) 1985 hangon1 // (c) 1985
hangon2 // (c) 1985 hangon2 // (c) 1985
@ -4863,11 +4863,11 @@ toutrun3 // 1987 (FD1094)
toutrun2 // 1987 (FD1094) toutrun2 // 1987 (FD1094)
toutrun1 // 1987 (FD1094) toutrun1 // 1987 (FD1094)
toutrunj1 // 1987 (FD1094) toutrunj1 // 1987 (FD1094)
toutrund // bootleg toutrund // bootleg
toutrunjd // bootleg toutrunjd // bootleg
toutrun3d // bootleg toutrun3d // bootleg
toutrunj1d // bootleg toutrunj1d // bootleg
shangon3d // bootleg shangon3d // bootleg
// X Board // X Board
aburner // 1987.07 After Burner (Japan) aburner // 1987.07 After Burner (Japan)
@ -4892,11 +4892,11 @@ rachero // 1990.?? Racing Hero (World, FD1094)
abcop // 1990.?? A.B.Cop (World, FD1094) abcop // 1990.?? A.B.Cop (World, FD1094)
abcopj // 1991.01 A.B.Cop (Japan, FD1094) abcopj // 1991.01 A.B.Cop (Japan, FD1094)
gpriderjs // 1990.10 GP Rider (Japan, FD1094) gpriderjs // 1990.10 GP Rider (Japan, FD1094)
gpriderj // as above gpriderj // as above
gpriders // 1990.?? GP Rider (World, FD1094) gpriders // 1990.?? GP Rider (World, FD1094)
gprider // as above gprider // as above
gpriderus // 1990.12 GP Rider (US, FD1094) gpriderus // 1990.12 GP Rider (US, FD1094)
gprideru // as above gprideru // as above
rascot // 1991.?? Royal Ascot (Japan) rascot // 1991.?? Royal Ascot (Japan)
// decrypted X-Board bootlegs // decrypted X-Board bootlegs
@ -6396,7 +6396,7 @@ wc90t // (c) 1989 Tecmo
wc90b1 // bootleg wc90b1 // bootleg
wc90b2 // bootleg wc90b2 // bootleg
wc90ba // bootleg wc90ba // bootleg
pac90 // bootleg pac90 // bootleg
spbactn // 9002 - (c) 1991 Tecmo spbactn // 9002 - (c) 1991 Tecmo
spbactnj // 9002 - (c) 1991 Tecmo spbactnj // 9002 - (c) 1991 Tecmo
spbactnp // prototype spbactnp // prototype
@ -6441,7 +6441,7 @@ trackfldc // GX361 (c) 1983 + Centuri license
trackfldnz // (c) 1982 Goldberg Enterprizes Inc. trackfldnz // (c) 1982 Goldberg Enterprizes Inc.
hyprolym // GX361 (c) 1983 hyprolym // GX361 (c) 1983
hyprolymb // bootleg hyprolymb // bootleg
hyprolymba // bootleg hyprolymba // bootleg
atlantol // bootleg atlantol // bootleg
wizzquiz // (c) 1985 Konami wizzquiz // (c) 1985 Konami
wizzquiza // (c) 1985 Zilec-Zenitone wizzquiza // (c) 1985 Zilec-Zenitone
@ -10033,7 +10033,7 @@ amazonia // (c) 1999
fruitpar // (c) 200? fruitpar // (c) 200?
zhongguo // (c) 2000 zhongguo // (c) 2000
sdwx // (c) 2002 sdwx // (c) 2002
amazoni2 // (c) 2002 amazoni2 // (c) 2002
sddz // (c) 200? sddz // (c) 200?
lhzb3 // (c) 200? lhzb3 // (c) 200?
lhzb4 // (c) 200? lhzb4 // (c) 200?
@ -32323,4 +32323,3 @@ dumpump
3lilpigs 3lilpigs
wackygtr // Wacky Gator wackygtr // Wacky Gator

View File

@ -68,7 +68,7 @@ public:
/* misc */ /* misc */
int m_nmimask; // zerotrgt only int m_nmimask; // zerotrgt only
bool m_sub_nmimask; // counter steer only bool m_sub_nmimask; // counter steer only
/* devices */ /* devices */
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
@ -619,8 +619,8 @@ WRITE8_MEMBER(cntsteer_state::nmimask_w)
INTERRUPT_GEN_MEMBER(cntsteer_state::subcpu_vblank_irq) INTERRUPT_GEN_MEMBER(cntsteer_state::subcpu_vblank_irq)
{ {
// TODO: hack for bus request: DP is enabled with 0xff only during POST, and disabled once that critical operations are performed. // TODO: hack for bus request: DP is enabled with 0xff only during POST, and disabled once that critical operations are performed.
// That's my best guess so far about how Slave is supposed to stop execution on Master CPU, the lack of any realistic write // That's my best guess so far about how Slave is supposed to stop execution on Master CPU, the lack of any realistic write
// between these operations brings us to this. // between these operations brings us to this.
// Game currently returns error on MIX CPU RAM because halt-ing BACK CPU doesn't happen when it should of course ... // Game currently returns error on MIX CPU RAM because halt-ing BACK CPU doesn't happen when it should of course ...
UINT8 dp_r = (UINT8)device.state().state_int(M6809_DP); UINT8 dp_r = (UINT8)device.state().state_int(M6809_DP);

View File

@ -8,7 +8,7 @@
special thanks to Guru for references and HW advices special thanks to Guru for references and HW advices
Games on this system include Cool Riders and Aqua Stage. Games on this system include Cool Riders and Aqua Stage.
This system is interesting in that it makes use of an RLE compression scheme, which This system is interesting in that it makes use of an RLE compression scheme, which
is not something common for Sega hardware, there is a patent for it ( 6,141,122 ) is not something common for Sega hardware, there is a patent for it ( 6,141,122 )
http://www.google.com/patents/US6141122 http://www.google.com/patents/US6141122

View File

@ -225,7 +225,7 @@ Notes:
Night Slashers Night Slashers
Data East, 1993 Data East, 1993
DE-0395-1 DEC-22VO DE-0395-1 DEC-22VO
|-----------------------------------------------------| |-----------------------------------------------------|
| TA8205AH 6164 |-----| 2M-16M* MBH-07| | TA8205AH 6164 |-----| 2M-16M* MBH-07|

View File

@ -252,7 +252,7 @@ static const gfx_layout tile16x16_layout =
{ 0, 8, 16, 24 }, { 0, 8, 16, 24 },
{ 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7 }, { 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 }, 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
64*16 /* every sprite takes 128 consecutive bytes */ 64*16 /* every sprite takes 128 consecutive bytes */
}; };

View File

@ -421,9 +421,9 @@ ROM_START( gunsmokeb )
ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
ROM_LOAD( "14.ic25", 0x00000, 0x8000, CRC(0af4f7eb) SHA1(24a98fdeedeeaf1035b4af52d5a8dd5e47a5e62d) ) ROM_LOAD( "14.ic25", 0x00000, 0x8000, CRC(0af4f7eb) SHA1(24a98fdeedeeaf1035b4af52d5a8dd5e47a5e62d) )
/* The names of the proms starting with "g-" do not yet reflect their position in the pcb layout of this bootleg. /* The names of the proms starting with "g-" do not yet reflect their position in the pcb layout of this bootleg.
As the ICs are not socketed, but directly soldered to the pcb, it is harder to identify which is which. As the ICs are not socketed, but directly soldered to the pcb, it is harder to identify which is which.
But it would be good to figure this out at some point, for the sake of documenting this specific board layout. */ But it would be good to figure this out at some point, for the sake of documenting this specific board layout. */
ROM_REGION( 0x0a00, "proms", 0 ) ROM_REGION( 0x0a00, "proms", 0 )
ROM_LOAD( "prom.ic3", 0x0000, 0x0100, CRC(02f55589) SHA1(8a3f98304aedf3aba1c08b615bf457752a480edc) ) /* red component */ ROM_LOAD( "prom.ic3", 0x0000, 0x0100, CRC(02f55589) SHA1(8a3f98304aedf3aba1c08b615bf457752a480edc) ) /* red component */
ROM_LOAD( "prom.ic4", 0x0100, 0x0100, CRC(e1e36dd9) SHA1(5bd88a35898a2d973045bdde8311aac3a12826de) ) /* green component */ ROM_LOAD( "prom.ic4", 0x0100, 0x0100, CRC(e1e36dd9) SHA1(5bd88a35898a2d973045bdde8311aac3a12826de) ) /* green component */

View File

@ -221,7 +221,7 @@ UINT16 igs017_state::mgcs_palette_bitswap(UINT16 bgr)
UINT16 igs017_state::lhzb2a_palette_bitswap(UINT16 bgr) UINT16 igs017_state::lhzb2a_palette_bitswap(UINT16 bgr)
{ {
// bgr = ((bgr & 0xff00) >> 8) | ((bgr & 0x00ff) << 8); // bgr = ((bgr & 0xff00) >> 8) | ((bgr & 0x00ff) << 8);
return BITSWAP16(bgr, 15,9,13,12,11,5,4,8,7,6,0,14,3,2,1,10); return BITSWAP16(bgr, 15,9,13,12,11,5,4,8,7,6,0,14,3,2,1,10);
} }

View File

@ -49,7 +49,7 @@ ADDRESS_MAP_END
// debugging only, not tile based // debugging only, not tile based
static const gfx_layout fearlayout = static const gfx_layout fearlayout =
{ {
16,16, 16,16,
RGN_FRAC(1,1), RGN_FRAC(1,1),
7, /* 7 bits per pixel - bit 0 unused in the roms we have*/ 7, /* 7 bits per pixel - bit 0 unused in the roms we have*/
{ 1,2,3,4,5,6,7 }, { 1,2,3,4,5,6,7 },
@ -77,7 +77,7 @@ static MACHINE_CONFIG_START( igs_fear, igs_fear_state )
MCFG_CPU_ADD("maincpu",ARM7, 50000000/2) MCFG_CPU_ADD("maincpu",ARM7, 50000000/2)
MCFG_CPU_PROGRAM_MAP(igs_igs_fear_map) MCFG_CPU_PROGRAM_MAP(igs_igs_fear_map)
// MCFG_CPU_VBLANK_INT_DRIVER("screen", igs_fear_state, igs_majhong_interrupt) // MCFG_CPU_VBLANK_INT_DRIVER("screen", igs_fear_state, igs_majhong_interrupt)
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_REFRESH_RATE(60)
@ -114,7 +114,7 @@ ROM_START( fearless )
ROM_LOAD( "fearlessp_07.u33", 0x000000, 0x10000, CRC(7dae4900) SHA1(bbf7ba7c9e95ff2ffeb1dc0fc7ccedd4da274d01) ) // MX10EXAQC (80C51 XA based MCU) marked 07, not read protected? ROM_LOAD( "fearlessp_07.u33", 0x000000, 0x10000, CRC(7dae4900) SHA1(bbf7ba7c9e95ff2ffeb1dc0fc7ccedd4da274d01) ) // MX10EXAQC (80C51 XA based MCU) marked 07, not read protected?
// these all report FIXED BITS (0xxxxxxx), hopefully just 7-bit colour data, non-tile based sprites // these all report FIXED BITS (0xxxxxxx), hopefully just 7-bit colour data, non-tile based sprites
ROM_REGION( 0x1000000, "gfx3", 0 ) ROM_REGION( 0x1000000, "gfx3", 0 )
ROM_LOAD16_BYTE( "fearlessp_u6_cg-0h.u6", 0x000001, 0x800000, CRC(02d8bbbf) SHA1(7cf36c909a5d76096a725ffe0a697bcbafbcf985) ) ROM_LOAD16_BYTE( "fearlessp_u6_cg-0h.u6", 0x000001, 0x800000, CRC(02d8bbbf) SHA1(7cf36c909a5d76096a725ffe0a697bcbafbcf985) )
ROM_LOAD16_BYTE( "fearlessp_u7_cg-0l.u7", 0x000000, 0x800000, CRC(ca254db4) SHA1(f5670c2ff0720c84c9aff3cea95b118b6044e469) ) ROM_LOAD16_BYTE( "fearlessp_u7_cg-0l.u7", 0x000000, 0x800000, CRC(ca254db4) SHA1(f5670c2ff0720c84c9aff3cea95b118b6044e469) )
ROM_REGION( 0x1000000, "gfx2", 0 ) ROM_REGION( 0x1000000, "gfx2", 0 )

View File

@ -36,7 +36,7 @@ public:
m_igs_mainram(*this, "igs_mainram"), m_igs_mainram(*this, "igs_mainram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_igs017_igs031(*this, "igs017_igs031") m_igs017_igs031(*this, "igs017_igs031")
{ } { }
optional_shared_ptr<UINT32> m_igs_mainram; optional_shared_ptr<UINT32> m_igs_mainram;
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
@ -350,7 +350,7 @@ static MACHINE_CONFIG_START( igs_majhong, igs_m027_state )
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 0x200) MCFG_PALETTE_ADD("palette", 0x200)
// MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB) // MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
MCFG_DEVICE_ADD("igs017_igs031", IGS017_IGS031, 0) MCFG_DEVICE_ADD("igs017_igs031", IGS017_IGS031, 0)
MCFG_GFX_PALETTE("palette") MCFG_GFX_PALETTE("palette")
@ -385,8 +385,8 @@ static MACHINE_CONFIG_START( amazonia, igs_m027_state )
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 0x200) MCFG_PALETTE_ADD("palette", 0x200)
// MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB) // MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
MCFG_DEVICE_ADD("igs017_igs031", IGS017_IGS031, 0) MCFG_DEVICE_ADD("igs017_igs031", IGS017_IGS031, 0)
MCFG_GFX_PALETTE("palette") MCFG_GFX_PALETTE("palette")
MCFG_REVERSE_TEXT_BITS MCFG_REVERSE_TEXT_BITS

View File

@ -2465,24 +2465,24 @@ DRIVER_INIT_MEMBER(igspoker_state,pktet346)
Cherry master looking board Cherry master looking board
Big chip with no markings at U80 stickered KUNG FU Big chip with no markings at U80 stickered KUNG FU
V1.0 V1.0
1992 1992
Board silkscreend on top PCB NO.0013-B Board silkscreend on top PCB NO.0013-B
.45 27010 stickered 6 .45 27010 stickered 6
.44 27010 stickered 5 .44 27010 stickered 5
.43 27010 stickered 4 .43 27010 stickered 4
.42 27128 stickered 3 .42 27128 stickered 3
.41 27128 stickered 2 .41 27128 stickered 2
.40 27128 stickered 1 .40 27128 stickered 1
.98 27256 stickered 7 couldn't read chip, but board was silkscreened 27c256 .98 27256 stickered 7 couldn't read chip, but board was silkscreened 27c256
.97 27512 stickered ? looked like japanese writing .97 27512 stickered ? looked like japanese writing
.38 74s287 .38 74s287
.46 18cv8 <--- same checksum as .48 .46 18cv8 <--- same checksum as .48
.47 pal16l8a <--- checksum was 0 .47 pal16l8a <--- checksum was 0
.48 18cv8 <--- same checksum as .46 .48 18cv8 <--- same checksum as .46
unknown 24 pin chip @ u29 unknown 24 pin chip @ u29
open 24 pin socket @ u54 open 24 pin socket @ u54

View File

@ -101,16 +101,16 @@ READ32_MEMBER(konendev_state::mcu2_r)
{ {
r &= ~0x4000; // MCU2 presence r &= ~0x4000; // MCU2 presence
r &= ~0x2000; // IFU2 presence r &= ~0x2000; // IFU2 presence
r &= ~0x1000; // FMU2 presence r &= ~0x1000; // FMU2 presence
} }
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
r |= ioport("DSW")->read() & 0xff; r |= ioport("DSW")->read() & 0xff;
//r |= 0x80; // 0 = ram clear? //r |= 0x80; // 0 = ram clear?
//r |= 0x40; // logic door //r |= 0x40; // logic door
r |= 0x04; // battery 1 status r |= 0x04; // battery 1 status
r |= 0x10; // battery 2 status r |= 0x10; // battery 2 status
} }
return r; return r;
@ -133,19 +133,19 @@ UINT8 konendev_state::rtc_dev_r(UINT32 reg)
{ {
switch (reg) switch (reg)
{ {
case 0x0: return 9; case 0x0: return 9;
case 0x1: return 5; case 0x1: return 5;
case 0x2: return 3; case 0x2: return 3;
case 0x3: return 2; case 0x3: return 2;
case 0x4: return 1; case 0x4: return 1;
case 0x5: return 0; case 0x5: return 0;
case 0x6: return 7; case 0x6: return 7;
case 0x7: return 2; case 0x7: return 2;
case 0x8: return 2; case 0x8: return 2;
case 0x9: return 1; case 0x9: return 1;
case 0xa: return 5; case 0xa: return 5;
case 0xb: return 1; case 0xb: return 1;
case 0xc: return 3; case 0xc: return 3;
} }
return 0; return 0;
@ -154,7 +154,7 @@ UINT8 konendev_state::rtc_dev_r(UINT32 reg)
READ32_MEMBER(konendev_state::rtc_r) READ32_MEMBER(konendev_state::rtc_r)
{ {
UINT32 r = 0; UINT32 r = 0;
if (ACCESSING_BITS_24_31) if (ACCESSING_BITS_24_31)
r |= (UINT32)(rtc_dev_r(offset * 4)) << 24; r |= (UINT32)(rtc_dev_r(offset * 4)) << 24;
if (ACCESSING_BITS_16_23) if (ACCESSING_BITS_16_23)
@ -229,34 +229,34 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( konendev ) static INPUT_PORTS_START( konendev )
PORT_START("IN0") PORT_START("IN0")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) // "Take Win" button PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) // "Take Win" button
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) // "Gamble" button PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) // "Gamble" button
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) // "25 Lines" button PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) // "25 Lines" button
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) // "20 Lines" button PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) // "20 Lines" button
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) // "15 Lines" button PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) // "15 Lines" button
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) // "10 Lines" button PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) // "10 Lines" button
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) // "5 Lines" button PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) // "5 Lines" button
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) // "1 Line" button PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) // "1 Line" button
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON7 ) // "Reserve" button PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON7 ) // "Reserve" button
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON8 ) // "Collect" button PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON8 ) // "Collect" button
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON9 ) // "Bet 20" button PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON9 ) // "Bet 20" button
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON10 ) // "Bet 10" button PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON10 ) // "Bet 10" button
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON11 ) // "Bet 5" button PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON11 ) // "Bet 5" button
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON12 ) // "Bet 3" button PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON12 ) // "Bet 3" button
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON13 ) // "Bet 2" button PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON13 ) // "Bet 2" button
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON14 ) // "Bet 1" button PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON14 ) // "Bet 1" button
PORT_START("IN1") PORT_START("IN1")
PORT_BIT( 0xc000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0xc000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_SERVICE( 0x2000, IP_ACTIVE_LOW ) // Audit key PORT_SERVICE( 0x2000, IP_ACTIVE_LOW ) // Audit key
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON16 ) // Reset key PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON16 ) // Reset key
PORT_DIPNAME( 0x0800, 0x0800, "Main door switch" ) PORT_DIPNAME( 0x0800, 0x0800, "Main door switch" )
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0400, 0x0400, "Cashbox door" ) PORT_DIPNAME( 0x0400, 0x0400, "Cashbox door" )
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0x0300, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0300, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPNAME( 0x0040, 0x0040, "BNA Door" ) PORT_DIPNAME( 0x0040, 0x0040, "BNA Door" )
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
@ -482,15 +482,15 @@ DRIVER_INIT_MEMBER(konendev_state,konendev)
DRIVER_INIT_MEMBER(konendev_state,enchlamp) DRIVER_INIT_MEMBER(konendev_state,enchlamp)
{ {
UINT32 *rom = (UINT32*)memregion("program")->base(); UINT32 *rom = (UINT32*)memregion("program")->base();
rom[0x24/4] = 0x00002743; // patch flash checksum for now rom[0x24/4] = 0x00002743; // patch flash checksum for now
// patch sound data checksums // patch sound data checksums
rom[0x2d924/4] = 0x00000000; rom[0x2d924/4] = 0x00000000;
rom[0x2d928/4] = 0x00000000; rom[0x2d928/4] = 0x00000000;
rom[0x2d934/4] = 0x00000000; rom[0x2d934/4] = 0x00000000;
rom[0x2d938/4] = 0x00000000; rom[0x2d938/4] = 0x00000000;
rom[0] = 0x5782b930; // new checksum for program rom rom[0] = 0x5782b930; // new checksum for program rom
} }
// has a flash dump? // has a flash dump?

View File

@ -400,7 +400,7 @@ ROM_START( revxp5 )
ROM_LOAD32_BYTE( "revx.64", 0x0c00001, 0x80000, CRC(c33f5309) SHA1(6bb333f563ea66c4c862ffd5fb91fb5e1b919fe8) ) ROM_LOAD32_BYTE( "revx.64", 0x0c00001, 0x80000, CRC(c33f5309) SHA1(6bb333f563ea66c4c862ffd5fb91fb5e1b919fe8) )
ROM_LOAD32_BYTE( "revx.65", 0x0c00002, 0x80000, CRC(6eee3e71) SHA1(0ef22732e0e2bb5207559decd43f90d1e338ad7b) ) ROM_LOAD32_BYTE( "revx.65", 0x0c00002, 0x80000, CRC(6eee3e71) SHA1(0ef22732e0e2bb5207559decd43f90d1e338ad7b) )
ROM_LOAD32_BYTE( "revx.66", 0x0c00003, 0x80000, CRC(b43d6fff) SHA1(87584e7aeea9d52a43023d40c359591ff6342e84) ) ROM_LOAD32_BYTE( "revx.66", 0x0c00003, 0x80000, CRC(b43d6fff) SHA1(87584e7aeea9d52a43023d40c359591ff6342e84) )
ROM_LOAD32_BYTE( "revx_p5.51", 0xe00000, 0x80000, CRC(f3877eee) SHA1(7a4fdce36edddd35308c107c992ce626a2c9eb8c) ) ROM_LOAD32_BYTE( "revx_p5.51", 0xe00000, 0x80000, CRC(f3877eee) SHA1(7a4fdce36edddd35308c107c992ce626a2c9eb8c) )
ROM_LOAD32_BYTE( "revx_p5.52", 0xe00001, 0x80000, CRC(199a54d8) SHA1(45319437e11176d4926c00c95c372098203a32a3) ) ROM_LOAD32_BYTE( "revx_p5.52", 0xe00001, 0x80000, CRC(199a54d8) SHA1(45319437e11176d4926c00c95c372098203a32a3) )
ROM_LOAD32_BYTE( "revx_p5.53", 0xe00002, 0x80000, CRC(fcfcf72a) SHA1(b471afb416e3d348b046b0b40f497d27b0afa470) ) ROM_LOAD32_BYTE( "revx_p5.53", 0xe00002, 0x80000, CRC(fcfcf72a) SHA1(b471afb416e3d348b046b0b40f497d27b0afa470) )

View File

@ -125,18 +125,18 @@ This is a general guideline flag showing compatibility between the different rev
1-7: Tested Working 1-7: Tested Working
X : Tested Not Working X : Tested Not Working
- : Not Tested - : Not Tested
% : 1 and 2; For testing purposes these games need a DVD drive. Using this hardware to play the actual game is % : 1 and 2; For testing purposes these games need a DVD drive. Using this hardware to play the actual game is
normally impossible due to requiring controls/IO boards that can't be connected to this hardware version. normally impossible due to requiring controls/IO boards that can't be connected to this hardware version.
# : 5 and 6; Working only in S246+ mode. # : 5 and 6; Working only in S246+ mode.
@ : Multiple different DVD's and/or dongles are available and are compatible in any combination. @ : Multiple different DVD's and/or dongles are available and are compatible in any combination.
For 'Tested Working', working is defined as "boots to the attract mode". For 'Tested Working', working is defined as "boots to the attract mode".
Some games need specific controls and are unplayable even though the game loads (eg. most games on earliest rev 246 Some games need specific controls and are unplayable even though the game loads (eg. most games on earliest rev 246
or the driving or gun games on non-factory-provided hardware). Some games will start to boot but either get stuck or the driving or gun games on non-factory-provided hardware). Some games will start to boot but either get stuck
somewhere in the boot process or nothing loads after the initial booting. somewhere in the boot process or nothing loads after the initial booting.
The DVD drive used for these tests was a Toshiba/Samsung SD-M1802. In the case where the original drive didn't work The DVD drive used for these tests was a Toshiba/Samsung SD-M1802. In the case where the original drive didn't work
(i.e. factory drive was a CDROM and the disc was a DVD), this drive was substituted. (i.e. factory drive was a CDROM and the disc was a DVD), this drive was substituted.
Finally, all games were tested with the SD-M1802 and worked, therefore no game requires a specific make and model of Finally, all games were tested with the SD-M1802 and worked, therefore no game requires a specific make and model of
optical drive to BOOT. But of course not all drive models will work or work for extended periods. YMMV. optical drive to BOOT. But of course not all drive models will work or work for extended periods. YMMV.
These makes and models have been tested and worked..... These makes and models have been tested and worked.....
H-L Data Storage LG GSA-4164B Super Multi DVD Drive (September 2005) H-L Data Storage LG GSA-4164B Super Multi DVD Drive (September 2005)
@ -150,21 +150,21 @@ Toshiba/Samsung SD-M1612 DVD-ROM Drive (January 2003) (Factory Supplied)
Toshiba/Samsung SD-M1712 DVD-ROM Drive (November 2003) (Factory Supplied) Toshiba/Samsung SD-M1712 DVD-ROM Drive (November 2003) (Factory Supplied)
Toshiba/Samsung SD-M1802 (Factory Supplied) Toshiba/Samsung SD-M1802 (Factory Supplied)
Different security cart revisions of the same game are filled in with the same status even if they are not dumped as Different security cart revisions of the same game are filled in with the same status even if they are not dumped as
long as at least one revision is tested. long as at least one revision is tested.
1 = 246 1st generation using COH-H30000 or COH-H31000 Playstation 2 main board (GH-004/GH-006 with PS2 power supply) 1 = 246 1st generation using COH-H30000 or COH-H31000 Playstation 2 main board (GH-004/GH-006 with PS2 power supply)
and custom Namco interface board 'System 246 MOTHER PCB' and Teac CD-540E CD drive and custom Namco interface board 'System 246 MOTHER PCB' and Teac CD-540E CD drive
2 = 246A 2nd generation using COH-H30000 or COH-H31000 Playstation 2 main board (GH-004/GH-006 with PS2 power supply) 2 = 246A 2nd generation using COH-H30000 or COH-H31000 Playstation 2 main board (GH-004/GH-006 with PS2 power supply)
and custom Namco interface board 'System 246 MOTHER(A) PCB' and Teac CD-540E CD drive and custom Namco interface board 'System 246 MOTHER(A) PCB' and Teac CD-540E CD drive
3 = 246B 3rd generation using COH-H31000 Playstation 2 main board (GH-006 without PS2 power supply) and custom Namco 3 = 246B 3rd generation using COH-H31000 Playstation 2 main board (GH-006 without PS2 power supply) and custom Namco
interface board 'System 246 PMOTHER PCB' interface board 'System 246 PMOTHER PCB'
4 = 246C 4th generation using integrated single main board 'System 246 Main PCB' 4 = 246C 4th generation using integrated single main board 'System 246 Main PCB'
5 = 256 5th generation using integrated single main board 'System 256 Main PCB'. Note some games requiring S246 will 5 = 256 5th generation using integrated single main board 'System 256 Main PCB'. Note some games requiring S246 will
work in S246+ mode. work in S246+ mode.
6 = 256B 6th generation using integrated single main board 'System 256 Main(B) PCB'. Note some games requiring S246 6 = 256B 6th generation using integrated single main board 'System 256 Main(B) PCB'. Note some games requiring S246
will work in S246+ mode. will work in S246+ mode.
7 = S256 7th generation using integrated single main board 'Super System 256 Main PCB'. All other games are X because 7 = S256 7th generation using integrated single main board 'Super System 256 Main PCB'. All other games are X because
this system only runs Time Crisis 4. this system only runs Time Crisis 4.
@ -381,7 +381,7 @@ System246 PAC PCB
|J1 J2 SW1 | |J1 J2 SW1 |
|-----------------------------------------------------| |-----------------------------------------------------|
Notes: Notes:
J1/J2 - RCA jacks for stereo audio output (mono audio is also output from the JAMMA connector on the I/O board J1/J2 - RCA jacks for stereo audio output (mono audio is also output from the JAMMA connector on the I/O board
for Bloody Roar 3) for Bloody Roar 3)
J3 - Multi-pin connector (located on other side of PCB, plugs into J3 on MOTHER(A) PCB) J3 - Multi-pin connector (located on other side of PCB, plugs into J3 on MOTHER(A) PCB)
J4 - 4-pin connector (not used) J4 - 4-pin connector (not used)
@ -419,7 +419,7 @@ Notes:
TSSIOPROG - Atmel AT29C020 EEPROM stamped 'TSSIOP8' (PLCC32) TSSIOPROG - Atmel AT29C020 EEPROM stamped 'TSSIOP8' (PLCC32)
C78 - Namco Custom C78, actually a rebadged Hitachi HD643334 MCU, clock input 14.746MHz (PLCC84) C78 - Namco Custom C78, actually a rebadged Hitachi HD643334 MCU, clock input 14.746MHz (PLCC84)
TSSIOPLD - Altera MAX EPM7128ELC84 CPLD with label 'TSSIOPLD' (PLCC84) TSSIOPLD - Altera MAX EPM7128ELC84 CPLD with label 'TSSIOPLD' (PLCC84)
SLA4060 - Sanken Electric SLA4060 NPN general purpose darlington transistor (used to drive the kick-back SLA4060 - Sanken Electric SLA4060 NPN general purpose darlington transistor (used to drive the kick-back
solenoid in the gun) solenoid in the gun)
PST592 - System Reset IC (SOIC4) PST592 - System Reset IC (SOIC4)
J1 - 12 pin connector for power and I/O communication joined to main board J1 - 12 pin connector for power and I/O communication joined to main board
@ -429,7 +429,7 @@ Notes:
J601 - not used? J601 - not used?
JP1 - jumper set to 1-2 (lower position), labelled 'WR' JP1 - jumper set to 1-2 (lower position), labelled 'WR'
DSW - 4 position dipswitch block, all off DSW - 4 position dipswitch block, all off
This board is used with Time Crisis 3 (System 246B/C twin CRT-screen version) This board is used with Time Crisis 3 (System 246B/C twin CRT-screen version)
It's also used with Time Crisis II (on System 23) It's also used with Time Crisis II (on System 23)
Note this board requires a standard light gun. Note this board requires a standard light gun.
@ -514,10 +514,10 @@ Notes:
MCU - Fujitsu MB90F574 Microcontroller with sticker 'FCAF11' (QFP120) MCU - Fujitsu MB90F574 Microcontroller with sticker 'FCAF11' (QFP120)
ADM485 - Analog Devices ADM485 +5V Low Power EIA RS-485 Transceiver (SOIC8) ADM485 - Analog Devices ADM485 +5V Low Power EIA RS-485 Transceiver (SOIC8)
This PCB is used with Ridge Racer V and Wangan Midnight and will also work with most of the This PCB is used with Ridge Racer V and Wangan Midnight and will also work with most of the
System 246 games when wired to suit those games. System 246 games when wired to suit those games.
FCA2 PCB FCA2 PCB
-------- --------
[to-do] [to-do]
@ -556,17 +556,17 @@ Connector J3 pinout Connector J2 pinout
2 - P2 Button 6 2 - Left - / Also wired to JAMMA audio output pins 2 - P2 Button 6 2 - Left - / Also wired to JAMMA audio output pins
3 - P2 Button 5 3 - Right + 3 - P2 Button 5 3 - Right +
4 - P2 Button 4 4 - Right - 4 - P2 Button 4 4 - Right -
5 - 5 -
6 - P1 Button 6 6 - P1 Button 6
7 - P1 Button 5 7 - P1 Button 5
8 - P1 Button 4 8 - P1 Button 4
9 - 9 -
10- GND 10- GND
This I/O board works with all the games that require regular joysticks and buttons which run on System 246B/C and This I/O board works with all the games that require regular joysticks and buttons which run on System 246B/C and
System 256. System 256.
Drive/Feedback Board Drive/Feedback Board
-------------------- --------------------
@ -611,7 +611,7 @@ Notes:
MB3773 - Fujitsu MB3773 Power Supply Monitor with Watch Dog Timer and Reset (SOIC8) MB3773 - Fujitsu MB3773 Power Supply Monitor with Watch Dog Timer and Reset (SOIC8)
MB3771 - Fujitsu MB3771 System Reset IC (SOIC8) MB3771 - Fujitsu MB3771 System Reset IC (SOIC8)
DIP42 - Unpopulated DIP42 socket for 27C4096 EPROM DIP42 - Unpopulated DIP42 socket for 27C4096 EPROM
MB90242A - Fujitsu MB90242A 16-Bit CISC ROM-less F2MC-16F Family Microcontroller optimized for mechatronics MB90242A - Fujitsu MB90242A 16-Bit CISC ROM-less F2MC-16F Family Microcontroller optimized for mechatronics
control applications (TQFP80) control applications (TQFP80)
7815 - LM7815 15V voltage regulator 7815 - LM7815 15V voltage regulator
J101 - 8 pin connector (purpose unknown) J101 - 8 pin connector (purpose unknown)
@ -624,12 +624,12 @@ Notes:
This PCB is used with Ridge Racer V and Wangan Midnight and controls the steering feed-back motor. This PCB is used with Ridge Racer V and Wangan Midnight and controls the steering feed-back motor.
When the driving games boot they test the feed-back motor by monitoring a potentiometer When the driving games boot they test the feed-back motor by monitoring a potentiometer
connected to the steering wheel mechanism. On Ridge Racer V, if the pot is faulty or not connected connected to the steering wheel mechanism. On Ridge Racer V, if the pot is faulty or not connected
or if the drive/feedback board isn't connected (including the 110VAC input voltage), the or if the drive/feedback board isn't connected (including the 110VAC input voltage), the
steering check will fail after a time-out period and the game will not continue further. steering check will fail after a time-out period and the game will not continue further.
Wangan Midnight doesn't test the potentiometer and will boot without it connected, but it does Wangan Midnight doesn't test the potentiometer and will boot without it connected, but it does
test for the presence of the feedback PCB. test for the presence of the feedback PCB.
Note this same PCB (with a different ROM) is also used with Mario Kart on Triforce hardware and all of the Wangan Note this same PCB (with a different ROM) is also used with Mario Kart on Triforce hardware and all of the Wangan
Midnight Maximum Tune series up to Maximum Tune 3 DX. Midnight Maximum Tune series up to Maximum Tune 3 DX.
@ -1099,8 +1099,8 @@ ROM_START( tekken51b )
// this key should work with Tekken 5 or 5.1 discs, according to Guru // this key should work with Tekken 5 or 5.1 discs, according to Guru
ROM_REGION(0x840000, "key", ROMREGION_ERASE00) ROM_REGION(0x840000, "key", ROMREGION_ERASE00)
ROM_LOAD( "te53verb.ic002", 0x000000, 0x800000, CRC(4d605636) SHA1(417b02d6c69f883920cd43a7278d0af183583c55) ) ROM_LOAD( "te53verb.ic002", 0x000000, 0x800000, CRC(4d605636) SHA1(417b02d6c69f883920cd43a7278d0af183583c55) )
ROM_LOAD( "te53verb_spr.ic002", 0x800000, 0x040000, CRC(b7094978) SHA1(1e4903cd5f594c13dad2fd74666ba35c62550044) ) ROM_LOAD( "te53verb_spr.ic002", 0x800000, 0x040000, CRC(b7094978) SHA1(1e4903cd5f594c13dad2fd74666ba35c62550044) )
DISK_REGION("dvd") DISK_REGION("dvd")
DISK_IMAGE_READONLY( "te51-dvd0", 0, SHA1(2a0ac3723725572c1810b0ef4bcfa7aa114062f8) ) DISK_IMAGE_READONLY( "te51-dvd0", 0, SHA1(2a0ac3723725572c1810b0ef4bcfa7aa114062f8) )
@ -1195,8 +1195,8 @@ ROM_START( cobrata )
SYSTEM246_BIOS SYSTEM246_BIOS
ROM_REGION(0x840000, "key", ROMREGION_ERASE00) ROM_REGION(0x840000, "key", ROMREGION_ERASE00)
ROM_LOAD( "cbr1verb.ic002", 0x000000, 0x800000, CRC(aecda462) SHA1(97c8e98c44d66231ee3f2527756d92dbc947b76d) ) ROM_LOAD( "cbr1verb.ic002", 0x000000, 0x800000, CRC(aecda462) SHA1(97c8e98c44d66231ee3f2527756d92dbc947b76d) )
ROM_LOAD( "cbr1verb_spr.ic002", 0x800000, 0x040000, CRC(65aaadcf) SHA1(5cc642f71bef3b5e44db5e999e8abccca7fdaa4c) ) ROM_LOAD( "cbr1verb_spr.ic002", 0x800000, 0x040000, CRC(65aaadcf) SHA1(5cc642f71bef3b5e44db5e999e8abccca7fdaa4c) )
DISK_REGION("dvd") DISK_REGION("dvd")
DISK_IMAGE_READONLY( "cbr1-ha", 0, SHA1(a20d4ace91a2f2caab0804ebdf62c87ab267239b) ) DISK_IMAGE_READONLY( "cbr1-ha", 0, SHA1(a20d4ace91a2f2caab0804ebdf62c87ab267239b) )
@ -1244,8 +1244,8 @@ ROM_START( rrvac1 )
SYSTEM246_BIOS SYSTEM246_BIOS
ROM_REGION(0x840000, "key", ROMREGION_ERASE00) ROM_REGION(0x840000, "key", ROMREGION_ERASE00)
ROM_LOAD( "rrv1vera.ic002", 0x000000, 0x800000, CRC(e28bb0be) SHA1(9683ddc228e9aedd338cf2eb4d4373faeaea5b75) ) ROM_LOAD( "rrv1vera.ic002", 0x000000, 0x800000, CRC(e28bb0be) SHA1(9683ddc228e9aedd338cf2eb4d4373faeaea5b75) )
ROM_LOAD( "rrv1vera_spr.ic002", 0x800000, 0x040000, CRC(81c370b7) SHA1(7693c03b544c79fa3b6e536abb32ad34cf14dfbf) ) ROM_LOAD( "rrv1vera_spr.ic002", 0x800000, 0x040000, CRC(81c370b7) SHA1(7693c03b544c79fa3b6e536abb32ad34cf14dfbf) )
ROM_REGION(0x4010, "jvsio", 0) // Namco "FCA" JVS I/O board PIC16F84 code (see namcos23.c for FCA details) ROM_REGION(0x4010, "jvsio", 0) // Namco "FCA" JVS I/O board PIC16F84 code (see namcos23.c for FCA details)
ROM_LOAD( "fcap11.ic2", 0x000000, 0x004010, CRC(1b2592ce) SHA1(a1a487361053af564f6ec67e545413e370a3b38c) ) ROM_LOAD( "fcap11.ic2", 0x000000, 0x004010, CRC(1b2592ce) SHA1(a1a487361053af564f6ec67e545413e370a3b38c) )

View File

@ -1248,7 +1248,7 @@ Notes:
#define H8CLOCK (16737350) /* from 2061 */ #define H8CLOCK (16737350) /* from 2061 */
#define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */ #define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */
#define C352CLOCK (25992000) /* measured at 25.992MHz from 2061 pin 9 */ #define C352CLOCK (25992000) /* measured at 25.992MHz from 2061 pin 9 */
#define C352DIV (296) #define C352DIV (296)
#define VSYNC1 (59.8824) #define VSYNC1 (59.8824)
#define VSYNC2 (59.915) #define VSYNC2 (59.915)
#define HSYNC (16666150) #define HSYNC (16666150)
@ -1294,14 +1294,14 @@ class namcos23_state;
class namcos23_renderer : public poly_manager<float, namcos23_render_data, 4, POLY_MAX_ENTRIES> class namcos23_renderer : public poly_manager<float, namcos23_render_data, 4, POLY_MAX_ENTRIES>
{ {
public: public:
namcos23_renderer(namcos23_state &state); namcos23_renderer(namcos23_state &state);
void render_flush(bitmap_rgb32& bitmap); void render_flush(bitmap_rgb32& bitmap);
void render_scanline(INT32 scanline, const extent_t& extent, const namcos23_render_data& object, int threadid); void render_scanline(INT32 scanline, const extent_t& extent, const namcos23_render_data& object, int threadid);
private: private:
namcos23_state& m_state; namcos23_state& m_state;
bitmap_rgb32 m_bitmap; bitmap_rgb32 m_bitmap;
}; };
typedef namcos23_renderer::vertex_t poly_vertex; typedef namcos23_renderer::vertex_t poly_vertex;
@ -1361,7 +1361,7 @@ struct c404_t
struct render_t struct render_t
{ {
namcos23_renderer *polymgr; namcos23_renderer *polymgr;
int cur; int cur;
int poly_count; int poly_count;
int count[2]; int count[2];
@ -1584,9 +1584,9 @@ UINT16 namcos23_state::nthword(const UINT32 *pSource, int offs)
***************************************************************************/ ***************************************************************************/
namcos23_renderer::namcos23_renderer(namcos23_state &state) namcos23_renderer::namcos23_renderer(namcos23_state &state)
: poly_manager<float, namcos23_render_data, 4, POLY_MAX_ENTRIES>(state.machine()), : poly_manager<float, namcos23_render_data, 4, POLY_MAX_ENTRIES>(state.machine()),
m_state(state), m_state(state),
m_bitmap(state.m_screen->width(), state.m_screen->height()) m_bitmap(state.m_screen->width(), state.m_screen->height())
{} {}
// 3D hardware, to throw at least in part in video/namcos23.c // 3D hardware, to throw at least in part in video/namcos23.c
@ -2084,19 +2084,19 @@ void namcos23_renderer::render_flush(bitmap_rgb32& bitmap)
for(int i=0; i<render.poly_count; i++) { for(int i=0; i<render.poly_count; i++) {
const namcos23_poly_entry *p = render.poly_order[i]; const namcos23_poly_entry *p = render.poly_order[i];
namcos23_render_data& extra = render.polymgr->object_data_alloc(); namcos23_render_data& extra = render.polymgr->object_data_alloc();
extra = p->rd; extra = p->rd;
if (p->vertex_count == 3) if (p->vertex_count == 3)
render_triangle(scissor, render_delegate(FUNC(namcos23_renderer::render_scanline), this), 4, p->pv[0], p->pv[1], p->pv[2]); render_triangle(scissor, render_delegate(FUNC(namcos23_renderer::render_scanline), this), 4, p->pv[0], p->pv[1], p->pv[2]);
else if (p->vertex_count == 4) else if (p->vertex_count == 4)
render_polygon<4>(scissor, render_delegate(FUNC(namcos23_renderer::render_scanline), this), 4, p->pv); render_polygon<4>(scissor, render_delegate(FUNC(namcos23_renderer::render_scanline), this), 4, p->pv);
else if (p->vertex_count == 5) else if (p->vertex_count == 5)
render_polygon<5>(scissor, render_delegate(FUNC(namcos23_renderer::render_scanline), this), 4, p->pv); render_polygon<5>(scissor, render_delegate(FUNC(namcos23_renderer::render_scanline), this), 4, p->pv);
} }
render.poly_count = 0; render.poly_count = 0;
copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, scissor); copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, scissor);
} }
void namcos23_state::render_run(bitmap_rgb32 &bitmap) void namcos23_state::render_run(bitmap_rgb32 &bitmap)
@ -2117,7 +2117,7 @@ void namcos23_state::render_run(bitmap_rgb32 &bitmap)
re++; re++;
} }
render.polymgr->render_flush(bitmap); render.polymgr->render_flush(bitmap);
render.polymgr->wait(); render.polymgr->wait();
} }
@ -2189,7 +2189,7 @@ VIDEO_START_MEMBER(namcos23_state,s23)
m_bgtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(namcos23_state::TextTilemapGetInfo),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); m_bgtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(namcos23_state::TextTilemapGetInfo),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
m_bgtilemap->set_transparent_pen(0xf); m_bgtilemap->set_transparent_pen(0xf);
m_bgtilemap->set_scrolldx(860, 860); m_bgtilemap->set_scrolldx(860, 860);
m_render.polymgr = auto_alloc(machine(), namcos23_renderer(*this)); m_render.polymgr = auto_alloc(machine(), namcos23_renderer(*this));
} }

View File

@ -9080,8 +9080,8 @@ ROM_END
/* 0043 */ GAME( 2000, crackndj, naomi, naomim2, crackndj,naomi_state, naomi, ROT0, "Sega", "Crackin' DJ", GAME_FLAGS ) /* 0043 */ GAME( 2000, crackndj, naomi, naomim2, crackndj,naomi_state, naomi, ROT0, "Sega", "Crackin' DJ", GAME_FLAGS )
/* 0044 */ GAME( 2000, csmasho, csmash, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS)", GAME_FLAGS ) /* 0044 */ GAME( 2000, csmasho, csmash, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS)", GAME_FLAGS )
/* 0044 */ GAME( 2000, csmash, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_FLAGS ) /* 0044 */ GAME( 2000, csmash, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_FLAGS )
// 0045 1999, "FortyFive / Sega", "Tokio Bus Guide" // 0045 1999, "FortyFive / Sega", "Tokio Bus Guide"
// 0045 1999, "FortyFive / Sega", "Tokio Bus Guide (Rev A)" // 0045 1999, "FortyFive / Sega", "Tokio Bus Guide (Rev A)"
/* 0047 */ GAME( 2000, samba2k, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Samba de Amigo ver. 2000", GAME_FLAGS ) /* 0047 */ GAME( 2000, samba2k, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Samba de Amigo ver. 2000", GAME_FLAGS )
/* 0048 */ GAME( 2001, alienfnt, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Alien Front (Rev T)", GAME_FLAGS ) /* 0048 */ GAME( 2001, alienfnt, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Alien Front (Rev T)", GAME_FLAGS )
/* 0048 */ GAME( 2001, alienfnta,alienfnt, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Alien Front (Rev A)", GAME_FLAGS ) /* 0048 */ GAME( 2001, alienfnta,alienfnt, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Alien Front (Rev A)", GAME_FLAGS )

View File

@ -6216,7 +6216,7 @@ Notes:
VSync - 56.205Hz VSync - 56.205Hz
NMK CUSTOM IC'S NMK CUSTOM IC'S
- NMK004 marked "NMK004 0840-1324". Actually a TLCS90-based Toshiba TMP90C840AF - NMK004 marked "NMK004 0840-1324". Actually a TLCS90-based Toshiba TMP90C840AF
Microcontroller with 256 bytes RAM & 8Kb ROM, running at 8.000MHz [16/2] (QFP64) Microcontroller with 256 bytes RAM & 8Kb ROM, running at 8.000MHz [16/2] (QFP64)
- NMK005 (x1, Square QFP64) - NMK005 (x1, Square QFP64)
- NMK008 (x1, Square QFP84) - NMK008 (x1, Square QFP84)

View File

@ -76,7 +76,7 @@ static MACHINE_CONFIG_START( piggypas, piggypas_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,8000000) // wrong CPU? (not valid Z80 code) MCFG_CPU_ADD("maincpu", Z80,8000000) // wrong CPU? (not valid Z80 code)
MCFG_CPU_PROGRAM_MAP(piggypas_map) MCFG_CPU_PROGRAM_MAP(piggypas_map)
// MCFG_CPU_VBLANK_INT_DRIVER("screen", piggypas_state, irq0_line_hold) // MCFG_CPU_VBLANK_INT_DRIVER("screen", piggypas_state, irq0_line_hold)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -157,9 +157,9 @@ ROM_END
GAME( 1992, piggypas, 0, piggypas, piggypas, driver_device, 0, ROT0, "Doyle & Assoc.", "Piggy Pass (version 04.40)", MACHINE_IS_SKELETON_MECHANICAL ) GAME( 1992, piggypas, 0, piggypas, piggypas, driver_device, 0, ROT0, "Doyle & Assoc.", "Piggy Pass (version 04.40)", MACHINE_IS_SKELETON_MECHANICAL )
// COPYRIGHT (c) 1990, 1991, 1992, DOYLE & ASSOC., INC. VERSION 05.22 // COPYRIGHT (c) 1990, 1991, 1992, DOYLE & ASSOC., INC. VERSION 05.22
GAME( 1992, hoopshot, 0, piggypas, piggypas, driver_device, 0, ROT0, "Doyle & Assoc.", "Hoop Shot (version 05.22)", MACHINE_IS_SKELETON_MECHANICAL ) GAME( 1992, hoopshot, 0, piggypas, piggypas, driver_device, 0, ROT0, "Doyle & Assoc.", "Hoop Shot (version 05.22)", MACHINE_IS_SKELETON_MECHANICAL )
// Quick $ilver Development Co. 10/08/96 ROUND REV 6 // Quick $ilver Development Co. 10/08/96 ROUND REV 6
GAME( 1996, rndrndqs, 0, piggypas, piggypas, driver_device, 0, ROT0, "Quick $ilver Development Co.", "Round and Round (Rev 6) (Quick $ilver)", MACHINE_IS_SKELETON_MECHANICAL ) GAME( 1996, rndrndqs, 0, piggypas, piggypas, driver_device, 0, ROT0, "Quick $ilver Development Co.", "Round and Round (Rev 6) (Quick $ilver)", MACHINE_IS_SKELETON_MECHANICAL )
// Quick$ilver Development Co. 10/02/95 -FIDDLESTIX- REV 15T // Quick$ilver Development Co. 10/02/95 -FIDDLESTIX- REV 15T
GAME( 1995, fidlstix, 0, piggypas, piggypas, driver_device, 0, ROT0, "Quick $ilver Development Co.", "Fiddle Stix (1st Rev)", MACHINE_IS_SKELETON_MECHANICAL ) GAME( 1995, fidlstix, 0, piggypas, piggypas, driver_device, 0, ROT0, "Quick $ilver Development Co.", "Fiddle Stix (1st Rev)", MACHINE_IS_SKELETON_MECHANICAL )
// bad dump, so version unknown // bad dump, so version unknown
GAME( 199?, jackbean, 0, piggypas, piggypas, driver_device, 0, ROT0, "Doyle & Assoc.", "Jack & The Beanstalk (Doyle & Assoc.?)", MACHINE_IS_SKELETON_MECHANICAL ) GAME( 199?, jackbean, 0, piggypas, piggypas, driver_device, 0, ROT0, "Doyle & Assoc.", "Jack & The Beanstalk (Doyle & Assoc.?)", MACHINE_IS_SKELETON_MECHANICAL )

View File

@ -13,7 +13,7 @@
* none at this time * none at this time
NOTE: The Atari 136002-125 PROM in the sets below wasn't dumped from an actual NOTE: The Atari 136002-125 PROM in the sets below wasn't dumped from an actual
Quantum PCB. It is assumed all Atari 136002-125 PROMs are the same data. Quantum PCB. It is assumed all Atari 136002-125 PROMs are the same data.
**************************************************************************** ****************************************************************************

View File

@ -669,7 +669,7 @@ MACHINE_CONFIG_END
* *
*************************************/ *************************************/
ROM_START( route16 ) ROM_START( route16 )
ROM_REGION( 0x10000, "cpu1", 0 ) ROM_REGION( 0x10000, "cpu1", 0 )
ROM_LOAD( "tvg54.a0", 0x0000, 0x0800, CRC(aef9ffc1) SHA1(178d23e4963336ded93c13cb17940a4ae98270c5) ) ROM_LOAD( "tvg54.a0", 0x0000, 0x0800, CRC(aef9ffc1) SHA1(178d23e4963336ded93c13cb17940a4ae98270c5) )
ROM_LOAD( "tvg55.a1", 0x0800, 0x0800, CRC(389bc077) SHA1(b0606f6e647e81ceae7148bda96bd4673a51e823) ) ROM_LOAD( "tvg55.a1", 0x0800, 0x0800, CRC(389bc077) SHA1(b0606f6e647e81ceae7148bda96bd4673a51e823) )

View File

@ -211,7 +211,7 @@ static ADDRESS_MAP_START( rescuefe_map, AS_PROGRAM, 8, scobra_state )
AM_RANGE(0x4400, 0x5dff) AM_ROM AM_RANGE(0x4400, 0x5dff) AM_ROM
AM_RANGE(0x5e00, 0x6bff) AM_ROM // some right? AM_RANGE(0x5e00, 0x6bff) AM_ROM // some right?
AM_RANGE(0x8200, 0x93ff) AM_ROM // wrong? (maybe some correct?) AM_RANGE(0x8200, 0x93ff) AM_ROM // wrong? (maybe some correct?)
AM_RANGE(0xa600, 0xa6ff) AM_ROM // wrong (taunt string) jumps to around a600 so something must map in this area? AM_RANGE(0xa600, 0xa6ff) AM_ROM // wrong (taunt string) jumps to around a600 so something must map in this area?
@ -226,13 +226,13 @@ static ADDRESS_MAP_START( rescuefe_map, AS_PROGRAM, 8, scobra_state )
AM_RANGE(0xC160, 0xC163) AM_DEVREAD("ppi8255_0", i8255_device, read) // ? AM_RANGE(0xC160, 0xC163) AM_DEVREAD("ppi8255_0", i8255_device, read) // ?
AM_RANGE(0xC4Ac, 0xC4AF) AM_DEVREAD("ppi8255_1", i8255_device, read) // ? AM_RANGE(0xC4Ac, 0xC4AF) AM_DEVREAD("ppi8255_1", i8255_device, read) // ?
AM_RANGE(0xc180, 0xc183) AM_DEVWRITE("ppi8255_0", i8255_device, write) // correct based on main set? AM_RANGE(0xc180, 0xc183) AM_DEVWRITE("ppi8255_0", i8255_device, write) // correct based on main set?
AM_RANGE(0xc220, 0xc223) AM_DEVWRITE("ppi8255_1", i8255_device, write) // ^ AM_RANGE(0xc220, 0xc223) AM_DEVWRITE("ppi8255_1", i8255_device, write) // ^
// addresses below are WRONG, just moved to keep things out the way while the rom mapping is figured out // addresses below are WRONG, just moved to keep things out the way while the rom mapping is figured out
// AM_RANGE(0xf802, 0xf802) AM_WRITE(galaxold_coin_counter_w) // AM_RANGE(0xf802, 0xf802) AM_WRITE(galaxold_coin_counter_w)
// AM_RANGE(0xf000, 0xf000) AM_READ(watchdog_reset_r) // AM_RANGE(0xf000, 0xf000) AM_READ(watchdog_reset_r)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( minefldfe_map, AS_PROGRAM, 8, scobra_state ) static ADDRESS_MAP_START( minefldfe_map, AS_PROGRAM, 8, scobra_state )
@ -254,11 +254,11 @@ static ADDRESS_MAP_START( minefldfe_map, AS_PROGRAM, 8, scobra_state )
AM_RANGE(0x7616, 0x7616) AM_WRITE(galaxold_flip_screen_x_w) // a806 AM_RANGE(0x7616, 0x7616) AM_WRITE(galaxold_flip_screen_x_w) // a806
AM_RANGE(0x7617, 0x7617) AM_WRITE(galaxold_flip_screen_y_w) // a807 AM_RANGE(0x7617, 0x7617) AM_WRITE(galaxold_flip_screen_y_w) // a807
AM_RANGE(0x4C00, 0x4C03) AM_MIRROR(0x00fc) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_RANGE(0x4C00, 0x4C03) AM_MIRROR(0x00fc) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
AM_RANGE(0x4B00, 0x4B03) AM_MIRROR(0x00fc) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) AM_RANGE(0x4B00, 0x4B03) AM_MIRROR(0x00fc) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
AM_RANGE(0x1D98, 0x1D98) AM_READ(watchdog_reset_r) // 0xb000 AM_RANGE(0x1D98, 0x1D98) AM_READ(watchdog_reset_r) // 0xb000
@ -836,8 +836,8 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( rescuefe, rescue ) static MACHINE_CONFIG_DERIVED( rescuefe, rescue )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(rescuefe_map) MCFG_CPU_PROGRAM_MAP(rescuefe_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( rescueb, rescue ) static MACHINE_CONFIG_DERIVED( rescueb, rescue )
@ -860,8 +860,8 @@ static MACHINE_CONFIG_DERIVED( minefld, type1 )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( minefldfe, minefld ) static MACHINE_CONFIG_DERIVED( minefldfe, minefld )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(minefldfe_map) MCFG_CPU_PROGRAM_MAP(minefldfe_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -1221,13 +1221,13 @@ Both are missing the top sound PCB.
/* the 'Minefield' shop shows a Logicshop copyright, and a phone number with a Great Yarmouth area code /* the 'Minefield' shop shows a Logicshop copyright, and a phone number with a Great Yarmouth area code
which seems to indicate the following manufacturer / operator. which seems to indicate the following manufacturer / operator.
The Logicshop (Great Yarmouth) The Logicshop (Great Yarmouth)
Caesar's Arcade Caesar's Arcade
Beach Rd Beach Rd
Hemsby Hemsby
Great Yarmouth Great Yarmouth
Norfolk Norfolk
NR29 4HS NR29 4HS
*/ */

View File

@ -3028,12 +3028,12 @@ ROM_START( hyprdriv )
ROM_SYSTEM_BIOS( 1, "update", "Unknown Update" ) ROM_SYSTEM_BIOS( 1, "update", "Unknown Update" )
ROMX_LOAD( "hyperdrive1.2.u33", 0x000000, 0x100000, CRC(fcc922fb) SHA1(7bfa4f0614f561ba77ad2dc7d776af2c3e84b7e7), ROM_BIOS(2) ) ROMX_LOAD( "hyperdrive1.2.u33", 0x000000, 0x100000, CRC(fcc922fb) SHA1(7bfa4f0614f561ba77ad2dc7d776af2c3e84b7e7), ROM_BIOS(2) )
/* it's either an update to 1.40, or an older version, either way we can't use it with the drive we have, it reports the following /* it's either an update to 1.40, or an older version, either way we can't use it with the drive we have, it reports the following
'Valid Update Rom Detected' 'Valid Update Rom Detected'
'Processing Rom' 'Processing Rom'
'Rom is Wrong Revision Level' 'Rom is Wrong Revision Level'
'Operation Failure' 'Operation Failure'
*/ */
ROM_REGION32_LE( 0x80000, "user1", 0 ) ROM_REGION32_LE( 0x80000, "user1", 0 )

View File

@ -1630,7 +1630,7 @@ ROM_START( soniccar ) /* Waku Waku Sonic Patrol Car (c)1991 Sega - 834-8401 SON
ROM_REGION( 0x200000, "maincpu", 0 ) ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD16_BYTE( "epr-14369.ic32", 0x000000, 0x040000, CRC(2ea4c9a3) SHA1(92ee27c93bd1cbb99c88af39f5f227a8cadfb13c) ) ROM_LOAD16_BYTE( "epr-14369.ic32", 0x000000, 0x040000, CRC(2ea4c9a3) SHA1(92ee27c93bd1cbb99c88af39f5f227a8cadfb13c) )
ROM_LOAD16_BYTE( "epr-14395.ic31", 0x000001, 0x040000, CRC(39622e18) SHA1(b7093c6d86e429e9721a0e1fd781231dc4342b31) ) ROM_LOAD16_BYTE( "epr-14395.ic31", 0x000001, 0x040000, CRC(39622e18) SHA1(b7093c6d86e429e9721a0e1fd781231dc4342b31) )
ROM_REGION( 0x040000, "upd", 0 ) ROM_REGION( 0x040000, "upd", 0 )
ROM_LOAD( "epr-14394.ic4", 0x000000, 0x040000, CRC(476e30dd) SHA1(c9d381160c58b05763ea286a53c7ca6de074fda2) ) ROM_LOAD( "epr-14394.ic4", 0x000000, 0x040000, CRC(476e30dd) SHA1(c9d381160c58b05763ea286a53c7ca6de074fda2) )
ROM_END ROM_END

View File

@ -8214,7 +8214,7 @@ GAME( 1989, fpoint1d, fpoint, system16b, fpoint, segas16b_state,generic
GAME( 1988, tetris2d, tetris, system16b, tetris, segas16b_state,generic_5704, ROT0, "bootleg", "Tetris (set 2, Japan, System 16B) (bootleg of FD1094 317-0092 set)", 0 ) GAME( 1988, tetris2d, tetris, system16b, tetris, segas16b_state,generic_5704, ROT0, "bootleg", "Tetris (set 2, Japan, System 16B) (bootleg of FD1094 317-0092 set)", 0 )
GAME( 1988, tetris1d, tetris, system16b, tetris, segas16b_state,generic_5358_small, ROT0, "bootleg", "Tetris (set 1, Japan, System 16B) (bootleg of FD1094 317-0091 set)", 0 ) GAME( 1988, tetris1d, tetris, system16b, tetris, segas16b_state,generic_5358_small, ROT0, "bootleg", "Tetris (set 1, Japan, System 16B) (bootleg of FD1094 317-0091 set)", 0 )
GAME( 1988, dduxd, ddux, system16b, ddux, segas16b_state,generic_5521, ROT0, "bootleg", "Dynamite Dux (set 3, World) (bootleg of FD1094 317-0096 set)", 0 ) GAME( 1988, dduxd, ddux, system16b, ddux, segas16b_state,generic_5521, ROT0, "bootleg", "Dynamite Dux (set 3, World) (bootleg of FD1094 317-0096 set)", 0 )
GAME( 1988, dduxjd, ddux, system16b, ddux, segas16b_state,generic_5521, ROT0, "bootleg", "Dynamite Dux (set 2, Japan) (bootleg of FD1094 317-0094 set)", 0 ) GAME( 1988, dduxjd, ddux, system16b, ddux, segas16b_state,generic_5521, ROT0, "bootleg", "Dynamite Dux (set 2, Japan) (bootleg of FD1094 317-0094 set)", 0 )
GAME( 1988, altbeast5d, altbeast, system16b, altbeast, segas16b_state,generic_5521, ROT0, "bootleg", "Altered Beast (set 5) (bootleg of FD1094 317-0069 set)", 0 ) GAME( 1988, altbeast5d, altbeast, system16b, altbeast, segas16b_state,generic_5521, ROT0, "bootleg", "Altered Beast (set 5) (bootleg of FD1094 317-0069 set)", 0 )

View File

@ -330,7 +330,6 @@ void segaxbd_state::device_start()
void segaxbd_state::device_reset() void segaxbd_state::device_reset()
{ {
m_segaic16vid->tilemap_reset(*m_screen); m_segaic16vid->tilemap_reset(*m_screen);
// hook the RESET line, which resets CPU #1 // hook the RESET line, which resets CPU #1
@ -348,7 +347,6 @@ public:
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_mainpcb(*this, "mainpcb") m_mainpcb(*this, "mainpcb")
{ {
} }
required_device<segaxbd_state> m_mainpcb; required_device<segaxbd_state> m_mainpcb;

View File

@ -62,7 +62,7 @@ READ32_MEMBER(taito_f3_state::f3_control_r)
if (offset<6) if (offset<6)
return m_input[offset]->read(); return m_input[offset]->read();
else logerror("CPU #0 PC %06x: warning - read unmapped control address %06x\n", space.device().safe_pc(), offset); else logerror("CPU #0 PC %06x: warning - read unmapped control address %06x\n", space.device().safe_pc(), offset);
return 0xffffffff; return 0xffffffff;
} }

View File

@ -440,34 +440,34 @@ ROM_START( toratora )
ROM_END ROM_END
/* Tora Tora? Game Plan? /* Tora Tora? Game Plan?
Etched in copper on top of board 20-00047C Etched in copper on top of board 20-00047C
20-10051A 20-10051A
Etched in copper on back of daughter board 20-00048C Etched in copper on back of daughter board 20-00048C
20-10052A 20-10052A
ROM text showed TORA TOR* * was A with bit 7 set ROM text showed TORA TOR* * was A with bit 7 set
1980 GAME PLAN,INC 1980 GAME PLAN,INC
and war stuff (PLANE, BOMB, SQUAD, etc) and war stuff (PLANE, BOMB, SQUAD, etc)
.u2 2716 handwritten sticker U-2 .u2 2716 handwritten sticker U-2
.u9 2716 handwritten sticker U-9 .u9 2716 handwritten sticker U-9
.u10 2716 handwritten sticker U-10 .u10 2716 handwritten sticker U-10
.u11 2716 handwritten sticker U-11 .u11 2716 handwritten sticker U-11
open 24 pin socket @ U1 and U3 open 24 pin socket @ U1 and U3
open 40 pin socket @ U42 open 40 pin socket @ U42
Main board Main board
crystal with 5 185 on the top crystal with 5 185 on the top
5280 x8 5280 x8
socketed ds8833 x2 socketed ds8833 x2
socketed ds8t28 x2 socketed ds8t28 x2
Daughter board Daughter board
open 40 pin socket @ U3 @ U2 open 40 pin socket @ U3 @ U2
76477 X2 */ 76477 X2 */
ROM_START( toratorab ) ROM_START( toratorab )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )

View File

@ -36,39 +36,39 @@
class wackygtr_state : public driver_device class wackygtr_state : public driver_device
{ {
public: public:
wackygtr_state(const machine_config &mconfig, device_type type, const char *tag) wackygtr_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_msm(*this, "msm"), m_msm(*this, "msm"),
m_maincpu(*this, "maincpu") m_maincpu(*this, "maincpu")
{ } { }
UINT8* m_samples; UINT8* m_samples;
int m_adpcm_data; int m_adpcm_data;
int m_adpcm_pos; int m_adpcm_pos;
int m_adpcm_length; int m_adpcm_length;
required_device<msm5205_device> m_msm; required_device<msm5205_device> m_msm;
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
DECLARE_DRIVER_INIT(wackygtr); DECLARE_DRIVER_INIT(wackygtr);
INTERRUPT_GEN_MEMBER(wackygtr_interrupt); INTERRUPT_GEN_MEMBER(wackygtr_interrupt);
DECLARE_WRITE_LINE_MEMBER(adpcm_int); DECLARE_WRITE_LINE_MEMBER(adpcm_int);
DECLARE_READ8_MEMBER(_0x6000_r); DECLARE_READ8_MEMBER(_0x6000_r);
DECLARE_READ8_MEMBER(_0x6001_r); DECLARE_READ8_MEMBER(_0x6001_r);
DECLARE_READ8_MEMBER(_0x6002_r); DECLARE_READ8_MEMBER(_0x6002_r);
DECLARE_READ8_MEMBER(_0x71d0_r); DECLARE_READ8_MEMBER(_0x71d0_r);
DECLARE_READ8_MEMBER(_0x71d5_r); DECLARE_READ8_MEMBER(_0x71d5_r);
DECLARE_WRITE8_MEMBER(sample_pos_w); DECLARE_WRITE8_MEMBER(sample_pos_w);
DECLARE_WRITE8_MEMBER(sample_length_w); DECLARE_WRITE8_MEMBER(sample_length_w);
}; };
DRIVER_INIT_MEMBER(wackygtr_state, wackygtr) DRIVER_INIT_MEMBER(wackygtr_state, wackygtr)
{ {
m_adpcm_data = -1; m_adpcm_data = -1;
m_adpcm_pos = 0; m_adpcm_pos = 0;
m_adpcm_length = 0; m_adpcm_length = 0;
m_samples = memregion("oki")->base(); m_samples = memregion("oki")->base();
} }
/* /*
@ -76,23 +76,23 @@ DRIVER_INIT_MEMBER(wackygtr_state, wackygtr)
* and may be completely wrong, so should not yet be understood as hardware documentation. * and may be completely wrong, so should not yet be understood as hardware documentation.
*/ */
READ8_MEMBER(wackygtr_state::_0x6000_r){ READ8_MEMBER(wackygtr_state::_0x6000_r){
return 0x00; return 0x00;
} }
READ8_MEMBER(wackygtr_state::_0x6001_r){ READ8_MEMBER(wackygtr_state::_0x6001_r){
return 0x00; return 0x00;
} }
READ8_MEMBER(wackygtr_state::_0x6002_r){ READ8_MEMBER(wackygtr_state::_0x6002_r){
return 0x00; return 0x00;
} }
READ8_MEMBER(wackygtr_state::_0x71d0_r){ READ8_MEMBER(wackygtr_state::_0x71d0_r){
return 0; return 0;
} }
READ8_MEMBER(wackygtr_state::_0x71d5_r){ READ8_MEMBER(wackygtr_state::_0x71d5_r){
return 0xFF; return 0xFF;
} }
/* The handling of sample playback is also guessed. /* The handling of sample playback is also guessed.
@ -100,79 +100,79 @@ READ8_MEMBER(wackygtr_state::_0x71d5_r){
* better understand how this is actually hooked up on the original boards; * better understand how this is actually hooked up on the original boards;
*/ */
WRITE8_MEMBER(wackygtr_state::sample_pos_w){ WRITE8_MEMBER(wackygtr_state::sample_pos_w){
m_adpcm_pos = (m_adpcm_pos & 0xFF) << 8 | (data & 0xFF); m_adpcm_pos = (m_adpcm_pos & 0xFF) << 8 | (data & 0xFF);
} }
WRITE8_MEMBER(wackygtr_state::sample_length_w){ WRITE8_MEMBER(wackygtr_state::sample_length_w){
m_adpcm_length = (m_adpcm_length & 0xFF) << 8 | (data & 0xFF); m_adpcm_length = (m_adpcm_length & 0xFF) << 8 | (data & 0xFF);
} }
static INPUT_PORTS_START( wackygtr ) static INPUT_PORTS_START( wackygtr )
PORT_START("INP0") PORT_START("INP0")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END INPUT_PORTS_END
WRITE_LINE_MEMBER(wackygtr_state::adpcm_int) WRITE_LINE_MEMBER(wackygtr_state::adpcm_int)
{ {
/* This looks almost correct, but I am not yet completely sure. */ /* This looks almost correct, but I am not yet completely sure. */
if (m_adpcm_length > 0) if (m_adpcm_length > 0)
{ {
m_adpcm_length--; m_adpcm_length--;
if (m_adpcm_data == -1) if (m_adpcm_data == -1)
{ {
/* transferring 1st nibble */ /* transferring 1st nibble */
m_adpcm_data = m_samples[m_adpcm_pos]; m_adpcm_data = m_samples[m_adpcm_pos];
m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff; m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff;
m_msm->data_w((m_adpcm_data >> 4) & 0xf); m_msm->data_w((m_adpcm_data >> 4) & 0xf);
} }
else else
{ {
/* transferring 2nd nibble */ /* transferring 2nd nibble */
m_msm->data_w(m_adpcm_data & 0x0f); m_msm->data_w(m_adpcm_data & 0x0f);
m_adpcm_data = -1; m_adpcm_data = -1;
} }
} }
} }
static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, wackygtr_state ) static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, wackygtr_state )
AM_RANGE(0x3000, 0x3000) AM_WRITE(sample_length_w) AM_RANGE(0x3000, 0x3000) AM_WRITE(sample_length_w)
AM_RANGE(0x3001, 0x3001) AM_WRITE(sample_pos_w) AM_RANGE(0x3001, 0x3001) AM_WRITE(sample_pos_w)
AM_RANGE(0x6000, 0x6000) AM_READ(_0x6000_r) /* guessed hw peripheral address */ AM_RANGE(0x6000, 0x6000) AM_READ(_0x6000_r) /* guessed hw peripheral address */
AM_RANGE(0x6001, 0x6001) AM_READ(_0x6001_r) /* guessed hw peripheral address */ AM_RANGE(0x6001, 0x6001) AM_READ(_0x6001_r) /* guessed hw peripheral address */
AM_RANGE(0x6002, 0x6002) AM_READ(_0x6002_r) /* guessed hw peripheral address */ AM_RANGE(0x6002, 0x6002) AM_READ(_0x6002_r) /* guessed hw peripheral address */
AM_RANGE(0x71d0, 0x71d0) AM_READ(_0x71d0_r) /* guessed hw peripheral address */ AM_RANGE(0x71d0, 0x71d0) AM_READ(_0x71d0_r) /* guessed hw peripheral address */
AM_RANGE(0x71d5, 0x71d5) AM_READ(_0x71d5_r) /* guessed hw peripheral address */ AM_RANGE(0x71d5, 0x71d5) AM_READ(_0x71d5_r) /* guessed hw peripheral address */
AM_RANGE(0x7000, 0x7fff) AM_RAM AM_RANGE(0x7000, 0x7fff) AM_RAM
AM_RANGE(0x8000, 0xffff) AM_ROM AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( wackygtr, wackygtr_state ) static MACHINE_CONFIG_START( wackygtr, wackygtr_state )
MCFG_CPU_ADD("maincpu", M6809E, XTAL_8MHz) MCFG_CPU_ADD("maincpu", M6809E, XTAL_8MHz)
MCFG_CPU_PROGRAM_MAP(program_map) MCFG_CPU_PROGRAM_MAP(program_map)
/* Video */ /* Video */
// MCFG_DEFAULT_LAYOUT(layout_wackygtr) // MCFG_DEFAULT_LAYOUT(layout_wackygtr)
/* Sound */ /* Sound */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz ) MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz )
MCFG_MSM5205_VCLK_CB(WRITELINE(wackygtr_state, adpcm_int)) /* IRQ handler */ MCFG_MSM5205_VCLK_CB(WRITELINE(wackygtr_state, adpcm_int)) /* IRQ handler */
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8 KHz, 4 Bits */ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8 KHz, 4 Bits */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* I have a hunch that this board may also /* I have a hunch that this board may also
* contain a YM2151 sound chip for background music... * contain a YM2151 sound chip for background music...
*/ */
MACHINE_CONFIG_END MACHINE_CONFIG_END
ROM_START( wackygtr ) ROM_START( wackygtr )
ROM_REGION(0x10000, "maincpu", 0) ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("wp3-pr0.4d", 0x8000, 0x8000, CRC(71ca4437) SHA1(c7d948c5593e6053fd0a65601f6c06871f5861f0)) ROM_LOAD("wp3-pr0.4d", 0x8000, 0x8000, CRC(71ca4437) SHA1(c7d948c5593e6053fd0a65601f6c06871f5861f0))
ROM_REGION(0x10000, "oki", 0) ROM_REGION(0x10000, "oki", 0)
ROM_LOAD("wp3-vo0.2h", 0x0000, 0x10000, CRC(91c7986f) SHA1(bc9fa0d41c1caa0f909a349f511d022b7e42c6cd)) ROM_LOAD("wp3-vo0.2h", 0x0000, 0x10000, CRC(91c7986f) SHA1(bc9fa0d41c1caa0f909a349f511d022b7e42c6cd))
ROM_END ROM_END
GAME(1990, wackygtr, 0, wackygtr, wackygtr, wackygtr_state, wackygtr, ROT0, "Data East", "Wacky Gator", MACHINE_IS_SKELETON_MECHANICAL) GAME(1990, wackygtr, 0, wackygtr, wackygtr, wackygtr_state, wackygtr, ROT0, "Data East", "Wacky Gator", MACHINE_IS_SKELETON_MECHANICAL)

View File

@ -506,16 +506,16 @@ static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
MCFG_CPU_ADD("maincpu", Z80,XTAL_18_432MHz/6) /* verified on pcb */ MCFG_CPU_ADD("maincpu", Z80,XTAL_18_432MHz/6) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", zaccaria_state, vblank_irq) MCFG_CPU_VBLANK_INT_DRIVER("screen", zaccaria_state, vblank_irq)
// MCFG_QUANTUM_TIME(attotime::from_hz(1000000)) // MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
MCFG_CPU_ADD("audiocpu", M6802,XTAL_3_579545MHz) /* verified on pcb */ MCFG_CPU_ADD("audiocpu", M6802,XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(sound_map_1) MCFG_CPU_PROGRAM_MAP(sound_map_1)
MCFG_CPU_PERIODIC_INT_DRIVER(zaccaria_state, cb1_toggle, (double)XTAL_3_579545MHz/4096) MCFG_CPU_PERIODIC_INT_DRIVER(zaccaria_state, cb1_toggle, (double)XTAL_3_579545MHz/4096)
// MCFG_QUANTUM_TIME(attotime::from_hz(1000000)) // MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
MCFG_CPU_ADD("audio2", M6802,XTAL_3_579545MHz) /* verified on pcb */ MCFG_CPU_ADD("audio2", M6802,XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(sound_map_2) MCFG_CPU_PROGRAM_MAP(sound_map_2)
// MCFG_QUANTUM_TIME(attotime::from_hz(1000000)) // MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
MCFG_DEVICE_ADD("ppi8255", I8255A, 0) MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
MCFG_I8255_IN_PORTA_CB(IOPORT("P1")) MCFG_I8255_IN_PORTA_CB(IOPORT("P1"))

View File

@ -19,14 +19,14 @@ class galastrm_renderer : public poly_manager<float, gs_poly_data, 2, 10000>
public: public:
galastrm_renderer(galastrm_state &state); galastrm_renderer(galastrm_state &state);
void tc0610_draw_scanline(INT32 scanline, const extent_t& extent, const gs_poly_data& object, int threadid); void tc0610_draw_scanline(INT32 scanline, const extent_t& extent, const gs_poly_data& object, int threadid);
void tc0610_rotate_draw(bitmap_ind16 &srcbitmap, const rectangle &clip); void tc0610_rotate_draw(bitmap_ind16 &srcbitmap, const rectangle &clip);
bitmap_ind16 &screenbits() { return m_screenbits; } bitmap_ind16 &screenbits() { return m_screenbits; }
private: private:
galastrm_state& m_state; galastrm_state& m_state;
bitmap_ind16 m_screenbits; bitmap_ind16 m_screenbits;
}; };
@ -81,8 +81,8 @@ public:
struct gs_tempsprite *m_spritelist; struct gs_tempsprite *m_spritelist;
struct gs_tempsprite *m_sprite_ptr_pre; struct gs_tempsprite *m_sprite_ptr_pre;
bitmap_ind16 m_tmpbitmaps; bitmap_ind16 m_tmpbitmaps;
galastrm_renderer *m_poly; galastrm_renderer *m_poly;
int m_rsxb; int m_rsxb;
int m_rsyb; int m_rsyb;
int m_rsxoffs; int m_rsxoffs;

View File

@ -109,21 +109,21 @@ class hng64_state;
class hng64_poly_renderer : public poly_manager<float, hng64_poly_data, 7, HNG64_MAX_POLYGONS> class hng64_poly_renderer : public poly_manager<float, hng64_poly_data, 7, HNG64_MAX_POLYGONS>
{ {
public: public:
hng64_poly_renderer(hng64_state& state); hng64_poly_renderer(hng64_state& state);
void drawShaded(struct polygon *p); void drawShaded(struct polygon *p);
void render_scanline(INT32 scanline, const extent_t& extent, const hng64_poly_data& renderData, int threadid); void render_scanline(INT32 scanline, const extent_t& extent, const hng64_poly_data& renderData, int threadid);
hng64_state& state() { return m_state; }
bitmap_rgb32& colorBuffer3d() { return m_colorBuffer3d; }
float* depthBuffer3d() { return m_depthBuffer3d; }
hng64_state& state() { return m_state; }
bitmap_rgb32& colorBuffer3d() { return m_colorBuffer3d; }
float* depthBuffer3d() { return m_depthBuffer3d; }
private: private:
hng64_state& m_state; hng64_state& m_state;
// (Temporarily class members - someday they will live in the memory map) // (Temporarily class members - someday they will live in the memory map)
bitmap_rgb32 m_colorBuffer3d; bitmap_rgb32 m_colorBuffer3d;
float* m_depthBuffer3d; float* m_depthBuffer3d;
}; };
@ -173,7 +173,7 @@ public:
required_shared_ptr<UINT32> m_videoregs; required_shared_ptr<UINT32> m_videoregs;
required_shared_ptr<UINT32> m_tcram; required_shared_ptr<UINT32> m_tcram;
/* 3D stuff */ /* 3D stuff */
UINT16* m_dl; UINT16* m_dl;
required_shared_ptr<UINT32> m_3dregs; required_shared_ptr<UINT32> m_3dregs;
@ -325,9 +325,9 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(acc_down_r); DECLARE_CUSTOM_INPUT_MEMBER(acc_down_r);
DECLARE_CUSTOM_INPUT_MEMBER(brake_down_r); DECLARE_CUSTOM_INPUT_MEMBER(brake_down_r);
hng64_poly_renderer* m_poly_renderer; hng64_poly_renderer* m_poly_renderer;
void clear3d(); void clear3d();
TIMER_CALLBACK_MEMBER(hng64_3dfifo_processed); TIMER_CALLBACK_MEMBER(hng64_3dfifo_processed);
void hng64_command3d(const UINT16* packet); void hng64_command3d(const UINT16* packet);

View File

@ -280,91 +280,90 @@ struct triangle;
class model2_renderer : public poly_manager<float, m2_poly_extra_data, 4, 4000> class model2_renderer : public poly_manager<float, m2_poly_extra_data, 4, 4000>
{ {
public: public:
typedef void (model2_renderer::*scanline_render_func)(INT32 scanline, const extent_t& extent, const m2_poly_extra_data& object, int threadid); typedef void (model2_renderer::*scanline_render_func)(INT32 scanline, const extent_t& extent, const m2_poly_extra_data& object, int threadid);
public: public:
model2_renderer(model2_state& state) model2_renderer(model2_state& state)
: poly_manager<float, m2_poly_extra_data, 4, 4000>(state.machine()) : poly_manager<float, m2_poly_extra_data, 4, 4000>(state.machine())
, m_state(state) , m_state(state)
, m_destmap(state.m_screen->width(), state.m_screen->height()) , m_destmap(state.m_screen->width(), state.m_screen->height())
{ {
m_renderfuncs[0] = &model2_renderer::model2_3d_render_0; m_renderfuncs[0] = &model2_renderer::model2_3d_render_0;
m_renderfuncs[1] = &model2_renderer::model2_3d_render_1; m_renderfuncs[1] = &model2_renderer::model2_3d_render_1;
m_renderfuncs[2] = &model2_renderer::model2_3d_render_2; m_renderfuncs[2] = &model2_renderer::model2_3d_render_2;
m_renderfuncs[3] = &model2_renderer::model2_3d_render_3; m_renderfuncs[3] = &model2_renderer::model2_3d_render_3;
m_renderfuncs[4] = &model2_renderer::model2_3d_render_4; m_renderfuncs[4] = &model2_renderer::model2_3d_render_4;
m_renderfuncs[5] = &model2_renderer::model2_3d_render_5; m_renderfuncs[5] = &model2_renderer::model2_3d_render_5;
m_renderfuncs[6] = &model2_renderer::model2_3d_render_6; m_renderfuncs[6] = &model2_renderer::model2_3d_render_6;
m_renderfuncs[7] = &model2_renderer::model2_3d_render_7; m_renderfuncs[7] = &model2_renderer::model2_3d_render_7;
} }
bitmap_rgb32& destmap() { return m_destmap; } bitmap_rgb32& destmap() { return m_destmap; }
void model2_3d_render(triangle *tri, const rectangle &cliprect); void model2_3d_render(triangle *tri, const rectangle &cliprect);
/* checker = 0, textured = 0, transparent = 0 */ /* checker = 0, textured = 0, transparent = 0 */
#define MODEL2_FUNC 0 #define MODEL2_FUNC 0
#define MODEL2_FUNC_NAME model2_3d_render_0 #define MODEL2_FUNC_NAME model2_3d_render_0
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
/* checker = 0, textured = 0, translucent = 1 */ /* checker = 0, textured = 0, translucent = 1 */
#define MODEL2_FUNC 1 #define MODEL2_FUNC 1
#define MODEL2_FUNC_NAME model2_3d_render_1 #define MODEL2_FUNC_NAME model2_3d_render_1
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
/* checker = 0, textured = 1, translucent = 0 */ /* checker = 0, textured = 1, translucent = 0 */
#define MODEL2_FUNC 2 #define MODEL2_FUNC 2
#define MODEL2_FUNC_NAME model2_3d_render_2 #define MODEL2_FUNC_NAME model2_3d_render_2
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
/* checker = 0, textured = 1, translucent = 1 */ /* checker = 0, textured = 1, translucent = 1 */
#define MODEL2_FUNC 3 #define MODEL2_FUNC 3
#define MODEL2_FUNC_NAME model2_3d_render_3 #define MODEL2_FUNC_NAME model2_3d_render_3
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
/* checker = 1, textured = 0, translucent = 0 */ /* checker = 1, textured = 0, translucent = 0 */
#define MODEL2_FUNC 4 #define MODEL2_FUNC 4
#define MODEL2_FUNC_NAME model2_3d_render_4 #define MODEL2_FUNC_NAME model2_3d_render_4
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
/* checker = 1, textured = 0, translucent = 1 */ /* checker = 1, textured = 0, translucent = 1 */
#define MODEL2_FUNC 5 #define MODEL2_FUNC 5
#define MODEL2_FUNC_NAME model2_3d_render_5 #define MODEL2_FUNC_NAME model2_3d_render_5
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
/* checker = 1, textured = 1, translucent = 0 */ /* checker = 1, textured = 1, translucent = 0 */
#define MODEL2_FUNC 6 #define MODEL2_FUNC 6
#define MODEL2_FUNC_NAME model2_3d_render_6 #define MODEL2_FUNC_NAME model2_3d_render_6
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
/* checker = 1, textured = 1, translucent = 1 */ /* checker = 1, textured = 1, translucent = 1 */
#define MODEL2_FUNC 7 #define MODEL2_FUNC 7
#define MODEL2_FUNC_NAME model2_3d_render_7 #define MODEL2_FUNC_NAME model2_3d_render_7
#include "video/model2rd.inc" #include "video/model2rd.inc"
#undef MODEL2_FUNC #undef MODEL2_FUNC
#undef MODEL2_FUNC_NAME #undef MODEL2_FUNC_NAME
scanline_render_func m_renderfuncs[8];
scanline_render_func m_renderfuncs[8];
private: private:
model2_state& m_state; model2_state& m_state;
bitmap_rgb32 m_destmap; bitmap_rgb32 m_destmap;
}; };
typedef model2_renderer::vertex_t poly_vertex; typedef model2_renderer::vertex_t poly_vertex;

View File

@ -311,7 +311,7 @@ extern const device_type N64PERIPH;
#define DP_STATUS_XBUS_DMA 0x01 #define DP_STATUS_XBUS_DMA 0x01
#define DP_STATUS_FREEZE 0x02 #define DP_STATUS_FREEZE 0x02
#define DP_STATUS_FLUSH 0x04 #define DP_STATUS_FLUSH 0x04
#define DP_STATUS_START_VALID 0x400 #define DP_STATUS_START_VALID 0x400
#define DD_ASIC_STATUS_DISK_CHANGE 0x00010000 #define DD_ASIC_STATUS_DISK_CHANGE 0x00010000
#define DD_ASIC_STATUS_MECHA_ERR 0x00020000 #define DD_ASIC_STATUS_MECHA_ERR 0x00020000

View File

@ -54,7 +54,7 @@ public:
// video updates // video updates
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
// palette helpers // palette helpers
DECLARE_WRITE16_MEMBER( paletteram_w ); DECLARE_WRITE16_MEMBER( paletteram_w );
@ -78,7 +78,7 @@ protected:
}; };
// device overrides // device overrides
// virtual void machine_reset(); // virtual void machine_reset();
virtual void video_start(); virtual void video_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@ -239,5 +239,3 @@ protected:
// virtual void device_start(); // virtual void device_start();
// virtual void device_reset(); // virtual void device_reset();
}; };

View File

@ -14,7 +14,7 @@
x x x x | | \---- /EAROM C1 (note this is inverted! the value written here is inverted, then connected to EAROM C1 AND to the /OE of the 'input latch' which drive the EAROM bus when writing) x x x x | | \---- /EAROM C1 (note this is inverted! the value written here is inverted, then connected to EAROM C1 AND to the /OE of the 'input latch' which drive the EAROM bus when writing)
x x x x | \------ EAROM C2 (directly connected) x x x x | \------ EAROM C2 (directly connected)
x x x x \-------- EAROM CS1 (positive enable, directly connected) x x x x \-------- EAROM CS1 (positive enable, directly connected)
Gravitar, Red Baron, Black Widow, Tempest, Liberator, Asteroids Deluxe, Runaway CTRL port wiring: Gravitar, Red Baron, Black Widow, Tempest, Liberator, Asteroids Deluxe, Runaway CTRL port wiring:
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
x x x x | | | \-- EAROM CLK (directly connected) x x x x | | | \-- EAROM CLK (directly connected)
@ -165,8 +165,8 @@ void atari_vg_earom_device::device_start()
void atari_vg_earom_device::device_reset() void atari_vg_earom_device::device_reset()
{ {
m_state = ER2055_READ_WAITING_FOR_CLOCK; // start in read mode m_state = ER2055_READ_WAITING_FOR_CLOCK; // start in read mode
m_old_ctrl = 0; m_old_ctrl = 0;
m_in_offset = 0; m_in_offset = 0;
m_in_data = 0; m_in_data = 0;
m_out_data = 0xFF; // the value driven to the bus by the resistors if EAROM is open bus m_out_data = 0xFF; // the value driven to the bus by the resistors if EAROM is open bus
} }

View File

@ -566,7 +566,7 @@ fd1094_device::fd1094_device(const machine_config &mconfig, const char *tag, dev
m_name.assign("FD1094"); m_name.assign("FD1094");
// add the decrypted opcodes map // add the decrypted opcodes map
// m_address_map[AS_DECRYPTED_OPCODES] = ADDRESS_MAP_NAME(decrypted_opcodes_map); // m_address_map[AS_DECRYPTED_OPCODES] = ADDRESS_MAP_NAME(decrypted_opcodes_map);
// create the initial masked opcode table // create the initial masked opcode table
memset(m_masked_opcodes_lookup, 0, sizeof(m_masked_opcodes_lookup)); memset(m_masked_opcodes_lookup, 0, sizeof(m_masked_opcodes_lookup));

View File

@ -24,21 +24,21 @@ Sega MODEL2 COMMUNICATION BOARD 837-10537
| |-------------------| |-------------------| |-------------------| | | |-------------------| |-------------------| |-------------------| |
|-----------------------------------------------------------------------------| |-----------------------------------------------------------------------------|
Setup: Setup:
Z80 Zilog Z0840008PSC Z80 CPU (DIP40) Z80 Zilog Z0840008PSC Z80 CPU (DIP40)
LH5268A SHARP LH5268AD-10LL 8k x8 SRAM (DIP28) LH5268A SHARP LH5268AD-10LL 8k x8 SRAM (DIP28)
uPD72103 NEC uPD72103 HDLC/Frame Relay Controller (QFP80) uPD72103 NEC uPD72103 HDLC/Frame Relay Controller (QFP80)
16726.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-16726') 16726.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-16726')
315-5751 Lattice GAL16V8B-25LP PAL (DIP20) 315-5751 Lattice GAL16V8B-25LP PAL (DIP20)
315-5752 Lattice GAL16V8B-25LP PAL (DIP20) 315-5752 Lattice GAL16V8B-25LP PAL (DIP20)
315-5753A AMI 18CV8PC-15 PAL (DIP20) 315-5753A AMI 18CV8PC-15 PAL (DIP20)
315-5547 AMI 18CV8PC-25 PAL (DIP20) 315-5547 AMI 18CV8PC-25 PAL (DIP20)
Board: Board:
837-10537 Daytona USA 837-10537 Daytona USA
EEPROM: EEPROM:
16726.7 Daytona USA 16726.7 Daytona USA
Sega PC BD MODEL2 A-CRX COMMUNICATION 837-11525 Sega PC BD MODEL2 A-CRX COMMUNICATION 837-11525
@ -63,23 +63,23 @@ Sega PC BD MODEL2 A-CRX COMMUNICATION 837-11525
| |-------------------| |-------------------| |-------------------| | | |-------------------| |-------------------| |-------------------| |
|-------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|
Setup: Setup:
Z80 Zilog Z0840008PSC Z80 CPU (DIP40) Z80 Zilog Z0840008PSC Z80 CPU (DIP40)
LH5268A SHARP LH5268AD-10LL 8k x8 SRAM (DIP28) LH5268A SHARP LH5268AD-10LL 8k x8 SRAM (DIP28)
uPD72103 NEC uPD72103 HDLC/Frame Relay Controller (QFP80) uPD72103 NEC uPD72103 HDLC/Frame Relay Controller (QFP80)
16726.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-16726') 16726.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-16726')
315-5751 Lattice GAL16V8B-25LP PAL (DIP20) 315-5751 Lattice GAL16V8B-25LP PAL (DIP20)
315-5752 Lattice GAL16V8B-25LP PAL (DIP20) 315-5752 Lattice GAL16V8B-25LP PAL (DIP20)
315-5753A AMI 18CV8PC-15 PAL (DIP20) 315-5753A AMI 18CV8PC-15 PAL (DIP20)
315-5547 AMI 18CV8PC-25 PAL (DIP20) 315-5547 AMI 18CV8PC-25 PAL (DIP20)
Board: Board:
837-11525 837-11525
837-11572 Sega Rally Championship 837-11572 Sega Rally Championship
EEPROM: EEPROM:
16726.7 Sega Rally Championship 16726.7 Sega Rally Championship
18643A.7 ManxTT 18643A.7 ManxTT
Sega PC BD MODEL2 B-CRX COMMUNICATION 837-11615 Sega PC BD MODEL2 B-CRX COMMUNICATION 837-11615
@ -104,23 +104,23 @@ Sega PC BD MODEL2 B-CRX COMMUNICATION 837-11615
| CN3 |-------------------| | | CN3 |-------------------| |
|-------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|
Setup: Setup:
Z80 Zilog Z0840008PSC Z80 CPU (DIP40) Z80 Zilog Z0840008PSC Z80 CPU (DIP40)
MB84256A Fujitsu MB84256A-70LL 32k x8 SRAM (SDIP28) MB84256A Fujitsu MB84256A-70LL 32k x8 SRAM (SDIP28)
uPD72103A NEC uPD72103 HDLC/Frame Relay Controller (QFP80) uPD72103A NEC uPD72103 HDLC/Frame Relay Controller (QFP80)
18643A.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-18643A') 18643A.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-18643A')
315-5751 Lattice GAL16V8B-25LP PAL (DIP20) 315-5751 Lattice GAL16V8B-25LP PAL (DIP20)
315-5752 Lattice GAL16V8B-25LP PAL (DIP20) 315-5752 Lattice GAL16V8B-25LP PAL (DIP20)
315-5753A ICT PEEL18CV8P-15 PAL (DIP20) 315-5753A ICT PEEL18CV8P-15 PAL (DIP20)
315-5547A AMI 18CV8PC-25 PAL (DIP20) 315-5547A AMI 18CV8PC-25 PAL (DIP20)
Board: Board:
837-11615 Virtua On 837-11615 Virtua On
837-11615-02 Virtua On 837-11615-02 Virtua On
EEPROM: EEPROM:
18643.7 Virtua On 18643.7 Virtua On
18643A.7 Virtua On 18643A.7 Virtua On
@ -146,21 +146,21 @@ Sega PC BD MODEL2 C-CRX COMMUNICATION 837-12839
| CN3 |-------------------| | | CN3 |-------------------| |
|-------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------|
Setup: Setup:
Z80 Zilog Z0840008PSC Z80 CPU (DIP40) Z80 Zilog Z0840008PSC Z80 CPU (DIP40)
MB84256A Fujitsu MB84256A-70LL 32k x8 SRAM (SDIP28) MB84256A Fujitsu MB84256A-70LL 32k x8 SRAM (SDIP28)
uPD72103A NEC uPD72103 HDLC/Frame Relay Controller (QFP80) uPD72103A NEC uPD72103 HDLC/Frame Relay Controller (QFP80)
18643A.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-18643A') 18643A.7 M27C1001 128k x8 EPROM (DIP32, labelled 'EPR-18643A')
315-5751 Lattice GAL16V8B-25LP PAL (DIP20) 315-5751 Lattice GAL16V8B-25LP PAL (DIP20)
315-5752 Lattice GAL16V8B-25LP PAL (DIP20) 315-5752 Lattice GAL16V8B-25LP PAL (DIP20)
315-5753A ICT PEEL18CV8P-15 PAL (DIP20) 315-5753A ICT PEEL18CV8P-15 PAL (DIP20)
315-5547A AMI 18CV8PC-25 PAL (DIP20) 315-5547A AMI 18CV8PC-25 PAL (DIP20)
Board: Board:
837-12839 Sega Touring Car Championship 837-12839 Sega Touring Car Championship
EEPROM: EEPROM:
18643A.7 Sega Touring Car Championship 18643A.7 Sega Touring Car Championship
*/ */
#include "machine/m2comm.h" #include "machine/m2comm.h"
@ -296,7 +296,7 @@ WRITE8_MEMBER(m2comm_device::cn_w)
m_linkalive = 0x00; m_linkalive = 0x00;
m_linkcount = 0x00; m_linkcount = 0x00;
m_linktimer = 0x04; //0x00E8; // 58 fps * 4s m_linktimer = 0x04; //0x00E8; // 58 fps * 4s
comm_tick(); comm_tick();
} }
#endif #endif
@ -324,7 +324,7 @@ void m2comm_device::check_vint_irq()
void m2comm_device::set_linktype(UINT16 linktype) void m2comm_device::set_linktype(UINT16 linktype)
{ {
m_linktype = linktype; m_linktype = linktype;
switch (m_linktype) switch (m_linktype)
{ {
case 16726: case 16726:
@ -347,7 +347,7 @@ void m2comm_device::comm_tick()
void m2comm_device::comm_tick_16726() void m2comm_device::comm_tick_16726()
{ {
if (m_linkenable == 0x01) if (m_linkenable == 0x01)
{ {
m_zfg ^= 1; m_zfg ^= 1;
@ -369,21 +369,21 @@ void m2comm_device::comm_tick_16726()
m_shared[0] = 0x00; m_shared[0] = 0x00;
m_shared[2] = 0xff; m_shared[2] = 0xff;
m_shared[3] = 0xff; m_shared[3] = 0xff;
// check rx socket // check rx socket
if (!m_line_rx.is_open()) if (!m_line_rx.is_open())
{ {
printf("M2COMM: listen on %s\n", m_localhost); printf("M2COMM: listen on %s\n", m_localhost);
m_line_rx.open(m_localhost); m_line_rx.open(m_localhost);
} }
// check tx socket // check tx socket
if (!m_line_tx.is_open()) if (!m_line_tx.is_open())
{ {
printf("M2COMM: connect to %s\n", m_remotehost); printf("M2COMM: connect to %s\n", m_remotehost);
m_line_tx.open(m_remotehost); m_line_tx.open(m_remotehost);
} }
// if both sockets are there check ring // if both sockets are there check ring
if ((m_line_rx.is_open()) && (m_line_tx.is_open())) if ((m_line_rx.is_open()) && (m_line_tx.is_open()))
{ {
@ -416,7 +416,7 @@ void m2comm_device::comm_tick_16726()
m_line_tx.write(m_buffer, dataSize); m_line_tx.write(m_buffer, dataSize);
} }
} }
// 0xFE - link size // 0xFE - link size
else if (idx == 0xfe) else if (idx == 0xfe)
{ {
@ -427,11 +427,11 @@ void m2comm_device::comm_tick_16726()
// forward message // forward message
m_line_tx.write(m_buffer, dataSize); m_line_tx.write(m_buffer, dataSize);
} }
// consider it done // consider it done
printf("M2COMM: link established - id %02x of %02x\n", m_linkid, m_linkcount); printf("M2COMM: link established - id %02x of %02x\n", m_linkid, m_linkcount);
m_linkalive = 0x01; m_linkalive = 0x01;
// write to shared mem // write to shared mem
m_shared[0] = 0x01; m_shared[0] = 0x01;
m_shared[2] = m_linkid; m_shared[2] = m_linkid;
@ -449,13 +449,13 @@ void m2comm_device::comm_tick_16726()
} }
printf("M2COMM: droped a message...\n"); printf("M2COMM: droped a message...\n");
} }
if (m_linkalive == 0x00) if (m_linkalive == 0x00)
recv = m_line_rx.read(m_buffer, dataSize); recv = m_line_rx.read(m_buffer, dataSize);
else else
recv = 0; recv = 0;
} }
// if we are master and link is not yet established // if we are master and link is not yet established
if (isMaster && (m_linkalive == 0x00)) if (isMaster && (m_linkalive == 0x00))
{ {
@ -493,7 +493,7 @@ void m2comm_device::comm_tick_16726()
} }
} }
} }
} }
// update "ring buffer" if link established // update "ring buffer" if link established
if (m_linkalive == 0x01) if (m_linkalive == 0x01)
@ -522,7 +522,7 @@ void m2comm_device::comm_tick_16726()
for (int j = 0x00 ; j < frameSize ; j++) for (int j = 0x00 ; j < frameSize ; j++)
{ {
m_shared[frameOffset2 + j] = m_shared[frameOffset1 + j]; m_shared[frameOffset2 + j] = m_shared[frameOffset1 + j];
} }
} }
slotDest -= m_linkcount; slotDest -= m_linkcount;
} }
@ -574,7 +574,7 @@ void m2comm_device::comm_tick_16726()
} }
m_line_tx.write(m_buffer, dataSize); m_line_tx.write(m_buffer, dataSize);
// master sends some additional status bytes // master sends some additional status bytes
if (isMaster){ if (isMaster){
m_buffer[0] = 0xF0; m_buffer[0] = 0xF0;
for (int j = 0x00 ; j < frameSize ; j++) for (int j = 0x00 ; j < frameSize ; j++)
@ -589,9 +589,9 @@ void m2comm_device::comm_tick_16726()
m_line_tx.write(m_buffer, dataSize); m_line_tx.write(m_buffer, dataSize);
} }
} }
// clear 03 // clear 03
//TODO:m_shared[3] = 0x00; //TODO:m_shared[3] = 0x00;
} }
} }
#endif #endif

View File

@ -11,7 +11,7 @@
#define MCFG_M2COMM_ADD(_tag ) \ #define MCFG_M2COMM_ADD(_tag ) \
MCFG_DEVICE_ADD(_tag, M2COMM, 0) MCFG_DEVICE_ADD(_tag, M2COMM, 0)
//************************************************************************** //**************************************************************************
// TYPE DEFINITIONS // TYPE DEFINITIONS
//************************************************************************** //**************************************************************************
@ -45,7 +45,7 @@ public:
DECLARE_READ8_MEMBER(fg_r); DECLARE_READ8_MEMBER(fg_r);
DECLARE_WRITE8_MEMBER(fg_w); DECLARE_WRITE8_MEMBER(fg_w);
// IRQ logic - 5 = VINT, 7 = DLC // IRQ logic - 5 = VINT, 7 = DLC
void check_vint_irq(); void check_vint_irq();
#ifdef __M2COMM_SIMULATION__ #ifdef __M2COMM_SIMULATION__
void set_linktype(UINT16 linktype); void set_linktype(UINT16 linktype);
@ -58,16 +58,16 @@ protected:
private: private:
UINT8 m_shared[0x4000]; // 16k shared memory UINT8 m_shared[0x4000]; // 16k shared memory
UINT8 m_zfg; // z80 flip gate? purpose unknown, bit0 is stored UINT8 m_zfg; // z80 flip gate? purpose unknown, bit0 is stored
UINT8 m_cn; // bit0 is used to enable/disable the comm board UINT8 m_cn; // bit0 is used to enable/disable the comm board
UINT8 m_fg; // flip gate? purpose unknown, bit0 is stored, bit7 is connected to ZFG bit 0 UINT8 m_fg; // flip gate? purpose unknown, bit0 is stored, bit7 is connected to ZFG bit 0
emu_file m_line_rx; // rx line - can be either differential, simple serial or toslink emu_file m_line_rx; // rx line - can be either differential, simple serial or toslink
emu_file m_line_tx; // tx line - is differential, simple serial and toslink emu_file m_line_tx; // tx line - is differential, simple serial and toslink
char m_localhost[256]; char m_localhost[256];
char m_remotehost[256]; char m_remotehost[256];
UINT8 m_buffer[0x4000]; UINT8 m_buffer[0x4000];
#ifdef __M2COMM_SIMULATION__ #ifdef __M2COMM_SIMULATION__
UINT8 m_linkenable; UINT8 m_linkenable;
UINT16 m_linktimer; UINT16 m_linktimer;
@ -76,9 +76,9 @@ private:
UINT8 m_linkcount; UINT8 m_linkcount;
UINT16 m_linktype; UINT16 m_linktype;
void comm_tick(); void comm_tick();
void comm_tick_16726(); void comm_tick_16726();
#endif #endif
}; };

View File

@ -27,7 +27,7 @@ n64_periphs::n64_periphs(const machine_config &mconfig, const char *tag, device_
, dd_present(false) , dd_present(false)
, disk_present(false) , disk_present(false)
, cart_present(false) , cart_present(false)
{ {
for (INT32 i = 0; i < 256; i++) for (INT32 i = 0; i < 256; i++)
{ {
m_gamma_table[i] = sqrt((float)(i << 6)); m_gamma_table[i] = sqrt((float)(i << 6));
@ -976,7 +976,7 @@ WRITE32_MEMBER( n64_periphs::dp_reg_w )
if(status & DP_STATUS_START_VALID) if(status & DP_STATUS_START_VALID)
{ {
state->m_rdp->set_status(status & ~DP_STATUS_START_VALID); state->m_rdp->set_status(status & ~DP_STATUS_START_VALID);
state->m_rdp->set_current(state->m_rdp->get_start()); state->m_rdp->set_current(state->m_rdp->get_start());
state->m_rdp->set_end(data & ~ 7); state->m_rdp->set_end(data & ~ 7);
g_profiler.start(PROFILER_USER1); g_profiler.start(PROFILER_USER1);
state->m_rdp->process_command_list(); state->m_rdp->process_command_list();
@ -989,7 +989,7 @@ WRITE32_MEMBER( n64_periphs::dp_reg_w )
g_profiler.start(PROFILER_USER1); g_profiler.start(PROFILER_USER1);
state->m_rdp->process_command_list(); state->m_rdp->process_command_list();
g_profiler.stop(); g_profiler.stop();
break; break;
} }
case 0x0c/4: // DP_STATUS_REG case 0x0c/4: // DP_STATUS_REG

View File

@ -1573,93 +1573,93 @@ void fruitpar_decrypt(running_machine &machine)
} }
static UINT8 amazonia_tab[0x100] = { static UINT8 amazonia_tab[0x100] = {
0x86, 0x00, 0xd2, 0x6b, 0x78, 0x79, 0xbc, 0x80, 0xc6, 0x8e, 0x9b, 0xd8, 0x3a, 0x52, 0x09, 0x15, 0x86, 0x00, 0xd2, 0x6b, 0x78, 0x79, 0xbc, 0x80, 0xc6, 0x8e, 0x9b, 0xd8, 0x3a, 0x52, 0x09, 0x15,
0x05, 0x57, 0x7a, 0x1f, 0x2f, 0x08, 0x47, 0xa0, 0x44, 0x4c, 0xf7, 0xbe, 0x3d, 0x59, 0xd1, 0x18, 0x05, 0x57, 0x7a, 0x1f, 0x2f, 0x08, 0x47, 0xa0, 0x44, 0x4c, 0xf7, 0xbe, 0x3d, 0x59, 0xd1, 0x18,
0xac, 0xd5, 0xa0, 0x03, 0x2c, 0x34, 0xc6, 0x06, 0x08, 0x4e, 0x84, 0x94, 0x2b, 0x3f, 0x88, 0x08, 0xac, 0xd5, 0xa0, 0x03, 0x2c, 0x34, 0xc6, 0x06, 0x08, 0x4e, 0x84, 0x94, 0x2b, 0x3f, 0x88, 0x08,
0x48, 0x84, 0xb8, 0xe6, 0x4a, 0x53, 0x3e, 0x51, 0xfe, 0x3b, 0xd4, 0xc8, 0xff, 0xfd, 0x52, 0x25, 0x48, 0x84, 0xb8, 0xe6, 0x4a, 0x53, 0x3e, 0x51, 0xfe, 0x3b, 0xd4, 0xc8, 0xff, 0xfd, 0x52, 0x25,
0xe2, 0xa9, 0x75, 0xd7, 0xa3, 0xfc, 0xf1, 0x5f, 0x50, 0xfa, 0xba, 0x09, 0xf4, 0xc8, 0x90, 0xed, 0xe2, 0xa9, 0x75, 0xd7, 0xa3, 0xfc, 0xf1, 0x5f, 0x50, 0xfa, 0xba, 0x09, 0xf4, 0xc8, 0x90, 0xed,
0xc6, 0xcc, 0xc9, 0x25, 0x93, 0x07, 0x63, 0x50, 0x69, 0xb2, 0x4a, 0x47, 0x85, 0x18, 0xe6, 0x1f, 0xc6, 0xcc, 0xc9, 0x25, 0x93, 0x07, 0x63, 0x50, 0x69, 0xb2, 0x4a, 0x47, 0x85, 0x18, 0xe6, 0x1f,
0x7f, 0xb3, 0xe8, 0x5f, 0xb4, 0x8a, 0x56, 0x83, 0xf4, 0xca, 0xd5, 0xb1, 0x6d, 0xa3, 0x37, 0xba, 0x7f, 0xb3, 0xe8, 0x5f, 0xb4, 0x8a, 0x56, 0x83, 0xf4, 0xca, 0xd5, 0xb1, 0x6d, 0xa3, 0x37, 0xba,
0xd7, 0x66, 0x45, 0x54, 0xe2, 0xdc, 0xce, 0x96, 0xdc, 0xe9, 0xf0, 0xb5, 0xa7, 0x62, 0xa5, 0xfd, 0xd7, 0x66, 0x45, 0x54, 0xe2, 0xdc, 0xce, 0x96, 0xdc, 0xe9, 0xf0, 0xb5, 0xa7, 0x62, 0xa5, 0xfd,
0xdb, 0x2b, 0x92, 0x13, 0x37, 0x95, 0x0c, 0x69, 0x4d, 0xf7, 0x6c, 0x02, 0x6e, 0x8a, 0x95, 0x68, 0xdb, 0x2b, 0x92, 0x13, 0x37, 0x95, 0x0c, 0x69, 0x4d, 0xf7, 0x6c, 0x02, 0x6e, 0x8a, 0x95, 0x68,
0xd4, 0x8a, 0xc3, 0xea, 0x0f, 0x8b, 0x96, 0x1b, 0xb1, 0x19, 0x5e, 0x88, 0x3d, 0x94, 0xa9, 0xb9, 0xd4, 0x8a, 0xc3, 0xea, 0x0f, 0x8b, 0x96, 0x1b, 0xb1, 0x19, 0x5e, 0x88, 0x3d, 0x94, 0xa9, 0xb9,
0x4e, 0x4a, 0x0a, 0x6a, 0x04, 0xd5, 0x2c, 0x0b, 0xb4, 0xb7, 0x18, 0x75, 0xcf, 0x35, 0xc3, 0xef, 0x4e, 0x4a, 0x0a, 0x6a, 0x04, 0xd5, 0x2c, 0x0b, 0xb4, 0xb7, 0x18, 0x75, 0xcf, 0x35, 0xc3, 0xef,
0x13, 0x71, 0xdb, 0x61, 0xf2, 0xcb, 0xd3, 0xd7, 0x3f, 0x79, 0x2d, 0x39, 0x20, 0x65, 0x07, 0x49, 0x13, 0x71, 0xdb, 0x61, 0xf2, 0xcb, 0xd3, 0xd7, 0x3f, 0x79, 0x2d, 0x39, 0x20, 0x65, 0x07, 0x49,
0x30, 0x47, 0xe9, 0xdd, 0xf3, 0x03, 0xce, 0x5f, 0x7f, 0x45, 0x70, 0x82, 0x69, 0x5a, 0xd9, 0x46, 0x30, 0x47, 0xe9, 0xdd, 0xf3, 0x03, 0xce, 0x5f, 0x7f, 0x45, 0x70, 0x82, 0x69, 0x5a, 0xd9, 0x46,
0xee, 0x52, 0x27, 0x2f, 0x63, 0x54, 0x9f, 0xc1, 0xde, 0x41, 0xf5, 0x40, 0x26, 0x8d, 0xda, 0xa6, 0xee, 0x52, 0x27, 0x2f, 0x63, 0x54, 0x9f, 0xc1, 0xde, 0x41, 0xf5, 0x40, 0x26, 0x8d, 0xda, 0xa6,
0xd9, 0x5a, 0xc7, 0xe4, 0xdc, 0xd6, 0x09, 0x5e, 0x08, 0xd6, 0x0d, 0xa1, 0x12, 0xb3, 0xee, 0x67, 0xd9, 0x5a, 0xc7, 0xe4, 0xdc, 0xd6, 0x09, 0x5e, 0x08, 0xd6, 0x0d, 0xa1, 0x12, 0xb3, 0xee, 0x67,
0xbb, 0x65, 0x3c, 0xcd, 0x3a, 0xdf, 0x0f, 0xd3, 0xe6, 0xaa, 0x4d, 0x14, 0x28, 0xc5, 0x38, 0xc8 0xbb, 0x65, 0x3c, 0xcd, 0x3a, 0xdf, 0x0f, 0xd3, 0xe6, 0xaa, 0x4d, 0x14, 0x28, 0xc5, 0x38, 0xc8
}; };
void amazonia_decrypt(running_machine &machine) void amazonia_decrypt(running_machine &machine)
{ {
int i; int i;
UINT16 *src = (UINT16 *) machine.root_device().memregion("user1")->base(); UINT16 *src = (UINT16 *) machine.root_device().memregion("user1")->base();
int rom_size = 0x80000; int rom_size = 0x80000;
for(i=0; i<rom_size/2; i++) { for(i=0; i<rom_size/2; i++) {
UINT16 x = src[i]; UINT16 x = src[i];
IGS27_CRYPT1 IGS27_CRYPT1
IGS27_CRYPT2_ALT IGS27_CRYPT2_ALT
IGS27_CRYPT3 IGS27_CRYPT3
IGS27_CRYPT4 IGS27_CRYPT4
IGS27_CRYPT5 IGS27_CRYPT5
IGS27_CRYPT6_ALT IGS27_CRYPT6_ALT
IGS27_CRYPT7 IGS27_CRYPT7
IGS27_CRYPT8 IGS27_CRYPT8
x ^= amazonia_tab[(i >> 1) & 0xff] << 8; x ^= amazonia_tab[(i >> 1) & 0xff] << 8;
src[i] = x; src[i] = x;
} }
} }
// not 100% verified // not 100% verified
static const UINT8 amazoni2_tab[0x100] = { static const UINT8 amazoni2_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x37, 0x37, 0x52, 0x44, 0x34, 0x30, 0x32, 0x31, 0x30, 0x31, 0x36, 0x49, 0x47, 0x53, 0x30, 0x30, 0x37, 0x37, 0x52, 0x44, 0x34, 0x30, 0x32, 0x31, 0x30, 0x31, 0x36,
0xed, 0x3f, 0x77, 0xd0, 0xc4, 0x72, 0x77, 0xe1, 0x35, 0x15, 0x10, 0xc6, 0x1b, 0xee, 0x25, 0x4a, 0xed, 0x3f, 0x77, 0xd0, 0xc4, 0x72, 0x77, 0xe1, 0x35, 0x15, 0x10, 0xc6, 0x1b, 0xee, 0x25, 0x4a,
0x0d, 0x06, 0x37, 0x19, 0xfa, 0xf9, 0x29, 0xb0, 0x03, 0x7e, 0x32, 0x83, 0x99, 0x32, 0x23, 0x6e, 0x0d, 0x06, 0x37, 0x19, 0xfa, 0xf9, 0x29, 0xb0, 0x03, 0x7e, 0x32, 0x83, 0x99, 0x32, 0x23, 0x6e,
0xd8, 0xa9, 0xdb, 0x5f, 0x23, 0xb7, 0x08, 0x41, 0x00, 0xfb, 0x20, 0x2b, 0x36, 0xae, 0x9f, 0xc9, 0xd8, 0xa9, 0xdb, 0x5f, 0x23, 0xb7, 0x08, 0x41, 0x00, 0xfb, 0x20, 0x2b, 0x36, 0xae, 0x9f, 0xc9,
0x24, 0xaa, 0x82, 0x0b, 0x64, 0xbe, 0x03, 0x0d, 0xa2, 0x31, 0x97, 0x47, 0xb6, 0x94, 0x26, 0xf6, 0x24, 0xaa, 0x82, 0x0b, 0x64, 0xbe, 0x03, 0x0d, 0xa2, 0x31, 0x97, 0x47, 0xb6, 0x94, 0x26, 0xf6,
0x09, 0xcd, 0x8a, 0xca, 0x26, 0x61, 0x4a, 0xd1, 0x9f, 0x01, 0x98, 0xa3, 0x23, 0x58, 0x88, 0xcf, 0x09, 0xcd, 0x8a, 0xca, 0x26, 0x61, 0x4a, 0xd1, 0x9f, 0x01, 0x98, 0xa3, 0x23, 0x58, 0x88, 0xcf,
0xdd, 0x14, 0x93, 0x86, 0x0f, 0x33, 0x4c, 0x86, 0xef, 0x8f, 0x61, 0x4a, 0xc2, 0xad, 0xd5, 0x70, 0xdd, 0x14, 0x93, 0x86, 0x0f, 0x33, 0x4c, 0x86, 0xef, 0x8f, 0x61, 0x4a, 0xc2, 0xad, 0xd5, 0x70,
0x37, 0xc2, 0x7b, 0x6a, 0x06, 0x07, 0xb7, 0x69, 0xc9, 0x3f, 0x71, 0x87, 0x1a, 0x85, 0x5a, 0x33, 0x37, 0xc2, 0x7b, 0x6a, 0x06, 0x07, 0xb7, 0x69, 0xc9, 0x3f, 0x71, 0x87, 0x1a, 0x85, 0x5a, 0x33,
0xee, 0x5b, 0x63, 0xe2, 0x32, 0xf0, 0x7a, 0xf4, 0xa4, 0xb2, 0x87, 0xe4, 0xf3, 0x14, 0xa7, 0xb4, 0xee, 0x5b, 0x63, 0xe2, 0x32, 0xf0, 0x7a, 0xf4, 0xa4, 0xb2, 0x87, 0xe4, 0xf3, 0x14, 0xa7, 0xb4,
0x1a, 0xa1, 0xa8, 0x98, 0xf9, 0x42, 0xc5, 0xe1, 0x36, 0xcc, 0xa3, 0x2d, 0x54, 0xcd, 0x8b, 0xcd, 0x1a, 0xa1, 0xa8, 0x98, 0xf9, 0x42, 0xc5, 0xe1, 0x36, 0xcc, 0xa3, 0x2d, 0x54, 0xcd, 0x8b, 0xcd,
0x11, 0x98, 0xe9, 0x77, 0x05, 0x8e, 0x06, 0x2d, 0x78, 0xb0, 0x02, 0x6d, 0x83, 0x62, 0x15, 0x9a, 0x11, 0x98, 0xe9, 0x77, 0x05, 0x8e, 0x06, 0x2d, 0x78, 0xb0, 0x02, 0x6d, 0x83, 0x62, 0x15, 0x9a,
0x6b, 0x82, 0x07, 0xaa, 0x3a, 0xa9, 0xed, 0x12, 0x9f, 0xc0, 0x25, 0xee, 0x08, 0xc7, 0x94, 0x75, 0x6b, 0x82, 0x07, 0xaa, 0x3a, 0xa9, 0xed, 0x12, 0x9f, 0xc0, 0x25, 0xee, 0x08, 0xc7, 0x94, 0x75,
0xfd, 0xe2, 0x1f, 0x9d, 0xc0, 0xa5, 0x68, 0x0a, 0x23, 0xa1, 0xca, 0x3d, 0xa9, 0x2f, 0x97, 0xfa, 0xfd, 0xe2, 0x1f, 0x9d, 0xc0, 0xa5, 0x68, 0x0a, 0x23, 0xa1, 0xca, 0x3d, 0xa9, 0x2f, 0x97, 0xfa,
0xe0, 0x7c, 0x91, 0xfa, 0xfe, 0xd5, 0xa6, 0xd2, 0xbb, 0x34, 0xf1, 0x23, 0x6e, 0x0c, 0xed, 0x03, 0xe0, 0x7c, 0x91, 0xfa, 0xfe, 0xd5, 0xa6, 0xd2, 0xbb, 0x34, 0xf1, 0x23, 0x6e, 0x0c, 0xed, 0x03,
0x6b, 0x52, 0xfb, 0xac, 0x9c, 0xcc, 0x17, 0x64, 0x5d, 0x9e, 0xd7, 0xac, 0x9e, 0x12, 0xa5, 0xac, 0x6b, 0x52, 0xfb, 0xac, 0x9c, 0xcc, 0x17, 0x64, 0x5d, 0x9e, 0xd7, 0xac, 0x9e, 0x12, 0xa5, 0xac,
0x34, 0xa7, 0x3e, 0xde, 0x7f, 0x5d, 0x6a, 0xfa, 0x42, 0x40, 0xfd, 0x23, 0xbf, 0x33, 0x0e, 0x50 0x34, 0xa7, 0x3e, 0xde, 0x7f, 0x5d, 0x6a, 0xfa, 0x42, 0x40, 0xfd, 0x23, 0xbf, 0x33, 0x0e, 0x50
}; };
void amazoni2_decrypt(running_machine &machine) void amazoni2_decrypt(running_machine &machine)
{ {
int i; int i;
UINT16 *src = (UINT16 *) machine.root_device().memregion("user1")->base(); UINT16 *src = (UINT16 *) machine.root_device().memregion("user1")->base();
int rom_size = 0x80000; int rom_size = 0x80000;
for(i=0; i<rom_size/2; i++) for(i=0; i<rom_size/2; i++)
{ {
UINT16 x = src[i]; UINT16 x = src[i];
// should be correct // should be correct
IGS27_CRYPT1 IGS27_CRYPT1
IGS27_CRYPT2_ALT IGS27_CRYPT2_ALT
// IGS27_CRYPT3 // IGS27_CRYPT3
IGS27_CRYPT4 IGS27_CRYPT4
IGS27_CRYPT5 IGS27_CRYPT5
IGS27_CRYPT6_ALT // second half is junk, not sure... IGS27_CRYPT6_ALT // second half is junk, not sure...
IGS27_CRYPT7 IGS27_CRYPT7
IGS27_CRYPT8 IGS27_CRYPT8
x ^= amazoni2_tab[(i >> 1) & 0xff] << 8; x ^= amazoni2_tab[(i >> 1) & 0xff] << 8;
src[i] = x; src[i] = x;
} }
} }

View File

@ -686,9 +686,9 @@ DRIVER_INIT_MEMBER(scramble_state,newsin7a)
{ {
DRIVER_INIT_CALL(devilfsh); // decrypt DRIVER_INIT_CALL(devilfsh); // decrypt
// UINT8 *ROM = memregion("maincpu")->base(); // UINT8 *ROM = memregion("maincpu")->base();
// ROM[0x0067] ^= 0x22; /* rst $00 - should be push hl - the NMI routine is corrupt in this set, but the IRQ routine bypasses it? intentional? */ // ROM[0x0067] ^= 0x22; /* rst $00 - should be push hl - the NMI routine is corrupt in this set, but the IRQ routine bypasses it? intentional? */
// attempts to access port at c20x instead of 820x in one location, mirror or bitrot? // attempts to access port at c20x instead of 820x in one location, mirror or bitrot?
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc200, 0xc20f, read8_delegate(FUNC(scramble_state::mars_ppi8255_1_r),this), write8_delegate(FUNC(scramble_state::mars_ppi8255_1_w),this)); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc200, 0xc20f, read8_delegate(FUNC(scramble_state::mars_ppi8255_1_r),this), write8_delegate(FUNC(scramble_state::mars_ppi8255_1_w),this));

View File

@ -729,7 +729,7 @@ a4000tn
c65 // 1991 C65 / C64DX (Prototype, NTSC) c65 // 1991 C65 / C64DX (Prototype, NTSC)
c64dx // 1991 C65 / C64DX (Prototype, German PAL) c64dx // 1991 C65 / C64DX (Prototype, German PAL)
mps1230 // 1988 Commodore MPS-1230 near-letter-quality dot matrix printer mps1230 // 1988 Commodore MPS-1230 near-letter-quality dot matrix printer
// Epson // Epson
px4 // 1985 Epson PX-4 px4 // 1985 Epson PX-4

View File

@ -15,11 +15,10 @@ struct polyVert
galastrm_renderer::galastrm_renderer(galastrm_state& state) galastrm_renderer::galastrm_renderer(galastrm_state& state)
: poly_manager<float, gs_poly_data, 2, 10000>(state.machine()) : poly_manager<float, gs_poly_data, 2, 10000>(state.machine())
, m_state(state) , m_state(state)
, m_screenbits(state.m_screen->width(), state.m_screen->height()) , m_screenbits(state.m_screen->width(), state.m_screen->height())
{ {
} }
@ -29,10 +28,10 @@ void galastrm_state::video_start()
{ {
m_spritelist = auto_alloc_array(machine(), struct gs_tempsprite, 0x4000); m_spritelist = auto_alloc_array(machine(), struct gs_tempsprite, 0x4000);
m_poly = auto_alloc(machine(), galastrm_renderer(*this)); m_poly = auto_alloc(machine(), galastrm_renderer(*this));
m_screen->register_screen_bitmap(m_tmpbitmaps); m_screen->register_screen_bitmap(m_tmpbitmaps);
m_screen->register_screen_bitmap(m_poly->screenbits()); m_screen->register_screen_bitmap(m_poly->screenbits());
} }
@ -184,7 +183,7 @@ void galastrm_state::draw_sprites_pre(int x_offs, int y_offs)
m_sprite_ptr_pre++; m_sprite_ptr_pre++;
} }
if (bad_chunks) if (bad_chunks)
logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks);
} }
} }
@ -216,11 +215,11 @@ void galastrm_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
void galastrm_renderer::tc0610_draw_scanline(INT32 scanline, const extent_t& extent, const gs_poly_data& object, int threadid) void galastrm_renderer::tc0610_draw_scanline(INT32 scanline, const extent_t& extent, const gs_poly_data& object, int threadid)
{ {
UINT16 *framebuffer = &m_screenbits.pix16(scanline); UINT16 *framebuffer = &m_screenbits.pix16(scanline);
const INT32 dudx = extent.param[0].dpdx; const INT32 dudx = extent.param[0].dpdx;
const INT32 dvdx = extent.param[1].dpdx; const INT32 dvdx = extent.param[1].dpdx;
INT32 u = extent.param[0].start; INT32 u = extent.param[0].start;
INT32 v = extent.param[1].start; INT32 v = extent.param[1].start;
for (int x = extent.startx; x < extent.stopx; x++) for (int x = extent.startx; x < extent.stopx; x++)
{ {
@ -406,11 +405,11 @@ void galastrm_renderer::tc0610_rotate_draw(bitmap_ind16 &srcbitmap, const rectan
vert[3].p[0] = (float)(lx - 1) * 65536.0f; vert[3].p[0] = (float)(lx - 1) * 65536.0f;
vert[3].p[1] = 0.0; vert[3].p[1] = 0.0;
gs_poly_data& extra = object_data_alloc(); gs_poly_data& extra = object_data_alloc();
extra.texbase = &srcbitmap; extra.texbase = &srcbitmap;
render_polygon<4>(clip, render_delegate(FUNC(galastrm_renderer::tc0610_draw_scanline), this), 2, vert); render_polygon<4>(clip, render_delegate(FUNC(galastrm_renderer::tc0610_draw_scanline), this), 2, vert);
wait(); wait();
} }
/************************************************************** /**************************************************************
@ -530,10 +529,10 @@ UINT32 galastrm_state::screen_update_galastrm(screen_device &screen, bitmap_ind1
draw_sprites_pre(42-X_OFFSET, -571+Y_OFFSET); draw_sprites_pre(42-X_OFFSET, -571+Y_OFFSET);
draw_sprites(screen,m_tmpbitmaps,clip,primasks,1); draw_sprites(screen,m_tmpbitmaps,clip,primasks,1);
copybitmap_trans(bitmap, m_poly->screenbits(), 0,0, 0,0, cliprect, 0); copybitmap_trans(bitmap, m_poly->screenbits(), 0,0, 0,0, cliprect, 0);
m_poly->screenbits().fill(0, clip); m_poly->screenbits().fill(0, clip);
m_poly->tc0610_rotate_draw(m_tmpbitmaps, cliprect); m_poly->tc0610_rotate_draw(m_tmpbitmaps, cliprect);
priority_bitmap.fill(0, cliprect); priority_bitmap.fill(0, cliprect);
draw_sprites(screen,bitmap,cliprect,primasks,0); draw_sprites(screen,bitmap,cliprect,primasks,0);

View File

@ -999,7 +999,7 @@ void galaxian_state::jumpbug_draw_background(bitmap_rgb32 &bitmap, const rectang
bitmap.fill(m_background_enable ? rgb_t(0,0,0x56) : rgb_t::black, cliprect); bitmap.fill(m_background_enable ? rgb_t(0,0,0x56) : rgb_t::black, cliprect);
/* render stars same as galaxian but nothing in the status area */ /* render stars same as galaxian but nothing in the status area */
/* update the star origin to the current frame */ /* update the star origin to the current frame */
stars_update_origin(); stars_update_origin();

View File

@ -168,19 +168,19 @@ void hng64_state::hng64_mark_tile_dirty( int tilemap, int tile_index )
{ \ { \
UINT16 tilemapinfo = (m_videoregs[reg]>>shift)&0xffff; \ UINT16 tilemapinfo = (m_videoregs[reg]>>shift)&0xffff; \
int tileno,pal, flip; \ int tileno,pal, flip; \
\ \
tileno = m_videoram[tile_index+(offset/4)]; \ tileno = m_videoram[tile_index+(offset/4)]; \
\ \
pal = (tileno&0xff000000)>>24; \ pal = (tileno&0xff000000)>>24; \
flip =(tileno&0x00c00000)>>22; \ flip =(tileno&0x00c00000)>>22; \
\ \
if (tileno&0x200000) \ if (tileno&0x200000) \
{ \ { \
tileno = (tileno & m_videoregs[0x0b]) | m_videoregs[0x0c]; \ tileno = (tileno & m_videoregs[0x0b]) | m_videoregs[0x0c]; \
} \ } \
\ \
tileno &= 0x1fffff; \ tileno &= 0x1fffff; \
\ \
if (size==0) \ if (size==0) \
{ \ { \
if (tilemapinfo&0x400) \ if (tilemapinfo&0x400) \
@ -1269,9 +1269,9 @@ void hng64_state::video_start()
m_additive_tilemap_debug = 0; m_additive_tilemap_debug = 0;
// Rasterizer creation // Rasterizer creation
m_poly_renderer = auto_alloc(machine(), hng64_poly_renderer(*this)); m_poly_renderer = auto_alloc(machine(), hng64_poly_renderer(*this));
// 3d information // 3d information
m_dl = auto_alloc_array(machine(), UINT16, 0x200/2); m_dl = auto_alloc_array(machine(), UINT16, 0x200/2);
polys.resize(1024*5); polys.resize(1024*5);

View File

@ -10,12 +10,12 @@
// Polygon rasterizer interface // Polygon rasterizer interface
hng64_poly_renderer::hng64_poly_renderer(hng64_state& state) hng64_poly_renderer::hng64_poly_renderer(hng64_state& state)
: poly_manager<float, hng64_poly_data, 7, HNG64_MAX_POLYGONS>(state.machine()) : poly_manager<float, hng64_poly_data, 7, HNG64_MAX_POLYGONS>(state.machine())
, m_state(state) , m_state(state)
, m_colorBuffer3d(state.m_screen->visible_area().width(), state.m_screen->visible_area().height()) , m_colorBuffer3d(state.m_screen->visible_area().width(), state.m_screen->visible_area().height())
{ {
const INT32 bufferSize = state.m_screen->visible_area().width() * state.m_screen->visible_area().height(); const INT32 bufferSize = state.m_screen->visible_area().width() * state.m_screen->visible_area().height();
m_depthBuffer3d = auto_alloc_array(state.machine(), float, bufferSize); m_depthBuffer3d = auto_alloc_array(state.machine(), float, bufferSize);
} }
@ -964,7 +964,7 @@ void hng64_state::hng64_command3d(const UINT16* packet)
m_poly_renderer->drawShaded(&polys[i]); m_poly_renderer->drawShaded(&polys[i]);
} }
} }
m_poly_renderer->wait(); m_poly_renderer->wait();
} }
void hng64_state::clear3d() void hng64_state::clear3d()
@ -976,11 +976,11 @@ void hng64_state::clear3d()
// Reset the buffers... // Reset the buffers...
for (i = 0; i < (visarea.max_x)*(visarea.max_y); i++) for (i = 0; i < (visarea.max_x)*(visarea.max_y); i++)
{ {
m_poly_renderer->depthBuffer3d()[i] = 100.0f; m_poly_renderer->depthBuffer3d()[i] = 100.0f;
} }
// Clear the 3d rasterizer buffer // Clear the 3d rasterizer buffer
m_poly_renderer->colorBuffer3d().fill(0x00000000, m_screen->visible_area()); m_poly_renderer->colorBuffer3d().fill(0x00000000, m_screen->visible_area());
// Set some matrices to the identity... // Set some matrices to the identity...
setIdentity(m_projectionMatrix); setIdentity(m_projectionMatrix);
@ -1169,11 +1169,11 @@ void hng64_state::Intersect(struct polyVert *input0, struct polyVert *input1, st
void hng64_state::performFrustumClip(struct polygon *p) void hng64_state::performFrustumClip(struct polygon *p)
{ {
polyVert *v0; polyVert *v0;
polyVert *v1; polyVert *v1;
polyVert *tv; polyVert *tv;
polygon temp; polygon temp;
temp.n = 0; temp.n = 0;
// Skip near and far clipping planes ? // Skip near and far clipping planes ?
@ -1219,42 +1219,42 @@ void hng64_state::performFrustumClip(struct polygon *p)
void hng64_poly_renderer::render_scanline(INT32 scanline, const extent_t& extent, const hng64_poly_data& renderData, int threadid) void hng64_poly_renderer::render_scanline(INT32 scanline, const extent_t& extent, const hng64_poly_data& renderData, int threadid)
{ {
// Pull the parameters out of the extent structure // Pull the parameters out of the extent structure
float z = extent.param[0].start; float z = extent.param[0].start;
float w = extent.param[1].start; float w = extent.param[1].start;
float lightR = extent.param[2].start; float lightR = extent.param[2].start;
float lightG = extent.param[3].start; float lightG = extent.param[3].start;
float lightB = extent.param[4].start; float lightB = extent.param[4].start;
float s = extent.param[5].start; float s = extent.param[5].start;
float t = extent.param[6].start; float t = extent.param[6].start;
const float dz = extent.param[0].dpdx; const float dz = extent.param[0].dpdx;
const float dw = extent.param[1].dpdx; const float dw = extent.param[1].dpdx;
const float dlightR = extent.param[2].dpdx; const float dlightR = extent.param[2].dpdx;
const float dlightG = extent.param[3].dpdx; const float dlightG = extent.param[3].dpdx;
const float dlightB = extent.param[4].dpdx; const float dlightB = extent.param[4].dpdx;
const float ds = extent.param[5].dpdx; const float ds = extent.param[5].dpdx;
const float dt = extent.param[6].dpdx; const float dt = extent.param[6].dpdx;
// Pointers to the pixel buffers
UINT32* colorBuffer = &m_colorBuffer3d.pix32(scanline, extent.startx);
float* depthBuffer = &m_depthBuffer3d[(scanline * m_state.m_screen->visible_area().width()) + extent.startx];
const UINT8 *textureOffset = &m_state.m_texturerom[renderData.texIndex * 1024 * 1024]; // Pointers to the pixel buffers
UINT32* colorBuffer = &m_colorBuffer3d.pix32(scanline, extent.startx);
// Step over each pixel in the horizontal span float* depthBuffer = &m_depthBuffer3d[(scanline * m_state.m_screen->visible_area().width()) + extent.startx];
for(int x = extent.startx; x < extent.stopx; x++)
{ const UINT8 *textureOffset = &m_state.m_texturerom[renderData.texIndex * 1024 * 1024];
if (z < *depthBuffer)
{ // Step over each pixel in the horizontal span
// Multiply back through by w for everything that was interpolated perspective-correctly for(int x = extent.startx; x < extent.stopx; x++)
const float sCorrect = s / w; {
const float tCorrect = t / w; if (z < *depthBuffer)
const float rCorrect = lightR / w; {
const float gCorrect = lightG / w; // Multiply back through by w for everything that was interpolated perspective-correctly
const float bCorrect = lightB / w; const float sCorrect = s / w;
const float tCorrect = t / w;
if ((renderData.debugColor & 0xff000000) == 0x01000000) const float rCorrect = lightR / w;
const float gCorrect = lightG / w;
const float bCorrect = lightB / w;
if ((renderData.debugColor & 0xff000000) == 0x01000000)
{ {
// ST color mode // ST color mode
*colorBuffer = rgb_t(255, (UINT8)(sCorrect*255.0f), (UINT8)(tCorrect*255.0f), (UINT8)(0)); *colorBuffer = rgb_t(255, (UINT8)(sCorrect*255.0f), (UINT8)(tCorrect*255.0f), (UINT8)(0));
@ -1333,29 +1333,29 @@ void hng64_poly_renderer::render_scanline(INT32 scanline, const extent_t& extent
color = rgb_t(255, (UINT8)red, (UINT8)green, (UINT8)blue); color = rgb_t(255, (UINT8)red, (UINT8)green, (UINT8)blue);
*colorBuffer = color; *colorBuffer = color;
*depthBuffer = z; *depthBuffer = z;
} }
} }
} }
z += dz; z += dz;
w += dw; w += dw;
lightR += dlightR; lightR += dlightR;
lightG += dlightG; lightG += dlightG;
lightB += dlightB; lightB += dlightB;
s += ds; s += ds;
t += dt; t += dt;
colorBuffer++; colorBuffer++;
depthBuffer++; depthBuffer++;
} }
} }
void hng64_poly_renderer::drawShaded(struct polygon *p) void hng64_poly_renderer::drawShaded(struct polygon *p)
{ {
// Polygon information for the rasterizer // Polygon information for the rasterizer
hng64_poly_data rOptions; hng64_poly_data rOptions;
rOptions.texType = p->texType; rOptions.texType = p->texType;
rOptions.texIndex = p->texIndex; rOptions.texIndex = p->texIndex;
rOptions.palOffset = p->palOffset; rOptions.palOffset = p->palOffset;
rOptions.palPageSize = p->palPageSize; rOptions.palPageSize = p->palPageSize;
@ -1363,7 +1363,7 @@ void hng64_poly_renderer::drawShaded(struct polygon *p)
rOptions.texPageSmall = p->texPageSmall; rOptions.texPageSmall = p->texPageSmall;
rOptions.texPageHorizOffset = p->texPageHorizOffset; rOptions.texPageHorizOffset = p->texPageHorizOffset;
rOptions.texPageVertOffset = p->texPageVertOffset; rOptions.texPageVertOffset = p->texPageVertOffset;
// The perspective-correct texture divide... // The perspective-correct texture divide...
// NOTE: There is a very good chance the HNG64 hardware does not do perspective-correct texture-mapping - explore // NOTE: There is a very good chance the HNG64 hardware does not do perspective-correct texture-mapping - explore
for (int j = 0; j < p->n; j++) for (int j = 0; j < p->n; j++)
@ -1376,50 +1376,50 @@ void hng64_poly_renderer::drawShaded(struct polygon *p)
p->vert[j].texCoords[1] = p->vert[j].texCoords[1] * p->vert[j].clipCoords[3]; p->vert[j].texCoords[1] = p->vert[j].texCoords[1] * p->vert[j].clipCoords[3];
} }
// Rasterize the triangles // Rasterize the triangles
for (int j = 1; j < p->n-1; j++) for (int j = 1; j < p->n-1; j++)
{ {
// Build some MAME rasterizer vertices from the hng64 vertices // Build some MAME rasterizer vertices from the hng64 vertices
vertex_t pVert[3]; vertex_t pVert[3];
const polyVert& pv0 = p->vert[0]; const polyVert& pv0 = p->vert[0];
pVert[0].x = pv0.clipCoords[0]; pVert[0].x = pv0.clipCoords[0];
pVert[0].y = pv0.clipCoords[1]; pVert[0].y = pv0.clipCoords[1];
pVert[0].p[0] = pv0.clipCoords[2]; pVert[0].p[0] = pv0.clipCoords[2];
pVert[0].p[1] = pv0.clipCoords[3]; pVert[0].p[1] = pv0.clipCoords[3];
pVert[0].p[2] = pv0.light[0]; pVert[0].p[2] = pv0.light[0];
pVert[0].p[3] = pv0.light[1]; pVert[0].p[3] = pv0.light[1];
pVert[0].p[4] = pv0.light[2]; pVert[0].p[4] = pv0.light[2];
pVert[0].p[5] = pv0.texCoords[0]; pVert[0].p[5] = pv0.texCoords[0];
pVert[0].p[6] = pv0.texCoords[1]; pVert[0].p[6] = pv0.texCoords[1];
const polyVert& pvj = p->vert[j];
pVert[1].x = pvj.clipCoords[0];
pVert[1].y = pvj.clipCoords[1];
pVert[1].p[0] = pvj.clipCoords[2];
pVert[1].p[1] = pvj.clipCoords[3];
pVert[1].p[2] = pvj.light[0];
pVert[1].p[3] = pvj.light[1];
pVert[1].p[4] = pvj.light[2];
pVert[1].p[5] = pvj.texCoords[0];
pVert[1].p[6] = pvj.texCoords[1];
const polyVert& pvjp1 = p->vert[j+1]; const polyVert& pvj = p->vert[j];
pVert[2].x = pvjp1.clipCoords[0]; pVert[1].x = pvj.clipCoords[0];
pVert[2].y = pvjp1.clipCoords[1]; pVert[1].y = pvj.clipCoords[1];
pVert[2].p[0] = pvjp1.clipCoords[2]; pVert[1].p[0] = pvj.clipCoords[2];
pVert[2].p[1] = pvjp1.clipCoords[3]; pVert[1].p[1] = pvj.clipCoords[3];
pVert[2].p[2] = pvjp1.light[0]; pVert[1].p[2] = pvj.light[0];
pVert[2].p[3] = pvjp1.light[1]; pVert[1].p[3] = pvj.light[1];
pVert[2].p[4] = pvjp1.light[2]; pVert[1].p[4] = pvj.light[2];
pVert[2].p[5] = pvjp1.texCoords[0]; pVert[1].p[5] = pvj.texCoords[0];
pVert[2].p[6] = pvjp1.texCoords[1]; pVert[1].p[6] = pvj.texCoords[1];
// Pass the render data into the rasterizer const polyVert& pvjp1 = p->vert[j+1];
hng64_poly_data& renderData = object_data_alloc(); pVert[2].x = pvjp1.clipCoords[0];
renderData = rOptions; pVert[2].y = pvjp1.clipCoords[1];
pVert[2].p[0] = pvjp1.clipCoords[2];
const rectangle& visibleArea = m_state.m_screen->visible_area(); pVert[2].p[1] = pvjp1.clipCoords[3];
render_triangle(visibleArea, render_delegate(FUNC(hng64_poly_renderer::render_scanline), this), 7, pVert[0], pVert[1], pVert[2]); pVert[2].p[2] = pvjp1.light[0];
pVert[2].p[3] = pvjp1.light[1];
pVert[2].p[4] = pvjp1.light[2];
pVert[2].p[5] = pvjp1.texCoords[0];
pVert[2].p[6] = pvjp1.texCoords[1];
// Pass the render data into the rasterizer
hng64_poly_data& renderData = object_data_alloc();
renderData = rOptions;
const rectangle& visibleArea = m_state.m_screen->visible_area();
render_triangle(visibleArea, render_delegate(FUNC(hng64_poly_renderer::render_scanline), this), 7, pVert[0], pVert[1], pVert[2]);
} }
} }

View File

@ -9,15 +9,15 @@ what's the difference between IGS017 and IGS031? encryption?
all the known IGS017 / IGS031 games use the following memory map, is the IGS017 / IGS031 providing the interface to the 8255, or is it coincidence? all the known IGS017 / IGS031 games use the following memory map, is the IGS017 / IGS031 providing the interface to the 8255, or is it coincidence?
AM_RANGE( 0x1000, 0x17ff ) AM_RAM AM_SHARE("spriteram") AM_RANGE( 0x1000, 0x17ff ) AM_RAM AM_SHARE("spriteram")
AM_RANGE( 0x1800, 0x1bff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE( 0x1800, 0x1bff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE( 0x1c00, 0x1fff ) AM_RAM AM_RANGE( 0x1c00, 0x1fff ) AM_RAM
AM_RANGE( 0x2010, 0x2013 ) AM_DEVREAD("ppi8255", i8255_device, read) AM_RANGE( 0x2010, 0x2013 ) AM_DEVREAD("ppi8255", i8255_device, read)
AM_RANGE( 0x2012, 0x2012 ) AM_WRITE(video_disable_w ) AM_RANGE( 0x2012, 0x2012 ) AM_WRITE(video_disable_w )
AM_RANGE( 0x2014, 0x2014 ) AM_WRITE(nmi_enable_w ) AM_RANGE( 0x2014, 0x2014 ) AM_WRITE(nmi_enable_w )
AM_RANGE( 0x2015, 0x2015 ) AM_WRITE(irq_enable_w ) AM_RANGE( 0x2015, 0x2015 ) AM_WRITE(irq_enable_w )
AM_RANGE( 0x4000, 0x5fff ) AM_RAM_WRITE(fg_w ) AM_SHARE("fg_videoram") AM_RANGE( 0x4000, 0x5fff ) AM_RAM_WRITE(fg_w ) AM_SHARE("fg_videoram")
AM_RANGE( 0x6000, 0x7fff ) AM_RAM_WRITE(bg_w ) AM_SHARE("bg_videoram") AM_RANGE( 0x6000, 0x7fff ) AM_RAM_WRITE(bg_w ) AM_SHARE("bg_videoram")
*/ */
@ -30,7 +30,7 @@ all the known IGS017 / IGS031 games use the following memory map, is the IGS017
DEVICE_ADDRESS_MAP_START( map, 8, igs017_igs031_device ) DEVICE_ADDRESS_MAP_START( map, 8, igs017_igs031_device )
AM_RANGE( 0x1000, 0x17ff ) AM_RAM AM_SHARE("spriteram") AM_RANGE( 0x1000, 0x17ff ) AM_RAM AM_SHARE("spriteram")
// AM_RANGE( 0x1800, 0x1bff ) AM_RAM //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // AM_RANGE( 0x1800, 0x1bff ) AM_RAM //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE( 0x1800, 0x1bff ) AM_RAM_WRITE(palram_w) AM_SHARE("palram") AM_RANGE( 0x1800, 0x1bff ) AM_RAM_WRITE(palram_w) AM_SHARE("palram")
AM_RANGE( 0x1c00, 0x1fff ) AM_RAM AM_RANGE( 0x1c00, 0x1fff ) AM_RAM
@ -69,7 +69,7 @@ static const gfx_layout layout_8x8x4 =
GFXDECODE_MEMBER( igs017_igs031_device::gfxinfo ) GFXDECODE_MEMBER( igs017_igs031_device::gfxinfo )
GFXDECODE_DEVICE( "^tilemaps", 0, layout_8x8x4, 0, 16 ) GFXDECODE_DEVICE( "^tilemaps", 0, layout_8x8x4, 0, 16 )
// GFXDECODE_DEVICE( DEVICE_SELF, 0, spritelayout, 0, 0x1000 ) // GFXDECODE_DEVICE( DEVICE_SELF, 0, spritelayout, 0, 0x1000 )
GFXDECODE_END GFXDECODE_END
@ -127,7 +127,7 @@ void igs017_igs031_device::device_start()
m_debug_addr = 0; m_debug_addr = 0;
m_debug_width = 512; m_debug_width = 512;
} }
void igs017_igs031_device::video_start() void igs017_igs031_device::video_start()
@ -144,7 +144,7 @@ void igs017_igs031_device::video_start()
for (i = 0; i < size ; i++) for (i = 0; i < size ; i++)
{ {
rom[i] = BITSWAP8(rom[i], 0, 1, 2, 3, 4, 5, 6, 7); rom[i] = BITSWAP8(rom[i], 0, 1, 2, 3, 4, 5, 6, 7);
// rom[i^1] = BITSWAP8(rom[i], 0, 1, 2, 3, 4, 5, 6, 7); // rom[i^1] = BITSWAP8(rom[i], 0, 1, 2, 3, 4, 5, 6, 7);
} }
} }
} }
@ -446,5 +446,3 @@ WRITE8_MEMBER(igs017_igs031_device::irq_enable_w)
if (data & (~1)) if (data & (~1))
logerror("%s: irq_enable = %02x\n", machine().describe_context(), data); logerror("%s: irq_enable = %02x\n", machine().describe_context(), data);
} }

View File

@ -59,7 +59,7 @@ public:
int m_nmi_enable; int m_nmi_enable;
int m_irq_enable; int m_irq_enable;
DECLARE_WRITE8_MEMBER(palram_w); DECLARE_WRITE8_MEMBER(palram_w);
DECLARE_READ8_MEMBER(i8255_r); DECLARE_READ8_MEMBER(i8255_r);

View File

@ -343,7 +343,7 @@ int k057714_device::draw(screen_device &screen, bitmap_ind16 &bitmap, const rect
// UINT16 pix3 = vram16[fbaddr3 ^ NATIVE_ENDIAN_VALUE_LE_BE(1,0)]; // UINT16 pix3 = vram16[fbaddr3 ^ NATIVE_ENDIAN_VALUE_LE_BE(1,0)];
d[i] = 0; d[i] = 0;
if (pix2 & 0x8000) if (pix2 & 0x8000)
{ {
d[i] = pix2 & 0x7fff; d[i] = pix2 & 0x7fff;

View File

@ -66,16 +66,16 @@ struct mz_poly_extra_data
class midzeus_renderer : public poly_manager<float, mz_poly_extra_data, 4, 10000> class midzeus_renderer : public poly_manager<float, mz_poly_extra_data, 4, 10000>
{ {
public: public:
midzeus_renderer(midzeus_state &state); midzeus_renderer(midzeus_state &state);
void render_poly(INT32 scanline, const extent_t& extent, const mz_poly_extra_data& object, int threadid); void render_poly(INT32 scanline, const extent_t& extent, const mz_poly_extra_data& object, int threadid);
void render_poly_solid_fixedz(INT32 scanline, const extent_t& extent, const mz_poly_extra_data& object, int threadid); void render_poly_solid_fixedz(INT32 scanline, const extent_t& extent, const mz_poly_extra_data& object, int threadid);
void zeus_draw_quad(int long_fmt, const UINT32 *databuffer, UINT32 texdata, int logit); void zeus_draw_quad(int long_fmt, const UINT32 *databuffer, UINT32 texdata, int logit);
void zeus_draw_debug_quad(const rectangle& rect, const vertex_t* vert); void zeus_draw_debug_quad(const rectangle& rect, const vertex_t* vert);
private: private:
midzeus_state& m_state; midzeus_state& m_state;
}; };
typedef midzeus_renderer::vertex_t poly_vertex; typedef midzeus_renderer::vertex_t poly_vertex;
@ -272,8 +272,8 @@ INLINE UINT8 get_texel_alt_8bit(const void *base, int y, int x, int width)
*************************************/ *************************************/
midzeus_renderer::midzeus_renderer(midzeus_state &state) midzeus_renderer::midzeus_renderer(midzeus_state &state)
: poly_manager<float, mz_poly_extra_data, 4, 10000>(state.machine()), : poly_manager<float, mz_poly_extra_data, 4, 10000>(state.machine()),
m_state(state) m_state(state)
{} {}
VIDEO_START_MEMBER(midzeus_state,midzeus) VIDEO_START_MEMBER(midzeus_state,midzeus)
@ -289,8 +289,8 @@ VIDEO_START_MEMBER(midzeus_state,midzeus)
m_palette->set_pen_color(i, pal5bit(i >> 10), pal5bit(i >> 5), pal5bit(i >> 0)); m_palette->set_pen_color(i, pal5bit(i >> 10), pal5bit(i >> 5), pal5bit(i >> 0));
/* initialize polygon engine */ /* initialize polygon engine */
poly = auto_alloc(machine(), midzeus_renderer(*this)); poly = auto_alloc(machine(), midzeus_renderer(*this));
/* we need to cleanup on exit */ /* we need to cleanup on exit */
machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(midzeus_state::exit_handler), this)); machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(midzeus_state::exit_handler), this));
@ -656,7 +656,7 @@ void midzeus_state::zeus_register_update(offs_t offset)
// m_zeusbase[0x46] = ??? = 0x00000000 // m_zeusbase[0x46] = ??? = 0x00000000
// m_zeusbase[0x4c] = ??? = 0x00808080 (brightness?) // m_zeusbase[0x4c] = ??? = 0x00808080 (brightness?)
// m_zeusbase[0x4e] = ??? = 0x00808080 (brightness?) // m_zeusbase[0x4e] = ??? = 0x00808080 (brightness?)
mz_poly_extra_data& extra = poly->object_data_alloc(); mz_poly_extra_data& extra = poly->object_data_alloc();
poly_vertex vert[4]; poly_vertex vert[4];
vert[0].x = (INT16)m_zeusbase[0x08]; vert[0].x = (INT16)m_zeusbase[0x08];
@ -671,7 +671,7 @@ void midzeus_state::zeus_register_update(offs_t offset)
extra.solidcolor = m_zeusbase[0x00]; extra.solidcolor = m_zeusbase[0x00];
extra.zoffset = 0x7fff; extra.zoffset = 0x7fff;
poly->zeus_draw_debug_quad(zeus_cliprect, vert); poly->zeus_draw_debug_quad(zeus_cliprect, vert);
poly->wait("Normal"); poly->wait("Normal");
} }
else else
@ -1230,7 +1230,7 @@ void midzeus_renderer::zeus_draw_quad(int long_fmt, const UINT32 *databuffer, UI
clipvert[i].y += 0.0005f; clipvert[i].y += 0.0005f;
} }
mz_poly_extra_data& extra = poly->object_data_alloc(); mz_poly_extra_data& extra = poly->object_data_alloc();
if (ctrl_word & 0x01000000) if (ctrl_word & 0x01000000)
{ {
@ -1265,18 +1265,18 @@ void midzeus_renderer::zeus_draw_quad(int long_fmt, const UINT32 *databuffer, UI
extra.transcolor = ((ctrl_word >> 16) & 1) ? 0 : 0x100; extra.transcolor = ((ctrl_word >> 16) & 1) ? 0 : 0x100;
extra.palbase = waveram0_ptr_from_block_addr(zeus_palbase); extra.palbase = waveram0_ptr_from_block_addr(zeus_palbase);
// Note: Before being upgraded to the new polygon rasterizing code, this function call was // Note: Before being upgraded to the new polygon rasterizing code, this function call was
// a poly_render_quad_fan. It appears as though the new code defaults to a fan if // a poly_render_quad_fan. It appears as though the new code defaults to a fan if
// the template argument is 4, but keep an eye out for missing quads. // the template argument is 4, but keep an eye out for missing quads.
poly->render_polygon<4>(zeus_cliprect, poly->render_polygon<4>(zeus_cliprect,
render_delegate(FUNC(midzeus_renderer::render_poly), this), render_delegate(FUNC(midzeus_renderer::render_poly), this),
4, 4,
clipvert); clipvert);
} }
void midzeus_renderer::zeus_draw_debug_quad(const rectangle& rect, const vertex_t *vert) void midzeus_renderer::zeus_draw_debug_quad(const rectangle& rect, const vertex_t *vert)
{ {
poly->render_polygon<4>(rect, render_delegate(FUNC(midzeus_renderer::render_poly_solid_fixedz), this), 0, vert); poly->render_polygon<4>(rect, render_delegate(FUNC(midzeus_renderer::render_poly_solid_fixedz), this), 0, vert);
} }

View File

@ -61,10 +61,10 @@ class midzeus2_renderer : public poly_manager<float, mz2_poly_extra_data, 4, 100
public: public:
midzeus2_renderer(midzeus2_state &state); midzeus2_renderer(midzeus2_state &state);
void render_poly_8bit(INT32 scanline, const extent_t& extent, const mz2_poly_extra_data& object, int threadid); void render_poly_8bit(INT32 scanline, const extent_t& extent, const mz2_poly_extra_data& object, int threadid);
void zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit); void zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit);
private: private:
midzeus2_state& m_state; midzeus2_state& m_state;
}; };
@ -73,10 +73,9 @@ typedef midzeus2_renderer::vertex_t poly_vertex;
typedef midzeus2_renderer::extent_t poly_extent; typedef midzeus2_renderer::extent_t poly_extent;
midzeus2_renderer::midzeus2_renderer(midzeus2_state &state) midzeus2_renderer::midzeus2_renderer(midzeus2_state &state)
: poly_manager<float, mz2_poly_extra_data, 4, 10000>(state.machine()) : poly_manager<float, mz2_poly_extra_data, 4, 10000>(state.machine())
, m_state(state) , m_state(state)
{ {
} }
@ -279,8 +278,8 @@ VIDEO_START_MEMBER(midzeus2_state,midzeus2)
waveram[1] = auto_alloc_array(machine(), UINT32, WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12/4); waveram[1] = auto_alloc_array(machine(), UINT32, WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12/4);
/* initialize polygon engine */ /* initialize polygon engine */
poly = auto_alloc(machine(), midzeus2_renderer(*this)); poly = auto_alloc(machine(), midzeus2_renderer(*this));
/* we need to cleanup on exit */ /* we need to cleanup on exit */
machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(midzeus2_state::exit_handler2), this)); machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(midzeus2_state::exit_handler2), this));
@ -370,8 +369,8 @@ UINT32 midzeus2_state::screen_update_midzeus2(screen_device &screen, bitmap_rgb3
{ {
int x, y; int x, y;
poly->wait(); poly->wait();
if (machine().input().code_pressed(KEYCODE_UP)) { zbase += 1.0f; popmessage("Zbase = %f", (double) zbase); } if (machine().input().code_pressed(KEYCODE_UP)) { zbase += 1.0f; popmessage("Zbase = %f", (double) zbase); }
if (machine().input().code_pressed(KEYCODE_DOWN)) { zbase -= 1.0f; popmessage("Zbase = %f", (double) zbase); } if (machine().input().code_pressed(KEYCODE_DOWN)) { zbase -= 1.0f; popmessage("Zbase = %f", (double) zbase); }
@ -1226,7 +1225,7 @@ In memory:
clipvert[i].y += 0.0005f; clipvert[i].y += 0.0005f;
} }
mz2_poly_extra_data& extra = poly->object_data_alloc(); mz2_poly_extra_data& extra = poly->object_data_alloc();
switch (texmode) switch (texmode)
{ {
case 0x01d: /* crusnexo: RHS of score bar */ case 0x01d: /* crusnexo: RHS of score bar */
@ -1272,16 +1271,16 @@ In memory:
extra.texbase = WAVERAM_BLOCK0(zeus_texbase); extra.texbase = WAVERAM_BLOCK0(zeus_texbase);
extra.palbase = waveram0_ptr_from_expanded_addr(m_state.m_zeusbase[0x41]); extra.palbase = waveram0_ptr_from_expanded_addr(m_state.m_zeusbase[0x41]);
// Note: Before being converted to the "poly.h" interface, this used to call the polylgcy function // Note: Before being converted to the "poly.h" interface, this used to call the polylgcy function
// poly_render_quad_fan. The behavior seems to be the same as it once was after a few short // poly_render_quad_fan. The behavior seems to be the same as it once was after a few short
// tests, but the (numverts == 5) statement below may actually be a quad fan instead of a 5-sided // tests, but the (numverts == 5) statement below may actually be a quad fan instead of a 5-sided
// polygon. // polygon.
if (numverts == 3) if (numverts == 3)
render_triangle(zeus_cliprect, render_delegate(FUNC(midzeus2_renderer::render_poly_8bit), this), 4, clipvert[0], clipvert[1], clipvert[2]); render_triangle(zeus_cliprect, render_delegate(FUNC(midzeus2_renderer::render_poly_8bit), this), 4, clipvert[0], clipvert[1], clipvert[2]);
else if (numverts == 4) else if (numverts == 4)
render_polygon<4>(zeus_cliprect, render_delegate(FUNC(midzeus2_renderer::render_poly_8bit), this), 4, clipvert); render_polygon<4>(zeus_cliprect, render_delegate(FUNC(midzeus2_renderer::render_poly_8bit), this), 4, clipvert);
else if (numverts == 5) else if (numverts == 5)
render_polygon<5>(zeus_cliprect, render_delegate(FUNC(midzeus2_renderer::render_poly_8bit), this), 4, clipvert); render_polygon<5>(zeus_cliprect, render_delegate(FUNC(midzeus2_renderer::render_poly_8bit), this), 4, clipvert);
} }

View File

@ -780,13 +780,13 @@ static void model2_3d_process_triangle( raster_state *raster, UINT32 attr )
} }
/***********************************************************************************************/ /***********************************************************************************************/
/***********************************************************************************************/ /***********************************************************************************************/
void model2_renderer::model2_3d_render(triangle *tri, const rectangle &cliprect) void model2_renderer::model2_3d_render(triangle *tri, const rectangle &cliprect)
{ {
model2_renderer *poly = m_state.m_poly; model2_renderer *poly = m_state.m_poly;
m2_poly_extra_data& extra = poly->object_data_alloc(); m2_poly_extra_data& extra = poly->object_data_alloc();
UINT8 renderer; UINT8 renderer;
/* select renderer based on attributes (bit15 = checker, bit14 = textured, bit13 = transparent */ /* select renderer based on attributes (bit15 = checker, bit14 = textured, bit13 = transparent */
@ -821,35 +821,35 @@ void model2_renderer::model2_3d_render(triangle *tri, const rectangle &cliprect)
tri->v[2].pu = tri->v[2].pu * tri->v[2].pz * (1.0f / 8.0f); tri->v[2].pu = tri->v[2].pu * tri->v[2].pz * (1.0f / 8.0f);
tri->v[2].pv = tri->v[2].pv * tri->v[2].pz * (1.0f / 8.0f); tri->v[2].pv = tri->v[2].pv * tri->v[2].pz * (1.0f / 8.0f);
// Note : The class model2_renderer has an array of function pointers in it named m_renderfuncs, in theory this simply // Note : The class model2_renderer has an array of function pointers in it named m_renderfuncs, in theory this simply
// needs to be passed into the render_triangle function as such model2_renderer::m_renderfuncs[renderer], but // needs to be passed into the render_triangle function as such model2_renderer::m_renderfuncs[renderer], but
// I was unable to make it work when converting to the new polygon rasterizer interface. // I was unable to make it work when converting to the new polygon rasterizer interface.
switch (renderer) switch (renderer)
{ {
case 0: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_0), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 0: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_0), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
case 1: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_1), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 1: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_1), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
case 2: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_2), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 2: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_2), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
case 3: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_3), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 3: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_3), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
case 4: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_4), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 4: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_4), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
case 5: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_5), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 5: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_5), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
case 6: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_6), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 6: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_6), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
case 7: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_7), this), 3, tri->v[0], tri->v[1], tri->v[2]); break; case 7: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_7), this), 3, tri->v[0], tri->v[1], tri->v[2]); break;
} }
} }
else else
{ {
switch (renderer) switch (renderer)
{ {
case 0: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_0), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 0: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_0), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
case 1: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_1), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 1: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_1), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
case 2: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_2), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 2: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_2), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
case 3: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_3), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 3: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_3), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
case 4: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_4), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 4: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_4), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
case 5: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_5), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 5: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_5), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
case 6: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_6), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 6: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_6), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
case 7: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_7), this), 0, tri->v[0], tri->v[1], tri->v[2]); break; case 7: render_triangle(vp, render_delegate(FUNC(model2_renderer::model2_3d_render_7), this), 0, tri->v[0], tri->v[1], tri->v[2]); break;
} }
} }
} }
/* /*
@ -947,8 +947,8 @@ void model2_state::model2_3d_frame_end( bitmap_rgb32 &bitmap, const rectangle &c
} }
#endif #endif
m_poly->destmap().fill(0x00000000, cliprect); m_poly->destmap().fill(0x00000000, cliprect);
/* go through the Z levels, and render each bucket */ /* go through the Z levels, and render each bucket */
for( z = raster->max_z; z >= raster->min_z; z-- ) for( z = raster->max_z; z >= raster->min_z; z-- )
{ {
@ -970,8 +970,8 @@ void model2_state::model2_3d_frame_end( bitmap_rgb32 &bitmap, const rectangle &c
} }
} }
m_poly->wait("End of frame"); m_poly->wait("End of frame");
copybitmap_trans(bitmap, m_poly->destmap(), 0, 0, 0, 0, cliprect, 0x00000000); copybitmap_trans(bitmap, m_poly->destmap(), 0, 0, 0, 0, cliprect, 0x00000000);
} }
/* 3D Rasterizer main data input port */ /* 3D Rasterizer main data input port */
@ -2590,7 +2590,7 @@ VIDEO_START_MEMBER(model2_state,model2)
m_sys24_bitmap.allocate(width, height+4); m_sys24_bitmap.allocate(width, height+4);
m_poly = auto_alloc(machine(), model2_renderer(*this)); m_poly = auto_alloc(machine(), model2_renderer(*this));
/* initialize the hardware rasterizer */ /* initialize the hardware rasterizer */
model2_3d_init( machine(), (UINT16*)memregion("user3")->base() ); model2_3d_init( machine(), (UINT16*)memregion("user3")->base() );

View File

@ -214,8 +214,8 @@ void n64_periphs::video_update16(bitmap_rgb32 &bitmap)
//if (hres > 640) // Needed by Top Gear Overdrive (E) //if (hres > 640) // Needed by Top Gear Overdrive (E)
//{ //{
// invisiblewidth += (hres - 640); // invisiblewidth += (hres - 640);
// hres = 640; // hres = 640;
//} //}
if (vres > bitmap.height()) // makes Perfect Dark boot w/o crashing if (vres > bitmap.height()) // makes Perfect Dark boot w/o crashing
@ -270,8 +270,8 @@ void n64_periphs::video_update32(bitmap_rgb32 &bitmap)
//if (hres > 640) // Needed by Top Gear Overdrive (E) //if (hres > 640) // Needed by Top Gear Overdrive (E)
//{ //{
// invisiblewidth += (hres - 640); // invisiblewidth += (hres - 640);
// hres = 640; // hres = 640;
//} //}
if (frame_buffer32) if (frame_buffer32)

View File

@ -302,7 +302,7 @@ public:
UINT16 m_dzpix_normalize[0x10000]; UINT16 m_dzpix_normalize[0x10000];
rectangle_t m_scissor; rectangle_t m_scissor;
span_base_t m_span_base; span_base_t m_span_base;
void draw_triangle(bool shade, bool texture, bool zbuffer, bool rect); void draw_triangle(bool shade, bool texture, bool zbuffer, bool rect);

View File

@ -18,7 +18,7 @@ void segaxbd_state::video_start()
{ {
if(!m_segaic16vid->started()) if(!m_segaic16vid->started())
throw device_missing_dependencies(); throw device_missing_dependencies();
if(!m_segaic16road->started()) if(!m_segaic16road->started())
throw device_missing_dependencies(); throw device_missing_dependencies();

View File

@ -288,7 +288,7 @@ void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
// note: fireballs in level 5 (fe20/40) should go above flames and score (text sprites) // note: fireballs in level 5 (fe20/40) should go above flames and score (text sprites)
int text_list = (i - start) & 0x20; int text_list = (i - start) & 0x20;
int text_start = text_list ? 0x19c0 : 0x1980; int text_start = text_list ? 0x19c0 : 0x1980;
bool write_mask = (text_list == 0); // hack? bool write_mask = (text_list == 0); // hack?
draw_text_sprites(screen, bitmap, cliprect, text_start, text_start + 0x80, y, write_mask); draw_text_sprites(screen, bitmap, cliprect, text_start, text_start + 0x80, y, write_mask);
continue; continue;
} }
@ -459,7 +459,7 @@ void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
2.b X 2.b X
3.b 7--- ---- 0 = Last Sprite 3.b 7--- ---- 0 = Last Sprite
-6-- ---- X (Sign Bit) -6-- ---- X (Sign Bit)
--54 3210 Tiles Bank ($400 tiles each) --54 3210 Tiles Bank ($400 tiles each)

View File

@ -108,7 +108,7 @@ static MACHINE_CONFIG_START( asst128, asst128_state )
asst128_mb_device::static_set_cputag(*device, "maincpu"); asst128_mb_device::static_set_cputag(*device, "maincpu");
MCFG_DEVICE_INPUT_DEFAULTS(asst128) MCFG_DEVICE_INPUT_DEFAULTS(asst128)
// MCFG_DEVICE_REMOVE("mb:dma8237") // MCFG_DEVICE_REMOVE("mb:dma8237")
MCFG_DEVICE_REMOVE("mb:cassette") MCFG_DEVICE_REMOVE("mb:cassette")
MCFG_CASSETTE_ADD("mb:cassette") MCFG_CASSETTE_ADD("mb:cassette")

View File

@ -143,7 +143,7 @@ static ADDRESS_MAP_START( bbca_mem, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */
AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */
/* fe00-feff SHEILA Address Page */ /* fe00-feff SHEILA Address Page */
AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */ AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */
AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w) AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */ AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */
@ -151,9 +151,9 @@ static ADDRESS_MAP_START( bbca_mem, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */
AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID # ECONET Interrupt Off / ID No. */ AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID # ECONET Interrupt Off / ID No. */
AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON # ECONET Interrupt On */ AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON # ECONET Interrupt On */
/* W: fe20-fe2f Video ULA Video system chip */ /* W: fe20-fe2f Video ULA Video system chip */
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selecta_w) /* R: fe30-fe3f NC Not Connected */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selecta_w) /* R: fe30-fe3f NC Not Connected */
/* W: fe30-fe3f 84LS161 Paged ROM selector */ /* W: fe30-fe3f 84LS161 Paged ROM selector */
AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */
AM_RANGE(0xfe60, 0xfe7f) AM_NOP /* fe60-fe7f 6522 VIA # USER VIA */ AM_RANGE(0xfe60, 0xfe7f) AM_NOP /* fe60-fe7f 6522 VIA # USER VIA */
AM_RANGE(0xfe80, 0xfe9f) AM_NOP /* fe80-fe9f 8271/1770 FDC # Floppy disc controller */ AM_RANGE(0xfe80, 0xfe9f) AM_NOP /* fe80-fe9f 8271/1770 FDC # Floppy disc controller */
@ -169,7 +169,7 @@ static ADDRESS_MAP_START( bbc_base, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */
AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */
/* fe00-feff SHEILA Address Page */ /* fe00-feff SHEILA Address Page */
AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */ AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */
AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w) AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */ AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */
@ -177,10 +177,10 @@ static ADDRESS_MAP_START( bbc_base, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */
AM_RANGE(0xfe18, 0xfe1f) AM_READ_PORT("S11") /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ AM_RANGE(0xfe18, 0xfe1f) AM_READ_PORT("S11") /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */
AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */
/* W: fe20-fe2f Video ULA Video system chip */ /* W: fe20-fe2f Video ULA Video system chip */
AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */
AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */
/* fe80-fe9f FDC Floppy disc controller */ /* fe80-fe9f FDC Floppy disc controller */
AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */
AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */
AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */
@ -193,7 +193,7 @@ static ADDRESS_MAP_START( bbcb_mem, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */ AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */
/* W: fe30-fe3f 84LS161 Paged ROM selector */ /* W: fe30-fe3f 84LS161 Paged ROM selector */
AM_RANGE(0xfe80, 0xfe83) AM_DEVICE("i8271" , i8271_device, map) /* fe80-fe9f 8271 FDC Floppy disc controller */ AM_RANGE(0xfe80, 0xfe83) AM_DEVICE("i8271" , i8271_device, map) /* fe80-fe9f 8271 FDC Floppy disc controller */
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, data_r, data_w) /* fe80-fe9f 8271 FDC Floppy disc controller */ AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, data_r, data_w) /* fe80-fe9f 8271 FDC Floppy disc controller */
AM_IMPORT_FROM(bbc_base) AM_IMPORT_FROM(bbc_base)
@ -205,7 +205,7 @@ static ADDRESS_MAP_START(bbcb1770_mem, AS_PROGRAM, 8, bbc_state)
AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */ AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */
/* W: fe30-fe3f 84LS161 Paged ROM selector */ /* W: fe30-fe3f 84LS161 Paged ROM selector */
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
AM_IMPORT_FROM(bbc_base) AM_IMPORT_FROM(bbc_base)
@ -218,7 +218,7 @@ static ADDRESS_MAP_START( bbcbp_mem, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */ AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */
AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */ AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */
/* W: fe30-fe3f 84LS161 Paged ROM selector */ /* W: fe30-fe3f 84LS161 Paged ROM selector */
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
AM_IMPORT_FROM(bbc_base) AM_IMPORT_FROM(bbc_base)
@ -231,7 +231,7 @@ static ADDRESS_MAP_START( bbcbp128_mem, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_128_w) /* 8000-afff Paged ROM or 12K of SWRAM */ AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_128_w) /* 8000-afff Paged ROM or 12K of SWRAM */
AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(bbc_memorybp6_128_w) /* b000-bfff Rest of paged ROM area */ AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(bbc_memorybp6_128_w) /* b000-bfff Rest of paged ROM area */
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */
/* W: fe30-fe3f 84LS161 Paged ROM selector */ /* W: fe30-fe3f 84LS161 Paged ROM selector */
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
AM_IMPORT_FROM(bbc_base) AM_IMPORT_FROM(bbc_base)
@ -244,7 +244,7 @@ static ADDRESS_MAP_START( reutapm_mem, AS_PROGRAM, 8, bbc_state )
AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */ AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */
AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */ AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */
/* W: fe30-fe3f 84LS161 Paged ROM selector */ /* W: fe30-fe3f 84LS161 Paged ROM selector */
AM_RANGE(0xfe80, 0xfe83) AM_NOP /* fe80-fe83 1770 FDC Drive control register */ AM_RANGE(0xfe80, 0xfe83) AM_NOP /* fe80-fe83 1770 FDC Drive control register */
AM_RANGE(0xfe84, 0xfe9f) AM_NOP /* fe84-fe9f 1770 FDC Floppy disc controller */ AM_RANGE(0xfe84, 0xfe9f) AM_NOP /* fe84-fe9f 1770 FDC Floppy disc controller */
AM_IMPORT_FROM(bbc_base) AM_IMPORT_FROM(bbc_base)
@ -490,7 +490,7 @@ static INPUT_PORTS_START(bbc_dipswitch)
PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:6") PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:6")
PORT_DIPSETTING( 0x00, "+0" ) PORT_DIPSETTING( 0x00, "+0" )
PORT_DIPSETTING( 0x01, "+4" ) PORT_DIPSETTING( 0x01, "+4" )
PORT_MODIFY("COL8") PORT_MODIFY("COL8")
PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:7") PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:7")
PORT_DIPSETTING( 0x00, "+0" ) PORT_DIPSETTING( 0x00, "+0" )
@ -506,57 +506,57 @@ INPUT_PORTS_END
static INPUT_PORTS_START(bbc_links) static INPUT_PORTS_START(bbc_links)
PORT_START("S11") PORT_START("S11")
PORT_DIPNAME(0xff, 0xfe, "Econet ID") PORT_DIPLOCATION("S11:1,2,3,4,5,6,7,8") PORT_DIPNAME(0xff, 0xfe, "Econet ID") PORT_DIPLOCATION("S11:1,2,3,4,5,6,7,8")
PORT_DIPSETTING( 0x00, "0" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x04, "4" ) PORT_DIPSETTING( 0x00, "0" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x05, "5" ) PORT_DIPSETTING( 0x06, "6" ) PORT_DIPSETTING( 0x07, "7" ) PORT_DIPSETTING( 0x08, "8" ) PORT_DIPSETTING( 0x09, "9" ) PORT_DIPSETTING( 0x05, "5" ) PORT_DIPSETTING( 0x06, "6" ) PORT_DIPSETTING( 0x07, "7" ) PORT_DIPSETTING( 0x08, "8" ) PORT_DIPSETTING( 0x09, "9" )
PORT_DIPSETTING( 0x0a, "10" ) PORT_DIPSETTING( 0x0b, "11" ) PORT_DIPSETTING( 0x0c, "12" ) PORT_DIPSETTING( 0x0d, "13" ) PORT_DIPSETTING( 0x0e, "14" ) PORT_DIPSETTING( 0x0a, "10" ) PORT_DIPSETTING( 0x0b, "11" ) PORT_DIPSETTING( 0x0c, "12" ) PORT_DIPSETTING( 0x0d, "13" ) PORT_DIPSETTING( 0x0e, "14" )
PORT_DIPSETTING( 0x0f, "15" ) PORT_DIPSETTING( 0x10, "16" ) PORT_DIPSETTING( 0x11, "17" ) PORT_DIPSETTING( 0x12, "18" ) PORT_DIPSETTING( 0x13, "19" ) PORT_DIPSETTING( 0x0f, "15" ) PORT_DIPSETTING( 0x10, "16" ) PORT_DIPSETTING( 0x11, "17" ) PORT_DIPSETTING( 0x12, "18" ) PORT_DIPSETTING( 0x13, "19" )
PORT_DIPSETTING( 0x14, "20" ) PORT_DIPSETTING( 0x15, "21" ) PORT_DIPSETTING( 0x16, "22" ) PORT_DIPSETTING( 0x17, "23" ) PORT_DIPSETTING( 0x18, "24" ) PORT_DIPSETTING( 0x14, "20" ) PORT_DIPSETTING( 0x15, "21" ) PORT_DIPSETTING( 0x16, "22" ) PORT_DIPSETTING( 0x17, "23" ) PORT_DIPSETTING( 0x18, "24" )
PORT_DIPSETTING( 0x19, "25" ) PORT_DIPSETTING( 0x1a, "26" ) PORT_DIPSETTING( 0x1b, "27" ) PORT_DIPSETTING( 0x1c, "28" ) PORT_DIPSETTING( 0x1d, "29" ) PORT_DIPSETTING( 0x19, "25" ) PORT_DIPSETTING( 0x1a, "26" ) PORT_DIPSETTING( 0x1b, "27" ) PORT_DIPSETTING( 0x1c, "28" ) PORT_DIPSETTING( 0x1d, "29" )
PORT_DIPSETTING( 0x1e, "30" ) PORT_DIPSETTING( 0x1f, "31" ) PORT_DIPSETTING( 0x20, "32" ) PORT_DIPSETTING( 0x21, "33" ) PORT_DIPSETTING( 0x22, "34" ) PORT_DIPSETTING( 0x1e, "30" ) PORT_DIPSETTING( 0x1f, "31" ) PORT_DIPSETTING( 0x20, "32" ) PORT_DIPSETTING( 0x21, "33" ) PORT_DIPSETTING( 0x22, "34" )
PORT_DIPSETTING( 0x23, "35" ) PORT_DIPSETTING( 0x24, "36" ) PORT_DIPSETTING( 0x25, "37" ) PORT_DIPSETTING( 0x26, "38" ) PORT_DIPSETTING( 0x27, "39" ) PORT_DIPSETTING( 0x23, "35" ) PORT_DIPSETTING( 0x24, "36" ) PORT_DIPSETTING( 0x25, "37" ) PORT_DIPSETTING( 0x26, "38" ) PORT_DIPSETTING( 0x27, "39" )
PORT_DIPSETTING( 0x28, "40" ) PORT_DIPSETTING( 0x29, "41" ) PORT_DIPSETTING( 0x2a, "42" ) PORT_DIPSETTING( 0x2b, "43" ) PORT_DIPSETTING( 0x2c, "44" ) PORT_DIPSETTING( 0x28, "40" ) PORT_DIPSETTING( 0x29, "41" ) PORT_DIPSETTING( 0x2a, "42" ) PORT_DIPSETTING( 0x2b, "43" ) PORT_DIPSETTING( 0x2c, "44" )
PORT_DIPSETTING( 0x2d, "45" ) PORT_DIPSETTING( 0x2e, "46" ) PORT_DIPSETTING( 0x2f, "47" ) PORT_DIPSETTING( 0x30, "48" ) PORT_DIPSETTING( 0x31, "49" ) PORT_DIPSETTING( 0x2d, "45" ) PORT_DIPSETTING( 0x2e, "46" ) PORT_DIPSETTING( 0x2f, "47" ) PORT_DIPSETTING( 0x30, "48" ) PORT_DIPSETTING( 0x31, "49" )
PORT_DIPSETTING( 0x32, "50" ) PORT_DIPSETTING( 0x33, "51" ) PORT_DIPSETTING( 0x34, "52" ) PORT_DIPSETTING( 0x35, "53" ) PORT_DIPSETTING( 0x36, "54" ) PORT_DIPSETTING( 0x32, "50" ) PORT_DIPSETTING( 0x33, "51" ) PORT_DIPSETTING( 0x34, "52" ) PORT_DIPSETTING( 0x35, "53" ) PORT_DIPSETTING( 0x36, "54" )
PORT_DIPSETTING( 0x37, "15" ) PORT_DIPSETTING( 0x38, "56" ) PORT_DIPSETTING( 0x39, "57" ) PORT_DIPSETTING( 0x3a, "58" ) PORT_DIPSETTING( 0x3b, "59" ) PORT_DIPSETTING( 0x37, "15" ) PORT_DIPSETTING( 0x38, "56" ) PORT_DIPSETTING( 0x39, "57" ) PORT_DIPSETTING( 0x3a, "58" ) PORT_DIPSETTING( 0x3b, "59" )
PORT_DIPSETTING( 0x3c, "60" ) PORT_DIPSETTING( 0x3d, "61" ) PORT_DIPSETTING( 0x3e, "62" ) PORT_DIPSETTING( 0x3f, "63" ) PORT_DIPSETTING( 0x40, "64" ) PORT_DIPSETTING( 0x3c, "60" ) PORT_DIPSETTING( 0x3d, "61" ) PORT_DIPSETTING( 0x3e, "62" ) PORT_DIPSETTING( 0x3f, "63" ) PORT_DIPSETTING( 0x40, "64" )
PORT_DIPSETTING( 0x41, "65" ) PORT_DIPSETTING( 0x42, "66" ) PORT_DIPSETTING( 0x43, "67" ) PORT_DIPSETTING( 0x44, "68" ) PORT_DIPSETTING( 0x45, "69" ) PORT_DIPSETTING( 0x41, "65" ) PORT_DIPSETTING( 0x42, "66" ) PORT_DIPSETTING( 0x43, "67" ) PORT_DIPSETTING( 0x44, "68" ) PORT_DIPSETTING( 0x45, "69" )
PORT_DIPSETTING( 0x46, "70" ) PORT_DIPSETTING( 0x47, "71" ) PORT_DIPSETTING( 0x48, "72" ) PORT_DIPSETTING( 0x49, "73" ) PORT_DIPSETTING( 0x4a, "74" ) PORT_DIPSETTING( 0x46, "70" ) PORT_DIPSETTING( 0x47, "71" ) PORT_DIPSETTING( 0x48, "72" ) PORT_DIPSETTING( 0x49, "73" ) PORT_DIPSETTING( 0x4a, "74" )
PORT_DIPSETTING( 0x4b, "75" ) PORT_DIPSETTING( 0x4c, "76" ) PORT_DIPSETTING( 0x4d, "77" ) PORT_DIPSETTING( 0x4e, "78" ) PORT_DIPSETTING( 0x4f, "79" ) PORT_DIPSETTING( 0x4b, "75" ) PORT_DIPSETTING( 0x4c, "76" ) PORT_DIPSETTING( 0x4d, "77" ) PORT_DIPSETTING( 0x4e, "78" ) PORT_DIPSETTING( 0x4f, "79" )
PORT_DIPSETTING( 0x50, "80" ) PORT_DIPSETTING( 0x51, "81" ) PORT_DIPSETTING( 0x52, "82" ) PORT_DIPSETTING( 0x53, "83" ) PORT_DIPSETTING( 0x54, "84" ) PORT_DIPSETTING( 0x50, "80" ) PORT_DIPSETTING( 0x51, "81" ) PORT_DIPSETTING( 0x52, "82" ) PORT_DIPSETTING( 0x53, "83" ) PORT_DIPSETTING( 0x54, "84" )
PORT_DIPSETTING( 0x55, "85" ) PORT_DIPSETTING( 0x56, "86" ) PORT_DIPSETTING( 0x57, "87" ) PORT_DIPSETTING( 0x58, "88" ) PORT_DIPSETTING( 0x59, "89" ) PORT_DIPSETTING( 0x55, "85" ) PORT_DIPSETTING( 0x56, "86" ) PORT_DIPSETTING( 0x57, "87" ) PORT_DIPSETTING( 0x58, "88" ) PORT_DIPSETTING( 0x59, "89" )
PORT_DIPSETTING( 0x5a, "90" ) PORT_DIPSETTING( 0x5b, "91" ) PORT_DIPSETTING( 0x5c, "92" ) PORT_DIPSETTING( 0x5d, "93" ) PORT_DIPSETTING( 0x5e, "94" ) PORT_DIPSETTING( 0x5a, "90" ) PORT_DIPSETTING( 0x5b, "91" ) PORT_DIPSETTING( 0x5c, "92" ) PORT_DIPSETTING( 0x5d, "93" ) PORT_DIPSETTING( 0x5e, "94" )
PORT_DIPSETTING( 0x5f, "95" ) PORT_DIPSETTING( 0x60, "96" ) PORT_DIPSETTING( 0x61, "97" ) PORT_DIPSETTING( 0x62, "98" ) PORT_DIPSETTING( 0x63, "99" ) PORT_DIPSETTING( 0x5f, "95" ) PORT_DIPSETTING( 0x60, "96" ) PORT_DIPSETTING( 0x61, "97" ) PORT_DIPSETTING( 0x62, "98" ) PORT_DIPSETTING( 0x63, "99" )
PORT_DIPSETTING( 0x64, "100" ) PORT_DIPSETTING( 0x65, "101" ) PORT_DIPSETTING( 0x66, "102" ) PORT_DIPSETTING( 0x67, "103" ) PORT_DIPSETTING( 0x68, "104" ) PORT_DIPSETTING( 0x64, "100" ) PORT_DIPSETTING( 0x65, "101" ) PORT_DIPSETTING( 0x66, "102" ) PORT_DIPSETTING( 0x67, "103" ) PORT_DIPSETTING( 0x68, "104" )
PORT_DIPSETTING( 0x69, "105" ) PORT_DIPSETTING( 0x6a, "106" ) PORT_DIPSETTING( 0x6b, "107" ) PORT_DIPSETTING( 0x6c, "108" ) PORT_DIPSETTING( 0x6d, "109" ) PORT_DIPSETTING( 0x69, "105" ) PORT_DIPSETTING( 0x6a, "106" ) PORT_DIPSETTING( 0x6b, "107" ) PORT_DIPSETTING( 0x6c, "108" ) PORT_DIPSETTING( 0x6d, "109" )
PORT_DIPSETTING( 0x6e, "110" ) PORT_DIPSETTING( 0x6f, "111" ) PORT_DIPSETTING( 0x70, "112" ) PORT_DIPSETTING( 0x71, "113" ) PORT_DIPSETTING( 0x72, "114" ) PORT_DIPSETTING( 0x6e, "110" ) PORT_DIPSETTING( 0x6f, "111" ) PORT_DIPSETTING( 0x70, "112" ) PORT_DIPSETTING( 0x71, "113" ) PORT_DIPSETTING( 0x72, "114" )
PORT_DIPSETTING( 0x73, "115" ) PORT_DIPSETTING( 0x74, "116" ) PORT_DIPSETTING( 0x75, "117" ) PORT_DIPSETTING( 0x76, "118" ) PORT_DIPSETTING( 0x77, "119" ) PORT_DIPSETTING( 0x73, "115" ) PORT_DIPSETTING( 0x74, "116" ) PORT_DIPSETTING( 0x75, "117" ) PORT_DIPSETTING( 0x76, "118" ) PORT_DIPSETTING( 0x77, "119" )
PORT_DIPSETTING( 0x78, "120" ) PORT_DIPSETTING( 0x79, "121" ) PORT_DIPSETTING( 0x7a, "122" ) PORT_DIPSETTING( 0x7b, "123" ) PORT_DIPSETTING( 0x7c, "124" ) PORT_DIPSETTING( 0x78, "120" ) PORT_DIPSETTING( 0x79, "121" ) PORT_DIPSETTING( 0x7a, "122" ) PORT_DIPSETTING( 0x7b, "123" ) PORT_DIPSETTING( 0x7c, "124" )
PORT_DIPSETTING( 0x7d, "125" ) PORT_DIPSETTING( 0x7e, "126" ) PORT_DIPSETTING( 0x7f, "127" ) PORT_DIPSETTING( 0x80, "128" ) PORT_DIPSETTING( 0x81, "129" ) PORT_DIPSETTING( 0x7d, "125" ) PORT_DIPSETTING( 0x7e, "126" ) PORT_DIPSETTING( 0x7f, "127" ) PORT_DIPSETTING( 0x80, "128" ) PORT_DIPSETTING( 0x81, "129" )
PORT_DIPSETTING( 0x82, "130" ) PORT_DIPSETTING( 0x83, "131" ) PORT_DIPSETTING( 0x84, "132" ) PORT_DIPSETTING( 0x85, "133" ) PORT_DIPSETTING( 0x86, "134" ) PORT_DIPSETTING( 0x82, "130" ) PORT_DIPSETTING( 0x83, "131" ) PORT_DIPSETTING( 0x84, "132" ) PORT_DIPSETTING( 0x85, "133" ) PORT_DIPSETTING( 0x86, "134" )
PORT_DIPSETTING( 0x87, "135" ) PORT_DIPSETTING( 0x88, "136" ) PORT_DIPSETTING( 0x89, "137" ) PORT_DIPSETTING( 0x8a, "138" ) PORT_DIPSETTING( 0x8b, "139" ) PORT_DIPSETTING( 0x87, "135" ) PORT_DIPSETTING( 0x88, "136" ) PORT_DIPSETTING( 0x89, "137" ) PORT_DIPSETTING( 0x8a, "138" ) PORT_DIPSETTING( 0x8b, "139" )
PORT_DIPSETTING( 0x8c, "140" ) PORT_DIPSETTING( 0x8d, "141" ) PORT_DIPSETTING( 0x8e, "142" ) PORT_DIPSETTING( 0x8f, "143" ) PORT_DIPSETTING( 0x90, "144" ) PORT_DIPSETTING( 0x8c, "140" ) PORT_DIPSETTING( 0x8d, "141" ) PORT_DIPSETTING( 0x8e, "142" ) PORT_DIPSETTING( 0x8f, "143" ) PORT_DIPSETTING( 0x90, "144" )
PORT_DIPSETTING( 0x91, "145" ) PORT_DIPSETTING( 0x92, "146" ) PORT_DIPSETTING( 0x93, "147" ) PORT_DIPSETTING( 0x94, "148" ) PORT_DIPSETTING( 0x95, "149" ) PORT_DIPSETTING( 0x91, "145" ) PORT_DIPSETTING( 0x92, "146" ) PORT_DIPSETTING( 0x93, "147" ) PORT_DIPSETTING( 0x94, "148" ) PORT_DIPSETTING( 0x95, "149" )
PORT_DIPSETTING( 0x96, "150" ) PORT_DIPSETTING( 0x97, "151" ) PORT_DIPSETTING( 0x98, "152" ) PORT_DIPSETTING( 0x99, "153" ) PORT_DIPSETTING( 0x9a, "154" ) PORT_DIPSETTING( 0x96, "150" ) PORT_DIPSETTING( 0x97, "151" ) PORT_DIPSETTING( 0x98, "152" ) PORT_DIPSETTING( 0x99, "153" ) PORT_DIPSETTING( 0x9a, "154" )
PORT_DIPSETTING( 0x9b, "155" ) PORT_DIPSETTING( 0x9c, "156" ) PORT_DIPSETTING( 0x9d, "157" ) PORT_DIPSETTING( 0x9e, "158" ) PORT_DIPSETTING( 0x9f, "159" ) PORT_DIPSETTING( 0x9b, "155" ) PORT_DIPSETTING( 0x9c, "156" ) PORT_DIPSETTING( 0x9d, "157" ) PORT_DIPSETTING( 0x9e, "158" ) PORT_DIPSETTING( 0x9f, "159" )
PORT_DIPSETTING( 0xa0, "160" ) PORT_DIPSETTING( 0xa1, "161" ) PORT_DIPSETTING( 0xa2, "162" ) PORT_DIPSETTING( 0xa3, "163" ) PORT_DIPSETTING( 0xa4, "164" ) PORT_DIPSETTING( 0xa0, "160" ) PORT_DIPSETTING( 0xa1, "161" ) PORT_DIPSETTING( 0xa2, "162" ) PORT_DIPSETTING( 0xa3, "163" ) PORT_DIPSETTING( 0xa4, "164" )
PORT_DIPSETTING( 0xa5, "165" ) PORT_DIPSETTING( 0xa6, "166" ) PORT_DIPSETTING( 0xa7, "167" ) PORT_DIPSETTING( 0xa8, "168" ) PORT_DIPSETTING( 0xa9, "169" ) PORT_DIPSETTING( 0xa5, "165" ) PORT_DIPSETTING( 0xa6, "166" ) PORT_DIPSETTING( 0xa7, "167" ) PORT_DIPSETTING( 0xa8, "168" ) PORT_DIPSETTING( 0xa9, "169" )
PORT_DIPSETTING( 0xaa, "170" ) PORT_DIPSETTING( 0xab, "171" ) PORT_DIPSETTING( 0xac, "172" ) PORT_DIPSETTING( 0xad, "173" ) PORT_DIPSETTING( 0xae, "174" ) PORT_DIPSETTING( 0xaa, "170" ) PORT_DIPSETTING( 0xab, "171" ) PORT_DIPSETTING( 0xac, "172" ) PORT_DIPSETTING( 0xad, "173" ) PORT_DIPSETTING( 0xae, "174" )
PORT_DIPSETTING( 0xaf, "175" ) PORT_DIPSETTING( 0xb0, "176" ) PORT_DIPSETTING( 0xb1, "177" ) PORT_DIPSETTING( 0xb2, "178" ) PORT_DIPSETTING( 0xb3, "179" ) PORT_DIPSETTING( 0xaf, "175" ) PORT_DIPSETTING( 0xb0, "176" ) PORT_DIPSETTING( 0xb1, "177" ) PORT_DIPSETTING( 0xb2, "178" ) PORT_DIPSETTING( 0xb3, "179" )
PORT_DIPSETTING( 0xb4, "180" ) PORT_DIPSETTING( 0xb5, "181" ) PORT_DIPSETTING( 0xb6, "182" ) PORT_DIPSETTING( 0xb7, "183" ) PORT_DIPSETTING( 0xb8, "184" ) PORT_DIPSETTING( 0xb4, "180" ) PORT_DIPSETTING( 0xb5, "181" ) PORT_DIPSETTING( 0xb6, "182" ) PORT_DIPSETTING( 0xb7, "183" ) PORT_DIPSETTING( 0xb8, "184" )
PORT_DIPSETTING( 0xb9, "185" ) PORT_DIPSETTING( 0xba, "186" ) PORT_DIPSETTING( 0xbb, "187" ) PORT_DIPSETTING( 0xbc, "188" ) PORT_DIPSETTING( 0xbd, "189" ) PORT_DIPSETTING( 0xb9, "185" ) PORT_DIPSETTING( 0xba, "186" ) PORT_DIPSETTING( 0xbb, "187" ) PORT_DIPSETTING( 0xbc, "188" ) PORT_DIPSETTING( 0xbd, "189" )
PORT_DIPSETTING( 0xbe, "190" ) PORT_DIPSETTING( 0xbf, "191" ) PORT_DIPSETTING( 0xc0, "192" ) PORT_DIPSETTING( 0xc1, "193" ) PORT_DIPSETTING( 0xc2, "194" ) PORT_DIPSETTING( 0xbe, "190" ) PORT_DIPSETTING( 0xbf, "191" ) PORT_DIPSETTING( 0xc0, "192" ) PORT_DIPSETTING( 0xc1, "193" ) PORT_DIPSETTING( 0xc2, "194" )
PORT_DIPSETTING( 0xc3, "195" ) PORT_DIPSETTING( 0xc4, "196" ) PORT_DIPSETTING( 0xc5, "197" ) PORT_DIPSETTING( 0xc6, "198" ) PORT_DIPSETTING( 0xc7, "199" ) PORT_DIPSETTING( 0xc3, "195" ) PORT_DIPSETTING( 0xc4, "196" ) PORT_DIPSETTING( 0xc5, "197" ) PORT_DIPSETTING( 0xc6, "198" ) PORT_DIPSETTING( 0xc7, "199" )
PORT_DIPSETTING( 0xc8, "200" ) PORT_DIPSETTING( 0xc9, "201" ) PORT_DIPSETTING( 0xca, "202" ) PORT_DIPSETTING( 0xcb, "203" ) PORT_DIPSETTING( 0xcc, "204" ) PORT_DIPSETTING( 0xc8, "200" ) PORT_DIPSETTING( 0xc9, "201" ) PORT_DIPSETTING( 0xca, "202" ) PORT_DIPSETTING( 0xcb, "203" ) PORT_DIPSETTING( 0xcc, "204" )
PORT_DIPSETTING( 0xcd, "205" ) PORT_DIPSETTING( 0xce, "206" ) PORT_DIPSETTING( 0xcf, "207" ) PORT_DIPSETTING( 0xd0, "208" ) PORT_DIPSETTING( 0xd1, "209" ) PORT_DIPSETTING( 0xcd, "205" ) PORT_DIPSETTING( 0xce, "206" ) PORT_DIPSETTING( 0xcf, "207" ) PORT_DIPSETTING( 0xd0, "208" ) PORT_DIPSETTING( 0xd1, "209" )
PORT_DIPSETTING( 0xd2, "210" ) PORT_DIPSETTING( 0xd3, "211" ) PORT_DIPSETTING( 0xd4, "212" ) PORT_DIPSETTING( 0xd5, "213" ) PORT_DIPSETTING( 0xd6, "214" ) PORT_DIPSETTING( 0xd2, "210" ) PORT_DIPSETTING( 0xd3, "211" ) PORT_DIPSETTING( 0xd4, "212" ) PORT_DIPSETTING( 0xd5, "213" ) PORT_DIPSETTING( 0xd6, "214" )
PORT_DIPSETTING( 0xd7, "215" ) PORT_DIPSETTING( 0xd8, "216" ) PORT_DIPSETTING( 0xd9, "217" ) PORT_DIPSETTING( 0xda, "218" ) PORT_DIPSETTING( 0xdb, "219" ) PORT_DIPSETTING( 0xd7, "215" ) PORT_DIPSETTING( 0xd8, "216" ) PORT_DIPSETTING( 0xd9, "217" ) PORT_DIPSETTING( 0xda, "218" ) PORT_DIPSETTING( 0xdb, "219" )
PORT_DIPSETTING( 0xdc, "220" ) PORT_DIPSETTING( 0xdd, "221" ) PORT_DIPSETTING( 0xde, "222" ) PORT_DIPSETTING( 0xdf, "223" ) PORT_DIPSETTING( 0xe0, "224" ) PORT_DIPSETTING( 0xdc, "220" ) PORT_DIPSETTING( 0xdd, "221" ) PORT_DIPSETTING( 0xde, "222" ) PORT_DIPSETTING( 0xdf, "223" ) PORT_DIPSETTING( 0xe0, "224" )
PORT_DIPSETTING( 0xe1, "225" ) PORT_DIPSETTING( 0xe2, "226" ) PORT_DIPSETTING( 0xe3, "227" ) PORT_DIPSETTING( 0xe4, "228" ) PORT_DIPSETTING( 0xe5, "229" ) PORT_DIPSETTING( 0xe1, "225" ) PORT_DIPSETTING( 0xe2, "226" ) PORT_DIPSETTING( 0xe3, "227" ) PORT_DIPSETTING( 0xe4, "228" ) PORT_DIPSETTING( 0xe5, "229" )
PORT_DIPSETTING( 0xe6, "230" ) PORT_DIPSETTING( 0xe7, "231" ) PORT_DIPSETTING( 0xe8, "232" ) PORT_DIPSETTING( 0xe9, "233" ) PORT_DIPSETTING( 0xea, "234" ) PORT_DIPSETTING( 0xe6, "230" ) PORT_DIPSETTING( 0xe7, "231" ) PORT_DIPSETTING( 0xe8, "232" ) PORT_DIPSETTING( 0xe9, "233" ) PORT_DIPSETTING( 0xea, "234" )
PORT_DIPSETTING( 0xeb, "235" ) PORT_DIPSETTING( 0xec, "236" ) PORT_DIPSETTING( 0xed, "237" ) PORT_DIPSETTING( 0xee, "238" ) PORT_DIPSETTING( 0xef, "239" ) PORT_DIPSETTING( 0xeb, "235" ) PORT_DIPSETTING( 0xec, "236" ) PORT_DIPSETTING( 0xed, "237" ) PORT_DIPSETTING( 0xee, "238" ) PORT_DIPSETTING( 0xef, "239" )
PORT_DIPSETTING( 0xf0, "240" ) PORT_DIPSETTING( 0xf1, "241" ) PORT_DIPSETTING( 0xf2, "242" ) PORT_DIPSETTING( 0xf3, "243" ) PORT_DIPSETTING( 0xf4, "244" ) PORT_DIPSETTING( 0xf0, "240" ) PORT_DIPSETTING( 0xf1, "241" ) PORT_DIPSETTING( 0xf2, "242" ) PORT_DIPSETTING( 0xf3, "243" ) PORT_DIPSETTING( 0xf4, "244" )
PORT_DIPSETTING( 0xf5, "245" ) PORT_DIPSETTING( 0xf6, "246" ) PORT_DIPSETTING( 0xf7, "247" ) PORT_DIPSETTING( 0xf8, "248" ) PORT_DIPSETTING( 0xf9, "249" ) PORT_DIPSETTING( 0xf5, "245" ) PORT_DIPSETTING( 0xf6, "246" ) PORT_DIPSETTING( 0xf7, "247" ) PORT_DIPSETTING( 0xf8, "248" ) PORT_DIPSETTING( 0xf9, "249" )
PORT_DIPSETTING( 0xfa, "250" ) PORT_DIPSETTING( 0xfb, "251" ) PORT_DIPSETTING( 0xfc, "252" ) PORT_DIPSETTING( 0xfd, "253" ) PORT_DIPSETTING( 0xfe, "254" ) PORT_DIPSETTING( 0xfa, "250" ) PORT_DIPSETTING( 0xfb, "251" ) PORT_DIPSETTING( 0xfc, "252" ) PORT_DIPSETTING( 0xfd, "253" ) PORT_DIPSETTING( 0xfe, "254" )
PORT_DIPSETTING( 0xff, "255" ) PORT_DIPSETTING( 0xff, "255" )
INPUT_PORTS_END INPUT_PORTS_END
@ -965,7 +965,7 @@ static MACHINE_CONFIG_DERIVED( reutapm, bbcbp )
/* sound hardware */ /* sound hardware */
MCFG_DEVICE_REMOVE("mono") MCFG_DEVICE_REMOVE("mono")
MCFG_DEVICE_REMOVE("sn76489") MCFG_DEVICE_REMOVE("sn76489")
MCFG_DEVICE_REMOVE("vsm") MCFG_DEVICE_REMOVE("vsm")
MCFG_DEVICE_REMOVE("tms5220") MCFG_DEVICE_REMOVE("tms5220")

View File

@ -101,18 +101,18 @@ WRITE8_MEMBER( besta_state::kbd_put )
static ADDRESS_MAP_START(besta_mem, AS_PROGRAM, 32, besta_state) static ADDRESS_MAP_START(besta_mem, AS_PROGRAM, 32, besta_state)
AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("p_ram") // local bus DRAM, 4MB AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("p_ram") // local bus DRAM, 4MB
// AM_RANGE(0x08010000, 0x08011fff) AM_RAM // unknown -- accessed by cp31dssp // AM_RANGE(0x08010000, 0x08011fff) AM_RAM // unknown -- accessed by cp31dssp
// AM_RANGE(0xfca03500, 0xfca0350f) AM_READWRITE8(iscsi_reg_r, iscsi_reg_w, 0xffffffff) // AM_RANGE(0xfca03500, 0xfca0350f) AM_READWRITE8(iscsi_reg_r, iscsi_reg_w, 0xffffffff)
AM_RANGE(0xff000000, 0xff00ffff) AM_ROM AM_REGION("user1", 0) // actual mapping is up to 0xff03ffff AM_RANGE(0xff000000, 0xff00ffff) AM_ROM AM_REGION("user1", 0) // actual mapping is up to 0xff03ffff
AM_RANGE(0xff040000, 0xff07ffff) AM_RAM // onboard SRAM AM_RANGE(0xff040000, 0xff07ffff) AM_RAM // onboard SRAM
// AM_RANGE(0xff800000, 0xff80001f) AM_DEVREADWRITE8("mpcc", mpcc68561_t, reg_r, reg_w, 0xffffffff) // AM_RANGE(0xff800000, 0xff80001f) AM_DEVREADWRITE8("mpcc", mpcc68561_t, reg_r, reg_w, 0xffffffff)
AM_RANGE(0xff800000, 0xff80001f) AM_READWRITE8(mpcc_reg_r, mpcc_reg_w, 0xffffffff) // console AM_RANGE(0xff800000, 0xff80001f) AM_READWRITE8(mpcc_reg_r, mpcc_reg_w, 0xffffffff) // console
AM_RANGE(0xff800200, 0xff800237) AM_DEVREADWRITE8 ("pit2", pit68230_device, read, write, 0xffffffff) AM_RANGE(0xff800200, 0xff800237) AM_DEVREADWRITE8 ("pit2", pit68230_device, read, write, 0xffffffff)
// AM_RANGE(0xff800400, 0xff800xxx) // ??? -- shows up in cp31dssp log // AM_RANGE(0xff800400, 0xff800xxx) // ??? -- shows up in cp31dssp log
// AM_RANGE(0xff800800, 0xff800xxx) // 68153 BIM // AM_RANGE(0xff800800, 0xff800xxx) // 68153 BIM
// AM_RANGE(0xff800a00, 0xff800xxx) // 62421 RTC // AM_RANGE(0xff800a00, 0xff800xxx) // 62421 RTC
AM_RANGE(0xff800c00, 0xff800c37) AM_DEVREADWRITE8 ("pit1", pit68230_device, read, write, 0xffffffff) AM_RANGE(0xff800c00, 0xff800c37) AM_DEVREADWRITE8 ("pit1", pit68230_device, read, write, 0xffffffff)
// AM_RANGE(0xff800e00, 0xff800xxx) // PIT3? // AM_RANGE(0xff800e00, 0xff800xxx) // PIT3?
ADDRESS_MAP_END ADDRESS_MAP_END
/* Input ports */ /* Input ports */
@ -137,9 +137,9 @@ static MACHINE_CONFIG_START( besta, besta_state )
MCFG_CPU_ADD("maincpu", M68030, 2*16670000) MCFG_CPU_ADD("maincpu", M68030, 2*16670000)
MCFG_CPU_PROGRAM_MAP(besta_mem) MCFG_CPU_PROGRAM_MAP(besta_mem)
MCFG_DEVICE_ADD ("pit1", PIT68230, 16670000 / 2) // XXX verify clock MCFG_DEVICE_ADD ("pit1", PIT68230, 16670000 / 2) // XXX verify clock
MCFG_DEVICE_ADD ("pit2", PIT68230, 16670000 / 2) // XXX verify clock MCFG_DEVICE_ADD ("pit2", PIT68230, 16670000 / 2) // XXX verify clock
MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0) MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(besta_state, kbd_put)) MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(besta_state, kbd_put))

View File

@ -32,8 +32,8 @@ public:
static ADDRESS_MAP_START(canons80_map, AS_PROGRAM, 8, canons80_state ) static ADDRESS_MAP_START(canons80_map, AS_PROGRAM, 8, canons80_state )
AM_RANGE(0x0000, 0x7fff) AM_RAM AM_RANGE(0x0000, 0x7fff) AM_RAM
AM_RANGE(0x8000, 0xffff) AM_ROM AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( canons80, canons80_state ) static MACHINE_CONFIG_START( canons80, canons80_state )

View File

@ -202,7 +202,7 @@ static INPUT_PORTS_START( la120 )
PORT_BIT(0x60, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x60, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_START("COL4") PORT_START("COL4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Num -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Num -") PORT_CODE(KEYCODE_MINUS_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Num ,") PORT_CODE(KEYCODE_PLUS_PAD) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Num ,") PORT_CODE(KEYCODE_PLUS_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("' \"") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("' \"") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')

View File

@ -4,7 +4,7 @@
Display Controller), a replacement for KSM (dvk_ksm.c) in later Display Controller), a replacement for KSM (dvk_ksm.c) in later
models of DVK desktops. models of DVK desktops.
MPI (Q-Bus clone) board. Interfaces with MS7004 (DEC LK201 workalike) MPI (Q-Bus clone) board. Interfaces with MS7004 (DEC LK201 workalike)
keyboard, mouse, and monochrome or color CRT. keyboard, mouse, and monochrome or color CRT.
To do: To do:
@ -20,23 +20,23 @@
#include "machine/clock.h" #include "machine/clock.h"
#include "machine/ms7004.h" #include "machine/ms7004.h"
#define KCGD_TOTAL_HORZ 1000 // XXX verify #define KCGD_TOTAL_HORZ 1000 // XXX verify
#define KCGD_DISP_HORZ 800 #define KCGD_DISP_HORZ 800
#define KCGD_HORZ_START 200 // XXX verify #define KCGD_HORZ_START 200 // XXX verify
#define KCGD_TOTAL_VERT 600 // XXX verify #define KCGD_TOTAL_VERT 600 // XXX verify
#define KCGD_DISP_VERT 480 #define KCGD_DISP_VERT 480
#define KCGD_VERT_START 100 // XXX verify #define KCGD_VERT_START 100 // XXX verify
#define KCGD_STATUS_PAGE 0 #define KCGD_STATUS_PAGE 0
#define KCGD_STATUS_INTERLACE 1 #define KCGD_STATUS_INTERLACE 1
#define KCGD_STATUS_TIMER_INT 5 #define KCGD_STATUS_TIMER_INT 5
#define KCGD_STATUS_MODE_INT 6 #define KCGD_STATUS_MODE_INT 6
#define KCGD_STATUS_MODE_LAST 7 #define KCGD_STATUS_MODE_LAST 7
#define KCGD_STATUS_TIMER_VAL 15 #define KCGD_STATUS_TIMER_VAL 15
#define KCGD_PAGE_0 015574 #define KCGD_PAGE_0 015574
#define KCGD_PAGE_1 005574 #define KCGD_PAGE_1 005574
#define VERBOSE_DBG 1 /* general debug messages */ #define VERBOSE_DBG 1 /* general debug messages */
@ -57,7 +57,7 @@ public:
kcgd_state(const machine_config &mconfig, device_type type, const char *tag) : kcgd_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
// m_ms7004(*this, "ms7004"), // m_ms7004(*this, "ms7004"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_screen(*this, "screen") m_screen(*this, "screen")
{ } { }
@ -102,8 +102,8 @@ private:
bitmap_ind16 m_tmpbmp; bitmap_ind16 m_tmpbmp;
struct { struct {
UINT16 status; // 167770 UINT16 status; // 167770
UINT8 control; // 167772 UINT8 control; // 167772
int palette_index, vram_addr; int palette_index, vram_addr;
UINT8 palette[16]; UINT8 palette[16];
} m_video; } m_video;
@ -111,7 +111,7 @@ private:
protected: protected:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
// required_device<ms7004_device> m_ms7004; // required_device<ms7004_device> m_ms7004;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<screen_device> m_screen; required_device<screen_device> m_screen;
}; };
@ -123,10 +123,10 @@ static ADDRESS_MAP_START( kcgd_mem, AS_PROGRAM, 16, kcgd_state )
AM_RANGE (0160000, 0160001) AM_MIRROR(03774) AM_READWRITE(vram_addr_r, vram_addr_w) AM_RANGE (0160000, 0160001) AM_MIRROR(03774) AM_READWRITE(vram_addr_r, vram_addr_w)
AM_RANGE (0160002, 0160003) AM_MIRROR(03774) AM_READWRITE(vram_data_r, vram_data_w) AM_RANGE (0160002, 0160003) AM_MIRROR(03774) AM_READWRITE(vram_data_r, vram_data_w)
AM_RANGE (0167770, 0167771) AM_READWRITE(status_r, status_w) AM_RANGE (0167770, 0167771) AM_READWRITE(status_r, status_w)
AM_RANGE (0167772, 0167773) AM_READWRITE8(palette_index_r, palette_index_w, 0x00ff) // reads always return 0 AM_RANGE (0167772, 0167773) AM_READWRITE8(palette_index_r, palette_index_w, 0x00ff) // reads always return 0
AM_RANGE (0167772, 0167773) AM_READWRITE8(palette_data_r, palette_data_w, 0xff00) AM_RANGE (0167772, 0167773) AM_READWRITE8(palette_data_r, palette_data_w, 0xff00)
// AM_RANGE (0176560, 0176567) AM_RAM // USART2 -- host // AM_RANGE (0176560, 0176567) AM_RAM // USART2 -- host
// AM_RANGE (0177560, 0177567) AM_RAM // USART3 -- keyboard // AM_RANGE (0177560, 0177567) AM_RAM // USART3 -- keyboard
ADDRESS_MAP_END ADDRESS_MAP_END
void kcgd_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) void kcgd_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
@ -134,13 +134,13 @@ void kcgd_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
switch (id) switch (id)
{ {
/* /*
case TIMER_ID_VSYNC_ON: case TIMER_ID_VSYNC_ON:
m_maincpu->set_input_line(INPUT_LINE_EVNT, ASSERT_LINE); m_maincpu->set_input_line(INPUT_LINE_EVNT, ASSERT_LINE);
break; break;
case TIMER_ID_VSYNC_OFF: case TIMER_ID_VSYNC_OFF:
m_maincpu->set_input_line(INPUT_LINE_EVNT, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_EVNT, CLEAR_LINE);
break; break;
*/ */
case TIMER_ID_500HZ: case TIMER_ID_500HZ:
m_video.status ^= (1 << KCGD_STATUS_TIMER_VAL); m_video.status ^= (1 << KCGD_STATUS_TIMER_VAL);
@ -155,7 +155,7 @@ void kcgd_state::machine_reset()
void kcgd_state::video_start() void kcgd_state::video_start()
{ {
// screen_device *screen = machine().device<screen_device>("screen"); // screen_device *screen = machine().device<screen_device>("screen");
// 64 kwords, word size is 17 bits // 64 kwords, word size is 17 bits
m_videoram = auto_alloc_array(machine(), UINT32, 65536); m_videoram = auto_alloc_array(machine(), UINT32, 65536);
@ -163,11 +163,11 @@ void kcgd_state::video_start()
m_tmpclip = rectangle(0, KCGD_DISP_HORZ-1, 0, KCGD_DISP_VERT-1); m_tmpclip = rectangle(0, KCGD_DISP_HORZ-1, 0, KCGD_DISP_VERT-1);
m_tmpbmp.allocate(KCGD_DISP_HORZ, KCGD_DISP_VERT); m_tmpbmp.allocate(KCGD_DISP_HORZ, KCGD_DISP_VERT);
/* /*
m_vsync_on_timer = timer_alloc(TIMER_ID_VSYNC_ON); m_vsync_on_timer = timer_alloc(TIMER_ID_VSYNC_ON);
m_vsync_on_timer->adjust(screen->time_until_pos(0, 0), 0, screen->frame_period()); m_vsync_on_timer->adjust(screen->time_until_pos(0, 0), 0, screen->frame_period());
m_vsync_off_timer = timer_alloc(TIMER_ID_VSYNC_OFF); m_vsync_off_timer = timer_alloc(TIMER_ID_VSYNC_OFF);
m_vsync_off_timer->adjust(screen->time_until_pos(16, 0), 0, screen->frame_period()); m_vsync_off_timer->adjust(screen->time_until_pos(16, 0), 0, screen->frame_period());
*/ */
m_500hz_timer = timer_alloc(TIMER_ID_500HZ); m_500hz_timer = timer_alloc(TIMER_ID_500HZ);
m_500hz_timer->adjust(attotime::from_hz(500), 0, attotime::from_hz(500)); m_500hz_timer->adjust(attotime::from_hz(500), 0, attotime::from_hz(500));
@ -182,8 +182,8 @@ PALETTE_INIT_MEMBER(kcgd_state, kcgd)
} }
/* /*
VRAM is 128K and is word-addressable, so address fits into 16 bits. VRAM is 128K and is word-addressable, so address fits into 16 bits.
Low 32K of VRAM are not used to store pixel data -- XXX. Low 32K of VRAM are not used to store pixel data -- XXX.
*/ */
WRITE16_MEMBER(kcgd_state::vram_addr_w) WRITE16_MEMBER(kcgd_state::vram_addr_w)
{ {
@ -247,7 +247,7 @@ WRITE8_MEMBER(kcgd_state::palette_data_w)
{ {
DBG_LOG(1,"Palette data W", ("data %02XH index %d\n", data, m_video.palette_index)); DBG_LOG(1,"Palette data W", ("data %02XH index %d\n", data, m_video.palette_index));
m_video.palette[m_video.palette_index] = data; m_video.palette[m_video.palette_index] = data;
m_palette->set_pen_color(m_video.palette_index, m_palette->set_pen_color(m_video.palette_index,
85*(data & 3), 85*((data >> 2) & 3), 85*((data >> 4) & 3)); 85*(data & 3), 85*((data >> 2) & 3), 85*((data >> 4) & 3));
} }

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause // license:BSD-3-Clause
// copyright-holders:Joakim Larsson Edstr??m // copyright-holders:Joakim Larsson Edstrom
/*************************************************************************** /***************************************************************************
* *
* Force SYS68K CPU-1/CPU-6 VME SBC drivers, initially based on the 68ksbc.c * Force SYS68K CPU-1/CPU-6 VME SBC drivers, initially based on the 68ksbc.c
@ -125,19 +125,19 @@ class force68k_state : public driver_device
{ {
public: public:
force68k_state(const machine_config &mconfig, device_type type, const char *tag) : force68k_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device (mconfig, type, tag), driver_device (mconfig, type, tag),
m_maincpu (*this, "maincpu"), m_maincpu (*this, "maincpu"),
m_rtc (*this, "rtc"), m_rtc (*this, "rtc"),
m_pit (*this, "pit"), m_pit (*this, "pit"),
m_aciahost (*this, "aciahost"), m_aciahost (*this, "aciahost"),
m_aciaterm (*this, "aciaterm"), m_aciaterm (*this, "aciaterm"),
m_aciaremt (*this, "aciaremt"), m_aciaremt (*this, "aciaremt"),
m_centronics (*this, "centronics") m_centronics (*this, "centronics")
, m_centronics_ack (0) , m_centronics_ack (0)
, m_centronics_busy (0) , m_centronics_busy (0)
, m_centronics_perror (0) , m_centronics_perror (0)
, m_centronics_select (0) , m_centronics_select (0)
,m_cart(*this, "exp_rom1") ,m_cart(*this, "exp_rom1")
{ {
} }
@ -253,8 +253,8 @@ INPUT_PORTS_END
WRITE_LINE_MEMBER (force68k_state::centronics_ack_w) WRITE_LINE_MEMBER (force68k_state::centronics_ack_w)
{ {
// LOG (logerror ("centronics_ack_w(%d) %lld\n", state, m_maincpu->total_cycles ())); // LOG (logerror ("centronics_ack_w(%d) %lld\n", state, m_maincpu->total_cycles ()));
m_centronics_ack = state; m_centronics_ack = state;
m_pit->h1_set (state); m_pit->h1_set (state);
} }
/* Centronics BUSY handler /* Centronics BUSY handler
@ -262,7 +262,7 @@ WRITE_LINE_MEMBER (force68k_state::centronics_ack_w)
*/ */
WRITE_LINE_MEMBER (force68k_state::centronics_busy_w){ WRITE_LINE_MEMBER (force68k_state::centronics_busy_w){
// LOG (logerror ("centronics_busy_w(%d) %lld\n", state, m_maincpu->total_cycles ())); // LOG (logerror ("centronics_busy_w(%d) %lld\n", state, m_maincpu->total_cycles ()));
m_centronics_busy = state; m_centronics_busy = state;
} }
/* Centronics PERROR handler /* Centronics PERROR handler
@ -270,7 +270,7 @@ WRITE_LINE_MEMBER (force68k_state::centronics_busy_w){
*/ */
WRITE_LINE_MEMBER (force68k_state::centronics_perror_w){ WRITE_LINE_MEMBER (force68k_state::centronics_perror_w){
// LOG (logerror ("centronics_perror_w(%d) %lld\n", state, m_maincpu->total_cycles ())); // LOG (logerror ("centronics_perror_w(%d) %lld\n", state, m_maincpu->total_cycles ()));
m_centronics_perror = state; m_centronics_perror = state;
} }
/* Centronics SELECT handler /* Centronics SELECT handler
@ -278,44 +278,44 @@ WRITE_LINE_MEMBER (force68k_state::centronics_perror_w){
*/ */
WRITE_LINE_MEMBER (force68k_state::centronics_select_w){ WRITE_LINE_MEMBER (force68k_state::centronics_select_w){
// LOG (logerror ("centronics_select_w(%d) %lld\n", state, m_maincpu->total_cycles ())); // LOG (logerror ("centronics_select_w(%d) %lld\n", state, m_maincpu->total_cycles ()));
m_centronics_select = state; m_centronics_select = state;
m_pit->portb_setbit (0, state); m_pit->portb_setbit (0, state);
} }
/* Start it up */ /* Start it up */
void force68k_state::machine_start () void force68k_state::machine_start ()
{ {
LOG (logerror ("machine_start\n")); LOG (logerror ("machine_start\n"));
save_item (NAME (m_centronics_busy)); save_item (NAME (m_centronics_busy));
save_item (NAME (m_centronics_ack)); save_item (NAME (m_centronics_ack));
save_item (NAME (m_centronics_select)); save_item (NAME (m_centronics_select));
save_item (NAME (m_centronics_perror)); save_item (NAME (m_centronics_perror));
/* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */ /* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */
m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x080000); m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x080000);
/* Map user ROM/RAM socket(s) */ /* Map user ROM/RAM socket(s) */
if (m_cart->exists()) if (m_cart->exists())
{ {
m_usrrom = (UINT16*)m_cart->get_rom_base(); m_usrrom = (UINT16*)m_cart->get_rom_base();
#if 0 // This should be the correct way but produces odd and even bytes swapped #if 0 // This should be the correct way but produces odd and even bytes swapped
m_maincpu->space(AS_PROGRAM).install_read_handler(0xa0000, 0xbffff, read16_delegate(FUNC(generic_slot_device::read16_rom), (generic_slot_device*)m_cart)); m_maincpu->space(AS_PROGRAM).install_read_handler(0xa0000, 0xbffff, read16_delegate(FUNC(generic_slot_device::read16_rom), (generic_slot_device*)m_cart));
#else // So we installs a custom very ineffecient handler for now until we understand hwp to solve the problem better #else // So we installs a custom very ineffecient handler for now until we understand hwp to solve the problem better
m_maincpu->space(AS_PROGRAM).install_read_handler(0xa0000, 0xbffff, read16_delegate(FUNC(force68k_state::read16_rom), this)); m_maincpu->space(AS_PROGRAM).install_read_handler(0xa0000, 0xbffff, read16_delegate(FUNC(force68k_state::read16_rom), this));
#endif #endif
} }
} }
/* A very ineffecient User cart emulation of two 8 bit sockets (odd and even) */ /* A very ineffecient User cart emulation of two 8 bit sockets (odd and even) */
READ16_MEMBER (force68k_state::read16_rom){ READ16_MEMBER (force68k_state::read16_rom){
offset = offset % m_cart->common_get_size("rom"); // Don't read outside buffer... offset = offset % m_cart->common_get_size("rom"); // Don't read outside buffer...
return ((m_usrrom [offset] << 8) & 0xff00) | ((m_usrrom [offset] >> 8) & 0x00ff); return ((m_usrrom [offset] << 8) & 0xff00) | ((m_usrrom [offset] >> 8) & 0x00ff);
} }
/* Boot vector handler, the PCB hardwires the first 8 bytes from 0x80000 to 0x0 */ /* Boot vector handler, the PCB hardwires the first 8 bytes from 0x80000 to 0x0 */
READ16_MEMBER (force68k_state::bootvect_r){ READ16_MEMBER (force68k_state::bootvect_r){
return m_sysrom [offset]; return m_sysrom [offset];
} }
/* 10. The VMEbus (text from board documentation) /* 10. The VMEbus (text from board documentation)
@ -326,7 +326,7 @@ READ16_MEMBER (force68k_state::bootvect_r){
* systems. In addition to the bus arbiter, a separate slave bus * systems. In addition to the bus arbiter, a separate slave bus
* arbitration allows selection of the arbitration level (0-3). * arbitration allows selection of the arbitration level (0-3).
* *
* The address modifier range .,Short 110 Access« can be selected * The address modifier range .,Short 110 Access can be selected
* via a jumper for variable system generation. The 7 interrupt * via a jumper for variable system generation. The 7 interrupt
* request levels of the VMEbus are fully supported from the * request levels of the VMEbus are fully supported from the
* SYS68K1CPU-1 B/D. For multi-processing, each IRQ signal can be * SYS68K1CPU-1 B/D. For multi-processing, each IRQ signal can be
@ -338,44 +338,44 @@ READ16_MEMBER (force68k_state::bootvect_r){
/* Dummy VME access methods until the VME bus device is ready for use */ /* Dummy VME access methods until the VME bus device is ready for use */
READ16_MEMBER (force68k_state::vme_a24_r){ READ16_MEMBER (force68k_state::vme_a24_r){
LOG (logerror ("vme_a24_r\n")); LOG (logerror ("vme_a24_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (force68k_state::vme_a24_w){ WRITE16_MEMBER (force68k_state::vme_a24_w){
LOG (logerror ("vme_a24_w\n")); LOG (logerror ("vme_a24_w\n"));
} }
READ16_MEMBER (force68k_state::vme_a16_r){ READ16_MEMBER (force68k_state::vme_a16_r){
LOG (logerror ("vme_16_r\n")); LOG (logerror ("vme_16_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (force68k_state::vme_a16_w){ WRITE16_MEMBER (force68k_state::vme_a16_w){
LOG (logerror ("vme_a16_w\n")); LOG (logerror ("vme_a16_w\n"));
} }
/* /*
* Serial port clock sources can all be driven by different outputs of the 14411 * Serial port clock sources can all be driven by different outputs of the 14411
*/ */
WRITE_LINE_MEMBER (force68k_state::write_aciahost_clock){ WRITE_LINE_MEMBER (force68k_state::write_aciahost_clock){
m_aciahost->write_txc (state); m_aciahost->write_txc (state);
m_aciahost->write_rxc (state); m_aciahost->write_rxc (state);
} }
WRITE_LINE_MEMBER (force68k_state::write_aciaterm_clock){ WRITE_LINE_MEMBER (force68k_state::write_aciaterm_clock){
m_aciaterm->write_txc (state); m_aciaterm->write_txc (state);
m_aciaterm->write_rxc (state); m_aciaterm->write_rxc (state);
} }
WRITE_LINE_MEMBER (force68k_state::write_aciaremt_clock){ WRITE_LINE_MEMBER (force68k_state::write_aciaremt_clock){
m_aciaremt->write_txc (state); m_aciaremt->write_txc (state);
m_aciaremt->write_rxc (state); m_aciaremt->write_rxc (state);
} }
/* /*
* 4. The USER Area (Text from the board manual) * 4. The USER Area (Text from the board manual)
The USER area contains two 28 pin sockets with JEDEC compatible pin out. The USER area contains two 28 pin sockets with JEDEC compatible pin out.
To allow the usage of static RAM's, the access to the USER area is byte To allow the usage of static RAM's, the access to the USER area is byte
oriented. Table 3. lists the usable device types. oriented. Table 3. lists the usable device types.
@ -388,14 +388,14 @@ WRITE_LINE_MEMBER (force68k_state::write_aciaremt_clock){
32Kx16 64 Kbyte 27256 32Kx16 64 Kbyte 27256
-------------------------- --------------------------
*/ */
// Implementation of static 2 x 64K EPROM in sockets J10/J11 as 16 bit wide cartridge for easier // Implementation of static 2 x 64K EPROM in sockets J10/J11 as 16 bit wide cartridge for easier
// software handling. TODO: make configurable according to table above. // software handling. TODO: make configurable according to table above.
static MACHINE_CONFIG_FRAGMENT( fccpu1_eprom_sockets ) static MACHINE_CONFIG_FRAGMENT( fccpu1_eprom_sockets )
MCFG_GENERIC_CARTSLOT_ADD("exp_rom1", generic_plain_slot, "fccpu1_cart") MCFG_GENERIC_CARTSLOT_ADD("exp_rom1", generic_plain_slot, "fccpu1_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom") MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_GENERIC_WIDTH(GENERIC_ROM16_WIDTH) MCFG_GENERIC_WIDTH(GENERIC_ROM16_WIDTH)
MCFG_GENERIC_ENDIAN(ENDIANNESS_BIG) MCFG_GENERIC_ENDIAN(ENDIANNESS_BIG)
MCFG_GENERIC_LOAD(force68k_state, exp1_load) MCFG_GENERIC_LOAD(force68k_state, exp1_load)
// MCFG_SOFTWARE_LIST_ADD("cart_list", "fccpu1_cart") // MCFG_SOFTWARE_LIST_ADD("cart_list", "fccpu1_cart")
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -404,19 +404,19 @@ MACHINE_CONFIG_END
****************************/ ****************************/
int force68k_state::force68k_load_cart(device_image_interface &image, generic_slot_device *slot) int force68k_state::force68k_load_cart(device_image_interface &image, generic_slot_device *slot)
{ {
UINT32 size = slot->common_get_size("rom"); UINT32 size = slot->common_get_size("rom");
if (size > 0x20000) // Max 128Kb if (size > 0x20000) // Max 128Kb
{ {
LOG( printf("Cartridge size exceeding max size (128Kb): %d\n", size) ); LOG( printf("Cartridge size exceeding max size (128Kb): %d\n", size) );
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Cartridge size exceeding max size (128Kb)"); image.seterror(IMAGE_ERROR_UNSPECIFIED, "Cartridge size exceeding max size (128Kb)");
return IMAGE_INIT_FAIL; return IMAGE_INIT_FAIL;
} }
slot->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_BIG); slot->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_BIG);
slot->common_load_rom(slot->get_rom_base(), size, "rom"); slot->common_load_rom(slot->get_rom_base(), size, "rom");
return IMAGE_INIT_PASS; return IMAGE_INIT_PASS;
} }
/* /*
@ -427,7 +427,7 @@ static MACHINE_CONFIG_START (fccpu1, force68k_state)
MCFG_CPU_ADD ("maincpu", M68000, XTAL_16MHz / 2) MCFG_CPU_ADD ("maincpu", M68000, XTAL_16MHz / 2)
MCFG_CPU_PROGRAM_MAP (force68k_mem) MCFG_CPU_PROGRAM_MAP (force68k_mem)
/* P3/Host Port config /* P3/Host Port config
* LO command causes ROM monitor to expect S-records on HOST port by default * LO command causes ROM monitor to expect S-records on HOST port by default
* Implementation through nullmodem currently does not support handshakes so * Implementation through nullmodem currently does not support handshakes so
* the ROM momitor is over-run while checking for checksums etc if used with * the ROM momitor is over-run while checking for checksums etc if used with
@ -535,7 +535,7 @@ ROM_LOAD16_BYTE ("fccpu1V1.0L.j9.bin", 0x080000, 0x2000, CRC (035315fb) SHA1 (90
* DC <expression> <CR> Data Conversion * DC <expression> <CR> Data Conversion
* DF <CR> Display Formatted registers * DF <CR> Display Formatted registers
* DU [n] <address1> <address2>[<string>] <CR> Dump memory to object file * DU [n] <address1> <address2>[<string>] <CR> Dump memory to object file
* GO or G [<address] <CR> Execute program. * GO or G [<address] <CR> Execute program.
* GD [<address] <CR> Go Direct * GD [<address] <CR> Go Direct
* GT <address> <CR> Exec prog: temporary breakpoint * GT <address> <CR> Exec prog: temporary breakpoint
* HE<CR> Help; display monitor commands * HE<CR> Help; display monitor commands

View File

@ -8,18 +8,18 @@
* *
* I baught this board from http://www.retrotechnology.com without documentation. * I baught this board from http://www.retrotechnology.com without documentation.
* It has a Motorola 68010 CPU @ 10MHz and two 2764 EPROMS with HBUG firmware * It has a Motorola 68010 CPU @ 10MHz and two 2764 EPROMS with HBUG firmware
* The board is very populated and suitable to run a real server OS supported by * The board is very populated and suitable to run a real server OS supported by
* FPU,MMU and DMA controller chips. The firmware supports SCSI, Centronics/FPI * FPU,MMU and DMA controller chips. The firmware supports SCSI, Centronics/FPI
* and a serial port. I have not found so much on the FPI interface yet and it is * and a serial port. I have not found so much on the FPI interface yet and it is
* possibly Heurikon specific. There is also a Heurikon Multibus board called * possibly Heurikon specific. There is also a Heurikon Multibus board called
* HK68/M10 for which I might add support from specs, however would need a ROM * HK68/M10 for which I might add support from specs, however would need a ROM
* to verify. * to verify.
* *
* || * ||
* || || * || ||
* ||||--|| * ||||--||
* ||||--|| * ||||--||
* || ||____________________________________________________________ ___ * || ||____________________________________________________________ ___
* || | | | 12 PALs 68/V-... | | | | | |_| | * || | | | 12 PALs 68/V-... | | | | | |_| |
* || | | 2 x | |74 |74 |74 |74 | | | | * || | | 2 x | |74 |74 |74 |74 | | | |
* || | | 74273 | VS4-01 VM4-00 | 244 573 645 645 | | | * || | | 74273 | VS4-01 VM4-00 | 244 573 645 645 | | |
@ -37,14 +37,14 @@
* || |paral| | FPU || | | | | | | | * || |paral| | FPU || | | | | | | |
* || |Z8536| |_________||_________________|_ _| | | |_| | * || |Z8536| |_________||_________________|_ _| | | |_| |
* ||| | | | | | | ------------ |___| * ||| | | | | | | ------------ |___|
* /==||| | | | | | | | 3 PALs | | * /==||| | | | | | | | 3 PALs | |
* FSM || | | | MC68010 | MC68451 | MC68450 | | MP1-00 | | * FSM || | | | MC68010 | MC68451 | MC68450 | | MP1-00 | |
* 1234 || | | | CPU | MMU | DMA | | MX2-00 | | * 1234 || | | | CPU | MMU | DMA | | MX2-00 | |
* LEDs || |-----| |_________|__________|_________|__| MX1-01 |---| * LEDs || |-----| |_________|__________|_________|__| MX1-01 |---|
* || | | ____ ____ ---| |__________|74 | * || | | ____ ____ ---| |__________|74 |
* \==||| | | | | | | |74| 4 x | 3 PALs |145| * \==||| | | | | | | |74| 4 x | 3 PALs |145|
* ||| |SCC | | | | | |804 74245 | CS3-00 |___| * ||| |SCC | | | | | |804 74245 | CS3-00 |___|
* FPI || |seria| |U12 | |U23 | | | | CS2-00 | | * FPI || |seria| |U12 | |U23 | | | | CS2-00 | |
* paralell |Z8530A |HBUG| |HBUG| | | | CS1-00 | |___ * paralell |Z8530A |HBUG| |HBUG| | | | CS1-00 | |___
* port || | | | | | | ---_---------------|__________| _| | * port || | | | | | | ---_---------------|__________| _| |
* || | | | | | | |MTTLDL|MDLDM| 2 x |___________ | | | * || | | | | | | |MTTLDL|MDLDM| 2 x |___________ | | |
@ -64,15 +64,15 @@
* || | each || RFS-01 |590|257 | | | | * || | each || RFS-01 |590|257 | | | |
* ||| | || RCT-01 | | | | |_| | * ||| | || RCT-01 | | | | |_| |
* /==||| +--------+|__________________________|___|__|__________| |___| * /==||| +--------+|__________________________|___|__|__________| |___|
* || ||------------------------------------------------------------+-+ * || ||------------------------------------------------------------+-+
* ||||--|| * ||||--||
* ||||--|| * ||||--||
* || * ||
* *
* History of Heurikon * History of Heurikon
*--------------------- *---------------------
* The company was founded 1972 as cellar company. Heurikon was aquired * The company was founded 1972 as cellar company. Heurikon was aquired
* 1989 by Computer Products, 1990 by Artesyn and finally in 2005 by Emerson * 1989 by Computer Products, 1990 by Artesyn and finally in 2005 by Emerson
* Electric who consilidated it fully by 2009 and closed the office. * Electric who consilidated it fully by 2009 and closed the office.
* *
* Misc links about Heurikon and this board: * Misc links about Heurikon and this board:
@ -116,13 +116,13 @@
* (open) * (open)
* 0x*00000 (maxmeml) * 0x*00000 (maxmeml)
* RAM (bus) (optional) * RAM (bus) (optional)
* 0x200000 (top of 2 meg RAM) * 0x200000 (top of 2 meg RAM)
* RAM (bus) (optional) * RAM (bus) (optional)
* 0x100000 (top of 1 meg RAM) * 0x100000 (top of 1 meg RAM)
* User RAM * User RAM
* 0x001000 UNIX Kernel * 0x001000 UNIX Kernel
* Exception Vectors * Exception Vectors
* 0x000000 (bottom of memory) * 0x000000 (bottom of memory)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* *
* Interrupt sources M10/V10 * Interrupt sources M10/V10
@ -130,8 +130,8 @@
* Description Device Lvl IRQ VME board * Description Device Lvl IRQ VME board
* /Board Vector Address * /Board Vector Address
* ---------------------------------------------------------- * ----------------------------------------------------------
* On board Sources M10/V10 * On board Sources M10/V10
* *
* Off board Sources (other VME boards) * Off board Sources (other VME boards)
* EXOS Ethernet 5 4 * EXOS Ethernet 5 4
* TapeMaster Reel-to-Reel Tape 3 * TapeMaster Reel-to-Reel Tape 3
@ -198,9 +198,9 @@ class hk68v10_state : public driver_device
{ {
public: public:
hk68v10_state(const machine_config &mconfig, device_type type, const char *tag) : hk68v10_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device (mconfig, type, tag), driver_device (mconfig, type, tag),
m_maincpu (*this, "maincpu") m_maincpu (*this, "maincpu")
,m_sccterm(*this, "scc") ,m_sccterm(*this, "scc")
// ,m_cart(*this, "exp_rom1") // ,m_cart(*this, "exp_rom1")
{ {
} }
@ -222,8 +222,8 @@ required_device<cpu_device> m_maincpu;
required_device<scc8530_device> m_sccterm; required_device<scc8530_device> m_sccterm;
// Pointer to System ROMs needed by bootvect_r and masking RAM buffer for post reset accesses // Pointer to System ROMs needed by bootvect_r and masking RAM buffer for post reset accesses
UINT16 *m_sysrom; UINT16 *m_sysrom;
UINT16 m_sysram[4]; UINT16 m_sysram[4];
}; };
static ADDRESS_MAP_START (hk68v10_mem, AS_PROGRAM, 16, hk68v10_state) static ADDRESS_MAP_START (hk68v10_mem, AS_PROGRAM, 16, hk68v10_state)
@ -233,7 +233,7 @@ AM_RANGE (0x000000, 0x000007) AM_RAM AM_WRITE (bootvect_w) /* After first
AM_RANGE (0x000008, 0x1fffff) AM_RAM /* 2 Mb RAM */ AM_RANGE (0x000008, 0x1fffff) AM_RAM /* 2 Mb RAM */
AM_RANGE (0xFC0000, 0xFC3fff) AM_ROM /* System EPROM Area 16Kb HBUG */ AM_RANGE (0xFC0000, 0xFC3fff) AM_ROM /* System EPROM Area 16Kb HBUG */
AM_RANGE (0xFC4000, 0xFDffff) AM_ROM /* System EPROM Area an additional 112Kb for System ROM */ AM_RANGE (0xFC4000, 0xFDffff) AM_ROM /* System EPROM Area an additional 112Kb for System ROM */
AM_RANGE (0xFE9000, 0xFE9009) AM_RAM //AM_DEVREADWRITE8("scc", scc8530_device, ba_cd_r, ba_cd_w, 0xffff) /* Z80-PIO? */ AM_RANGE (0xFE9000, 0xFE9009) AM_RAM //AM_DEVREADWRITE8("scc", scc8530_device, ba_cd_r, ba_cd_w, 0xffff) /* Z80-PIO? */
AM_RANGE (0xFEA000, 0xFEA001) AM_DEVREADWRITE8("scc", scc8530_device, ca_r, ca_w, 0xff00) /* Dual serial port Z80-SCC */ AM_RANGE (0xFEA000, 0xFEA001) AM_DEVREADWRITE8("scc", scc8530_device, ca_r, ca_w, 0xff00) /* Dual serial port Z80-SCC */
AM_RANGE (0xFEA002, 0xFEA003) AM_DEVREADWRITE8("scc", scc8530_device, cb_r, cb_w, 0xff00) /* Dual serial port Z80-SCC */ AM_RANGE (0xFEA002, 0xFEA003) AM_DEVREADWRITE8("scc", scc8530_device, cb_r, cb_w, 0xff00) /* Dual serial port Z80-SCC */
AM_RANGE (0xFEA004, 0xFEA005) AM_DEVREADWRITE8("scc", scc8530_device, da_r, da_w, 0xff00) /* Dual serial port Z80-SCC */ AM_RANGE (0xFEA004, 0xFEA005) AM_DEVREADWRITE8("scc", scc8530_device, da_r, da_w, 0xff00) /* Dual serial port Z80-SCC */
@ -249,13 +249,13 @@ INPUT_PORTS_END
/* Start it up */ /* Start it up */
void hk68v10_state::machine_start () void hk68v10_state::machine_start ()
{ {
LOG (("%" I64FMT "d %s\n", m_maincpu->total_cycles(), FUNCNAME)); LOG (("%" I64FMT "d %s\n", m_maincpu->total_cycles(), FUNCNAME));
/* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */ /* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */
m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x0fc0000); m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x0fc0000);
} }
/* Support CPU resets /* Support CPU resets
TODO: Investigate why the user need two 'softreset' commands for the below to work. Eg F3 + F11 + F3 + F11 TODO: Investigate why the user need two 'softreset' commands for the below to work. Eg F3 + F11 + F3 + F11
If only one 'softreset' is given the reset PC gets the RAM content, not the intended ROM vector. If only one 'softreset' is given the reset PC gets the RAM content, not the intended ROM vector.
@ -263,50 +263,50 @@ void hk68v10_state::machine_start ()
*/ */
void hk68v10_state::machine_reset () void hk68v10_state::machine_reset ()
{ {
LOG (("%" I64FMT "d %s\n", m_maincpu->total_cycles(), FUNCNAME)); LOG (("%" I64FMT "d %s\n", m_maincpu->total_cycles(), FUNCNAME));
/* Reset pointer to bootvector in ROM for bootvector handler bootvect_r */ /* Reset pointer to bootvector in ROM for bootvector handler bootvect_r */
if (m_sysrom == &m_sysram[0]) /* Condition needed because memory map is not setup first time */ if (m_sysrom == &m_sysram[0]) /* Condition needed because memory map is not setup first time */
m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x0fc0000); m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x0fc0000);
} }
/* Boot vector handler, the PCB hardwires the first 8 bytes from 0xfc0000 to 0x0 at reset*/ /* Boot vector handler, the PCB hardwires the first 8 bytes from 0xfc0000 to 0x0 at reset*/
/* /*
Right after HBUG reset the bootvector is masked by RAM: Right after HBUG reset the bootvector is masked by RAM:
FC001C: move.w #$700, $fe4000.l FC001C: move.w #$700, $fe4000.l
FC0024: move.l #$0, $0.l # <- zeroing the reset vector FC0024: move.l #$0, $0.l # <- zeroing the reset vector
FC002E: move.l #$0, $4.l # There is for sure some hardware mapping going in here FC002E: move.l #$0, $4.l # There is for sure some hardware mapping going in here
*/ */
READ16_MEMBER (hk68v10_state::bootvect_r){ READ16_MEMBER (hk68v10_state::bootvect_r){
//LOG (("bootvect_r %s\n", m_sysrom != &m_sysram[0] ? "as reset" : "as swapped")); //LOG (("bootvect_r %s\n", m_sysrom != &m_sysram[0] ? "as reset" : "as swapped"));
return m_sysrom[offset]; return m_sysrom[offset];
} }
WRITE16_MEMBER (hk68v10_state::bootvect_w){ WRITE16_MEMBER (hk68v10_state::bootvect_w){
LOG (("bootvect_w offset %08x, mask %08x, data %04x\n", offset, mem_mask, data)); LOG (("bootvect_w offset %08x, mask %08x, data %04x\n", offset, mem_mask, data));
m_sysram[offset % sizeof(m_sysram)] &= ~mem_mask; m_sysram[offset % sizeof(m_sysram)] &= ~mem_mask;
m_sysram[offset % sizeof(m_sysram)] |= (data & mem_mask); m_sysram[offset % sizeof(m_sysram)] |= (data & mem_mask);
m_sysrom = &m_sysram[0]; // redirect all upcomming accesses to masking RAM until reset. m_sysrom = &m_sysram[0]; // redirect all upcomming accesses to masking RAM until reset.
} }
#if 0 #if 0
/* Dummy VME access methods until the VME bus device is ready for use */ /* Dummy VME access methods until the VME bus device is ready for use */
READ16_MEMBER (hk68v10_state::vme_a24_r){ READ16_MEMBER (hk68v10_state::vme_a24_r){
LOG (("vme_a24_r\n")); LOG (("vme_a24_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (hk68v10_state::vme_a24_w){ WRITE16_MEMBER (hk68v10_state::vme_a24_w){
LOG (("vme_a24_w\n")); LOG (("vme_a24_w\n"));
} }
READ16_MEMBER (hk68v10_state::vme_a16_r){ READ16_MEMBER (hk68v10_state::vme_a16_r){
LOG (("vme_16_r\n")); LOG (("vme_16_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (hk68v10_state::vme_a16_w){ WRITE16_MEMBER (hk68v10_state::vme_a16_w){
LOG (("vme_a16_w\n")); LOG (("vme_a16_w\n"));
} }
#endif #endif
@ -334,8 +334,8 @@ WRITE16_MEMBER (hk68v10_state::vme_a16_w){
* *
*/ */
WRITE_LINE_MEMBER (hk68v10_state::write_sccterm_clock){ WRITE_LINE_MEMBER (hk68v10_state::write_sccterm_clock){
m_sccterm->txca_w (state); m_sccterm->txca_w (state);
m_sccterm->rxca_w (state); m_sccterm->rxca_w (state);
} }
/* /*

View File

@ -406,7 +406,7 @@ void hp64k_state::machine_reset()
m_floppy0_wpt = false; m_floppy0_wpt = false;
m_floppy1_wpt = false; m_floppy1_wpt = false;
m_beeper->set_state(0); m_beeper->set_state(0);
m_baud_rate->str_w((m_s5_sw->read() >> 1) & 0xf); m_baud_rate->str_w((m_s5_sw->read() >> 1) & 0xf);
m_16x_clk = (m_rs232_sw->read() & 0x02) != 0; m_16x_clk = (m_rs232_sw->read() & 0x02) != 0;
m_loopback = false; m_loopback = false;
m_txd_state = true; m_txd_state = true;
@ -1389,7 +1389,7 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state)
MCFG_TIMER_DRIVER_ADD("beep_timer" , hp64k_state , hp64k_beeper_off); MCFG_TIMER_DRIVER_ADD("beep_timer" , hp64k_state , hp64k_beeper_off);
MCFG_DEVICE_ADD("baud_rate" , COM8116 , XTAL_5_0688MHz) MCFG_DEVICE_ADD("baud_rate" , COM8116 , XTAL_5_0688MHz)
MCFG_COM8116_FR_HANDLER(WRITELINE(hp64k_state , hp64k_baud_clk_w)); MCFG_COM8116_FR_HANDLER(WRITELINE(hp64k_state , hp64k_baud_clk_w));
MCFG_DEVICE_ADD("uart" , I8251 , 0) MCFG_DEVICE_ADD("uart" , I8251 , 0)
MCFG_I8251_RXRDY_HANDLER(WRITELINE(hp64k_state , hp64k_rxrdy_w)); MCFG_I8251_RXRDY_HANDLER(WRITELINE(hp64k_state , hp64k_rxrdy_w));

View File

@ -12,7 +12,7 @@ class lg_dvd_state : public driver_device {
public: public:
lg_dvd_state(const machine_config &mconfig, device_type type, const char *tag) lg_dvd_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
maincpu(*this, "maincpu") maincpu(*this, "maincpu")
{ } { }
required_device<i80c52_device> maincpu; required_device<i80c52_device> maincpu;

View File

@ -5,9 +5,9 @@
mps1230.c - Commodore MPS-1230 dot-matrix printer mps1230.c - Commodore MPS-1230 dot-matrix printer
Skeleton made September, 2015 by R. Belmont Skeleton made September, 2015 by R. Belmont
------------------------------------- -------------------------------------
Commodore MPS-1230 Dot Matrix Printer Commodore MPS-1230 Dot Matrix Printer
Commodore 1988/89 Commodore 1988/89
@ -74,7 +74,7 @@ Notes: (all IC's shown)
J899 - 15-pin connector for ribbon cable for console buttons and leds (feed, online etc) J899 - 15-pin connector for ribbon cable for console buttons and leds (feed, online etc)
J369 - 36-pin centronics parallel connector J369 - 36-pin centronics parallel connector
J02G - 6-pin Commodore serial bus connector J02G - 6-pin Commodore serial bus connector
************************************************************************/ ************************************************************************/
#include "emu.h" #include "emu.h"
@ -121,7 +121,7 @@ void mps1230_state::machine_reset()
static ADDRESS_MAP_START( mps1230_map, AS_PROGRAM, 8, mps1230_state ) static ADDRESS_MAP_START( mps1230_map, AS_PROGRAM, 8, mps1230_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("mps1230", 0) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("mps1230", 0)
AM_RANGE(0xc000, 0xdfff) AM_RAM // as per the service manual AM_RANGE(0xc000, 0xdfff) AM_RAM // as per the service manual
AM_RANGE(0xff00, 0xffff) AM_RAM // tested at PC=77, then used for the 7810's stack AM_RANGE(0xff00, 0xffff) AM_RAM // tested at PC=77, then used for the 7810's stack
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -2,22 +2,22 @@
// copyright-holders:Joakim Larsson Edstrom // copyright-holders:Joakim Larsson Edstrom
/*************************************************************************** /***************************************************************************
* *
* Motorola MVME-350 6U Intelligent Tape Controller driver, initially derived * Motorola MVME-350 6U Intelligent Tape Controller driver, initially derived
* from hk68v10.c * from hk68v10.c
* *
* 31/08/2015 * 31/08/2015
* *
* I baught this board from http://www.retrotechnology.com without documentation. * I baught this board from http://www.retrotechnology.com without documentation.
* It has a Motorola 68010 CPU @ 10MHz, 128 Mb RAM and two 2764 EPROMS with * It has a Motorola 68010 CPU @ 10MHz, 128 Mb RAM and two 2764 EPROMS with
* QIC-02 tape controller firmware. The board also populates a 68230 PIT and loads * QIC-02 tape controller firmware. The board also populates a 68230 PIT and loads
* of descrete TTL components. * of descrete TTL components.
* *
* *
* || * ||
* || || * || ||
* ||||--|| * ||||--||
* ||||--|| * ||||--||
* || ||__________________________________________________________ ___ * || ||__________________________________________________________ ___
* ||_______________________________________________________ |_| | * ||_______________________________________________________ |_| |
* || |74F74 | xxxxx | xxxxx | 74LS245 | 74ALS645| | | | * || |74F74 | xxxxx | xxxxx | 74LS245 | 74ALS645| | | |
* || |______|________|_________|___________| ________| | | | * || |______|________|_________|___________| ________| | | |
@ -35,14 +35,14 @@
* ||| | |______| __|_______________________|---------| | | | * ||| | |______| __|_______________________|---------| | | |
* ||| | |74LS74| |25LS251 | | RAM |74S244 | |_| | * ||| | |74LS74| |25LS251 | | RAM |74S244 | |_| |
* ||+---+ ---------- |---------- | HM6264P-12 |---------| |___| * ||+---+ ---------- |---------- | HM6264P-12 |---------| |___|
* || | PAL | | 74245 | |______________|74S244 | | * || | PAL | | 74245 | |______________|74S244 | |
* || +--------- |_________| | U40 27128 |---------| | * || +--------- |_________| | U40 27128 |---------| |
* || | 74F32 | | || System ROM |74LS682 | | * || | 74F32 | | || System ROM |74LS682 | |
* Red || +-------- | CPU || |-+-------| | * Red || +-------- | CPU || |-+-------| |
* FAIL ||LED | 74F138| | MC68010 |+--------------+ |DIPSW__| | * FAIL ||LED | 74F138| | MC68010 |+--------------+ |DIPSW__| |
* Red || +-------- | || RAM | |74S38 | | * Red || +-------- | || RAM | |74S38 | |
* HALT ||LED | 74F32 | |__________|| HM6264P-12 | |______ | | * HALT ||LED | 74F32 | |__________|| HM6264P-12 | |______ | |
* Green || +-------+ |74245 |+--------------+ |74F08 | | * Green || +-------+ |74245 |+--------------+ |74F08 | |
* RUN ||LED |XTAL | |__________|| U47 27128 | |______ | |___ * RUN ||LED |XTAL | |__________|| U47 27128 | |______ | |___
* ||+---+|20MHz | |74244 || System ROM | |74F00 | _| | * ||+---+|20MHz | |74244 || System ROM | |74F00 | _| |
* |||CON|--------+___|__________|+--------------+_|_______| | | | * |||CON|--------+___|__________|+--------------+_|_______| | | |
@ -62,24 +62,24 @@
* || +------------------------------------------+------| | | | * || +------------------------------------------+------| | | |
* || |DM2353 |74F10 |74F32 | 74LS32| 74F08 |DM2353| |_| | * || |DM2353 |74F10 |74F32 | 74LS32| 74F08 |DM2353| |_| |
* || +------------------------------------------+------+-+ |___| * || +------------------------------------------+------+-+ |___|
* || ||------------------------------------------------------------+-+ * || ||------------------------------------------------------------+-+
* ||||--|| * ||||--||
* ||||--|| * ||||--||
* || * ||
* *
* History of Motorola VME division (https://en.wikipedia.org/wiki/VMEbus) * History of Motorola VME division (https://en.wikipedia.org/wiki/VMEbus)
*--------------------------------- *---------------------------------
* When Motorola released the 68000 processor 1979 the ambition of the deisgners * When Motorola released the 68000 processor 1979 the ambition of the deisgners
* was also to standardize a versatile CPU bus to be able to build computer * was also to standardize a versatile CPU bus to be able to build computer
* systems without constructing PCB:s from scratch. This become VersaBus but the * systems without constructing PCB:s from scratch. This become VersaBus but the
* boards was really too big and the computer world already saw the systems shrink * boards was really too big and the computer world already saw the systems shrink
* in size. Motorola's design center in Munich proposed to use the smaller and * in size. Motorola's design center in Munich proposed to use the smaller and
* already used Euroboard form factor and call it Versabus-E. This later became * already used Euroboard form factor and call it Versabus-E. This later became
* VME which was standardized in the VITA organization 1981 * VME which was standardized in the VITA organization 1981
* *
* Misc links about Motorola VME division and this board: * Misc links about Motorola VME division and this board:
* http://bitsavers.trailing-edge.com/pdf/motorola/_dataBooks/1987_Microcomputer_Systems_and_Components.pdf * http://bitsavers.trailing-edge.com/pdf/motorola/_dataBooks/1987_Microcomputer_Systems_and_Components.pdf
* *
* Description * Description
* ------------ * ------------
* Streaming Tape Controller released 1984 with the following feature set * Streaming Tape Controller released 1984 with the following feature set
@ -100,7 +100,7 @@
* - High Level Command/Status Packets offer efficient Operating System Support * - High Level Command/Status Packets offer efficient Operating System Support
* - Permits Chaining of Host Command * - Permits Chaining of Host Command
* *
* Address Map * Address Map
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Local to VME Decscription * Local to VME Decscription
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
@ -117,8 +117,8 @@
* Description Device Lvl IRQ VME board * Description Device Lvl IRQ VME board
* /Board Vector Address * /Board Vector Address
* ---------------------------------------------------------- * ----------------------------------------------------------
* On board Sources * On board Sources
* *
* Off board Sources (other VME boards) * Off board Sources (other VME boards)
* *
* ---------------------------------------------------------- * ----------------------------------------------------------
@ -149,9 +149,9 @@ class mvme350_state : public driver_device
{ {
public: public:
mvme350_state(const machine_config &mconfig, device_type type, const char *tag) : mvme350_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device (mconfig, type, tag), driver_device (mconfig, type, tag),
m_maincpu (*this, "maincpu"), m_maincpu (*this, "maincpu"),
m_pit(*this, "pit") m_pit(*this, "pit")
{ {
} }
@ -164,19 +164,19 @@ virtual void machine_reset ();
protected: protected:
private: private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<pit68230_device> m_pit; required_device<pit68230_device> m_pit;
}; };
static ADDRESS_MAP_START (mvme350_mem, AS_PROGRAM, 16, mvme350_state) static ADDRESS_MAP_START (mvme350_mem, AS_PROGRAM, 16, mvme350_state)
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
AM_RANGE (0x000000, 0x01ffff) AM_ROM /* 128 Mb ROM */ AM_RANGE (0x000000, 0x01ffff) AM_ROM /* 128 Mb ROM */
AM_RANGE (0x020000, 0x03ffff) AM_RAM /* 128 Mb RAM */ AM_RANGE (0x020000, 0x03ffff) AM_RAM /* 128 Mb RAM */
#if 1 #if 1
AM_RANGE(0x040000, 0x040035) AM_DEVREADWRITE8("pit", pit68230_device, read, write, 0x00ff) /* PIT ?*/ AM_RANGE(0x040000, 0x040035) AM_DEVREADWRITE8("pit", pit68230_device, read, write, 0x00ff) /* PIT ?*/
AM_RANGE(0x060000, 0x06001f) AM_RAM /* Area is cleared on start */ AM_RANGE(0x060000, 0x06001f) AM_RAM /* Area is cleared on start */
AM_RANGE(0x080000, 0x080035) AM_DEVREADWRITE8("pit", pit68230_device, read, write, 0x00ff) /* PIT ?*/ AM_RANGE(0x080000, 0x080035) AM_DEVREADWRITE8("pit", pit68230_device, read, write, 0x00ff) /* PIT ?*/
#endif #endif
//AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */ //AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
//AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */ //AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
@ -189,32 +189,32 @@ INPUT_PORTS_END
/* Start it up */ /* Start it up */
void mvme350_state::machine_start () void mvme350_state::machine_start ()
{ {
LOG (logerror ("machine_start\n")); LOG (logerror ("machine_start\n"));
} }
void mvme350_state::machine_reset () void mvme350_state::machine_reset ()
{ {
LOG (logerror ("machine_reset\n")); LOG (logerror ("machine_reset\n"));
} }
#if 0 #if 0
/* Dummy VME access methods until the VME bus device is ready for use */ /* Dummy VME access methods until the VME bus device is ready for use */
READ16_MEMBER (mvme350_state::vme_a24_r){ READ16_MEMBER (mvme350_state::vme_a24_r){
LOG (logerror ("vme_a24_r\n")); LOG (logerror ("vme_a24_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (mvme350_state::vme_a24_w){ WRITE16_MEMBER (mvme350_state::vme_a24_w){
LOG (logerror ("vme_a24_w\n")); LOG (logerror ("vme_a24_w\n"));
} }
READ16_MEMBER (mvme350_state::vme_a16_r){ READ16_MEMBER (mvme350_state::vme_a16_r){
LOG (logerror ("vme_16_r\n")); LOG (logerror ("vme_16_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (mvme350_state::vme_a16_w){ WRITE16_MEMBER (mvme350_state::vme_a16_w){
LOG (logerror ("vme_a16_w\n")); LOG (logerror ("vme_a16_w\n"));
} }
#endif #endif
@ -222,10 +222,10 @@ WRITE16_MEMBER (mvme350_state::vme_a16_w){
* Machine configuration * Machine configuration
*/ */
static MACHINE_CONFIG_START (mvme350, mvme350_state) static MACHINE_CONFIG_START (mvme350, mvme350_state)
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD ("maincpu", M68010, XTAL_10MHz) MCFG_CPU_ADD ("maincpu", M68010, XTAL_10MHz)
MCFG_CPU_PROGRAM_MAP (mvme350_mem) MCFG_CPU_PROGRAM_MAP (mvme350_mem)
/* PIT Parallel Interface and Timer device, assuming strapped for on board clock */ /* PIT Parallel Interface and Timer device, assuming strapped for on board clock */
MCFG_DEVICE_ADD("pit", PIT68230, XTAL_16MHz / 2) MCFG_DEVICE_ADD("pit", PIT68230, XTAL_16MHz / 2)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -243,11 +243,11 @@ ROM_LOAD16_BYTE ("mvme350U47v2.3.bin", 0x0001, 0x4000, CRC (582ce095) SHA1 (d092
* The ROMs known commands from different sources: * The ROMs known commands from different sources:
* *
* It communicates with the master through data buffers in shared memory and VME bus interrupts * It communicates with the master through data buffers in shared memory and VME bus interrupts
* as desribed in * as desribed in
* http://bitsavers.trailing-edge.com/pdf/motorola/_dataBooks/1987_Microcomputer_Systems_and_Components.pdf * http://bitsavers.trailing-edge.com/pdf/motorola/_dataBooks/1987_Microcomputer_Systems_and_Components.pdf
* *
* The board is pretty boring as stand alone, it initializes everything and then executes a STOP instruction * The board is pretty boring as stand alone, it initializes everything and then executes a STOP instruction
* awaiting a CPU on the VME bus to request its services. However, it enables boot from tape devices, we just * awaiting a CPU on the VME bus to request its services. However, it enables boot from tape devices, we just
* need a MVME-131 and a dump of a VersaDOS or Motorola UNIX System V system tape and some work. * need a MVME-131 and a dump of a VersaDOS or Motorola UNIX System V system tape and some work.
*/ */
ROM_END ROM_END

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause // license:BSD-3-Clause
// copyright-holders:Joakim Larsson Edstr??m // copyright-holders:Joakim Larsson Edstrom
/*************************************************************************** /***************************************************************************
* *
* Mizar VME8105 rev D 3U SBC driver, initially derived from force68k.c * Mizar VME8105 rev D 3U SBC driver, initially derived from force68k.c
@ -10,13 +10,13 @@
* It has a Motorola 68000 CPU @ 10MHz and two 27128 EPROMS with OS9 DEBUG labels * It has a Motorola 68000 CPU @ 10MHz and two 27128 EPROMS with OS9 DEBUG labels
* and not much more except 16 or so TTLs, 2 PALs and a VME P1 connector. It is a * and not much more except 16 or so TTLs, 2 PALs and a VME P1 connector. It is a
* 2 sided design so it shold be possible to trace the schematics quite easily. * 2 sided design so it shold be possible to trace the schematics quite easily.
* There is a date on the P1 Connector: "Feb 20 1987" * There is a date on the P1 Connector: "Feb 20 1987"
* *
* || * ||
* || * ||
* || * ||
* || * ||
* ||____________________________________________________________ ___ * ||____________________________________________________________ ___
* || --------------K2|U6-7432|U7-7474|U14-7405|U21-74645 | |_| | * || --------------K2|U6-7432|U7-7474|U14-7405|U21-74645 | |_| |
* || | 2764 - low |-+-------+-------+--------+-----------+ | | | * || | 2764 - low |-+-------+-------+--------+-----------+ | | |
* || | OS9 DEBUG U4| +---------+ +--------+---------+ | | | * || | OS9 DEBUG U4| +---------+ +--------+---------+ | | |
@ -34,40 +34,40 @@
* || | | | |XTAL |U9-7410+---------+| || | | * || | | | |XTAL |U9-7410+---------+| || | |
* ||K1 | U1| | |FOX100-------+---------+|K5||_| | * ||K1 | U1| | |FOX100-------+---------+|K5||_| |
* || -------------- |_________|10MHz|U8-7404|U15-74148|| || |___| * || -------------- |_________|10MHz|U8-7404|U15-74148|| || |___|
* ||--||--------------------------------+----+-------+---------++--+ * ||--||--------------------------------+----+-------+---------++--+
* ||--|| * ||--||
* || * ||
* *
* PAL:s * PAL:s
*------ *------
* The board has two PAL:s, a PAL20L10 and a PAL14L4. * The board has two PAL:s, a PAL20L10 and a PAL14L4.
* *
* _____ _____ * _____ _____
* OD/CLK 1 |* \_/ | 20 VCC * OD/CLK 1 |* \_/ | 20 VCC
* CPU A13 I0 2 | | 19 O0/LR A23 * CPU A13 I0 2 | | 19 O0/LR A23
* U9 7410p12 I1 3 | | 18 O1/A0 A22 * U9 7410p12 I1 3 | | 18 O1/A0 A22
* CPU *AS I2 4 | | 17 02/A1 U2/U4 2764p22 *OE * CPU *AS I2 4 | | 17 02/A1 U2/U4 2764p22 *OE
* GND I3 5 | | 16 03/A2 U11 PAL20L10p6 I4 * GND I3 5 | | 16 03/A2 U11 PAL20L10p6 I4
* CPU A14 I4 6 | U10 | 15 A0/O0 U11 PAL20L10p7 I5 * CPU A14 I4 6 | U10 | 15 A0/O0 U11 PAL20L10p7 I5
* CPU A15 I5 7 | PAL14L4 | 14 A1/O1 U19 74LS244p11 I0b * CPU A15 I5 7 | PAL14L4 | 14 A1/O1 U19 74LS244p11 I0b
* CPU A16 I6 8 | | 13 A2/O2 A18 * CPU A16 I6 8 | | 13 A2/O2 A18
* CPU A17 I7 9 | | 12 LR/O3 A20 * CPU A17 I7 9 | | 12 LR/O3 A20
* GND 10 |_____________| 11 CLK/OD A21 * GND 10 |_____________| 11 CLK/OD A21
* *
* _____ _____ * _____ _____
* OD/CLK 1 |* \_/ | 24 VCC * OD/CLK 1 |* \_/ | 24 VCC
* I0 2 | | 23 O0/LR * I0 2 | | 23 O0/LR
* CPU *AS I1 3 | | 22 O1/A0 * CPU *AS I1 3 | | 22 O1/A0
* U10 PAL14L4p3 I2 4 | | 21 02/A1 * U10 PAL14L4p3 I2 4 | | 21 02/A1
* I3 5 | | 20 03/A2 * I3 5 | | 20 03/A2
* U10 PAL14L4p16 I4 6 | U10 | 19 04/NC * U10 PAL14L4p16 I4 6 | U10 | 19 04/NC
* U10 PAL14L4p15 I5 7 | PAL20L10 | 18 NC/O0 * U10 PAL14L4p15 I5 7 | PAL20L10 | 18 NC/O0
* I6 8 | | 17 A2/O1 * I6 8 | | 17 A2/O1
* I7 9 | | 16 A1/O2 * I7 9 | | 16 A1/O2
* I8 10 | | 15 A0/O3 * I8 10 | | 15 A0/O3
* I9 11 | | 14 LR/O4 * I9 11 | | 14 LR/O4
* GND 12 |_____________| 13 CLK/OD * GND 12 |_____________| 13 CLK/OD
* *
* Trace is not fully completed and validated. * Trace is not fully completed and validated.
* *
* History of Mizar * History of Mizar
@ -81,27 +81,27 @@
* *
* From http://archive.org/stream/68micro-vol-11-num-02/V11N02_Feb1989_djvu.txt : * From http://archive.org/stream/68micro-vol-11-num-02/V11N02_Feb1989_djvu.txt :
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
* " Mizar provides complete OS-9 solutions for the VMEbus. Mizar's VME CPUs * " Mizar provides complete OS-9 solutions for the VMEbus. Mizar's VME CPUs
* offer (he functions and performance your application demands. Our single * offer (he functions and performance your application demands. Our single
* height (3U) VME processors are uniquely configurable computing engines, * height (3U) VME processors are uniquely configurable computing engines,
* Through Mizar's unique MXbus expansion interface, standard and custom side * Through Mizar's unique MXbus expansion interface, standard and custom side
* modules can be added to basic processors to create double-height (6U) boards * modules can be added to basic processors to create double-height (6U) boards
* tor specific applications, 3U CPU options include 68010, 66020, and 63030 * tor specific applications, 3U CPU options include 68010, 66020, and 63030
* microprocessors, up to one MB of DRAM, serial I/O, real-time clock, and * microprocessors, up to one MB of DRAM, serial I/O, real-time clock, and
* mailbox interrupt support. Standard MXbus side modules include additional DRAM. * mailbox interrupt support. Standard MXbus side modules include additional DRAM.
* SRAM, and I/O. * SRAM, and I/O.
* *
* Mizar's standard double- height (6U) processors provide additional features such * Mizar's standard double- height (6U) processors provide additional features such
* as a high-speed cache to enhance 68030 performance, floating, point coprocessor * as a high-speed cache to enhance 68030 performance, floating, point coprocessor
* support, up to four MB dual ported DRAM, VSB memory interface, Ethernet, and SCSI. * support, up to four MB dual ported DRAM, VSB memory interface, Ethernet, and SCSI.
* *
* Mizar also supports OS-9 with completely configured OS9 development systems and * Mizar also supports OS-9 with completely configured OS9 development systems and
* OS-9 application server systems. For more information, call Mizar today * OS-9 application server systems. For more information, call Mizar today
* *
* 800-635-0200 MIZAR 1419 Dunn Drive CarrolHon, TX 75006 214-446-2664" * 800-635-0200 MIZAR 1419 Dunn Drive CarrolHon, TX 75006 214-446-2664"
* *
* Known boards from Mizar: * Known boards from Mizar:
* *
*-Comp.Os.Vxworks diguest mailing list May 1992: VxWorks Drivers Available from Mizar: *-Comp.Os.Vxworks diguest mailing list May 1992: VxWorks Drivers Available from Mizar:
* EMX 7320 Serial I/O Board * EMX 7320 Serial I/O Board
* EMX 7550 Ethernet Controller Board (AMD 7990 Lance) MAC: 00:80:F8 MIZAR, INC. * EMX 7550 Ethernet Controller Board (AMD 7990 Lance) MAC: 00:80:F8 MIZAR, INC.
@ -121,9 +121,9 @@
*-------------------------------------------------------------------- *--------------------------------------------------------------------
* Aug 20 1984 a report by James Jones from the OS/9 conferance in Des Moines: * Aug 20 1984 a report by James Jones from the OS/9 conferance in Des Moines:
* "... * "...
* Mizar: is selling VME bus 68010 boards, running OS-9/68000; they also make * Mizar: is selling VME bus 68010 boards, running OS-9/68000; they also make
* various memory and I/O boards, disk controller boards, and and a NEC 7220-based * various memory and I/O boards, disk controller boards, and and a NEC 7220-based
* graphics controller board...." * graphics controller board...."
* *
* Misc links about Mizar: * Misc links about Mizar:
* http://www.vita.com/History * http://www.vita.com/History
@ -134,10 +134,10 @@
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Address Range Description/Assumption * Address Range Description/Assumption
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* 0x000000 0x01ffff ROM because of fixed vectors * 0x000000 0x01ffff ROM because of fixed vectors
* 0x020000 0x03ffff RAM because bootvector stack starts at 0x21000 * 0x020000 0x03ffff RAM because bootvector stack starts at 0x21000
* -- VME adresses--- * -- VME adresses---
* 0xff0000 0xff0003 Bootstrap expects to find a UPD7201 serial device here * 0xff0000 0xff0003 Bootstrap expects to find a UPD7201 serial device here
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* *
* Interrupt sources * Interrupt sources
@ -164,7 +164,7 @@
#include "bus/rs232/rs232.h" #include "bus/rs232/rs232.h"
#include "machine/clock.h" #include "machine/clock.h"
#define CARDSLOT 0 #define CARDSLOT 0
#if CARDSLOT // Awaiting info on how to boot the user eproms #if CARDSLOT // Awaiting info on how to boot the user eproms
#include "bus/generic/slot.h" #include "bus/generic/slot.h"
@ -173,7 +173,7 @@
#define LOG(x) x #define LOG(x) x
/* These values are borrowed just to get the terminal going and should be replaced /* These values are borrowed just to get the terminal going and should be replaced
* once a proper serial board hardware (ie MZ 8300) is found and emulated. */ * once a proper serial board hardware (ie MZ 8300) is found and emulated. */
#define BAUDGEN_CLOCK XTAL_19_6608MHz /* fake */ #define BAUDGEN_CLOCK XTAL_19_6608MHz /* fake */
@ -183,9 +183,9 @@ class mzr8105_state : public driver_device
{ {
public: public:
mzr8105_state(const machine_config &mconfig, device_type type, const char *tag) : mzr8105_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device (mconfig, type, tag), driver_device (mconfig, type, tag),
m_maincpu (*this, "maincpu") m_maincpu (*this, "maincpu")
,m_updterm(*this, "upd") ,m_updterm(*this, "upd")
// ,m_cart(*this, "exp_rom1") // ,m_cart(*this, "exp_rom1")
{ {
} }
@ -231,10 +231,10 @@ AM_RANGE (0x020000, 0x03ffff) AM_RAM /* Not verified */
AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */ AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
//AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */ //AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
// Faking a Mizar 8300 SIO BOARD in VME A16 adress space // Faking a Mizar 8300 SIO BOARD in VME A16 adress space
AM_RANGE (0xFF0000, 0xFF0001) AM_DEVREADWRITE8("upd", upd7201_device, da_r, da_w, 0x00ff) /* Dual serial port NEC uPD7201 */ AM_RANGE (0xFF0000, 0xFF0001) AM_DEVREADWRITE8("upd", upd7201_device, da_r, da_w, 0x00ff) /* Dual serial port NEC uPD7201 */
AM_RANGE (0xFF0002, 0xFF0003) AM_DEVREADWRITE8("upd", upd7201_device, ca_r, ca_w, 0x00ff) /* Dual serial port NEC uPD7201 */ AM_RANGE (0xFF0002, 0xFF0003) AM_DEVREADWRITE8("upd", upd7201_device, ca_r, ca_w, 0x00ff) /* Dual serial port NEC uPD7201 */
AM_RANGE (0xFF0004, 0xFF0005) AM_DEVREADWRITE8("upd", upd7201_device, db_r, db_w, 0x00ff) /* Dual serial port NEC uPD7201 */ AM_RANGE (0xFF0004, 0xFF0005) AM_DEVREADWRITE8("upd", upd7201_device, db_r, db_w, 0x00ff) /* Dual serial port NEC uPD7201 */
AM_RANGE (0xFF0006, 0xFF0007) AM_DEVREADWRITE8("upd", upd7201_device, cb_r, cb_w, 0x00ff) /* Dual serial port NEC uPD7201 */ AM_RANGE (0xFF0006, 0xFF0007) AM_DEVREADWRITE8("upd", upd7201_device, cb_r, cb_w, 0x00ff) /* Dual serial port NEC uPD7201 */
ADDRESS_MAP_END ADDRESS_MAP_END
@ -245,49 +245,49 @@ INPUT_PORTS_END
/* Start it up */ /* Start it up */
void mzr8105_state::machine_start () void mzr8105_state::machine_start ()
{ {
LOG (logerror ("machine_start\n")); LOG (logerror ("machine_start\n"));
#if CARDSLOT #if CARDSLOT
/* Map user ROM/RAM socket(s) */ /* Map user ROM/RAM socket(s) */
if (m_cart->exists()) if (m_cart->exists())
{ {
m_usrrom = (UINT16*)m_cart->get_rom_base(); m_usrrom = (UINT16*)m_cart->get_rom_base();
m_maincpu->space(AS_PROGRAM).install_read_handler(0xa0000, 0xbffff, read16_delegate(FUNC(generic_slot_device::read16_rom), (generic_slot_device*)m_cart)); m_maincpu->space(AS_PROGRAM).install_read_handler(0xa0000, 0xbffff, read16_delegate(FUNC(generic_slot_device::read16_rom), (generic_slot_device*)m_cart));
} }
#endif #endif
} }
/* Dummy VME access methods until the VME bus device is ready for use */ /* Dummy VME access methods until the VME bus device is ready for use */
READ16_MEMBER (mzr8105_state::vme_a24_r){ READ16_MEMBER (mzr8105_state::vme_a24_r){
LOG (logerror ("vme_a24_r\n")); LOG (logerror ("vme_a24_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (mzr8105_state::vme_a24_w){ WRITE16_MEMBER (mzr8105_state::vme_a24_w){
LOG (logerror ("vme_a24_w\n")); LOG (logerror ("vme_a24_w\n"));
} }
READ16_MEMBER (mzr8105_state::vme_a16_r){ READ16_MEMBER (mzr8105_state::vme_a16_r){
LOG (logerror ("vme_16_r\n")); LOG (logerror ("vme_16_r\n"));
return (UINT16) 0; return (UINT16) 0;
} }
WRITE16_MEMBER (mzr8105_state::vme_a16_w){ WRITE16_MEMBER (mzr8105_state::vme_a16_w){
LOG (logerror ("vme_a16_w\n")); LOG (logerror ("vme_a16_w\n"));
} }
#if CARDSLOT #if CARDSLOT
/* /*
* 4. The USER EPROM Area * 4. The USER EPROM Area
*/ */
// Implementation of static 2 x 64K EPROM in sockets U1/U3 as 16 bit wide cartridge for easier // Implementation of static 2 x 64K EPROM in sockets U1/U3 as 16 bit wide cartridge for easier
// software handling. TODO: make configurable according to table above. // software handling. TODO: make configurable according to table above.
static MACHINE_CONFIG_FRAGMENT( mzr8105_eprom_sockets ) static MACHINE_CONFIG_FRAGMENT( mzr8105_eprom_sockets )
MCFG_GENERIC_CARTSLOT_ADD("exp_rom1", generic_plain_slot, "mzr8105_cart") MCFG_GENERIC_CARTSLOT_ADD("exp_rom1", generic_plain_slot, "mzr8105_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom") MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_GENERIC_WIDTH(GENERIC_ROM16_WIDTH) MCFG_GENERIC_WIDTH(GENERIC_ROM16_WIDTH)
MCFG_GENERIC_ENDIAN(ENDIANNESS_BIG) MCFG_GENERIC_ENDIAN(ENDIANNESS_BIG)
MCFG_GENERIC_LOAD(mzr8105_state, exp1_load) MCFG_GENERIC_LOAD(mzr8105_state, exp1_load)
// MCFG_SOFTWARE_LIST_ADD("cart_list", "mzr8105_cart") // MCFG_SOFTWARE_LIST_ADD("cart_list", "mzr8105_cart")
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -296,25 +296,25 @@ MACHINE_CONFIG_END
****************************/ ****************************/
int mzr8105_state::mzr8105_load_cart(device_image_interface &image, generic_slot_device *slot) int mzr8105_state::mzr8105_load_cart(device_image_interface &image, generic_slot_device *slot)
{ {
UINT32 size = slot->common_get_size("rom"); UINT32 size = slot->common_get_size("rom");
if (size > 0x20000) // Max 128Kb - not verified if (size > 0x20000) // Max 128Kb - not verified
{ {
LOG( printf("Cartridge size exceeding max size (128Kb): %d\n", size) ); LOG( printf("Cartridge size exceeding max size (128Kb): %d\n", size) );
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Cartridge size exceeding max size (128Kb)"); image.seterror(IMAGE_ERROR_UNSPECIFIED, "Cartridge size exceeding max size (128Kb)");
return IMAGE_INIT_FAIL; return IMAGE_INIT_FAIL;
} }
slot->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_BIG); slot->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_BIG);
slot->common_load_rom(slot->get_rom_base(), size, "rom"); slot->common_load_rom(slot->get_rom_base(), size, "rom");
return IMAGE_INIT_PASS; return IMAGE_INIT_PASS;
} }
#endif #endif
WRITE_LINE_MEMBER (mzr8105_state::write_updterm_clock){ WRITE_LINE_MEMBER (mzr8105_state::write_updterm_clock){
m_updterm->txca_w (state); m_updterm->txca_w (state);
m_updterm->rxca_w (state); m_updterm->rxca_w (state);
} }
/* /*

Some files were not shown because too many files have changed in this diff Show More