Cleanups and version bump

This commit is contained in:
Miodrag Milanovic 2014-10-15 07:19:47 +00:00
parent a4dd32afb6
commit c93ed344fb
489 changed files with 7476 additions and 7579 deletions

View File

@ -1318,8 +1318,8 @@ the buttons not work in emulators.
</software>
<!--
The code has some race conditions for NMIs (related to input readings)
and often fails to boot on real systems too. To successfully start the
The code has some race conditions for NMIs (related to input readings)
and often fails to boot on real systems too. To successfully start the
game, you can keep pressed Button 1 during Atari logo (thanks to Mike
Saarna for debugging the problem)
-->
@ -2369,7 +2369,7 @@ almost nothing like the prototype.
<!-- This version features a lot *LESS* sounds than the newer version:
e.g. no sound in bobsled ans ski jump games!
Dump is confirmed from multiple carts, and it was probably used in
Dump is confirmed from multiple carts, and it was probably used in
some erlier production run, until they found out the mistake and
replaced it with the complete version -->
<software name="wingameso" cloneof="wingames">

View File

@ -31,9 +31,9 @@
</dataarea>
</part>
</software>
<!-- A3000 Installation disks -->
<software name="a3kin203">
<description>A3000 Install Disk 2.03</description>
<year>1991</year>
@ -44,11 +44,11 @@
<rom name="335603-04_install.adf" size="901120" crc="9a3cc466" sha1="b12a225890a3957bb01dcbfba44c046c19e19c8f" offset="0"/>
</dataarea>
</part>
</software>
</software>
<!-- Amiga UNIX System V Release 4 -->
<!-- TODO: Part numbers -->
<software name="amix11">
<description>UNIX System V Release 4 Amiga Version 1.1</description>
<year>1990</year>

View File

@ -12,7 +12,7 @@
<dataarea name="flop" size="901120">
<rom name="370132_a570_utilities.adf" size="901120" crc="30097474" sha1="958b97674e3e99fb9b0e3117009f27d4e7a9220b" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a590">
@ -25,7 +25,7 @@
<dataarea name="flop" size="901120">
<rom name="317734-01_a590_scsi.adf" size="901120" crc="a560a938" sha1="9c6136c6580779a948cd1c0b50cb229512af415c" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a590_wd" cloneof="a590">
@ -40,7 +40,7 @@
<dataarea name="flop" size="901120">
<rom name="317734-03_a590_wd.adf" size="901120" crc="a88fda41" sha1="7424f8645e1903e3e4ec8bb824186868319be1f3" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a590_seagate" cloneof="a590">
@ -52,7 +52,7 @@
<dataarea name="flop" size="901120">
<rom name="317734-04_a590_seagate.adf" size="901120" status="nodump" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a590_ram">
@ -64,7 +64,7 @@
<dataarea name="flop" size="901120">
<rom name="317830-01_a590_ram_test.adf" size="901120" crc="6583d1d0" sha1="7779b825b8555956d341ff7e909ab71d89e2321c" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a2024">
@ -76,7 +76,7 @@
<dataarea name="flop" size="901120">
<rom name="317809-01_a2024_jumpstart.adf" size="901120" crc="dad46588" sha1="30c2c1f1d98bd008b2c67f3b23480181935d4b01" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a2091">
@ -90,7 +90,7 @@
<dataarea name="flop" size="901120">
<rom name="317806-04_a2091_setup.adf" size="901120" crc="122c8f93" sha1="603e106c1a44a209171610af8d48bc35ad31c9bc" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a2058">
@ -102,7 +102,7 @@
<dataarea name="flop" size="901120">
<rom name="317719-01_a2058_ram_test.adf" size="901120" crc="5dba7fc3" sha1="76fbce4bef7df0f6042c85376d9bdfd4d4911e74" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a2232">
@ -114,7 +114,7 @@
<dataarea name="flop" size="901120">
<rom name="317769-01_a2232_install.adf" size="901120" crc="3caa21b7" sha1="24f47f6f88712f046303b8812a598043440a5e6d" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a2300">
@ -126,7 +126,7 @@
<dataarea name="flop" size="901120">
<rom name="317718-02_a2300_genlock_demo.adf" size="901120" crc="464ff0f6" sha1="26b94e8d52d35e2746b74610bb9b65eb2f899297" offset="0"/>
</dataarea>
</part>
</part>
</software>
<software name="a2320">
@ -138,7 +138,7 @@
<dataarea name="flop" size="901120">
<rom name="317210-01_a2320_test_demo.adf" size="901120" crc="cff98aae" sha1="f46f7de0d908ed68abfd784d84b964cbce7dc503" offset="0"/>
</dataarea>
</part>
</part>
</software>
</softwarelist>

View File

@ -437,7 +437,7 @@
<software name="choplift">
<!-- Choplifter (1984)(Coleco)[a].bin -->
<!-- Other available dump has corrupted gfx -->
<!-- Other available dump has corrupted gfx -->
<description>Choplifter!</description>
<year>1984</year>
<publisher>Coleco / CBS</publisher>
@ -699,7 +699,7 @@
<part name="cart" interface="coleco_cart">
<dataarea name="rom" size="16384">
<rom name="apshai.1" size="8192" crc="aa3ec181" sha1="7f79628c298ad6e410af82eeb33871869ad23de8" offset="0x0000" />
<!-- 2nd 8K chunk containes two copies of the same 4K data -->
<!-- 2nd 8K chunk containes two copies of the same 4K data -->
<rom name="apshai.2" size="8192" crc="0e440f8f" sha1="09ffaeb79cdd8173882b77a8398a4e00ba826de1" offset="0x2000" />
</dataarea>
</part>
@ -2262,7 +2262,7 @@
<dataarea name="rom" size="24576">
<rom name="subroc.1" size="8192" crc="ff56b769" sha1="612a0abd13c4c7790890cbcb265a7fd786c7ec5c" offset="0x0000" />
<rom name="subroc.2" size="8192" crc="e9e60d4c" sha1="bfc94db65985b7a906099465a47d900f7a9a9106" offset="0x2000" />
<!-- 3rd 8K chunk containes two copies of the same 4K data -->
<!-- 3rd 8K chunk containes two copies of the same 4K data -->
<rom name="subroc.3" size="8192" crc="abe18f08" sha1="6ebdc68397c7b20dceba12ff754f88c955d5f98a" offset="0x4000" />
</dataarea>
</part>
@ -2369,9 +2369,9 @@
</software>
<software name="zaxxont" cloneof="zaxxon">
<!-- The Taiwan Cooper cart contains a 32K ROM, the last 8K of which was found to
contain 0x4000-0x4fff from Super Action Baseball followed by 0x1000-0x1fff
from Meteoric Shower! -->
<!-- The Taiwan Cooper cart contains a 32K ROM, the last 8K of which was found to
contain 0x4000-0x4fff from Super Action Baseball followed by 0x1000-0x1fff
from Meteoric Shower! -->
<description>Zaxxon (Taiwan Cooper)</description>
<year>198?</year>
<publisher>Taiwan Cooper</publisher>

View File

@ -1657,7 +1657,7 @@ Titles, serial #s, publishers and release dates taken from:
</dataarea>
</part>
</software>
<software name="mdos7_09">
<description>M-DOS7 Volume 9</description>
<year>19??</year>

View File

@ -2,8 +2,8 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="fmtowns" description="FM Towns CD-ROMs">
<!-- skeleton test list -->
<!-- works well on fmtmarty, keyboard seems to interfere with movements on fmtowns -->
<!-- works well on fmtmarty, keyboard seems to interfere with movements on fmtowns -->
<software name="raiden">
<description>Raiden Densetsu / Raiden Trad</description>
<year>1991</year>

View File

@ -768,9 +768,9 @@ A few games have been listed as rumored, but they might very well be fake (pleas
</software>
<!-- some disassembling performed by Paul Baker suggests that this version is a prototype
e.g. the mapper control register at $fffc gets set to $80, you cannot switch characters
on the pause screen, some messages are not displayed ("Sorry boys, no tickets, no show!"
to explain why it is not possible to progress beyond a certain point in the game without
e.g. the mapper control register at $fffc gets set to $80, you cannot switch characters
on the pause screen, some messages are not displayed ("Sorry boys, no tickets, no show!"
to explain why it is not possible to progress beyond a certain point in the game without
a certain item) -->
<software name="beavisp" cloneof="beavis">
<description>Beavis and Butt-head (Prototype?)</description>
@ -7285,7 +7285,7 @@ a certain item) -->
</software>
<software name="soniclab">
<!-- A final pre-release version of this same dump was found on a proto board with 4x128K sockets and no labels -->
<!-- A final pre-release version of this same dump was found on a proto board with 4x128K sockets and no labels -->
<description>Sonic Labyrinth (World)</description>
<year>1995</year>
<publisher>Sega</publisher>
@ -7594,7 +7594,7 @@ a certain item) -->
</software>
<software name="sonic2d" cloneof="sonic2">
<!-- This predates the final release and contains some different tiles & sprites compared to the final game -->
<!-- This predates the final release and contains some different tiles & sprites compared to the final game -->
<description>Sonic The Hedgehog 2 (Rolling Demo)</description>
<year>1992</year>
<publisher>Sega</publisher>
@ -7609,7 +7609,7 @@ a certain item) -->
<feature name="batt" value="" />
<feature name="sw" value="ON = 1M / OFF = 256" />
<dataarea name="rom" size="262144">
<!-- The ROM should be split in two halves -->
<!-- The ROM should be split in two halves -->
<rom name="sonic_2_auto_demo_prototype_(1991-12-05)_tmr_sega_cb06_ffff.bin" size="262144" crc="15ad37a5" sha1="b780c6f059b48d1bb48ee2ad521552dab1487c88" offset="000000" />
</dataarea>
</part>
@ -8634,7 +8634,7 @@ a certain item) -->
</software>
<software name="tailsadv">
<!-- A final pre-release version of this same dump was found on a proto board with 4x128K sockets and no labels -->
<!-- A final pre-release version of this same dump was found on a proto board with 4x128K sockets and no labels -->
<description>Tails Adventures (World)</description>
<year>1995</year>
<publisher>Sega</publisher>

View File

@ -4,7 +4,7 @@
<!-- dumps are not yet verified as good, the 3-in-1 internal ROM is not yet dumped -->
<softwarelist name="gameking" description="TimeTop GameKing cartridges">
<software name="2004">
<description>2004</description>
<year>200?</year>
@ -25,7 +25,7 @@
<rom name="adventure legend carlo.bin" size="0x20000" crc="7d61d215" sha1="741684b5379d4be732a98beace5d09f37ff19bbf" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="aries">
<description>Aries</description>
@ -36,7 +36,7 @@
<rom name="aries.bin" size="0x20000" crc="b854f1f2" sha1="1ad7a325aba2cf3593165b53e7ae3973388335f7" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="dinoadv">
<description>Dino Adventure Legend</description>
@ -47,7 +47,7 @@
<rom name="dino adventure legend.bin" size="0x20000" crc="2df0c1e6" sha1="df4b5dc80a758d9e3c9b00384e3099ad8331faad" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="duckman">
<description>Duck Man</description>
@ -58,7 +58,7 @@
<rom name="duck man.bin" size="0x20000" crc="9d12950a" sha1="376606097f66105d1a9e97e9793362f6f1e3b1a7" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="happybal">
<description>Happy Ball</description>
@ -69,7 +69,7 @@
<rom name="happy ball.bin" size="0x20000" crc="79d4e738" sha1="fc14712260ed6e3d6313055046546d37b7c838d2" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="happykil">
<description>Happy Killer</description>
@ -80,7 +80,7 @@
<rom name="happy killer.bin" size="0x20000" crc="9fd7ec65" sha1="705309829ee87689793c15be1f781d52471908d6" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="lanner">
<description>Lanneret</description>
@ -91,7 +91,7 @@
<rom name="lanneret.bin" size="0x20000" crc="249df6a5" sha1="bcf92ab85cc97ffe94d6a363a87b0b5de62c3c66" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="penguin">
<description>Penguin</description>
@ -102,8 +102,8 @@
<rom name="penguin.bin" size="0x20000" crc="8c7b81c9" sha1="2f253b6ab6f6b9fc114ffca120d13df2e1e5f860" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="popper">
<description>Popper</description>
<year>200?</year>
@ -113,7 +113,7 @@
<rom name="popper.bin" size="0x20000" crc="a704617b" sha1="314931548578303e5e80a2bcb03c92472cb014d9" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="sthero">
<description>Street Hero</description>
@ -124,8 +124,8 @@
<rom name="street hero.bin" size="0x20000" crc="9e0fe489" sha1="2c442126999e4b112a48e42a82dfa9ad9d6efa22" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="smotor">
<description>Supermotor</description>
<year>200?</year>
@ -135,7 +135,7 @@
<rom name="supermotor.bin" size="0x20000" crc="6290b94b" sha1="0c3011da35170241637907bb23d79355db38f343" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
<software name="trojanl">
<description>Trojan Legend</description>
@ -146,8 +146,8 @@
<rom name="trojan legend.bin" size="0x20000" crc="7ce3975e" sha1="e925e4f28efc85ce69fb504b85a98a60883aa30d" offset="0x00000" />
</dataarea>
</part>
</software>
</software>
</softwarelist>

View File

@ -23639,7 +23639,7 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design
* CBA078 Shuma Baolong - Diannao Pian 数码暴龙-电脑篇
* CBA079 Yingxiong Tianxia 英雄天下
* CBA080 Sanguozhi Wudai 三国志五代
* CBA083 Tai Kong Bao Bei 太空宝贝
* CBA083 Tai Kong Bao Bei 太空宝贝
* CBA085 Shu Ma Bao Bei - Huojian Bingtuan 数码宝贝-火箭兵团
* CBA086 Shu Ma Bao Bei - Chao Mengmeng Fanji Zhan 数码宝贝-超梦梦反击战
* CBA087 Shu Ma Bao Bei - Hai Zhi Shen 数码宝贝-海之神

View File

@ -100,7 +100,7 @@
<dataarea name="D000" size="0x4000">
<rom name="world series major league baseball.d0" size="0x4000" crc="839fa5c7" sha1="1ef12665079d1ce50bd2419b668344a08c9a872f" offset="0x0000"/>
</dataarea>
<!-- two ROM pages -->
<!-- two ROM pages -->
<dataarea name="F000" size="0x4000">
<rom name="world series major league baseball (page 0).f0" size="0x2000" crc="a0f2fe49" sha1="fab397b49c5a7db53a501caea42fce169da5a31a" offset="0x0000"/>
<rom name="world series major league baseball (page 1).f0" size="0x2000" crc="94d6b056" sha1="df2a8c950dd1c398db901a624c04322d2b4f2782" offset="0x2000"/>

View File

@ -14536,12 +14536,12 @@ kept for now until finding out what those bytes affect...
<feature name="mapper" value="NOMAPPER" />
<dataarea name="rom" size="131072">
<!--
20140725:
There are 3 versions of this rom floating around:
930eae7057af1652abae794072b296a59decd61b - a "dirty" dump; it seems to be a direct memory copy made on an MSX and contains RAM contents at 3000-3FFF and 7000-7FFF
a45692849acf29ddb653707a62747985439f6d4f - RAM areas are set to FFs
36d47cf70618fdb460f97a8ceb75013ec4529063 - A dump made using an eeprom reader. This dump differs one bit with the dump above (offset 8a49, bit 3)
By looking the code it is not yet possible to say which one is 100% correct, so marking it as baddump for the moment.
20140725:
There are 3 versions of this rom floating around:
930eae7057af1652abae794072b296a59decd61b - a "dirty" dump; it seems to be a direct memory copy made on an MSX and contains RAM contents at 3000-3FFF and 7000-7FFF
a45692849acf29ddb653707a62747985439f6d4f - RAM areas are set to FFs
36d47cf70618fdb460f97a8ceb75013ec4529063 - A dump made using an eeprom reader. This dump differs one bit with the dump above (offset 8a49, bit 3)
By looking the code it is not yet possible to say which one is 100% correct, so marking it as baddump for the moment.
-->
<rom name="msx audio (japan) (fs-ca1) (program).rom" size="131072" crc="78584d2e" sha1="a45692849acf29ddb653707a62747985439f6d4f" status="baddump" offset="0" />
</dataarea>
@ -17109,8 +17109,8 @@ legacy FM implementations cannot find it.
</part>
<!-- The package came with a copy of MSX-DOS -->
<!--
<part name="flop1" interface="floppy_3_5">
</part>
<part name="flop1" interface="floppy_3_5">
</part>
-->
</software>
@ -17126,9 +17126,9 @@ legacy FM implementations cannot find it.
</dataarea>
</part>
<!--
The floppy drive was most likely bundled with a copy of MSX-DOS, but we are not 100% sure yet
<part name="flop1" interface="floppy_3_5">
</part>
The floppy drive was most likely bundled with a copy of MSX-DOS, but we are not 100% sure yet
<part name="flop1" interface="floppy_3_5">
</part>
-->
</software>

View File

@ -35601,7 +35601,7 @@
<feature name="pcb_model" value="NR8OV2-1" />
<feature name="u1" value="U1 PRG" />
<feature name="u2" value="U2 CHR" />
<feature name="u3" value="CME-01" /> <!-- CIC clone? -->
<feature name="u3" value="CME-01" /> <!-- CIC clone? -->
<feature name="mirroring" value="vertical" />
<dataarea name="prg" size="262144">
<rom name="sup.adv.quest.u1" size="262144" crc="6a7bf037" sha1="22b430d7d4167f16751facd3515f7c8e1133a3d9" offset="00000" />

View File

@ -2,7 +2,7 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="pencil2" description="Hanimex Pencil II cartridges">
<!--
<!--
Undumped known carts
@ -16,7 +16,7 @@ Zaxxon
-->
<!--
<!--
BASIC CART PEN-700 11-50332-31 Rev.0
SD-BASIC VERSION 2.0 FOR PENCIL II

View File

@ -704,9 +704,9 @@ A few comments on these:
</part>
</software>
<!-- Redump.org sets -->
<software name="raidendx" supported="yes"> <!-- Hamster re-release) -->
<!-- Redump.org sets -->
<software name="raidendx" supported="yes"> <!-- Hamster re-release) -->
<description>Raiden DX (Japan, V1.1)</description>
<year>199?</year>
<publisher>Seibu / Hamster</publisher>
@ -717,8 +717,8 @@ A few comments on these:
</diskarea>
</part>
</software>
<software name="raidendxo" cloneof="raidendx" supported="yes"> <!-- original release) -->
<software name="raidendxo" cloneof="raidendx" supported="yes"> <!-- original release) -->
<description>Raiden DX (Japan, V1.0)</description>
<year>199?</year>
<publisher>Seibu</publisher>
@ -729,7 +729,7 @@ A few comments on these:
</diskarea>
</part>
</software>
<software name="raidenpr" supported="yes">
<description>Raiden Project (USA)</description>
<year>199?</year>
@ -740,9 +740,9 @@ A few comments on these:
<disk name="raiden project, the (usa)" sha1="cb1e4fae25d42e70fcb3eec5e1c1afcbdc5c2af3"/>
</diskarea>
</part>
</software>
<!-- this image doesn't boot, some kind of copy protection? could be bad -->
</software>
<!-- this image doesn't boot, some kind of copy protection? could be bad -->
<software name="raidenprj" cloneof="raidenpr" supported="no">
<description>Raiden Project (Japan)</description>
<year>1995</year>
@ -753,8 +753,8 @@ A few comments on these:
<disk name="raiden project (japan)" sha1="12ec8ee3117df1f95752dc65155a611f43725251"/>
</diskarea>
</part>
</software>
</software>
<!-- Images below are 'low-grade' ie not dumped to any specific standard, or verified to be of any specific quality, they could have bad gaps or audio tracks etc. -->
<!-- They should be replaced with better quality images once said images are available (and verified to be the same versions) -->

View File

@ -235,7 +235,7 @@
</part>
</software>
<!-- TODO: add support for RAM in this cart (0xa000-0xffff) -->
<!-- TODO: add support for RAM in this cart (0xa000-0xffff) -->
<software name="rwp32" supported="no">
<description>rWP32</description>
<year>19??</year>

View File

@ -32,7 +32,7 @@
7) When the format completes, type "RUN APPLESOFT BOOT PREP" and press Enter.
8) Once it finishes, quit MESS. Remove the diskii(ng) from slot 7 and
the system will boot into DOS 3.3 from the Corvus HD.
TODO: but there are no Corvus drivers present after that, only
Disk II?

View File

@ -112,7 +112,7 @@ UINT8 a2bus_lang_device::read_c0nx(address_space &space, UINT8 offset)
// likely to be interrupt-safe.
if (state->m_machinetype == APPLE_II)
{
switch (offset & 0x03)
switch (offset & 0x03)
{
case 1:
case 3:

View File

@ -3,10 +3,10 @@
corvfdc01.c
Implemention of the Corvus Systems CORVUS01 floppy controller
Boot PROM 0.8 fixes this at: 8", 500 blocks total, 128 bytes/block,
26 sectors/track, 77 tracks.
26 sectors/track, 77 tracks.
*********************************************************************/
#include "corvfdc01.h"
@ -21,8 +21,8 @@
const device_type A2BUS_CORVFDC01 = &device_creator<a2bus_corvfdc01_device>;
#define FDC01_ROM_REGION "fdc01_rom"
#define FDC01_FDC_TAG "fdc01_fdc"
#define FDC01_ROM_REGION "fdc01_rom"
#define FDC01_FDC_TAG "fdc01_fdc"
FLOPPY_FORMATS_MEMBER( a2bus_corvfdc01_device::corv_floppy_formats )
FLOPPY_IMD_FORMAT
@ -161,7 +161,7 @@ UINT8 a2bus_corvfdc01_device::read_c0nx(address_space &space, UINT8 offset)
{
switch (offset)
{
case 0: // local status
case 0: // local status
if (m_curfloppy)
{
m_fdc_local_status &= ~LS_DSKCHG_mask;
@ -169,7 +169,7 @@ UINT8 a2bus_corvfdc01_device::read_c0nx(address_space &space, UINT8 offset)
}
return m_fdc_local_status | LS_8IN_mask;
case 8: // WD1793 at 8-11
case 8: // WD1793 at 8-11
return m_wdfdc->status_r(space, offset);
case 9:
@ -225,7 +225,7 @@ void a2bus_corvfdc01_device::write_c0nx(address_space &space, UINT8 offset, UINT
if (m_curfloppy != NULL)
{
// side select
m_curfloppy->ss_w((data & LC_FLPSD1_mask) != 0);
m_curfloppy->ss_w((data & LC_FLPSD1_mask) != 0);
// motor control (active low)
m_curfloppy->mon_w((data & LC_MOTOROF_mask) ? 1 : 0);
@ -278,4 +278,3 @@ WRITE_LINE_MEMBER(a2bus_corvfdc01_device::drq_w)
else
m_fdc_local_status &= ~LS_DRQ_mask;
}

View File

@ -4,10 +4,10 @@
Implemention of the Corvus Systems CORVUS02 floppy controller
aka the "Buffered Floppy Controller"
Boot PROM 0.8 says 8" SSDD or 5.25" DSDD; we stick with 5.25" here
and let the FDC01 handle 8".
*********************************************************************/
#include "corvfdc02.h"
@ -23,8 +23,8 @@
const device_type A2BUS_CORVFDC02 = &device_creator<a2bus_corvfdc02_device>;
#define FDC02_ROM_REGION "fdc02_rom"
#define FDC02_FDC_TAG "fdc02_fdc"
#define FDC02_ROM_REGION "fdc02_rom"
#define FDC02_FDC_TAG "fdc02_fdc"
FLOPPY_FORMATS_MEMBER( a2bus_corvfdc02_device::corv_floppy_formats )
FLOPPY_CONCEPT_525DSDD_FORMAT,
@ -86,7 +86,6 @@ a2bus_corvfdc02_device::a2bus_corvfdc02_device(const machine_config &mconfig, de
m_con3(*this, FDC02_FDC_TAG":2"),
m_con4(*this, FDC02_FDC_TAG":3")
{
}
a2bus_corvfdc02_device::a2bus_corvfdc02_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
@ -143,20 +142,20 @@ UINT8 a2bus_corvfdc02_device::read_c0nx(address_space &space, UINT8 offset)
{
switch (offset)
{
case 0: // 765 FIFO
case 0: // 765 FIFO
return m_fdc->fifo_r(space, 0);
case 1: // 765 MSR
case 1: // 765 MSR
return m_fdc->msr_r(space, 0);
case 2: // buffer address
case 2: // buffer address
return (m_bufptr>>1) & 0xff;
case 3:
// printf("Read buffer @ %x = %02x\n", m_bufptr, m_buffer[m_bufptr]);
case 3:
// printf("Read buffer @ %x = %02x\n", m_bufptr, m_buffer[m_bufptr]);
return m_buffer[m_bufptr--];
case 4: // local status
case 4: // local status
if (m_curfloppy)
{
m_fdc_local_status &= ~(1 | 0x40);
@ -188,13 +187,13 @@ void a2bus_corvfdc02_device::write_c0nx(address_space &space, UINT8 offset, UINT
case 1: // FDC ???
break;
case 2: // buffer address
case 2: // buffer address
m_bufptr = (data << 1) | (data & 1);
// printf("%02x to buffer address yields %x\n", data, m_bufptr);
// printf("%02x to buffer address yields %x\n", data, m_bufptr);
break;
case 3: // buffer write
// printf("%02x to buffer[%x]\n", data, m_bufptr);
case 3: // buffer write
// printf("%02x to buffer[%x]\n", data, m_bufptr);
m_buffer[m_bufptr--] = data;
break;
@ -233,12 +232,12 @@ void a2bus_corvfdc02_device::write_c0nx(address_space &space, UINT8 offset, UINT
{
// motor control (active low)
m_curfloppy->mon_w((data & 8) ? 1 : 0);
// printf("Cur drive %p motor %s\n", m_curfloppy, (data & 8) ? "OFF" : "ON");
// printf("Cur drive %p motor %s\n", m_curfloppy, (data & 8) ? "OFF" : "ON");
}
if (data & 0x80)
{
// printf("Reset NEC765\n");
// printf("Reset NEC765\n");
m_fdc->reset();
}
break;
@ -266,7 +265,7 @@ WRITE_LINE_MEMBER(a2bus_corvfdc02_device::intrq_w)
}
else
{
m_fdc_local_status |= 2; // clear IRQ
m_fdc_local_status |= 2; // clear IRQ
lower_slot_irq();
}
}
@ -279,7 +278,7 @@ WRITE_LINE_MEMBER(a2bus_corvfdc02_device::drq_w)
if (m_fdc_local_command & 0x40)
{
m_buffer[m_bufptr] = m_fdc->dma_r();
// printf("DMA %02x to buffer[%x]\n", m_buffer[m_bufptr], m_bufptr);
// printf("DMA %02x to buffer[%x]\n", m_buffer[m_bufptr], m_bufptr);
if (!m_bufptr)
{
@ -296,4 +295,3 @@ WRITE_LINE_MEMBER(a2bus_corvfdc02_device::drq_w)
}
}
}

View File

@ -56,7 +56,7 @@ private:
UINT8 *m_rom;
UINT8 m_fdc_local_status, m_fdc_local_command;
UINT16 m_bufptr;
UINT8 m_buffer[2048]; // 1x6116 SRAM
UINT8 m_buffer[2048]; // 1x6116 SRAM
floppy_image_device *m_curfloppy;
bool m_in_drq;
emu_timer *m_timer;

View File

@ -108,7 +108,7 @@ UINT8 a2bus_laser128_device::read_c800(address_space &space, UINT16 offset)
{
return m_slot7_ram[offset];
}
return m_rom[(offset & 0x3ff) + 0x6000 + m_slot7_bank];
return m_rom[(offset & 0x3ff) + 0x6000 + m_slot7_bank];
}
return 0xff;
@ -124,12 +124,12 @@ void a2bus_laser128_device::write_c800(address_space &space, UINT16 offset, UINT
// UDCREG
if ((m_slot == 7) && (offset == 0x7f8))
{
// printf("%02x to UDCREG\n", data);
// printf("%02x to UDCREG\n", data);
m_slot7_ram_bank = (data & 0x8) ? 0x400 : 0;
m_slot7_bank = (((data >> 4) & 0x7) * 0x400);
// printf("\tRAM bank %x, ROM bank %x\n", m_slot7_ram_bank, m_slot7_bank);
// printf("\tRAM bank %x, ROM bank %x\n", m_slot7_ram_bank, m_slot7_bank);
}
}

View File

@ -3,18 +3,18 @@
mouse.c
Implemention of the Apple II Mouse Card
Apple II Mouse Interface PCB
Apple 1983
Apple 1983
This is a mouse interface for the Apple II
This is a mouse interface for the Apple II
PCB Layout
----------
apple computer
MOUSE INTERFACE
670-0030-C (C) 1983
Printed on back side - MOUSE INTERFACE 820-0104-B (C) 1983 APPLE COMPUTER
PCB Layout
----------
apple computer
MOUSE INTERFACE
670-0030-C (C) 1983
Printed on back side - MOUSE INTERFACE 820-0104-B (C) 1983 APPLE COMPUTER
|-----------------------------------|
| PAL16R4 6821 |
| |
@ -25,40 +25,40 @@
|-------------------| |-|
|-------------|
Notes:
J1 - 9 pin flat cable with female DB9 connector
68705P3 - Motorola MC68705P3 microcontroller (DIP28) labelled '341-0269 (C) APPLE'
PCB printed '(C) APPLE 1983 341-0269 or 342-0285'
8516 - Fujitsu MB8516 2k x8-bit EPROM (DIP24) labelled '341-0270-C (C) APPLE 1983'
PCB printed '(C) APPLE 1983 342-0270'
PAL16R4 - MMI PAL16R4ACN (DIP20) marked '341-0268-A'
PCB printed '(C) APPLE 1983 342-0268'
6821 - AMI 6821 Peripheral Interface Adapter (DIP40)
X1/X2 - Jumper pads. X1 is open, X2 is closed.
Notes:
J1 - 9 pin flat cable with female DB9 connector
68705P3 - Motorola MC68705P3 microcontroller (DIP28) labelled '341-0269 (C) APPLE'
PCB printed '(C) APPLE 1983 341-0269 or 342-0285'
8516 - Fujitsu MB8516 2k x8-bit EPROM (DIP24) labelled '341-0270-C (C) APPLE 1983'
PCB printed '(C) APPLE 1983 342-0270'
PAL16R4 - MMI PAL16R4ACN (DIP20) marked '341-0268-A'
PCB printed '(C) APPLE 1983 342-0268'
6821 - AMI 6821 Peripheral Interface Adapter (DIP40)
X1/X2 - Jumper pads. X1 is open, X2 is closed.
Hookup notes:
PIA port A connects to 68705 port A in its entirety (bi-directional)
PIA PB4-PB7 connects to 68705 PC0-3 (bi-directional)
PIA PB0 is 'sync latch'
PIA PB1 is A8 on the EPROM
PIA PB2 is A9 on the EPROM
PIA PB3 is A10 on the EPROM
68705 PB0 is mouse X1
68705 PB1 is mouse X0
68705 PB2 is mouse Y0
68705 PB3 is mouse Y1
68705 PB4 and 5 are N/C
68705 PB6 is IRQ for the slot
68705 PB7 is the mouse button
68705 is clocked at 2M
PIA is clocked at 1M
PIA port A connects to 68705 port A in its entirety (bi-directional)
PIA PB4-PB7 connects to 68705 PC0-3 (bi-directional)
PIA PB0 is 'sync latch'
PIA PB1 is A8 on the EPROM
PIA PB2 is A9 on the EPROM
PIA PB3 is A10 on the EPROM
68705 PB0 is mouse X1
68705 PB1 is mouse X0
68705 PB2 is mouse Y0
68705 PB3 is mouse Y1
68705 PB4 and 5 are N/C
68705 PB6 is IRQ for the slot
68705 PB7 is the mouse button
68705 is clocked at 2M
PIA is clocked at 1M
See the schematic at:
http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Digitizers/Apple%20Mouse%20Interface%20Card/Schematics/
http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Digitizers/Apple%20Mouse%20Interface%20Card/Schematics/
*********************************************************************/
#include "mouse.h"
@ -73,17 +73,17 @@
const device_type A2BUS_MOUSE = &device_creator<a2bus_mouse_device>;
#define MOUSE_ROM_REGION "a2mse_rom"
#define MOUSE_PIA_TAG "a2mse_pia"
#define MOUSE_MCU_TAG "a2mse_mcu"
#define MOUSE_MCU_ROM "a2mse_mcurom"
#define MOUSE_ROM_REGION "a2mse_rom"
#define MOUSE_PIA_TAG "a2mse_pia"
#define MOUSE_MCU_TAG "a2mse_mcu"
#define MOUSE_MCU_ROM "a2mse_mcurom"
#define MOUSE_BUTTON_TAG "a2mse_button"
#define MOUSE_XAXIS_TAG "a2mse_x"
#define MOUSE_YAXIS_TAG "a2mse_y"
#define MOUSE_BUTTON_TAG "a2mse_button"
#define MOUSE_XAXIS_TAG "a2mse_x"
#define MOUSE_YAXIS_TAG "a2mse_y"
#define TIMER_68705 0
#define TIMER_QUADRATURE 1
#define TIMER_68705 0
#define TIMER_QUADRATURE 1
static ADDRESS_MAP_START( mcu_mem, AS_PROGRAM, 8, a2bus_mouse_device )
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
@ -113,14 +113,14 @@ MACHINE_CONFIG_END
ROM_START( mouse )
ROM_REGION(0x800, MOUSE_ROM_REGION, 0)
ROM_LOAD( "341-0270-c.4b", 0x000000, 0x000800, CRC(0bcd1e8e) SHA1(3a9d881a8a8d30f55b9719aceebbcf717f829d6f) )
ROM_LOAD( "341-0270-c.4b", 0x000000, 0x000800, CRC(0bcd1e8e) SHA1(3a9d881a8a8d30f55b9719aceebbcf717f829d6f) )
ROM_REGION(0x800, MOUSE_MCU_ROM, 0)
ROM_LOAD( "341-0269.2b", 0x000000, 0x000800, CRC(94067f16) SHA1(3a2baa6648efe4456d3ec3721216e57c64f7acfc) )
ROM_LOAD( "341-0269.2b", 0x000000, 0x000800, CRC(94067f16) SHA1(3a2baa6648efe4456d3ec3721216e57c64f7acfc) )
ROM_REGION(0xc00, "pal", 0)
ROM_LOAD( "mmi_pal16r4a(jedec).2a", 0x000000, 0x000b04, CRC(1d620ee5) SHA1(5aa9a515c919ff7a18878649cac5d44f0c2abf28) )
ROM_LOAD( "mmi_pal16r4a(binary).2a", 0x000000, 0x000100, CRC(1da5c745) SHA1(ba267b69a2fda2a2348b140979ece562411bb37b) )
ROM_LOAD( "mmi_pal16r4a(jedec).2a", 0x000000, 0x000b04, CRC(1d620ee5) SHA1(5aa9a515c919ff7a18878649cac5d44f0c2abf28) )
ROM_LOAD( "mmi_pal16r4a(binary).2a", 0x000000, 0x000100, CRC(1da5c745) SHA1(ba267b69a2fda2a2348b140979ece562411bb37b) )
ROM_END
static INPUT_PORTS_START( mouse )
@ -241,7 +241,7 @@ void a2bus_mouse_device::device_reset()
m_rom_bank = 0;
last_mx = last_my = count_x = count_y = 0;
m_timer_cnt = 0xff;
m_timer_ctl = 0x40; // disable interrupt, everything else clear
m_timer_ctl = 0x40; // disable interrupt, everything else clear
m_port_a_in = 0;
m_port_b_in = 0x80;
m_port_c_in = 0;
@ -261,7 +261,7 @@ void a2bus_mouse_device::device_reset()
UINT8 a2bus_mouse_device::read_c0nx(address_space &space, UINT8 offset)
{
return m_pia->read(space, offset & 3);
return m_pia->read(space, offset & 3);
}
@ -394,10 +394,10 @@ WRITE8_MEMBER(a2bus_mouse_device::mcu_timer_w)
m_timer_cnt = data;
recalc = true;
}
// offset 1 = timer control: b7 = IRQ, b6 = IRQ mask (1=suppress),
// b5 = input select (0=CPU clk, 1=ext),
// b4 = enable external timer input,
// b3 = clear, b2-b0 = scaler (1/2/4/8/16/32/64/128)
// offset 1 = timer control: b7 = IRQ, b6 = IRQ mask (1=suppress),
// b5 = input select (0=CPU clk, 1=ext),
// b4 = enable external timer input,
// b3 = clear, b2-b0 = scaler (1/2/4/8/16/32/64/128)
else
{
// clearing the interrupt?
@ -425,7 +425,7 @@ WRITE8_MEMBER(a2bus_mouse_device::mcu_timer_w)
recalc = true;
}
m_timer_ctl = data;
m_timer_ctl = data;
}
}
@ -445,15 +445,15 @@ WRITE8_MEMBER(a2bus_mouse_device::mcu_timer_w)
X1 = gate, must go 0/1 for each pixel moved
Y0 = direction, 0 = up, 1 = down
Y1 = gate, must go 0/1 for each pixel moved
The direction must stay constant for a given train of gate pulses or the MCU will get confused.
*/
void a2bus_mouse_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
if (id == TIMER_68705) // 68705's built-in timer
if (id == TIMER_68705) // 68705's built-in timer
{
m_timer_ctl |= 0x80; // indicate timer expired
if (!(m_timer_ctl & 0x40)) // if interrupt not suppressed, fire!
if (!(m_timer_ctl & 0x40)) // if interrupt not suppressed, fire!
{
m_mcu->set_input_line(M68705_INT_TIMER, ASSERT_LINE);
}
@ -509,9 +509,9 @@ void a2bus_mouse_device::device_timer(emu_timer &timer, device_timer_id id, int
else
{
count_x--;
m_port_b_in |= 0x01; // X1
m_port_b_in |= 0x01; // X1
}
m_port_b_in |= 0x02; // X0
m_port_b_in |= 0x02; // X0
}
else if (count_y)
{
@ -522,9 +522,9 @@ void a2bus_mouse_device::device_timer(emu_timer &timer, device_timer_id id, int
else
{
count_y--;
m_port_b_in |= 0x04; // Y0
m_port_b_in |= 0x04; // Y0
}
m_port_b_in |= 0x08; // Y1
m_port_b_in |= 0x08; // Y1
}
}
}

View File

@ -20,17 +20,17 @@
|____________________________ _|
| |
|______________________|
DIPS: 1:SET 2:MODE 3:NMI 4:IRQ
1 & 4 are on by default.
J1: 8 pins for X10 home control functions (top to bottom)
1: ADJ 2: 5V 3: MODE 4: GND
5: A 6: 5V 7: B 8: GND
X10 functions not supported.
*********************************************************************/
#include "timemasterho.h"
@ -45,9 +45,9 @@
const device_type A2BUS_TIMEMASTERHO = &device_creator<a2bus_timemasterho_device>;
#define TIMEMASTER_ROM_REGION "timemst_rom"
#define TIMEMASTER_PIA_TAG "timemst_pia"
#define TIMEMASTER_M5832_TAG "timemst_msm"
#define TIMEMASTER_ROM_REGION "timemst_rom"
#define TIMEMASTER_PIA_TAG "timemst_pia"
#define TIMEMASTER_M5832_TAG "timemst_msm"
MACHINE_CONFIG_FRAGMENT( timemaster )
MCFG_DEVICE_ADD(TIMEMASTER_PIA_TAG, PIA6821, 1021800)
@ -61,26 +61,26 @@ MACHINE_CONFIG_END
ROM_START( timemaster )
ROM_REGION(0x1000, TIMEMASTER_ROM_REGION, 0)
ROM_LOAD( "ae timemaster ii h.o. rom rev. 5.bin", 0x000000, 0x001000, CRC(ff5bd644) SHA1(ae0173da61581a06188c1bee89e95a0aa536c411) )
ROM_LOAD( "ae timemaster ii h.o. rom rev. 5.bin", 0x000000, 0x001000, CRC(ff5bd644) SHA1(ae0173da61581a06188c1bee89e95a0aa536c411) )
ROM_END
static INPUT_PORTS_START( tmho )
PORT_START("DSW1")
PORT_DIPNAME( 0x01, 0x01, "Set")
PORT_DIPSETTING( 0x00, "Apple can't set clock")
PORT_DIPSETTING( 0x01, "Apple can set clock")
PORT_DIPSETTING( 0x00, "Apple can't set clock")
PORT_DIPSETTING( 0x01, "Apple can set clock")
PORT_DIPNAME( 0x02, 0x00, "Mode")
PORT_DIPSETTING( 0x00, "TimeMaster")
PORT_DIPSETTING( 0x02, "Mountain AppleClock")
PORT_DIPSETTING( 0x00, "TimeMaster")
PORT_DIPSETTING( 0x02, "Mountain AppleClock")
PORT_DIPNAME( 0x04, 0x00, "NMI")
PORT_DIPSETTING( 0x00, DEF_STR(Off))
PORT_DIPSETTING( 0x04, DEF_STR(On))
PORT_DIPSETTING( 0x00, DEF_STR(Off))
PORT_DIPSETTING( 0x04, DEF_STR(On))
PORT_DIPNAME( 0x08, 0x08, "IRQ")
PORT_DIPSETTING( 0x00, DEF_STR(Off))
PORT_DIPSETTING( 0x08, DEF_STR(On))
PORT_DIPSETTING( 0x00, DEF_STR(Off))
PORT_DIPSETTING( 0x08, DEF_STR(On))
INPUT_PORTS_END
/***************************************************************************
@ -154,7 +154,7 @@ void a2bus_timemasterho_device::device_start()
void a2bus_timemasterho_device::device_reset()
{
m_msm5832->cs_w(ASSERT_LINE); // CS is tied to Vcc
m_msm5832->cs_w(ASSERT_LINE); // CS is tied to Vcc
m_started = true;
}
@ -167,7 +167,7 @@ UINT8 a2bus_timemasterho_device::read_c0nx(address_space &space, UINT8 offset)
{
if (offset <= 3)
{
return m_pia->read(space, offset);
return m_pia->read(space, offset);
}
return 0xff;
@ -194,7 +194,7 @@ UINT8 a2bus_timemasterho_device::read_cnxx(address_space &space, UINT8 offset)
{
if (m_started)
{
if (!(m_dsw1->read() & 2)) // TimeMaster native
if (!(m_dsw1->read() & 2)) // TimeMaster native
{
return m_rom[offset+0xc00];
}
@ -228,7 +228,7 @@ WRITE8_MEMBER(a2bus_timemasterho_device::pia_out_b)
{
if (m_dsw1->read() & 1)
{
m_msm5832->write_w((data >> 6) & 1 ? ASSERT_LINE : CLEAR_LINE);
m_msm5832->write_w((data >> 6) & 1 ? ASSERT_LINE : CLEAR_LINE);
}
}
@ -277,4 +277,3 @@ WRITE_LINE_MEMBER(a2bus_timemasterho_device::pia_irqb_w)
m_irqb = state;
update_irqs();
}

View File

@ -20,10 +20,10 @@ static SLOT_INTERFACE_START(a7800_cart)
SLOT_INTERFACE_INTERNAL("a78_abs", A78_ROM_ABSOLUTE)
SLOT_INTERFACE_INTERNAL("a78_act", A78_ROM_ACTIVISION)
SLOT_INTERFACE_INTERNAL("a78_hsc", A78_HISCORE)
SLOT_INTERFACE_INTERNAL("a78_xboard", A78_XBOARD) // the actual XBoarD expansion (as passthru)
SLOT_INTERFACE_INTERNAL("a78_xm", A78_XM) // the actual XM expansion (as passthru)
SLOT_INTERFACE_INTERNAL("a78_megacart", A78_ROM_MEGACART)
SLOT_INTERFACE_INTERNAL("a78_versa", A78_ROM_VERSABOARD)
SLOT_INTERFACE_INTERNAL("a78_xboard", A78_XBOARD) // the actual XBoarD expansion (as passthru)
SLOT_INTERFACE_INTERNAL("a78_xm", A78_XM) // the actual XM expansion (as passthru)
SLOT_INTERFACE_INTERNAL("a78_megacart", A78_ROM_MEGACART)
SLOT_INTERFACE_INTERNAL("a78_versa", A78_ROM_VERSABOARD)
// cart variants with a POKEY at 0x0450 (typically a VersaBoard variant, or an homebrew pcb)
SLOT_INTERFACE_INTERNAL("a78_p450_t0", A78_ROM_P450)
SLOT_INTERFACE_INTERNAL("a78_p450_t1", A78_ROM_P450_POKEY)

View File

@ -21,7 +21,7 @@
- read_40xx/write_40xx for accesses in the $4000 to $ffff range
even if not all carts use all of them (in particular no cart type
seems to use access to the ranges $0500 to $0fff and $2800 to $2fff)
***********************************************************************************************************/
@ -70,15 +70,15 @@ void device_a78_cart_interface::rom_alloc(UINT32 size, const char *tag)
tempstring.cat(A78SLOT_ROM_REGION_TAG);
m_rom = device().machine().memory().region_alloc(tempstring, size, 1, ENDIANNESS_LITTLE)->base();
m_rom_size = size;
// setup other helpers
if ((size / 0x4000) & 1) // compensate for SuperGame carts with 9 x 16K banks (to my knowledge no other cart has m_bank_mask != power of 2)
m_bank_mask = (size / 0x4000) - 2;
else
m_bank_mask = (size / 0x4000) - 1;
// the rom is mapped to the top of the memory area
// so we store the starting point of data to simplify
// so we store the starting point of data to simplify
// the access handling
m_base_rom = 0x10000 - size;
}
@ -272,7 +272,7 @@ int a78_cart_slot_device::validate_header(int head, bool log)
}
head &= 0xff00;
}
if ((head & 0xff00) > 0x300)
{
if (log)
@ -282,7 +282,7 @@ int a78_cart_slot_device::validate_header(int head, bool log)
}
head &= 0x00ff;
}
return head;
}
@ -329,7 +329,7 @@ static int a78_get_pcb_id(const char *slot)
if (!core_stricmp(slot_list[i].slot_option, slot))
return slot_list[i].pcb_id;
}
return 0;
}
@ -340,7 +340,7 @@ static const char *a78_get_slot(int type)
if (slot_list[i].pcb_id == type)
return slot_list[i].slot_option;
}
return "a78_rom";
}
@ -349,17 +349,17 @@ bool a78_cart_slot_device::call_load()
if (m_cart)
{
UINT32 len;
if (software_entry() != NULL)
{
const char *pcb_name;
bool has_ram = get_software_region("ram") ? TRUE : FALSE;
bool has_nvram = get_software_region("nvram") ? TRUE : FALSE;
len = get_software_region_length("rom");
m_cart->rom_alloc(len, tag());
memcpy(m_cart->get_rom_base(), get_software_region("rom"), len);
if ((pcb_name = get_feature("slot")) != NULL)
m_type = a78_get_pcb_id(pcb_name);
else
@ -377,19 +377,19 @@ bool a78_cart_slot_device::call_load()
{
// Load and check the header
int mapper;
char head[128];
char head[128];
fread(head, 128);
if (verify_header((char *)head) == IMAGE_VERIFY_FAIL)
return IMAGE_INIT_FAIL;
len = (head[49] << 24) | (head[50] << 16) | (head[51] << 8) | head[52];
if (len + 128 > length())
{
logerror("Invalid length in the header. The game might be corrupted.\n");
len = length() - 128;
}
// let's try to auto-fix some common errors in the header
mapper = validate_header((head[53] << 8) | head[54], TRUE);
@ -415,7 +415,7 @@ bool a78_cart_slot_device::call_load()
m_type = A78_VERSABOARD;
break;
}
// check if cart has a POKEY at $0450 (typically a VersaBoard variant)!
if (mapper & 0x40)
{
@ -425,7 +425,7 @@ bool a78_cart_slot_device::call_load()
m_type += A78_POKEY0450;
}
}
// check special bits, which override the previous
if ((mapper & 0xff00) == 0x0100)
m_type = A78_ACTIVISION;
@ -452,10 +452,10 @@ bool a78_cart_slot_device::call_load()
}
internal_header_logging((UINT8 *)head, length());
m_cart->rom_alloc(len, tag());
fread(m_cart->get_rom_base(), len);
if (m_type == A78_TYPE6)
m_cart->ram_alloc(0x4000);
if (m_type == A78_MEGACART || (m_type >= A78_VERSABOARD && m_type <= A78_VERSA_POK450))
@ -468,7 +468,7 @@ bool a78_cart_slot_device::call_load()
battery_load(m_cart->get_nvram_base(), 0x800, 0xff);
}
}
//printf("Type: %s\n", a78_get_slot(m_type));
}
return IMAGE_INIT_PASS;
@ -476,7 +476,7 @@ bool a78_cart_slot_device::call_load()
void a78_partialhash(hash_collection &dest, const unsigned char *data,
unsigned long length, const char *functions)
unsigned long length, const char *functions)
{
if (length <= 128)
return;
@ -537,13 +537,13 @@ void a78_cart_slot_device::get_default_card_software(astring &result)
const char *slot_string = "a78_rom";
dynamic_buffer head(128);
int type = A78_TYPE0, mapper;
// Load and check the header
core_fread(m_file, head, 128);
core_fread(m_file, head, 128);
// let's try to auto-fix some common errors in the header
mapper = validate_header((head[53] << 8) | head[54], FALSE);
switch (mapper & 0x2e)
{
case 0x0000:
@ -566,7 +566,7 @@ void a78_cart_slot_device::get_default_card_software(astring &result)
type = A78_VERSABOARD;
break;
}
// check if cart has a POKEY at $0450 (typically a VersaBoard variant)!
if (mapper & 0x40)
{
@ -576,18 +576,18 @@ void a78_cart_slot_device::get_default_card_software(astring &result)
type += A78_POKEY0450;
}
}
// check special bits, which override the previous
if ((mapper & 0xff00) == 0x0100)
type = A78_ACTIVISION;
else if ((mapper & 0xff00) == 0x0200)
type = A78_ABSOLUTE;
logerror("Cart type: %x\n", type);
slot_string = a78_get_slot(type);
clear();
result.cpy(slot_string);
}
else
@ -663,9 +663,9 @@ WRITE8_MEMBER(a78_cart_slot_device::write_40xx)
/*-------------------------------------------------
A78 header logging
A78 HEADER FORMAT
Bytes | Content | Length
========================================
0 | Header version | 1 byte
@ -679,7 +679,7 @@ WRITE8_MEMBER(a78_cart_slot_device::write_40xx)
53..54 | Cart type [*] | 2 bytes
-------|-------------------|------------
55 | Controller 1 type | 1 byte
| |
| |
| 0 = None |
| 1 = Joystick |
| 2 = Light Gun |
@ -690,23 +690,23 @@ WRITE8_MEMBER(a78_cart_slot_device::write_40xx)
-------|-------------------|------------
57 | TV System | 1 byte
| |
| 0 = NTSC/1 = PAL |
| 0 = NTSC/1 = PAL |
-------|-------------------|------------
58 | Save data | 1 byte
| | (only v2)
| 0 = None / Unk |
| 1 = High Score |
| 2 = Savekey |
-------|-------------------|-----------
-------|-------------------|-----------
63 | Expansion module | 1 byte
| |
| 0 = No expansion |
| module |
| 1 = Expansion |
| required |
-------|-------------------|-----------
-------|-------------------|-----------
[*] Cart type:
bit 0-7 - Hardware "flags"
@ -716,13 +716,13 @@ WRITE8_MEMBER(a78_cart_slot_device::write_40xx)
bit 3 [0x08] - bank 0 of 144K ROM at $4000
bit 4 [0x10] - bank 6 at $4000
bit 5 [0x20] - banked RAM at $4000
bit 8-15 - Special values
0 = Normal cart
1 = Absolute (F18 Hornet)
2 = Activision (Double Dragon & Rampage)
3 = POKEY at $0450
-------------------------------------------------*/
void a78_cart_slot_device::internal_header_logging(UINT8 *header, UINT32 len)
@ -788,7 +788,7 @@ void a78_cart_slot_device::internal_header_logging(UINT8 *header, UINT32 len)
ctrl1.cpy("Unknown controller");
break;
}
switch (head_ctrl2)
{
case 0x00:
@ -804,10 +804,10 @@ void a78_cart_slot_device::internal_header_logging(UINT8 *header, UINT32 len)
ctrl2.cpy("Unknown controller");
break;
}
logerror( "ROM DETAILS\n" );
logerror( "===========\n\n" );
logerror( "\tTotal length (with header): 0x%x (%dK + 128b header)\n\n", len, len/0x400);
logerror( "\tTotal length (with header): 0x%x (%dK + 128b header)\n\n", len, len/0x400);
logerror( "HEADER DETAILS\n" );
logerror( "==============\n\n" );
logerror( "\tTitle: %.32s\n", head_title);
@ -829,5 +829,5 @@ void a78_cart_slot_device::internal_header_logging(UINT8 *header, UINT32 len)
logerror( "\n");
logerror( "\tController 1: 0x%.2X [%s]\n", head_ctrl1, ctrl1.cstr());
logerror( "\tController 2: 0x%.2X [%s]\n", head_ctrl2, ctrl2.cstr());
logerror( "\tVideo: %s\n", (head_ispal) ? "PAL" : "NTSC");
logerror( "\tVideo: %s\n", (head_ispal) ? "PAL" : "NTSC");
}

View File

@ -12,19 +12,19 @@
/* PCB */
enum
{
A78_TYPE0 = 0, // standard 8K/16K/32K games, no bankswitch
A78_TYPE1, // as TYPE0 + POKEY chip on the PCB
A78_TYPE2, // Atari SuperGame pcb (8x16K banks with bankswitch)
A78_TYPE3, // as TYPE1 + POKEY chip on the PCB
A78_TYPE6, // as TYPE1 + RAM IC on the PCB
A78_TYPEA, // Alien Brigade, Crossbow (9x16K banks with diff bankswitch)
A78_ABSOLUTE, // F18 Hornet
A78_ACTIVISION, // Double Dragon, Rampage
A78_HSC, // Atari HighScore cart
A78_XB_BOARD, // A7800 Expansion Board (it shall more or less apply to the Expansion Module too, but this is not officially released yet)
A78_XM_BOARD, // A7800 XM Expansion Module (theoretical specs only, since this is not officially released yet)
A78_MEGACART, // Homebrew by CPUWIZ, consists of SuperGame bank up to 512K + 32K RAM banked
A78_VERSABOARD = 0x10, // Homebrew by CPUWIZ, consists of SuperGame bank up to 256K + 32K RAM banked
A78_TYPE0 = 0, // standard 8K/16K/32K games, no bankswitch
A78_TYPE1, // as TYPE0 + POKEY chip on the PCB
A78_TYPE2, // Atari SuperGame pcb (8x16K banks with bankswitch)
A78_TYPE3, // as TYPE1 + POKEY chip on the PCB
A78_TYPE6, // as TYPE1 + RAM IC on the PCB
A78_TYPEA, // Alien Brigade, Crossbow (9x16K banks with diff bankswitch)
A78_ABSOLUTE, // F18 Hornet
A78_ACTIVISION, // Double Dragon, Rampage
A78_HSC, // Atari HighScore cart
A78_XB_BOARD, // A7800 Expansion Board (it shall more or less apply to the Expansion Module too, but this is not officially released yet)
A78_XM_BOARD, // A7800 XM Expansion Module (theoretical specs only, since this is not officially released yet)
A78_MEGACART, // Homebrew by CPUWIZ, consists of SuperGame bank up to 512K + 32K RAM banked
A78_VERSABOARD = 0x10, // Homebrew by CPUWIZ, consists of SuperGame bank up to 256K + 32K RAM banked
// VersaBoard variants configured as Type 1/3/A or VersaBoard + POKEY at $0450
A78_TYPE0_POK450 = 0x20,
A78_TYPE1_POK450 = 0x21,
@ -68,7 +68,7 @@ protected:
UINT8 *m_rom;
UINT32 m_rom_size;
dynamic_buffer m_ram;
dynamic_buffer m_nvram; // HiScore cart can save scores!
dynamic_buffer m_nvram; // HiScore cart can save scores!
// helpers
UINT32 m_base_rom;
int m_bank_mask;
@ -101,7 +101,7 @@ public:
int get_cart_type() { return m_type; };
int identify_cart_type(UINT8 *ROM, UINT32 len);
bool has_cart() { return m_cart != NULL; }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
virtual bool is_writeable() const { return 0; }
@ -125,7 +125,7 @@ public:
virtual DECLARE_WRITE8_MEMBER(write_10xx);
virtual DECLARE_WRITE8_MEMBER(write_30xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
private:
device_a78_cart_interface* m_cart;
int m_type;

View File

@ -3,26 +3,26 @@
/***********************************************************************************************************
A7800 CPUWIZ's homebrew boards (MegaCart+ and VersaBoard)
Here we emulate the base configurations of these two boards:
MegaCart+ = up to 512K (31 banks at $8000, 1 at $C000) of ROM and 2 x 16K RAM @ $4000
VersaBoard = up to 256K of ROM and 2 x 16K RAM
Plus, for the moment, a VersaBoard with POKEY mapped at 0x0450 and support for 144K ROM,
since a few demo homebrew programs seems to use this to combine compatibility with
Plus, for the moment, a VersaBoard with POKEY mapped at 0x0450 and support for 144K ROM,
since a few demo homebrew programs seems to use this to combine compatibility with
XBoarD & XM expansions
Note that the VersaBoard can be configured to work with different banking hardware
e.g. with SG 9bank games or with SG + RAM (so to allow reproduction of games which
could have worked on old carts without sacrifying original carts), but games running
could have worked on old carts without sacrifying original carts), but games running
on those "standard" variants can be emulated with the standard code from rom.c ;-)
TO DO:
- investigate whether the POKEY detection routines in homebrew do fail due to emulation
issues or not
***********************************************************************************************************/
@ -86,7 +86,7 @@ READ8_MEMBER(a78_versaboard_device::read_40xx)
else if (offset < 0x8000)
return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
else
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
}
WRITE8_MEMBER(a78_versaboard_device::write_40xx)
@ -130,5 +130,3 @@ machine_config_constructor a78_rom_p450_vb_device::device_mconfig_additions() co
{
return MACHINE_CONFIG_NAME( a78_pokeyvb );
}

View File

@ -15,15 +15,15 @@ public:
// construction/destruction
a78_versaboard_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
a78_versaboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
protected:
int m_ram_bank;
};
@ -36,7 +36,7 @@ class a78_megacart_device : public a78_versaboard_device
public:
// construction/destruction
a78_megacart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_WRITE8_MEMBER(write_40xx);
};
@ -51,14 +51,14 @@ class a78_rom_p450_vb_device : public a78_versaboard_device
public:
// construction/destruction
a78_rom_p450_vb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx) { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_04xx) { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
protected:
required_device<pokey_device> m_pokey450;
};

View File

@ -3,7 +3,7 @@
/***********************************************************************************************************
A7800 HighScore passthrough cart emulation
***********************************************************************************************************/
@ -75,4 +75,3 @@ WRITE8_MEMBER(a78_hiscore_device::write_40xx)
{
m_hscslot->write_40xx(space, offset, data);
}

View File

@ -14,10 +14,10 @@ class a78_hiscore_device : public a78_rom_device
public:
// construction/destruction
a78_hiscore_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx);
virtual DECLARE_WRITE8_MEMBER(write_04xx);

View File

@ -10,7 +10,7 @@
- 9 banks or not
etc...
But we might merge many of these if they become too many
TODO:
- Are POKEY regs readable somewhere in SG 144K + POKEY homebrew? How do they detect
the POKEY otherwise?!?
@ -232,11 +232,11 @@ READ8_MEMBER(a78_rom_device::read_40xx)
/*-------------------------------------------------
Carts with no bankswitch + POKEY chip
The Pokey chips is accessed by writing at
The Pokey chips is accessed by writing at
0x4000-0x7fff.
GAMES: Ballblazer, Beef Drop (homebrew)
-------------------------------------------------*/
READ8_MEMBER(a78_rom_pokey_device::read_40xx)
@ -274,19 +274,19 @@ machine_config_constructor a78_rom_pokey_device::device_mconfig_additions() cons
some test is run)
Note that the code is written so that also
homebrew games with larger ROMs work!
GAMES: Crack'd, Fatal Run, Ikari Warriors...
-------------------------------------------------*/
READ8_MEMBER(a78_rom_sg_device::read_40xx)
{
if (offset < 0x4000)
return m_rom[(offset & 0x3fff) + ((m_bank_mask - 1) * 0x4000)]; // second to last bank (is this always ok?!?)
return m_rom[(offset & 0x3fff) + ((m_bank_mask - 1) * 0x4000)]; // second to last bank (is this always ok?!?)
else if (offset < 0x8000)
return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
else
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
}
WRITE8_MEMBER(a78_rom_sg_device::write_40xx)
@ -300,9 +300,9 @@ WRITE8_MEMBER(a78_rom_sg_device::write_40xx)
Carts with SuperGame bankswitch + POKEY chip
As above + Pokey chip access
GAMES: Commando
-------------------------------------------------*/
READ8_MEMBER(a78_rom_sg_pokey_device::read_40xx)
@ -312,7 +312,7 @@ READ8_MEMBER(a78_rom_sg_pokey_device::read_40xx)
else if (offset < 0x8000)
return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
else
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
}
WRITE8_MEMBER(a78_rom_sg_pokey_device::write_40xx)
@ -332,12 +332,12 @@ machine_config_constructor a78_rom_sg_pokey_device::device_mconfig_additions() c
/*-------------------------------------------------
Carts with SuperGame bankswitch + 16K RAM
FIXME: Some games contained only 8K of RAM, but
FIXME: Some games contained only 8K of RAM, but
for the moment we treat all as 16K of RAM even if
from softlist we shall differentiate between them.
GAMES: Impossible Mission, Jinks and some protos
-------------------------------------------------*/
READ8_MEMBER(a78_rom_sg_ram_device::read_40xx)
@ -347,7 +347,7 @@ READ8_MEMBER(a78_rom_sg_ram_device::read_40xx)
else if (offset < 0x8000)
return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
else
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)]; // last bank
}
WRITE8_MEMBER(a78_rom_sg_ram_device::write_40xx)
@ -364,11 +364,11 @@ WRITE8_MEMBER(a78_rom_sg_ram_device::write_40xx)
Carts with SuperGame bankswitch 9banks:
9 x 16K banks mappable in 0x8000-0xbfff
bank 7 is always mapped in 0xc000-0xffff
GAMES: Alien Brigade & Crossbow + some homebrew
like Donkey Kong XM demo, Bentley Bear's Crystal
GAMES: Alien Brigade & Crossbow + some homebrew
like Donkey Kong XM demo, Bentley Bear's Crystal
Quest
-------------------------------------------------*/
READ8_MEMBER(a78_rom_sg9_device::read_40xx)
@ -378,7 +378,7 @@ READ8_MEMBER(a78_rom_sg9_device::read_40xx)
else if (offset < 0x8000)
return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
else
return m_rom[(offset & 0x3fff) + ((m_bank_mask + 1) * 0x4000)]; // last bank
return m_rom[(offset & 0x3fff) + ((m_bank_mask + 1) * 0x4000)]; // last bank
}
WRITE8_MEMBER(a78_rom_sg9_device::write_40xx)
@ -388,14 +388,14 @@ WRITE8_MEMBER(a78_rom_sg9_device::write_40xx)
}
/*-------------------------------------------------
Carts with Absolute bankswitch:
64K games. Lower 32K are 2 banks of 16K to be mapped
in 0x4000-0x7fff, depending on the value written
at 0x8000. Higher 32K are fixed in 0x8000-0xffff
GAMES: F-18 Hornet
-------------------------------------------------*/
READ8_MEMBER(a78_rom_abs_device::read_40xx)
@ -431,9 +431,9 @@ WRITE8_MEMBER(a78_rom_abs_device::write_40xx)
0x6000-0x7fff first 8kb of bank 6
0x8000-0x9fff second 8kb of bank 7
0xe000-0xffff first 8kb of bank 7
GAMES: Double Dragon, Rampage.
-------------------------------------------------*/
READ8_MEMBER(a78_rom_act_device::read_40xx)
@ -495,4 +495,3 @@ machine_config_constructor a78_rom_p450_sg9_device::device_mconfig_additions() c
{
return MACHINE_CONFIG_NAME( a78_pokey450 );
}

View File

@ -34,14 +34,14 @@ public:
// construction/destruction
a78_rom_pokey_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
a78_rom_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
protected:
required_device<pokey_device> m_pokey;
};
@ -55,11 +55,11 @@ public:
// construction/destruction
a78_rom_sg_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
a78_rom_sg_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
@ -76,14 +76,14 @@ class a78_rom_sg_pokey_device : public a78_rom_sg_device
public:
// construction/destruction
a78_rom_sg_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
protected:
required_device<pokey_device> m_pokey;
};
@ -97,7 +97,7 @@ public:
// construction/destruction
a78_rom_sg_ram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
a78_rom_sg_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
@ -112,7 +112,7 @@ public:
// construction/destruction
a78_rom_sg9_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
a78_rom_sg9_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
@ -126,15 +126,15 @@ class a78_rom_abs_device : public a78_rom_device
public:
// construction/destruction
a78_rom_abs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
protected:
int m_bank;
};
@ -147,15 +147,15 @@ class a78_rom_act_device : public a78_rom_device
public:
// construction/destruction
a78_rom_act_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_40xx);
virtual DECLARE_WRITE8_MEMBER(write_40xx);
protected:
int m_bank;
};
@ -170,13 +170,13 @@ class a78_rom_p450_device : public a78_rom_device
public:
// construction/destruction
a78_rom_p450_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx) { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_04xx) { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
protected:
required_device<pokey_device> m_pokey450;
};
@ -189,13 +189,13 @@ class a78_rom_p450_pokey_device : public a78_rom_pokey_device
public:
// construction/destruction
a78_rom_p450_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx) { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_04xx) { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
protected:
required_device<pokey_device> m_pokey450;
};
@ -208,13 +208,13 @@ class a78_rom_p450_sg_ram_device : public a78_rom_sg_ram_device
public:
// construction/destruction
a78_rom_p450_sg_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx) { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_04xx) { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
protected:
required_device<pokey_device> m_pokey450;
};
@ -227,13 +227,13 @@ class a78_rom_p450_sg9_device : public a78_rom_sg9_device
public:
// construction/destruction
a78_rom_p450_sg9_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual machine_config_constructor device_mconfig_additions() const;
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx) { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_04xx) { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
protected:
required_device<pokey_device> m_pokey450;
};

View File

@ -3,7 +3,7 @@
/***********************************************************************************************************
A7800 XBoarD & XM expansions emulation
The XBoarD should be socketed in the A7800 pcb in place of the Maria chip.
It adds to the system additional 128K of RAM and an onboard pokey.
The XM seems to work the same as XBoarD, but it also features HighScore savings
@ -12,31 +12,31 @@
Currently, we emulate both of these as a passthru cart, even if not 100% accurate for the XBoarD
Memory map:
POKEY1 $0450 $045F 16 bytes
POKEY2* $0460 $046F 16 bytes
XCTRL $0470 $047F 1 byte
RAM $4000 $7FFF 16384 bytes
XCTRL Bit Description
+-------------------------------+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+-------------------------------+
| | | | | | | |
| | | | | | | +-- Bank select bit 0 \
| | | | | | +------ Bank select bit 1 | Totally 128 KByte in 16 KByte banks
| | | | | +---------- Bank select bit 2 /
| | | | | +---------- Bank select bit 2 /
| | | | +-------------- Enable memory bit (1 = Memory enabled, 0 after power on)
| | | +------------------ Enable POKEY bit** (1 = POKEY enabled, 0 after power on)
| | |
NA NA NA = Not Available or Not Used
* = Can be mounted piggy back on the first POKEY. Description how to do this will come when i have tried it out.
** This bit controls both POKEY chip select signals.
TODO:
- verify what happens when 2 POKEYs are present
@ -142,9 +142,9 @@ machine_config_constructor a78_xm_device::device_mconfig_additions() const
-------------------------------------------------*/
/*-------------------------------------------------
XBoarD: passthru + 128K RAM + POKEY
-------------------------------------------------*/
READ8_MEMBER(a78_xboard_device::read_40xx)
@ -168,7 +168,7 @@ READ8_MEMBER(a78_xboard_device::read_04xx)
if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
return m_pokey->read(space, offset & 0x0f);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
return m_xbslot->read_04xx(space, offset - 0x10); // access second POKEY
return m_xbslot->read_04xx(space, offset - 0x10); // access second POKEY
else
return 0xff;
}
@ -178,7 +178,7 @@ WRITE8_MEMBER(a78_xboard_device::write_04xx)
if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
m_pokey->write(space, offset & 0x0f, data);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
m_xbslot->write_04xx(space, offset - 0x10, data); // access second POKEY
m_xbslot->write_04xx(space, offset - 0x10, data); // access second POKEY
else if (offset >= 0x70 && offset < 0x80)
{
m_reg = data;
@ -188,9 +188,9 @@ WRITE8_MEMBER(a78_xboard_device::write_04xx)
/*-------------------------------------------------
XM: Same as above but also featuring High Score savings
-------------------------------------------------*/
READ8_MEMBER(a78_xm_device::read_10xx)
@ -215,7 +215,7 @@ READ8_MEMBER(a78_xm_device::read_04xx)
else if (m_ym_enabled && offset >= 0x60 && offset <= 0x61)
return m_ym->read(space, offset & 1);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
return m_xbslot->read_04xx(space, offset - 0x10); // access second POKEY
return m_xbslot->read_04xx(space, offset - 0x10); // access second POKEY
else
return 0xff;
}
@ -227,7 +227,7 @@ WRITE8_MEMBER(a78_xm_device::write_04xx)
else if (m_ym_enabled && offset >= 0x60 && offset <= 0x61)
m_ym->write(space, offset & 1, data);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
m_xbslot->write_04xx(space, offset - 0x10, data); // access second POKEY
m_xbslot->write_04xx(space, offset - 0x10, data); // access second POKEY
else if (offset >= 0x70 && offset < 0x80)
{
//printf("regs 0x%X\n", data);

View File

@ -17,12 +17,12 @@ public:
// construction/destruction
a78_xboard_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
a78_xboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual machine_config_constructor device_mconfig_additions() const;
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx);
virtual DECLARE_WRITE8_MEMBER(write_04xx);
@ -43,19 +43,19 @@ class a78_xm_device : public a78_xboard_device
public:
// construction/destruction
a78_xm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual machine_config_constructor device_mconfig_additions() const;
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_04xx);
virtual DECLARE_WRITE8_MEMBER(write_04xx);
virtual DECLARE_READ8_MEMBER(read_10xx);
virtual DECLARE_WRITE8_MEMBER(write_10xx);
virtual DECLARE_READ8_MEMBER(read_30xx);
protected:
required_device<ym2151_device> m_ym;
int m_ym_enabled;

View File

@ -14,7 +14,7 @@ static SLOT_INTERFACE_START(a800_left)
SLOT_INTERFACE_INTERNAL("a800_8k", A800_ROM)
SLOT_INTERFACE_INTERNAL("a800_8k_right", A800_ROM)
SLOT_INTERFACE_INTERNAL("a800_16k", A800_ROM)
SLOT_INTERFACE_INTERNAL("a800_phoenix", A800_ROM) // not really emulated at this stage
SLOT_INTERFACE_INTERNAL("a800_phoenix", A800_ROM) // not really emulated at this stage
SLOT_INTERFACE_INTERNAL("a800_bbsb", A800_ROM_BBSB)
SLOT_INTERFACE_INTERNAL("a800_oss8k", A800_ROM_OSS8K)
SLOT_INTERFACE_INTERNAL("a800_oss034m", A800_ROM_OSS34)
@ -23,13 +23,13 @@ static SLOT_INTERFACE_START(a800_left)
SLOT_INTERFACE_INTERNAL("a800_williams", A800_ROM_WILLIAMS)
SLOT_INTERFACE_INTERNAL("a800_diamond", A800_ROM_EXPRESS)
SLOT_INTERFACE_INTERNAL("a800_express", A800_ROM_EXPRESS)
SLOT_INTERFACE_INTERNAL("a800_sparta", A800_ROM_SPARTADOS) // this is a passthru cart with unemulated (atm) subslot
SLOT_INTERFACE_INTERNAL("a800_sparta", A800_ROM_SPARTADOS) // this is a passthru cart with unemulated (atm) subslot
SLOT_INTERFACE_INTERNAL("a800_blizzard", A800_ROM)
SLOT_INTERFACE_INTERNAL("a800_turbo64", A800_ROM_TURBO)
SLOT_INTERFACE_INTERNAL("a800_turbo128", A800_ROM_TURBO)
SLOT_INTERFACE_INTERNAL("a800_tlink2", A800_ROM_TELELINK2)
SLOT_INTERFACE_INTERNAL("a800_sitsa", A800_ROM_MICROCALC)
SLOT_INTERFACE_INTERNAL("a800_corina", A800_ROM) // NOT SUPPORTED YET!
SLOT_INTERFACE_INTERNAL("a800_corina", A800_ROM) // NOT SUPPORTED YET!
SLOT_INTERFACE_INTERNAL("xegs", XEGS_ROM)
SLOT_INTERFACE_END

View File

@ -6,12 +6,12 @@
Atari 8 bit cart emulation
(through slot devices)
Emulation of the cartslot(s) for Atari 8bit series of home computers
Emulation of the cartslot(s) for Atari 8bit series of home computers
Accessors to ROM are typically given in the area 0xa000-0xbfff, but some
carts (and the right slot in A800) maps ROM to 0x8000-0x9fff too
Bankswitch typically happens by accessing addresses in 0xd500-0xd5ff
Accordingly, this device offers the following handlers
- read_80xx/write_80xx
- read_d5xx/write_d5xx
@ -67,9 +67,9 @@ void device_a800_cart_interface::rom_alloc(UINT32 size, const char *tag)
tempstring.cat(A800SLOT_ROM_REGION_TAG);
m_rom = device().machine().memory().region_alloc(tempstring, size, 1, ENDIANNESS_LITTLE)->base();
m_rom_size = size;
// setup other helpers
m_bank_mask = (size / 0x2000) - 1; // code for XEGS carts makes use of this to simplify banking
m_bank_mask = (size / 0x2000) - 1; // code for XEGS carts makes use of this to simplify banking
}
}
@ -243,15 +243,15 @@ bool a800_cart_slot_device::call_load()
if (m_cart)
{
UINT32 len;
if (software_entry() != NULL)
{
const char *pcb_name;
len = get_software_region_length("rom");
m_cart->rom_alloc(len, tag());
memcpy(m_cart->get_rom_base(), get_software_region("rom"), len);
if ((pcb_name = get_feature("slot")) != NULL)
m_type = a800_get_pcb_id(pcb_name);
else
@ -267,9 +267,9 @@ bool a800_cart_slot_device::call_load()
UINT8 header[16];
fread(header, 0x10);
m_type = identify_cart_type(header);
len -= 0x10; // in identify_cart_type the first 0x10 bytes are read, so we need to adjust here
len -= 0x10; // in identify_cart_type the first 0x10 bytes are read, so we need to adjust here
}
else // otherwise try to guess based on size
else // otherwise try to guess based on size
{
if (len == 0x8000)
m_type = A5200_32K;
@ -323,7 +323,7 @@ int a800_cart_slot_device::identify_cart_type(UINT8 *header)
// check CART format
if (strncmp((const char *)header, "CART", 4))
fatalerror("Invalid header detected!\n");
switch ((header[4] << 24) + (header[5] << 16) + (header[6] << 8) + (header[7] << 0))
{
case 1:
@ -400,7 +400,7 @@ int a800_cart_slot_device::identify_cart_type(UINT8 *header)
osd_printf_info("Cart type \"%d\" is currently unsupported.\n", (header[4] << 24) + (header[5] << 16) + (header[6] << 8) + (header[7] << 0));
break;
}
return type;
}
@ -420,10 +420,10 @@ void a800_cart_slot_device::get_default_card_software(astring &result)
// check whether there is an header, to identify the cart type
if ((len % 0x1000) == 0x10)
{
core_fread(m_file, head, 0x10);
core_fread(m_file, head, 0x10);
type = identify_cart_type(head);
}
else // otherwise try to guess based on size
else // otherwise try to guess based on size
{
if (len == 0x4000)
type = A800_16K;
@ -435,9 +435,9 @@ void a800_cart_slot_device::get_default_card_software(astring &result)
osd_printf_info("This game is not designed for A800. You might want to run it in A5200.\n");
slot_string = a800_get_slot(type);
clear();
result.cpy(slot_string);
}
else
@ -453,11 +453,11 @@ void a5200_cart_slot_device::get_default_card_software(astring &result)
dynamic_buffer head(0x10);
UINT32 len = core_fsize(m_file);
int type = A5200_8K;
// check whether there is an header, to identify the cart type
if ((len % 0x1000) == 0x10)
{
core_fread(m_file, head, 0x10);
core_fread(m_file, head, 0x10);
type = identify_cart_type(head);
astring info;
@ -466,11 +466,11 @@ void a5200_cart_slot_device::get_default_card_software(astring &result)
}
if (type < A5200_4K)
osd_printf_info("This game is not designed for A5200. You might want to run it in A800 or A800XL.\n");
slot_string = a800_get_slot(type);
clear();
result.cpy(slot_string);
}
else
@ -486,11 +486,11 @@ void xegs_cart_slot_device::get_default_card_software(astring &result)
dynamic_buffer head(0x10);
UINT32 len = core_fsize(m_file);
int type = A800_8K;
// check whether there is an header, to identify the cart type
if ((len % 0x1000) == 0x10)
{
core_fread(m_file, head, 0x10);
core_fread(m_file, head, 0x10);
type = identify_cart_type(head);
}
if (type != A800_XEGS)
@ -501,11 +501,11 @@ void xegs_cart_slot_device::get_default_card_software(astring &result)
else
osd_printf_info("You might want to run it in A800 or A800XL.\n");
}
slot_string = a800_get_slot(type);
clear();
result.cpy(slot_string);
}
else
@ -549,4 +549,3 @@ WRITE8_MEMBER(a800_cart_slot_device::write_d5xx)
if (m_cart)
m_cart->write_d5xx(space, offset, data, mem_mask);
}

View File

@ -20,11 +20,11 @@ enum
A800_OSSM091,
A800_OSS8K,
A800_PHOENIX,
A800_XEGS,
A800_BBSB,
A800_XEGS,
A800_BBSB,
A800_DIAMOND,
A800_WILLIAMS,
A800_EXPRESS,
A800_EXPRESS,
A800_SPARTADOS,
A800_BLIZZARD,
A800_TURBO64,
@ -71,7 +71,7 @@ protected:
UINT8 *m_rom;
UINT32 m_rom_size;
dynamic_buffer m_ram;
dynamic_buffer m_nvram; // HiScore cart can save scores!
dynamic_buffer m_nvram; // HiScore cart can save scores!
// helpers
int m_bank_mask;
};
@ -101,7 +101,7 @@ public:
int get_cart_type() { return m_type; };
int identify_cart_type(UINT8 *header);
bool has_cart() { return m_cart != NULL; }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
virtual bool is_writeable() const { return 0; }
@ -120,7 +120,7 @@ public:
virtual DECLARE_READ8_MEMBER(read_d5xx);
virtual DECLARE_WRITE8_MEMBER(write_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
private:
device_a800_cart_interface* m_cart;
int m_type;
@ -138,9 +138,9 @@ public:
// construction/destruction
a5200_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~a5200_cart_slot_device();
virtual const char *file_extensions() const { return "bin,rom,car,a52"; }
// slot interface overrides
virtual void get_default_card_software(astring &result);
};
@ -155,7 +155,7 @@ public:
virtual ~xegs_cart_slot_device();
virtual const char *file_extensions() const { return "bin,rom,car"; }
// slot interface overrides
virtual void get_default_card_software(astring &result);
};

View File

@ -95,11 +95,11 @@ void a800_rom_oss91_device::device_reset()
-------------------------------------------------*/
/*-------------------------------------------------
OSS 8K
This is used by The Writer's Tool only.
-------------------------------------------------*/
READ8_MEMBER(a800_rom_oss8k_device::read_80xx)
@ -128,12 +128,12 @@ WRITE8_MEMBER(a800_rom_oss8k_device::write_d5xx)
/*-------------------------------------------------
OSS 034M
This apparently comes from a dump with the wrong bank order...
investigate whether we should remove it!
-------------------------------------------------*/
READ8_MEMBER(a800_rom_oss34_device::read_80xx)
@ -156,7 +156,7 @@ WRITE8_MEMBER(a800_rom_oss34_device::write_d5xx)
break;
case 2:
case 6:
m_bank = 3; // in this case the ROM gets disabled and 0xff is returned in 0xa000-0xafff
m_bank = 3; // in this case the ROM gets disabled and 0xff is returned in 0xa000-0xafff
break;
case 3:
case 7:
@ -173,11 +173,11 @@ WRITE8_MEMBER(a800_rom_oss34_device::write_d5xx)
/*-------------------------------------------------
OSS 043M
Same as above but with correct bank order
-------------------------------------------------*/
READ8_MEMBER(a800_rom_oss43_device::read_80xx)
@ -200,7 +200,7 @@ WRITE8_MEMBER(a800_rom_oss43_device::write_d5xx)
break;
case 2:
case 6:
m_bank = 3; // in this case the ROM gets disabled and 0xff is returned in 0xa000-0xafff
m_bank = 3; // in this case the ROM gets disabled and 0xff is returned in 0xa000-0xafff
break;
case 3:
case 7:
@ -217,12 +217,12 @@ WRITE8_MEMBER(a800_rom_oss43_device::write_d5xx)
/*-------------------------------------------------
OSS M091
Simplified banking system which only uses two
Simplified banking system which only uses two
address lines (A0 & A3)
-------------------------------------------------*/
READ8_MEMBER(a800_rom_oss91_device::read_80xx)
@ -250,4 +250,3 @@ WRITE8_MEMBER(a800_rom_oss91_device::write_d5xx)
break;
}
}

View File

@ -13,14 +13,14 @@ class a800_rom_oss8k_device : public a800_rom_device
public:
// construction/destruction
a800_rom_oss8k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};
@ -53,14 +53,14 @@ class a800_rom_oss43_device : public a800_rom_device
public:
// construction/destruction
a800_rom_oss43_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};
@ -73,14 +73,14 @@ class a800_rom_oss91_device : public a800_rom_device
public:
// construction/destruction
a800_rom_oss91_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};

View File

@ -3,7 +3,7 @@
/***********************************************************************************************************
A800/A5200/XEGS ROM cart emulation
Basic carts work the same (in addition of being mostly compatible) for all these systems
and thus we deal with them in a single file
@ -196,7 +196,7 @@ void a5200_rom_bbsb_device::device_reset()
/*-------------------------------------------------
Carts with no bankswitch (8K, 16K)
The cart accessors are mapped in the correct
range at driver start
@ -210,14 +210,14 @@ READ8_MEMBER(a800_rom_device::read_80xx)
/*-------------------------------------------------
Bounty Bob Strikes Back! cart (40K)
Area 0xa000-0xbfff always point to last 8K bank
Areas 0x8000-0x8fff and 0x9000-0x9fff are
Areas 0x8000-0x8fff and 0x9000-0x9fff are
separate banks of 4K mapped either in the first
16K chunk or in the second 16K chunk
Bankswitch is controlled by data written in
Bankswitch is controlled by data written in
0x8000-0x8fff and 0x9000-0x9fff respectively
-------------------------------------------------*/
@ -240,12 +240,12 @@ WRITE8_MEMBER(a800_rom_bbsb_device::write_80xx)
}
/*-------------------------------------------------
XEGS carts (32K, 64K or 128K)
Bankswitch is controlled by data written in
Bankswitch is controlled by data written in
0xd500-0xd5ff
-------------------------------------------------*/
READ8_MEMBER(xegs_rom_device::read_80xx)
@ -253,8 +253,8 @@ READ8_MEMBER(xegs_rom_device::read_80xx)
if (offset < 0x2000)
return m_rom[(offset & 0x1fff) + (m_bank * 0x2000)];
else
return m_rom[(offset & 0x1fff) + (m_bank_mask * 0x2000)]; // always last 8K bank
return m_rom[(offset & 0x1fff) + (m_bank_mask * 0x2000)]; // always last 8K bank
}
WRITE8_MEMBER(xegs_rom_device::write_d5xx)
@ -264,16 +264,16 @@ WRITE8_MEMBER(xegs_rom_device::write_d5xx)
/*-------------------------------------------------
Williams 64K
The rom is accessed in 8K chunks at 0xa000-0xbfff
Bankswitch is controlled by writing to 7 diff
offsets (their location varies with the cart type):
offs 0 points to bank 0, offs 1 points to bank 1,
and so on... the rom can be disabled by writing to
offsets (their location varies with the cart type):
offs 0 points to bank 0, offs 1 points to bank 1,
and so on... the rom can be disabled by writing to
the offsets 0x8-0xf of the same range as the bankswitch
-------------------------------------------------*/
READ8_MEMBER(a800_rom_williams_device::read_80xx)
@ -287,16 +287,16 @@ WRITE8_MEMBER(a800_rom_williams_device::write_d5xx)
}
/*-------------------------------------------------
Express 64K / Diamond 64K carts
The rom is accessed in 8K chunks at 0xa000-0xbfff
Bankswitch is the same as above, but writes trigger
banks in reverse order: offs 7 points to bank 0, offs 6
Bankswitch is the same as above, but writes trigger
banks in reverse order: offs 7 points to bank 0, offs 6
points to bank 1, and so on... the rom can be disabled
by writing to the offsets 0x8-0xf of the same range
as the bankswitch
-------------------------------------------------*/
READ8_MEMBER(a800_rom_express_device::read_80xx)
@ -311,10 +311,10 @@ WRITE8_MEMBER(a800_rom_express_device::write_d5xx)
/*-------------------------------------------------
Turbosoft 64K / 128K
-------------------------------------------------*/
READ8_MEMBER(a800_rom_turbo_device::read_80xx)
@ -329,10 +329,10 @@ WRITE8_MEMBER(a800_rom_turbo_device::write_d5xx)
/*-------------------------------------------------
Telelink II
-------------------------------------------------*/
READ8_MEMBER(a800_rom_telelink2_device::read_80xx)
@ -347,7 +347,7 @@ READ8_MEMBER(a800_rom_telelink2_device::read_80xx)
WRITE8_MEMBER(a800_rom_telelink2_device::write_80xx)
{
m_nvram[offset & 0xff] = data | 0xf0; // low 4bits only
m_nvram[offset & 0xff] = data | 0xf0; // low 4bits only
}
READ8_MEMBER(a800_rom_telelink2_device::read_d5xx)
@ -364,10 +364,10 @@ WRITE8_MEMBER(a800_rom_telelink2_device::write_d5xx)
/*-------------------------------------------------
SITSA Microcalc
-------------------------------------------------*/
READ8_MEMBER(a800_rom_microcalc_device::read_80xx)
@ -386,21 +386,21 @@ WRITE8_MEMBER(a800_rom_microcalc_device::write_d5xx)
/*-------------------------------------------------
Carts with no bankswitch (4K, 8K, 16K, 32K)
Same as base carts above
-------------------------------------------------*/
/*-------------------------------------------------
Carts with 2x8K (16K) with A13 line not connected
Range 0x4000-0x7fff contains two copies of the low
8K, range 0x8000-0xbfff contains two copies of the
high 8K
-------------------------------------------------*/
READ8_MEMBER(a5200_rom_2chips_device::read_80xx)
@ -413,18 +413,18 @@ READ8_MEMBER(a5200_rom_2chips_device::read_80xx)
/*-------------------------------------------------
Bounty Bob Strikes Back! cart (40K)
Similar to the A800 version, but:
Area 0x8000-0xbfff always point to last 8K bank
(repeated twice)
Areas 0x4000-0x4fff and 0x5000-0x5fff are
Areas 0x4000-0x4fff and 0x5000-0x5fff are
separate banks of 4K mapped either in the first
16K chunk or in the second 16K chunk
Bankswitch is controlled by data written in
Bankswitch is controlled by data written in
0x4000-0x4fff and 0x5000-0x5fff respectively
-------------------------------------------------*/
READ8_MEMBER(a5200_rom_bbsb_device::read_80xx)
@ -445,4 +445,3 @@ WRITE8_MEMBER(a5200_rom_bbsb_device::write_80xx)
if (addr >= 0xff6 && addr <= 0xff9)
m_banks[BIT(offset, 12)] = (addr - 0xff6);
}

View File

@ -31,14 +31,14 @@ class a800_rom_bbsb_device : public a800_rom_device
public:
// construction/destruction
a800_rom_bbsb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_80xx);
protected:
int m_banks[2];
};
@ -51,14 +51,14 @@ class a800_rom_williams_device : public a800_rom_device
public:
// construction/destruction
a800_rom_williams_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};
@ -71,14 +71,14 @@ class a800_rom_express_device : public a800_rom_device
public:
// construction/destruction
a800_rom_express_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};
@ -91,11 +91,11 @@ class a800_rom_blizzard_device : public a800_rom_device
public:
// construction/destruction
a800_rom_blizzard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
};
@ -107,14 +107,14 @@ class a800_rom_turbo_device : public a800_rom_device
public:
// construction/destruction
a800_rom_turbo_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};
@ -127,7 +127,7 @@ class a800_rom_telelink2_device : public a800_rom_device
public:
// construction/destruction
a800_rom_telelink2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_80xx);
virtual DECLARE_READ8_MEMBER(read_d5xx);
@ -142,14 +142,14 @@ class a800_rom_microcalc_device : public a800_rom_device
public:
// construction/destruction
a800_rom_microcalc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};
@ -162,14 +162,14 @@ class xegs_rom_device : public a800_rom_device
public:
// construction/destruction
xegs_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank;
};
@ -182,7 +182,7 @@ class a5200_rom_2chips_device : public a800_rom_device
public:
// construction/destruction
a5200_rom_2chips_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual DECLARE_READ8_MEMBER(read_80xx);
};
@ -194,14 +194,14 @@ class a5200_rom_bbsb_device : public a800_rom_device
public:
// construction/destruction
a5200_rom_bbsb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_80xx);
protected:
int m_banks[2];
};

View File

@ -43,14 +43,14 @@ void a800_rom_spartados_device::device_reset()
-------------------------------------------------*/
/*-------------------------------------------------
SpartaDOS 64K carts
Similar to Express / Diamond carts, because
bankswitch is controlled by writing to 7 diff
offsets in reverse order, but writes to offsets
Similar to Express / Diamond carts, because
bankswitch is controlled by writing to 7 diff
offsets in reverse order, but writes to offsets
0x8-0xf also enable/disable subslot
-------------------------------------------------*/
READ8_MEMBER(a800_rom_spartados_device::read_80xx)
@ -58,7 +58,7 @@ READ8_MEMBER(a800_rom_spartados_device::read_80xx)
if (!m_subslot_enabled)
return m_rom[(offset & 0x1fff) + (m_bank * 0x2000)];
else
return 0xff; // subslot, currently not implemented
return 0xff; // subslot, currently not implemented
}
WRITE8_MEMBER(a800_rom_spartados_device::write_d5xx)
@ -69,4 +69,3 @@ WRITE8_MEMBER(a800_rom_spartados_device::write_d5xx)
m_bank = (offset ^ 0x07) & 0x0f;
}

View File

@ -13,14 +13,14 @@ class a800_rom_spartados_device : public a800_rom_device
public:
// construction/destruction
a800_rom_spartados_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_80xx);
virtual DECLARE_WRITE8_MEMBER(write_d5xx);
protected:
int m_bank, m_subslot_enabled;
};

View File

@ -43,7 +43,7 @@ class apf_spacedst_device : public apf_rom_device
public:
// construction/destruction
apf_spacedst_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_ram);
virtual DECLARE_WRITE8_MEMBER(write_ram);

View File

@ -169,9 +169,9 @@ bool apf_cart_slot_device::call_load()
seterror(IMAGE_ERROR_UNSPECIFIED, "Image extends beyond the expected size for an APF cart");
return IMAGE_INIT_FAIL;
}
m_cart->rom_alloc(size, tag());
if (software_entry() == NULL)
fread(m_cart->get_rom_base(), size);
else
@ -294,5 +294,3 @@ WRITE8_MEMBER(apf_cart_slot_device::write_ram)
if (m_cart)
m_cart->write_ram(space, offset, data);
}

View File

@ -39,7 +39,7 @@ public:
UINT32 get_rom_size() { return m_rom_size; }
UINT32 get_ram_size() { return m_ram.count(); }
void save_ram() { device().save_item(NAME(m_ram)); }
void save_ram() { device().save_item(NAME(m_ram)); }
protected:
// internal state
@ -71,7 +71,7 @@ public:
int get_type() { return m_type; }
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
@ -112,6 +112,5 @@ extern const device_type APF_CART_SLOT;
#define MCFG_APF_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, APF_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#endif

View File

@ -155,7 +155,7 @@ bool arcadia_cart_slot_device::call_load()
UINT32 len = (software_entry() == NULL) ? length() : get_software_region_length("rom");
m_cart->rom_alloc(len, tag());
if (software_entry() == NULL)
fread(m_cart->get_rom_base(), len);
else
@ -260,4 +260,3 @@ READ8_MEMBER(arcadia_cart_slot_device::extra_rom)
else
return 0xff;
}

View File

@ -99,6 +99,5 @@ extern const device_type EA2001_CART_SLOT;
#define MCFG_ARCADIA_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, EA2001_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#endif

View File

@ -73,7 +73,7 @@ c64_dela_ep256_cartridge_device::c64_dela_ep256_cartridge_device(const machine_c
char str[6];
sprintf(str, "rom%i", i + 1);
m_eproms[i] = subdevice<generic_slot_device>(str);
}
}
}

View File

@ -49,7 +49,7 @@ protected:
private:
generic_slot_device *m_eproms[8];
UINT8 m_bank, m_socket;
int m_reset;
};

View File

@ -1,11 +1,11 @@
/*
* digiblst.h
*
* Digiblaster - a DIY printer port DAC for the Amstrad CPC
* Printed in the German magazine CPC Amstrad International issue 8-9/1991
* Uses Strobe (inverted on the CPC) for the 8th bit (CPCs only have 7-bit printer ports)
* Digiblaster - a DIY printer port DAC for the Amstrad CPC
* Printed in the German magazine CPC Amstrad International issue 8-9/1991
* Uses Strobe (inverted on the CPC) for the 8th bit (CPCs only have 7-bit printer ports)
*
* Code borrows from the Covox Speech Thing device.
* Code borrows from the Covox Speech Thing device.
*
* Created on: 23/08/2014
*/

View File

@ -164,7 +164,7 @@ UINT8 chanf_rom_device::common_read_2102(UINT32 offset)
m_data0 = m_ram[m_addr] & 1;
return (m_latch[0] & 0x7f) | (m_data0 << 7);
}
return m_latch[0];
}
else
@ -176,10 +176,10 @@ void chanf_rom_device::common_write_2102(UINT32 offset, UINT8 data)
if (offset == 0)
{
m_latch[0] = data;
m_read_write = BIT(data, 0);
m_addr_latch = (m_addr_latch & 0x3f3) | (BIT(data, 2) << 2) | (BIT(data, 1) << 3); // bits 2,3 come from this write!
m_addr_latch = (m_addr_latch & 0x3f3) | (BIT(data, 2) << 2) | (BIT(data, 1) << 3); // bits 2,3 come from this write!
m_addr = m_addr_latch;
m_data0 = BIT(data, 3);
@ -199,7 +199,7 @@ void chanf_rom_device::common_write_2102(UINT32 offset, UINT8 data)
// These are shared among Schach & Multigame cart types (not directly used by base chanf_rom_device)
UINT8 chanf_rom_device::common_read_3853(UINT32 offset)
{
{
if (offset < m_ram.count())
return m_ram[offset];
else
@ -207,7 +207,7 @@ UINT8 chanf_rom_device::common_read_3853(UINT32 offset)
}
void chanf_rom_device::common_write_3853(UINT32 offset, UINT8 data)
{
{
if (offset < m_ram.count())
m_ram[offset] = data;
}
@ -240,4 +240,3 @@ WRITE8_MEMBER(chanf_multi_final_device::write_bank)
m_base_bank = data & 0x1f;
m_half_bank = BIT(data, 5);
}

View File

@ -24,14 +24,14 @@ public:
UINT8 common_read_3853(UINT32 offset);
void common_write_2102(UINT32 offset, UINT8 data);
void common_write_3853(UINT32 offset, UINT8 data);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
protected:
// used for RAM chip in Hangman & Maze
UINT8 m_latch[2]; // PORT A & PORT B
UINT8 m_latch[2]; // PORT A & PORT B
UINT16 m_addr_latch, m_addr;
int m_read_write, m_data0;
};
@ -43,11 +43,11 @@ class chanf_maze_device : public chanf_rom_device
public:
// construction/destruction
chanf_maze_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_ram) { return common_read_2102(offset); }
virtual DECLARE_WRITE8_MEMBER(write_ram) { common_write_2102(offset, data); }
@ -61,11 +61,11 @@ class chanf_hangman_device : public chanf_rom_device
public:
// construction/destruction
chanf_hangman_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_ram) { return common_read_2102(offset); }
virtual DECLARE_WRITE8_MEMBER(write_ram) { common_write_2102(offset, data); }
@ -79,7 +79,7 @@ class chanf_chess_device : public chanf_rom_device
public:
// construction/destruction
chanf_chess_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_ram) { return common_read_3853(offset); }
virtual DECLARE_WRITE8_MEMBER(write_ram) { common_write_3853(offset, data); }
@ -93,11 +93,11 @@ class chanf_multi_old_device : public chanf_rom_device
public:
// construction/destruction
chanf_multi_old_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_READ8_MEMBER(read_ram) { return common_read_3853(offset); }
@ -116,17 +116,17 @@ class chanf_multi_final_device : public chanf_rom_device
public:
// construction/destruction
chanf_multi_final_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_READ8_MEMBER(read_ram) { return common_read_3853(offset); }
virtual DECLARE_WRITE8_MEMBER(write_ram) { common_write_3853(offset, data); }
virtual DECLARE_WRITE8_MEMBER(write_bank);
private:
int m_base_bank, m_half_bank;
};

View File

@ -178,9 +178,9 @@ bool channelf_cart_slot_device::call_load()
// we default to "chess" slot because some homebrew programs have been written to run
// on PCBs with RAM at $2000-$2800 as Saba Schach!
if (len == 0x40000)
m_type = CF_MULTI; // TODO1: differentiate multicart final and earlier from fullpath
m_type = CF_MULTI; // TODO1: differentiate multicart final and earlier from fullpath
else
m_type = CF_CHESS; // TODO2: is there any way to detect Maze and Hangman from fullpath?
m_type = CF_CHESS; // TODO2: is there any way to detect Maze and Hangman from fullpath?
m_cart->ram_alloc(0x800);
}
@ -226,17 +226,17 @@ void channelf_cart_slot_device::get_default_card_software(astring &result)
const char *slot_string = "chess";
UINT32 len = core_fsize(m_file);
int type;
if (len == 0x40000)
type = CF_MULTI;
else
type = CF_CHESS; // is there any way to detect the other carts from fullpath?
type = CF_CHESS; // is there any way to detect the other carts from fullpath?
slot_string = chanf_get_slot(type);
//printf("type: %s\n", slot_string);
clear();
result.cpy(slot_string);
return;
}

View File

@ -42,7 +42,7 @@ public:
UINT32 get_rom_size() { return m_rom_size; }
UINT32 get_ram_size() { return m_ram.count(); }
void save_ram() { device().save_item(NAME(m_ram)); }
void save_ram() { device().save_item(NAME(m_ram)); }
protected:
// internal state
@ -74,7 +74,7 @@ public:
int get_type() { return m_type; }
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
@ -115,6 +115,5 @@ extern const device_type CHANF_CART_SLOT;
#define MCFG_CHANNELF_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, CHANF_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#endif

View File

@ -18,7 +18,7 @@
#include "sound/dac.h"
class cpc_amdrum_device : public device_t,
public device_cpc_expansion_card_interface
public device_cpc_expansion_card_interface
{
public:
// construction/destruction

View File

@ -47,11 +47,11 @@ static INPUT_PORTS_START(cpc_symbiface2)
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse forward button") PORT_CODE(MOUSECODE_BUTTON5) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,NULL)
// TODO: mouse scroll wheel support
// PORT_START("sf2_mouse_scroll")
// PORT_BIT(0x1f , 0, IPT_TRACKBALL_Y)
// PORT_SENSITIVITY(100)
// PORT_KEYDELTA(10)
// PORT_PLAYER(1)
// PORT_START("sf2_mouse_scroll")
// PORT_BIT(0x1f , 0, IPT_TRACKBALL_Y)
// PORT_SENSITIVITY(100)
// PORT_KEYDELTA(10)
// PORT_PLAYER(1)
INPUT_PORTS_END
@ -189,26 +189,26 @@ WRITE8_MEMBER(cpc_symbiface2_device::rtc_w)
// PS/2 Mouse connector
// #FD10 (read only) read mouse status
/*
Status byte
Bit 76543210
Use mmDDDDDD
Status byte
Bit 76543210
Use mmDDDDDD
m: Mode
D: Use-Data
m: Mode
D: Use-Data
If read and...
If read and...
m = 00 -> no more data available, you can stop reading the status for a while
m = 01 -> D = X offset (signed); you will receive positive values, if the user
is moving the mouse to the right
m = 10 -> D = Y offset (signed); you will receive positive values, if the user
is moving the mouse upwards
m = 11 -> D[bit5] = 0 -> D[bit0] = left button
D[bit1] = right button
D[bit2] = middle button
D[bit3] = forward button
D[bit4] = backward button
D[bit5] = 1 -> D[bit0-4] = scroll wheel offset (signed)
m = 00 -> no more data available, you can stop reading the status for a while
m = 01 -> D = X offset (signed); you will receive positive values, if the user
is moving the mouse to the right
m = 10 -> D = Y offset (signed); you will receive positive values, if the user
is moving the mouse upwards
m = 11 -> D[bit5] = 0 -> D[bit0] = left button
D[bit1] = right button
D[bit2] = middle button
D[bit3] = forward button
D[bit4] = backward button
D[bit5] = 1 -> D[bit0-4] = scroll wheel offset (signed)
*/
READ8_MEMBER(cpc_symbiface2_device::mouse_r)
{

View File

@ -14,7 +14,7 @@
#include "cpcexp.h"
class cpc_symbiface2_device : public device_t,
public device_cpc_expansion_card_interface
public device_cpc_expansion_card_interface
{
public:
// construction/destruction

View File

@ -88,7 +88,7 @@ READ8_MEMBER(crvision_rom6k_device::read_rom80)
offset &= 0x1fff;
if (offset < 0x1000)
return m_rom[0x1000 + (offset & 0x7ff)];
return m_rom[offset & 0xfff];
}

View File

@ -43,7 +43,7 @@ class crvision_rom8k_device : public crvision_rom_device
public:
// construction/destruction
crvision_rom8k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom80);
};
@ -55,7 +55,7 @@ class crvision_rom10k_device : public crvision_rom_device
public:
// construction/destruction
crvision_rom10k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40);
virtual DECLARE_READ8_MEMBER(read_rom80);
@ -68,7 +68,7 @@ class crvision_rom12k_device : public crvision_rom_device
public:
// construction/destruction
crvision_rom12k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40);
virtual DECLARE_READ8_MEMBER(read_rom80);
@ -81,7 +81,7 @@ class crvision_rom16k_device : public crvision_rom_device
public:
// construction/destruction
crvision_rom16k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom80);
};
@ -93,7 +93,7 @@ class crvision_rom18k_device : public crvision_rom_device
public:
// construction/destruction
crvision_rom18k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40);
virtual DECLARE_READ8_MEMBER(read_rom80);

View File

@ -163,9 +163,9 @@ bool crvision_cart_slot_device::call_load()
seterror(IMAGE_ERROR_UNSPECIFIED, "Image extends beyond the expected size for an APF cart");
return IMAGE_INIT_FAIL;
}
m_cart->rom_alloc(size, tag());
if (software_entry() == NULL)
fread(m_cart->get_rom_base(), size);
else
@ -295,4 +295,3 @@ READ8_MEMBER(crvision_cart_slot_device::read_rom80)
else
return 0xff;
}

View File

@ -104,6 +104,5 @@ extern const device_type CRVISION_CART_SLOT;
#define MCFG_CRVISION_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, CRVISION_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#endif

View File

@ -71,8 +71,8 @@ public:
void set_has_battery(bool val) { has_battery = val; }
bool get_has_battery() { return has_battery; }
void save_ram() { device().save_item(NAME(m_ram)); }
void save_ram() { device().save_item(NAME(m_ram)); }
// internal state
UINT8 *m_rom;
UINT32 m_rom_size;
@ -122,8 +122,8 @@ public:
void setup_ram(UINT8 banks);
void internal_header_logging(UINT8 *ROM, UINT32 len);
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
virtual bool is_writeable() const { return 0; }

View File

@ -183,11 +183,11 @@ class gb_rom_188in1_device : public gb_rom_mbc1_device
public:
// construction/destruction
gb_rom_188in1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start() { shared_start(); save_item(NAME(m_game_base)); };
virtual void device_reset() { shared_reset(); m_game_base = 0; };
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_WRITE8_MEMBER(write_bank);

View File

@ -42,7 +42,7 @@ public:
UINT32 get_nvram_size() { return m_nvram.bytes(); }
void set_rom_size(UINT32 val) { m_rom_size = val; }
void save_nvram() { device().save_item(NAME(m_nvram)); }
void save_nvram() { device().save_item(NAME(m_nvram)); }
// internal state
UINT32 *m_rom; // this points to the cart rom region
@ -77,7 +77,7 @@ public:
void setup_ram(UINT8 banks);
void internal_header_logging(UINT8 *ROM, UINT32 len);
void save_nvram() { if (m_cart && m_cart->get_nvram_size()) m_cart->save_nvram(); }
void save_nvram() { if (m_cart && m_cart->get_nvram_size()) m_cart->save_nvram(); }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
@ -175,7 +175,7 @@ static const gba_chip_fix_conflict_item gba_chip_fix_conflict_list[] =
{ "BR4J", GBA_CHIP_FLASH }, // 1586 - Rockman EXE 4.5 - Real Operation (JPN)
{ "BG8J", GBA_CHIP_EEPROM_64K }, // 1853 - Ganbare! Dodge Fighters (JPN)
{ "AROP", GBA_CHIP_EEPROM_4K }, // 1862 - Rocky (EUR)
// "A2YE" - 1906 - Top Gun - Combat Zones (USA) - multiple NVRAM chips detected, but none present (protection against emu?)
// "A2YE" - 1906 - Top Gun - Combat Zones (USA) - multiple NVRAM chips detected, but none present (protection against emu?)
{ "BKMJ", GBA_CHIP_EEPROM_4K }, // 2039 - Kim Possible (JPN)
{ "BKEJ", GBA_CHIP_EEPROM_64K }, // 2047 - Konjiki no Gashbell - The Card Battle for GBA (JPN)
{ "BKMP", GBA_CHIP_EEPROM_4K }, // 2297 - Kim Possible 2 - Drakken's Demise (EUR)

View File

@ -1,9 +1,9 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
/**********************************************************************
Generic ROM / RAM socket slots
**********************************************************************/

View File

@ -1,21 +1,21 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
/***********************************************************************************************************
Generic RAM socket emulation
This offers generic access to RAM
generic_ram_plain : returns 0xff when the system reads beyond the end of the RAM
generic_ram_linear : maps linearly the RAM in the accessed area (i.e., read/write offset is masked with
generic_ram_linear : maps linearly the RAM in the accessed area (i.e., read/write offset is masked with
(RAM size - 1) )
TODO:
- support variable RAM size
- possibly support linear mapping when non-power of 2 RAMs are mapped
- add support for 16bit & 32bit RAM access
***********************************************************************************************************/
@ -121,4 +121,3 @@ WRITE8_MEMBER(generic_ram_linear_device::write_ram)
{
m_ram[offset % m_ram.bytes()] = data;
}

View File

@ -14,14 +14,14 @@ class generic_ram_plain_device : public device_t,
public:
// construction/destruction
generic_ram_plain_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 size, const char *shortname, const char *source);
// device-level overrides
virtual void device_start();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_ram);
virtual DECLARE_WRITE8_MEMBER(write_ram);
private:
UINT32 m_size;
};
@ -35,14 +35,14 @@ class generic_ram_linear_device : public device_t,
public:
// construction/destruction
generic_ram_linear_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 size, const char *shortname, const char *source);
// device-level overrides
virtual void device_start();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_ram);
virtual DECLARE_WRITE8_MEMBER(write_ram);
private:
UINT32 m_size;
};

View File

@ -4,18 +4,18 @@
Generic ROM emulation (for carts and ROM sockets)
This offers generic access to a ROM
generic_rom_plain : returns 0xff when the system reads beyond the end of the ROM
generic_rom_linear : maps linearly the ROM in the accessed area (i.e., read offset is masked with (ROM size - 1) )
generic_romram_plain : allows support for carts always containing ROM + RAM (e.g. X07)
TODO:
- possibly support linear mapping when non-power of 2 ROMs are mapped
***********************************************************************************************************/
@ -120,4 +120,3 @@ WRITE8_MEMBER(generic_romram_plain_device::write_ram)
if (offset < m_ram.bytes())
m_ram[offset] = data;
}

View File

@ -14,7 +14,7 @@ class generic_rom_device : public device_t,
public:
// construction/destruction
generic_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
// device-level overrides
virtual void device_start() {}
};
@ -28,7 +28,7 @@ public:
// construction/destruction
generic_rom_plain_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
generic_rom_plain_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_READ16_MEMBER(read16_rom);
@ -43,7 +43,7 @@ class generic_romram_plain_device : public generic_rom_plain_device
public:
// construction/destruction
generic_romram_plain_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_ram);
virtual DECLARE_WRITE8_MEMBER(write_ram);
@ -57,7 +57,7 @@ class generic_rom_linear_device : public generic_rom_device
public:
// construction/destruction
generic_rom_linear_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_READ16_MEMBER(read16_rom);

View File

@ -3,7 +3,7 @@
/***********************************************************************************************************
Generic ROM / RAM Socket and Cartslot device
This device offers basic RAM / ROM allocation and access
The available handlers are suited for any situation where a system opens a
@ -12,12 +12,12 @@
This device is not suited whenever the system exposes additional lines to
the socket/slot: e.g. whenever input/output lines are present, whenever
there are lines controlling bankswitch / paging, and whenever different
cart configurations have to be supported (like some PCBs containing ROM
cart configurations have to be supported (like some PCBs containing ROM
only, and other containing both ROM and RAM)
In the latter situations, per-system slot devices have to be created (see
e.g. APF cart slot device for an example of a simple device with multiple
pcbs supported)
***********************************************************************************************************/
@ -136,15 +136,15 @@ void generic_slot_device::device_config_complete()
bool generic_slot_device::call_load()
{
if (m_cart)
{
{
if (!m_device_image_load.isnull())
return m_device_image_load(*this);
else
{
UINT32 len = common_get_size("rom");
rom_alloc(len, m_width, m_endianness);
common_load_rom(get_rom_base(), len, "rom");
common_load_rom(get_rom_base(), len, "rom");
return IMAGE_INIT_PASS;
}
@ -189,13 +189,13 @@ void generic_slot_device::get_default_card_software(astring &result)
/**************************************************
Implementation
Implementation
**************************************************/
/*-------------------------------------------------
common_get_size - it gets image file size both
common_get_size - it gets image file size both
for fullpath and for softlist
-------------------------------------------------*/
@ -208,7 +208,7 @@ UINT32 generic_slot_device::common_get_size(const char *region)
}
/*-------------------------------------------------
common_load_rom - it loads from image file both
common_load_rom - it loads from image file both
for fullpath and for softlist
-------------------------------------------------*/
@ -283,4 +283,3 @@ WRITE8_MEMBER(generic_slot_device::write_ram)
if (m_cart)
m_cart->write_ram(space, offset, data);
}

View File

@ -93,14 +93,14 @@ public:
static void static_set_device_load(device_t &device, device_image_load_delegate callback) { downcast<generic_slot_device &>(device).m_device_image_load = callback; }
static void static_set_device_unload(device_t &device, device_image_func_delegate callback) { downcast<generic_slot_device &>(device).m_device_image_unload = callback; }
void set_interface(const char * interface) { m_interface = interface; }
void set_default_card(const char * def) { m_default_card = def; }
void set_extensions(const char * exts) { m_extensions = exts; }
void set_must_be_loaded(bool mandatory) { m_must_be_loaded = mandatory; }
void set_width(int width) { m_width = width; }
void set_endian(endianness_t end) { m_endianness = end; }
// device-level overrides
virtual void device_start();
virtual void device_config_complete();
@ -168,11 +168,9 @@ extern const device_type GENERIC_SOCKET;
#define MCFG_GENERIC_CARTSLOT_ADD(_tag, _slot_intf, _dev_intf) \
MCFG_DEVICE_ADD(_tag, GENERIC_SOCKET, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, NULL, false) \
MCFG_GENERIC_INTERFACE(_dev_intf) \
MCFG_GENERIC_INTERFACE(_dev_intf)
#define MCFG_GENERIC_SOCKET_ADD(_tag, _slot_intf, _dev_intf) \
MCFG_DEVICE_ADD(_tag, GENERIC_SOCKET, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, NULL, false) \
MCFG_GENERIC_INTERFACE(_dev_intf) \
MCFG_GENERIC_INTERFACE(_dev_intf)
#endif

View File

@ -4,10 +4,10 @@
Mattel Intellivision Entertainment Computer System expansion emulation
TODO:
- Make paged rom emulation more accurate (according to
- Make paged rom emulation more accurate (according to
http://spatula-city.org/~im14u2c/intv/tech/ecs.html
writes to $xa5y should be available for every x and every y, i.e. we shall
have writes to every 4K chunk of the memory map, and there shall be 16 pages
writes to $xa5y should be available for every x and every y, i.e. we shall
have writes to every 4K chunk of the memory map, and there shall be 16 pages
for each)
Current emulation is instead tailored around the minimal usage necessary to
make the main expansion and World Series Major League Baseball happy
@ -67,12 +67,12 @@ void intv_ecs_device::device_start()
}
void intv_ecs_device::device_reset()
{
{
memset(m_bank_base, 0, sizeof(m_bank_base));
}
void intv_ecs_device::late_subslot_setup()
{
{
switch (m_subslot->get_type())
{
case INTV_RAM:
@ -107,13 +107,13 @@ UINT8 intv_ecs_device::intv_control_r(int hand)
0xFF, 0x3F, 0x9F, 0x5F, 0xD7, 0xB7, 0x77, 0xDB,
0xBB, 0x7B, 0xDD, 0xBD, 0x7D, 0xDE, 0xBE, 0x7E
};
static const UINT8 disc_table[] =
{
0xF3, 0xE3, 0xE7, 0xF7, 0xF6, 0xE6, 0xEE, 0xFE,
0xFC, 0xEC, 0xED, 0xFD, 0xF9, 0xE9, 0xEB, 0xFB
};
static const UINT8 discyx_table[5][5] =
{
{ 0xE3, 0xF3, 0xFB, 0xEB, 0xE9 },
@ -122,10 +122,10 @@ UINT8 intv_ecs_device::intv_control_r(int hand)
{ 0xF6, 0xE6, 0xFE, 0xEC, 0xED },
{ 0xE6, 0xEE, 0xFE, 0xFC, 0xEC }
};
int x, y;
UINT8 val = 0xff;
/* keypad */
x = m_keypad[hand]->read();
for (y = 0; y < 16; y++)
@ -135,12 +135,12 @@ UINT8 intv_ecs_device::intv_control_r(int hand)
val &= keypad_table[y];
}
}
switch ((m_options->read() >> hand) & 4)
{
case 0: /* disc == digital */
default:
x = m_disc[hand]->read();
for (y = 0; y < 16; y++)
{
@ -150,14 +150,14 @@ UINT8 intv_ecs_device::intv_control_r(int hand)
}
}
break;
case 1: /* disc == _fake_ analog */
x = m_discx[hand]->read();
y = m_discy[hand]->read();
val &= discyx_table[y / 32][x / 32];
}
return val;
}
@ -252,7 +252,7 @@ static INPUT_PORTS_START( intv_ecs_kbd )
Bit 4 D E 2 3 W S Z X
Bit 5 A CTL (right) 1 Q (up) (down) (space)
Bit 6 SHIFT NC NC NC NC NC NC NC
Shifted keys that differ from pc:
Key : 1 2 5 6 7 (left) (right) (up) (down)
Shift + key: = " + - / % ' ^ ?
@ -530,32 +530,32 @@ ioport_constructor intv_ecs_device::device_input_ports() const
Paged ROM handling
-------------------------------------------------*/
READ16_MEMBER(intv_ecs_device::read_rom20)
{
READ16_MEMBER(intv_ecs_device::read_rom20)
{
if (m_bank_base[2])
return INTV_ROM16_READ(offset + 0x2000);
return INTV_ROM16_READ(offset + 0x2000);
else
return 0xffff;
}
READ16_MEMBER(intv_ecs_device::read_rom70)
{
READ16_MEMBER(intv_ecs_device::read_rom70)
{
if (m_bank_base[7])
return 0xffff;
else
return INTV_ROM16_READ(offset + 0x7000);
return INTV_ROM16_READ(offset + 0x7000);
}
READ16_MEMBER(intv_ecs_device::read_rome0)
{
READ16_MEMBER(intv_ecs_device::read_rome0)
{
if (m_bank_base[14])
return INTV_ROM16_READ(offset + 0xe000);
else // if WSMLB is loaded, it shall go here, otherwise 0xffff
return INTV_ROM16_READ(offset + 0xe000);
else // if WSMLB is loaded, it shall go here, otherwise 0xffff
return m_subslot->read_rome0(space, offset, mem_mask);
}
READ16_MEMBER(intv_ecs_device::read_romf0)
{
READ16_MEMBER(intv_ecs_device::read_romf0)
{
// only WSMLB should come here with bank_base = 1
if (m_bank_base[15])
return m_subslot->read_romf0(space, offset + 0x1000, mem_mask);
@ -585,4 +585,3 @@ WRITE16_MEMBER(intv_ecs_device::write_ay)
if (ACCESSING_BITS_0_7)
return m_snd->write(space, offset, data, mem_mask);
}

View File

@ -14,14 +14,14 @@ class intv_ecs_device : public intv_rom_device
public:
// construction/destruction
intv_ecs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual machine_config_constructor device_mconfig_additions() const;
virtual ioport_constructor device_input_ports() const;
virtual const rom_entry *device_rom_region() const;
// reading and writing
// actual ECS accesses
@ -32,14 +32,14 @@ public:
virtual DECLARE_READ16_MEMBER(read_romf0);
// RAM
virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
// AY8914
virtual DECLARE_READ16_MEMBER(read_ay);
virtual DECLARE_WRITE16_MEMBER(write_ay);
DECLARE_READ8_MEMBER(ay_porta_r);
DECLARE_READ8_MEMBER(ay_portb_r);
DECLARE_WRITE8_MEMBER(ay_porta_w);
// passthru accesses
virtual DECLARE_READ16_MEMBER(read_rom04) { return m_subslot->read_rom04(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_rom40) { return m_subslot->read_rom40(space, offset, mem_mask); }
@ -47,27 +47,27 @@ public:
virtual DECLARE_READ16_MEMBER(read_rom50) { return m_subslot->read_rom50(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_rom60) { return m_subslot->read_rom60(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_rom80)
{
{
if (m_ram88_enabled && offset >= 0x800)
return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
else
return m_subslot->read_rom80(space, offset, mem_mask);
return m_subslot->read_rom80(space, offset, mem_mask);
}
virtual DECLARE_READ16_MEMBER(read_rom90) { return m_subslot->read_rom90(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_roma0) { return m_subslot->read_roma0(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_romb0) { return m_subslot->read_romb0(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_romc0) { return m_subslot->read_romc0(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_romd0)
{
virtual DECLARE_READ16_MEMBER(read_romd0)
{
if (m_ramd0_enabled && offset < 0x800)
return m_subslot->read_ram(space, offset, mem_mask);
return m_subslot->read_ram(space, offset, mem_mask);
else
return m_subslot->read_romd0(space, offset, mem_mask);
return m_subslot->read_romd0(space, offset, mem_mask);
}
// paged ROM banking
virtual DECLARE_WRITE16_MEMBER(write_rom20)
{
virtual DECLARE_WRITE16_MEMBER(write_rom20)
{
if (offset == 0xfff)
{
if (data == 0x2a50)
@ -76,8 +76,8 @@ public:
m_bank_base[2] = 1;
}
}
virtual DECLARE_WRITE16_MEMBER(write_rom70)
{
virtual DECLARE_WRITE16_MEMBER(write_rom70)
{
if (offset == 0xfff)
{
if (data == 0x7a50)
@ -86,8 +86,8 @@ public:
m_bank_base[7] = 1;
}
}
virtual DECLARE_WRITE16_MEMBER(write_rome0)
{
virtual DECLARE_WRITE16_MEMBER(write_rome0)
{
if (offset == 0xfff)
{
if (data == 0xea50)
@ -96,8 +96,8 @@ public:
m_bank_base[14] = 1;
}
}
virtual DECLARE_WRITE16_MEMBER(write_romf0)
{
virtual DECLARE_WRITE16_MEMBER(write_romf0)
{
if (offset == 0xfff)
{
if (data == 0xfa50)
@ -112,11 +112,11 @@ public:
// IntelliVoice passthru
virtual DECLARE_READ16_MEMBER(read_speech) { if (m_voice_enabled) return m_subslot->read_speech(space, offset, mem_mask); else return 0xffff; }
virtual DECLARE_WRITE16_MEMBER(write_speech) { if (m_voice_enabled) m_subslot->write_speech(space, offset, data, mem_mask); }
virtual void late_subslot_setup();
UINT8 intv_control_r(int hand);
private:
required_device<ay8914_device> m_snd;

View File

@ -47,4 +47,3 @@ intv_wsmlb_device::intv_wsmlb_device(const machine_config &mconfig, const char *
: intv_rom_device(mconfig, INTV_ROM_WSMLB, "Intellivision World Series Baseball Cart", tag, owner, clock, "intv_wsmlb", __FILE__)
{
}

View File

@ -13,7 +13,7 @@ public:
// construction/destruction
intv_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
intv_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ16_MEMBER(read_rom04) { return INTV_ROM16_READ(offset + 0x0400); }
virtual DECLARE_READ16_MEMBER(read_rom20) { return INTV_ROM16_READ(offset + 0x2000); }
@ -30,7 +30,7 @@ public:
virtual DECLARE_READ16_MEMBER(read_romd0) { return INTV_ROM16_READ(offset + 0xd000); }
virtual DECLARE_READ16_MEMBER(read_rome0) { return INTV_ROM16_READ(offset + 0xe000); }
virtual DECLARE_READ16_MEMBER(read_romf0) { return INTV_ROM16_READ(offset + 0xf000); }
// device-level overrides
virtual void device_start() {}
virtual void device_reset() {}
@ -43,7 +43,7 @@ class intv_ram_device : public intv_rom_device
public:
// construction/destruction
intv_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
@ -56,7 +56,7 @@ class intv_gfact_device : public intv_rom_device
public:
// construction/destruction
intv_gfact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }

View File

@ -3,18 +3,18 @@
Mattel Intellivision cart emulation
(through slot devices)
This is a strange beast, because INTV carts had potentially access to
a *LOT* of memory ranges!
Quoting Joe Zbiciak's documentation for his emu (jzIntv):
The Intellivision leaves many addresses available to cartridges. However,
several address ranges come with caveats, such as interactions with other
devices in the system, or incompatibilities with various peripherals.
devices in the system, or incompatibilities with various peripherals.
Below is a summary.
ADDRESSES NOTES
-------------- --------------------------------------------------------------
$0400 - $04FF RAM/ROM ok on all but Intellivision 2.
@ -26,7 +26,7 @@
$4800 ROM ok. RAM ok only if boot ROM at $7000.
$4801 - $4FFF RAM/ROM ok.
$5000 - $5014 ROM ok. RAM ok only if boot ROM at $7000 or $4800.
$5015 - $6FFF RAM/ROM ok.
$5015 - $6FFF RAM/ROM ok.
$7000 ROM ok if no ECS. RAM at $7000 confuses EXEC boot sequence.
$7001 - $77FF RAM/ROM ok if no ECS.
$7800 - $7FFF ROM ok if no ECS. Do not map RAM here due to GRAM alias.
@ -38,8 +38,8 @@
$E000 - $EFFF RAM/ROM ok if no ECS.
$F000 - $F7FF RAM/ROM ok.
$F800 - $FFFF ROM ok. Do not map RAM here due to GRAM alias.
We handle this, by always creating a 0x10000 wide ROM region to load the
cart image and exposing the following (long list of) read handlers:
read_rom04
@ -58,7 +58,7 @@
read_rome0
read_romf0
Each pcb types will then use the correct ones for its wiring setup.
The BIN+CFG format introduced by INTVPC emulator includes metadata about where to
load ROM into memory in the CFG file, but we don't support it (because we don't parse
the CFG at all) and we rely instead on the intv.hsi metadata for fullpath loading of
@ -69,7 +69,7 @@
TODO:
- Convert also the keyboard component to be a passthru slot device
- Merge some of the ROM accessor above, once it is clear which ones can be merged
***********************************************************************************************************/
@ -239,16 +239,16 @@ int intv_cart_slot_device::load_fullpath()
UINT8 num_segments;
UINT8 start_seg;
UINT8 end_seg;
UINT32 current_address;
UINT32 end_address;
UINT8 high_byte;
UINT8 low_byte;
UINT8 *ROM;
const char *file_type = filetype();
/* if it is in .rom format, we enter here */
if (!core_stricmp (file_type, "rom"))
{
@ -256,9 +256,9 @@ int intv_cart_slot_device::load_fullpath()
fread(&temp, 1);
if (temp != 0xa8)
return IMAGE_INIT_FAIL;
fread(&num_segments, 1);
fread(&temp, 1);
if (temp != (num_segments ^ 0xff))
return IMAGE_INIT_FAIL;
@ -270,10 +270,10 @@ int intv_cart_slot_device::load_fullpath()
{
fread(&start_seg, 1);
current_address = start_seg * 0x100;
fread(&end_seg, 1);
end_address = end_seg * 0x100 + 0xff;
while (current_address <= end_address)
{
fread(&low_byte, 1);
@ -282,12 +282,12 @@ int intv_cart_slot_device::load_fullpath()
ROM[current_address << 1] = high_byte;
current_address++;
}
// Here we should calculate and compare the CRC16...
fread(&temp, 1);
fread(&temp, 1);
}
// Access tables and fine address restriction tables are not supported ATM
for (int i = 0; i < (16 + 32 + 2); i++)
{
@ -300,7 +300,7 @@ int intv_cart_slot_device::load_fullpath()
{
// This code is a blatant hack, due to impossibility to load a separate .cfg file in MESS.
// It shall be eventually replaced by the .xml loading
// extrainfo format
// 1. mapper number (to deal with bankswitch). no bankswitch is mapper 0 (most games).
// 2.->5. current images have at most 4 chunks of data. we store here block size and location to load
@ -314,7 +314,7 @@ int intv_cart_slot_device::load_fullpath()
m_cart->rom_alloc(0x20000, tag());
ROM = (UINT8 *)m_cart->get_rom_base();
if (!hashfile_extrainfo(*this, extrainfo))
{
// If no extrainfo, we assume a single 0x2000 chunk at 0x5000
@ -329,12 +329,12 @@ int intv_cart_slot_device::load_fullpath()
else
{
sscanf(extrainfo.cstr() ,"%d %d %d %d %d %d %d", &mapper, &rom[0], &rom[1], &rom[2],
&rom[3], &ram, &extra);
&rom[3], &ram, &extra);
//printf("extrainfo: %d %d %d %d %d %d %d \n", mapper, rom[0], rom[1], rom[2], rom[3], ram, extra);
if (mapper)
logerror("Bankswitch not yet implemented!\n");
if (ram)
{
start = ((ram & 0xf0) >> 4) * 0x1000;
@ -355,25 +355,25 @@ int intv_cart_slot_device::load_fullpath()
}
if (extra & INTELLIVOICE_MASK)
{
printf("WARNING: This game requires emulation of the IntelliVoice module.\n");
printf("WARNING: This game requires emulation of the IntelliVoice module.\n");
}
if (extra & ECS_MASK)
{
printf("WARNING: This game requires emulation of the ECS module.\n");
}
for (int j = 0; j < 4; j++)
{
start = ((rom[j] & 0xf0) >> 4) * 0x1000;
size = (rom[j] & 0x0f) * 0x800;
// some cart has to be loaded to 0x4800, but none of the available ones goes to 0x4000.
// some cart has to be loaded to 0x4800, but none of the available ones goes to 0x4000.
// Hence, we use 0x04 << 4 in extrainfo (to reduce the stored values) and fix the value here.
if (start == 0x4000) start += 0x800;
// logerror("step %d: %d %d \n", j, start / 0x1000, size / 0x1000);
for (int i = 0; i < size; i++)
{
fread(&low_byte, 1);
@ -383,7 +383,7 @@ int intv_cart_slot_device::load_fullpath()
}
}
}
return IMAGE_INIT_PASS;
}
}
@ -408,7 +408,7 @@ bool intv_cart_slot_device::call_load()
// so if we are loading one of these, we allocate additional 0x2000 bytes for the paged bank
if (m_type == INTV_WSMLB)
extra_bank = true;
UINT32 size = 0;
UINT16 address = 0;
UINT8 *ROM, *region;
@ -423,7 +423,7 @@ bool intv_cart_slot_device::call_load()
if (size)
{
region = get_software_region(region_name[i]);
for (int j = 0; j < size / 2; j++)
{
ROM[((address + j) << 1) + 1] = region[2 * j];
@ -467,7 +467,7 @@ void intv_cart_slot_device::get_default_card_software(astring &result)
UINT32 len = core_fsize(m_file);
dynamic_buffer rom(len);
int type = INTV_STD;
core_fread(m_file, rom, len);
if (rom[0] == 0xa8 && (rom[1] == (rom[2] ^ 0xff)))
@ -480,12 +480,12 @@ void intv_cart_slot_device::get_default_card_software(astring &result)
int start;
int mapper, rom[5], ram, extra;
astring extrainfo;
if (hashfile_extrainfo(*this, extrainfo))
{
sscanf(extrainfo.cstr() ,"%d %d %d %d %d %d %d", &mapper, &rom[0], &rom[1], &rom[2],
&rom[3], &ram, &extra);
&rom[3], &ram, &extra);
if (ram)
{
start = ((ram & 0xf0) >> 4) * 0x1000;
@ -495,7 +495,7 @@ void intv_cart_slot_device::get_default_card_software(astring &result)
type = INTV_GFACT;
}
}
}
slot_string = intv_get_slot(type);
@ -567,6 +567,5 @@ SLOT_INTERFACE_START(intv_cart)
SLOT_INTERFACE_INTERNAL("intv_wsmlb", INTV_ROM_WSMLB)
SLOT_INTERFACE_INTERNAL("intv_voice", INTV_ROM_VOICE)
SLOT_INTERFACE_INTERNAL("intv_ecs", INTV_ROM_ECS)
// SLOT_INTERFACE_INTERNAL("intv_keycomp", INTV_ROM_KEYCOMP)
// SLOT_INTERFACE_INTERNAL("intv_keycomp", INTV_ROM_KEYCOMP)
SLOT_INTERFACE_END

View File

@ -11,7 +11,7 @@ enum
{
INTV_STD = 0,
INTV_RAM,
INTV_GFACT, // has RAM too but at diff offset
INTV_GFACT, // has RAM too but at diff offset
INTV_WSMLB,
INTV_VOICE,
INTV_ECS,
@ -51,7 +51,7 @@ public:
virtual DECLARE_READ16_MEMBER(read_ram) { return 0xffff; }
virtual DECLARE_WRITE16_MEMBER(write_ram) {}
// Used by IntelliVoice & ECS
virtual DECLARE_READ16_MEMBER(read_ay) { return 0xffff; }
virtual DECLARE_WRITE16_MEMBER(write_ay) {}
@ -71,7 +71,7 @@ public:
UINT32 get_rom_size() { return m_rom_size; }
UINT32 get_ram_size() { return m_ram.count(); }
void save_ram() { device().save_item(NAME(m_ram)); }
void save_ram() { device().save_item(NAME(m_ram)); }
virtual void late_subslot_setup() {}
protected:
@ -105,7 +105,7 @@ public:
int get_type() { return m_type; }
int load_fullpath();
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
@ -136,7 +136,7 @@ public:
virtual DECLARE_READ16_MEMBER(read_romd0) { if (m_cart) return m_cart->read_romd0(space, offset, mem_mask); else return 0xffff; }
virtual DECLARE_READ16_MEMBER(read_rome0) { if (m_cart) return m_cart->read_rome0(space, offset, mem_mask); else return 0xffff; }
virtual DECLARE_READ16_MEMBER(read_romf0) { if (m_cart) return m_cart->read_romf0(space, offset, mem_mask); else return 0xffff; }
virtual DECLARE_READ16_MEMBER(read_ay);
virtual DECLARE_WRITE16_MEMBER(write_ay);
virtual DECLARE_READ16_MEMBER(read_speech);
@ -176,8 +176,7 @@ extern const device_type INTV_CART_SLOT;
#define MCFG_INTV_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, INTV_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
SLOT_INTERFACE_EXTERN(intv_cart);

View File

@ -13,7 +13,7 @@ class intv_voice_device : public intv_rom_device
public:
// construction/destruction
intv_voice_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual machine_config_constructor device_mconfig_additions() const;
@ -23,7 +23,7 @@ public:
// actual IntelliVoice access
virtual DECLARE_READ16_MEMBER(read_speech);
virtual DECLARE_WRITE16_MEMBER(write_speech);
// passthru access
virtual DECLARE_READ16_MEMBER(read_rom04) { return m_subslot->read_rom04(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_rom20) { return m_subslot->read_rom20(space, offset, mem_mask); }
@ -33,34 +33,34 @@ public:
virtual DECLARE_READ16_MEMBER(read_rom60) { return m_subslot->read_rom60(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_rom70) { return m_subslot->read_rom70(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_rom80)
{
{
if (m_ram88_enabled && offset >= 0x800)
return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
else
return m_subslot->read_rom80(space, offset, mem_mask);
return m_subslot->read_rom80(space, offset, mem_mask);
}
virtual DECLARE_READ16_MEMBER(read_rom90) { return m_subslot->read_rom90(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_roma0) { return m_subslot->read_roma0(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_romb0) { return m_subslot->read_romb0(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_romc0) { return m_subslot->read_romc0(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_romd0)
{
virtual DECLARE_READ16_MEMBER(read_romd0)
{
if (m_ramd0_enabled && offset < 0x800)
return m_subslot->read_ram(space, offset, mem_mask);
return m_subslot->read_ram(space, offset, mem_mask);
else
return m_subslot->read_romd0(space, offset, mem_mask);
return m_subslot->read_romd0(space, offset, mem_mask);
}
virtual DECLARE_READ16_MEMBER(read_rome0) { return m_subslot->read_rome0(space, offset, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_romf0) { return m_subslot->read_romf0(space, offset, mem_mask); }
// RAM passthru write
virtual DECLARE_WRITE16_MEMBER(write_88) { if (m_ram88_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
virtual DECLARE_WRITE16_MEMBER(write_d0) { if (m_ramd0_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
virtual DECLARE_READ16_MEMBER(read_ram) { return m_subslot->read_ram(space, offset, mem_mask); }
virtual DECLARE_WRITE16_MEMBER(write_ram) { m_subslot->write_ram(space, offset, data, mem_mask); }
virtual void late_subslot_setup();
private:
required_device<sp0256_device> m_speech;
required_device<intv_cart_slot_device> m_subslot;

View File

@ -370,12 +370,12 @@ ROM_END
static ADDRESS_MAP_START(sb16_io, AS_IO, 8, sb16_lle_device)
AM_RANGE(0x0000, 0x0000) AM_MIRROR(0xff00) AM_READWRITE(dsp_data_r, dsp_data_w)
// AM_RANGE(0x0001, 0x0001) // MIDI related?
// AM_RANGE(0x0002, 0x0002)
// AM_RANGE(0x0001, 0x0001) // MIDI related?
// AM_RANGE(0x0002, 0x0002)
AM_RANGE(0x0004, 0x0004) AM_MIRROR(0xff00) AM_READWRITE(mode_r, mode_w)
AM_RANGE(0x0005, 0x0005) AM_MIRROR(0xff00) AM_READWRITE(dac_ctrl_r, dac_ctrl_w)
AM_RANGE(0x0006, 0x0006) AM_MIRROR(0xff00) AM_READ(dma_stat_r)
// AM_RANGE(0x0007, 0x0007) // unknown
// AM_RANGE(0x0007, 0x0007) // unknown
AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff00) AM_READWRITE(ctrl8_r, ctrl8_w)
AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xff00) AM_WRITE(rate_w)
AM_RANGE(0x000A, 0x000A) AM_MIRROR(0xff00) AM_READ(dma8_cnt_lo_r)
@ -393,9 +393,9 @@ static ADDRESS_MAP_START(sb16_io, AS_IO, 8, sb16_lle_device)
AM_RANGE(0x001B, 0x001B) AM_MIRROR(0xff00) AM_READ(adc_data_r)
AM_RANGE(0x001D, 0x001D) AM_MIRROR(0xff00) AM_WRITE(dma8_w)
AM_RANGE(0x001F, 0x001F) AM_MIRROR(0xff00) AM_READ(dma8_r)
// AM_RANGE(0x0080, 0x0080) // ASP comms
// AM_RANGE(0x0081, 0x0081)
// AM_RANGE(0x0082, 0x0082)
// AM_RANGE(0x0080, 0x0080) // ASP comms
// AM_RANGE(0x0081, 0x0081)
// AM_RANGE(0x0082, 0x0082)
AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE(p1_r, p1_w)
AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE(p2_r, p2_w)
ADDRESS_MAP_END

View File

@ -87,10 +87,10 @@ void isa8_svga_tgui9680_device::device_start()
m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(trident_vga_device::mem_r),m_vga), write8_delegate(FUNC(trident_vga_device::mem_w),m_vga));
// uncomment to test Windows 3.1 TGUI9440AGi driver
// m_isa->install_memory(0x4400000, 0x45fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga));
// m_isa->install_memory(0x4400000, 0x45fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga));
// win95 drivers
// m_isa->install_memory(0x4000000, 0x41fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga));
// m_isa->install_memory(0x4000000, 0x41fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga));
// acceleration ports
m_isa->install_device(0x2120, 0x21ff, 0, 0, read8_delegate(FUNC(trident_vga_device::accel_r),m_vga), write8_delegate(FUNC(trident_vga_device::accel_w),m_vga));

View File

@ -45,21 +45,21 @@ UINT8 trident_vga_device::READPIXEL8(INT16 x, INT16 y)
UINT16 trident_vga_device::READPIXEL15(INT16 x, INT16 y)
{
return (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*2) % vga.svga_intf.vram_size] |
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] << 8));
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] << 8));
}
UINT16 trident_vga_device::READPIXEL16(INT16 x, INT16 y)
{
return (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*2) % vga.svga_intf.vram_size] |
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] << 8));
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] << 8));
}
UINT32 trident_vga_device::READPIXEL32(INT16 x, INT16 y)
{
return (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*4) % vga.svga_intf.vram_size] |
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+1) % vga.svga_intf.vram_size] << 8) |
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+2) % vga.svga_intf.vram_size] << 16) |
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+3) % vga.svga_intf.vram_size] << 24));
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+1) % vga.svga_intf.vram_size] << 8) |
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+2) % vga.svga_intf.vram_size] << 16) |
(vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+3) % vga.svga_intf.vram_size] << 24));
}
void trident_vga_device::WRITEPIXEL8(INT16 x, INT16 y, UINT8 data)
@ -249,9 +249,9 @@ UINT32 trident_vga_device::screen_update(screen_device &screen, bitmap_rgb32 &bi
for(x=0;x<cursor_size;x++)
{
UINT32 bitb = (vga.memory[(src+3) % vga.svga_intf.vram_size]
| ((vga.memory[(src+2) % vga.svga_intf.vram_size]) << 8)
| ((vga.memory[(src+1) % vga.svga_intf.vram_size]) << 16)
| ((vga.memory[(src+0) % vga.svga_intf.vram_size]) << 24));
| ((vga.memory[(src+2) % vga.svga_intf.vram_size]) << 8)
| ((vga.memory[(src+1) % vga.svga_intf.vram_size]) << 16)
| ((vga.memory[(src+0) % vga.svga_intf.vram_size]) << 24));
UINT32 bita = (vga.memory[(src+7) % vga.svga_intf.vram_size]
| ((vga.memory[(src+6) % vga.svga_intf.vram_size]) << 8)
| ((vga.memory[(src+5) % vga.svga_intf.vram_size]) << 16)
@ -1131,60 +1131,60 @@ UINT8 trident_vga_device::old_mmio_r(address_space& space, UINT32 offset)
/*
Graphics Engine for 9440/9660/9680
#define GER_STATUS 0x2120
#define GE_BUSY 0x80
#define GER_OPERMODE 0x2122 Byte for 9440, Word for 96xx
#define DST_ENABLE 0x200 // Destination Transparency
#define GER_COMMAND 0x2124
#define GE_NOP 0x00 // No Operation
#define GE_BLT 0x01 // BitBLT ROP3 only
#define GE_BLT_ROP4 0x02 // BitBLT ROP4 (96xx only)
#define GE_SCANLINE 0x03 // Scan Line
#define GE_BRESLINE 0x04 // Bresenham Line
#define GE_SHVECTOR 0x05 // Short Vector
#define GE_FASTLINE 0x06 // Fast Line (96xx only)
#define GE_TRAPEZ 0x07 // Trapezoidal fill (96xx only)
#define GE_ELLIPSE 0x08 // Ellipse (96xx only) (RES)
#define GE_ELLIP_FILL 0x09 // Ellipse Fill (96xx only) (RES)
#define GER_FMIX 0x2127
#define GER_DRAWFLAG 0x2128 // long
#define FASTMODE 1<<28
#define STENCIL 0x8000
#define SOLIDFILL 0x4000
#define TRANS_ENABLE 0x1000
#define TRANS_REVERSE 0x2000
#define YMAJ 0x0400
#define XNEG 0x0200
#define YNEG 0x0100
#define SRCMONO 0x0040
#define PATMONO 0x0020
#define SCR2SCR 0x0004
#define PAT2SCR 0x0002
#define GER_FCOLOUR 0x212C // Word for 9440, long for 96xx
#define GER_BCOLOUR 0x2130 // Word for 9440, long for 96xx
#define GER_PATLOC 0x2134 // Word
#define GER_DEST_XY 0x2138
#define GER_DEST_X 0x2138 // Word
#define GER_DEST_Y 0x213A // Word
#define GER_SRC_XY 0x213C
#define GER_SRC_X 0x213C // Word
#define GER_SRC_Y 0x213E // Word
#define GER_DIM_XY 0x2140
#define GER_DIM_X 0x2140 // Word
#define GER_DIM_Y 0x2142 // Word
#define GER_STYLE 0x2144 // Long
#define GER_CKEY 0x2168 // Long
#define GER_FPATCOL 0x2178
#define GER_BPATCOL 0x217C
#define GER_PATTERN 0x2180 // from 0x2180 to 0x21FF
#define GER_STATUS 0x2120
#define GE_BUSY 0x80
#define GER_OPERMODE 0x2122 Byte for 9440, Word for 96xx
#define DST_ENABLE 0x200 // Destination Transparency
#define GER_COMMAND 0x2124
#define GE_NOP 0x00 // No Operation
#define GE_BLT 0x01 // BitBLT ROP3 only
#define GE_BLT_ROP4 0x02 // BitBLT ROP4 (96xx only)
#define GE_SCANLINE 0x03 // Scan Line
#define GE_BRESLINE 0x04 // Bresenham Line
#define GE_SHVECTOR 0x05 // Short Vector
#define GE_FASTLINE 0x06 // Fast Line (96xx only)
#define GE_TRAPEZ 0x07 // Trapezoidal fill (96xx only)
#define GE_ELLIPSE 0x08 // Ellipse (96xx only) (RES)
#define GE_ELLIP_FILL 0x09 // Ellipse Fill (96xx only) (RES)
#define GER_FMIX 0x2127
#define GER_DRAWFLAG 0x2128 // long
#define FASTMODE 1<<28
#define STENCIL 0x8000
#define SOLIDFILL 0x4000
#define TRANS_ENABLE 0x1000
#define TRANS_REVERSE 0x2000
#define YMAJ 0x0400
#define XNEG 0x0200
#define YNEG 0x0100
#define SRCMONO 0x0040
#define PATMONO 0x0020
#define SCR2SCR 0x0004
#define PAT2SCR 0x0002
#define GER_FCOLOUR 0x212C // Word for 9440, long for 96xx
#define GER_BCOLOUR 0x2130 // Word for 9440, long for 96xx
#define GER_PATLOC 0x2134 // Word
#define GER_DEST_XY 0x2138
#define GER_DEST_X 0x2138 // Word
#define GER_DEST_Y 0x213A // Word
#define GER_SRC_XY 0x213C
#define GER_SRC_X 0x213C // Word
#define GER_SRC_Y 0x213E // Word
#define GER_DIM_XY 0x2140
#define GER_DIM_X 0x2140 // Word
#define GER_DIM_Y 0x2142 // Word
#define GER_STYLE 0x2144 // Long
#define GER_CKEY 0x2168 // Long
#define GER_FPATCOL 0x2178
#define GER_BPATCOL 0x217C
#define GER_PATTERN 0x2180 // from 0x2180 to 0x21FF
Additional - Graphics Engine for 96xx
#define GER_SRCCLIP_XY 0x2148
#define GER_SRCCLIP_X 0x2148 // Word
#define GER_SRCCLIP_Y 0x214A // Word
#define GER_DSTCLIP_XY 0x214C
#define GER_DSTCLIP_X 0x214C // Word
#define GER_DSTCLIP_Y 0x214E // Word
#define GER_SRCCLIP_XY 0x2148
#define GER_SRCCLIP_X 0x2148 // Word
#define GER_SRCCLIP_Y 0x214A // Word
#define GER_DSTCLIP_XY 0x214C
#define GER_DSTCLIP_X 0x214C // Word
#define GER_DSTCLIP_Y 0x214E // Word
*/
READ8_MEMBER(trident_vga_device::accel_r)

View File

@ -5,17 +5,17 @@
based on Charles MacDonald's docs: http://cgfm2.emuviews.com/txt/genie.txt
There is an interesting difference between Rev.0 and Rev.A
After the codes has been entered, the former just performs
a last write to the MODE register (m_gg_regs[0]) which both
sets the enable bits for the 6 available cheats (in the low
8 bits) and locks the GG so that later reads goes to the
After the codes has been entered, the former just performs
a last write to the MODE register (m_gg_regs[0]) which both
sets the enable bits for the 6 available cheats (in the low
8 bits) and locks the GG so that later reads goes to the
piggyback cart. The latter revision, instead, performs the
same operations in two subsequent 8bit writes, accessing
same operations in two subsequent 8bit writes, accessing
separately the low and high bits of the register.
***********************************************************************************************************/
#include "emu.h"
@ -86,7 +86,7 @@ READ16_MEMBER(md_rom_ggenie_device::read)
return m_gg_data[5];
else
return m_exp->m_cart->read(space, offset);
}
}
else
return 0xffff;
}
@ -114,7 +114,7 @@ WRITE16_MEMBER(md_rom_ggenie_device::write)
else
{
m_gg_bypass = 0;
// bit9 set = read goes to ASIC registers
if (data & 0x200)
m_reg_enable = 1;
@ -122,7 +122,7 @@ WRITE16_MEMBER(md_rom_ggenie_device::write)
else
m_reg_enable = 0;
}
// LOCK bit
if (data & 0x100)
{
@ -133,7 +133,7 @@ WRITE16_MEMBER(md_rom_ggenie_device::write)
m_gg_addr[3] = ((m_gg_regs[11] & 0x3f) << 16) | m_gg_regs[12];
m_gg_addr[4] = ((m_gg_regs[14] & 0x3f) << 16) | m_gg_regs[15];
m_gg_addr[5] = ((m_gg_regs[17] & 0x3f) << 16) | m_gg_regs[18];
// data
m_gg_data[0] = m_gg_regs[4];
m_gg_data[1] = m_gg_regs[7];
@ -144,9 +144,9 @@ WRITE16_MEMBER(md_rom_ggenie_device::write)
//printf("mode %X\n", data);
//for (int i = 0; i < 6; i++)
// printf("addr %d = 0x%X - data 0x%X\n", i, m_gg_addr[i], m_gg_data[i]);
// printf("addr %d = 0x%X - data 0x%X\n", i, m_gg_addr[i], m_gg_data[i]);
}
}
}
else if (offset == 1)
{
// RESET

View File

@ -164,7 +164,7 @@ msx_cart_fsfd1::msx_cart_fsfd1(const machine_config &mconfig, const char *tag, d
msx_cart_fscf351::msx_cart_fscf351(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: msx_cart_disk_type2(mconfig, MSX_CART_FSCF351, "MSX Cartridge - FS-CF351", tag, owner, clock, "msx_cart_fscf351")
: msx_cart_disk_type2(mconfig, MSX_CART_FSCF351, "MSX Cartridge - FS-CF351", tag, owner, clock, "msx_cart_fscf351")
{
}
@ -624,4 +624,3 @@ WRITE8_MEMBER(msx_cart_fsfd1a::write_cart)
break;
}
}

View File

@ -677,7 +677,7 @@ void msx_slot_disk6_device::post_load()
void msx_slot_disk6_device::select_drive()
{
if (m_drive_select1)
if (m_drive_select1)
{
m_floppy = m_floppy1 ? m_floppy1->get_device() : NULL;
if (!m_floppy)
@ -809,4 +809,3 @@ WRITE8_MEMBER(msx_slot_disk6_device::write)
break;
}
}

View File

@ -11,7 +11,7 @@
Famicom Disk System.
Based on info from NESDev wiki ( http://wiki.nesdev.com/w/index.php/Family_Computer_Disk_System )
TODO:
- convert floppy drive + fds format to modern code!
- add sound bits
@ -124,14 +124,14 @@ void nes_disksys_device::device_start()
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
save_item(NAME(m_fds_motor_on));
save_item(NAME(m_fds_door_closed));
save_item(NAME(m_fds_current_side));
save_item(NAME(m_fds_head_position));
save_item(NAME(m_fds_status0));
save_item(NAME(m_read_mode));
save_item(NAME(m_drive_ready));
save_item(NAME(m_drive_ready));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_transfer));
save_item(NAME(m_irq_count));
@ -173,8 +173,8 @@ void nes_disksys_device::pcb_reset()
RAM is in 0x6000-0xdfff (32K)
ROM is in 0xe000-0xffff (8K)
registers + disk drive are accessed in
registers + disk drive are accessed in
0x4020-0x403f (read_ex/write_ex below)
-------------------------------------------------*/
@ -210,7 +210,7 @@ READ8_MEMBER(nes_disksys_device::read_m)
}
void nes_disksys_device::hblank_irq(int scanline, int vblank, int blanked)
{
{
if (m_irq_transfer)
m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
@ -218,7 +218,7 @@ void nes_disksys_device::hblank_irq(int scanline, int vblank, int blanked)
WRITE8_MEMBER(nes_disksys_device::write_ex)
{
LOG_MMC(("Famicom Disk System write_ex, offset: %04x, data: %02x\n", offset, data));
if (offset >= 0x20 && offset < 0x60)
{
// wavetable
@ -255,34 +255,34 @@ WRITE8_MEMBER(nes_disksys_device::write_ex)
// bit4 - CRC control (set during CRC calculation of transfer)
// bit5 - Always set to '1'
// bit6 - Read/Write Start (Set to 1 when the drive becomes ready for read/write)
// bit7 - Interrupt Transfer (0: Transfer without using IRQ; 1: Enable IRQ when
// bit7 - Interrupt Transfer (0: Transfer without using IRQ; 1: Enable IRQ when
// the drive becomes ready)
m_fds_motor_on = BIT(data, 0);
if (BIT(data, 1))
m_fds_head_position = 0;
if (!(data & 0x40) && m_drive_ready && m_fds_head_position > 2)
m_fds_head_position -= 2; // ??? is this some sort of compensation??
m_read_mode = BIT(data, 2);
set_nt_mirroring(BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
set_nt_mirroring(BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
m_drive_ready = data & 0x40;
m_irq_transfer = BIT(data, 7);
break;
case 0x06:
// external connector
break;
case 0x60: // $4080 - Volume envelope - read through $4090
case 0x62: // $4082 - Frequency low
case 0x63: // $4083 - Frequency high
case 0x64: // $4084 - Mod envelope - read through $4092
case 0x65: // $4085 - Mod counter
case 0x66: // $4086 - Mod frequency low
case 0x67: // $4087 - Mod frequency high
case 0x68: // $4088 - Mod table write
case 0x69: // $4089 - Wave write / master volume
case 0x6a: // $408a - Envelope speed
case 0x60: // $4080 - Volume envelope - read through $4090
case 0x62: // $4082 - Frequency low
case 0x63: // $4083 - Frequency high
case 0x64: // $4084 - Mod envelope - read through $4092
case 0x65: // $4085 - Mod counter
case 0x66: // $4086 - Mod frequency low
case 0x67: // $4087 - Mod frequency high
case 0x68: // $4088 - Mod table write
case 0x69: // $4089 - Wave write / master volume
case 0x6a: // $408a - Envelope speed
break;
}
}
@ -299,11 +299,11 @@ READ8_MEMBER(nes_disksys_device::read_ex)
switch (offset)
{
case 0x10:
case 0x10:
// $4030 - disk status 0
// bit0 - Timer Interrupt (1: an IRQ occurred)
// bit1 - Byte transfer flag (Set to 1 every time 8 bits have been transfered between
// the RAM adaptor & disk drive through $4024/$4031; Reset to 0 when $4024,
// bit1 - Byte transfer flag (Set to 1 every time 8 bits have been transfered between
// the RAM adaptor & disk drive through $4024/$4031; Reset to 0 when $4024,
// $4031, or $4030 has been serviced)
// bit4 - CRC control (0: CRC passed; 1: CRC error)
// bit6 - End of Head (1 when disk head is on the most inner track)
@ -312,7 +312,7 @@ READ8_MEMBER(nes_disksys_device::read_ex)
// clear the disk IRQ detect flag
m_fds_status0 &= ~0x01;
break;
case 0x11:
case 0x11:
// $4031 - data latch
// don't read data if disk is unloaded
if (!m_fds_data)
@ -330,8 +330,8 @@ READ8_MEMBER(nes_disksys_device::read_ex)
else
ret = 0;
break;
case 0x12:
// $4032 - disk status 1:
case 0x12:
// $4032 - disk status 1:
// bit0 - Disk flag (0: Disk inserted; 1: Disk not inserted)
// bit1 - Ready flag (0: Disk ready; 1: Disk not ready)
// bit2 - Protect flag (0: Not write protected; 1: Write protected or disk ejected)
@ -351,17 +351,17 @@ READ8_MEMBER(nes_disksys_device::read_ex)
else
ret = (m_fds_current_side == 0) ? 1 : 0; // 0 if a disk is inserted
break;
case 0x13:
case 0x13:
// $4033 - external connector (bits 0-6) + battery status (bit 7)
ret = 0x80;
break;
case 0x70: // $4090 - Volume gain - write through $4080
case 0x72: // $4092 - Mod gain - read through $4084
case 0x70: // $4090 - Volume gain - write through $4080
case 0x72: // $4092 - Mod gain - read through $4084
default:
ret = 0x00;
break;
}
return ret;
}
@ -372,7 +372,7 @@ READ8_MEMBER(nes_disksys_device::read_ex)
void nes_disksys_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
if (id == TIMER_IRQ)
{
{
if (m_irq_enable && m_irq_count)
{
m_irq_count--;
@ -381,7 +381,7 @@ void nes_disksys_device::device_timer(emu_timer &timer, device_timer_id id, int
m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
m_irq_enable = 0;
m_fds_status0 |= 0x01;
m_irq_count_latch = 0; // used in Kaettekita Mario Bros
m_irq_count_latch = 0; // used in Kaettekita Mario Bros
}
}
}
@ -399,7 +399,7 @@ void nes_disksys_device::disk_flip_side()
if (m_fds_current_side == 0)
popmessage("No disk inserted.");
else
popmessage("Disk set to side %d", m_fds_current_side);
popmessage("Disk set to side %d", m_fds_current_side);
}
@ -410,15 +410,15 @@ void nes_disksys_device::load_disk(device_image_interface &image)
{
int header = 0;
m_fds_sides = 0;
if (image.length() % 65500)
header = 0x10;
m_fds_sides = (image.length() - header) / 65500;
if (!m_fds_data)
m_fds_data = auto_alloc_array(machine(), UINT8, m_fds_sides * 65500);
// if there is an header, skip it
image.fseek(header, SEEK_SET);
image.fread(m_fds_data, 65500 * m_fds_sides);
@ -430,4 +430,3 @@ void nes_disksys_device::unload_disk(device_image_interface &image)
/* TODO: should write out changes here as well */
m_fds_sides = 0;
}

View File

@ -161,9 +161,9 @@ void device_nes_cart_interface::prg_alloc(size_t size, const char *tag)
printf("Warning! The loaded PRG has size not a multiple of 8KB (0x%X)\n", (UINT32)size);
m_prg_chunks--;
}
m_prg_mask = ((m_prg_chunks << 1) - 1);
// printf("first mask %x!\n", m_prg_mask);
if ((m_prg_chunks << 1) & m_prg_mask)
{
@ -172,7 +172,7 @@ void device_nes_cart_interface::prg_alloc(size_t size, const char *tag)
// only half a dozen of NES carts have PRG which is not a power of 2
// so we use this bank_map only as an exception
// printf("uneven rom!\n");
// 1. redefine mask as (next power of 2)-1
for (; temp; )
{
@ -182,15 +182,15 @@ void device_nes_cart_interface::prg_alloc(size_t size, const char *tag)
m_prg_mask = (1 << mask_bits) - 1;
// printf("new mask %x!\n", m_prg_mask);
mapsize = (1 << mask_bits)/2;
// 2. create a bank_map for banks in the range mask/2 -> mask
m_prg_bank_map.resize(mapsize);
// 3. fill the bank_map accounting for mirrors
int j;
for (j = mapsize; j < (m_prg_chunks << 1); j++)
m_prg_bank_map[j - mapsize] = j;
while (j % mapsize)
{
int k = 0, repeat_banks;
@ -201,7 +201,7 @@ void device_nes_cart_interface::prg_alloc(size_t size, const char *tag)
m_prg_bank_map[(j - mapsize) + l] = m_prg_bank_map[(j - mapsize) + l - repeat_banks];
j += repeat_banks;
}
// check bank map!
// for (int i = 0; i < mapsize; i++)
// {
@ -674,7 +674,7 @@ void device_nes_cart_interface::pcb_start(running_machine &machine, UINT8 *ciram
// main NES CPU here, even if it does not belong to this device.
m_maincpu = machine.device<cpu_device>("maincpu");
if (cart_mounted) // disksys expansion can arrive here without the memory banks!
if (cart_mounted) // disksys expansion can arrive here without the memory banks!
{
// Setup PRG
m_prg_bank_mem[0] = machine.root_device().membank("prg0");
@ -691,11 +691,11 @@ void device_nes_cart_interface::pcb_start(running_machine &machine, UINT8 *ciram
}
}
}
// Setup CHR (VRAM can be present also without PRG rom)
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
chr8(0, m_chr_source);
// Setup NT
m_ciram = ciram_ptr;

View File

@ -376,10 +376,10 @@ public:
virtual DECLARE_WRITE8_MEMBER(write_m);
virtual DECLARE_WRITE8_MEMBER(write_h);
virtual DECLARE_WRITE8_MEMBER(write_ex);
// hack until disk system is made modern!
virtual void disk_flip_side() { if (m_cart) m_cart->disk_flip_side(); }
int get_pcb_id() { return m_pcb_id; };
void pcb_start(UINT8 *ciram_ptr);

View File

@ -12,10 +12,9 @@
class o2_chess_device : public o2_rom_device
{
virtual machine_config_constructor device_mconfig_additions() const;
// virtual const rom_entry *device_rom_region() const;
// virtual const rom_entry *device_rom_region() const;
public:
// construction/destruction
o2_chess_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);

View File

@ -50,12 +50,12 @@ o2_rom16_device::o2_rom16_device(const machine_config &mconfig, const char *tag,
//-------------------------------------------------
void o2_rom_device::device_start()
{
{
save_item(NAME(m_bank_base));
}
void o2_rom_device::device_reset()
{
{
m_bank_base = 0;
}
@ -94,4 +94,3 @@ READ8_MEMBER(o2_rom16_device::read_rom0c)
{
return m_rom[offset + 0xc00 + (m_bank_base & 0x03) * 0x1000];
}

View File

@ -15,17 +15,17 @@ public:
// construction/destruction
o2_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
o2_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom04);
virtual DECLARE_READ8_MEMBER(read_rom0c);
virtual void write_bank(int bank);
protected:
int m_bank_base;
};
@ -37,7 +37,7 @@ class o2_rom12_device : public o2_rom_device
public:
// construction/destruction
o2_rom12_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom04);
virtual DECLARE_READ8_MEMBER(read_rom0c);
@ -50,7 +50,7 @@ class o2_rom16_device : public o2_rom_device
public:
// construction/destruction
o2_rom16_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom04);
virtual DECLARE_READ8_MEMBER(read_rom0c);

View File

@ -166,7 +166,7 @@ bool o2_cart_slot_device::call_load()
{
UINT32 size = (software_entry() == NULL) ? length() : get_software_region_length("rom");
m_cart->rom_alloc(size, tag());
if (software_entry() == NULL)
fread(m_cart->get_rom_base(), size);
else
@ -223,7 +223,7 @@ void o2_cart_slot_device::get_default_card_software(astring &result)
type = O2_ROM12;
if (size == 16384)
type = O2_ROM16;
slot_string = o2_get_slot(type);
//printf("type: %s\n", slot_string);
@ -278,4 +278,3 @@ SLOT_INTERFACE_START(o2_cart)
SLOT_INTERFACE_INTERNAL("o2_chess", O2_ROM_CHESS)
SLOT_INTERFACE_INTERNAL("o2_voice", O2_ROM_VOICE)
SLOT_INTERFACE_END

View File

@ -92,7 +92,7 @@ public:
virtual DECLARE_WRITE8_MEMBER(io_write);
virtual DECLARE_READ8_MEMBER(t0_read) { if (m_cart) return m_cart->t0_read(space, offset); else return 0; }
virtual void write_bank(int bank) { if (m_cart) m_cart->write_bank(bank); }
virtual void write_bank(int bank) { if (m_cart) m_cart->write_bank(bank); }
protected:
@ -114,8 +114,7 @@ extern const device_type O2_CART_SLOT;
#define MCFG_O2_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, O2_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
SLOT_INTERFACE_EXTERN(o2_cart);

View File

@ -33,7 +33,7 @@ o2_voice_device::o2_voice_device(const machine_config &mconfig, const char *tag,
void o2_voice_device::device_start()
{
{
save_item(NAME(m_lrq_state));
}

View File

@ -27,7 +27,7 @@ public:
virtual DECLARE_READ8_MEMBER(read_rom04) { if (m_subslot->exists()) return m_subslot->read_rom04(space, offset); else return 0xff; }
virtual DECLARE_READ8_MEMBER(read_rom0c) { if (m_subslot->exists()) return m_subslot->read_rom0c(space, offset); else return 0xff; }
virtual void write_bank(int bank) { if (m_subslot->exists()) m_subslot->write_bank(bank); }
virtual void write_bank(int bank) { if (m_subslot->exists()) m_subslot->write_bank(bank); }
DECLARE_WRITE_LINE_MEMBER(lrq_callback);
DECLARE_WRITE8_MEMBER(io_write);

View File

@ -65,4 +65,3 @@ DECLARE_WRITE_LINE_MEMBER( pet_userport_cb2_sound_device::input_m )
{
m_dac->write_unsigned8(state ? 0xff : 0x00);
}

View File

@ -93,7 +93,7 @@ void jvc_xvd701_device::send_response()
{
if (m_response_index < sizeof(m_response) && is_transmit_register_empty())
{
// printf("sending %02x\n", m_response[m_response_index]);
// printf("sending %02x\n", m_response[m_response_index]);
transmit_register_setup(m_response[m_response_index++]);
}
}
@ -115,7 +115,7 @@ void jvc_xvd701_device::rcv_complete()
// printf("xvd701");
//for (int i = 0; i < sizeof(m_command); i++)
// printf(" %02x", m_command[i]);
// printf(" %02x", m_command[i]);
//printf("\n");

View File

@ -156,15 +156,15 @@ bool sat_cart_slot_device::call_load()
// from fullpath, only ROM carts
UINT32 len = (software_entry() != NULL) ? get_software_region_length("rom") : length();
UINT32 *ROM;
m_cart->rom_alloc(len, tag());
ROM = m_cart->get_rom_base();
if (software_entry() != NULL)
memcpy(ROM, get_software_region("rom"), len);
else
fread(ROM, len);
// fix endianness....
for (int i = 0; i < len/4; i ++)
ROM[i] = BITSWAP32(ROM[i],7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24);

View File

@ -79,11 +79,11 @@ class scv_rom64_device : public scv_rom8_device
public:
// construction/destruction
scv_rom64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_cart);
virtual DECLARE_WRITE8_MEMBER(write_bank);
@ -100,15 +100,15 @@ class scv_rom128_device : public scv_rom8_device
public:
// construction/destruction
scv_rom128_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_cart);
virtual DECLARE_WRITE8_MEMBER(write_bank);
private:
UINT8 m_bank_base;
};
@ -121,16 +121,16 @@ class scv_rom128ram4_device : public scv_rom8_device
public:
// construction/destruction
scv_rom128ram4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_cart);
virtual DECLARE_WRITE8_MEMBER(write_cart);
virtual DECLARE_WRITE8_MEMBER(write_bank);
private:
UINT8 m_bank_base, m_ram_enabled;
};

View File

@ -175,11 +175,11 @@ bool scv_cart_slot_device::call_load()
seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
return IMAGE_INIT_FAIL;
}
m_cart->rom_alloc(len, tag());
if (has_ram)
m_cart->ram_alloc(get_software_region_length("ram"));
ROM = m_cart->get_rom_base();
if (software_entry() == NULL)
@ -317,4 +317,3 @@ WRITE8_MEMBER(scv_cart_slot_device::write_bank)
if (m_cart)
m_cart->write_bank(space, offset, data);
}

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