mirror of
https://github.com/libretro/mame.git
synced 2026-11-07 12:28:03 -10:00
Merge tag 'mame0280' of https://github.com/mamedev/mame into 0280
MAME 0.280
This commit is contained in:
commit
87e4b9f6ca
521 files changed
+41810
-25939
No files matched your search
@@ -56,6 +56,7 @@ namespace spv {
|
||||
}
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.mamedev.mame"
|
||||
android:versionCode="279"
|
||||
android:versionName="0.279"
|
||||
android:versionCode="280"
|
||||
android:versionName="0.280"
|
||||
android:installLocation="auto">
|
||||
|
||||
<!-- OpenGL ES 2.0 -->
|
||||
|
||||
+2
-2
@@ -63,9 +63,9 @@ copyright = u'1997-2025, MAMEdev and contributors'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.279'
|
||||
version = '0.280'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.279'
|
||||
release = '0.280'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
+13
-4
@@ -100,7 +100,8 @@ Missing [PWM] samples
|
||||
<year>1994</year>
|
||||
<publisher>Sega</publisher>
|
||||
<notes><![CDATA[
|
||||
Some 3d geometry bugs when [DRC] is used
|
||||
Some 3d geometry bugs when [-drc] is used
|
||||
Accesses [cart] backup RAM
|
||||
]]></notes>
|
||||
<sharedfeat name="compatibility" value="PAL"/>
|
||||
<part name="cart" interface="_32x_cart">
|
||||
@@ -1699,6 +1700,7 @@ Master SH-2 enables HINT
|
||||
<notes><![CDATA[
|
||||
left/right column sprites don't wraparound properly (webs in stage 1, first boss intro roar) (verify)
|
||||
Waterfall in stage 2 is static on left side, looks less prominent in YT videos (verify)
|
||||
Update: writes to no man's land area with [SH-2] around $0009'0xxx, very likely cache shenanigans
|
||||
Randomly crashed once during stage 2
|
||||
Reportedly runs at 30 FPS on real HW
|
||||
]]></notes>
|
||||
@@ -2293,8 +2295,10 @@ Accesses [cart] backup RAM
|
||||
<year>199?</year>
|
||||
<publisher>Time Warner Interactive</publisher>
|
||||
<notes><![CDATA[
|
||||
Black screen, needs tighter sync after FIFO rewrite (?)
|
||||
Uses [DE-9] port 2 button B for something
|
||||
[Slave SH-2] tests [SCI] port
|
||||
Writes 0x0f1f to $a130e0 in undefined [cart] area
|
||||
]]></notes>
|
||||
<part name="cart" interface="_32x_cart">
|
||||
<dataarea name="rom" size="262144">
|
||||
@@ -2436,7 +2440,8 @@ Uses [DE-9] port 2 button B for something
|
||||
<year>1994</year>
|
||||
<publisher>Sega</publisher>
|
||||
<notes><![CDATA[
|
||||
Some 3d geometry bugs when [DRC] is used
|
||||
Some 3d geometry bugs with [-drc]
|
||||
Accesses [cart] backup RAM
|
||||
]]></notes>
|
||||
<info name="serial" value="GM-5001 (JPN)"/>
|
||||
<info name="release" value="19941216 (JPN)"/>
|
||||
@@ -2454,7 +2459,8 @@ Some 3d geometry bugs when [DRC] is used
|
||||
<year>1994</year>
|
||||
<publisher>Sega</publisher>
|
||||
<notes><![CDATA[
|
||||
Some 3d geometry bugs when [DRC] is used
|
||||
Some 3d geometry bugs when [-drc] is used
|
||||
Accesses [cart] backup RAM
|
||||
]]></notes>
|
||||
<sharedfeat name="compatibility" value="NTSC-U"/>
|
||||
<part name="cart" interface="_32x_cart">
|
||||
@@ -2521,10 +2527,13 @@ Extensive checks for [cart] SRAM space, boots back to main menu if a new league
|
||||
</software>
|
||||
|
||||
<!-- TODO: sometimes it corrupts sound? -->
|
||||
<software name="wwfraw">
|
||||
<software name="wwfraw" supported="no">
|
||||
<description>WWF Raw (World)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Acclaim Entertainment</publisher>
|
||||
<notes><![CDATA[
|
||||
Background doesn't draw with [-nodrc], uses [SH-2] cache for cartridge RAM write
|
||||
]]></notes>
|
||||
<info name="usage" value="Supports 4-players thru teamplay option"/>
|
||||
<info name="serial" value="T-8101A (JPN)"/>
|
||||
<info name="release" value="19950901 (JPN)"/>
|
||||
|
||||
@@ -47,6 +47,8 @@ Thanks to DCALICE (http://alice32.free.fr) for info!
|
||||
<description>Galixian</description>
|
||||
<year>1984</year>
|
||||
<publisher>Sprites</publisher>
|
||||
<info name="author" value="François Chaumartin" />
|
||||
<info name="serial" value="AE 001" />
|
||||
|
||||
<part name="cass" interface="mc10_cass">
|
||||
<dataarea name="cass" size="20961">
|
||||
|
||||
@@ -5028,7 +5028,7 @@ ATK test: C:0 H:U Bad
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="batman1" cloneof="batman" supported="no">
|
||||
<software name="batman1" cloneof="batman" supported="yes">
|
||||
<!-- SPS (CAPS) release 19 -->
|
||||
<description>Batman (Europe, Single Disk)</description>
|
||||
<!-- retail, standalone -->
|
||||
@@ -5036,7 +5036,6 @@ ATK test: C:0 H:U Bad
|
||||
<year>1989</year>
|
||||
<publisher>Ocean</publisher>
|
||||
<notes><![CDATA[
|
||||
Black screen, [CIAB] fails on comparing a TOD 9 > 0x115 at PC=de4
|
||||
ATK test: C:0 H:U Bad
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
@@ -34925,8 +34924,6 @@ ATK test: OK
|
||||
<year>1989</year>
|
||||
<publisher>Psyclapse</publisher>
|
||||
<notes><![CDATA[
|
||||
black screen with eventually running irq at $ffffff, [FDC] dsksync (fixed)
|
||||
Hangs on [CIA] timer A readback while setting mode $99 (fixed)
|
||||
ATK test: failed
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
@@ -37062,7 +37059,7 @@ ATK test: C:even H:L 1 Sector Bad
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pang" supported="no">
|
||||
<software name="pang" supported="yes">
|
||||
<!-- SPS (CAPS) release 929 -->
|
||||
<description>Pang (Europe)</description>
|
||||
<!-- retail, standalone -->
|
||||
@@ -37070,8 +37067,6 @@ ATK test: C:even H:L 1 Sector Bad
|
||||
<year>1990</year>
|
||||
<publisher>Ocean</publisher>
|
||||
<notes><![CDATA[
|
||||
Throws a Guru Meditation on first boot, boots afterwards, [CIAB]?
|
||||
black screen after level select, trashes memory, [FDC]
|
||||
ATK test: failed
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
@@ -45869,7 +45864,6 @@ ATK test: C:79 Bad
|
||||
<year>1993</year>
|
||||
<publisher>Krisalis</publisher>
|
||||
<notes><![CDATA[
|
||||
new68k: trashes memory after initial loading, reports regressed track reading in ATK, [FDC] or [CIA]
|
||||
ATK test: OK
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
-->
|
||||
|
||||
<softwarelist name="bbc_vsm" description="Acorn BBC Micro Speech PHROMs">
|
||||
|
||||
<software name="cm62024">
|
||||
<description>CM62064 (Kenneth Kendall)</description>
|
||||
<year>1982</year>
|
||||
<publisher>Acorn Computers</publisher>
|
||||
<part name="rom" interface="bbc_vsm">
|
||||
<feature name="bank" value="15" />
|
||||
<dataarea name="rom" size="0x4000">
|
||||
<rom name="cm62024.bin" size="0x4000" crc="98e1bf9e" sha1="b369809275cb67dfd8a749265e91adb2d2558ae6" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="vm61002">
|
||||
<description>VM61002 (Industrial)</description>
|
||||
<year>1981</year>
|
||||
<publisher>Texas Instruments</publisher>
|
||||
<part name="rom" interface="bbc_vsm">
|
||||
<feature name="bank" value="0" />
|
||||
<dataarea name="rom" size="0x4000">
|
||||
<rom name="vm61002.bin" size="0x4000" crc="bf4b3b64" sha1="66876702d1d95eecc034d20f25047f893a27cde5" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
@@ -13,7 +13,7 @@ license:CC0-1.0
|
||||
<!-- only the single known cart exists for this system -->
|
||||
|
||||
<software name="ver1" supported="no">
|
||||
<description>Duel Masters: Duel Station Ver.1</description>
|
||||
<description>Duel Masters: Duel Station Senyō Cartridge Ver.1</description>
|
||||
<year>2003</year>
|
||||
<publisher>Takara</publisher>
|
||||
<info name="alt_title" value="デュエルマスターズ デュエルステーション専用カートリッジ Ver.1" />
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
-->
|
||||
|
||||
<softwarelist name="gaelco_ds5002fp_rom" description="Gaelco DS5002FP Programmer ROMs">
|
||||
|
||||
<software name="aligator" supported="no">
|
||||
<description>Alligator Hunt</description>
|
||||
<year>1994</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="aligator_47dF_22-nov_27c1024.bin" size="0x20000" crc="ec47f05e" sha1="782eb1398a60d54e5bcbe76e22000f6adc710bfe" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="maniacsq" supported="no">
|
||||
<description>Maniac Square</description>
|
||||
<year>1996</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="maniac_825c_22-5-96_27c1024.bin" size="0x20000" crc="89db7181" sha1="fcdc8077c4247ca24d19c7f61fcb9e1bc93e36fd" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="targeth" supported="no">
|
||||
<description>Target Hits</description>
|
||||
<year>1994</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="escopeta_2088_27c1024.bin" size="0x20000" crc="ac13d038" sha1="eb0fd071e92154c1002e9955b72bcde4cafbfb51" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="glass" supported="no">
|
||||
<description>Glass</description>
|
||||
<year>1993</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="glass_9970_27c1024.bin" size="0x20000" crc="6cdf4f11" sha1="f6ca3421497468b925af0f5124c798e1555aa990" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="thoop2" supported="no">
|
||||
<description>TH Strikes Back</description>
|
||||
<year>1994</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="thunder_h_6886_4-5-94_27c1024.bin" size="0x20000" crc="1074c715" sha1="3c9504ed9321f45cd0f3f9d943702d555a4d3a38" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="touchgo" supported="no">
|
||||
<description>Touch and Go</description>
|
||||
<year>1995</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="voley_27c1024.bin" size="0x20000" crc="9fbbee8c" sha1="89ad2014efe10555a045c56cffd20004d572cc4e" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="wrally2" supported="no">
|
||||
<description>World Rally 2</description>
|
||||
<year>1995</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="wr2_usa_cafe_31-7_27c1024.bin" size="0x20000" crc="7a1725ec" sha1="58157ebe3a27c8505843a6157243ef5acd14b670" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="wrally2a" supported="no">
|
||||
<description>World Rally 2 (older)</description>
|
||||
<year>1995</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="wr2_b2d2_29-06_27c1024.bin" size="0x20000" crc="a5f30e85" sha1="d9a744c7cfd7e67e9bb84a0d21bfcc7f90aaa1f4" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="goldart" supported="no">
|
||||
<description>Goldart</description>
|
||||
<year>1994</year>
|
||||
<publisher>Gaelco</publisher>
|
||||
<part name="cart" interface="gaelcods_rom">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x20000">
|
||||
<rom name="diana_27c1024.bin" size="0x20000" crc="20c4d1d9" sha1="067be3b3efa0f37dfb7b06d3a83452a1619933e2" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
@@ -28533,4 +28533,203 @@ license:CC0-1.0
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Super Mario Bros. Mini on GitHub: https://github.com/Mico27/SuperMarioBrosMini
|
||||
|
||||
All ROM images were downloaded from the GitHub releases page.
|
||||
-->
|
||||
<software name="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.8)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Mico27</publisher>
|
||||
<info name="release" value="20241120" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="c2bfe433" sha1="c9eee8d916390e3bd6142370de4d9fe501fd44a8" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini207" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.7)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241112" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="f50ee02c" sha1="f01983381be22973c289690cc1bb068294b4b28c" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini206" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.6)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241102" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="9d42c762" sha1="784e563c4e66f27d84c181650a39be6d7f3b9429" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini205" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.5)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241102" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="bf2ce7b7" sha1="a0958a1cd5b279984b3cc54602df453193088425" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini204" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.4)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241030" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="6eb7bf49" sha1="6c70bf7ec4911c08a2364fba0a7ef114c50519b5" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini203" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.3)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241029" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="e95dd63b" sha1="76dfad666d1669b4916d872a5587e222de3632a1" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini202" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.2)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241028" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="1b5a3936" sha1="50ff764fd2357ffd2a477ffe698bf122ac98d5db" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini201" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.1)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241026" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="5bcbd303" sha1="7f14089f5b4e5c8f278ca20a14205361b9dcdf66" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini200" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v2.0.0)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241026" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="2097152">
|
||||
<rom name="SuperMarioBrosMini.gb" size="2097152" crc="89105d14" sha1="edad2d93bf395f48a9184704f9e6b0970b8d0cfa" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini103" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v1.0.3)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241007" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="1048576">
|
||||
<rom name="SuperMarioBrosMini.gb" size="1048576" crc="fe2bfa0a" sha1="46a9795cb1adf5242ffd34b06fa23b5c39815fca" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini102" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v1.0.2)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241006" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="1048576">
|
||||
<rom name="SuperMarioBrosMini.gb" size="1048576" crc="7d30a1d3" sha1="dbfbc0bdfa80ad3bb2aff3a5359f872d9b30c60d" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini101" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v1.0.1)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241005" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="1048576">
|
||||
<rom name="SuperMarioBrosMini.gb" size="1048576" crc="9e27eeeb" sha1="bb74bfc6fd6edfb6d7d8a1fd01b84047b4ae82fd" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smbmini100" cloneof="smbmini">
|
||||
<description>Super Mario Bros. Mini (v1.0.0)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Micro27</publisher>
|
||||
<info name="release" value="20241002" />
|
||||
<sharedfeat name="compatibility" value="GBC" />
|
||||
<part name="cart" interface="gameboy_cart">
|
||||
<feature name="slot" value="rom_mbc5" />
|
||||
<dataarea name="rom" size="1048576">
|
||||
<rom name="SuperMarioBrosMini.gb" size="1048576" crc="79ca4ac0" sha1="bbc8f13f2191dd53741fe70554613ccb2c5552ab" />
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000" />
|
||||
</part>
|
||||
</software>
|
||||
</softwarelist>
|
||||
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
|
||||
NOTE:
|
||||
- we treat supported="no" for something that have major issues everywhere,
|
||||
"partial" for stuff running on 1+ systems but don't on others.
|
||||
|
||||
-->
|
||||
<softwarelist name="generic_flop_525" description="Cross-platform 5.25" disk images">
|
||||
|
||||
<!-- original from pc8801_flop -->
|
||||
<software name="gruppe" supported="no">
|
||||
<description>Gruppe</description>
|
||||
<year>1985</year>
|
||||
<publisher>SPS</publisher>
|
||||
<notes><![CDATA[
|
||||
All systems: fails to load with "program load error".
|
||||
https://github.com/mamedev/mame/issues/2349
|
||||
]]></notes>
|
||||
<info name="release" value="198504xx"/>
|
||||
<info name="alt_title" value="ぐるっぺ"/>
|
||||
<sharedfeat name="compatibility" value="mz2200,pc8801,x1"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="349392">
|
||||
<rom name="gruppe.d88" size="349392" crc="d7efdc5d" sha1="ab4da770fae54f306bfdc8fc9df3c52f3b4a1a65"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- original from x1_flop -->
|
||||
<software name="gruppea" cloneof="gruppe" supported="no">
|
||||
<description>Gruppe (alt)</description>
|
||||
<year>1985</year>
|
||||
<publisher>SPS</publisher>
|
||||
<notes><![CDATA[
|
||||
(same as gruppe)
|
||||
]]></notes>
|
||||
<info name="release" value="198506xx"/>
|
||||
<info name="alt_title" value="ぐるっぺ"/>
|
||||
<sharedfeat name="compatibility" value="mz2200,pc8801,x1"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="348848">
|
||||
<rom name="gruppe.d88" size="348848" crc="a50dfd33" sha1="551749d2ec4deb3919f2111d234450fd4f90d54a"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kitahei">
|
||||
<description>Kitahei</description>
|
||||
<year>1985</year>
|
||||
<publisher>SPS</publisher>
|
||||
<notes><![CDATA[
|
||||
mz2000: needs to press G on concealed text prompt on title (verify)
|
||||
]]></notes>
|
||||
<info name="release" value="198509xx"/>
|
||||
<info name="alt_title" value="棋太平"/>
|
||||
<sharedfeat name="compatibility" value="mz2000,mz2200,pc8801,x1"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="349392">
|
||||
<rom name="kitahei.d88" size="349392" crc="53ae4f58" sha1="bbdff7ac4d6a844580bb06accb1d8d88759b8ae9"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- original in x1_flop.xml -->
|
||||
<software name="victnined" supported="partial">
|
||||
<description>Victorious Nine (demo)</description>
|
||||
<year>1985</year>
|
||||
<publisher>ニデコム (Nidecom)</publisher>
|
||||
<notes><![CDATA[
|
||||
pc8801: crashes before reaching title screen (has V2 mode detection, which implies being compatible)
|
||||
]]></notes>
|
||||
<info name="release" value="198509xx"/>
|
||||
<info name="alt_title" value="ビクトリアスナイン"/>
|
||||
<sharedfeat name="compatibility" value="mz2200,pc8801,x1"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="350560">
|
||||
<rom name="victorious nine.d88" size="350560" crc="2fc94dfd" sha1="e29f55bed953e0304d88b8eed9448f31eb888298"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
@@ -60,9 +60,11 @@ license:CC0-1.0
|
||||
* H6232 - Juice Box Music Video (Zoegirl, Jump5, Jump5, Baha Men, Atomic Kitten)
|
||||
H6233 - Kenny Chesney - 'Live Those Songs', 'No Shoes, No Shirt, No Problems', 'I Go Back' Sara Evans - 'Suds in the Bucket, Martina McBride - 'This One's For The Girls'
|
||||
H6234 - Juice Box Music Video (Ashlee Simpson, Ashlee Simpson) (same 2 Ashlee Simpson songs as H6226, but without other tracks)
|
||||
H6236 - Juice Box Music Video (Liz Phair, Stacie Orrico, Sarah Hudson, Steriogram)
|
||||
* H6247 - Dexter's Laboratory Episode 51
|
||||
H6248 - Codename: Kids Next Door - Episode #19
|
||||
* H6254 - Juice Box Music Video (Liz Phair, Stacie Orrico, Skye Sweetnam, Zoegirl) (full part # H6254-0971G1) (include 'the making of' for Skye Sweetnam Tangled Up in Me)
|
||||
H6257 - Yu-Gi-oh! Episode 229
|
||||
*V H6258 - Winx Club Episode 103
|
||||
H6259 - SonicX Episode 3: Missile Wrist Rampage
|
||||
*V H6260 - Teenage Mutant Ninja Turtles Episode 36
|
||||
|
||||
+119
-119
@@ -1,119 +1,119 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
-->
|
||||
|
||||
<!--
|
||||
|
||||
Most KIM-1 software is complex to use. Refer to the manuals for information.
|
||||
|
||||
MAME's KIM-1 driver is not good at loading cassette recordings. So instead,
|
||||
the ones provided here are re-encodings made with a BIN to WAV conversion tool,
|
||||
such as KIMTAPE 0.5 (at default speed), eg:
|
||||
|
||||
kimtape -m -a0 -da1 a1.bin a1.wav
|
||||
|
||||
-->
|
||||
|
||||
<softwarelist name="kim1_cass" description="KIM-1 cassettes">
|
||||
|
||||
<software name="baseball">
|
||||
<description>Baseball</description>
|
||||
<year>1979</year>
|
||||
<publisher>Robert Leedom</publisher>
|
||||
<info name="usage" value="Loads in 3 parts. ID 01, ID 02, ID 03, GO 0200" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="26518684">
|
||||
<rom name="baseball.wav" size="26518684" crc="01e1f702" sha1="7ed49cc17781ca2abfb6496071a88fb8c1f17137"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="focal">
|
||||
<description>FOCAL-65 (V3D)</description>
|
||||
<year>1977</year>
|
||||
<publisher>Aresco</publisher>
|
||||
<info name="usage" value="terminal, Loads in 2 parts. ID 01, ID 02, GO 2000" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="16230584">
|
||||
<rom name="focal.wav" size="16230584" crc="e8eb2679" sha1="7ef83fa37077987551e4e48f16ba1494b5d827e7"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="hexpawn">
|
||||
<description>Hexpawn</description>
|
||||
<year>1978</year>
|
||||
<publisher>Robert Leedom</publisher>
|
||||
<info name="usage" value="ID 01, GO 0100" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="2361357">
|
||||
<rom name="hexpawn.wav" size="2361357" crc="2a0810be" sha1="c0656f9e99b071396263d98bbc87d2de9cd68e72"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kimbasic">
|
||||
<description>MOS TECH 6502 BASIC 9-digit v1.1</description>
|
||||
<year>1977</year>
|
||||
<publisher>Microsoft Co.</publisher>
|
||||
<info name="usage" value="terminal, ID 01, GO 4065" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="23219181">
|
||||
<rom name="kim basic 911.wav" size="23219181" crc="72470b66" sha1="0d4c00bde405ea491f27b1fffee7f07d45ee09a0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kb6" cloneof="kimbasic">
|
||||
<description>MOS TECH 6502 BASIC 6-digit</description>
|
||||
<year>1977</year>
|
||||
<publisher>Microsoft Co.</publisher>
|
||||
<info name="usage" value="terminal, ID 01, GO 3D73" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="21267405">
|
||||
<rom name="kim basic 6.wav" size="21267405" crc="0ba87eaa" sha1="46f2f23a9a41a9fe95080c87acd7bc8929161717"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="microade">
|
||||
<description>Micro-ADE</description>
|
||||
<year>1977</year>
|
||||
<publisher>MicroWare Ltd</publisher>
|
||||
<info name="usage" value="terminal, ID 01, GO 2000" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="10984941">
|
||||
<rom name="microade.wav" size="10984941" crc="defbe148" sha1="40ce84727d65f195aa1ef451714781c78b1d2785"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mchess">
|
||||
<description>Microchess</description>
|
||||
<year>1976</year>
|
||||
<publisher>Micro-Ware Ltd.</publisher>
|
||||
<info name="usage" value="Enter 'R -00F1=00 -17F9=C0 -1873X'. Play tape, pause when display shows 0000 (P). 'R -17F9=C1 -1873X', (P), 'R X'." />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="9953338">
|
||||
<!-- IDs C0,C1 are the main program, IDs 01-05 are optional chess openings -->
|
||||
<rom name="microchess.wav" size="9953338" crc="c7584ae0" sha1="9f1ac8f439e083dd592664a0f1e6ba1530836120"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kimvent">
|
||||
<description>KIM-Venture</description>
|
||||
<year>1979</year>
|
||||
<publisher>Robert C. Leedom.</publisher>
|
||||
<info name="usage" value="Enter 'R -00F1=00 -17F9=A1 -1873X'. Play tape, pause when display shows 0000 (P). '-17F9=A2 -1873X', (P), '-17F9=A3 -1873X', (P), '-0100X'." />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="9515290">
|
||||
<!-- IDs A1,A2,A3 are the main program, ID 06 is the K-V SCORE program -->
|
||||
<rom name="kimventure.wav" size="9515290" crc="bb3fde67" sha1="da525cb544e785d6751d759d905f0f4c7af483d7"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
-->
|
||||
|
||||
<!--
|
||||
|
||||
Most KIM-1 software is complex to use. Refer to the manuals for information.
|
||||
|
||||
MAME's KIM-1 driver is not good at loading cassette recordings. So instead,
|
||||
the ones provided here are re-encodings made with a BIN to WAV conversion tool,
|
||||
such as KIMTAPE 0.5 (at default speed), eg:
|
||||
|
||||
kimtape -m -a0 -da1 a1.bin a1.wav
|
||||
|
||||
-->
|
||||
|
||||
<softwarelist name="kim1_cass" description="KIM-1 cassettes">
|
||||
|
||||
<software name="baseball">
|
||||
<description>Baseball</description>
|
||||
<year>1979</year>
|
||||
<publisher>Robert Leedom</publisher>
|
||||
<info name="usage" value="Loads in 3 parts. ID 01, ID 02, ID 03, GO 0200" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="26518684">
|
||||
<rom name="baseball.wav" size="26518684" crc="01e1f702" sha1="7ed49cc17781ca2abfb6496071a88fb8c1f17137"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="focal">
|
||||
<description>FOCAL-65 (V3D)</description>
|
||||
<year>1977</year>
|
||||
<publisher>Aresco</publisher>
|
||||
<info name="usage" value="terminal, Loads in 2 parts. ID 01, ID 02, GO 2000" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="16230584">
|
||||
<rom name="focal.wav" size="16230584" crc="e8eb2679" sha1="7ef83fa37077987551e4e48f16ba1494b5d827e7"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="hexpawn">
|
||||
<description>Hexpawn</description>
|
||||
<year>1978</year>
|
||||
<publisher>Robert Leedom</publisher>
|
||||
<info name="usage" value="ID 01, GO 0100" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="2361357">
|
||||
<rom name="hexpawn.wav" size="2361357" crc="2a0810be" sha1="c0656f9e99b071396263d98bbc87d2de9cd68e72"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kimbasic">
|
||||
<description>MOS TECH 6502 BASIC 9-digit v1.1</description>
|
||||
<year>1977</year>
|
||||
<publisher>Microsoft Co.</publisher>
|
||||
<info name="usage" value="terminal, ID 01, GO 4065" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="23219181">
|
||||
<rom name="kim basic 911.wav" size="23219181" crc="72470b66" sha1="0d4c00bde405ea491f27b1fffee7f07d45ee09a0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kb6" cloneof="kimbasic">
|
||||
<description>MOS TECH 6502 BASIC 6-digit</description>
|
||||
<year>1977</year>
|
||||
<publisher>Microsoft Co.</publisher>
|
||||
<info name="usage" value="terminal, ID 01, GO 3D73" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="21267405">
|
||||
<rom name="kim basic 6.wav" size="21267405" crc="0ba87eaa" sha1="46f2f23a9a41a9fe95080c87acd7bc8929161717"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="microade">
|
||||
<description>Micro-ADE</description>
|
||||
<year>1977</year>
|
||||
<publisher>MicroWare Ltd</publisher>
|
||||
<info name="usage" value="terminal, ID 01, GO 2000" />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="10984941">
|
||||
<rom name="microade.wav" size="10984941" crc="defbe148" sha1="40ce84727d65f195aa1ef451714781c78b1d2785"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mchess">
|
||||
<description>Microchess</description>
|
||||
<year>1976</year>
|
||||
<publisher>Micro-Ware Ltd.</publisher>
|
||||
<info name="usage" value="Enter 'R -00F1=00 -17F9=C0 -1873X'. Play tape, pause when display shows 0000 (P). 'R -17F9=C1 -1873X', (P), 'R X'." />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="9953338">
|
||||
<!-- IDs C0,C1 are the main program, IDs 01-05 are optional chess openings -->
|
||||
<rom name="microchess.wav" size="9953338" crc="c7584ae0" sha1="9f1ac8f439e083dd592664a0f1e6ba1530836120"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kimvent">
|
||||
<description>KIM-Venture</description>
|
||||
<year>1979</year>
|
||||
<publisher>Robert C. Leedom.</publisher>
|
||||
<info name="usage" value="Enter 'R -00F1=00 -17F9=A1 -1873X'. Play tape, pause when display shows 0000 (P). '-17F9=A2 -1873X', (P), '-17F9=A3 -1873X', (P), '-0100X'." />
|
||||
<part name="cass" interface="kim1_cass">
|
||||
<dataarea name="cass" size="9515290">
|
||||
<!-- IDs A1,A2,A3 are the main program, ID 06 is the K-V SCORE program -->
|
||||
<rom name="kimventure.wav" size="9515290" crc="bb3fde67" sha1="da525cb544e785d6751d759d905f0f4c7af483d7"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
@@ -3,7 +3,7 @@
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
-->
|
||||
<softwarelist name="leapfrog_leappad_cart" description="LeapFrog LeapPad / CocoPad cartridges">
|
||||
<softwarelist name="leapfrog_leappad_cart" description="LeapFrog LeapPad / CocoPad / Benesse Qpad cartridges">
|
||||
|
||||
<software name="tiggerbnca" cloneof="tiggerbnc" supported="no">
|
||||
<description>Disney's Bounce, Tigger, Bounce (UK)</description>
|
||||
@@ -1034,6 +1034,19 @@ license:CC0-1.0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="minnatana" cloneof="minnatan" supported="no">
|
||||
<description>Minna de tanoshiku! CoCoPad (Otameshi soft) (Japan, older)</description>
|
||||
<year>2002</year>
|
||||
<publisher>LeapFrog / Sega Toys</publisher>
|
||||
<info name="alt_title" value="みんなでたのしく!ココパッド おためしソフト" />
|
||||
<info name="serial" value="9P4-0092A"/>
|
||||
<part name="cart" interface="leapfrog_leappad_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="9p4-0092a.u1" size="0x200000" crc="02871b3d" sha1="fa16a444bdf14d4f50ab1e2de28acb0b5ecabdd8" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="bennyeng2" supported="no">
|
||||
<description>Benny and Friends English Book Vol. 2 -Majo to taiketsu! Daibouken- (Japan)</description>
|
||||
<year>2002</year>
|
||||
@@ -1500,4 +1513,32 @@ license:CC0-1.0
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Benesse Qpad cartridges -->
|
||||
|
||||
<software name="gogogoj" supported="no">
|
||||
<description>Hirogaru Sekai-e Go! Go! Go! (Japan)</description>
|
||||
<year>2002</year>
|
||||
<publisher>LeapFrog / Benesse</publisher>
|
||||
<info name="alt_title" value="広がる世界へ GO!GO!GO!" />
|
||||
<!-- no obvious serial or label on ROM, 066 (or 990) is stamped on PCB though -->
|
||||
<part name="cart" interface="leapfrog_leappad_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="gogogo_red.bin" size="0x400000" crc="988a39ee" sha1="621e1459db8a11152d384d9d9c7d7a43b31859ff" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="lgengj" supported="no">
|
||||
<description>Kagayaku Kimi no Mirai-e Let's Go English! (Japan)</description>
|
||||
<year>2003</year>
|
||||
<publisher>LeapFrog / Benesse</publisher>
|
||||
<info name="alt_title" value="輝くキミの未来へ Let's Go English!" />
|
||||
<!-- no obvious serial or label anywhere -->
|
||||
<part name="cart" interface="leapfrog_leappad_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="letsgoenglish.bin" size="0x400000" crc="69c5dc8a" sha1="49857adf4e96fca7346f74de849373c1fd2a711e" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
</softwarelist>
|
||||
+781
-319
File diff suppressed because it is too large.
Load diff
+390
-60
@@ -2189,6 +2189,96 @@ The three available regions are PAL, NTSC-U and NTSC-J or a combination such as
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="devwill">
|
||||
<description>Devwill Too MD</description>
|
||||
<year>2019</year>
|
||||
<publisher>Mega Cat Studios</publisher>
|
||||
<info name="developer" value="Mangangá Team" />
|
||||
<info name="language" value="English" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="Devwill Too.bin" size="4194304" crc="34031793" sha1="b4acee3bf9053a76f70f0cb6229d72346610e92f" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="devwill_pt" cloneof="devwill">
|
||||
<description>Devwill Too MD (Portuguese)</description>
|
||||
<year>2019</year>
|
||||
<publisher>Mega Cat Studios</publisher>
|
||||
<info name="developer" value="Mangangá Team" />
|
||||
<info name="language" value="Portuguese (Brazil)" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="Devwill Too MD (World) (Pt-BR).bin" size="4194304" crc="7748c2df" sha1="1057beec9661d9ade4351d08ac9a7bcf36b190df" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="devwilldg" cloneof="devwill">
|
||||
<description>Devwill Too MD (English, digital release)</description>
|
||||
<year>2019</year>
|
||||
<publisher>Itch.io</publisher>
|
||||
<info name="developer" value="Mangangá Team" />
|
||||
<info name="language" value="English" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="3538944">
|
||||
<rom name="Devwill Too MD (World) (Digital).bin" size="3538944" crc="25736e4f" sha1="0d94389305c0ef13b694327ef4fb80d2700b391c" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="devwilldg_pt" cloneof="devwill">
|
||||
<description>Devwill Too MD (Portuguese, digital release)</description>
|
||||
<year>2019</year>
|
||||
<publisher>Itch.io</publisher>
|
||||
<info name="developer" value="Mangangá Team" />
|
||||
<info name="language" value="Portuguese (Brazil)" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="3538944">
|
||||
<rom name="Devwill Too MD (World) (Pt-BR) (Digital).bin" size="3538944" crc="c14fc0d4" sha1="bb37a1b58eda33b6ce108e770fda389476b328cf" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="devwill_d1" cloneof="devwill">
|
||||
<description>Devwill Too MD (demo v1)</description>
|
||||
<year>2019</year>
|
||||
<publisher>Mangangá Team</publisher>
|
||||
<info name="developer" value="Mangangá Team" />
|
||||
<info name="language" value="English" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="1966080">
|
||||
<rom name="devwill too demonstracao.bin" size="1966080" crc="c53c9cee" sha1="fcb54d04dbb5e44f7727ef189e830a1fb48e6058" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="devwill_d2" cloneof="devwill">
|
||||
<description>Devwill Too MD (demo v2)</description>
|
||||
<year>2019</year>
|
||||
<publisher>Mangangá Team</publisher>
|
||||
<info name="developer" value="Mangangá Team" />
|
||||
<info name="language" value="English" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="1966080">
|
||||
<rom name="Devwill-Too-MD_Demo-V2.bin" size="1966080" crc="7e1f260c" sha1="468ec80143806f0d697ff40c5ce19b681bb23c1f" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="devwillpr">
|
||||
<description>Devwill Too - Prologue</description>
|
||||
<year>2021</year>
|
||||
<publisher>Itch.io</publisher>
|
||||
<info name="developer" value="Mangangá Team" />
|
||||
<info name="language" value="English/Portuguese (Brazil)" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="3168608">
|
||||
<rom name="Devwill Too Prologue (ENG - PTBR).bin" size="3168608" crc="736a07e2" sha1="5cb22aadeba74ea155be1eb846a428bd665d5a16" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Both Euro and USA confirmed -->
|
||||
<software name="dicktr">
|
||||
@@ -2712,10 +2802,13 @@ No [VDP] sprites
|
||||
|
||||
|
||||
<!-- This board contains no SRAM, despite the header reporting 16k of battery -->
|
||||
<software name="espnnflp" cloneof="espnnfl" supported="no"> <!-- it freezes at head/tail -->
|
||||
<software name="espnnflp" cloneof="espnnfl" supported="no">
|
||||
<description>ESPN Sunday Night NFL (USA, prototype)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Sony Imagesoft</publisher>
|
||||
<notes><![CDATA[
|
||||
Black screen after head/tails, reads at $d68000 (?)
|
||||
]]></notes>
|
||||
<sharedfeat name="compatibility" value="NTSC-U"/>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="u1" value="TC57400AD-120"/>
|
||||
@@ -3055,14 +3148,11 @@ No [VDP] sprites
|
||||
|
||||
|
||||
<!-- This was marked as rev. A on the EA sticker, but its header (and ROM markings) uses the Jpn title... weird situation :-) -->
|
||||
<software name="fatalrewa" cloneof="fatalrew" supported="no">
|
||||
<software name="fatalrewa" cloneof="fatalrew" supported="yes">
|
||||
<!-- Originally marked as Fatal Rewind, boots as The Killing Game Show -->
|
||||
<description>The Killing Game Show (Europe)</description>
|
||||
<year>1991</year>
|
||||
<publisher>Electronic Arts</publisher>
|
||||
<notes><![CDATA[
|
||||
Crashes after EA logo, requires better [VDP] irq handling
|
||||
]]></notes>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="pcb" value="PWB SC40X1 REV B"/>
|
||||
<feature name="u1" value="KILLING GAME SHOW KIL03"/> <!-- location not really marked on PCB, using u1 for consistency -->
|
||||
@@ -3073,13 +3163,13 @@ Crashes after EA logo, requires better [VDP] irq handling
|
||||
</software>
|
||||
|
||||
|
||||
<!-- Only Euro is confirmed -->
|
||||
<software name="fatalrew" supported="no">
|
||||
<!-- Only Euro is confirmed -->
|
||||
<software name="fatalrew" supported="partial">
|
||||
<description>Fatal Rewind (Europe, USA, rev. A)</description>
|
||||
<year>1991</year>
|
||||
<publisher>Electronic Arts</publisher>
|
||||
<notes><![CDATA[
|
||||
Crashes after EA logo, requires better [VDP] irq handling
|
||||
Crashes with NTSC machines after EOA logo (verify)
|
||||
]]></notes>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="pcb" value="PWB SC40X1 REV B"/>
|
||||
@@ -6638,6 +6728,9 @@ Unsupported [Menacer] peripheral
|
||||
<description>PGA Tour Golf II for use with the Personal Trainer</description>
|
||||
<year>1995</year>
|
||||
<publisher>HeartBeat Corp</publisher>
|
||||
<notes><![CDATA[
|
||||
Unemulated HeartBeat peripheral
|
||||
]]></notes>
|
||||
<info name="usage" value="Requires HeartBeat Personal Trainer activity tracker"/>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom"/>
|
||||
@@ -8072,6 +8165,19 @@ Unsupported [Menacer] peripheral
|
||||
</software>
|
||||
|
||||
|
||||
<software name="sovietbg">
|
||||
<description>Sovietborgs (demo)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Retro Sumus</publisher>
|
||||
<info name="language" value="English" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="2752512">
|
||||
<rom name="sovietborgs-demo.bin" size="2752512" crc="e11938d4" sha1="ecd9dc5b87124ad9fe134b80a23062c5fa811608" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
<!-- Only Euro and Jpn are confirmed -->
|
||||
<!-- USA has been found on a 171-5702 PCB with two chips MPR-12360 T23 + MPR-12361 T24, but needs to be verified -->
|
||||
<software name="sharrier">
|
||||
@@ -10826,6 +10932,9 @@ Only Road Rash portion is present in the dump, the other two entries and menu ar
|
||||
<description>The Addams Family (USA, prototype, alt)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Flying Edge</publisher>
|
||||
<notes><![CDATA[
|
||||
Black screen after starting a game, access $be1040-3 for a 0x524e4302 value (?)
|
||||
]]></notes>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="1048576">
|
||||
<rom name="addams family, the (usa) (beta) (alt).bin" size="1048576" crc="3a173e1f" sha1="632b321b860021f8a473fccc7bf8a03bd9c2d581"/>
|
||||
@@ -12598,6 +12707,9 @@ https://bootleggames.fandom.com/wiki/Barver_Battle_Saga:_Tai_Kong_Zhan_Shi
|
||||
<description>Beavis and Butt-Head (USA, prototype)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Viacom New Media</publisher>
|
||||
<notes><![CDATA[
|
||||
Black screen, keeps accessing [VDP] with an illegal D3=0xffffffff, eventually crashes
|
||||
]]></notes>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="2097152">
|
||||
<rom name="beavis and butt-head (usa) (beta).bin" size="2097152" crc="81ed5335" sha1="f9ed871867f543a8d94c47270cd530a5ca410664"/>
|
||||
@@ -13739,169 +13851,349 @@ No [VDP] sprites
|
||||
</software>
|
||||
|
||||
<software name="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, English)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="English" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-en.bin" size="4194304" crc="75c4bc1d" sha1="527faa9ce836cd900e29559ad51b6eda28cf5835" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_br" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Portuguese Brazil)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Portuguese (Brazil)" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-br.bin" size="4194304" crc="138e52b9" sha1="ef47fc0a5cf6d8bcd99f3abdeb7033dbe4adc580" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_de" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, German)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="German" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-de.bin" size="4194304" crc="3c249258" sha1="3d7736b4b48b1567cd3648bcc18a87292c6e256b" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_es" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Spanish)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Spanish" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-es.bin" size="4194304" crc="471a20b8" sha1="3485725a8186e8b74f490ec46c045bd2075774e5" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_fi" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Finnish)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Finnish" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-fi.bin" size="4194304" crc="0f09b3ef" sha1="bc5b30ac1634c5bd4fb7210801237a8e94b7cec5" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_fr" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, French)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="French" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-fr.bin" size="4194304" crc="9df9b830" sha1="f9158a4644b3234e667274ec98fd8f0bad0e24a3" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_it" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Italian)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Italian" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-it.bin" size="4194304" crc="3bba32e1" sha1="c69c71d150981eca3f75bbef92d3e84f37b1bd51" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_ja" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Japanese)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Japanese" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-ja.bin" size="4194304" crc="649348a2" sha1="62b9dc5e472b675516cd1fd75d40d489b50183a7" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_ko" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Korean)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Korean" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-ko.bin" size="4194304" crc="b4a41427" sha1="b6b7de9262beeb77ebb9701dc74a10ee4a591d9a" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_pt" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Portuguese)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Portuguese" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-pt.bin" size="4194304" crc="b55866d9" sha1="a0b896e0098026ffdf20f2a626f224a16a024fd6" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_ru" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Russian)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Russian" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-ru.bin" size="4194304" crc="c8fc8114" sha1="57f02cc25bda2935706c03c6826a52121ed3cfcd" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory085_zh" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.5, Chinese)</description>
|
||||
<year>2025</year>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Chinese" />
|
||||
<info name="version" value="0.8.5 2025.08" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-zh.bin" size="4194304" crc="d66a325e" sha1="080b383f3fd0ec5bece38db80658848aff83783b" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory080_en" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, English)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="English" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-en.bin" size="4194304" crc="d476a108" sha1="79c6833b187a02a51f6eccf9283e4d82cca877b5" />
|
||||
<rom name="doukutsu-en (v0.8.0).bin" size="4194304" crc="d476a108" sha1="79c6833b187a02a51f6eccf9283e4d82cca877b5" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_zh" cloneof="cavestory">
|
||||
<software name="cavestory080_zh" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Chinese)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Chinese" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-zh.bin" size="4194304" crc="0c1517fc" sha1="da7286cdc75f6e3846f8351abf9325fdbdc687a8" />
|
||||
<rom name="doukutsu-zh (v0.8.0).bin" size="4194304" crc="0c1517fc" sha1="da7286cdc75f6e3846f8351abf9325fdbdc687a8" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_fr" cloneof="cavestory">
|
||||
<software name="cavestory080_fr" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, French)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="French" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-fr.bin" size="4194304" crc="f00a8d9f" sha1="d1b89e2e364cd595b5d4c6a2e417f7b79337378a" />
|
||||
<rom name="doukutsu-fr (v0.8.0).bin" size="4194304" crc="f00a8d9f" sha1="d1b89e2e364cd595b5d4c6a2e417f7b79337378a" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_de" cloneof="cavestory">
|
||||
<software name="cavestory080_de" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, German)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="German" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-de.bin" size="4194304" crc="a04d7b69" sha1="b0ba518ee523fec58bfbcdd2685f507e288b6c14" />
|
||||
<rom name="doukutsu-de (v0.8.0).bin" size="4194304" crc="a04d7b69" sha1="b0ba518ee523fec58bfbcdd2685f507e288b6c14" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_it" cloneof="cavestory">
|
||||
<software name="cavestory080_it" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Italian)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Italian" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-it.bin" size="4194304" crc="8ec855f9" sha1="34d95d7d0278cb9b7479c262a019692b09e13533" />
|
||||
<rom name="doukutsu-it (v0.8.0).bin" size="4194304" crc="8ec855f9" sha1="34d95d7d0278cb9b7479c262a019692b09e13533" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_ja" cloneof="cavestory">
|
||||
<software name="cavestory080_ja" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Japanese)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Japanese" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-ja.bin" size="4194304" crc="21acbe48" sha1="a22a72b38c02b777729cb158ed4d4564dbdd1cd3" />
|
||||
<rom name="doukutsu-ja (v0.8.0).bin" size="4194304" crc="21acbe48" sha1="a22a72b38c02b777729cb158ed4d4564dbdd1cd3" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_ko" cloneof="cavestory">
|
||||
<software name="cavestory080_ko" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Korean)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Korean" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-ko.bin" size="4194304" crc="0e411955" sha1="910948d9187d0f11e811ff09d94bcb8977d612ce" />
|
||||
<rom name="doukutsu-ko (v0.8.0).bin" size="4194304" crc="0e411955" sha1="910948d9187d0f11e811ff09d94bcb8977d612ce" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_pt" cloneof="cavestory">
|
||||
<software name="cavestory080_pt" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Portuguese)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Portuguese" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-pt.bin" size="4194304" crc="965704dd" sha1="da54faea4f7b2ec6822e710ba200890653dcee79" />
|
||||
<rom name="doukutsu-pt (v0.8.0).bin" size="4194304" crc="965704dd" sha1="da54faea4f7b2ec6822e710ba200890653dcee79" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_br" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Portuguese-Brazil)</description>
|
||||
<software name="cavestory080_br" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Portuguese Brazil)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Portuguese (Brazil)" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-br.bin" size="4194304" crc="4b52107a" sha1="4dc22a573c82c8d3403a0ccb062ba489fd0af70b" />
|
||||
<rom name="doukutsu-br (v0.8.0).bin" size="4194304" crc="4b52107a" sha1="4dc22a573c82c8d3403a0ccb062ba489fd0af70b" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory_es" cloneof="cavestory">
|
||||
<software name="cavestory080_es" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.8.0, Spanish)</description>
|
||||
<year>2022</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Spanish" />
|
||||
<info name="version" value="0.8.0 2022.02" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="doukutsu-es.bin" size="4194304" crc="06405697" sha1="481683730b0496af80f28441aec2a31525c45519" />
|
||||
<rom name="doukutsu-es (v0.8.0).bin" size="4194304" crc="06405697" sha1="481683730b0496af80f28441aec2a31525c45519" />
|
||||
</dataarea>
|
||||
<dataarea name="sram" size="65536">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cavestory070" cloneof="cavestory">
|
||||
<software name="cavestory070_en" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.7.0, English)</description>
|
||||
<year>2020</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="English" />
|
||||
<info name="version" value="0.7.0 - Test build Sep 15 2020" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
@@ -13917,7 +14209,7 @@ No [VDP] sprites
|
||||
<software name="cavestory070_fr" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.7.0, French)</description>
|
||||
<year>2020</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="French" />
|
||||
<info name="version" value="0.7.0" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
@@ -13933,7 +14225,7 @@ No [VDP] sprites
|
||||
<software name="cavestory070_it" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.7.0, Italian)</description>
|
||||
<year>2020</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Italian" />
|
||||
<info name="version" value="0.7.0" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
@@ -13949,7 +14241,7 @@ No [VDP] sprites
|
||||
<software name="cavestory070_pt" cloneof="cavestory">
|
||||
<description>Cave Story - Doukutsu Monogatari (v0.7.0, Portuguese)</description>
|
||||
<year>2020</year>
|
||||
<publisher>Studio Pixel</publisher>
|
||||
<publisher>Andrew DeRosier</publisher>
|
||||
<info name="language" value="Portuguese" />
|
||||
<info name="version" value="0.7.0" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
@@ -15895,6 +16187,7 @@ https://bootleggames.fandom.com/wiki/Chaoji_Dafuweng
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- TODO: all non-working asteborg entries needs their own mapper -->
|
||||
<software name="asteborg" supported="no">
|
||||
<description>Demons of Asteborg (demo 20210913)</description>
|
||||
<year>2021</year>
|
||||
@@ -17742,12 +18035,12 @@ https://segaretro.org/Elitserien_96
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="killshow" cloneof="fatalrew" supported="no">
|
||||
<software name="killshow" cloneof="fatalrew" supported="partial">
|
||||
<description>The Killing Game Show (Japan)</description>
|
||||
<year>1993</year>
|
||||
<publisher>Electronic Arts Victor</publisher>
|
||||
<notes><![CDATA[
|
||||
Crashes after EA logo, requires better [VDP] irq handling
|
||||
No sound in intro opening (verify)
|
||||
]]></notes>
|
||||
<info name="serial" value="EM20021"/>
|
||||
<info name="release" value="19930820"/>
|
||||
@@ -19157,7 +19450,7 @@ Unemulated [Sega Mega Modem] features
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="hyokkohj" supported="partial">
|
||||
<software name="hyokkohj">
|
||||
<description>Hyokkori Hyoutan-jima - Daitouryou o Mezase! (Japan)</description>
|
||||
<year>1992</year>
|
||||
<publisher>Sega</publisher>
|
||||
@@ -20244,8 +20537,20 @@ Black screen
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kirito">
|
||||
<description>Kirito - The Game (demo)</description>
|
||||
<software name="kiritotg">
|
||||
<description>Kirito - The Game (demo 1.1)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Tulfared</publisher>
|
||||
<info name="language" value="English/French" />
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="2228224">
|
||||
<rom name="rom_demo_ktg_d11.bin" size="2228224" crc="03b9a3be" sha1="50f51e180cc1877ebeae366435f6fbbd35068232" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kiritotg_d10" cloneof="kiritotg">
|
||||
<description>Kirito - The Game (demo 1.0)</description>
|
||||
<year>2024</year>
|
||||
<publisher>Tulfared</publisher>
|
||||
<info name="language" value="English/French" />
|
||||
@@ -27237,13 +27542,10 @@ Throws "this game is [...] european megadrive system" even with megadriv system
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sesame" supported="no">
|
||||
<software name="sesame" supported="yes">
|
||||
<description>Sesame Street Counting Cafe (USA)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Electronic Arts</publisher>
|
||||
<notes><![CDATA[
|
||||
Black screen, requires better [VDP] irq handling
|
||||
]]></notes>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="1048576">
|
||||
<rom name="sesame street counting cafe (usa).bin" size="1048576" crc="0a4f48c3" sha1="d5ef2b50cf1a22e07401f6a14c7946df66d8b605"/>
|
||||
@@ -31879,7 +32181,7 @@ No BGMs
|
||||
<publisher>Electronic Arts</publisher>
|
||||
<!-- TODO: starts off with music off (still coming from the dump?) -->
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<feature name="slot" value="rom_tplay96"/>
|
||||
<!-- baddump: Sports non-default save, "Ghetto USA" instead of NY Yankees -->
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="triple play '96 (usa).bin" size="4194304" crc="f1748e91" sha1="c0981b524d5e1c5368f9e74a4ce9c57d87fe323a" status="baddump"/>
|
||||
@@ -31895,7 +32197,7 @@ No BGMs
|
||||
<publisher>Electronic Arts</publisher>
|
||||
<sharedfeat name="compatibility" value="NTSC-U"/>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_sram"/>
|
||||
<feature name="slot" value="rom_tplay96"/>
|
||||
<!-- baddump: Sports non-default save, "TODDs Team" instead of San Francisco -->
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="triple play gold (usa).bin" size="4194304" crc="bbe69017" sha1="007bee242384db1887c5831657470584ff77a163" status="baddump"/>
|
||||
@@ -33280,7 +33582,7 @@ Has missing sound samples (i.e. tire screech, "time bonus" on checkpoints)
|
||||
|
||||
<software name="wondlib" supported="no">
|
||||
<description>Wonder Library (Japan)</description>
|
||||
<year>199?</year>
|
||||
<year>1993</year>
|
||||
<publisher>Victor</publisher>
|
||||
<notes><![CDATA[
|
||||
Unsupported Mega-CD/Wondermega cart allowing EBXA format to be played back
|
||||
@@ -36043,9 +36345,15 @@ https://bootleggames.fandom.com/wiki/Super_Bubble_Bobble_MD
|
||||
|
||||
<!-- This is the System Cart of the Magistr 16 computer, needs emulation of the system -->
|
||||
<software name="magist16" supported="no">
|
||||
<description>Magistr 16 (Russia)</description>
|
||||
<year>199?</year>
|
||||
<!-- Obuchayushchii kartridzh? -->
|
||||
<description>Magistr 16 Learning Set (Russia)</description>
|
||||
<!-- Either 2001 or 2002 -->
|
||||
<year>200?</year>
|
||||
<publisher><unknown></publisher>
|
||||
<notes><![CDATA[
|
||||
https://segaretro.org/Magistr_16
|
||||
Throws error #100A at boot (has BASIC strings, may require keyboard with [VDP] irq 2)
|
||||
]]></notes>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="4194304">
|
||||
<rom name="magistr 16.bin" size="4194304" crc="2488e685" sha1="6568b3a4e096159776ef8687a80d43589741fd60"/>
|
||||
@@ -37500,6 +37808,8 @@ Black screen
|
||||
<publisher>Titan</publisher>
|
||||
<notes><![CDATA[
|
||||
Most effects fails
|
||||
Crashes at the very end
|
||||
https://jsgroth.dev/blog/posts/titan-overdrive/
|
||||
]]></notes>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x400000">
|
||||
@@ -37515,15 +37825,35 @@ Most effects fails
|
||||
<year>2017</year>
|
||||
<publisher>Titan</publisher>
|
||||
<notes><![CDATA[
|
||||
Punts to a 0d2 B50D stack trace screen
|
||||
Tries to jump to jsr $a385b86.l (?) at PC=0x38b0, must be using its own mapper rather than ssf2
|
||||
Most effects fails
|
||||
https://jsgroth.dev/blog/posts/titan-overdrive-2-part-1/
|
||||
https://jsgroth.dev/blog/posts/titan-overdrive-2-part-2/
|
||||
]]></notes>
|
||||
<sharedfeat name="compatibility" value="PAL"/>
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_ssf2"/>
|
||||
<feature name="slot" value="rom_titan"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="16777216">
|
||||
<rom name="titan-overdrive2.bin" size="8386056" crc="f0429fd6" sha1="603db0a214ee50c6c11e15c0d1d3bba919116d07" offset="00000"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- https://github.com/Stephane-D/SGDK/releases/tag/v1.62 -->
|
||||
<software name="sgdk_bap" supported="partial">
|
||||
<description>SGDK Bad Apple PV demo (v1.62)</description>
|
||||
<!-- header with (c) 2020 but release happened in 2021, also repeated at demo end -->
|
||||
<year>2021</year>
|
||||
<publisher>SGDK</publisher>
|
||||
<notes><![CDATA[
|
||||
Crashes at startup with megadriv (verify)
|
||||
]]></notes>
|
||||
<!-- <sharedfeat name="compatibility" value="NTSC-J,NTSC-U"/> -->
|
||||
<part name="cart" interface="megadriv_cart">
|
||||
<feature name="slot" value="rom_titan"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x1000000">
|
||||
<rom name="sgdk_bad_apple.bin" size="0x980000" crc="ab53f304" sha1="56c927144438d0581baa88141ff2258c8d1e4e6b" offset="00000"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
+1
-1
@@ -7710,7 +7710,7 @@ license:CC0-1.0
|
||||
-->
|
||||
|
||||
<software name="flipshot">
|
||||
<description>Battle Flip Shot</description>
|
||||
<description>Flip Shot</description>
|
||||
<year>1998</year>
|
||||
<publisher>Visco</publisher>
|
||||
<info name="serial" value="NGM-2470"/>
|
||||
|
||||
@@ -4422,7 +4422,6 @@ ExtractDisk [04]"Disk 2 " -> "battle gorilla_04.d88"
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- -->
|
||||
<software name="bgorillaa" cloneof="bgorilla" supported="partial">
|
||||
<description>Battle Gorilla (alt)</description>
|
||||
<year>1988</year>
|
||||
@@ -14629,20 +14628,6 @@ ExtractDisk [02]"Gradius改 " -> "gradius kai_02.d88"
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="gruppe">
|
||||
<description>Gruppe</description>
|
||||
<year>1985</year>
|
||||
<publisher>SPS</publisher>
|
||||
<!-- PC8801 -->
|
||||
<info name="release" value="198504xx"/>
|
||||
<info name="alt_title" value="ぐるっぺ"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="349392">
|
||||
<rom name="gruppe.d88" size="349392" crc="d7efdc5d" sha1="ab4da770fae54f306bfdc8fc9df3c52f3b4a1a65"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="guinsaga" supported="yes">
|
||||
<description>Guin Saga - Hyoto no Kamen</description>
|
||||
<year>1987</year>
|
||||
@@ -18995,20 +18980,6 @@ Has serious [3301] corruption in gameplay
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kitahei">
|
||||
<description>Kitahei</description>
|
||||
<year>1985</year>
|
||||
<publisher>SPS</publisher>
|
||||
<!-- PC8801 -->
|
||||
<info name="release" value="198509xx"/>
|
||||
<info name="alt_title" value="棋太平"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="349392">
|
||||
<rom name="kitahei.d88" size="349392" crc="53ae4f58" sha1="bbdff7ac4d6a844580bb06accb1d8d88759b8ae9"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="klax" supported="yes">
|
||||
<description>Klax</description>
|
||||
<year>1990</year>
|
||||
@@ -34659,7 +34630,6 @@ To test Jast Sound: during gameplay press * numpad then enter twice (first comma
|
||||
<!-- PC8801 -->
|
||||
<info name="release" value="198506xx"/>
|
||||
<info name="alt_title" value="天使たちの午後"/>
|
||||
<!-- -->
|
||||
<info name="usage" value="Uses optional Jast Sound, enable it by -centronics covox"/>
|
||||
<!--combined image-->
|
||||
<!--rom name="tenshi-tachi no gogo.d88" size="827952" crc="44b55927" sha1="81579d738bc062538459c10cf0980eef9a8971f1"/-->
|
||||
@@ -49111,7 +49081,6 @@ Doesn't load, throws "Bad allocation table" with a Disk Basic FILES command, is
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- -->
|
||||
<software name="fanteatra" cloneof="fanteatr" supported="no">
|
||||
<description>Fantastic Eaters (alt)</description>
|
||||
<year>19??</year>
|
||||
|
||||
+39
-2
@@ -179,7 +179,7 @@ license:CC0-1.0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="enroute">
|
||||
<software name="enroute_b" cloneof="enroute">
|
||||
<description>En Route: Belgium, Netherlands, Luxembourg</description>
|
||||
<year>1997</year>
|
||||
<publisher>Palmtop BV</publisher>
|
||||
@@ -187,7 +187,32 @@ license:CC0-1.0
|
||||
<sharedfeat name="compatibility" value="S3A"/>
|
||||
<part name="cart" interface="psion_ssd">
|
||||
<dataarea name="rom" size="1048576">
|
||||
<rom name="EnRoute.rom" size="1048576" crc="5af14e37" sha1="8ce7adfad71392a2d5854c5bb1e7724ac36ce1f6"/>
|
||||
<rom name="EnRoute_B.rom" size="1048576" crc="5af14e37" sha1="8ce7adfad71392a2d5854c5bb1e7724ac36ce1f6"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="enroute">
|
||||
<description>En Route: United Kingdom, Eire</description>
|
||||
<year>1997</year>
|
||||
<publisher>Palmtop BV</publisher>
|
||||
<info name="usage" value="Requires 512K" />
|
||||
<sharedfeat name="compatibility" value="S3A"/>
|
||||
<part name="cart" interface="psion_ssd">
|
||||
<dataarea name="rom" size="1048576">
|
||||
<rom name="EnRoute_UK.rom" size="1048576" crc="e3baa9c2" sha1="dc8f28300961321bc5d7d382a25176a51a95263a"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="finpack3">
|
||||
<description>Finance Pack 3</description>
|
||||
<year>1993</year>
|
||||
<publisher>Widget Software</publisher>
|
||||
<sharedfeat name="compatibility" value="S3"/>
|
||||
<part name="cart" interface="psion_ssd">
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="Finance_Pack_3.rom" size="131072" crc="cdc7f002" sha1="e02a5ece237d79e71c28a4cb7314ba4572ff4878"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@@ -398,6 +423,18 @@ license:CC0-1.0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="telenote">
|
||||
<description>Telenote Link</description>
|
||||
<year>1995</year>
|
||||
<publisher>Psion</publisher>
|
||||
<sharedfeat name="compatibility" value="S3A"/>
|
||||
<part name="cart" interface="psion_ssd">
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="Telenote_Link.rom" size="131072" crc="d59111fb" sha1="cbb74fe07cf6580e67144459ee82e36eaed8bb59"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="toolkit1">
|
||||
<description>ToolKit 1</description>
|
||||
<year>1995</year>
|
||||
|
||||
+84
-48
@@ -33,7 +33,7 @@ NOTE: There is also a newer version of the Smart Cycle with 3D games, this howev
|
||||
|
||||
<softwarelist name="smartcycle_cart" description="Fisher Price Smart Cycle cartridges">
|
||||
|
||||
<software name="sc0308" supported="no">
|
||||
<software name="dinos" supported="no">
|
||||
<description>Discover the Dinosaurs (0308)</description>
|
||||
<year>2006</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
@@ -44,52 +44,7 @@ NOTE: There is also a newer version of the Smart Cycle with 3D games, this howev
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sc0608" supported="no">
|
||||
<description>Learning Adventure (0608)</description>
|
||||
<year>2006</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000"> <!-- checksum in header matches -->
|
||||
<rom name="0608.bin" size="0x800000" crc="167b2069" sha1="af5056db116020fd3096794a6166f0f13184a5df"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sc1410" supported="no">
|
||||
<description>The Penguins of Madagascar (1410)</description>
|
||||
<year>2009</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000"> <!-- checksum in header matches -->
|
||||
<rom name="1410.bin" size="0x800000" crc="01eccc39" sha1="33cf330c3523343ec857a779a22d498215cb2362"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sc2108" supported="no"> <!-- VBL interrupt is turned off and never back on? -->
|
||||
<description>Scooby-Doo! (2108)</description>
|
||||
<year>2007</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000"> <!-- checksum in header matches -->
|
||||
<rom name="2108.bin" size="0x800000" crc="050c1806" sha1="0ac208781ef2172a1a3c6a974825d5f80e3ef291"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="n5992" supported="no">
|
||||
<description>Dora l'Exploratrice - Dora L'Aventure de l'Amitié (France)</description>
|
||||
<year>2008</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<info name="serial" value="N5992" />
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000">
|
||||
<rom name="N5992 - Dora l'Exploratrice - Dora L'Aventure de l'Amitie (FR).u1" size="0x800000" crc="fa590280" sha1="5767536e1781fee06c52671bc7ca7b639a99e50b"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="n5993" cloneof="sc0308" supported="no">
|
||||
<software name="dinosfr" cloneof="dinos" supported="no">
|
||||
<description>À la Découverte des Dinosaures (France)</description>
|
||||
<year>2008</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
@@ -101,7 +56,64 @@ NOTE: There is also a newer version of the Smart Cycle with 3D games, this howev
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="n5994" supported="no"> <!-- VBL interrupt is turned off and never back on? -->
|
||||
<software name="learnadv" supported="no">
|
||||
<description>Learning Adventure (0608)</description>
|
||||
<year>2006</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000"> <!-- checksum in header matches -->
|
||||
<rom name="0608.bin" size="0x800000" crc="167b2069" sha1="af5056db116020fd3096794a6166f0f13184a5df"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pengmad" supported="no"> <!-- VBL interrupt is turned off and never back on? and other IRQ issues? -->
|
||||
<description>The Penguins of Madagascar (1410)</description>
|
||||
<year>2009</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000"> <!-- checksum in header matches -->
|
||||
<rom name="1410.bin" size="0x800000" crc="01eccc39" sha1="33cf330c3523343ec857a779a22d498215cb2362"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="scooby" supported="no"> <!-- VBL interrupt is turned off and never back on? -->
|
||||
<description>Scooby-Doo! (2108)</description>
|
||||
<year>2007</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000"> <!-- checksum in header matches -->
|
||||
<rom name="2108.bin" size="0x800000" crc="050c1806" sha1="0ac208781ef2172a1a3c6a974825d5f80e3ef291"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dora" supported="no"> <!-- might not be UK specific, packaging had 'color' spelling -->
|
||||
<description>Dora the Explorer - Friendship Adventure (UK)</description>
|
||||
<year>2006</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<info name="serial" value="K6689" />
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000">
|
||||
<rom name="K6689 - Dora the Explorer - Friendship Adventure (UK).bin" size="0x800000" crc="569acece" sha1="c774da691bb1d5e3ae900449be24e1e598764f26"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dorafr" cloneof="dora" supported="no">
|
||||
<description>Dora l'Exploratrice - Dora L'Aventure de l'Amitié (France)</description>
|
||||
<year>2008</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<info name="serial" value="N5992" />
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000">
|
||||
<rom name="N5992 - Dora l'Exploratrice - Dora L'Aventure de l'Amitie (FR).u1" size="0x800000" crc="fa590280" sha1="5767536e1781fee06c52671bc7ca7b639a99e50b"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="hotwfr" supported="no"> <!-- VBL interrupt is turned off and never back on? -->
|
||||
<description>Hot Wheels - Pédale à Toute Vitesse (France)</description>
|
||||
<year>2008</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
@@ -113,4 +125,28 @@ NOTE: There is also a newer version of the Smart Cycle with 3D games, this howev
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spongeb" supported="no"> <!-- might not be UK specific, packaging had 'color' spelling --> <!-- VBL interrupt is turned off and never back on? -->
|
||||
<description>Spongebob Squarepants - Ocean Adventure (UK)</description>
|
||||
<year>2007</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<info name="serial" value="K6690" />
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000">
|
||||
<rom name="K6690 - Spongebob Squarepants - Ocean Adventure (UK).bin" size="0x800000" crc="dde4d2d6" sha1="88751c6f57c323f18d3eee89430f32977339398e"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="barbie" supported="no"> <!-- might not be UK specific, packaging had 'color' spelling --> <!-- VBL interrupt is turned off and never back on? -->
|
||||
<description>Barbie - Fairytopia (UK)</description>
|
||||
<year>2007</year>
|
||||
<publisher>Fisher Price</publisher>
|
||||
<info name="serial" value="L0544" />
|
||||
<part name="cart" interface="smartcycle_cart">
|
||||
<dataarea name="rom" size="0x800000">
|
||||
<rom name="L0544 - Barbie - Fairytopia (UK).bin" size="0x800000" crc="453268e1" sha1="4d9b3f27d7b1923178c047945b5598556275a19c"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
+3
-3
@@ -20615,7 +20615,7 @@ more investigation needed...
|
||||
</software>
|
||||
|
||||
<software name="ninjawaru" cloneof="ninjawar">
|
||||
<description>The Ninjawarriors (USA)</description>
|
||||
<description>The Ninja Warriors (USA)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Taito</publisher>
|
||||
<info name="serial" value="SNS-NI-USA" />
|
||||
@@ -52008,7 +52008,7 @@ to ensure nothing has been touched in the Retro Quest cart production in 2013/20
|
||||
</software>
|
||||
|
||||
<software name="ninjawarj" cloneof="ninjawar">
|
||||
<description>The Ninjawarriors Again (Japan)</description>
|
||||
<description>The Ninja Warriors Again (Japan)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Taito</publisher>
|
||||
<info name="serial" value="SHVC-NI" />
|
||||
@@ -52023,7 +52023,7 @@ to ensure nothing has been touched in the Retro Quest cart production in 2013/20
|
||||
</software>
|
||||
|
||||
<software name="ninjawar">
|
||||
<description>The Ninjawarriors (Europe)</description>
|
||||
<description>The Ninja Warriors (Europe)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Titus</publisher>
|
||||
<info name="alt_title" value="Ninjawarriors - The New Generation (Box)" />
|
||||
|
||||
+3
-2
@@ -100,8 +100,9 @@ Broken [video] during intro, uses bitmap mode with ROZ layer
|
||||
<publisher>C&E Soft</publisher>
|
||||
<notes><![CDATA[
|
||||
[video] ROZ is misaligned during intro, and initially concealed (blending?).
|
||||
[sound] missing crowd noise during gameplay, tries to play an empty buffer in the $2xxx range.
|
||||
[sound] DMA driven samples cuts off too early.
|
||||
[sound] missing crowd noise during gameplay, tries to play an empty buffer in the $2xxx range. (fixed with internal sound BIOS dump for attract)
|
||||
[sound] Keeps ringing a sound sample on main menu.
|
||||
[sound] DMA driven samples cuts off too early during gameplay.
|
||||
]]></notes>
|
||||
<info name="serial" value="F005" />
|
||||
<info name="alt_title" value="超級中華職棒聯盟" />
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
|
||||
Known undumped list (* denotes availablity in HDD folder):
|
||||
- Auto Net-S (G-3003), TERA-NET BBS software
|
||||
- Drakkhen (ドラッケン, G-?)
|
||||
- Janou Touryuumon II (雀皇登竜門 II, T-45019)
|
||||
- Page Pro-S (G-3004), desktop publishing software
|
||||
* Puzzle Construction (パズルコンストラクション, G-3002)
|
||||
- The BestPlay Baseball (ベストプレーベースボール)
|
||||
* The Manhole
|
||||
|
||||
- CCT/V, may be just DOS/V compatible
|
||||
- Daisenryaku Construction (大戦略 コンストラクション), prototype at best
|
||||
- Princess Maker (プリンセスメーカー), may be just DOS/V compatible
|
||||
- Wibarm U.S.A. (ウイバーン U.S.A.), may be just DOS/V compatible
|
||||
|
||||
-->
|
||||
<softwarelist name="teradrive_flop" description="Sega Teradrive floppy disk images">
|
||||
|
||||
<!--!Operating Systems -->
|
||||
|
||||
<!-- DOS/V sets have "for Sega Teradrive" and "IBM Personal System/55" labels -->
|
||||
|
||||
<software name="dosv407" supported="partial">
|
||||
<description>IBM DOS (J4.07/V)</description>
|
||||
<year>1991</year>
|
||||
<publisher>IBM</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="1474560">
|
||||
<rom name="ibm-dos-j4.07.ima" size="1474560" crc="0c94926a" sha1="0763ac53e07dc6b40e23ab6bd126e74278c87a4a"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dosv406" cloneof="dosv407" supported="partial">
|
||||
<description>IBM DOS (J4.06/V)</description>
|
||||
<year>1991</year>
|
||||
<publisher>IBM</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="1474560">
|
||||
<!-- original in .imz format -->
|
||||
<!-- <rom name="ibm-dos-j4.0-v-rev-4.06.imz" size="559221" crc="e7bd130e" sha1="14180c714cff70b63b0dac588f0dcd04873dece2"/> -->
|
||||
<rom name="ibm dos j4.0-v-rev-4.06.ima" size="1474560" crc="53620fed" sha1="de070ea9c9aa443fc26949e54d3b276239cee59b"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dosv512" supported="no">
|
||||
<description>IBM DOS (J5.00/V, rev 1.2)</description>
|
||||
<year>1993</year>
|
||||
<publisher>IBM</publisher>
|
||||
<notes><![CDATA[
|
||||
Non-bootable, contains AX, J3, TE, CHPRN, SP, ESCP12 and $ANSI folders
|
||||
Part of a multidisk set?
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="1474560">
|
||||
<!-- original in .imz format -->
|
||||
<!-- <rom name="ibm-dos-j5.0-v-rev-1.2.imz" size="144603" crc="1a7b6d79" sha1="d08d8b7c0328bcbf5254a66ae32f240d8cbad838"/> -->
|
||||
<rom name="ibm-dos-j5.0-v-rev-1.2.ima" size="1474560" crc="dfaf3948" sha1="2ff8991aa0a211ba87d22847ff29360cdfbc2073"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!--!Driver disks -->
|
||||
|
||||
<software name="drv4" supported="partial">
|
||||
<description>Teradrive Driver Disk (J4.0)</description>
|
||||
<year>1991</year>
|
||||
<publisher>IBM / Sega</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="1474560">
|
||||
<rom name="driver-disk-j4.0-serial.ima" size="1474560" crc="ca62ad08" sha1="f8c0c707cca8c949a6e2ff61034a14560ac6f567"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- another dump floating, same contents plus extra empty folders -->
|
||||
<!-- JDASH, JSW, JSFONT, JSUT -->
|
||||
<!-- <rom name="driver-disk-j4.0-no-serial.ima" size="1474560" crc="b2060607" sha1="b7aba7da01bc3846c1d88857d067e5febafd63f1"/>-->
|
||||
|
||||
</softwarelist>
|
||||
@@ -1039,23 +1039,6 @@ IPL loading resolves to a red and corrupt screen, baddump?
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="gruppe" supported="no">
|
||||
<description>Gruppe</description>
|
||||
<year>1985</year>
|
||||
<publisher>SPS</publisher>
|
||||
<notes><![CDATA[
|
||||
Shows a random bitmap graphic then returns "program load error", wants [FDC] write protection enabled (regression)
|
||||
]]></notes>
|
||||
|
||||
<info name="release" value="198506xx"/>
|
||||
<info name="alt_title" value="ぐるっぺ"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="348848">
|
||||
<rom name="gruppe.d88" size="348848" crc="a50dfd33" sha1="551749d2ec4deb3919f2111d234450fd4f90d54a"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="hajafuin">
|
||||
<description>Haja no Fuuin</description>
|
||||
<year>1986</year>
|
||||
@@ -3394,19 +3377,6 @@ Expects [KBD] name entry presses with shift held
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="victnine">
|
||||
<description>Victorious Nine</description>
|
||||
<year>1985</year>
|
||||
<publisher>ニデコム (Nidecom)</publisher>
|
||||
<info name="release" value="198509xx"/>
|
||||
<info name="alt_title" value="ビクトリアスナイン"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="350560">
|
||||
<rom name="victorious nine.d88" size="350560" crc="2fc94dfd" sha1="e29f55bed953e0304d88b8eed9448f31eb888298"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- There exists an alt checksum for the first disk (due to differences only in the d88 header, but exact same data)
|
||||
<rom name="zzz-unk-wib_sys.d88" size="414992" crc="9670c2c2" sha1="49d4539a8eaa81818da1f192cd6bc56dc779291f"/>
|
||||
-->
|
||||
|
||||
+5243
-4095
File diff suppressed because it is too large.
Load diff
+1369
-1249
File diff suppressed because it is too large.
Load diff
@@ -1617,7 +1617,7 @@ endif
|
||||
|
||||
ifeq (posix,$(SHELLTYPE))
|
||||
$(GENDIR)/version.cpp: makefile $(GENDIR)/git_desc | $(GEN_FOLDERS)
|
||||
@echo '#define BARE_BUILD_VERSION "0.279"' > $@
|
||||
@echo '#define BARE_BUILD_VERSION "0.280"' > $@
|
||||
@echo '#define BARE_VCS_REVISION "$(NEW_GIT_VERSION)"' >> $@
|
||||
@echo 'extern const char bare_build_version[];' >> $@
|
||||
@echo 'extern const char bare_vcs_revision[];' >> $@
|
||||
@@ -1627,7 +1627,7 @@ $(GENDIR)/version.cpp: makefile $(GENDIR)/git_desc | $(GEN_FOLDERS)
|
||||
@echo 'const char build_version[] = BARE_BUILD_VERSION " (" BARE_VCS_REVISION ")";' >> $@
|
||||
else
|
||||
$(GENDIR)/version.cpp: makefile $(GENDIR)/git_desc | $(GEN_FOLDERS)
|
||||
@echo #define BARE_BUILD_VERSION "0.279" > $@
|
||||
@echo #define BARE_BUILD_VERSION "0.280" > $@
|
||||
@echo #define BARE_VCS_REVISION "$(NEW_GIT_VERSION)" >> $@
|
||||
@echo extern const char bare_build_version[]; >> $@
|
||||
@echo extern const char bare_vcs_revision[]; >> $@
|
||||
|
||||
@@ -16,8 +16,11 @@ function dat.check(set, softlist)
|
||||
if not status or not info then
|
||||
return nil
|
||||
end
|
||||
local sourcefile = emu.driver_find(set).source_file:match('[^/\\]*$')
|
||||
local sourcefile = emu.driver_find(set).source_file:match('[^/\\]+[/\\\\][^/\\]*$')
|
||||
status, drvinfo = pcall(datread, 'drv', 'info', sourcefile)
|
||||
if not drvinfo then
|
||||
status, drvinfo = pcall(datread, 'drv', 'info', sourcefile:match('[^/\\]*$'))
|
||||
end
|
||||
if drvinfo then
|
||||
info = info .. _p('plugin-data', '\n\n--- DRIVER INFO ---\nDriver: ') .. sourcefile .. '\n\n' .. drvinfo
|
||||
end
|
||||
|
||||
@@ -16,8 +16,11 @@ function dat.check(set, softlist)
|
||||
if not status or not info then
|
||||
return nil
|
||||
end
|
||||
local sourcefile = emu.driver_find(set).source_file:match('[^/\\]*$')
|
||||
local sourcefile = emu.driver_find(set).source_file:match('[^/\\]+[/\\\\][^/\\]*$')
|
||||
status, drvinfo = pcall(datread, 'drv', 'info', sourcefile)
|
||||
if not drvinfo then
|
||||
status, drvinfo = pcall(datread, 'drv', 'info', sourcefile:match('[^/\\]*$'))
|
||||
end
|
||||
if drvinfo then
|
||||
info = info .. _p('plugin-data', '\n\n--- DRIVER INFO ---\nDriver: ') .. sourcefile .. '\n\n' .. drvinfo
|
||||
end
|
||||
|
||||
+157
-158
@@ -2586,7 +2586,6 @@ ragtimea:
|
||||
|
||||
;forcebrk:******Force Break (Japan)
|
||||
brkthru:
|
||||
brkthrubl:
|
||||
brkthruj:
|
||||
forcebrk:
|
||||
@:maincpu,program,0531,27,00,32
|
||||
@@ -4126,8 +4125,8 @@ wrally2a:
|
||||
;maniac square (unprotected)(by tamphax)
|
||||
maniacsq:
|
||||
maniacsqa:
|
||||
maniacsqb:
|
||||
maniacsqs:
|
||||
maniacsqu:
|
||||
@:maincpu,program,fe982c,48,50,00
|
||||
|
||||
|
||||
@@ -8910,13 +8909,6 @@ miraxa:
|
||||
@:maincpu,program,d021,6,00,00
|
||||
|
||||
|
||||
;@s:misc/mole.cpp
|
||||
|
||||
mole:
|
||||
@:maincpu,program,02e1,0a,00,05
|
||||
@:maincpu,program,0375,50,19,00
|
||||
|
||||
|
||||
;@s:misc/mosaic.cpp
|
||||
|
||||
;(mosaic)
|
||||
@@ -9015,14 +9007,6 @@ sprcros2a:
|
||||
@:master_cpu,program,f013,1,03,03
|
||||
|
||||
|
||||
;@s:misc/sstrangr.cpp
|
||||
|
||||
;(space stranger & space stranger 2)
|
||||
sstrangr:
|
||||
sstrangr2:
|
||||
@:maincpu,program,20f4,2,00,00
|
||||
|
||||
|
||||
;@s:misc/statriv2.cpp
|
||||
|
||||
;*******super triv II(By Firebrand)
|
||||
@@ -9052,6 +9036,24 @@ stuntair:
|
||||
@:maincpu,program,f9a1,01,b0,b0
|
||||
|
||||
|
||||
;@s:misc/timelimt.cpp
|
||||
|
||||
;(time limit) (by GeoMan)
|
||||
timelimt:
|
||||
@:maincpu,program,80ca,3,0,0
|
||||
@:maincpu,program,8981,1,27,27
|
||||
@:maincpu,program,89a1,1,00,00
|
||||
@:maincpu,program,89c1,1,27,27
|
||||
@:maincpu,program,89e1,1,27,27
|
||||
@:maincpu,program,8a01,1,27,27
|
||||
@:maincpu,program,8a21,1,27,27
|
||||
|
||||
|
||||
;*******progress(By Firebrand)(Hiscore does not seem to change during game)
|
||||
progress:
|
||||
@:maincpu,program,8711,e,00,01
|
||||
|
||||
|
||||
;@s:misc/tugboat.cpp
|
||||
|
||||
berenstn:
|
||||
@@ -9292,7 +9294,7 @@ cgangpzlj:
|
||||
;**** thanks to Takasaki for this fix ****
|
||||
emeralda:
|
||||
emeraldaj:
|
||||
emeraldaja:
|
||||
emeraldajb:
|
||||
@:maincpu,program,9c9e,10e,4b,01
|
||||
|
||||
|
||||
@@ -12303,6 +12305,15 @@ ssf2mdb:
|
||||
@:maincpu,program,fffcb3,29,00,20
|
||||
|
||||
|
||||
;@s:sega/megadriv_ybox.cpp
|
||||
|
||||
;*******puckman pockimon
|
||||
jingling:
|
||||
puckpkmn:
|
||||
puckpkmnb:
|
||||
@:maincpu,program,ff0020,30,38,36
|
||||
|
||||
|
||||
;@s:sega/megatech.cpp
|
||||
|
||||
;******megatech: e-swat
|
||||
@@ -12335,15 +12346,6 @@ vf:
|
||||
@:maincpu,program,40f800,b3,09,4d
|
||||
|
||||
|
||||
;@s:sega/puckpkmn.cpp
|
||||
|
||||
;*******puckman pockimon
|
||||
jingling:
|
||||
puckpkmn:
|
||||
puckpkmnb:
|
||||
@:maincpu,program,ff0020,30,38,36
|
||||
|
||||
|
||||
;@s:sega/segac2.cpp
|
||||
|
||||
ooparts:
|
||||
@@ -15966,6 +15968,105 @@ rollace:
|
||||
@:maincpu,program,c026,3,00,00
|
||||
|
||||
|
||||
;@s:taito/roundup.cpp
|
||||
|
||||
theportr:
|
||||
@:maincpu,program,40fd,3,00,00
|
||||
@:maincpu,program,9201,1,24,24
|
||||
@:maincpu,program,91e1,1,24,24
|
||||
@:maincpu,program,91c1,1,24,24
|
||||
@:maincpu,program,91a1,1,24,24
|
||||
@:maincpu,program,9181,1,00,00
|
||||
|
||||
|
||||
thehole:
|
||||
@:maincpu,program,8283,1a,19,00
|
||||
@:maincpu,program,8039,f,19,00
|
||||
|
||||
|
||||
;porter:******Port Man (bootleg on Moon Cresta hardware)
|
||||
dockman:
|
||||
dockmanb:
|
||||
dockmanc:
|
||||
porter:
|
||||
portera:
|
||||
portman:
|
||||
portmanj:
|
||||
@:maincpu,program,80fd,3,00,00
|
||||
@:maincpu,program,92c1,1,00,00
|
||||
@:maincpu,program,92e1,1,24,24
|
||||
@:maincpu,program,9301,1,24,24
|
||||
@:maincpu,program,9321,1,24,24
|
||||
@:maincpu,program,9341,1,24,24
|
||||
@:maincpu,program,9181,1,00,00
|
||||
@:maincpu,program,91a1,1,24,24
|
||||
@:maincpu,program,91c1,1,24,24
|
||||
@:maincpu,program,91e1,1,24,24
|
||||
@:maincpu,program,9201,1,24,24
|
||||
|
||||
|
||||
intrepid:
|
||||
intrepid2:
|
||||
intrepidb:
|
||||
intrepidb2:
|
||||
intrepidb3:
|
||||
@:maincpu,program,803c,3d,02,fd
|
||||
@:maincpu,program,8035,2,00,00
|
||||
|
||||
|
||||
;(funny mouse) parent
|
||||
funnymou:
|
||||
suprmous:
|
||||
@:maincpu,program,804a,03,00,00
|
||||
@:maincpu,program,9221,01,24,24
|
||||
@:maincpu,program,9201,01,24,24
|
||||
@:maincpu,program,91e1,01,24,24
|
||||
@:maincpu,program,91c1,01,24,24
|
||||
@:maincpu,program,91a1,01,24,24
|
||||
@:maincpu,program,9181,01,00,00
|
||||
|
||||
|
||||
machomou:
|
||||
@:maincpu,program,804a,3,00,00
|
||||
@:maincpu,program,9181,1,00,00
|
||||
@:maincpu,program,91a1,1,24,24
|
||||
@:maincpu,program,91c1,1,24,24
|
||||
@:maincpu,program,91e1,1,24,24
|
||||
@:maincpu,program,9201,1,24,24
|
||||
@:maincpu,program,9221,1,24,24
|
||||
|
||||
|
||||
fitter:
|
||||
fitterbl:
|
||||
roundup:
|
||||
ttfitter:
|
||||
@:maincpu,program,8050,03,00,00
|
||||
@:maincpu,program,9621,01,24,24
|
||||
@:maincpu,program,9601,01,24,24
|
||||
@:maincpu,program,95e1,01,24,24
|
||||
@:maincpu,program,95c1,01,24,24
|
||||
@:maincpu,program,95a1,01,24,24
|
||||
@:maincpu,program,9581,01,00,00
|
||||
|
||||
|
||||
thepitu2:
|
||||
@:maincpu,program,8283,17,10,00
|
||||
@:maincpu,program,8037,f,10,00
|
||||
|
||||
|
||||
;thepit:******The Pit (Bootleg)
|
||||
thepit:
|
||||
thepitj:
|
||||
thepitu1:
|
||||
@:maincpu,program,8283,17,10,0
|
||||
@:maincpu,program,8039,f,10,0
|
||||
|
||||
|
||||
desertdn:
|
||||
@:maincpu,program,82c7,3,00,00
|
||||
@:maincpu,program,82c8,1,50,50
|
||||
|
||||
|
||||
;@s:taito/sbowling.cpp
|
||||
|
||||
;******strike bowling(By Firebrand)
|
||||
@@ -16027,6 +16128,19 @@ perestrof:
|
||||
@:maincpu,program,f8f1,4,00,00
|
||||
|
||||
|
||||
;@s:taito/suprridr.cpp
|
||||
|
||||
;******super rider
|
||||
suprridr:
|
||||
@:maincpu,program,80ca,3,00,00
|
||||
@:maincpu,program,8a21,1,24,24
|
||||
@:maincpu,program,8a01,1,24,24
|
||||
@:maincpu,program,89e1,1,24,24
|
||||
@:maincpu,program,89c1,1,24,24
|
||||
@:maincpu,program,89a1,1,24,24
|
||||
@:maincpu,program,8981,1,00,00
|
||||
|
||||
|
||||
;@s:taito/taito_b.cpp
|
||||
|
||||
ryujin:
|
||||
@@ -17069,7 +17183,7 @@ wyvernf0a:
|
||||
@:maincpu,program,8800,190,00,26
|
||||
|
||||
|
||||
;@s:tatsumi/tatsumi.cpp
|
||||
;@s:tatsumi/cyclwarr.cpp
|
||||
|
||||
bigfight:
|
||||
bigfightj:
|
||||
@@ -17608,123 +17722,6 @@ twcup90t:
|
||||
@:maincpu,program,804d,01,11,11
|
||||
|
||||
|
||||
;@s:thepit/thepit.cpp
|
||||
|
||||
theportr:
|
||||
@:maincpu,program,40fd,3,00,00
|
||||
@:maincpu,program,9201,1,24,24
|
||||
@:maincpu,program,91e1,1,24,24
|
||||
@:maincpu,program,91c1,1,24,24
|
||||
@:maincpu,program,91a1,1,24,24
|
||||
@:maincpu,program,9181,1,00,00
|
||||
|
||||
|
||||
thehole:
|
||||
@:maincpu,program,8283,1a,19,00
|
||||
@:maincpu,program,8039,f,19,00
|
||||
|
||||
|
||||
;porter:******Port Man (bootleg on Moon Cresta hardware)
|
||||
dockman:
|
||||
dockmanb:
|
||||
dockmanc:
|
||||
porter:
|
||||
portera:
|
||||
portman:
|
||||
portmanj:
|
||||
@:maincpu,program,80fd,3,00,00
|
||||
@:maincpu,program,92c1,1,00,00
|
||||
@:maincpu,program,92e1,1,24,24
|
||||
@:maincpu,program,9301,1,24,24
|
||||
@:maincpu,program,9321,1,24,24
|
||||
@:maincpu,program,9341,1,24,24
|
||||
@:maincpu,program,9181,1,00,00
|
||||
@:maincpu,program,91a1,1,24,24
|
||||
@:maincpu,program,91c1,1,24,24
|
||||
@:maincpu,program,91e1,1,24,24
|
||||
@:maincpu,program,9201,1,24,24
|
||||
|
||||
|
||||
intrepid:
|
||||
intrepid2:
|
||||
intrepidb:
|
||||
intrepidb2:
|
||||
intrepidb3:
|
||||
@:maincpu,program,803c,3d,02,fd
|
||||
@:maincpu,program,8035,2,00,00
|
||||
|
||||
|
||||
;(funny mouse) parent
|
||||
funnymou:
|
||||
suprmous:
|
||||
@:maincpu,program,804a,03,00,00
|
||||
@:maincpu,program,9221,01,24,24
|
||||
@:maincpu,program,9201,01,24,24
|
||||
@:maincpu,program,91e1,01,24,24
|
||||
@:maincpu,program,91c1,01,24,24
|
||||
@:maincpu,program,91a1,01,24,24
|
||||
@:maincpu,program,9181,01,00,00
|
||||
|
||||
|
||||
machomou:
|
||||
@:maincpu,program,804a,3,00,00
|
||||
@:maincpu,program,9181,1,00,00
|
||||
@:maincpu,program,91a1,1,24,24
|
||||
@:maincpu,program,91c1,1,24,24
|
||||
@:maincpu,program,91e1,1,24,24
|
||||
@:maincpu,program,9201,1,24,24
|
||||
@:maincpu,program,9221,1,24,24
|
||||
|
||||
|
||||
fitter:
|
||||
fitterbl:
|
||||
roundup:
|
||||
ttfitter:
|
||||
@:maincpu,program,8050,03,00,00
|
||||
@:maincpu,program,9621,01,24,24
|
||||
@:maincpu,program,9601,01,24,24
|
||||
@:maincpu,program,95e1,01,24,24
|
||||
@:maincpu,program,95c1,01,24,24
|
||||
@:maincpu,program,95a1,01,24,24
|
||||
@:maincpu,program,9581,01,00,00
|
||||
|
||||
|
||||
thepitu2:
|
||||
@:maincpu,program,8283,17,10,00
|
||||
@:maincpu,program,8037,f,10,00
|
||||
|
||||
|
||||
;thepit:******The Pit (Bootleg)
|
||||
thepit:
|
||||
thepitj:
|
||||
thepitu1:
|
||||
@:maincpu,program,8283,17,10,0
|
||||
@:maincpu,program,8039,f,10,0
|
||||
|
||||
|
||||
desertdn:
|
||||
@:maincpu,program,82c7,3,00,00
|
||||
@:maincpu,program,82c8,1,50,50
|
||||
|
||||
|
||||
;@s:thepit/timelimt.cpp
|
||||
|
||||
;(time limit) (by GeoMan)
|
||||
timelimt:
|
||||
@:maincpu,program,80ca,3,0,0
|
||||
@:maincpu,program,8981,1,27,27
|
||||
@:maincpu,program,89a1,1,00,00
|
||||
@:maincpu,program,89c1,1,27,27
|
||||
@:maincpu,program,89e1,1,27,27
|
||||
@:maincpu,program,8a01,1,27,27
|
||||
@:maincpu,program,8a21,1,27,27
|
||||
|
||||
|
||||
;*******progress(By Firebrand)(Hiscore does not seem to change during game)
|
||||
progress:
|
||||
@:maincpu,program,8711,e,00,01
|
||||
|
||||
|
||||
;@s:toaplan/batsugun.cpp
|
||||
|
||||
batsugun:
|
||||
@@ -18545,19 +18542,6 @@ spcforce:
|
||||
@:maincpu,program,4300,50,30,30
|
||||
|
||||
|
||||
;@s:venture/suprridr.cpp
|
||||
|
||||
;******super rider
|
||||
suprridr:
|
||||
@:maincpu,program,80ca,3,00,00
|
||||
@:maincpu,program,8a21,1,24,24
|
||||
@:maincpu,program,8a01,1,24,24
|
||||
@:maincpu,program,89e1,1,24,24
|
||||
@:maincpu,program,89c1,1,24,24
|
||||
@:maincpu,program,89a1,1,24,24
|
||||
@:maincpu,program,8981,1,00,00
|
||||
|
||||
|
||||
;@s:vsystem/aerofgt.cpp
|
||||
|
||||
aerofgt:
|
||||
@@ -18746,6 +18730,21 @@ superwng:
|
||||
@:maincpu,program,7920,c8,00,19
|
||||
|
||||
|
||||
;@s:yachiyo/mole.cpp
|
||||
|
||||
mole:
|
||||
@:maincpu,program,02e1,0a,00,05
|
||||
@:maincpu,program,0375,50,19,00
|
||||
|
||||
|
||||
;@s:yachiyo/sstrangr.cpp
|
||||
|
||||
;(space stranger & space stranger 2)
|
||||
sstrangr:
|
||||
sstrangr2:
|
||||
@:maincpu,program,20f4,2,00,00
|
||||
|
||||
|
||||
;@s:yunsung/nmg5.cpp
|
||||
|
||||
;wondstck:******Wonder Stick
|
||||
|
||||
@@ -875,6 +875,23 @@ if (BUSES["BBC_USERPORT"]~=null) then
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/bbc/vsp/slot.h,BUSES["BBC_VSP"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["BBC_VSP"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/bbc/vsp/slot.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/vsp/slot.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/vsp/speech.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/vsp/speech.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/vsp/sweetalker.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/vsp/sweetalker.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/bw2/exp.h,BUSES["BW2"] = true
|
||||
@@ -1953,6 +1970,24 @@ if (BUSES["JAKKS_GAMEKEY"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/keytronic/keytronic.h,BUSES["KEYTRONIC"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["KEYTRONIC"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/keytronic/informer_kbd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/keytronic/informer_kbd.h",
|
||||
MAME_DIR .. "src/devices/bus/keytronic/kay_kbd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/keytronic/kay_kbd.h",
|
||||
MAME_DIR .. "src/devices/bus/keytronic/keytronic.cpp",
|
||||
MAME_DIR .. "src/devices/bus/keytronic/keytronic.h",
|
||||
MAME_DIR .. "src/devices/bus/keytronic/keytronic_l2207.cpp",
|
||||
MAME_DIR .. "src/devices/bus/keytronic/keytronic_l2207.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/mpf1/slot.h,BUSES["MPF1"] = true
|
||||
@@ -2177,10 +2212,16 @@ end
|
||||
|
||||
if (BUSES["MZ80"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/mz80/ar_romcard.cpp",
|
||||
MAME_DIR .. "src/devices/bus/mz80/ar_romcard.h",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1e05.cpp",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1e05.h",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1e30.cpp",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1e30.h",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1e35.cpp",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1e35.h",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1r18.cpp",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1r18.h",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1r37.cpp",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz1r37.h",
|
||||
MAME_DIR .. "src/devices/bus/mz80/mz80_exp.cpp",
|
||||
@@ -3365,6 +3406,8 @@ if (BUSES["CENTRONICS"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/centronics/epson_lx810l.h",
|
||||
MAME_DIR .. "src/devices/bus/centronics/epson_rx80.cpp",
|
||||
MAME_DIR .. "src/devices/bus/centronics/epson_rx80.h",
|
||||
MAME_DIR .. "src/devices/bus/centronics/mz1p16.cpp",
|
||||
MAME_DIR .. "src/devices/bus/centronics/mz1p16.h",
|
||||
MAME_DIR .. "src/devices/bus/centronics/nec_p72.cpp",
|
||||
MAME_DIR .. "src/devices/bus/centronics/nec_p72.h",
|
||||
MAME_DIR .. "src/devices/bus/centronics/nlq401.cpp",
|
||||
@@ -3807,9 +3850,26 @@ if (BUSES["MEGADRIVE"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/megadrive/stm95.h",
|
||||
MAME_DIR .. "src/devices/bus/megadrive/svp.cpp",
|
||||
MAME_DIR .. "src/devices/bus/megadrive/svp.h",
|
||||
MAME_DIR .. "src/devices/bus/megadrive/titan.cpp",
|
||||
MAME_DIR .. "src/devices/bus/megadrive/titan.h",
|
||||
MAME_DIR .. "src/devices/bus/megadrive/tplay96.cpp",
|
||||
MAME_DIR .. "src/devices/bus/megadrive/tplay96.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/megadrive/ctrl/mdioport.h,BUSES["MEGADRIVE_CTRL"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["MEGADRIVE_CTRL"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/megadrive/ctrl/mdioport.cpp",
|
||||
MAME_DIR .. "src/devices/bus/megadrive/ctrl/mdioport.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/mononcol/slot.h,BUSES["MONONCOL"] = true
|
||||
@@ -5889,6 +5949,38 @@ if (BUSES["H89BUS"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/heathzenith/h8/h8bus.h,BUSES["H8BUS"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["H8BUS"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/cards.cpp",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/cards.h",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/cpu8080.cpp",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/cpu8080.h",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/front_panel.cpp",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/front_panel.h",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/h8bus.cpp",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/h8bus.h",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/h_8_1.cpp",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/h_8_1.h",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/h_8_5.cpp",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/h_8_5.h",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/wh_8_64.cpp",
|
||||
MAME_DIR .. "src/devices/bus/heathzenith/h8/wh_8_64.h",
|
||||
}
|
||||
|
||||
dependency {
|
||||
{ MAME_DIR .. "src/devices/bus/heathzenith/h8/front_panel.cpp", GEN_DIR .. "emu/layout/h8_fp.lh" },
|
||||
}
|
||||
|
||||
custombuildtask {
|
||||
layoutbuildtask("emu/layout", "h8_fp"),
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/heathzenith/intr_cntrl/intr_cntrl.h,BUSES["HEATH_INTR_SOCKET"] = true
|
||||
@@ -5946,5 +6038,7 @@ if (BUSES["STCART_CONNECTOR"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/st/stcart.h",
|
||||
MAME_DIR .. "src/devices/bus/st/replay.cpp",
|
||||
MAME_DIR .. "src/devices/bus/st/replay.h",
|
||||
MAME_DIR .. "src/devices/bus/st/rom.cpp",
|
||||
MAME_DIR .. "src/devices/bus/st/rom.h",
|
||||
}
|
||||
end
|
||||
@@ -1922,18 +1922,6 @@ if (MACHINES["KB3600"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/keytronic_l2207.h,MACHINES["KEYTRONIC_L2207"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["KEYTRONIC_L2207"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/keytronic_l2207.cpp",
|
||||
MAME_DIR .. "src/devices/machine/keytronic_l2207.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/kr1601rr1.h,MACHINES["KR1601RR1"] = true
|
||||
@@ -1970,18 +1958,6 @@ if (MACHINES["LATCH8"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/lc89510.h,MACHINES["LC89510"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["LC89510"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/lc89510.cpp",
|
||||
MAME_DIR .. "src/devices/machine/lc89510.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/ldpr8210.h,MACHINES["LDPR8210"] = true
|
||||
|
||||
@@ -43,6 +43,19 @@ if (VIDEOS["SEGA315_5313"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
--
|
||||
--@src/devices/video/ym7101.h,VIDEOS["YM7101"] = true
|
||||
--------------------------------------------------
|
||||
|
||||
if (VIDEOS["YM7101"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/video/ym7101.cpp",
|
||||
MAME_DIR .. "src/devices/video/ym7101.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
--------------------------------------------------
|
||||
--
|
||||
--@src/devices/video/am8052.h,VIDEOS["AM8052"] = true
|
||||
|
||||
@@ -42,7 +42,7 @@ skeleton/palestra.cpp
|
||||
nintendo/popeye.cpp
|
||||
alliedl/aleisttl.cpp
|
||||
misc/usbilliards.cpp
|
||||
midway/sspeedr.cpp
|
||||
taito/sspeedr.cpp
|
||||
ramtek/starcrus.cpp
|
||||
skeleton/testpat.cpp
|
||||
misc/a1supply.cpp
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
|
||||
Atari A800/A5200/XEGS cart slot emulation
|
||||
|
||||
<fill me>
|
||||
|
||||
References:
|
||||
- Altirra HW reference manual 2022-07-07 edition, chapter 8;
|
||||
- https://github.com/atari800/atari800/blob/master/DOC/cart.txt
|
||||
@@ -741,7 +739,7 @@ template <unsigned Bank> uint8_t a800_cart_slot_device::read_cart(offs_t offset)
|
||||
|
||||
template <unsigned Bank> void a800_cart_slot_device::write_cart(offs_t offset, uint8_t data)
|
||||
{
|
||||
return m_space_mem->write_byte(offset | Bank << 13, data);
|
||||
m_space_mem->write_byte(offset | Bank << 13, data);
|
||||
}
|
||||
|
||||
// Instantiate maps
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
DEFINE_DEVICE_TYPE(BBC_1MHZBUS_SLOT, bbc_1mhzbus_slot_device, "bbc_1mhzbus_slot", "BBC Micro 1MHz Bus port")
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE BBC_1MHZBUS PORT INTERFACE
|
||||
//**************************************************************************
|
||||
@@ -41,12 +40,13 @@ device_bbc_1mhzbus_interface::device_bbc_1mhzbus_interface(const machine_config
|
||||
// bbc_1mhzbus_slot_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_1mhzbus_slot_device::bbc_1mhzbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, BBC_1MHZBUS_SLOT, tag, owner, clock),
|
||||
device_single_card_slot_interface<device_bbc_1mhzbus_interface>(mconfig, *this),
|
||||
m_card(nullptr),
|
||||
m_irq_handler(*this),
|
||||
m_nmi_handler(*this)
|
||||
bbc_1mhzbus_slot_device::bbc_1mhzbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_1MHZBUS_SLOT, tag, owner, clock)
|
||||
, device_single_card_slot_interface<device_bbc_1mhzbus_interface>(mconfig, *this)
|
||||
, device_mixer_interface(mconfig, *this)
|
||||
, m_card(nullptr)
|
||||
, m_irq_handler(*this)
|
||||
, m_nmi_handler(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ void bbc_1mhzbus_slot_device::jim_w(offs_t offset, uint8_t data)
|
||||
|
||||
void bbc_1mhzbus_devices(device_slot_interface &device)
|
||||
{
|
||||
//device.option_add("teletext", BBC_TELETEXT); /* Acorn ANE01 Teletext Adapter */
|
||||
//device.option_add("ttxta", BBC_TTXTA); /* Acorn ANE01 Teletext Adapter */
|
||||
device.option_add("ieee488", BBC_IEEE488); /* Acorn ANK01 IEEE488 Interface */
|
||||
device.option_add("m500", BBC_M500); /* Acorn ANV02 Music 500 */
|
||||
device.option_add("awhd", BBC_AWHD); /* Acorn Winchester Disc */
|
||||
@@ -167,7 +167,7 @@ void bbc_1mhzbus_devices(device_slot_interface &device)
|
||||
device.option_add("beebopl", BBC_BEEBOPL); /* BeebOPL */
|
||||
device.option_add("beebsid", BBC_BEEBSID); /* BeebSID */
|
||||
device.option_add("cc500", BBC_CC500); /* CTS Colour Card 500 */
|
||||
//device.option_add("prisma3", BBC_PRISMA3); /* PRISMA-3 - Millipede 1989 */
|
||||
//device.option_add("prisma3", BBC_PRISMA3); /* Millipede PRISMA-3 1988 */
|
||||
device.option_add("sprite", BBC_SPRITE); /* Logotron Sprite Board */
|
||||
device.option_add_internal("cfa3000opt", CFA3000_OPT);/* Henson CFA 3000 Option Board */
|
||||
device.option_add_internal("cisco", BBC_CISCO); /* Cisco Terminal */
|
||||
@@ -175,7 +175,7 @@ void bbc_1mhzbus_devices(device_slot_interface &device)
|
||||
|
||||
void bbcm_1mhzbus_devices(device_slot_interface &device)
|
||||
{
|
||||
//device.option_add("teletext", BBC_TELETEXT); /* Acorn ANE01 Teletext Adapter */
|
||||
//device.option_add("ttxta", BBC_TTXTA); /* Acorn ANE01 Teletext Adapter */
|
||||
device.option_add("ieee488", BBC_IEEE488); /* Acorn ANK01 IEEE488 Interface */
|
||||
device.option_add("awhd", BBC_AWHD); /* Acorn Winchester Disc */
|
||||
device.option_add("barrybox", BBC_BARRYBOX); /* The Barry-Box */
|
||||
@@ -193,7 +193,7 @@ void bbcm_1mhzbus_devices(device_slot_interface &device)
|
||||
device.option_add("m5000", BBC_M5000); /* Hybrid Music 5000 Synthesiser */
|
||||
device.option_add("m87", BBC_M87); /* Peartree Music 87 Synthesiser */
|
||||
device.option_add("multiform", BBC_MULTIFORM); /* PEDL Multiform Z80 */
|
||||
device.option_add("opusa", BBC_OPUSA); /* Opus Challenger ADFS */
|
||||
device.option_add("opusa", BBC_OPUSA); /* Opus Challenger 3 ADFS */
|
||||
device.option_add("pdram", BBC_PDRAM); /* Micro User Pull Down RAM */
|
||||
device.option_add("pms64k", BBC_PMS64K); /* PMS 64K Non-Volatile Ram Module */
|
||||
device.option_add("ramdisc", BBC_RAMDISC); /* Morley Electronics RAM Disc */
|
||||
@@ -203,7 +203,7 @@ void bbcm_1mhzbus_devices(device_slot_interface &device)
|
||||
device.option_add("beebopl", BBC_BEEBOPL); /* BeebOPL */
|
||||
device.option_add("beebsid", BBC_BEEBSID); /* BeebSID */
|
||||
device.option_add("cc500", BBC_CC500); /* CTS Colour Card 500 */
|
||||
//device.option_add("prisma3", BBC_PRISMA3); /* PRISMA-3 - Millipede 1989 */
|
||||
//device.option_add("prisma3", BBC_PRISMA3); /* Millipede PRISMA-3 1988 */
|
||||
device.option_add("sprite", BBC_SPRITE); /* Logotron Sprite Board */
|
||||
device.option_add_internal("cfa3000opt", CFA3000_OPT);/* Henson CFA 3000 Option Board */
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
NRST (pin 14) - Not RESET. This is an active low output from the system reset line. It may
|
||||
be used to initialise peripherals whenever a power up or a BREAK causes a
|
||||
reset.
|
||||
Analog In (pin 16) - This is an input to the audio amplifier on the main computer. The amplified
|
||||
Audio In (pin 16) - This is an input to the audio amplifier on the main computer. The amplified
|
||||
signal is produced over the speaker on the keyboard. Its input impedance is
|
||||
9K Ohms and a 3 volt RMS signal will produce maximum volume on the speaker.
|
||||
Note however that signals as large as this will cause distortion if the sound
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
class device_bbc_1mhzbus_interface;
|
||||
|
||||
class bbc_1mhzbus_slot_device : public device_t, public device_single_card_slot_interface<device_bbc_1mhzbus_interface>
|
||||
class bbc_1mhzbus_slot_device : public device_t, public device_single_card_slot_interface<device_bbc_1mhzbus_interface>, public device_mixer_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
|
||||
@@ -10,20 +10,57 @@
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "ramdisc.h"
|
||||
|
||||
#include "machine/nvram.h"
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_RAMDISC, bbc_ramdisc_device, "bbc_ramdisc", "Morley Electronics RAM Disc");
|
||||
namespace {
|
||||
|
||||
class bbc_ramdisc_device: public device_t, public device_bbc_1mhzbus_interface
|
||||
{
|
||||
public:
|
||||
bbc_ramdisc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_RAMDISC, tag, owner, clock)
|
||||
, device_bbc_1mhzbus_interface(mconfig, *this)
|
||||
, m_1mhzbus(*this, "1mhzbus")
|
||||
, m_nvram(*this, "nvram")
|
||||
, m_ram_size(*this, "SIZE")
|
||||
, m_power(*this, "POWER")
|
||||
, m_sector(0)
|
||||
{
|
||||
}
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(power_changed);
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual uint8_t fred_r(offs_t offset) override;
|
||||
virtual void fred_w(offs_t offset, uint8_t data) override;
|
||||
virtual uint8_t jim_r(offs_t offset) override;
|
||||
virtual void jim_w(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
required_device<bbc_1mhzbus_slot_device> m_1mhzbus;
|
||||
required_device<nvram_device> m_nvram;
|
||||
required_ioport m_ram_size;
|
||||
required_ioport m_power;
|
||||
|
||||
std::unique_ptr<uint8_t[]> m_ram;
|
||||
uint16_t m_sector;
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// INPUT_PORTS( ramdisc )
|
||||
// input_ports - device-specific input ports
|
||||
//-------------------------------------------------
|
||||
|
||||
static INPUT_PORTS_START(ramdisc)
|
||||
@@ -37,17 +74,14 @@ static INPUT_PORTS_START(ramdisc)
|
||||
PORT_CONFSETTING(0x02, "2MB")
|
||||
INPUT_PORTS_END
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_ports - device-specific input ports
|
||||
//-------------------------------------------------
|
||||
|
||||
ioport_constructor bbc_ramdisc_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(ramdisc);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( ramdisc )
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START(ramdisc)
|
||||
@@ -55,47 +89,27 @@ ROM_START(ramdisc)
|
||||
ROM_LOAD("ramdisc101.rom", 0x0000, 0x4000, CRC(627568c2) SHA1(17e727998756fe35ff451fd2ce1d4b5977be24fc))
|
||||
ROM_END
|
||||
|
||||
const tiny_rom_entry *bbc_ramdisc_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(ramdisc);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_ramdisc_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
/* ram disk */
|
||||
// ram disk
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_NONE);
|
||||
|
||||
BBC_1MHZBUS_SLOT(config, m_1mhzbus, DERIVED_CLOCK(1, 1), bbc_1mhzbus_devices, nullptr);
|
||||
m_1mhzbus->irq_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w));
|
||||
m_1mhzbus->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::nmi_w));
|
||||
//m_1mhzbus->add_route(ALL_OUTPUTS, DEVICE_SELF_OWNER, 1.0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
const tiny_rom_entry *bbc_ramdisc_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(ramdisc);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_ramdisc_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_ramdisc_device::bbc_ramdisc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_RAMDISC, tag, owner, clock)
|
||||
, device_bbc_1mhzbus_interface(mconfig, *this)
|
||||
, m_1mhzbus(*this, "1mhzbus")
|
||||
, m_nvram(*this, "nvram")
|
||||
, m_ram_size(*this, "SIZE")
|
||||
, m_power(*this, "POWER")
|
||||
, m_sector(0)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
@@ -103,11 +117,11 @@ bbc_ramdisc_device::bbc_ramdisc_device(const machine_config &mconfig, const char
|
||||
|
||||
void bbc_ramdisc_device::device_start()
|
||||
{
|
||||
/* define 2mb ram */
|
||||
// define 2mb ram
|
||||
m_ram = std::make_unique<uint8_t[]>(0x200000);
|
||||
m_nvram->set_base(m_ram.get(), 0x200000);
|
||||
|
||||
/* register for save states */
|
||||
// register for save states
|
||||
save_pointer(NAME(m_ram), 0x200000);
|
||||
save_item(NAME(m_sector));
|
||||
}
|
||||
@@ -119,7 +133,7 @@ void bbc_ramdisc_device::device_start()
|
||||
|
||||
INPUT_CHANGED_MEMBER(bbc_ramdisc_device::power_changed)
|
||||
{
|
||||
/* clear RAM on power off */
|
||||
// clear RAM on power off
|
||||
if (!newval)
|
||||
{
|
||||
memset(m_ram.get(), 0xff, 0x200000);
|
||||
@@ -135,17 +149,17 @@ uint8_t bbc_ramdisc_device::fred_r(offs_t offset)
|
||||
switch (offset)
|
||||
{
|
||||
case 0xc0:
|
||||
/* sector LSB */
|
||||
// sector LSB
|
||||
data = m_sector & 0x00ff;
|
||||
break;
|
||||
case 0xc2:
|
||||
/* sector MSB */
|
||||
// sector MSB
|
||||
data = (m_sector & 0xff00) >> 8;
|
||||
break;
|
||||
case 0xc1:
|
||||
case 0xc3:
|
||||
/* TODO: unknown purpose, must return 0x3f or 0x5f */
|
||||
data = 0x3f;
|
||||
// TODO: unknown purpose, must return 0x3f or 0x5f
|
||||
data = 0x1f | (m_ram_size->read() << 5);
|
||||
logerror("Read %04x -> %02x\n", offset | 0xfcc0, data);
|
||||
break;
|
||||
}
|
||||
@@ -163,16 +177,16 @@ void bbc_ramdisc_device::fred_w(offs_t offset, uint8_t data)
|
||||
switch (offset)
|
||||
{
|
||||
case 0xc0:
|
||||
/* sector LSB */
|
||||
// sector LSB
|
||||
m_sector = (m_sector & 0xff00) | data;
|
||||
break;
|
||||
case 0xc2:
|
||||
/* sector MSB */
|
||||
// sector MSB
|
||||
m_sector = (m_sector & 0x00ff) | (data << 8);
|
||||
break;
|
||||
case 0xc1:
|
||||
case 0xc3:
|
||||
/* TODO: unknown purpose, always writes 0x00 or 0xff */
|
||||
// TODO: unknown purpose, always writes 0x00 or 0xff
|
||||
logerror("Write %04x <- %02x\n", offset | 0xfcc0, data);
|
||||
break;
|
||||
}
|
||||
@@ -185,8 +199,8 @@ uint8_t bbc_ramdisc_device::jim_r(offs_t offset)
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
/* power on and sector < 2mb */
|
||||
if (m_power->read() && m_sector < (m_ram_size->read() << 8))
|
||||
// power on and sector < 2mb
|
||||
if (m_power->read() && m_sector < (m_ram_size->read() << 12))
|
||||
{
|
||||
data &= m_ram[(m_sector << 8) | offset];
|
||||
}
|
||||
@@ -198,11 +212,16 @@ uint8_t bbc_ramdisc_device::jim_r(offs_t offset)
|
||||
|
||||
void bbc_ramdisc_device::jim_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
/* power on and sector < 2mb */
|
||||
if (m_power->read() && m_sector < (m_ram_size->read() << 8))
|
||||
// power on and sector < 2mb
|
||||
if (m_power->read() && m_sector < (m_ram_size->read() << 12))
|
||||
{
|
||||
m_ram[(m_sector << 8) | offset] = data;
|
||||
}
|
||||
|
||||
m_1mhzbus->jim_w(offset, data);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_RAMDISC, device_bbc_1mhzbus_interface, bbc_ramdisc_device, "bbc_ramdisc", "Morley Electronics RAM Disc");
|
||||
@@ -1,59 +1,13 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
Morley Electronics RAM Disc
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#ifndef MAME_BUS_BBC_1MHZBUS_RAMDISC_H
|
||||
#define MAME_BUS_BBC_1MHZBUS_RAMDISC_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "1mhzbus.h"
|
||||
#include "machine/nvram.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class bbc_ramdisc_device:
|
||||
public device_t,
|
||||
public device_bbc_1mhzbus_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_ramdisc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(power_changed);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual uint8_t fred_r(offs_t offset) override;
|
||||
virtual void fred_w(offs_t offset, uint8_t data) override;
|
||||
virtual uint8_t jim_r(offs_t offset) override;
|
||||
virtual void jim_w(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
required_device<bbc_1mhzbus_slot_device> m_1mhzbus;
|
||||
required_device<nvram_device> m_nvram;
|
||||
required_ioport m_ram_size;
|
||||
required_ioport m_power;
|
||||
|
||||
std::unique_ptr<uint8_t[]> m_ram;
|
||||
uint16_t m_sector;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_RAMDISC, bbc_ramdisc_device);
|
||||
DECLARE_DEVICE_TYPE(BBC_RAMDISC, device_bbc_1mhzbus_interface);
|
||||
|
||||
|
||||
#endif /* MAME_BUS_BBC_1MHZBUS_RAMDISC_H */
|
||||
#endif // MAME_BUS_BBC_1MHZBUS_RAMDISC_H
|
||||
@@ -26,10 +26,10 @@ DEFINE_DEVICE_TYPE(BBC_EXP_SLOT, bbc_exp_slot_device, "bbc_exp_slot", "BBC Maste
|
||||
// device_bbc_exp_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_bbc_exp_interface::device_bbc_exp_interface(const machine_config &mconfig, device_t &device) :
|
||||
device_interface(device, "bbcexp")
|
||||
device_bbc_exp_interface::device_bbc_exp_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_interface(device, "bbcexp")
|
||||
, m_slot(dynamic_cast<bbc_exp_slot_device*>(device.owner()))
|
||||
{
|
||||
m_slot = dynamic_cast<bbc_exp_slot_device *>(device.owner());
|
||||
}
|
||||
|
||||
|
||||
@@ -83,14 +83,6 @@ uint8_t bbc_exp_slot_device::jim_r(offs_t offset)
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
uint8_t bbc_exp_slot_device::sheila_r(offs_t offset)
|
||||
{
|
||||
if (m_card)
|
||||
return m_card->sheila_r(offset);
|
||||
else
|
||||
return 0xfe;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
@@ -136,6 +128,29 @@ void bbc_exp_slot_device::pb_w(uint8_t data)
|
||||
m_card->pb_w(data);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_cb1
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_exp_slot_device::write_cb1(int state)
|
||||
{
|
||||
if (m_card)
|
||||
m_card->write_cb1(state);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_cb2
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_exp_slot_device::write_cb2(int state)
|
||||
{
|
||||
if (m_card)
|
||||
m_card->write_cb2(state);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( bbc_exp_devices )
|
||||
//-------------------------------------------------
|
||||
|
||||
@@ -71,9 +71,6 @@ public:
|
||||
auto irq_handler() { return m_irq_handler.bind(); }
|
||||
auto nmi_handler() { return m_nmi_handler.bind(); }
|
||||
|
||||
// callbacks for mertec device (also connects to joyport)
|
||||
auto cb1_handler() { return m_cb1_handler.bind(); }
|
||||
auto cb2_handler() { return m_cb2_handler.bind(); }
|
||||
|
||||
uint8_t fred_r(offs_t offset);
|
||||
void fred_w(offs_t offset, uint8_t data);
|
||||
@@ -85,12 +82,17 @@ public:
|
||||
void irq_w(int state) { m_irq_handler(state); }
|
||||
void nmi_w(int state) { m_nmi_handler(state); }
|
||||
|
||||
// additional handlers for mertec device
|
||||
// additional callbacks/handlers for mertec device (also connects to joyport)
|
||||
auto cb1_handler() { return m_cb1_handler.bind(); }
|
||||
auto cb2_handler() { return m_cb2_handler.bind(); }
|
||||
|
||||
void cb1_w(int state) { m_cb1_handler(state); }
|
||||
void cb2_w(int state) { m_cb2_handler(state); }
|
||||
|
||||
uint8_t pb_r();
|
||||
void pb_w(uint8_t data);
|
||||
void write_cb1(int state);
|
||||
void write_cb2(int state);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
@@ -121,6 +123,8 @@ public:
|
||||
|
||||
virtual uint8_t pb_r() { return 0xff; }
|
||||
virtual void pb_w(uint8_t data) { }
|
||||
virtual void write_cb1(int state) { }
|
||||
virtual void write_cb2(int state) { }
|
||||
|
||||
protected:
|
||||
device_bbc_exp_interface(const machine_config &mconfig, device_t &device);
|
||||
|
||||
@@ -37,10 +37,10 @@ device_bbc_internal_interface::device_bbc_internal_interface(const machine_confi
|
||||
, m_maincpu(*this, ":maincpu")
|
||||
, m_mb_ram(*this, ":ram")
|
||||
, m_mb_rom(*this, ":romslot%u", 0U)
|
||||
, m_region_swr(*this, ":swr")
|
||||
, m_region_swr(*this, ":rom")
|
||||
, m_region_mos(*this, ":mos")
|
||||
, m_slot(dynamic_cast<bbc_internal_slot_device *>(device.owner()))
|
||||
{
|
||||
m_slot = dynamic_cast<bbc_internal_slot_device *>(device.owner());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ protected:
|
||||
required_memory_region m_region_swr;
|
||||
required_memory_region m_region_mos;
|
||||
|
||||
bbc_internal_slot_device *m_slot;
|
||||
bbc_internal_slot_device *const m_slot;
|
||||
};
|
||||
|
||||
// ======================> bbc_internal_slot_device
|
||||
|
||||
@@ -10,27 +10,30 @@
|
||||
#include "datagem.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
namespace {
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_DATAGEM, bbc_datagem_device, "bbc_datagem", "Gemini DataGem ROM Carrier")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_datagem_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_datagem_device::bbc_datagem_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_DATAGEM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_bank(0)
|
||||
class bbc_datagem_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
}
|
||||
public:
|
||||
bbc_datagem_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_DATAGEM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_bank(0)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint32_t get_rom_size() override { return 0x4000; }
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void decrypt_rom() override;
|
||||
|
||||
private:
|
||||
uint8_t m_bank;
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
@@ -39,7 +42,6 @@ bbc_datagem_device::bbc_datagem_device(const machine_config &mconfig, const char
|
||||
|
||||
void bbc_datagem_device::device_start()
|
||||
{
|
||||
/* register for save states */
|
||||
save_item(NAME(m_bank));
|
||||
}
|
||||
|
||||
@@ -53,7 +55,7 @@ void bbc_datagem_device::decrypt_rom()
|
||||
|
||||
for (int i = 0x0000; i < 0x6000; i++)
|
||||
{
|
||||
/* decrypt 16K and 8K ROM data lines */
|
||||
// decrypt 16K and 8K ROM data lines
|
||||
switch (rom[i] & 0x07)
|
||||
{
|
||||
case 0x01: case 0x06: rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 0, 1, 2); break;
|
||||
@@ -61,7 +63,7 @@ void bbc_datagem_device::decrypt_rom()
|
||||
case 0x03: case 0x04: rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 1, 2, 0); break;
|
||||
}
|
||||
|
||||
/* decrypt additional 8K ROM data lines */
|
||||
// decrypt additional 8K ROM data lines
|
||||
if (i & 0x4000)
|
||||
{
|
||||
rom[i] = bitswap<8>(rom[i], 3, 6, 5, 4, 7, 2, 1, 0);
|
||||
@@ -77,7 +79,7 @@ uint8_t bbc_datagem_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for DataGem */
|
||||
// switching zones for DataGem
|
||||
switch (offset & 0x3fff)
|
||||
{
|
||||
case 0x1ffe: m_bank = 1; break;
|
||||
@@ -94,3 +96,8 @@ uint8_t bbc_datagem_device::read(offs_t offset)
|
||||
return get_rom_base()[offset & 0x3fff];
|
||||
}
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_DATAGEM, device_bbc_rom_interface, bbc_datagem_device, "bbc_datagem", "Gemini DataGem ROM Carrier")
|
||||
@@ -1,11 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Gemini DataGem ROM Carrier
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_DATAGEM_H
|
||||
#define MAME_BUS_BBC_ROM_DATAGEM_H
|
||||
|
||||
@@ -14,35 +8,6 @@
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_datagem_device
|
||||
|
||||
class bbc_datagem_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_datagem_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint32_t get_rom_size() override { return 0x4000; }
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void decrypt_rom() override;
|
||||
|
||||
private:
|
||||
uint8_t m_bank;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_DATAGEM, bbc_datagem_device)
|
||||
|
||||
DECLARE_DEVICE_TYPE(BBC_DATAGEM, device_bbc_rom_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_DATAGEM_H
|
||||
@@ -13,51 +13,42 @@
|
||||
#include "dfs.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
namespace {
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_DFSE00, bbc_dfse00_device, "bbc_dfse00", "BBC Micro E00 DFS")
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_rom_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_dfse00_device::bbc_dfse00_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_DFSE00, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
class bbc_dfse00_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
}
|
||||
public:
|
||||
bbc_dfse00_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_DFSE00, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_ram(*this, "ram", 0x800, ENDIANNESS_LITTLE)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD { }
|
||||
|
||||
void bbc_dfse00_device::device_start()
|
||||
{
|
||||
}
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (offset & 0x2000)
|
||||
return m_ram[offset & 0x7ff];
|
||||
else
|
||||
return get_rom_base()[offset];
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
virtual void write(offs_t offset, uint8_t data) override
|
||||
{
|
||||
if (offset & 0x2000)
|
||||
m_ram[offset & 0x7ff] = data;
|
||||
}
|
||||
|
||||
uint8_t bbc_dfse00_device::read(offs_t offset)
|
||||
{
|
||||
if (offset < get_rom_size())
|
||||
return get_rom_base()[offset & (get_rom_size() - 1)];
|
||||
else
|
||||
return get_ram_base()[offset & (get_ram_size() - 1)];
|
||||
}
|
||||
private:
|
||||
memory_share_creator<uint8_t> m_ram;
|
||||
};
|
||||
|
||||
//-------------------------------------------------
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
} // anonymous namespace
|
||||
|
||||
void bbc_dfse00_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
get_ram_base()[offset & (get_ram_size() - 1)] = data;
|
||||
}
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_DFSE00, device_bbc_rom_interface, bbc_dfse00_device, "bbc_dfse00", "BBC Micro E00 DFS")
|
||||
@@ -1,11 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
BBC Micro E00 DFS emulation
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_DFS_H
|
||||
#define MAME_BUS_BBC_ROM_DFS_H
|
||||
|
||||
@@ -13,29 +7,7 @@
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_dfse00_device
|
||||
|
||||
class bbc_dfse00_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_dfse00_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_DFSE00, bbc_dfse00_device)
|
||||
|
||||
DECLARE_DEVICE_TYPE(BBC_DFSE00, device_bbc_rom_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_DFS_H
|
||||
@@ -10,25 +10,33 @@
|
||||
#include "nvram.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
namespace {
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_NVRAM, bbc_nvram_device, "bbc_nvram", "BBC Micro Sideways RAM (Battery Backup)")
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_nvram_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_nvram_device::bbc_nvram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_NVRAM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
class bbc_nvram_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
}
|
||||
public:
|
||||
bbc_nvram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_NVRAM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
return get_nvram_base()[offset & (get_nvram_size() - 1)];
|
||||
}
|
||||
|
||||
virtual void write(offs_t offset, uint8_t data) override
|
||||
{
|
||||
get_nvram_base()[offset & (get_nvram_size() - 1)] = data;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
@@ -39,20 +47,7 @@ void bbc_nvram_device::device_start()
|
||||
nvram_alloc(0x4000);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
} // anonymous namespace
|
||||
|
||||
uint8_t bbc_nvram_device::read(offs_t offset)
|
||||
{
|
||||
return get_nvram_base()[offset & (get_nvram_size() - 1)];
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_nvram_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
get_nvram_base()[offset & (get_nvram_size() - 1)] = data;
|
||||
}
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_NVRAM, device_bbc_rom_interface, bbc_nvram_device, "bbc_nvram", "BBC Micro Sideways RAM (Battery Backup)")
|
||||
@@ -1,11 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
BBC Micro Sideways RAM (Battery Backup) emulation
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_NVRAM_H
|
||||
#define MAME_BUS_BBC_ROM_NVRAM_H
|
||||
|
||||
@@ -13,30 +7,7 @@
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_nvram_device
|
||||
|
||||
class bbc_nvram_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_nvram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_NVRAM, bbc_nvram_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_NVRAM, device_bbc_rom_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_NVRAM_H
|
||||
+354
-262
@@ -46,86 +46,364 @@
|
||||
#include "pal.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
namespace {
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_CCIWORD, bbc_cciword_device, "bbc_cciword", "Computer Concepts 32K ROM Carrier (Inter-Word)")
|
||||
DEFINE_DEVICE_TYPE(BBC_CCIBASE, bbc_ccibase_device, "bbc_ccibase", "Computer Concepts 64K ROM Carrier (Inter-Base)")
|
||||
DEFINE_DEVICE_TYPE(BBC_CCISPELL, bbc_ccispell_device, "bbc_ccispell", "Computer Concepts 128K ROM Carrier (SpellMaster)")
|
||||
DEFINE_DEVICE_TYPE(BBC_PALQST, bbc_palqst_device, "bbc_palqst", "Watford Electronics ROM Carrier (Quest Paint)")
|
||||
DEFINE_DEVICE_TYPE(BBC_PALWAP, bbc_palwap_device, "bbc_palwap", "Watford Electronics ROM Carrier (Wapping Editor)")
|
||||
DEFINE_DEVICE_TYPE(BBC_PALTED, bbc_palted_device, "bbc_palted", "Watford Electronics ROM Carrier (TED)")
|
||||
DEFINE_DEVICE_TYPE(BBC_PALABEP, bbc_palabep_device, "bbc_palabep", "P.R.E.S. 32K ROM Carrier (ABE+)")
|
||||
DEFINE_DEVICE_TYPE(BBC_PALABE, bbc_palabe_device, "bbc_palabe", "P.R.E.S. 32K ROM Carrier (ABE)")
|
||||
DEFINE_DEVICE_TYPE(BBC_PALMO2, bbc_palmo2_device, "bbc_palmo2", "Instant Mini Office 2 ROM Carrier")
|
||||
DEFINE_DEVICE_TYPE(BBC_TRILOGY, bbc_trilogy_device, "bbc_trilogy", "Acornsoft Trilogy Emulator")
|
||||
// ======================> bbc_pal_device
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_palprom_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_pal_device::bbc_pal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_bank(0)
|
||||
class bbc_pal_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
}
|
||||
protected:
|
||||
bbc_pal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_bank(0)
|
||||
{
|
||||
}
|
||||
|
||||
bbc_cciword_device::bbc_cciword_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_CCIWORD, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
bbc_ccibase_device::bbc_ccibase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_CCIBASE, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint32_t get_rom_size() override { return 0x4000; }
|
||||
|
||||
bbc_ccispell_device::bbc_ccispell_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_CCISPELL, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
uint8_t m_bank;
|
||||
};
|
||||
|
||||
bbc_palqst_device::bbc_palqst_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALQST, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
bbc_palwap_device::bbc_palwap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALWAP, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
// ======================> bbc_cciword_device
|
||||
|
||||
bbc_palted_device::bbc_palted_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALTED, tag, owner, clock)
|
||||
class bbc_cciword_device : public bbc_pal_device
|
||||
{
|
||||
}
|
||||
public:
|
||||
bbc_cciword_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_CCIWORD, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
bbc_palabep_device::bbc_palabep_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALABEP, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Inter-Word
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x0060:
|
||||
case 0x3fc0: m_bank = 0; break;
|
||||
case 0x0040:
|
||||
case 0x3fa0:
|
||||
case 0x3fe0: m_bank = 1; break;
|
||||
}
|
||||
}
|
||||
|
||||
bbc_palabe_device::bbc_palabe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALABE, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
};
|
||||
|
||||
bbc_palmo2_device::bbc_palmo2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALMO2, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
bbc_trilogy_device::bbc_trilogy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_TRILOGY, tag, owner, clock)
|
||||
// ======================> bbc_ccibase_device
|
||||
|
||||
class bbc_ccibase_device : public bbc_pal_device
|
||||
{
|
||||
}
|
||||
public:
|
||||
bbc_ccibase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_CCIBASE, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Inter-Base
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x3f80: m_bank = 0; break;
|
||||
case 0x3fa0: m_bank = 1; break;
|
||||
case 0x3fc0: m_bank = 2; break;
|
||||
case 0x3fe0: m_bank = 3; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_ccispell_device
|
||||
|
||||
class bbc_ccispell_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_ccispell_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_CCISPELL, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for SpellMaster
|
||||
if (offset == 0x3fe0)
|
||||
{
|
||||
m_bank = 0;
|
||||
}
|
||||
else if (m_bank == 0)
|
||||
{
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x3fc0: m_bank = 1; break;
|
||||
case 0x3fa0: m_bank = 2; break;
|
||||
case 0x3f80: m_bank = 3; break;
|
||||
case 0x3f60: m_bank = 4; break;
|
||||
case 0x3f40: m_bank = 5; break;
|
||||
case 0x3f20: m_bank = 6; break;
|
||||
case 0x3f00: m_bank = 7; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_palqst_device
|
||||
|
||||
class bbc_palqst_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palqst_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALQST, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Quest Paint and ConQuest
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x0820: m_bank = 2; break;
|
||||
case 0x11e0: m_bank = 1; break;
|
||||
case 0x12c0: m_bank = 3; break;
|
||||
case 0x1340: m_bank = 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset & 0x2000)
|
||||
{
|
||||
return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_rom_base()[offset & 0x1fff];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_palwap_device
|
||||
|
||||
class bbc_palwap_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palwap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALWAP, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Wapping Editor
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x1f00: m_bank = 0; break;
|
||||
case 0x1f20: m_bank = 1; break;
|
||||
case 0x1f40: m_bank = 2; break;
|
||||
case 0x1f60: m_bank = 3; break;
|
||||
case 0x1f80: m_bank = 4; break;
|
||||
case 0x1fa0: m_bank = 5; break;
|
||||
case 0x1fc0: m_bank = 6; break;
|
||||
case 0x1fe0: m_bank = 7; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset & 0x2000)
|
||||
{
|
||||
return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_rom_base()[offset & 0x1fff];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_palted_device
|
||||
|
||||
class bbc_palted_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palted_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALTED, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for TED
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x1f80: m_bank = 0; break;
|
||||
case 0x1fa0: m_bank = 1; break;
|
||||
case 0x1fc0: m_bank = 2; break;
|
||||
case 0x1fe0: m_bank = 3; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset & 0x2000)
|
||||
{
|
||||
return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_rom_base()[offset & 0x1fff];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_palabep_device
|
||||
|
||||
class bbc_palabep_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palabep_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALABEP, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Advanced BASIC Editor Plus
|
||||
switch (offset & 0x3ffc)
|
||||
{
|
||||
case 0x3ff8: m_bank = 0; break;
|
||||
case 0x3ffc: m_bank = 1; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_palabe_device
|
||||
|
||||
class bbc_palabe_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palabe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALABE, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Advanced BASIC Editor
|
||||
switch (offset & 0x3ffc)
|
||||
{
|
||||
case 0x3ff8: m_bank = 1; break;
|
||||
case 0x3ffc: m_bank = 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_palmo2_device
|
||||
|
||||
class bbc_palmo2_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palmo2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_PALMO2, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Instant Mini Office 2
|
||||
switch (offset & 0x3ff0)
|
||||
{
|
||||
case 0x2000: m_bank = offset & 0x0f; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 13)];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_trilogy_device
|
||||
|
||||
class bbc_trilogy_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_trilogy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: bbc_pal_device(mconfig, BBC_TRILOGY, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
// switching zones for Acornsoft Trilogy Emulator
|
||||
switch (offset & 0x3ff8)
|
||||
{
|
||||
case 0x3ff8: m_bank = offset & 0x03; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
@@ -137,202 +415,16 @@ void bbc_pal_device::device_start()
|
||||
save_item(NAME(m_bank));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
} // anonymous namespace
|
||||
|
||||
uint8_t bbc_cciword_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Inter-Word */
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x0060:
|
||||
case 0x3fc0: m_bank = 0; break;
|
||||
case 0x0040:
|
||||
case 0x3fa0:
|
||||
case 0x3fe0: m_bank = 1; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
|
||||
uint8_t bbc_ccibase_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Inter-Base */
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x3f80: m_bank = 0; break;
|
||||
case 0x3fa0: m_bank = 1; break;
|
||||
case 0x3fc0: m_bank = 2; break;
|
||||
case 0x3fe0: m_bank = 3; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
|
||||
uint8_t bbc_ccispell_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for SpellMaster */
|
||||
if (offset == 0x3fe0)
|
||||
{
|
||||
m_bank = 0;
|
||||
}
|
||||
else if (m_bank == 0)
|
||||
{
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x3fc0: m_bank = 1; break;
|
||||
case 0x3fa0: m_bank = 2; break;
|
||||
case 0x3f80: m_bank = 3; break;
|
||||
case 0x3f60: m_bank = 4; break;
|
||||
case 0x3f40: m_bank = 5; break;
|
||||
case 0x3f20: m_bank = 6; break;
|
||||
case 0x3f00: m_bank = 7; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
|
||||
uint8_t bbc_palqst_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Quest Paint and ConQuest */
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x0820: m_bank = 2; break;
|
||||
case 0x11e0: m_bank = 1; break;
|
||||
case 0x12c0: m_bank = 3; break;
|
||||
case 0x1340: m_bank = 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset & 0x2000)
|
||||
{
|
||||
return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_rom_base()[offset & 0x1fff];
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t bbc_palwap_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Wapping Editor */
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x1f00: m_bank = 0; break;
|
||||
case 0x1f20: m_bank = 1; break;
|
||||
case 0x1f40: m_bank = 2; break;
|
||||
case 0x1f60: m_bank = 3; break;
|
||||
case 0x1f80: m_bank = 4; break;
|
||||
case 0x1fa0: m_bank = 5; break;
|
||||
case 0x1fc0: m_bank = 6; break;
|
||||
case 0x1fe0: m_bank = 7; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset & 0x2000)
|
||||
{
|
||||
return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_rom_base()[offset & 0x1fff];
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t bbc_palted_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for TED */
|
||||
switch (offset & 0x3fe0)
|
||||
{
|
||||
case 0x1f80: m_bank = 0; break;
|
||||
case 0x1fa0: m_bank = 1; break;
|
||||
case 0x1fc0: m_bank = 2; break;
|
||||
case 0x1fe0: m_bank = 3; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset & 0x2000)
|
||||
{
|
||||
return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_rom_base()[offset & 0x1fff];
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t bbc_palabep_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Advanced BASIC Editor Plus */
|
||||
switch (offset & 0x3ffc)
|
||||
{
|
||||
case 0x3ff8: m_bank = 0; break;
|
||||
case 0x3ffc: m_bank = 1; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
|
||||
uint8_t bbc_palabe_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Advanced BASIC Editor */
|
||||
switch (offset & 0x3ffc)
|
||||
{
|
||||
case 0x3ff8: m_bank = 1; break;
|
||||
case 0x3ffc: m_bank = 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
|
||||
uint8_t bbc_palmo2_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Instant Mini Office 2 */
|
||||
switch (offset & 0x3ff0)
|
||||
{
|
||||
case 0x2000: m_bank = offset & 0x0f; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 13)];
|
||||
}
|
||||
|
||||
uint8_t bbc_trilogy_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for Acornsoft Trilogy Emulator */
|
||||
switch (offset & 0x3ff8)
|
||||
{
|
||||
case 0x3ff8: m_bank = offset & 0x03; break;
|
||||
}
|
||||
}
|
||||
|
||||
return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
|
||||
}
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_CCIWORD, device_bbc_rom_interface, bbc_cciword_device, "bbc_cciword", "Computer Concepts 32K ROM Carrier (Inter-Word)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_CCIBASE, device_bbc_rom_interface, bbc_ccibase_device, "bbc_ccibase", "Computer Concepts 64K ROM Carrier (Inter-Base)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_CCISPELL, device_bbc_rom_interface, bbc_ccispell_device, "bbc_ccispell", "Computer Concepts 128K ROM Carrier (SpellMaster)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_PALQST, device_bbc_rom_interface, bbc_palqst_device, "bbc_palqst", "Watford Electronics ROM Carrier (Quest Paint)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_PALWAP, device_bbc_rom_interface, bbc_palwap_device, "bbc_palwap", "Watford Electronics ROM Carrier (Wapping Editor)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_PALTED, device_bbc_rom_interface, bbc_palted_device, "bbc_palted", "Watford Electronics ROM Carrier (TED)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_PALABEP, device_bbc_rom_interface, bbc_palabep_device, "bbc_palabep", "P.R.E.S. 32K ROM Carrier (ABE+)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_PALABE, device_bbc_rom_interface, bbc_palabe_device, "bbc_palabe", "P.R.E.S. 32K ROM Carrier (ABE)")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_PALMO2, device_bbc_rom_interface, bbc_palmo2_device, "bbc_palmo2", "Instant Mini Office 2 ROM Carrier")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_TRILOGY, device_bbc_rom_interface, bbc_trilogy_device, "bbc_trilogy", "Acornsoft Trilogy Emulator")
|
||||
+10
-169
@@ -1,11 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
BBC Micro PALPROM carrier boards
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_PAL_H
|
||||
#define MAME_BUS_BBC_ROM_PAL_H
|
||||
|
||||
@@ -14,168 +8,15 @@
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_pal_device
|
||||
|
||||
class bbc_pal_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
protected:
|
||||
// construction/destruction
|
||||
bbc_pal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint32_t get_rom_size() override { return 0x4000; }
|
||||
|
||||
uint8_t m_bank;
|
||||
};
|
||||
|
||||
// ======================> bbc_cciword_device
|
||||
|
||||
class bbc_cciword_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_cciword_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_ccibase_device
|
||||
|
||||
class bbc_ccibase_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_ccibase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_ccispell_device
|
||||
|
||||
class bbc_ccispell_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_ccispell_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_palqst_device
|
||||
|
||||
class bbc_palqst_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palqst_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_palwap_device
|
||||
|
||||
class bbc_palwap_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
bbc_palwap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_palted_device
|
||||
|
||||
class bbc_palted_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_palted_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_palabep_device
|
||||
|
||||
class bbc_palabep_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_palabep_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_palabe_device
|
||||
|
||||
class bbc_palabe_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_palabe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_palmo2_device
|
||||
|
||||
class bbc_palmo2_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_palmo2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// ======================> bbc_trilogy_device
|
||||
|
||||
class bbc_trilogy_device : public bbc_pal_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_trilogy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_CCIWORD, bbc_cciword_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_CCIBASE, bbc_ccibase_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_CCISPELL, bbc_ccispell_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALQST, bbc_palqst_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALWAP, bbc_palwap_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALTED, bbc_palted_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALABEP, bbc_palabep_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALABE, bbc_palabe_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALMO2, bbc_palmo2_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_TRILOGY, bbc_trilogy_device)
|
||||
|
||||
DECLARE_DEVICE_TYPE(BBC_CCIWORD, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_CCIBASE, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_CCISPELL, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALQST, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALWAP, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALTED, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALABEP, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALABE, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_PALMO2, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_TRILOGY, device_bbc_rom_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_PAL_H
|
||||
@@ -10,25 +10,33 @@
|
||||
#include "ram.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
namespace {
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_RAM, bbc_ram_device, "bbc_ram", "BBC Micro Sideways RAM")
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_ram_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_ram_device::bbc_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_RAM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
class bbc_ram_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
}
|
||||
public:
|
||||
bbc_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_RAM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
return get_ram_base()[offset & (get_ram_size() - 1)];
|
||||
}
|
||||
|
||||
virtual void write(offs_t offset, uint8_t data) override
|
||||
{
|
||||
get_ram_base()[offset & (get_ram_size() - 1)] = data;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
@@ -39,20 +47,7 @@ void bbc_ram_device::device_start()
|
||||
ram_alloc(0x8000);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
} // anonymous namespace
|
||||
|
||||
uint8_t bbc_ram_device::read(offs_t offset)
|
||||
{
|
||||
return get_ram_base()[offset & (get_ram_size() - 1)];
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_ram_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
get_ram_base()[offset & (get_ram_size() - 1)] = data;
|
||||
}
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_RAM, device_bbc_rom_interface, bbc_ram_device, "bbc_ram", "BBC Micro Sideways RAM")
|
||||
@@ -1,11 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
BBC Micro Sideways RAM emulation
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_RAM_H
|
||||
#define MAME_BUS_BBC_ROM_RAM_H
|
||||
|
||||
@@ -13,30 +7,7 @@
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_ram_device
|
||||
|
||||
class bbc_ram_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_RAM, bbc_ram_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_RAM, device_bbc_rom_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_RAM_H
|
||||
@@ -10,39 +10,29 @@
|
||||
#include "rom.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
namespace {
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_ROM, bbc_rom_device, "bbc_rom", "BBC Micro Sideways ROM")
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_rom_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_rom_device::bbc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_ROM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
class bbc_rom_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
}
|
||||
public:
|
||||
bbc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_ROM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD { }
|
||||
|
||||
void bbc_rom_device::device_start()
|
||||
{
|
||||
}
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override
|
||||
{
|
||||
return get_rom_base()[offset & (get_rom_size() - 1)];
|
||||
}
|
||||
};
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
} // anonymous namespace
|
||||
|
||||
uint8_t bbc_rom_device::read(offs_t offset)
|
||||
{
|
||||
return get_rom_base()[offset & (get_rom_size() - 1)];
|
||||
}
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_ROM, device_bbc_rom_interface, bbc_rom_device, "bbc_rom", "BBC Micro Sideways ROM")
|
||||
@@ -1,11 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
BBC Micro Sideways ROM emulation
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_ROM_H
|
||||
#define MAME_BUS_BBC_ROM_ROM_H
|
||||
|
||||
@@ -13,29 +7,7 @@
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_rom_device
|
||||
|
||||
class bbc_rom_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_ROM, bbc_rom_device)
|
||||
|
||||
DECLARE_DEVICE_TYPE(BBC_ROM, device_bbc_rom_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_ROM_H
|
||||
@@ -13,13 +13,62 @@
|
||||
#include "emu.h"
|
||||
#include "rtc.h"
|
||||
|
||||
#include "machine/ds1215.h"
|
||||
#include "machine/mc146818.h"
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_STLRTC, bbc_stlrtc_device, "bbc_stlrtc", "Solidisk Real Time Clock")
|
||||
DEFINE_DEVICE_TYPE(BBC_PMSRTC, bbc_pmsrtc_device, "bbc_pmsrtc", "PMS Genie Real Time Clock")
|
||||
namespace {
|
||||
|
||||
// ======================> bbc_stlrtc_device
|
||||
|
||||
class bbc_stlrtc_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
bbc_stlrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_STLRTC, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_rtc(*this, "rtc")
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
virtual void device_start() override ATTR_COLD { }
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
|
||||
private:
|
||||
required_device<mc146818_device> m_rtc;
|
||||
};
|
||||
|
||||
|
||||
// ======================> bbc_pmsrtc_device
|
||||
|
||||
class bbc_pmsrtc_device : public device_t, public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
bbc_pmsrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_PMSRTC, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_rtc(*this, "rtc")
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
virtual void device_start() override ATTR_COLD { }
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
|
||||
private:
|
||||
required_device<ds1216e_device> m_rtc;
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
@@ -31,45 +80,13 @@ void bbc_stlrtc_device::device_add_mconfig(machine_config &config)
|
||||
MC146818(config, m_rtc, 32.768_kHz_XTAL); // TODO: verify clock
|
||||
}
|
||||
|
||||
|
||||
void bbc_pmsrtc_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
/* Dallas DS1216 SmartWatch ROM */
|
||||
// Dallas DS1216 SmartWatch ROM
|
||||
DS1216E(config, m_rtc);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_stlrtc_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_stlrtc_device::bbc_stlrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_STLRTC, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_rtc(*this, "rtc")
|
||||
{
|
||||
}
|
||||
|
||||
bbc_pmsrtc_device::bbc_pmsrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_PMSRTC, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_rtc(*this, "rtc")
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_stlrtc_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void bbc_pmsrtc_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
@@ -103,6 +120,7 @@ uint8_t bbc_stlrtc_device::read(offs_t offset)
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
uint8_t bbc_pmsrtc_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data = get_rom_base()[offset & 0x1fff];
|
||||
@@ -114,3 +132,9 @@ uint8_t bbc_pmsrtc_device::read(offs_t offset)
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_STLRTC, device_bbc_rom_interface, bbc_stlrtc_device, "bbc_stlrtc", "Solidisk Real Time Clock")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_PMSRTC, device_bbc_rom_interface, bbc_pmsrtc_device, "bbc_pmsrtc", "PMS Genie Real Time Clock")
|
||||
@@ -1,72 +1,14 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Solidisk Real Time Clock emulation
|
||||
|
||||
PMS Genie Watch (RTC for the BBC)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_RTC_H
|
||||
#define MAME_BUS_BBC_ROM_RTC_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "slot.h"
|
||||
#include "machine/mc146818.h"
|
||||
#include "machine/ds1215.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_stlrtc_device
|
||||
|
||||
class bbc_stlrtc_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_stlrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
|
||||
private:
|
||||
required_device<mc146818_device> m_rtc;
|
||||
};
|
||||
|
||||
// ======================> bbc_pmsrtc_device
|
||||
|
||||
class bbc_pmsrtc_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_pmsrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
|
||||
private:
|
||||
required_device<ds1216e_device> m_rtc;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_STLRTC, bbc_stlrtc_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_PMSRTC, bbc_pmsrtc_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_STLRTC, device_bbc_rom_interface)
|
||||
DECLARE_DEVICE_TYPE(BBC_PMSRTC, device_bbc_rom_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_RTC_H
|
||||
@@ -123,20 +123,24 @@ std::pair<std::error_condition, std::string> bbc_romslot_device::call_load()
|
||||
if (size % 0x2000)
|
||||
return std::make_pair(image_error::INVALIDLENGTH, "Invalid ROM size (must be a multiple of 8K)");
|
||||
|
||||
m_cart->rom_alloc(size, tag());
|
||||
uint8_t *base;
|
||||
const char *pcb_name = get_feature("slot");
|
||||
if (pcb_name && !strcmp(pcb_name, "ram"))
|
||||
{
|
||||
base = m_cart->get_ram_base();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cart->rom_alloc(size, tag());
|
||||
base = m_cart->get_rom_base();
|
||||
}
|
||||
|
||||
if (!loaded_through_softlist())
|
||||
fread(m_cart->get_rom_base(), size);
|
||||
fread(base, size);
|
||||
else
|
||||
memcpy(m_cart->get_rom_base(), get_software_region("rom"), size);
|
||||
memcpy(base, get_software_region("rom"), size);
|
||||
|
||||
m_cart->decrypt_rom();
|
||||
|
||||
if (get_software_region("ram"))
|
||||
m_cart->ram_alloc(get_software_region_length("ram"));
|
||||
|
||||
if (get_software_region("nvram"))
|
||||
m_cart->nvram_alloc(get_software_region_length("nvram"));
|
||||
}
|
||||
|
||||
return std::make_pair(std::error_condition(), std::string());
|
||||
@@ -216,10 +220,23 @@ void bbc_romslot_device::write(offs_t offset, uint8_t data)
|
||||
#include "rtc.h"
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// present - rom/ram selected
|
||||
//-------------------------------------------------
|
||||
|
||||
bool bbc_romslot_device::present()
|
||||
{
|
||||
if (m_cart && ((m_cart->device().type() == BBC_RAM) || m_cart->device().type() == BBC_NVRAM))
|
||||
return true;
|
||||
else
|
||||
return is_loaded() || loaded_through_softlist();
|
||||
}
|
||||
|
||||
|
||||
void bbc_rom_devices(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("ram", BBC_RAM);
|
||||
device.option_add_internal("rom", BBC_ROM);
|
||||
device.option_add_internal("ram", BBC_RAM);
|
||||
device.option_add_internal("nvram", BBC_NVRAM);
|
||||
device.option_add_internal("cciword", BBC_CCIWORD);
|
||||
device.option_add_internal("ccibase", BBC_CCIBASE);
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
|
||||
void set_fixed_ram(bool fixed) { this->set_fixed(fixed); this->set_user_loadable(!fixed); }
|
||||
|
||||
virtual bool present() { return is_loaded() || loaded_through_softlist() || !user_loadable(); }
|
||||
virtual bool present();
|
||||
|
||||
uint32_t get_rom_size();
|
||||
uint32_t get_slot_size() const { return m_slot_size; }
|
||||
@@ -61,7 +61,7 @@ protected:
|
||||
uint32_t m_slot_size;
|
||||
|
||||
private:
|
||||
device_bbc_rom_interface* m_cart;
|
||||
device_bbc_rom_interface *m_cart;
|
||||
};
|
||||
|
||||
// ======================> bbc_romslot16_device
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
BBC Micro Voice Synthesis Processor slot emulation
|
||||
|
||||
This socket is intended to have a TMS5220 fitted as part of the Acorn
|
||||
Speech System upgrade, but Cheetah provided a cheaper speech solution
|
||||
using a SP0256 that fitted a board into this socket.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_VSP_SLOT, bbc_vsp_slot_device, "bbc_vsp_slot", "BBC Micro Voice Synthesis Processor slot")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE BBC_VSP CARD INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_bbc_vsp_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_bbc_vsp_interface::device_bbc_vsp_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_interface(device, "bbcvsp")
|
||||
, m_slot(dynamic_cast<bbc_vsp_slot_device *>(device.owner()))
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_vsp_slot_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_vsp_slot_device::bbc_vsp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_VSP_SLOT, tag, owner, clock)
|
||||
, device_single_card_slot_interface<device_bbc_vsp_interface>(mconfig, *this)
|
||||
, device_mixer_interface(mconfig, *this)
|
||||
, m_vsm(*this, finder_base::DUMMY_TAG)
|
||||
, m_card(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_vsp_slot_device::device_start()
|
||||
{
|
||||
m_card = get_card_device();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
|
||||
uint8_t bbc_vsp_slot_device::read()
|
||||
{
|
||||
if (m_card)
|
||||
return m_card->read();
|
||||
else
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
int bbc_vsp_slot_device::readyq_r()
|
||||
{
|
||||
if (m_card)
|
||||
return m_card->readyq_r();
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
int bbc_vsp_slot_device::intq_r()
|
||||
{
|
||||
if (m_card)
|
||||
return m_card->intq_r();
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_vsp_slot_device::write(uint8_t data)
|
||||
{
|
||||
if (m_card)
|
||||
m_card->write(data);
|
||||
}
|
||||
|
||||
void bbc_vsp_slot_device::combined_rsq_wsq_w(uint8_t data)
|
||||
{
|
||||
if (m_card)
|
||||
m_card->combined_rsq_wsq_w(data);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( bbc_vsp_devices )
|
||||
//-------------------------------------------------
|
||||
|
||||
|
||||
// slot devices
|
||||
#include "speech.h"
|
||||
#include "sweetalker.h"
|
||||
|
||||
|
||||
void bbc_vsp_devices(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("speech", BBC_SPEECH);
|
||||
device.option_add("sweetalker", BBC_SWEETALKER);
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
BBC Micro Voice Synthesis Processor slot emulation
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_VSP_SLOT_H
|
||||
#define MAME_BUS_BBC_VSP_SLOT_H
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_vsp_slot_device
|
||||
|
||||
class device_bbc_vsp_interface;
|
||||
|
||||
class bbc_vsp_slot_device : public device_t, public device_single_card_slot_interface<device_bbc_vsp_interface>, public device_mixer_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
template <typename T>
|
||||
bbc_vsp_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slot_options, const char *default_option)
|
||||
: bbc_vsp_slot_device(mconfig, tag, owner)
|
||||
{
|
||||
option_reset();
|
||||
slot_options(*this);
|
||||
set_default_option(default_option);
|
||||
set_fixed(false);
|
||||
}
|
||||
|
||||
bbc_vsp_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0);
|
||||
|
||||
template <class Object> void set_vsm_region(Object &&tag) { m_vsm.set_tag(std::forward<Object>(tag)); }
|
||||
|
||||
virtual void combined_rsq_wsq_w(uint8_t data);
|
||||
virtual uint8_t read();
|
||||
virtual void write(uint8_t data);
|
||||
|
||||
int readyq_r();
|
||||
int intq_r();
|
||||
|
||||
memory_region &vsm() const { return *m_vsm; }
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
required_memory_region m_vsm;
|
||||
|
||||
device_bbc_vsp_interface *m_card;
|
||||
};
|
||||
|
||||
|
||||
// ======================> device_bbc_vsp_interface
|
||||
|
||||
class device_bbc_vsp_interface : public device_interface
|
||||
{
|
||||
public:
|
||||
virtual void combined_rsq_wsq_w(uint8_t data) { };
|
||||
virtual uint8_t read() { return 0x00; }
|
||||
virtual void write(uint8_t data) { }
|
||||
|
||||
virtual int readyq_r() { return 1; }
|
||||
virtual int intq_r() { return 1; }
|
||||
|
||||
protected:
|
||||
device_bbc_vsp_interface(const machine_config &mconfig, device_t &device);
|
||||
|
||||
bbc_vsp_slot_device *const m_slot;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_VSP_SLOT, bbc_vsp_slot_device)
|
||||
|
||||
void bbc_vsp_devices(device_slot_interface &device);
|
||||
|
||||
|
||||
#endif // MAME_BUS_BBC_VSP_SLOT_H
|
||||
@@ -0,0 +1,132 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
Acorn Speech System
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "speech.h"
|
||||
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
#include "machine/tms6100.h"
|
||||
#include "sound/tms5220.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class bbc_speech_device : public device_t, public device_bbc_vsp_interface
|
||||
{
|
||||
public:
|
||||
bbc_speech_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_SPEECH, tag, owner, clock)
|
||||
, device_bbc_vsp_interface(mconfig, *this)
|
||||
, m_vsp(*this, "vsp")
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void combined_rsq_wsq_w(uint8_t data) override { m_vsp->combined_rsq_wsq_w(data); }
|
||||
virtual uint8_t read() override { return m_vsp->status_r(); }
|
||||
virtual void write(uint8_t data) override { m_vsp->data_w(data); }
|
||||
|
||||
virtual int readyq_r() override { return m_vsp->readyq_r(); }
|
||||
virtual int intq_r() override { return m_vsp->intq_r(); }
|
||||
|
||||
private:
|
||||
required_device<tms5220_device> m_vsp;
|
||||
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(load_phrom);
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START( speech )
|
||||
ROM_REGION(0x40000, "vsm", ROMREGION_ERASE00)
|
||||
ROM_END
|
||||
|
||||
const tiny_rom_entry *bbc_speech_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( speech );
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_speech_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
TMS5220(config, m_vsp, 640000);
|
||||
m_vsp->add_route(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.5);
|
||||
|
||||
TMS6100(config, "vsm", 0);
|
||||
m_vsp->m0_cb().set("vsm", FUNC(tms6100_device::m0_w));
|
||||
m_vsp->m1_cb().set("vsm", FUNC(tms6100_device::m1_w));
|
||||
m_vsp->addr_cb().set("vsm", FUNC(tms6100_device::add_w));
|
||||
m_vsp->data_cb().set("vsm", FUNC(tms6100_device::data_line_r));
|
||||
m_vsp->romclk_cb().set("vsm", FUNC(tms6100_device::clk_w));
|
||||
|
||||
GENERIC_SOCKET(config, "phrom", generic_plain_slot, "bbc_vsm", "bin,rom").set_device_load(FUNC(bbc_speech_device::load_phrom));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_speech_device::device_start()
|
||||
{
|
||||
// copy vsm region from machine to TMS6100 device region
|
||||
memcpy(memregion("vsm")->base(), m_slot->vsm().base(), 0x40000);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER(bbc_speech_device::load_phrom)
|
||||
{
|
||||
offs_t size;
|
||||
if (!image.loaded_through_softlist())
|
||||
size = image.length();
|
||||
else
|
||||
size = image.get_software_region_length("rom");
|
||||
|
||||
if (size < 0x1000 || size > 0x4000 || (size & (size - 1)) != 0)
|
||||
return std::make_pair(image_error::INVALIDLENGTH, "Invalid PHROM size");
|
||||
|
||||
uint8_t *vsm = memregion("vsm")->base();
|
||||
if (image.loaded_through_softlist())
|
||||
{
|
||||
int bank = strtol(image.get_feature("bank"), nullptr, 0);
|
||||
if (bank < 0 || bank > 15)
|
||||
bank = 0;
|
||||
|
||||
memcpy(vsm + (bank * 0x4000), image.get_software_region("rom"), size);
|
||||
}
|
||||
else
|
||||
{
|
||||
image.fread(vsm, size);
|
||||
}
|
||||
|
||||
return std::make_pair(std::error_condition(), std::string());
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_SPEECH, device_bbc_vsp_interface, bbc_speech_device, "bbc_speech", "Acorn Speech System")
|
||||
@@ -0,0 +1,13 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
#ifndef MAME_BUS_BBC_VSP_SPEECH_H
|
||||
#define MAME_BUS_BBC_VSP_SPEECH_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
DECLARE_DEVICE_TYPE(BBC_SPEECH, device_bbc_vsp_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_VSP_SPEECH_H
|
||||
@@ -0,0 +1,71 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
Cheetah Sweet Talker
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "sweetalker.h"
|
||||
|
||||
#include "sound/sp0256.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class bbc_sweetalker_device : public device_t, public device_bbc_vsp_interface
|
||||
{
|
||||
public:
|
||||
bbc_sweetalker_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_SWEETALKER, tag, owner, clock)
|
||||
, device_bbc_vsp_interface(mconfig, *this)
|
||||
, m_nsp(*this, "sp0256")
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual void device_start() override ATTR_COLD { }
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void write(uint8_t data) override { m_nsp->ald_w(data & 0x3f); }
|
||||
|
||||
virtual int intq_r() override { return m_nsp->sby_r(); }
|
||||
|
||||
private:
|
||||
required_device<sp0256_device> m_nsp;
|
||||
};
|
||||
|
||||
|
||||
///-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START( sweetalker )
|
||||
ROM_REGION(0x10000, "sp0256", 0)
|
||||
ROM_LOAD("sp0256a-al2.bin", 0x1000, 0x0800, CRC(b504ac15) SHA1(e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc))
|
||||
ROM_END
|
||||
|
||||
const tiny_rom_entry *bbc_sweetalker_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( sweetalker );
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_sweetalker_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
SP0256(config, m_nsp, 3.2768_MHz_XTAL);
|
||||
m_nsp->add_route(ALL_OUTPUTS, DEVICE_SELF_OWNER, 1.00);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(BBC_SWEETALKER, device_bbc_vsp_interface, bbc_sweetalker_device, "bbc_sweetalker", "Cheetah Sweet Talker (BBC)")
|
||||
@@ -0,0 +1,13 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
#ifndef MAME_BUS_BBC_VSP_SWEETALKER_H
|
||||
#define MAME_BUS_BBC_VSP_SWEETALKER_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
DECLARE_DEVICE_TYPE(BBC_SWEETALKER, device_bbc_vsp_interface)
|
||||
|
||||
#endif // MAME_BUS_BBC_VSP_SWEETALKER_H
|
||||
@@ -132,6 +132,7 @@ device_centronics_peripheral_interface::~device_centronics_peripheral_interface(
|
||||
#include "chessmec.h"
|
||||
#include "smartboard.h"
|
||||
#include "nlq401.h"
|
||||
#include "mz1p16.h"
|
||||
|
||||
void centronics_devices(device_slot_interface &device)
|
||||
{
|
||||
@@ -153,4 +154,5 @@ void centronics_devices(device_slot_interface &device)
|
||||
device.option_add("chessmec", CENTRONICS_CHESSMEC);
|
||||
device.option_add("smartboard", CENTRONICS_SMARTBOARD);
|
||||
device.option_add("nlq401", NLQ401);
|
||||
device.option_add("mz1p16", MZ1P16);
|
||||
}
|
||||
@@ -0,0 +1,226 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/**********************************************************************
|
||||
|
||||
Sharp MZ-1P16 4-color plot printer (skeleton)
|
||||
|
||||
This printer was sold for use with the Sharp MZ-800.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "mz1p16.h"
|
||||
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITION
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
DEFINE_DEVICE_TYPE(MZ1P16, mz1p16_device, "mz1p16", "Sharp MZ-1P16 Plotter Printer")
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// mz1p16_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
mz1p16_device::mz1p16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, MZ1P16, tag, owner, clock)
|
||||
, device_centronics_peripheral_interface(mconfig, *this)
|
||||
, m_mcu(*this, "mcu")
|
||||
, m_buffer(*this, "buffer")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data0 - RD1 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data0(int state)
|
||||
{
|
||||
m_buffer->write_bit0(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data1 - RD2 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data1(int state)
|
||||
{
|
||||
m_buffer->write_bit1(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data2 - RD3 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data2(int state)
|
||||
{
|
||||
m_buffer->write_bit2(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data3 - RD4 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data3(int state)
|
||||
{
|
||||
m_buffer->write_bit3(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data4 - RD5 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data4(int state)
|
||||
{
|
||||
m_buffer->write_bit4(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data5 - RD6 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data5(int state)
|
||||
{
|
||||
m_buffer->write_bit5(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data6 - RD7 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data6(int state)
|
||||
{
|
||||
m_buffer->write_bit6(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_data7 - RD8 line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_data7(int state)
|
||||
{
|
||||
m_buffer->write_bit7(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_strobe - RDP line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_strobe(int state)
|
||||
{
|
||||
m_mcu->set_input_line(MCS48_INPUT_IRQ, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_init - IRT line handler
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::input_init(int state)
|
||||
{
|
||||
m_mcu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// xy_step_w - set X and Y stepper motor outputs
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::xy_step_w(u8 data)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// control_w - set miscellaneous control outputs
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::control_w(u8 data)
|
||||
{
|
||||
// P14 = /RDA (ready to receive)
|
||||
output_busy(BIT(data, 4));
|
||||
|
||||
// P17 = /STA (status check)
|
||||
output_busy(BIT(data, 7));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - device-specific config
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
mcs48_cpu_device &mcu(I8050(config, m_mcu, 6_MHz_XTAL));
|
||||
mcu.bus_out_cb().set(FUNC(mz1p16_device::xy_step_w));
|
||||
mcu.p1_out_cb().set(FUNC(mz1p16_device::control_w));
|
||||
mcu.p2_in_cb().set(m_buffer, FUNC(input_buffer_device::read));
|
||||
mcu.t0_in_cb().set_ioport("KEYSW").bit(0);
|
||||
mcu.t1_in_cb().set_ioport("KEYSW").bit(1);
|
||||
|
||||
INPUT_BUFFER(config, m_buffer);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INPUT PORTS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// reset_sw_w - handle local reset button
|
||||
//-------------------------------------------------
|
||||
|
||||
void mz1p16_device::reset_sw_w(int state)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START(mz1p16)
|
||||
PORT_START("KEYSW")
|
||||
PORT_BIT(1, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Pen Change")
|
||||
PORT_BIT(2, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Paper Feed")
|
||||
PORT_BIT(4, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Reset") PORT_WRITE_LINE_MEMBER(FUNC(mz1p16_device::reset_sw_w))
|
||||
INPUT_PORTS_END
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_input_ports - device-specific ports
|
||||
//-------------------------------------------------
|
||||
|
||||
ioport_constructor mz1p16_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(mz1p16);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// ROM DEFINITION
|
||||
//**************************************************************************
|
||||
|
||||
ROM_START(mz1p16)
|
||||
ROM_REGION(0x1000, "mcu", 0)
|
||||
ROM_LOAD("m5m8050h-059p.ic1", 0x0000, 0x1000, CRC(beb12a84) SHA1(2e059c2f7d653294c77fe8e1a37436b4c028e122))
|
||||
ROM_END
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
const tiny_rom_entry *mz1p16_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(mz1p16);
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
|
||||
#ifndef MAME_BUS_CENTRONICS_MZ1P16_H
|
||||
#define MAME_BUS_CENTRONICS_MZ1P16_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ctronics.h"
|
||||
#include "machine/buffer.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> mz1p16_device
|
||||
|
||||
class mz1p16_device : public device_t, public device_centronics_peripheral_interface
|
||||
{
|
||||
public:
|
||||
// device type constructor
|
||||
mz1p16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
static constexpr feature_type unemulated_features() { return feature::PRINTER; }
|
||||
|
||||
void reset_sw_w(int state);
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
// device_centronics_peripheral_interface implementation
|
||||
virtual void input_data0(int state) override;
|
||||
virtual void input_data1(int state) override;
|
||||
virtual void input_data2(int state) override;
|
||||
virtual void input_data3(int state) override;
|
||||
virtual void input_data4(int state) override;
|
||||
virtual void input_data5(int state) override;
|
||||
virtual void input_data6(int state) override;
|
||||
virtual void input_data7(int state) override;
|
||||
virtual void input_strobe(int state) override;
|
||||
virtual void input_init(int state) override;
|
||||
virtual bool supports_pin35_5v() override { return false; }
|
||||
|
||||
private:
|
||||
void xy_step_w(u8 data);
|
||||
void control_w(u8 data);
|
||||
|
||||
required_device<cpu_device> m_mcu;
|
||||
required_device<input_buffer_device> m_buffer;
|
||||
};
|
||||
|
||||
// device type declaration
|
||||
DECLARE_DEVICE_TYPE(MZ1P16, mz1p16_device)
|
||||
|
||||
#endif // MAME_BUS_CENTRONICS_MZ1P16_H
|
||||
@@ -888,7 +888,7 @@ static INPUT_PORTS_START( gp19 )
|
||||
PORT_DIPSETTING( 0x01, "CR")
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( None ) )
|
||||
PORT_DIPSETTING( 0x03, "CR,EOT")
|
||||
PORT_DIPNAME( 0x04, 0x01, "Shift Key") PORT_DIPLOCATION("SW1:3")
|
||||
PORT_DIPNAME( 0x04, 0x00, "Shift Key") PORT_DIPLOCATION("SW1:3")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
|
||||
PORT_DIPSETTING( 0x04, "Shift key inverts CAPS LOCK")
|
||||
PORT_DIPNAME( 0x08, 0x00, "Terminal Transmission Rate") PORT_DIPLOCATION("SW1:4")
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Cards for the H8 Benton Harbor Bus
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cards.h"
|
||||
|
||||
#include "cpu8080.h"
|
||||
#include "front_panel.h"
|
||||
#include "h8bus.h"
|
||||
#include "h_8_1.h"
|
||||
#include "h_8_5.h"
|
||||
#include "wh_8_64.h"
|
||||
|
||||
// P1 is reserved for the Front Panel
|
||||
void h8_p1_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("fp", H8BUS_FRONT_PANEL);
|
||||
}
|
||||
|
||||
// P2 is reserved for the CPU board.
|
||||
void h8_p2_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("cpu8080", H8BUS_CPU_8080);
|
||||
}
|
||||
|
||||
// P10 is reserved for the HA-8-8 Extended Configuration Option card, which is
|
||||
// required to run CP/M with the 8080 CPU board.
|
||||
// TODO - add the HA-8-8
|
||||
void h8_p10_cards(device_slot_interface &device)
|
||||
{
|
||||
}
|
||||
|
||||
void h8_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("h_8_1", H8BUS_H_8_1);
|
||||
device.option_add("h_8_5", H8BUS_H_8_5);
|
||||
device.option_add("wh_8_64", H8BUS_WH_8_64);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Cards for the Heath H8 Benton Harbor Bus
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_HEATHZENITH_H8_CARDS_H
|
||||
#define MAME_BUS_HEATHZENITH_H8_CARDS_H
|
||||
|
||||
#pragma once
|
||||
|
||||
void h8_p1_cards(device_slot_interface &device) ATTR_COLD;
|
||||
void h8_p2_cards(device_slot_interface &device) ATTR_COLD;
|
||||
void h8_p10_cards(device_slot_interface &device) ATTR_COLD;
|
||||
void h8_cards(device_slot_interface &device) ATTR_COLD;
|
||||
|
||||
#endif // MAME_BUS_HEATHZENITH_H8_CARDS_H
|
||||
@@ -0,0 +1,350 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Heathkit 8080A CPU card
|
||||
|
||||
Original 8080A 2.048MHz CPU board from Heath Company.
|
||||
|
||||
|
||||
|
||||
Onboard Jumpers
|
||||
|
||||
Label Default Emulated Description (if jumper is closed)
|
||||
-------------------------------------------------------------------------
|
||||
B1-B2 Open Yes Allow /INT1 (INT 10) from the BH Bus (pin 8).
|
||||
|
||||
C1-C2 Open Yes Allow /INT2 (Int 20) from the BH Bus (pin 9).
|
||||
|
||||
E1-E2 Close No Allow inverted signal from J jumper to HOLD/HLDA on BH Bus (pin 25)
|
||||
|
||||
F1-F2 Close No Allow /HOLD from the BH Bus (pin 27) to CPU Hold line.
|
||||
|
||||
H1-H3 Open No Tie Ready-in from IC212 Generator to CPU Wait line
|
||||
H2-H3 Close No Tie Ready-in from IC212 Generator to CPU Ready line
|
||||
|
||||
J1-J2 Close No CPU HLDA out through flip-flop, use /Q output to E jumper
|
||||
J2-J3 Open No CPU HLDA out through flip-flop, use Q output to E jumper
|
||||
|
||||
K1-K2 Close No Affects Data-in/out buffers enabled signals based on /MEMR & /IOR signals
|
||||
K1-K3 Open No Affects Data-in/out buffers enabled signals based on /MEMR & /IOR signals
|
||||
|
||||
L1-L2 Close No Tie CPU /INTA to interrupt buffer
|
||||
L2-L3 Open No Tie CPU /INTA to +12V
|
||||
|
||||
P1-P2 Open No A10 to pin 19 of IC204 ROM
|
||||
P2-P3 Close No R jumper to pin 19 of IC204 ROM
|
||||
|
||||
R1-R2 Close No +12V selected
|
||||
R2-R3 Open No S jumper selection selected
|
||||
|
||||
S1-S2 Open No +5V selected
|
||||
S2-S3 Close No GND selected
|
||||
|
||||
T1-T2 Close No -5V to pin 21 of IC204 ROM
|
||||
T2-T3 Open No +5V to pin 21 of IC204 ROM
|
||||
|
||||
X1-X2 Open No Allow /ROM_Disable from BH bus (pin 46) to disable ROM
|
||||
|
||||
Z1-Z2 Close No Tie /A10 to ROM decoder select line
|
||||
Z2-Z3 Open No Tie +5V to ROM decoder select line
|
||||
|
||||
RDYIN Close No Allow RDYIN from BH Bus (pin 20) to IC212 Generator
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu8080.h"
|
||||
|
||||
#include "bus/heathzenith/intr_cntrl/intr_cntrl.h"
|
||||
#include "cpu/i8085/i8085.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class h_8_cpu_8080_device : public device_t, public device_h8bus_card_interface, public device_p201_p2_card_interface
|
||||
{
|
||||
public:
|
||||
|
||||
h_8_cpu_8080_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
virtual void int1_w(int state) override;
|
||||
virtual void int2_w(int state) override;
|
||||
virtual void int3_w(int state) override;
|
||||
virtual void int4_w(int state) override;
|
||||
virtual void int5_w(int state) override;
|
||||
virtual void int6_w(int state) override;
|
||||
virtual void int7_w(int state) override;
|
||||
|
||||
virtual void p201_reset_w(int state) override;
|
||||
virtual void p201_int1_w(int state) override;
|
||||
virtual void p201_int2_w(int state) override;
|
||||
|
||||
protected:
|
||||
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
void handle_int1();
|
||||
void handle_int2();
|
||||
|
||||
private:
|
||||
void h8_status_callback(u8 data);
|
||||
void h8_inte_callback(int state);
|
||||
|
||||
void mem_map(address_map &map) ATTR_COLD;
|
||||
void io_map(address_map &map) ATTR_COLD;
|
||||
|
||||
void bus_mem_w(offs_t offset, u8 data) { m_mem.write_byte(offset, data); }
|
||||
u8 bus_mem_r(offs_t offset) { return m_mem.read_byte(offset); }
|
||||
void bus_io_w(offs_t offset, u8 data) { m_io.write_byte(offset, data); }
|
||||
u8 bus_io_r(offs_t offset) { return m_io.read_byte(offset); }
|
||||
|
||||
required_device<i8080_cpu_device> m_maincpu;
|
||||
required_device<heath_intr_socket> m_intr_socket;
|
||||
required_ioport m_config;
|
||||
|
||||
memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_mem;
|
||||
memory_access<8, 0, 0, ENDIANNESS_LITTLE>::specific m_io;
|
||||
|
||||
bool m_m1_state;
|
||||
bool m_allow_bus_int1;
|
||||
bool m_allow_bus_int2;
|
||||
bool m_p201_int1;
|
||||
bool m_p201_int2;
|
||||
bool m_bus_int1;
|
||||
bool m_bus_int2;
|
||||
};
|
||||
|
||||
h_8_cpu_8080_device::h_8_cpu_8080_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, H8BUS_CPU_8080, tag, owner, 0)
|
||||
, device_h8bus_card_interface(mconfig, *this)
|
||||
, device_p201_p2_card_interface(*this, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_intr_socket(*this, "intr_socket")
|
||||
, m_config(*this, "CONFIG")
|
||||
{
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::h8_inte_callback(int state)
|
||||
{
|
||||
m_p201_inte(state);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::h8_status_callback(u8 data)
|
||||
{
|
||||
int state = (data & i8080_cpu_device::STATUS_M1) ? 1 : 0;
|
||||
|
||||
if (state != m_m1_state)
|
||||
{
|
||||
set_slot_m1(state);
|
||||
|
||||
m_m1_state = state;
|
||||
}
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::int1_w(int state)
|
||||
{
|
||||
if (m_allow_bus_int1)
|
||||
{
|
||||
m_bus_int1 = bool(state);
|
||||
|
||||
handle_int1();
|
||||
}
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::int2_w(int state)
|
||||
{
|
||||
if (m_allow_bus_int2)
|
||||
{
|
||||
m_bus_int2 = bool(state);
|
||||
|
||||
handle_int2();
|
||||
}
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::int3_w(int state)
|
||||
{
|
||||
m_intr_socket->set_irq_level(3, state);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::int4_w(int state)
|
||||
{
|
||||
m_intr_socket->set_irq_level(4, state);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::int5_w(int state)
|
||||
{
|
||||
m_intr_socket->set_irq_level(5, state);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::int6_w(int state)
|
||||
{
|
||||
m_intr_socket->set_irq_level(6, state);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::int7_w(int state)
|
||||
{
|
||||
m_intr_socket->set_irq_level(7, state);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::p201_reset_w(int state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
m_maincpu->reset();
|
||||
}
|
||||
|
||||
set_slot_reset(state);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::p201_int1_w(int state)
|
||||
{
|
||||
m_p201_int1 = bool(state);
|
||||
|
||||
handle_int1();
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::p201_int2_w(int state)
|
||||
{
|
||||
m_p201_int2 = bool(state);
|
||||
|
||||
handle_int2();
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::handle_int1()
|
||||
{
|
||||
m_intr_socket->set_irq_level(1, (m_p201_int1 || m_bus_int1) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::handle_int2()
|
||||
{
|
||||
m_intr_socket->set_irq_level(2, (m_p201_int2 || m_bus_int2) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
static void intr_ctrl_options(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("original", HEATH_INTR_CNTRL);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::mem_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
|
||||
// default mem access to h8bus
|
||||
map(0x0000, 0xffff).rw(FUNC(h_8_cpu_8080_device::bus_mem_r), FUNC(h_8_cpu_8080_device::bus_mem_w));
|
||||
|
||||
// main rom
|
||||
map(0x0000, 0x0fff).rom().region("maincpu", 0).unmapw();
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::io_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0xff);
|
||||
|
||||
// default io access to h8bus
|
||||
map(0x0000, 0xff).rw(FUNC(h_8_cpu_8080_device::bus_io_r), FUNC(h_8_cpu_8080_device::bus_io_w));
|
||||
}
|
||||
|
||||
|
||||
// ROM definition
|
||||
ROM_START( h8 )
|
||||
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASEFF )
|
||||
|
||||
// H17 fdc bios - needed by bios2&3 this is on a separate card, keeping it documented here until that
|
||||
// card is implemented.
|
||||
//ROM_LOAD( "2716_444-19_h17.rom", 0x1800, 0x0800, CRC(26e80ae3) SHA1(0c0ee95d7cb1a760f924769e10c0db1678f2435c))
|
||||
|
||||
ROM_SYSTEM_BIOS(0, "bios0", "Standard")
|
||||
ROMX_LOAD( "2708_444-13_pam8.rom", 0x0000, 0x0400, CRC(e0745513) SHA1(0e170077b6086be4e5cd10c17e012c0647688c39), ROM_BIOS(0) )
|
||||
|
||||
ROM_SYSTEM_BIOS(1, "bios1", "Alternate")
|
||||
ROMX_LOAD( "2708_444-13_pam8go.rom", 0x0000, 0x0400, CRC(9dbad129) SHA1(72421102b881706877f50537625fc2ab0b507752), ROM_BIOS(1) )
|
||||
|
||||
ROM_SYSTEM_BIOS(2, "bios2", "Disk OS")
|
||||
ROMX_LOAD( "2716_444-13_pam8at.rom", 0x0000, 0x0800, CRC(fd95ddc1) SHA1(eb1f272439877239f745521139402f654e5403af), ROM_BIOS(2) )
|
||||
|
||||
ROM_SYSTEM_BIOS(3, "bios3", "Disk OS Alt")
|
||||
ROMX_LOAD( "2732_444-70_xcon8.rom", 0x0000, 0x1000, CRC(b04368f4) SHA1(965244277a3a8039a987e4c3593b52196e39b7e7), ROM_BIOS(3) )
|
||||
|
||||
// this one runs off into the weeds, because it is for the HA-8-6 Z-80 replacement CPU card, keeping it documented here, until
|
||||
// that card is implemented.
|
||||
// ROM_SYSTEM_BIOS(4, "bios4", "not working")
|
||||
// ROMX_LOAD( "2732_444-140_pam37.rom", 0x0000, 0x1000, CRC(53a540db) SHA1(90082d02ffb1d27e8172b11fff465bd24343486e), ROM_BIOS(4) )
|
||||
ROM_END
|
||||
|
||||
static INPUT_PORTS_START( cpu_8080_jumpers )
|
||||
|
||||
PORT_START("CONFIG")
|
||||
PORT_CONFNAME(0x01, 0x00, "Allow INT1 signal on BH Bus - Jumper B1-B2")
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ))
|
||||
PORT_CONFSETTING( 0x01, DEF_STR( Yes ))
|
||||
PORT_CONFNAME(0x02, 0x00, "Allow INT2 signal on BH Bus - Jumper C1-C2")
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ))
|
||||
PORT_CONFSETTING( 0x02, DEF_STR( Yes ))
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
ioport_constructor h_8_cpu_8080_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(cpu_8080_jumpers);
|
||||
}
|
||||
|
||||
const tiny_rom_entry *h_8_cpu_8080_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(h8);
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_m1_state));
|
||||
save_item(NAME(m_p201_int1));
|
||||
save_item(NAME(m_p201_int2));
|
||||
save_item(NAME(m_bus_int1));
|
||||
save_item(NAME(m_bus_int2));
|
||||
|
||||
h8bus().space(AS_PROGRAM).specific(m_mem);
|
||||
h8bus().space(AS_IO).specific(m_io);
|
||||
|
||||
h8bus().set_clock(m_maincpu->clock());
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::device_reset()
|
||||
{
|
||||
m_m1_state = false;
|
||||
m_p201_int1 = false;
|
||||
m_p201_int2 = false;
|
||||
m_bus_int1 = false;
|
||||
m_bus_int2 = false;
|
||||
|
||||
ioport_value const config(m_config->read());
|
||||
|
||||
m_allow_bus_int1 = bool(BIT(config, 0));
|
||||
m_allow_bus_int2 = bool(BIT(config, 1));
|
||||
}
|
||||
|
||||
void h_8_cpu_8080_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
constexpr XTAL H8_CLOCK = XTAL(18'432'000) / 9; // 2.048 MHz
|
||||
|
||||
I8080(config, m_maincpu, H8_CLOCK);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &h_8_cpu_8080_device::mem_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &h_8_cpu_8080_device::io_map);
|
||||
m_maincpu->out_status_func().set(FUNC(h_8_cpu_8080_device::h8_status_callback));
|
||||
m_maincpu->out_inte_func().set(FUNC(h_8_cpu_8080_device::h8_inte_callback));
|
||||
m_maincpu->set_irq_acknowledge_callback(m_intr_socket, FUNC(heath_intr_socket::irq_callback));
|
||||
|
||||
HEATH_INTR_SOCKET(config, m_intr_socket, intr_ctrl_options, nullptr);
|
||||
m_intr_socket->irq_line_cb().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
m_intr_socket->set_default_option("original");
|
||||
m_intr_socket->set_fixed(true);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(H8BUS_CPU_8080, device_h8bus_card_interface, h_8_cpu_8080_device, "h8_cpu_8080", "Heath 8080A CPU board");
|
||||
@@ -0,0 +1,12 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
#ifndef MAME_BUS_HEATHZENITH_H8_CPU8080_H
|
||||
#define MAME_BUS_HEATHZENITH_H8_CPU8080_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "h8bus.h"
|
||||
|
||||
DECLARE_DEVICE_TYPE(H8BUS_CPU_8080, device_h8bus_card_interface)
|
||||
|
||||
#endif // MAME_BUS_HEATHZENITH_H8_CPU8080_H
|
||||
@@ -0,0 +1,351 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Heathkit H8 Front Panel card
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "front_panel.h"
|
||||
|
||||
#include "machine/timer.h"
|
||||
#include "sound/beep.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include "h8_fp.lh"
|
||||
|
||||
#define LOG_PORT_W (1U << 1)
|
||||
#define LOG_PORT_R (1U << 2)
|
||||
#define LOG_SS (1U << 3)
|
||||
|
||||
//#define VERBOSE (LOG_SS)
|
||||
|
||||
#include "logmacro.h"
|
||||
|
||||
#define LOGPORTW(...) LOGMASKED(LOG_PORT_W, __VA_ARGS__)
|
||||
#define LOGPORTR(...) LOGMASKED(LOG_PORT_R, __VA_ARGS__)
|
||||
#define LOGSS(...) LOGMASKED(LOG_SS, __VA_ARGS__)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define FUNCNAME __func__
|
||||
#else
|
||||
#define FUNCNAME __PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
|
||||
class front_panel_device : public device_t, public device_h8bus_card_interface, public device_p201_p1_card_interface
|
||||
{
|
||||
public:
|
||||
front_panel_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
virtual void m1_w(int state) override;
|
||||
virtual void p201_inte_w(int state) override;
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(button_0);
|
||||
|
||||
protected:
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
|
||||
u8 portf0_r();
|
||||
void portf0_w(u8 data);
|
||||
void portf1_w(u8 data);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(h8_irq_pulse);
|
||||
|
||||
bool m_installed;
|
||||
|
||||
u8 m_digit;
|
||||
u8 m_segment;
|
||||
u8 m_int_en;
|
||||
bool m_ic108a;
|
||||
bool m_ic108b;
|
||||
bool m_allow_int1;
|
||||
bool m_allow_int2;
|
||||
|
||||
required_device<beep_device> m_beep;
|
||||
required_ioport_array<2> m_io_keyboard;
|
||||
output_finder<16> m_digits;
|
||||
output_finder<> m_mon_led;
|
||||
output_finder<> m_pwr_led;
|
||||
output_finder<> m_ion_led;
|
||||
output_finder<> m_run_led;
|
||||
};
|
||||
|
||||
|
||||
front_panel_device::front_panel_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, H8BUS_FRONT_PANEL, tag, owner, 0)
|
||||
, device_h8bus_card_interface(mconfig, *this)
|
||||
, device_p201_p1_card_interface(*this, tag)
|
||||
, m_beep(*this, "beeper")
|
||||
, m_io_keyboard(*this, "X%u", 0U)
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
, m_mon_led(*this, "mon_led")
|
||||
, m_pwr_led(*this, "pwr_led")
|
||||
, m_ion_led(*this, "ion_led")
|
||||
, m_run_led(*this, "run_led")
|
||||
{
|
||||
}
|
||||
|
||||
void front_panel_device::m1_w(int state)
|
||||
{
|
||||
// operate the RUN LED
|
||||
m_run_led = !state;
|
||||
|
||||
// For Single Instruction(SI) mode, there are 2 D flipflops, ic108a and ic108b. Both are held in
|
||||
// set mode while not in SI mode. The data for ic108a is /INTE and ic108a Q is connected to data on
|
||||
// ic108b. Both use /M1 for the clock. When the system is in SI mode, an int20 will trigger after
|
||||
// after 2 M1 cycles, to pause the running program.
|
||||
if (m_allow_int2)
|
||||
{
|
||||
LOGSS("%s: m_int_en: %d, state: %d\n", FUNCNAME, m_int_en, state);
|
||||
|
||||
if (state)
|
||||
{
|
||||
m_ic108b = !m_ic108a;
|
||||
m_ic108a = !m_int_en;
|
||||
|
||||
if (m_ic108b)
|
||||
{
|
||||
m_p201_int2(ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void front_panel_device::p201_inte_w(int state)
|
||||
{
|
||||
// Operate the ION LED
|
||||
m_ion_led = !state;
|
||||
|
||||
m_int_en = bool(state);
|
||||
}
|
||||
|
||||
u8 front_panel_device::portf0_r()
|
||||
{
|
||||
u8 data = 0xff;
|
||||
|
||||
// reads the keyboard
|
||||
u8 keyin = m_io_keyboard[0]->read() ^ 0xff;
|
||||
|
||||
if (keyin)
|
||||
{
|
||||
for (int i = 1; i < 8; i++)
|
||||
{
|
||||
if (BIT(keyin, i))
|
||||
{
|
||||
data &= ~(i << 1);
|
||||
}
|
||||
}
|
||||
|
||||
data &= 0xfe;
|
||||
}
|
||||
|
||||
keyin = m_io_keyboard[1]->read() ^ 0xff;
|
||||
|
||||
if (keyin)
|
||||
{
|
||||
for (int i = 1; i < 8; i++)
|
||||
{
|
||||
if (BIT(keyin, i))
|
||||
{
|
||||
data &= ~(i << 5);
|
||||
}
|
||||
}
|
||||
|
||||
data &= 0xef;
|
||||
}
|
||||
|
||||
LOGPORTR("%s: val: 0x%02x\n", FUNCNAME, data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void front_panel_device::portf0_w(u8 data)
|
||||
{
|
||||
// bit description
|
||||
// ----------------------
|
||||
// d0-d3 digit selected
|
||||
// d4 inhibit int20
|
||||
// d5 mon led
|
||||
// d6 allow int10
|
||||
// d7 beeper on
|
||||
|
||||
LOGPORTW("%s: val: 0x%02x\n", FUNCNAME, data);
|
||||
|
||||
// writes to this port always turn off int10
|
||||
m_p201_int1(CLEAR_LINE);
|
||||
|
||||
m_digit = data & 0xf;
|
||||
if (m_digit)
|
||||
{
|
||||
m_digits[m_digit] = m_segment;
|
||||
}
|
||||
|
||||
m_mon_led = !BIT(data, 5);
|
||||
m_beep->set_state(!BIT(data, 7));
|
||||
|
||||
m_allow_int1 = BIT(data, 6);
|
||||
|
||||
// Setup Single Instruction interrupt
|
||||
bool old_allow_int2 = m_allow_int2;
|
||||
|
||||
m_allow_int2 = bool(!BIT(data, 4));
|
||||
|
||||
if (old_allow_int2 != m_allow_int2)
|
||||
{
|
||||
LOGSS("%s: value changed: oldval: %d, allow_int2: %d\n", FUNCNAME, old_allow_int2, m_allow_int2);
|
||||
|
||||
if (!m_allow_int2)
|
||||
{
|
||||
m_ic108a = true;
|
||||
m_ic108b = false;
|
||||
m_p201_int2(CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void front_panel_device::portf1_w(u8 data)
|
||||
{
|
||||
// bit segment
|
||||
// --------------
|
||||
// d7 dot
|
||||
// d6 f
|
||||
// d5 e
|
||||
// d4 d
|
||||
// d3 c
|
||||
// d2 b
|
||||
// d1 a
|
||||
// d0 g
|
||||
|
||||
LOGPORTW("%s: val: 0x%02x\n", FUNCNAME, data);
|
||||
|
||||
m_segment = bitswap<8>(data, 7, 0, 6, 5, 4, 3, 2, 1) ^ 0xff;
|
||||
|
||||
if (m_digit)
|
||||
{
|
||||
m_digits[m_digit] = m_segment;
|
||||
}
|
||||
}
|
||||
|
||||
// Input ports
|
||||
static INPUT_PORTS_START( h8 )
|
||||
PORT_START("X0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(front_panel_device::button_0), 0)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("1 SP") PORT_CODE(KEYCODE_1) PORT_CHAR('1')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("2 AF") PORT_CODE(KEYCODE_2) PORT_CHAR('2')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("3 BC") PORT_CODE(KEYCODE_3) PORT_CHAR('3')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("4 DE GO") PORT_CODE(KEYCODE_4) PORT_CHAR('4')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("5 HL IN") PORT_CODE(KEYCODE_5) PORT_CHAR('5')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("6 PC OUT") PORT_CODE(KEYCODE_6) PORT_CHAR('6')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("7 SI") PORT_CODE(KEYCODE_7) PORT_CHAR('7')
|
||||
|
||||
PORT_START("X1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("8 LOAD") PORT_CODE(KEYCODE_8) PORT_CHAR('8')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("9 DUMP") PORT_CODE(KEYCODE_9) PORT_CHAR('9')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("+") PORT_CODE(KEYCODE_UP) PORT_CHAR('^')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_DOWN) PORT_CHAR('V')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("* CANCEL") PORT_CODE(KEYCODE_ESC) PORT_CHAR('Q')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("/ ALTER RST") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("# MEM RTM") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(". REG") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_CHANGED_MEMBER(front_panel_device::button_0)
|
||||
{
|
||||
if (newval)
|
||||
{
|
||||
u8 data = m_io_keyboard[1]->read() ^ 0xff;
|
||||
|
||||
if (BIT(data, 5))
|
||||
{
|
||||
m_p201_reset(ASSERT_LINE);
|
||||
}
|
||||
else if (BIT(data, 6))
|
||||
{
|
||||
m_p201_int1(ASSERT_LINE);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_p201_reset(CLEAR_LINE);
|
||||
m_p201_int1(CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void front_panel_device::device_start()
|
||||
{
|
||||
m_digits.resolve();
|
||||
m_mon_led.resolve();
|
||||
m_pwr_led.resolve();
|
||||
m_ion_led.resolve();
|
||||
m_run_led.resolve();
|
||||
|
||||
m_installed = false;
|
||||
m_digit = 0;
|
||||
m_segment = 0;
|
||||
|
||||
save_item(NAME(m_installed));
|
||||
save_item(NAME(m_digit));
|
||||
save_item(NAME(m_segment));
|
||||
save_item(NAME(m_ic108a));
|
||||
save_item(NAME(m_ic108b));
|
||||
save_item(NAME(m_int_en));
|
||||
save_item(NAME(m_allow_int1));
|
||||
save_item(NAME(m_allow_int2));
|
||||
}
|
||||
|
||||
void front_panel_device::device_reset()
|
||||
{
|
||||
m_allow_int1 = true;
|
||||
m_allow_int2 = false;
|
||||
m_int_en = false;
|
||||
m_ic108a = true;
|
||||
m_ic108b = false;
|
||||
|
||||
// Note: 0 means on and 1 means off
|
||||
m_pwr_led = 0;
|
||||
m_run_led = 1;
|
||||
m_ion_led = 1;
|
||||
m_mon_led = 1;
|
||||
|
||||
if (!m_installed)
|
||||
{
|
||||
h8bus().space(AS_IO).install_readwrite_handler(0xf0, 0xf0,
|
||||
read8smo_delegate(*this, FUNC(front_panel_device::portf0_r)),
|
||||
write8smo_delegate(*this, FUNC(front_panel_device::portf0_w)));
|
||||
|
||||
h8bus().space(AS_IO).install_write_handler(0xf1, 0xf1,
|
||||
write8smo_delegate(*this, FUNC(front_panel_device::portf1_w)));
|
||||
|
||||
m_installed = true;
|
||||
}
|
||||
}
|
||||
|
||||
void front_panel_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
config.set_default_layout(layout_h8_fp);
|
||||
|
||||
SPEAKER(config, "mono").front_center();
|
||||
BEEP(config, m_beep, 1000).add_route(ALL_OUTPUTS, "mono", 1.00);
|
||||
|
||||
TIMER(config, "h8_timer").configure_periodic(FUNC(front_panel_device::h8_irq_pulse), attotime::from_msec(2));
|
||||
}
|
||||
|
||||
ioport_constructor front_panel_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(h8);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(front_panel_device::h8_irq_pulse)
|
||||
{
|
||||
if (m_allow_int1)
|
||||
{
|
||||
m_p201_int1(ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(H8BUS_FRONT_PANEL, device_h8bus_card_interface, front_panel_device, "h8_fp", "Heath H-8 Front Panel");
|
||||
@@ -0,0 +1,12 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
#ifndef MAME_BUS_HEATHZENITH_H8_FRONT_PANEL_H
|
||||
#define MAME_BUS_HEATHZENITH_H8_FRONT_PANEL_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "h8bus.h"
|
||||
|
||||
DECLARE_DEVICE_TYPE(H8BUS_FRONT_PANEL, device_h8bus_card_interface)
|
||||
|
||||
#endif // MAME_BUS_HEATHZENITH_H8_FRONT_PANEL_H
|
||||
@@ -0,0 +1,338 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
h8bus.cpp - Heath/Zenith H-8 bus
|
||||
|
||||
Also known as the "Benton Harbor Bus" BHBus based on city where the
|
||||
corporate headquarters were located.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "h8bus.h"
|
||||
|
||||
#define LOG_INIT (1U << 1) // Shows register setup
|
||||
|
||||
//#define VERBOSE (LOG_INIT)
|
||||
|
||||
#include "logmacro.h"
|
||||
|
||||
#define LOGINIT(...) LOGMASKED(LOG_INIT, __VA_ARGS__)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define FUNCNAME __func__
|
||||
#else
|
||||
#define FUNCNAME __PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
|
||||
device_h8bus_card_interface::device_h8bus_card_interface(const machine_config &mconfig, device_t &device) :
|
||||
device_interface(device, "h8bus"),
|
||||
m_h8bus(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
device_h8bus_card_interface::~device_h8bus_card_interface()
|
||||
{
|
||||
}
|
||||
|
||||
void device_h8bus_card_interface::interface_pre_start()
|
||||
{
|
||||
if (!m_h8bus)
|
||||
{
|
||||
throw device_missing_dependencies();
|
||||
}
|
||||
}
|
||||
|
||||
device_p201_p1_card_interface::device_p201_p1_card_interface(device_t &device, const char *tag)
|
||||
: device_interface(device, tag)
|
||||
, m_p201_reset(*this)
|
||||
, m_p201_int1(*this)
|
||||
, m_p201_int2(*this)
|
||||
{
|
||||
}
|
||||
|
||||
device_p201_p1_card_interface::~device_p201_p1_card_interface()
|
||||
{
|
||||
}
|
||||
|
||||
device_p201_p2_card_interface::device_p201_p2_card_interface(device_t &device, const char *tag)
|
||||
: device_interface(device, tag)
|
||||
, m_p201_inte(*this)
|
||||
{
|
||||
}
|
||||
|
||||
device_p201_p2_card_interface::~device_p201_p2_card_interface()
|
||||
{
|
||||
}
|
||||
|
||||
DEFINE_DEVICE_TYPE(H8BUS_SLOT, h8bus_slot_device, "h8bus_slot", "Heath H-8 slot")
|
||||
|
||||
h8bus_slot_device::h8bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: h8bus_slot_device(mconfig, H8BUS_SLOT, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
h8bus_slot_device::h8bus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_single_card_slot_interface(mconfig, *this)
|
||||
, m_h8bus(*this, finder_base::DUMMY_TAG)
|
||||
, m_h8bus_slottag(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void h8bus_slot_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void h8bus_slot_device::device_resolve_objects()
|
||||
{
|
||||
device_h8bus_card_interface *dev = get_card_device();
|
||||
|
||||
if (dev)
|
||||
{
|
||||
dev->set_h8bus_tag(m_h8bus.target(), m_h8bus_slottag);
|
||||
unsigned index = m_h8bus->add_h8bus_card(*dev);
|
||||
dev->set_index(index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(H8BUS, h8bus_device, "h8bus", "Heathkit H8 bus (Benton Harbor Bus)")
|
||||
|
||||
h8bus_device::h8bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: h8bus_device(mconfig, H8BUS, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
h8bus_device::h8bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_memory_interface(mconfig, *this)
|
||||
, m_mem_config("mem", ENDIANNESS_LITTLE, 8, 16, 0, address_map_constructor(FUNC(h8bus_device::mem_map), this))
|
||||
, m_io_config("io", ENDIANNESS_LITTLE, 8, 8, 0, address_map_constructor(FUNC(h8bus_device::io_map), this))
|
||||
{
|
||||
}
|
||||
|
||||
h8bus_device::~h8bus_device()
|
||||
{
|
||||
}
|
||||
|
||||
void h8bus_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void h8bus_device::device_reset()
|
||||
{
|
||||
m_int1_slot_states = 0;
|
||||
m_int2_slot_states = 0;
|
||||
m_int3_slot_states = 0;
|
||||
m_int4_slot_states = 0;
|
||||
m_int5_slot_states = 0;
|
||||
m_int6_slot_states = 0;
|
||||
m_int7_slot_states = 0;
|
||||
m_reset_slot_states = 0;
|
||||
m_hold_slot_states = 0;
|
||||
m_m1_slot_states = 0;
|
||||
}
|
||||
|
||||
void h8bus_device::mem_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
}
|
||||
|
||||
void h8bus_device::io_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0xff);
|
||||
}
|
||||
|
||||
device_memory_interface::space_config_vector h8bus_device::memory_space_config() const
|
||||
{
|
||||
return space_config_vector { std::make_pair(AS_PROGRAM, &m_mem_config), std::make_pair(AS_IO, &m_io_config) };
|
||||
}
|
||||
|
||||
u8 h8bus_device::add_h8bus_card(device_h8bus_card_interface &card)
|
||||
{
|
||||
m_device_list.emplace_back(card);
|
||||
int index = m_device_list.size() - 1;
|
||||
|
||||
if (index > 31)
|
||||
{
|
||||
// ensure index is in range.
|
||||
index = 31;
|
||||
}
|
||||
|
||||
LOGINIT("%s: added card to index: %d, tag: %s\n", FUNCNAME, index, card.m_h8bus_slottag);
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
bool h8bus_device::update_line_states(u32 &states, unsigned index, int state)
|
||||
{
|
||||
bool const changed(bool(state) != bool(BIT(states, index)));
|
||||
|
||||
if (changed)
|
||||
{
|
||||
int old_state = states ? 1 : 0;
|
||||
|
||||
if (state)
|
||||
{
|
||||
states |= (1 << index);
|
||||
}
|
||||
else
|
||||
{
|
||||
states &= ~(1 << index);
|
||||
}
|
||||
|
||||
int new_state = states ? 1 : 0;
|
||||
|
||||
return (old_state != new_state);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void h8bus_device::set_int1_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_int1_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.int1_w(m_int1_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_int2_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_int2_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.int2_w(m_int2_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_int3_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_int3_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.int3_w(m_int3_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_int4_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_int4_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.int4_w(m_int4_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_int5_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_int5_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.int5_w(m_int5_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_int6_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_int6_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.int6_w(m_int6_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_int7_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_int7_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.int7_w(m_int7_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_reset_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_reset_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.reset_w(m_reset_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_hold_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_hold_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.hold_w(m_hold_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_m1_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_m1_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.m1_w(m_m1_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void h8bus_device::set_disable_rom_line(unsigned index, int state)
|
||||
{
|
||||
bool const changed = update_line_states(m_disable_rom_slot_states, index, state);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
for (device_h8bus_card_interface &entry : m_device_list)
|
||||
{
|
||||
entry.rom_disable_w(m_disable_rom_slot_states ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,391 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/*********************************************************************
|
||||
|
||||
Heathkit H8 expansion slot
|
||||
|
||||
Also referred to as Benton Harbor Bus.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
Slot Cards
|
||||
--------------------------------------------------------
|
||||
P1 Reserved for control/front panel board
|
||||
P2 Reserved for CPU board
|
||||
P3 - P9 Available
|
||||
P10 Reserved for Expansion connector/HA-8-8 Extended Configuration Option
|
||||
|
||||
|
||||
pin P1 - P10
|
||||
--------------------------------
|
||||
49 ------- +8V
|
||||
48 ------- +8V
|
||||
47 ------- +18V
|
||||
46 ------- /ROM DISABLE
|
||||
45 ------- /A15
|
||||
44 ------- /A14
|
||||
43 ------- /A13
|
||||
42 ------- /A12
|
||||
41 ------- /A11
|
||||
40 ------- /A10
|
||||
39 ------- /A9
|
||||
38 ------- /A8
|
||||
37 ------- /A7
|
||||
36 ------- /A6
|
||||
35 ------- /A5
|
||||
34 ------- /A4
|
||||
33 ------- /A3
|
||||
32 ------- /A2
|
||||
31 ------- /A1
|
||||
30 ------- /A0
|
||||
29 ------- /RESET
|
||||
28 ------- MEMR
|
||||
27 ------- /HOLD *
|
||||
26 ------- I/O R
|
||||
25 ------- HLDA *
|
||||
|
||||
24 ------- GND *
|
||||
23 ------- MEMW
|
||||
22 ------- O2
|
||||
21 ------- I/O W
|
||||
20 ------- RDYIN *
|
||||
19 ------- M1
|
||||
18 ------- GND *
|
||||
17 ------- /D7
|
||||
16 ------- /D6
|
||||
15 ------- /D5
|
||||
14 ------- /D4
|
||||
13 ------- /D3
|
||||
12 ------- /D2
|
||||
11 ------- /D1
|
||||
10 ------- /D0
|
||||
9 ------- /INT2 *
|
||||
8 ------- /INT1 *
|
||||
7 ------- /INT7
|
||||
6 ------- /INT6
|
||||
5 ------- /INT5
|
||||
4 ------- /INT4
|
||||
3 ------- /INT3
|
||||
2 ------- -18V
|
||||
1 ------- GND
|
||||
0 ------- GND
|
||||
|
||||
Notes:
|
||||
* - Heath Company reserves the right to change these pin designations.
|
||||
|
||||
|
||||
Signal Pin Direction Description
|
||||
(wrt CPU board)
|
||||
--------------------------------------------------------
|
||||
|
||||
A0-A15 30-45 Output Address bus
|
||||
|
||||
D0-D7 10-17 Input/Output Data bus
|
||||
|
||||
HOLD 27 Input Hold - request CPU hold state
|
||||
|
||||
HLDA 25 Output Hold Acknowledge - CPU has gone into hold status, and Address bus and
|
||||
Data bus are in high impedance state
|
||||
|
||||
I/O R 26 Output I/O Read
|
||||
|
||||
I/O W 21 Output I/O Write
|
||||
|
||||
INT1-INT2 8-9 Input Interrupt 1-2 (10, 20)
|
||||
|
||||
INT3-INT7 3-7 Input Interrupt 3-7 (30, 40, 50, 60, 70)
|
||||
|
||||
M1 19 Output Machine cycle 1 - CPU fetch cycle of the first byte of an instruction
|
||||
|
||||
MEMR 28 Output Memory Read
|
||||
|
||||
MEMW 23 Output Memory Write
|
||||
|
||||
ϕ2 22 Output Phase 2 clock
|
||||
|
||||
RDYIN 20 Input Ready Input - Asynchronous wait request to the clock generator, generates
|
||||
the synchronous READY signal.
|
||||
|
||||
RESET 29 Input Reset - holds CPU in reset, also resets the INTE and HLDA flip-flops
|
||||
|
||||
ROM DISABLE 46 Input ROM Disable - Disable the on-board ROM
|
||||
|
||||
+18 V 47 +18 V Unregulated
|
||||
+8 V 48,49 +8 V Unregulated
|
||||
-18 V 2 -18 V Unregulated
|
||||
GND 0,1 Ground
|
||||
CPU GND 18,24 CPU Ground
|
||||
|
||||
|
||||
***************************************************************************
|
||||
|
||||
P201 Cable
|
||||
|
||||
Between P1 and P2 is a cable labeled P201 in the schematics. This connects
|
||||
the Front Panel(P1) card to the CPU board(P2), providing dedicated signal lines
|
||||
between the two boards.
|
||||
|
||||
Signal Pin Direction Description
|
||||
--------------------------------------------------------
|
||||
|
||||
GND 1 Ground
|
||||
/INT2 (20) 2 P1 -> P2 Interrupt 20
|
||||
/INTE 3 P2 -> P1 Interrupts enabled.
|
||||
/INT1 (10) 4 P1 -> P2 Interrupt 10
|
||||
/RESIN 5 P1 -> P2 Reset in, allowed keypad to initiate a reset of the computer
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_HEATHZENITH_H8_H8BUS_H
|
||||
#define MAME_BUS_HEATHZENITH_H8_H8BUS_H
|
||||
|
||||
#pragma once
|
||||
#include <functional>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
|
||||
class h8bus_device;
|
||||
|
||||
|
||||
class device_h8bus_card_interface : public device_interface
|
||||
{
|
||||
friend class h8bus_device;
|
||||
public:
|
||||
virtual ~device_h8bus_card_interface();
|
||||
|
||||
// signals from the Bus
|
||||
virtual void int1_w(int state) {}
|
||||
virtual void int2_w(int state) {}
|
||||
virtual void int3_w(int state) {}
|
||||
virtual void int4_w(int state) {}
|
||||
virtual void int5_w(int state) {}
|
||||
virtual void int6_w(int state) {}
|
||||
virtual void int7_w(int state) {}
|
||||
|
||||
virtual void m1_w(int state) {}
|
||||
virtual void reset_w(int state) {}
|
||||
virtual void hold_w(int state) {}
|
||||
virtual void rom_disable_w(int state) {}
|
||||
|
||||
void set_h8bus_tag(h8bus_device *h8bus, const char *slottag) { m_h8bus = h8bus; m_h8bus_slottag = slottag; }
|
||||
void set_index(u8 index) { m_index = index; }
|
||||
|
||||
protected:
|
||||
device_h8bus_card_interface(const machine_config &mconfig, device_t &device);
|
||||
virtual void interface_pre_start() override;
|
||||
|
||||
void set_slot_int1(int state);
|
||||
void set_slot_int2(int state);
|
||||
void set_slot_int3(int state);
|
||||
void set_slot_int4(int state);
|
||||
void set_slot_int5(int state);
|
||||
void set_slot_int6(int state);
|
||||
void set_slot_int7(int state);
|
||||
void set_slot_reset(int state);
|
||||
void set_slot_hold(int state);
|
||||
void set_slot_rom_disable(int state);
|
||||
void set_slot_m1(int state);
|
||||
|
||||
h8bus_device &h8bus() { assert(m_h8bus); return *m_h8bus; }
|
||||
|
||||
const char *m_h8bus_slottag;
|
||||
u8 m_index;
|
||||
|
||||
private:
|
||||
h8bus_device *m_h8bus;
|
||||
};
|
||||
|
||||
class device_p201_p1_card_interface : public device_interface
|
||||
{
|
||||
public:
|
||||
virtual ~device_p201_p1_card_interface();
|
||||
|
||||
auto p201_reset_cb() { return m_p201_reset.bind(); }
|
||||
auto p201_int1_cb() { return m_p201_int1.bind(); }
|
||||
auto p201_int2_cb() { return m_p201_int2.bind(); }
|
||||
|
||||
virtual void p201_inte_w(int state) {};
|
||||
|
||||
protected:
|
||||
device_p201_p1_card_interface(device_t &device, const char *tag);
|
||||
|
||||
devcb_write_line m_p201_reset;
|
||||
devcb_write_line m_p201_int1;
|
||||
devcb_write_line m_p201_int2;
|
||||
};
|
||||
|
||||
|
||||
class device_p201_p2_card_interface : public device_interface
|
||||
{
|
||||
public:
|
||||
virtual ~device_p201_p2_card_interface();
|
||||
|
||||
auto p201_inte_cb() { return m_p201_inte.bind(); }
|
||||
|
||||
virtual void p201_reset_w(int state) {};
|
||||
virtual void p201_int1_w(int state) {};
|
||||
virtual void p201_int2_w(int state) {};
|
||||
|
||||
protected:
|
||||
device_p201_p2_card_interface(device_t &device, const char *tag);
|
||||
|
||||
devcb_write_line m_p201_inte;
|
||||
};
|
||||
|
||||
|
||||
class h8bus_slot_device : public device_t, public device_single_card_slot_interface<device_h8bus_card_interface>
|
||||
{
|
||||
public:
|
||||
template <typename T, typename U>
|
||||
h8bus_slot_device(const machine_config &mconfig, T &&tag, device_t *owner, const char *sltag, U &&opts, const char *dflt)
|
||||
: h8bus_slot_device(mconfig, tag, owner, (uint32_t) 0)
|
||||
{
|
||||
option_reset();
|
||||
opts(*this);
|
||||
set_default_option(dflt);
|
||||
set_h8bus_slot(std::forward<T>(sltag), tag);
|
||||
}
|
||||
|
||||
h8bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
template <typename T>
|
||||
void set_h8bus_slot(T &&tag, const char *slottag)
|
||||
{
|
||||
m_h8bus.set_tag(std::forward<T>(tag));
|
||||
m_h8bus_slottag = slottag;
|
||||
}
|
||||
|
||||
protected:
|
||||
h8bus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void device_resolve_objects() override ATTR_COLD;
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
required_device<h8bus_device> m_h8bus;
|
||||
const char *m_h8bus_slottag;
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(H8BUS_SLOT, h8bus_slot_device)
|
||||
|
||||
|
||||
class h8bus_device : public device_t, public device_memory_interface
|
||||
{
|
||||
friend class h8bus_slot_device;
|
||||
friend class device_h8bus_card_interface;
|
||||
|
||||
public:
|
||||
h8bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
~h8bus_device();
|
||||
|
||||
protected:
|
||||
h8bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// device_memory_interface overrides
|
||||
virtual space_config_vector memory_space_config() const override;
|
||||
|
||||
u8 add_h8bus_card(device_h8bus_card_interface &card);
|
||||
void set_int1_line(unsigned index, int state);
|
||||
void set_int2_line(unsigned index, int state);
|
||||
void set_int3_line(unsigned index, int state);
|
||||
void set_int4_line(unsigned index, int state);
|
||||
void set_int5_line(unsigned index, int state);
|
||||
void set_int6_line(unsigned index, int state);
|
||||
void set_int7_line(unsigned index, int state);
|
||||
void set_reset_line(unsigned index, int state);
|
||||
void set_hold_line(unsigned index, int state);
|
||||
void set_disable_rom_line(unsigned index, int state);
|
||||
void set_m1_line(unsigned index, int state);
|
||||
|
||||
void set_p201_inte(int state);
|
||||
void set_p201_reset(int state);
|
||||
void set_p201_int1(int state);
|
||||
void set_p201_int2(int state);
|
||||
|
||||
bool update_line_states(u32 &states, unsigned index, int state);
|
||||
|
||||
void mem_map(address_map &map);
|
||||
void io_map(address_map &map);
|
||||
|
||||
private:
|
||||
u32 m_int1_slot_states;
|
||||
u32 m_int2_slot_states;
|
||||
u32 m_int3_slot_states;
|
||||
u32 m_int4_slot_states;
|
||||
u32 m_int5_slot_states;
|
||||
u32 m_int6_slot_states;
|
||||
u32 m_int7_slot_states;
|
||||
u32 m_reset_slot_states;
|
||||
u32 m_hold_slot_states;
|
||||
u32 m_disable_rom_slot_states;
|
||||
u32 m_m1_slot_states;
|
||||
|
||||
address_space_config const m_mem_config;
|
||||
address_space_config const m_io_config;
|
||||
|
||||
std::vector<std::reference_wrapper<device_h8bus_card_interface>> m_device_list;
|
||||
};
|
||||
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_int1(int state)
|
||||
{
|
||||
h8bus().set_int1_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_int2(int state)
|
||||
{
|
||||
h8bus().set_int2_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_int3(int state)
|
||||
{
|
||||
h8bus().set_int3_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_int4(int state)
|
||||
{
|
||||
h8bus().set_int4_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_int5(int state)
|
||||
{
|
||||
h8bus().set_int5_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_int6(int state)
|
||||
{
|
||||
h8bus().set_int6_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_int7(int state)
|
||||
{
|
||||
h8bus().set_int7_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_m1(int state)
|
||||
{
|
||||
h8bus().set_m1_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_reset(int state)
|
||||
{
|
||||
h8bus().set_reset_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_hold(int state)
|
||||
{
|
||||
h8bus().set_hold_line(m_index, state);
|
||||
}
|
||||
|
||||
inline void device_h8bus_card_interface::set_slot_rom_disable(int state)
|
||||
{
|
||||
h8bus().set_disable_rom_line(m_index, state);
|
||||
}
|
||||
|
||||
DECLARE_DEVICE_TYPE(H8BUS, h8bus_device)
|
||||
|
||||
|
||||
#endif // MAME_BUS_HEATHZENITH_H8_H8BUS_H
|
||||
@@ -0,0 +1,92 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Heathkit H-8-1 4k/8k Static RAM board
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "h_8_1.h"
|
||||
|
||||
namespace {
|
||||
|
||||
class h_8_1_device : public device_t, public device_h8bus_card_interface
|
||||
{
|
||||
public:
|
||||
|
||||
h_8_1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
|
||||
bool m_installed;
|
||||
|
||||
memory_share_creator<u8> m_ram;
|
||||
required_ioport m_jumpers;
|
||||
required_ioport m_config;
|
||||
};
|
||||
|
||||
h_8_1_device::h_8_1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, H8BUS_H_8_1, tag, owner, 0)
|
||||
, device_h8bus_card_interface(mconfig, *this)
|
||||
, m_ram(*this, "ram", 0x2000U, ENDIANNESS_LITTLE)
|
||||
, m_jumpers(*this, "JUMPERS")
|
||||
, m_config(*this, "CONFIG")
|
||||
{
|
||||
}
|
||||
|
||||
void h_8_1_device::device_start()
|
||||
{
|
||||
m_installed = false;
|
||||
|
||||
save_item(NAME(m_installed));
|
||||
}
|
||||
|
||||
void h_8_1_device::device_reset()
|
||||
{
|
||||
if (!m_installed)
|
||||
{
|
||||
ioport_value const jumpers(m_jumpers->read());
|
||||
ioport_value const config(m_config->read());
|
||||
|
||||
u16 base_addr = (jumpers & 0x07) << 13;
|
||||
u16 top_addr = base_addr + (BIT(config, 0) ? 0x1fff : 0x0fff);
|
||||
|
||||
h8bus().space(AS_PROGRAM).install_ram(base_addr, top_addr, m_ram);
|
||||
|
||||
m_installed = true;
|
||||
}
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( h_8_1_jumpers )
|
||||
PORT_START("JUMPERS")
|
||||
PORT_CONFNAME(0x07, 0x01, "Memory base address" )
|
||||
PORT_CONFSETTING( 0x00, "0k")
|
||||
PORT_CONFSETTING( 0x01, "8k")
|
||||
PORT_CONFSETTING( 0x02, "16k")
|
||||
PORT_CONFSETTING( 0x03, "24k")
|
||||
PORT_CONFSETTING( 0x04, "32k")
|
||||
PORT_CONFSETTING( 0x05, "40k")
|
||||
PORT_CONFSETTING( 0x06, "48k")
|
||||
PORT_CONFSETTING( 0x07, "56k")
|
||||
|
||||
PORT_START("CONFIG")
|
||||
PORT_CONFNAME(0x01, 0x01, "Memory installed")
|
||||
PORT_CONFSETTING( 0x00, "4k")
|
||||
PORT_CONFSETTING( 0x01, "8k")
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
ioport_constructor h_8_1_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(h_8_1_jumpers);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(H8BUS_H_8_1, device_h8bus_card_interface, h_8_1_device, "h8_h_8_1", "Heath H-8-1 8k Static RAM");
|
||||
@@ -0,0 +1,12 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
#ifndef MAME_BUS_HEATHZENITH_H8_H_8_1_H
|
||||
#define MAME_BUS_HEATHZENITH_H8_H_8_1_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "h8bus.h"
|
||||
|
||||
DECLARE_DEVICE_TYPE(H8BUS_H_8_1, device_h8bus_card_interface)
|
||||
|
||||
#endif // MAME_BUS_HEATHZENITH_H8_H_8_1_H
|
||||
@@ -0,0 +1,239 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Heathkit H-8-5 Serial I/O and Cassette Interface
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "h_8_5.h"
|
||||
|
||||
#include "imagedev/cassette.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/i8251.h"
|
||||
#include "machine/timer.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "formats/h8_cas.h"
|
||||
|
||||
#include "speaker.h"
|
||||
|
||||
#define LOG_LINES (1U << 1)
|
||||
#define LOG_CASS (1U << 2)
|
||||
#define LOG_FUNC (1U << 3)
|
||||
#define VERBOSE (0)
|
||||
|
||||
#include "logmacro.h"
|
||||
|
||||
#define LOGLINES(...) LOGMASKED(LOG_LINES, __VA_ARGS__)
|
||||
#define LOGCASS(...) LOGMASKED(LOG_CASS, __VA_ARGS__)
|
||||
#define LOGFUNC(...) LOGMASKED(LOG_FUNC, __VA_ARGS__)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define FUNCNAME __func__
|
||||
#else
|
||||
#define FUNCNAME __PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
|
||||
class h_8_5_device : public device_t, public device_h8bus_card_interface
|
||||
{
|
||||
public:
|
||||
|
||||
h_8_5_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
void uart_rts(u8 data);
|
||||
void uart_tx_empty(u8 data);
|
||||
void irq_callback(int state);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(kansas_r);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(kansas_w);
|
||||
|
||||
required_device<i8251_device> m_uart;
|
||||
required_device<i8251_device> m_console;
|
||||
required_device<cassette_image_device> m_cass_player;
|
||||
required_device<cassette_image_device> m_cass_recorder;
|
||||
|
||||
bool m_installed;
|
||||
|
||||
u8 m_cass_data[4];
|
||||
bool m_cassbit;
|
||||
bool m_cassold;
|
||||
};
|
||||
|
||||
h_8_5_device::h_8_5_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, H8BUS_H_8_5, tag, owner, 0)
|
||||
, device_h8bus_card_interface(mconfig, *this)
|
||||
, m_uart(*this, "uart")
|
||||
, m_console(*this, "console")
|
||||
, m_cass_player(*this, "cassette_player")
|
||||
, m_cass_recorder(*this, "cassette_recorder")
|
||||
{
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(h_8_5_device::kansas_w)
|
||||
{
|
||||
m_cass_data[3]++;
|
||||
|
||||
if (m_cassbit != m_cassold)
|
||||
{
|
||||
LOGCASS("%s: m_cassbit changed : %d\n", FUNCNAME, m_cassbit);
|
||||
m_cass_data[3] = 0;
|
||||
m_cassold = m_cassbit;
|
||||
}
|
||||
|
||||
LOGCASS("%s: m_cassbit: %d\n", FUNCNAME, m_cassbit);
|
||||
// 2400Hz -> 0
|
||||
// 1200Hz -> 1
|
||||
const int bit_pos = m_cassbit ? 0 : 1;
|
||||
|
||||
m_cass_recorder->output(BIT(m_cass_data[3], bit_pos) ? -1.0 : +1.0);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(h_8_5_device::kansas_r)
|
||||
{
|
||||
// cassette - turn 1200/2400Hz to a bit
|
||||
m_cass_data[1]++;
|
||||
u8 cass_ws = (m_cass_player->input() > +0.03) ? 1 : 0;
|
||||
|
||||
LOGCASS("%s: cass_ws: %d\n", FUNCNAME, cass_ws);
|
||||
|
||||
if (cass_ws != m_cass_data[0])
|
||||
{
|
||||
LOGCASS("%s: cass_ws has changed value\n", FUNCNAME);
|
||||
m_cass_data[0] = cass_ws;
|
||||
m_uart->write_rxd((m_cass_data[1] < 12) ? 1 : 0);
|
||||
m_cass_data[1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void h_8_5_device::uart_rts(u8 data)
|
||||
{
|
||||
LOGLINES("%s: data: %d\n", FUNCNAME, data);
|
||||
|
||||
m_cass_player->change_state(bool(data) ? CASSETTE_STOPPED : CASSETTE_PLAY, CASSETTE_MASK_UISTATE);
|
||||
}
|
||||
|
||||
void h_8_5_device::uart_tx_empty(u8 data)
|
||||
{
|
||||
LOGLINES("%s: data: %d\n", FUNCNAME, data);
|
||||
|
||||
m_cass_recorder->change_state(bool(data) ? CASSETTE_STOPPED : CASSETTE_RECORD, CASSETTE_MASK_UISTATE);
|
||||
}
|
||||
|
||||
void h_8_5_device::irq_callback(int state)
|
||||
{
|
||||
LOGFUNC("%s: state: %d\n", FUNCNAME, state);
|
||||
|
||||
set_slot_int3(state);
|
||||
}
|
||||
|
||||
void h_8_5_device::device_start()
|
||||
{
|
||||
m_installed = false;
|
||||
|
||||
save_item(NAME(m_installed));
|
||||
save_item(NAME(m_cass_data));
|
||||
save_item(NAME(m_cassbit));
|
||||
save_item(NAME(m_cassold));
|
||||
}
|
||||
|
||||
void h_8_5_device::device_reset()
|
||||
{
|
||||
LOGFUNC("%s\n", FUNCNAME);
|
||||
|
||||
if (!m_installed)
|
||||
{
|
||||
h8bus().space(AS_IO).install_readwrite_handler(0xf8, 0xf9,
|
||||
read8sm_delegate(m_uart, FUNC(i8251_device::read)),
|
||||
write8sm_delegate(m_uart, FUNC(i8251_device::write)));
|
||||
|
||||
h8bus().space(AS_IO).install_readwrite_handler(0xfa, 0xfb,
|
||||
read8sm_delegate(m_console, FUNC(i8251_device::read)),
|
||||
write8sm_delegate(m_console, FUNC(i8251_device::write)));
|
||||
|
||||
m_installed = true;
|
||||
}
|
||||
// cassette
|
||||
m_cassbit = 1;
|
||||
m_cassold = 0;
|
||||
m_cass_data[0] = 0;
|
||||
m_cass_data[1] = 0;
|
||||
m_cass_data[2] = 0;
|
||||
m_cass_data[3] = 0;
|
||||
|
||||
m_uart->write_cts(0);
|
||||
m_uart->write_dsr(0);
|
||||
m_uart->write_rxd(0);
|
||||
}
|
||||
|
||||
// The usual baud rate is 600. The H8 supported baud rates from 110 to
|
||||
// 9600. You can change the baud rate if it is changed here and in the
|
||||
// other places that specify 600 baud.
|
||||
static DEVICE_INPUT_DEFAULTS_START(terminal)
|
||||
DEVICE_INPUT_DEFAULTS("RS232_RXBAUD", 0xff, RS232_BAUD_600)
|
||||
DEVICE_INPUT_DEFAULTS("RS232_TXBAUD", 0xff, RS232_BAUD_600)
|
||||
DEVICE_INPUT_DEFAULTS("RS232_DATABITS", 0xff, RS232_DATABITS_8)
|
||||
DEVICE_INPUT_DEFAULTS("RS232_PARITY", 0xff, RS232_PARITY_NONE)
|
||||
DEVICE_INPUT_DEFAULTS("RS232_STOPBITS", 0xff, RS232_STOPBITS_1)
|
||||
DEVICE_INPUT_DEFAULTS_END
|
||||
|
||||
void h_8_5_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
I8251(config, m_uart, 0);
|
||||
m_uart->txd_handler().set([this] (bool state) { m_cassbit = state; });
|
||||
m_uart->rts_handler().set(FUNC(h_8_5_device::uart_rts));
|
||||
m_uart->txempty_handler().set(FUNC(h_8_5_device::uart_tx_empty));
|
||||
|
||||
clock_device &cassette_clock(CLOCK(config, "cassette_clock", 4800));
|
||||
cassette_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc));
|
||||
cassette_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc));
|
||||
|
||||
I8251(config, m_console, 0);
|
||||
|
||||
m_console->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
|
||||
m_console->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
|
||||
m_console->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
|
||||
// The RxRdy pin on the 8251 USART is normally jumpered to generate a level 3 i/o interrupt.
|
||||
m_console->rxrdy_handler().set(FUNC(h_8_5_device::irq_callback));
|
||||
|
||||
// Console UART clock is 16X the baud rate.
|
||||
clock_device &console_clock(CLOCK(config, "console_clock", 600*16));
|
||||
console_clock.signal_handler().set(m_console, FUNC(i8251_device::write_txc));
|
||||
console_clock.signal_handler().append(m_console, FUNC(i8251_device::write_rxc));
|
||||
|
||||
rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
|
||||
rs232.rxd_handler().set(m_console, FUNC(i8251_device::write_rxd));
|
||||
rs232.cts_handler().set(m_console, FUNC(i8251_device::write_cts));
|
||||
rs232.dsr_handler().set(m_console, FUNC(i8251_device::write_dsr));
|
||||
rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
|
||||
|
||||
SPEAKER(config, "mono").front_right();
|
||||
|
||||
CASSETTE(config, m_cass_player);
|
||||
m_cass_player->set_formats(h8_cassette_formats);
|
||||
m_cass_player->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
|
||||
m_cass_player->add_route(ALL_OUTPUTS, "mono", 0.15);
|
||||
m_cass_player->set_interface("h8_cass_player");
|
||||
|
||||
CASSETTE(config, m_cass_recorder);
|
||||
m_cass_recorder->set_formats(h8_cassette_formats);
|
||||
m_cass_recorder->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
|
||||
m_cass_recorder->add_route(ALL_OUTPUTS, "mono", 0.15);
|
||||
m_cass_recorder->set_interface("h8_cass_recorder");
|
||||
|
||||
TIMER(config, "kansas_w").configure_periodic(FUNC(h_8_5_device::kansas_w), attotime::from_hz(4800));
|
||||
TIMER(config, "kansas_r").configure_periodic(FUNC(h_8_5_device::kansas_r), attotime::from_hz(40000));
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(H8BUS_H_8_5, device_h8bus_card_interface, h_8_5_device, "h8_h_8_5", "Heath H-8-5 Serial/Casette Card");
|
||||
@@ -0,0 +1,12 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
#ifndef MAME_BUS_HEATHZENITH_H8_H_8_5_H
|
||||
#define MAME_BUS_HEATHZENITH_H8_H_8_5_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "h8bus.h"
|
||||
|
||||
DECLARE_DEVICE_TYPE(H8BUS_H_8_5, device_h8bus_card_interface)
|
||||
|
||||
#endif // MAME_BUS_HEATHZENITH_H8_H_8_5_H
|
||||
@@ -0,0 +1,258 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Heathkit WH-8-64 32k/64k Dynamic RAM board
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "wh_8_64.h"
|
||||
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
#define LOG_SW (1U << 1) // Shows register setup
|
||||
|
||||
//#define VERBOSE (LOG_SW)
|
||||
|
||||
#include "logmacro.h"
|
||||
|
||||
#define LOGSW(...) LOGMASKED(LOG_SW, __VA_ARGS__)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define FUNCNAME __func__
|
||||
#else
|
||||
#define FUNCNAME __PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
|
||||
class wh_8_64_device : public device_t, public device_h8bus_card_interface
|
||||
{
|
||||
public:
|
||||
|
||||
wh_8_64_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
protected:
|
||||
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
std::vector<int> get_addr(u8 sw) ATTR_COLD;
|
||||
void install_mem_bank(u8 bank) ATTR_COLD;
|
||||
|
||||
bool m_installed;
|
||||
|
||||
memory_share_array_creator<u8, 8> m_ram;
|
||||
required_ioport_array<4> m_sw;
|
||||
required_ioport m_config;
|
||||
};
|
||||
|
||||
|
||||
wh_8_64_device::wh_8_64_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, H8BUS_WH_8_64, tag, owner, 0)
|
||||
, device_h8bus_card_interface(mconfig, *this)
|
||||
, m_ram(*this, "rambank%u", 0U, 0x2000U, ENDIANNESS_LITTLE)
|
||||
, m_sw(*this, "SW%u", 1U)
|
||||
, m_config(*this, "CONFIG")
|
||||
{
|
||||
}
|
||||
|
||||
void wh_8_64_device::device_start()
|
||||
{
|
||||
m_installed = false;
|
||||
|
||||
save_item(NAME(m_installed));
|
||||
}
|
||||
|
||||
void wh_8_64_device::device_reset()
|
||||
{
|
||||
if (!m_installed)
|
||||
{
|
||||
ioport_value const config(m_config->read());
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (BIT(config, i))
|
||||
{
|
||||
install_mem_bank(i);
|
||||
}
|
||||
}
|
||||
|
||||
m_installed = true;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<int> wh_8_64_device::get_addr(u8 sw)
|
||||
{
|
||||
std::vector<int> result;
|
||||
|
||||
u8 sw_value = m_sw[sw]->read();
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
if (BIT(sw_value, i))
|
||||
{
|
||||
result.push_back(i * 0x2000);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void wh_8_64_device::install_mem_bank(u8 bank)
|
||||
{
|
||||
std::vector<int> addresses = get_addr(3 - bank);
|
||||
|
||||
// each switch defines where to start each 8k block of the
|
||||
// 16k bank. Per manual only 2 should be set. Ensure setting
|
||||
// a max of 2 blocks are defined even if it is just selecting
|
||||
// the first 2.
|
||||
int num_addresses = std::min((int) addresses.size(), 2);
|
||||
int block = bank << 1;
|
||||
|
||||
for (int i = 0; i < num_addresses; i++)
|
||||
{
|
||||
int addr = addresses[i];
|
||||
|
||||
LOGSW("Installing block %d at 0x%04x\n", block, addr);
|
||||
|
||||
h8bus().space(AS_PROGRAM).install_ram(addr, addr + 0x1fff, m_ram[block++]);
|
||||
}
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( wh_8_64 )
|
||||
PORT_START("SW1")
|
||||
// TODO: Properly map the last 8k, needs an HA-8-6 Z80 CPU or HA-8-8 Extended
|
||||
// Configuration board to handle the ROM/RAM swap. Only one switch is set to 1
|
||||
// on SW1.
|
||||
PORT_DIPNAME( 0x01, 0x00, "Bank 3 - Address Block 0k - 8k") PORT_DIPLOCATION("SW1:1")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x00, "Bank 3 - Address Block 8k - 16k") PORT_DIPLOCATION("SW1:2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x00, "Bank 3 - Address Block 16k - 24k") PORT_DIPLOCATION("SW1:3")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Bank 3 - Address Block 24k - 32k") PORT_DIPLOCATION("SW1:4")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, "Bank 3 - Address Block 32k - 40k") PORT_DIPLOCATION("SW1:5")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x00, "Bank 3 - Address Block 40k - 48k") PORT_DIPLOCATION("SW1:6")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x00, "Bank 3 - Address Block 48k - 56k") PORT_DIPLOCATION("SW1:7")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, "Bank 3 - Address Block 56k - 64k") PORT_DIPLOCATION("SW1:8")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
|
||||
|
||||
PORT_START("SW2")
|
||||
PORT_DIPNAME( 0x01, 0x00, "Bank 2 - Address Block 0k - 8k") PORT_DIPLOCATION("SW2:1")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x00, "Bank 2 - Address Block 8k - 16k") PORT_DIPLOCATION("SW2:2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x00, "Bank 2 - Address Block 16k - 24k") PORT_DIPLOCATION("SW2:3")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Bank 2 - Address Block 24k - 32k") PORT_DIPLOCATION("SW2:4")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, "Bank 2 - Address Block 32k - 40k") PORT_DIPLOCATION("SW2:5")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Bank 2 - Address Block 40k - 48k") PORT_DIPLOCATION("SW2:6")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Bank 2 - Address Block 48k - 56k") PORT_DIPLOCATION("SW2:7")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Bank 2 - Address Block 56k - 64k") PORT_DIPLOCATION("SW2:8")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
|
||||
|
||||
PORT_START("SW3")
|
||||
PORT_DIPNAME( 0x01, 0x00, "Bank 1 - Address Block 0k - 8k") PORT_DIPLOCATION("SW3:1")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x00, "Bank 1 - Address Block 8k - 16k") PORT_DIPLOCATION("SW3:2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x00, "Bank 1 - Address Block 16k - 24k") PORT_DIPLOCATION("SW3:3")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, "Bank 1 - Address Block 24k - 32k") PORT_DIPLOCATION("SW3:4")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Bank 1 - Address Block 32k - 40k") PORT_DIPLOCATION("SW3:5")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x00, "Bank 1 - Address Block 40k - 48k") PORT_DIPLOCATION("SW3:6")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x00, "Bank 1 - Address Block 48k - 56k") PORT_DIPLOCATION("SW3:7")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Bank 1 - Address Block 56k - 64k") PORT_DIPLOCATION("SW3:8")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
|
||||
|
||||
PORT_START("SW4")
|
||||
PORT_DIPNAME( 0x01, 0x00, "Bank 0 - Address Block 0k - 8k") PORT_DIPLOCATION("SW4:1")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, "Bank 0 - Address Block 8k - 16k") PORT_DIPLOCATION("SW4:2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Bank 0 - Address Block 16k - 24k") PORT_DIPLOCATION("SW4:3")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Bank 0 - Address Block 24k - 32k") PORT_DIPLOCATION("SW4:4")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, "Bank 0 - Address Block 32k - 40k") PORT_DIPLOCATION("SW4:5")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x00, "Bank 0 - Address Block 40k - 48k") PORT_DIPLOCATION("SW4:6")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x00, "Bank 0 - Address Block 48k - 56k") PORT_DIPLOCATION("SW4:7")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Bank 0 - Address Block 56k - 64k") PORT_DIPLOCATION("SW4:8")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
|
||||
|
||||
PORT_START("CONFIG")
|
||||
PORT_CONFNAME(0x01, 0x01, "Memory Bank 0 Present")
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ))
|
||||
PORT_CONFSETTING( 0x01, DEF_STR( Yes ))
|
||||
PORT_CONFNAME(0x02, 0x02, "Memory Bank 1 Present")
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ))
|
||||
PORT_CONFSETTING( 0x02, DEF_STR( Yes ))
|
||||
PORT_CONFNAME(0x04, 0x04, "Memory Bank 2 Present")
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ))
|
||||
PORT_CONFSETTING( 0x04, DEF_STR( Yes ))
|
||||
PORT_CONFNAME(0x08, 0x08, "Memory Bank 3 Present")
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ))
|
||||
PORT_CONFSETTING( 0x08, DEF_STR( Yes ))
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
ioport_constructor wh_8_64_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(wh_8_64);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(H8BUS_WH_8_64, device_h8bus_card_interface, wh_8_64_device, "wh8_h_8_64", "Heath WH-8-64 64k Dynamic RAM");
|
||||
@@ -0,0 +1,12 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark Garlanger
|
||||
#ifndef MAME_BUS_HEATHZENITH_H8_WH_8_64_H
|
||||
#define MAME_BUS_HEATHZENITH_H8_WH_8_64_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "h8bus.h"
|
||||
|
||||
DECLARE_DEVICE_TYPE(H8BUS_WH_8_64, device_h8bus_card_interface)
|
||||
|
||||
#endif // MAME_BUS_HEATHZENITH_H8_WH_8_64_H
|
||||
@@ -189,7 +189,7 @@ h89bus::addr_ranges device_heath_io_decoder_interface::scan_io_decoder_rom(u8 se
|
||||
}
|
||||
else if (found)
|
||||
{
|
||||
ranges.push_back(std::make_pair(first, last));
|
||||
ranges.emplace_back(first, last);
|
||||
found = false;
|
||||
}
|
||||
}
|
||||
@@ -197,7 +197,7 @@ h89bus::addr_ranges device_heath_io_decoder_interface::scan_io_decoder_rom(u8 se
|
||||
// make sure to include any ranges that extend to the end.
|
||||
if (found)
|
||||
{
|
||||
ranges.push_back(std::make_pair(first, last));
|
||||
ranges.emplace_back(first, last);
|
||||
}
|
||||
|
||||
return ranges;
|
||||
|
||||
@@ -262,7 +262,42 @@ ROM_END
|
||||
|
||||
ROM_START(msmt070)
|
||||
ROM_REGION(0x80, "idprom", 0)
|
||||
ROM_LOAD32_BYTE("msmt070b.bin", 0x0, 0x20, CRC(ad11a4e6) SHA1(e620cd37a1e36d2c548b7783ece336428ec75b0e))
|
||||
ROM_LOAD32_BYTE("mprgy920f_9305070_82s123.u71", 0x00, 0x20, CRC(4fec770c) SHA1(25bfb863336315975568f137e7e76bdc8101ab02))
|
||||
|
||||
ROM_REGION(0x2e5, "plds", 0)
|
||||
ROM_LOAD("y230_0b30_4120_gal22v10.u107", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y231_0b30_5030_pal16v8.u109", 0x000, 0x117, NO_DUMP)
|
||||
ROM_LOAD("y232_0a30_5040_pal16v8.u124", 0x000, 0x117, NO_DUMP)
|
||||
ROM_LOAD("y233_0a30_4130_gal22v10.u126", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y234_0a30_5040_pal16v8.u95", 0x000, 0x117, NO_DUMP)
|
||||
ROM_LOAD("y235_0a30_4190_pal20v8.u130", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y236_0a30_5040_pal16v8.u131", 0x000, 0x117, NO_DUMP)
|
||||
ROM_LOAD("y237_0c30_4150_pal22v10.u157", 0x000, 0x2e5, NO_DUMP) // Same label as U158
|
||||
ROM_LOAD("y237_0c30_4150_pal22v10.u158", 0x000, 0x2e5, NO_DUMP) // Same label as U157
|
||||
ROM_LOAD("y237_0c30_4191_pal22v10.u140", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y237_0c30_4130_pal22v10.u137", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y241_0b30_4140_pal22v10.u165", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y242_0b30_4140_pal22v10.u63", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y243_0b30_4150_pal22v10.u66", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y244_0b30_4140_pal22v10.u67", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y245_0a30_5040_pal16v8.u90", 0x000, 0x117, NO_DUMP)
|
||||
ROM_LOAD("y246_0b30_4160_gal20v8.u106", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y247_0a30_5040_pal16v8.u91", 0x000, 0x117, NO_DUMP)
|
||||
ROM_LOAD("y248_0b30_4151_gal20v8.u7", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y249_0b30_4200_gal20v8.u11", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y250_0a30_4200_pal16v8.u98", 0x000, 0x117, NO_DUMP)
|
||||
ROM_LOAD("y251_0a30_4200_gal20v8.u40", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y252_0a30_4160_gal20v8.u82", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y253_0a30_421_gal22v10.u117", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y254_0a30_421_gal22v10.u118", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y255_0a30_4161_gal20v8.u132", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y256_0a30_4160_gal22v10.u112", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y257_0a30_4160_gal22v10.u78", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y258_0a30_4161_gal20v8.u81", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("y259_0a30_4161_gal22v10.u74", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y260_0a30_4160_gal20v8.u75", 0x000, 0x157, NO_DUMP)
|
||||
ROM_LOAD("x261_0a30_5272_gal22v10.u12", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_LOAD("y262_0b30_4161_gal22v10.u13", 0x000, 0x2e5, NO_DUMP)
|
||||
ROM_END
|
||||
|
||||
ROM_START(msmt071)
|
||||
|
||||
@@ -146,10 +146,10 @@ static INPUT_PORTS_START( babyblue2 )
|
||||
PORT_DIPNAME(0x40, 0x40, "RAM Bank I" ) PORT_DIPLOCATION( "SW3:1" )
|
||||
PORT_DIPSETTING( 0x00, "Enabled" )
|
||||
PORT_DIPSETTING( 0x40, "Disabled" )
|
||||
PORT_DIPNAME(0x20, 0x40, "RAM Bank II" ) PORT_DIPLOCATION( "SW3:2" )
|
||||
PORT_DIPNAME(0x20, 0x20, "RAM Bank II" ) PORT_DIPLOCATION( "SW3:2" )
|
||||
PORT_DIPSETTING( 0x00, "Enabled" )
|
||||
PORT_DIPSETTING( 0x20, "Disabled" )
|
||||
PORT_DIPNAME(0x10, 0x40, "RAM Bank III" ) PORT_DIPLOCATION( "SW3:3" )
|
||||
PORT_DIPNAME(0x10, 0x10, "RAM Bank III" ) PORT_DIPLOCATION( "SW3:3" )
|
||||
PORT_DIPSETTING( 0x00, "Enabled" )
|
||||
PORT_DIPSETTING( 0x10, "Disabled" )
|
||||
|
||||
|
||||
@@ -111,12 +111,14 @@ void pc_isa8_cards(device_slot_interface &device)
|
||||
device.option_add("cga_cportiii", ISA8_CGA_CPORTIII);
|
||||
device.option_add("aga", ISA8_AGA);
|
||||
device.option_add("aga_pc200", ISA8_AGA_PC200);
|
||||
device.option_add("wyse700", ISA8_WYSE700);
|
||||
device.option_add("ega", ISA8_EGA);
|
||||
device.option_add("pgc", ISA8_PGC);
|
||||
device.option_add("vga", ISA8_VGA);
|
||||
device.option_add("wd90c90_jk", ISA8_WD90C90_JK);
|
||||
device.option_add("num9rev",ISA8_NUM_9_REV);
|
||||
device.option_add("com", ISA8_COM);
|
||||
device.option_add("comat", ISA8_COM_AT);
|
||||
device.option_add("fdc", ISA8_FDC_SUPERIO);
|
||||
device.option_add("fdc_xt", ISA8_FDC_XT);
|
||||
device.option_add("fdc_at", ISA8_FDC_AT);
|
||||
@@ -156,55 +158,17 @@ void pc_isa8_cards(device_slot_interface &device)
|
||||
device.option_add("acb2072", ACB2072);
|
||||
device.option_add("3xtwin", ISA8_3XTWIN);
|
||||
device.option_add("opus108pm", ISA8_OPUS108PM);
|
||||
device.option_add("ibm_speech", ISA8_IBM_SPEECH);
|
||||
}
|
||||
|
||||
void pc_isa16_cards(device_slot_interface &device)
|
||||
{
|
||||
// 8-bit
|
||||
device.option_add("mda", ISA8_MDA);
|
||||
device.option_add("cga", ISA8_CGA);
|
||||
device.option_add("cga_cportiii", ISA8_CGA_CPORTIII);
|
||||
device.option_add("wyse700", ISA8_WYSE700);
|
||||
device.option_add("ega", ISA8_EGA);
|
||||
device.option_add("pgc", ISA8_PGC);
|
||||
device.option_add("vga", ISA8_VGA);
|
||||
device.option_add("wd90c90_jk", ISA8_WD90C90_JK);
|
||||
device.option_add("num9rev",ISA8_NUM_9_REV);
|
||||
device.option_add("com", ISA8_COM);
|
||||
device.option_add("comat", ISA8_COM_AT);
|
||||
device.option_add("fdc", ISA8_FDC_AT);
|
||||
device.option_add("fdc344", ISA8_FDC344);
|
||||
device.option_add("fdcmag", ISA8_FDCMAG);
|
||||
device.option_add("hdc", ISA8_HDC);
|
||||
device.option_add("side116", ISA8_SIDE116);
|
||||
device.option_add("adlib", ISA8_ADLIB);
|
||||
device.option_add("hercules", ISA8_HERCULES);
|
||||
device.option_add("gblaster", ISA8_GAME_BLASTER);
|
||||
device.option_add("sblaster1_0", ISA8_SOUND_BLASTER_1_0);
|
||||
device.option_add("sblaster1_5", ISA8_SOUND_BLASTER_1_5);
|
||||
device.option_add("stereo_fx", ISA8_STEREO_FX);
|
||||
device.option_add("ssi2001", ISA8_SSI2001);
|
||||
device.option_add("ne1000", NE1000);
|
||||
device.option_add("3c503", EL2_3C503);
|
||||
device.option_add("mpu401", ISA8_MPU401);
|
||||
device.option_add("pcmidi", ISA8_PCMIDI);
|
||||
device.option_add("lpt", ISA8_LPT);
|
||||
device.option_add("ibm_mfc", ISA8_IBM_MFC);
|
||||
device.option_add("fdcsmc", ISA8_FDC_SMC);
|
||||
device.option_add("dectalk", ISA8_DECTALK);
|
||||
device.option_add("prose4k1", ISA8_PROSE4001);
|
||||
device.option_add("pds", ISA8_PDS);
|
||||
device.option_add("lba_enhancer", ISA8_LBA_ENHANCER);
|
||||
device.option_add("chessmdr", ISA8_CHESSMDR);
|
||||
device.option_add("chessmsr", ISA8_CHESSMSR);
|
||||
device.option_add("finalchs", ISA8_FINALCHS);
|
||||
device.option_add("epc_mda", ISA8_EPC_MDA);
|
||||
device.option_add("epc_twib", ISA8_EIS_TWIB);
|
||||
device.option_add("babyblue2", ISA8_BABYBLUE2);
|
||||
device.option_add("acb2072", ACB2072);
|
||||
device.option_add("3xtwin", ISA8_3XTWIN);
|
||||
device.option_add("opus108pm", ISA8_OPUS108PM);
|
||||
device.option_add("ibm_speech", ISA8_IBM_SPEECH);
|
||||
// any 8-bit card also works in a 16-bit slot
|
||||
pc_isa8_cards(device);
|
||||
device.option_replace("fdc", ISA8_FDC_AT);
|
||||
device.option_remove("fdc_at");
|
||||
device.option_add("fdc_superio", ISA8_FDC_SUPERIO);
|
||||
|
||||
// 16-bit
|
||||
device.option_add("ide", ISA16_IDE);
|
||||
device.option_add("ne2000", NE2000);
|
||||
@@ -213,13 +177,11 @@ void pc_isa16_cards(device_slot_interface &device)
|
||||
device.option_add("aha1542c", AHA1542C);
|
||||
device.option_add("aha1542cf", AHA1542CF);
|
||||
device.option_add("aha1542cp", AHA1542CP);
|
||||
device.option_add("aha1740", AHA1740); // actually an EISA card
|
||||
device.option_add("aha1742a", AHA1742A); // actually an EISA card
|
||||
device.option_add("gus",ISA16_GUS);
|
||||
device.option_add("gus", ISA16_GUS);
|
||||
device.option_add("sblaster_16", ISA16_SOUND_BLASTER_16);
|
||||
device.option_add("svga_s3", ISA16_SVGA_S3);
|
||||
device.option_add("svga_dm",ISA16_SVGA_CIRRUS);
|
||||
device.option_add("clgd542x",ISA16_SVGA_CIRRUS_GD542X);
|
||||
device.option_add("svga_dm", ISA16_SVGA_CIRRUS);
|
||||
device.option_add("clgd542x", ISA16_SVGA_CIRRUS_GD542X);
|
||||
device.option_add("gfxultra", ISA16_VGA_GFXULTRA);
|
||||
device.option_add("gfxultrap", ISA16_SVGA_GFXULTRAPRO);
|
||||
device.option_add("tvga9000", ISA16_SVGA_TVGA9000);
|
||||
@@ -253,12 +215,17 @@ void pc_isa16_cards(device_slot_interface &device)
|
||||
device.option_add("ultra12f", ULTRA12F);
|
||||
device.option_add("ultra12f32", ULTRA12F32);
|
||||
device.option_add("ultra14f", ULTRA14F);
|
||||
device.option_add("ultra24f", ULTRA24F); // actually an EISA card
|
||||
device.option_add("dc320b", TEKRAM_DC320B); // actually an EISA card
|
||||
device.option_add("dc320e", TEKRAM_DC320E); // actually an EISA card
|
||||
device.option_add("dc820", TEKRAM_DC820); // actually an EISA card
|
||||
device.option_add("dc820b", TEKRAM_DC820B); // actually an EISA card
|
||||
device.option_add("omti8621", ISA16_OMTI8621);
|
||||
device.option_add("lrk331", LRK331);
|
||||
device.option_add("hpblp", HPBLP);
|
||||
|
||||
// EISA cards
|
||||
// TODO: move to own block
|
||||
device.option_add("aha1740", AHA1740);
|
||||
device.option_add("aha1742a", AHA1742A);
|
||||
device.option_add("ultra24f", ULTRA24F);
|
||||
device.option_add("dc320b", TEKRAM_DC320B);
|
||||
device.option_add("dc320e", TEKRAM_DC320E);
|
||||
device.option_add("dc820", TEKRAM_DC820);
|
||||
device.option_add("dc820b", TEKRAM_DC820B);
|
||||
}
|
||||
+492
-812
File diff suppressed because it is too large.
Load diff
+3
-130
@@ -6,136 +6,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "isa.h"
|
||||
#include "machine/pc_lpt.h"
|
||||
#include "video/mc6845.h"
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> isa8_mda_device
|
||||
|
||||
class isa8_mda_device : public device_t,
|
||||
public device_isa8_card_interface
|
||||
{
|
||||
public:
|
||||
friend class isa8_hercules_device;
|
||||
|
||||
// construction/destruction
|
||||
isa8_mda_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual uint8_t io_read(offs_t offset);
|
||||
virtual void io_write(offs_t offset, uint8_t data);
|
||||
virtual uint8_t status_r();
|
||||
virtual void mode_control_w(uint8_t data);
|
||||
|
||||
void hsync_changed(int state);
|
||||
void vsync_changed(int state);
|
||||
|
||||
virtual MC6845_UPDATE_ROW( crtc_update_row );
|
||||
|
||||
protected:
|
||||
isa8_mda_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
required_device<mc6845_device> m_crtc;
|
||||
optional_device<pc_lpt_device> m_lpt;
|
||||
|
||||
private:
|
||||
void pc_cpu_line(int state);
|
||||
|
||||
MC6845_UPDATE_ROW( mda_text_inten_update_row );
|
||||
MC6845_UPDATE_ROW( mda_text_blink_update_row );
|
||||
|
||||
public:
|
||||
int m_framecnt;
|
||||
|
||||
uint8_t m_mode_control;
|
||||
|
||||
int m_update_row_type;
|
||||
uint8_t *m_chr_gen;
|
||||
uint8_t m_vsync;
|
||||
uint8_t m_hsync;
|
||||
std::vector<uint8_t> m_videoram;
|
||||
uint8_t m_pixel;
|
||||
required_device<palette_device> m_palette;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(ISA8_MDA, isa8_mda_device)
|
||||
|
||||
// ======================> isa8_hercules_device
|
||||
|
||||
class isa8_hercules_device :
|
||||
public isa8_mda_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
isa8_hercules_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual uint8_t io_read(offs_t offset) override;
|
||||
virtual void io_write(offs_t offset, uint8_t data) override;
|
||||
virtual uint8_t status_r() override;
|
||||
virtual void mode_control_w(uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
private:
|
||||
virtual MC6845_UPDATE_ROW( crtc_update_row ) override;
|
||||
MC6845_UPDATE_ROW( hercules_gfx_update_row );
|
||||
|
||||
uint8_t m_configuration_switch; //hercules
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(ISA8_HERCULES, isa8_hercules_device)
|
||||
|
||||
// ======================> isa8_ec1840_0002_device
|
||||
|
||||
class isa8_ec1840_0002_device :
|
||||
public isa8_mda_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
isa8_ec1840_0002_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
private:
|
||||
virtual void mode_control_w(uint8_t data) override;
|
||||
|
||||
virtual MC6845_UPDATE_ROW( crtc_update_row ) override;
|
||||
MC6845_UPDATE_ROW( mda_lowres_text_inten_update_row );
|
||||
MC6845_UPDATE_ROW( mda_lowres_text_blink_update_row );
|
||||
|
||||
std::unique_ptr<uint8_t[]> m_soft_chr_gen;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(ISA8_EC1840_0002, isa8_ec1840_0002_device)
|
||||
DECLARE_DEVICE_TYPE(ISA8_MDA, device_isa8_card_interface)
|
||||
DECLARE_DEVICE_TYPE(ISA8_HERCULES, device_isa8_card_interface)
|
||||
DECLARE_DEVICE_TYPE(ISA8_EC1840_0002, device_isa8_card_interface)
|
||||
|
||||
#endif // MAME_BUS_ISA_MDA_H
|
||||
@@ -233,7 +233,7 @@ static INPUT_PORTS_START( omti_port )
|
||||
PORT_DIPSETTING( 0x01, "Enabled" )
|
||||
PORT_DIPNAME( 0x02, 0x00, "BIOS base")
|
||||
PORT_DIPSETTING( 0x00, "C8000h" )
|
||||
PORT_DIPSETTING( 0x01, "CA000h" )
|
||||
PORT_DIPSETTING( 0x02, "CA000h" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
void omti8621_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
@@ -93,17 +93,18 @@ void isa16_pvga1a_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_pvga1a_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(pvga1a_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(pvga1a_vga_device::io_map));
|
||||
}
|
||||
|
||||
void isa16_pvga1a_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
}
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_pvga1a_device::io_isa_map);
|
||||
void isa16_pvga1a_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_pvga1a_device::remap(int space_id, offs_t start, offs_t end)
|
||||
@@ -114,7 +115,7 @@ void isa16_pvga1a_device::remap(int space_id, offs_t start, offs_t end)
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_pvga1a_device::io_isa_map);
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_pvga1a_device::io_isa_map);
|
||||
}
|
||||
|
||||
/******************
|
||||
@@ -184,19 +185,32 @@ void isa16_pvga1a_jk_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_pvga1a_jk_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(pvga1a_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(pvga1a_vga_device::io_map));
|
||||
}
|
||||
|
||||
void isa16_pvga1a_jk_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_pvga1a_jk_device::io_isa_map);
|
||||
}
|
||||
|
||||
void isa16_pvga1a_jk_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_pvga1a_jk_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_w)));
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_pvga1a_jk_device::io_isa_map);
|
||||
}
|
||||
|
||||
|
||||
/******************
|
||||
*
|
||||
* WD90C90-JK
|
||||
@@ -236,19 +250,32 @@ void isa8_wd90c90_jk_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa8_wd90c90_jk_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(pvga1a_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(pvga1a_vga_device::io_map));
|
||||
}
|
||||
|
||||
void isa8_wd90c90_jk_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa8_wd90c90_jk_device::io_isa_map);
|
||||
}
|
||||
|
||||
void isa8_wd90c90_jk_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa8_wd90c90_jk_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_w)));
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa8_wd90c90_jk_device::io_isa_map);
|
||||
}
|
||||
|
||||
|
||||
/******************
|
||||
*
|
||||
* WD90C00-JK
|
||||
@@ -294,32 +321,51 @@ void isa16_wd90c00_jk_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_wd90c00_jk_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(wd90c00_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(wd90c00_vga_device::io_map));
|
||||
}
|
||||
|
||||
void isa16_wd90c00_jk_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c00_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c00_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c00_jk_device::io_isa_map);
|
||||
}
|
||||
|
||||
void isa16_wd90c00_jk_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_wd90c00_jk_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c00_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c00_vga_device::mem_w)));
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_wd90c00_jk_device::io_isa_map);
|
||||
}
|
||||
|
||||
|
||||
/******************
|
||||
*
|
||||
* WD90C11-LR
|
||||
*
|
||||
*****************/
|
||||
|
||||
isa16_wd90c11_lr_device::isa16_wd90c11_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, ISA16_WD90C11_LR, tag, owner, clock),
|
||||
device_isa16_card_interface(mconfig, *this),
|
||||
m_vga(*this, "vga")
|
||||
isa16_wd90c11_lr_device::isa16_wd90c11_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: isa16_wd90c11_lr_device(mconfig, ISA16_WD90C11_LR, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
isa16_wd90c11_lr_device::isa16_wd90c11_lr_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_isa16_card_interface(mconfig, *this)
|
||||
, m_vga(*this, "vga")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
ROM_START( wd90c11_lr )
|
||||
ROM_REGION(0x8000,"vga_rom", ROMREGION_ERASE00)
|
||||
// Octek PVGA1C - Version LR - WDC Paradise 90C11A
|
||||
@@ -342,23 +388,40 @@ void isa16_wd90c11_lr_device::device_add_mconfig(machine_config &config)
|
||||
m_vga->set_screen("screen");
|
||||
// 512KB (+ option for 1MB? Verify with interlace)
|
||||
m_vga->set_vram_size(0x100000);
|
||||
// required by megapc and teradrive for color
|
||||
m_vga->read_cnf15_callback().set_constant(1);
|
||||
m_vga->cnf_write_ddr_callback().set_constant(0x7f);
|
||||
}
|
||||
|
||||
void isa16_wd90c11_lr_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(wd90c11a_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(wd90c11a_vga_device::io_map));
|
||||
map(0x46e8, 0x46e8).w(m_vga, FUNC(wd90c11a_vga_device::mode_setup_w));
|
||||
}
|
||||
|
||||
void isa16_wd90c11_lr_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c11a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c11a_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c11_lr_device::io_isa_map);
|
||||
}
|
||||
|
||||
void isa16_wd90c11_lr_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_wd90c11_lr_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c11a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c11a_vga_device::mem_w)));
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_wd90c11_lr_device::io_isa_map);
|
||||
}
|
||||
|
||||
|
||||
/******************
|
||||
*
|
||||
* WD90C30-LR
|
||||
@@ -405,19 +468,32 @@ void isa16_wd90c30_lr_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_wd90c30_lr_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(wd90c30_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(wd90c30_vga_device::io_map));
|
||||
}
|
||||
|
||||
void isa16_wd90c30_lr_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c30_lr_device::io_isa_map);
|
||||
}
|
||||
|
||||
void isa16_wd90c30_lr_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_wd90c30_lr_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_w)));
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_wd90c30_lr_device::io_isa_map);
|
||||
}
|
||||
|
||||
|
||||
/******************
|
||||
*
|
||||
* WD90C31-LR
|
||||
@@ -457,18 +533,19 @@ void isa16_wd90c31_lr_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_wd90c31_lr_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(wd90c31_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(wd90c31_vga_device::io_map));
|
||||
map(0x23c0, 0x23c7).m(m_vga, FUNC(wd90c31_vga_device::ext_io_map));
|
||||
}
|
||||
|
||||
void isa16_wd90c31_lr_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
}
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c31_lr_device::io_isa_map);
|
||||
m_isa->install_device(0x23c0, 0x23c7, *m_vga, &wd90c31_vga_device::ext_io_map);
|
||||
void isa16_wd90c31_lr_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_wd90c31_lr_device::remap(int space_id, offs_t start, offs_t end)
|
||||
@@ -481,8 +558,7 @@ void isa16_wd90c31_lr_device::remap(int space_id, offs_t start, offs_t end)
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
{
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c31_lr_device::io_isa_map);
|
||||
m_isa->install_device(0x23c0, 0x23c7, *m_vga, &wd90c31_vga_device::ext_io_map);
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_wd90c31_lr_device::io_isa_map);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -528,20 +604,36 @@ void isa16_wd90c31a_lr_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_wd90c31a_lr_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(wd90c31_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(wd90c31_vga_device::io_map));
|
||||
map(0x23c0, 0x23c7).m(m_vga, FUNC(wd90c31_vga_device::ext_io_map));
|
||||
}
|
||||
|
||||
void isa16_wd90c31a_lr_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c31a_lr_device::io_isa_map);
|
||||
m_isa->install_device(0x23c0, 0x23c7, *m_vga, &wd90c31_vga_device::ext_io_map);
|
||||
}
|
||||
|
||||
void isa16_wd90c31a_lr_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_wd90c31a_lr_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_w)));
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
{
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_wd90c31a_lr_device::io_isa_map);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************
|
||||
*
|
||||
* WD90C31A-ZS
|
||||
@@ -580,20 +672,36 @@ void isa16_wd90c31a_zs_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_wd90c31a_zs_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(wd90c31_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(wd90c31_vga_device::io_map));
|
||||
map(0x23c0, 0x23c7).m(m_vga, FUNC(wd90c31_vga_device::ext_io_map));
|
||||
}
|
||||
|
||||
void isa16_wd90c31a_zs_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c31a_zs_device::io_isa_map);
|
||||
m_isa->install_device(0x23c0, 0x23c7, *m_vga, &wd90c31_vga_device::ext_io_map);
|
||||
}
|
||||
|
||||
void isa16_wd90c31a_zs_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_wd90c31a_zs_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c31_vga_device::mem_w)));
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
{
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_wd90c31a_zs_device::io_isa_map);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************
|
||||
*
|
||||
* WD90C33-ZZ
|
||||
@@ -633,17 +741,35 @@ void isa16_wd90c33_zz_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
void isa16_wd90c33_zz_device::io_isa_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x2f).m(m_vga, FUNC(wd90c33_vga_device::io_map));
|
||||
map(0x03b0, 0x03df).m(m_vga, FUNC(wd90c33_vga_device::io_map));
|
||||
map(0x23c0, 0x23c7).m(m_vga, FUNC(wd90c33_vga_device::ext_io_map));
|
||||
map(0x23d0, 0x23d3).m(m_vga, FUNC(wd90c33_vga_device::localbus_if_map));
|
||||
// NOTE: ct486 BIOS setup will drop in MDA without explicit setup mode
|
||||
map(0x46e8, 0x46e8).w(m_vga, FUNC(wd90c33_vga_device::mode_setup_w));
|
||||
}
|
||||
|
||||
void isa16_wd90c33_zz_device::device_start()
|
||||
{
|
||||
set_isa_device();
|
||||
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c33_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c33_vga_device::mem_w)));
|
||||
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c33_zz_device::io_isa_map);
|
||||
m_isa->install_device(0x23c0, 0x23cf, *m_vga, &wd90c33_vga_device::ext_io_map);
|
||||
m_isa->install_device(0x23d0, 0x23d3, *m_vga, &wd90c33_vga_device::localbus_if_map);
|
||||
}
|
||||
|
||||
void isa16_wd90c33_zz_device::device_reset()
|
||||
{
|
||||
remap(AS_PROGRAM, 0, 0xfffff);
|
||||
remap(AS_IO, 0, 0xffff);
|
||||
}
|
||||
|
||||
void isa16_wd90c33_zz_device::remap(int space_id, offs_t start, offs_t end)
|
||||
{
|
||||
if (space_id == AS_PROGRAM)
|
||||
{
|
||||
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
|
||||
|
||||
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c33_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c33_vga_device::mem_w)));
|
||||
}
|
||||
else if (space_id == AS_IO)
|
||||
{
|
||||
m_isa->install_device(0x0000, 0xffff, *this, &isa16_wd90c33_zz_device::io_isa_map);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,22 +21,24 @@ public:
|
||||
// construction/destruction
|
||||
isa16_pvga1a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
required_device<pvga1a_vga_device> m_vga;
|
||||
};
|
||||
|
||||
// TODO: exists in isa8 format too
|
||||
class isa16_pvga1a_jk_device :
|
||||
public device_t,
|
||||
public device_isa16_card_interface
|
||||
@@ -48,11 +50,14 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -70,11 +75,14 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -95,11 +103,14 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -115,13 +126,17 @@ public:
|
||||
isa16_wd90c11_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
isa16_wd90c11_lr_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -139,11 +154,13 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -158,16 +175,16 @@ public:
|
||||
// construction/destruction
|
||||
isa16_wd90c31_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -185,11 +202,13 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -207,11 +226,13 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
@@ -229,11 +250,13 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
virtual void remap(int space_id, offs_t start, offs_t end) override;
|
||||
void io_isa_map(address_map &map) ATTR_COLD;
|
||||
|
||||
private:
|
||||
|
||||
@@ -0,0 +1,440 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/***************************************************************************
|
||||
|
||||
Informer 8048-based compact keyboards
|
||||
|
||||
These serial keyboards feature compact 7-row layouts and output raw
|
||||
scan codes, and contain a bare minimum of support ICs. All MCU revisions
|
||||
appear to support multiple layouts; the keyboard type is determined by
|
||||
the jumpering of T0, T1 and 2 matrix positions.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "informer_kbd.h"
|
||||
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "sound/spkrdev.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class informer_kbd_device : public device_t, public device_keytronic_interface
|
||||
{
|
||||
protected:
|
||||
informer_kbd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// device_t implementation
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
// device_keytronic_interface implementation
|
||||
virtual void ser_in_w(int state) override;
|
||||
|
||||
u8 bus_r();
|
||||
void p2_w(u8 data);
|
||||
|
||||
required_device<mcs48_cpu_device> m_mcu;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_ioport_array<13> m_keys;
|
||||
};
|
||||
|
||||
class informer_207_100_kbd_device : public informer_kbd_device
|
||||
{
|
||||
public:
|
||||
// device type constructor
|
||||
informer_207_100_kbd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0U);
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
};
|
||||
|
||||
class informer_213_kbd_device : public informer_kbd_device
|
||||
{
|
||||
public:
|
||||
// device type constructor
|
||||
informer_213_kbd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0U);
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
};
|
||||
|
||||
|
||||
informer_kbd_device::informer_kbd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_keytronic_interface(mconfig, *this)
|
||||
, m_mcu(*this, "mcu")
|
||||
, m_speaker(*this, "speaker")
|
||||
, m_keys(*this, "KEYS%u", 0U)
|
||||
{
|
||||
}
|
||||
|
||||
informer_207_100_kbd_device::informer_207_100_kbd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: informer_kbd_device(mconfig, INFORMER_207_100_KBD, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
informer_213_kbd_device::informer_213_kbd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: informer_kbd_device(mconfig, INFORMER_213_KBD, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
void informer_kbd_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void informer_kbd_device::ser_in_w(int state)
|
||||
{
|
||||
m_mcu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
u8 informer_kbd_device::bus_r()
|
||||
{
|
||||
u16 strobe = m_mcu->p1_r() | m_mcu->p2_r() << 8;
|
||||
u8 ret = 0xff;
|
||||
for (int i = 0; i < 13; i++)
|
||||
if (!BIT(strobe, i))
|
||||
ret &= m_keys[i]->read();
|
||||
return ret;
|
||||
}
|
||||
|
||||
void informer_kbd_device::p2_w(u8 data)
|
||||
{
|
||||
ser_out_w(BIT(data, 7));
|
||||
m_speaker->level_w(BIT(data, 6));
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START(informer_207_100_kbd)
|
||||
PORT_START("KEYS0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(0x03) PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CHAR('f') PORT_CHAR('F') PORT_CHAR(0x06) PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(0x14) PORT_CODE(KEYCODE_T)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5 % (Set Up A/B/C)") PORT_CHAR('5') PORT_CHAR('%') PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF4 (Discn)") PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_CODE(KEYCODE_F4)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CODE(KEYCODE_4_PAD)
|
||||
|
||||
PORT_START("KEYS1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16) PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07) PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(0x19) PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 ^ (Toggle)") PORT_CHAR('6') PORT_CHAR('^') PORT_CHAR(0x1e) PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_CODE(KEYCODE_MINUS_PAD)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_CODE(KEYCODE_5_PAD)
|
||||
|
||||
PORT_START("KEYS2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H (Back Space)") PORT_CHAR('h') PORT_CHAR('H') PORT_CHAR(0x08) PORT_CODE(KEYCODE_H)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(0x15) PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 & (Tx Speed)") PORT_CHAR('7') PORT_CHAR('&') PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(COMMA_PAD)) PORT_CODE(KEYCODE_PLUS_PAD)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CODE(KEYCODE_6_PAD)
|
||||
|
||||
PORT_START("KEYS3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CHAR(0x0d) PORT_CODE(KEYCODE_ENTER)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e) PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CHAR('j') PORT_CHAR('J') PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CHAR('i') PORT_CHAR('I') PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8 * (Rx Speed)") PORT_CHAR('8') PORT_CHAR('*') PORT_CODE(KEYCODE_8)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CODE(KEYCODE_DEL_PAD)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CODE(KEYCODE_7_PAD)
|
||||
|
||||
PORT_START("KEYS4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del") PORT_CODE(KEYCODE_DEL)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CHAR('m') PORT_CHAR('M') PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR(0x0b) PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f) PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR('(') PORT_CODE(KEYCODE_9)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CODE(KEYCODE_UP)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CODE(KEYCODE_8_PAD)
|
||||
|
||||
PORT_START("KEYS5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('`') PORT_CHAR('~') PORT_CODE(KEYCODE_TILDE)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(',') PORT_CHAR('<') PORT_CODE(KEYCODE_COMMA)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CHAR('l') PORT_CHAR('L') PORT_CHAR(0x0c) PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10) PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0 ) (Reset)") PORT_CHAR('0') PORT_CHAR(')') PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CODE(KEYCODE_DOWN)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_CODE(KEYCODE_9_PAD)
|
||||
|
||||
PORT_START("KEYS6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad Enter (Print)") PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) PORT_CODE(KEYCODE_ENTER_PAD)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('.') PORT_CHAR('>') PORT_CODE(KEYCODE_STOP)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR(':') PORT_CODE(KEYCODE_COLON)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('[') PORT_CHAR('{') PORT_CODE(KEYCODE_OPENBRACE)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('_') PORT_CODE(KEYCODE_MINUS)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CODE(KEYCODE_LEFT)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CODE(KEYCODE_0_PAD)
|
||||
|
||||
PORT_START("KEYS7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Break (Here Is)") PORT_CODE(KEYCODE_NUMLOCK)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('/') PORT_CHAR('?') PORT_CODE(KEYCODE_SLASH)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\'') PORT_CHAR('"') PORT_CODE(KEYCODE_QUOTE)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(']') PORT_CHAR('}') PORT_CODE(KEYCODE_CLOSEBRACE)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('=') PORT_CHAR('+') PORT_CODE(KEYCODE_EQUALS)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CODE(KEYCODE_RIGHT)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c) PORT_CODE(KEYCODE_BACKSLASH)
|
||||
|
||||
PORT_START("KEYS8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line Feed") PORT_CHAR(0x0a) PORT_CODE(KEYCODE_RALT)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("No Scroll") PORT_CODE(KEYCODE_LCONTROL)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11) PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!') PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CHAR(0x09) PORT_CODE(KEYCODE_TAB)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc (Setup)") PORT_CHAR(0x1b) PORT_CODE(KEYCODE_ESC)
|
||||
|
||||
PORT_START("KEYS9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(' ') PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(0x01) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17) PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2 @ (Toggle Tab)") PORT_CHAR('2') PORT_CHAR('@') PORT_CHAR(0x00) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF1 (Dial 1)") PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CODE(KEYCODE_1_PAD)
|
||||
|
||||
PORT_START("KEYS10")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a) PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CHAR('s') PORT_CHAR('S') PORT_CHAR(0x13) PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(0x05) PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 # £ (Clear Tabs)") PORT_CHAR('3') PORT_CHAR('#', U'£') PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF2 (Dial 2)") PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CODE(KEYCODE_F2)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CODE(KEYCODE_2_PAD)
|
||||
|
||||
PORT_START("KEYS11")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18) PORT_CODE(KEYCODE_X)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CHAR('d') PORT_CHAR('D') PORT_CHAR(0x04) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12) PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4 $ (Line/Local)") PORT_CHAR('4') PORT_CHAR('$') PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF3 (Dial 3)") PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CODE(KEYCODE_F3)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CODE(KEYCODE_3_PAD)
|
||||
|
||||
PORT_START("KEYS12")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CHAR(UCHAR_SHIFT_2) PORT_CODE(KEYCODE_CAPSLOCK)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT)) PORT_CODE(KEYCODE_RSHIFT)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_LALT)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_SHIFT_1) PORT_CODE(KEYCODE_LSHIFT)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) // read at startup
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) // read at startup
|
||||
|
||||
PORT_START("JUMPERS")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) // read at startup
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) // read at startup
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START(informer_213_kbd)
|
||||
PORT_START("KEYS0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(0x03) PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CHAR('f') PORT_CHAR('F') PORT_CHAR(0x06) PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(0x14) PORT_CODE(KEYCODE_T)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('5') PORT_CHAR('%') PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Erase EOF (Erase Input)") PORT_CODE(KEYCODE_END)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF5 PF17") PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHAR(UCHAR_MAMEKEY(F17)) PORT_CODE(KEYCODE_F5)
|
||||
|
||||
PORT_START("KEYS1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16) PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07) PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(0x19) PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 ^") PORT_CHAR('6') PORT_CHAR('^', U'¬') PORT_CHAR(0x1e) PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('`') PORT_CHAR('~') PORT_CODE(KEYCODE_TILDE)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF6 PF18") PORT_CHAR(UCHAR_MAMEKEY(F6)) PORT_CHAR(UCHAR_MAMEKEY(F18)) PORT_CODE(KEYCODE_F6)
|
||||
|
||||
PORT_START("KEYS2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CHAR('h') PORT_CHAR('H') /*PORT_CHAR(0x08)*/ PORT_CODE(KEYCODE_H)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(0x15) PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('&') PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("{ }") PORT_CHAR('{') PORT_CHAR('}') PORT_CHAR(0x1d) PORT_CODE(KEYCODE_CLOSEBRACE)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF7 PF19") PORT_CHAR(UCHAR_MAMEKEY(F7)) PORT_CHAR(UCHAR_MAMEKEY(F19)) PORT_CODE(KEYCODE_F7)
|
||||
|
||||
PORT_START("KEYS3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter (Set-Up)") PORT_CODE(KEYCODE_ENTER)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e) PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CHAR('j') PORT_CHAR('J') PORT_CHAR(0x0a) PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CHAR('i') PORT_CHAR('I') /*PORT_CHAR(0x09)*/ PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('8') PORT_CHAR('*') PORT_CODE(KEYCODE_8)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('=') PORT_CHAR('+') PORT_CODE(KEYCODE_EQUALS)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF8 PF20") PORT_CHAR(UCHAR_MAMEKEY(F8)) PORT_CHAR(UCHAR_MAMEKEY(F20)) PORT_CODE(KEYCODE_F8)
|
||||
|
||||
PORT_START("KEYS4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("New Line") PORT_CODE(KEYCODE_RCONTROL) // ↵
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CHAR('m') PORT_CHAR('M') PORT_CHAR(0x0d) PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR(0x0b) PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f) PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR('(') PORT_CODE(KEYCODE_9)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\ |") PORT_CHAR('\\') PORT_CHAR('|', U'¦') PORT_CHAR(0x1c) PORT_CODE(KEYCODE_BACKSLASH)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF9 PF21") PORT_CHAR(UCHAR_MAMEKEY(F9)) /*PORT_CHAR(UCHAR_MAMEKEY(F21))*/ PORT_CODE(KEYCODE_F9)
|
||||
|
||||
PORT_START("KEYS5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Cursor \u2192 (\u21a0)") PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CODE(KEYCODE_RIGHT) // → (↠)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(',') PORT_CHAR('<') PORT_CODE(KEYCODE_COMMA)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CHAR('l') PORT_CHAR('L') PORT_CHAR(0x0c) PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10) PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('0') PORT_CHAR(')') PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Insert Dup (PA1)") PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_CODE(KEYCODE_INSERT) // â
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF10 PF22") PORT_CHAR(UCHAR_MAMEKEY(F10)) /*PORT_CHAR(UCHAR_MAMEKEY(F22))*/ PORT_CODE(KEYCODE_F10)
|
||||
|
||||
PORT_START("KEYS6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Cursor \u2193") PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CODE(KEYCODE_DOWN) // ↓
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CHAR('.') PORT_CHAR('>') PORT_CHAR(0x1d) PORT_CODE(KEYCODE_STOP)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR(':') PORT_CODE(KEYCODE_COLON)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[ ] (Esc)") PORT_CHAR('[', U'¢') PORT_CHAR(']' /*IBM mode: '!'*/) PORT_CHAR(0x1b) PORT_CODE(KEYCODE_OPENBRACE)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('_') /*PORT_CHAR(0x1f)*/ PORT_CODE(KEYCODE_MINUS)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Delete Field Mark (PA2)") PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CODE(KEYCODE_DEL)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF11 PF23 (Discn)") PORT_CHAR(UCHAR_MAMEKEY(F11)) /*PORT_CHAR(UCHAR_MAMEKEY(F23))*/ PORT_CODE(KEYCODE_F11)
|
||||
|
||||
PORT_START("KEYS7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keyclick (Test)") PORT_CODE(KEYCODE_NUMLOCK)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CHAR('/') PORT_CHAR('?') PORT_CHAR(0x1f) PORT_CODE(KEYCODE_SLASH)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\'') PORT_CHAR('"') PORT_CODE(KEYCODE_QUOTE)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace (Home)") PORT_CHAR(0x08) PORT_CHAR() PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CODE(KEYCODE_BACKSPACE) // ⇤
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Cursor \u2190 (\u219e)") PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CODE(KEYCODE_LEFT) // ← (↞)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Cursor \u2191") PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CODE(KEYCODE_UP) // ↑
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF12 PF24 (Dial)") PORT_CHAR(UCHAR_MAMEKEY(F12)) /*PORT_CHAR(UCHAR_MAMEKEY(F24))*/ PORT_CODE(KEYCODE_F12)
|
||||
|
||||
PORT_START("KEYS8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CHAR(0x09) PORT_CODE(KEYCODE_CAPSLOCK) // ⇥
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_LCONTROL)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11) PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!' /*IBM mode: '|'*/) PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Attn PA3 (Sys Req)") PORT_CODE(KEYCODE_ESC)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF1 PF13") PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F13)) PORT_CODE(KEYCODE_F1)
|
||||
|
||||
PORT_START("KEYS9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(' ') PORT_NAME("Spacebar") PORT_CODE(KEYCODE_SPACE) // "the only unmarked key on the keyboard"
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(0x01) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17) PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2 @") PORT_CHAR('2') PORT_CHAR('@') PORT_CHAR(0x00) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Cursr Sel (Clear)") PORT_CODE(KEYCODE_PGUP)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF2 PF14") PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F14)) PORT_CODE(KEYCODE_F2)
|
||||
|
||||
PORT_START("KEYS10")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a) PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CHAR('s') PORT_CHAR('S') PORT_CHAR(0x13) PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(0x05) PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('3') PORT_CHAR('#') PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Cursr Blink (Alt Cursr)") PORT_CODE(KEYCODE_PGDN)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF3 PF15") PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F15)) PORT_CODE(KEYCODE_F3)
|
||||
|
||||
PORT_START("KEYS11")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18) PORT_CODE(KEYCODE_X)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CHAR('d') PORT_CHAR('D') PORT_CHAR(0x04) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12) PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('4') PORT_CHAR('$') PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Print (Ident)") PORT_CHAR(UCHAR_MAMEKEY(PRTSCR)) PORT_CODE(KEYCODE_PRTSCR)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PF4 PF16") PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_CHAR(UCHAR_MAMEKEY(F16)) PORT_CODE(KEYCODE_F4)
|
||||
|
||||
PORT_START("KEYS12")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CHAR(UCHAR_SHIFT_2) PORT_CODE(KEYCODE_RALT)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT)) PORT_CODE(KEYCODE_RSHIFT)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_LALT)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_SHIFT_1) PORT_CODE(KEYCODE_LSHIFT)
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED) // read at startup
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED) // read at startup
|
||||
|
||||
PORT_START("JUMPERS")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) // read at startup
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) // read at startup
|
||||
INPUT_PORTS_END
|
||||
|
||||
ioport_constructor informer_207_100_kbd_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(informer_207_100_kbd);
|
||||
}
|
||||
|
||||
ioport_constructor informer_213_kbd_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(informer_213_kbd);
|
||||
}
|
||||
|
||||
void informer_kbd_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
I8048(config, m_mcu, 6_MHz_XTAL);
|
||||
m_mcu->bus_in_cb().set(FUNC(informer_207_100_kbd_device::bus_r));
|
||||
m_mcu->p2_out_cb().set(FUNC(informer_207_100_kbd_device::p2_w));
|
||||
m_mcu->t0_in_cb().set_ioport("JUMPERS").bit(0);
|
||||
m_mcu->t1_in_cb().set_ioport("JUMPERS").bit(1);
|
||||
|
||||
SPEAKER(config, "mono").front_center();
|
||||
SPEAKER_SOUND(config, m_speaker).add_route(0, "mono", 1.00);
|
||||
}
|
||||
|
||||
void informer_207_100_kbd_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
informer_kbd_device::device_add_mconfig(config);
|
||||
|
||||
m_mcu->set_clock(5'760'000); // XTAL unreadable; clock chosen to give correct baud rate (6 MHz does not work here)
|
||||
}
|
||||
|
||||
ROM_START(informer_207_100_kbd)
|
||||
ROM_REGION(0x400, "mcu", 0)
|
||||
ROM_LOAD("79499-001_version6.bin", 0x000, 0x400, CRC(aad1ed7b) SHA1(f3e5e7d9138abede70e97026f4b2e52e0df6ea31))
|
||||
ROM_END
|
||||
|
||||
ROM_START(informer_213_kbd)
|
||||
ROM_REGION(0x400, "mcu", 0)
|
||||
ROM_LOAD("79499-006_v1.3.bin", 0x000, 0x400, CRC(abc4459e) SHA1(0fea01984959c8d8b7884ffca40bef402c9b99b8))
|
||||
ROM_END
|
||||
|
||||
const tiny_rom_entry *informer_207_100_kbd_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(informer_207_100_kbd);
|
||||
}
|
||||
|
||||
const tiny_rom_entry *informer_213_kbd_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(informer_213_kbd);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
// device type definitions
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(INFORMER_207_100_KBD, device_keytronic_interface, informer_207_100_kbd_device, "in207100kbd", "Informer 207/100 Keyboard")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(INFORMER_213_KBD, device_keytronic_interface, informer_213_kbd_device, "in213kbd", "Informer 213 Keyboard")
|
||||
@@ -0,0 +1,21 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/***************************************************************************
|
||||
|
||||
Informer 8048-based compact keyboards
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_KEYTRONIC_INFORMER_KBD_H
|
||||
#define MAME_BUS_KEYTRONIC_INFORMER_KBD_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "keytronic.h"
|
||||
|
||||
|
||||
// device type declarations
|
||||
DECLARE_DEVICE_TYPE(INFORMER_207_100_KBD, device_keytronic_interface)
|
||||
DECLARE_DEVICE_TYPE(INFORMER_213_KBD, device_keytronic_interface)
|
||||
|
||||
#endif // MAME_BUS_KEYTRONIC_INFORMER_KBD_H
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "emu.h"
|
||||
#include "kay_kbd.h"
|
||||
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "sound/spkrdev.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#define LOG_TXD (1U << 1)
|
||||
@@ -110,14 +112,47 @@ MCU, but we don't have a dump for it.
|
||||
*/
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(KAYPRO_10_KEYBOARD, kaypro_10_keyboard_device, "kaypro10kbd", "Kaypro 10 Keyboard")
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class kaypro_10_keyboard_device : public device_t, public device_keytronic_interface
|
||||
{
|
||||
public:
|
||||
kaypro_10_keyboard_device(
|
||||
machine_config const &mconfig,
|
||||
char const *tag,
|
||||
device_t *owner,
|
||||
std::uint32_t clock = 0);
|
||||
|
||||
protected:
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
virtual void ser_in_w(int state) override { m_txd = state ? 1U : 0U; }
|
||||
|
||||
uint8_t p1_r();
|
||||
uint8_t p2_r();
|
||||
void p2_w(uint8_t data);
|
||||
int t1_r();
|
||||
uint8_t bus_r();
|
||||
void bus_w(uint8_t data);
|
||||
|
||||
private:
|
||||
required_device<i8049_device> m_mcu;
|
||||
required_device<speaker_sound_device> m_bell;
|
||||
required_ioport_array<16> m_matrix;
|
||||
required_ioport m_modifiers;
|
||||
output_finder<> m_led_caps_lock;
|
||||
|
||||
std::uint8_t m_txd;
|
||||
std::uint8_t m_bus;
|
||||
};
|
||||
|
||||
|
||||
ROM_START(kaypro_10_keyboard)
|
||||
ROM_REGION(0x0800, "mcu", 0)
|
||||
ROM_LOAD("m5l8049.bin", 0x0000, 0x0800, CRC(dc772f80) SHA1(aa7cd3f476466203294675d56098dff45952b9b0))
|
||||
ROM_LOAD("3-z0300-08049.bin", 0x0000, 0x0800, CRC(dc772f80) SHA1(aa7cd3f476466203294675d56098dff45952b9b0)) // NEC D8049; identical dump also extracted from M5L8049
|
||||
ROM_END
|
||||
|
||||
INPUT_PORTS_START(kaypro_keyboard_typewriter)
|
||||
@@ -324,8 +359,6 @@ INPUT_PORTS_END
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
|
||||
INPUT_PORTS_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
kaypro_10_keyboard_device::kaypro_10_keyboard_device(
|
||||
machine_config const &mconfig,
|
||||
@@ -333,12 +366,12 @@ kaypro_10_keyboard_device::kaypro_10_keyboard_device(
|
||||
device_t *owner,
|
||||
std::uint32_t clock)
|
||||
: device_t(mconfig, KAYPRO_10_KEYBOARD, tag, owner, clock)
|
||||
, device_keytronic_interface(mconfig, *this)
|
||||
, m_mcu(*this, "mcu")
|
||||
, m_bell(*this, "bell")
|
||||
, m_matrix(*this, "ROW.%X", 0)
|
||||
, m_modifiers(*this, "MOD")
|
||||
, m_led_caps_lock(*this, "led_caps_lock")
|
||||
, m_rxd_cb(*this)
|
||||
, m_txd(1U)
|
||||
, m_bus(0U)
|
||||
{
|
||||
@@ -407,7 +440,7 @@ void kaypro_10_keyboard_device::p2_w(uint8_t data)
|
||||
}
|
||||
|
||||
m_bell->level_w(BIT(data, 5));
|
||||
m_rxd_cb(BIT(data, 7));
|
||||
ser_out_w(BIT(data, 7));
|
||||
}
|
||||
|
||||
int kaypro_10_keyboard_device::t1_r()
|
||||
@@ -426,3 +459,8 @@ void kaypro_10_keyboard_device::bus_w(uint8_t data)
|
||||
m_led_caps_lock = BIT(data, 4);
|
||||
m_bus = data;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(KAYPRO_10_KEYBOARD, device_keytronic_interface, kaypro_10_keyboard_device, "kaypro10kbd", "Kaypro 10 Keyboard")
|
||||
@@ -0,0 +1,12 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
#ifndef MAME_BUS_KEYTRONIC_KAY_KBD_H
|
||||
#define MAME_BUS_KEYTRONIC_KAY_KBD_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "keytronic.h"
|
||||
|
||||
DECLARE_DEVICE_TYPE(KAYPRO_10_KEYBOARD, device_keytronic_interface)
|
||||
|
||||
#endif // MAME_BUS_KEYTRONIC_KAY_KBD_H
|
||||
@@ -0,0 +1,91 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/***************************************************************************
|
||||
|
||||
Generic Keytronic serial keyboard connector
|
||||
|
||||
Although Key Tronic Corporation produced many keyboards with varied and
|
||||
incompatible OEM interfaces, their most common interface uses
|
||||
full-duplex TTL-level (possibly inverted) serial communications at
|
||||
300 baud, with 8 data bits and no parity. These keyboards normally
|
||||
include buzzers to generate keyclicks when enabled and beeps when
|
||||
requested, and often feature programmable LEDs as well.
|
||||
|
||||
Some of these keyboards send ASCII codes, while others send matrix scan
|
||||
codes to be decoded by the host. Systems that support multiple
|
||||
non-ASCII keyboard types can distinguish these by the ID bytes they
|
||||
send back in response to the 0x10 command.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "bus/keytronic/keytronic.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// KEYBOARD CONNECTOR DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(KEYTRONIC_CONNECTOR, keytronic_connector_device, "keytronic_connector", "Keytronic serial keyboard connector")
|
||||
|
||||
keytronic_connector_device::keytronic_connector_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, KEYTRONIC_CONNECTOR, tag, owner, clock)
|
||||
, device_single_card_slot_interface<device_keytronic_interface>(mconfig, *this)
|
||||
, m_ser_out_callback(*this)
|
||||
, m_kbd(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void keytronic_connector_device::device_config_complete()
|
||||
{
|
||||
m_kbd = get_card_device();
|
||||
}
|
||||
|
||||
void keytronic_connector_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// KEYTRONIC KEYBOARD INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
device_keytronic_interface::device_keytronic_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_interface(device, "keytronic")
|
||||
, m_port(device, DEVICE_SELF_OWNER)
|
||||
{
|
||||
}
|
||||
|
||||
device_keytronic_interface::~device_keytronic_interface()
|
||||
{
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// KEYBOARD OPTIONS
|
||||
//**************************************************************************
|
||||
|
||||
#include "informer_kbd.h"
|
||||
#include "kay_kbd.h"
|
||||
#include "keytronic_l2207.h"
|
||||
|
||||
void ascii_terminal_keyboards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("l2207", KEYTRONIC_L2207);
|
||||
}
|
||||
|
||||
void informer_207_100_keyboards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("in207100", INFORMER_207_100_KBD); // I207DEC
|
||||
device.option_add("in213", INFORMER_213_KBD); // I207IBM
|
||||
device.option_add("l2207", KEYTRONIC_L2207); // DEC 203 (doesn't work reliably on 207/100 except with clear NVRAM)
|
||||
}
|
||||
|
||||
void informer_213_keyboards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("in213", INFORMER_213_KBD);
|
||||
}
|
||||
|
||||
void kaypro_keyboards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("kayproii", KAYPROII_KEYBOARD);
|
||||
device.option_add("kaypro10", KAYPRO_10_KEYBOARD);
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/***************************************************************************
|
||||
|
||||
Generic Keytronic serial keyboard connector
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_KEYTRONIC_KEYTRONIC_H
|
||||
#define MAME_BUS_KEYTRONIC_KEYTRONIC_H
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// forward declaration
|
||||
class device_keytronic_interface;
|
||||
|
||||
// ======================> keytronic_connector_device
|
||||
|
||||
class keytronic_connector_device : public device_t, public device_single_card_slot_interface<device_keytronic_interface>
|
||||
{
|
||||
friend class device_keytronic_interface;
|
||||
|
||||
public:
|
||||
// construction/destruction
|
||||
keytronic_connector_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
template <typename T>
|
||||
keytronic_connector_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
|
||||
: keytronic_connector_device(mconfig, tag, owner, 0U)
|
||||
{
|
||||
option_reset();
|
||||
opts(*this);
|
||||
set_default_option(dflt);
|
||||
set_fixed(false);
|
||||
}
|
||||
|
||||
// callback configuration
|
||||
auto ser_out_callback() { return m_ser_out_callback.bind(); }
|
||||
|
||||
// serial line input
|
||||
inline void ser_in_w(int state);
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual void device_config_complete() override;
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// called from keyboard
|
||||
void ser_out_w(int state) { m_ser_out_callback(state); }
|
||||
|
||||
private:
|
||||
// user callback
|
||||
devcb_write_line m_ser_out_callback;
|
||||
|
||||
// selected keyboard
|
||||
device_keytronic_interface *m_kbd;
|
||||
};
|
||||
|
||||
// ======================> device_keytronic_interface
|
||||
|
||||
class device_keytronic_interface : public device_interface
|
||||
{
|
||||
friend class keytronic_connector_device;
|
||||
|
||||
protected:
|
||||
// construction/destruction
|
||||
device_keytronic_interface(const machine_config &mconfig, device_t &device);
|
||||
virtual ~device_keytronic_interface();
|
||||
|
||||
void ser_out_w(int state) { m_port->ser_out_w(state); }
|
||||
|
||||
virtual void ser_in_w(int state) = 0;
|
||||
|
||||
private:
|
||||
// parent port
|
||||
required_device<keytronic_connector_device> m_port;
|
||||
};
|
||||
|
||||
// type definition
|
||||
DECLARE_DEVICE_TYPE(KEYTRONIC_CONNECTOR, keytronic_connector_device)
|
||||
|
||||
// supported keyboards
|
||||
void ascii_terminal_keyboards(device_slot_interface &device);
|
||||
void informer_207_100_keyboards(device_slot_interface &device);
|
||||
void informer_213_keyboards(device_slot_interface &device);
|
||||
void kaypro_keyboards(device_slot_interface &device);
|
||||
|
||||
//**************************************************************************
|
||||
// INLINE FUNCTIONS
|
||||
//**************************************************************************
|
||||
|
||||
void keytronic_connector_device::ser_in_w(int state)
|
||||
{
|
||||
if (m_kbd != nullptr)
|
||||
m_kbd->ser_in_w(state);
|
||||
}
|
||||
|
||||
#endif // MAME_BUS_KEYTRONIC_KEYTRONIC_H
|
||||
+158
-15
@@ -4,8 +4,8 @@
|
||||
|
||||
Keytronic L2207 83-key keyboard
|
||||
|
||||
This was sold by Keytronic as a generic VT100-lookalike ASCII
|
||||
keyboard. Its normal configuration communicates via 300 baud
|
||||
This was sold by Key Tronic Corp. as a generic VT100-lookalike
|
||||
ASCII keyboard. Its normal configuration communicates via 300 baud
|
||||
asynchronous TTL-level serial, but populating a few additional
|
||||
components and using an alternate connector gives it a parallel
|
||||
interface for outputs. The PCB additionally supports a "minimum"
|
||||
@@ -44,8 +44,7 @@
|
||||
|
||||
Several other codes (A0-A5, D4, D6, F0, F5) are assigned to
|
||||
9 additional switches which are not normally populated. The
|
||||
presently dumped firmware also sends AA in response to the
|
||||
undocumented test command below.
|
||||
presently dumped firmware also sends AA as its ID byte.
|
||||
|
||||
List of commands (delivered through serial input):
|
||||
|
||||
@@ -55,7 +54,7 @@
|
||||
- - - - - - 1 0 Short beep
|
||||
- - - - - 1 0 0 Long beep
|
||||
- - - - 1 0 0 0 Key click off
|
||||
- - - 1 0 0 0 0 Test? (undocumented)
|
||||
- - - 1 0 0 0 0 Keyboard ID (undocumented)
|
||||
- - - 0 0 0 0 0 Key click on
|
||||
|
||||
An alternate version of this keyboard, whose solder side is
|
||||
@@ -63,29 +62,116 @@
|
||||
keytops and a different EPROM but is otherwise identical in layout
|
||||
and functionality.
|
||||
|
||||
The Kaypro II 76-key detachable keyboard is practically identical
|
||||
to L2207 (the firmware is identical), but with no LEDs installed
|
||||
and seven keys removed.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "keytronic_l2207.h"
|
||||
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "sound/spkrdev.h"
|
||||
#include "speaker.h"
|
||||
|
||||
DEFINE_DEVICE_TYPE(KEYTRONIC_L2207, keytronic_l2207_device, "keytronic_l2207", "Keytronic L2207 serial keyboard")
|
||||
|
||||
keytronic_l2207_device::keytronic_l2207_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, KEYTRONIC_L2207, tag, owner, clock)
|
||||
namespace {
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> keytronic_l2207_device
|
||||
|
||||
class keytronic_l2207_device : public device_t, public device_keytronic_interface
|
||||
{
|
||||
public:
|
||||
// device type constructor
|
||||
keytronic_l2207_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0U);
|
||||
|
||||
static constexpr feature_type imperfect_features() { return feature::SOUND; }
|
||||
|
||||
protected:
|
||||
keytronic_l2207_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// device_t implementation
|
||||
virtual void device_resolve_objects() override ATTR_COLD;
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
|
||||
// device_keytronics_interface implementation
|
||||
virtual void ser_in_w(int state) override;
|
||||
|
||||
// MCU handlers
|
||||
u8 led_latch_r();
|
||||
u8 p1_r();
|
||||
void p2_w(u8 data);
|
||||
|
||||
// address maps
|
||||
void prog_map(address_map &map) ATTR_COLD;
|
||||
void ext_map(address_map &map) ATTR_COLD;
|
||||
|
||||
// object finders
|
||||
required_device<mcs48_cpu_device> m_mcu;
|
||||
required_device<speaker_sound_device> m_beeper;
|
||||
required_ioport_array<12> m_keys;
|
||||
output_finder<8> m_leds;
|
||||
output_finder<> m_all_caps;
|
||||
|
||||
// internal state
|
||||
u8 m_p1_in;
|
||||
u8 m_p2_out;
|
||||
bool m_beeper_latch;
|
||||
};
|
||||
|
||||
|
||||
// ======================> kayproii_keyboard_device
|
||||
|
||||
class kayproii_keyboard_device : public keytronic_l2207_device
|
||||
{
|
||||
public:
|
||||
// device type constructor
|
||||
kayproii_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0U);
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
keytronic_l2207_device::keytronic_l2207_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_keytronic_interface(mconfig, *this)
|
||||
, m_mcu(*this, "mcu")
|
||||
, m_beeper(*this, "beeper")
|
||||
, m_keys(*this, "KEYS%d", 0U)
|
||||
, m_leds(*this, "kbd_led%d", 1U)
|
||||
, m_all_caps(*this, "all_caps")
|
||||
, m_ser_out_callback(*this)
|
||||
, m_p1_in(0xff)
|
||||
, m_p2_out(0)
|
||||
, m_beeper_latch(false)
|
||||
{
|
||||
}
|
||||
|
||||
keytronic_l2207_device::keytronic_l2207_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: keytronic_l2207_device(mconfig, KEYTRONIC_L2207, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
kayproii_keyboard_device::kayproii_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: keytronic_l2207_device(mconfig, KAYPROII_KEYBOARD, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
void keytronic_l2207_device::device_resolve_objects()
|
||||
{
|
||||
m_leds.resolve();
|
||||
@@ -130,7 +216,7 @@ u8 keytronic_l2207_device::p1_r()
|
||||
void keytronic_l2207_device::p2_w(u8 data)
|
||||
{
|
||||
if (BIT(data, 5) != BIT(m_p2_out, 5))
|
||||
m_ser_out_callback(BIT(data, 5));
|
||||
ser_out_w(BIT(data, 5));
|
||||
|
||||
if (!BIT(data, 4))
|
||||
m_p1_in = 0xff;
|
||||
@@ -180,7 +266,7 @@ static INPUT_PORTS_START(keytronic_l2207)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("KEYS2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('2') PORT_CHAR('@') PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2 @") PORT_CHAR('2') PORT_CHAR('@') PORT_CHAR(0x00) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"3 # £") PORT_CHAR('3') PORT_CHAR('#', 0x00a3) PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17) PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(0x05) PORT_CODE(KEYCODE_E)
|
||||
@@ -200,7 +286,7 @@ static INPUT_PORTS_START(keytronic_l2207)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16) PORT_CODE(KEYCODE_V)
|
||||
|
||||
PORT_START("KEYS4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('6') PORT_CHAR('^') PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 ^") PORT_CHAR('6') PORT_CHAR('^') PORT_CHAR(0x1e) PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('&') PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CHAR('y') PORT_CHAR('y') PORT_CHAR(0x19) PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CHAR('u') PORT_CHAR('u') PORT_CHAR(0x15) PORT_CODE(KEYCODE_U)
|
||||
@@ -221,7 +307,7 @@ static INPUT_PORTS_START(keytronic_l2207)
|
||||
|
||||
PORT_START("KEYS6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('0') PORT_CHAR(')') PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('_') PORT_CODE(KEYCODE_MINUS)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("- _") PORT_CHAR('-') PORT_CHAR('_') PORT_CHAR(0x1f) PORT_CODE(KEYCODE_MINUS)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10) PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('[') PORT_CHAR('{') PORT_CODE(KEYCODE_OPENBRACE)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\'') PORT_CHAR('"') PORT_CODE(KEYCODE_QUOTE)
|
||||
@@ -232,9 +318,9 @@ static INPUT_PORTS_START(keytronic_l2207)
|
||||
PORT_START("KEYS7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('=') PORT_CHAR('+') PORT_CODE(KEYCODE_EQUALS)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('`') PORT_CHAR('~') PORT_CODE(KEYCODE_BACKSLASH)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(']') PORT_CHAR('}') PORT_CODE(KEYCODE_CLOSEBRACE)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("] }") PORT_CHAR(']') PORT_CHAR('}') PORT_CHAR(0x1d) PORT_CODE(KEYCODE_CLOSEBRACE)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\\') PORT_CHAR('|') PORT_CODE(KEYCODE_PGUP)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\ |") PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c) PORT_CODE(KEYCODE_PGUP)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CODE(KEYCODE_1_PAD)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CODE(KEYCODE_0_PAD)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line Feed") PORT_CHAR(0x0a) PORT_CODE(KEYCODE_PGDN)
|
||||
@@ -275,11 +361,37 @@ static INPUT_PORTS_START(keytronic_l2207)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(' ') PORT_CODE(KEYCODE_SPACE)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START(kayproii_keyboard)
|
||||
PORT_INCLUDE(keytronic_l2207)
|
||||
|
||||
PORT_MODIFY("KEYS0")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_MODIFY("KEYS1")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_MODIFY("KEYS8")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_MODIFY("KEYS9")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_MODIFY("KEYS10")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
INPUT_PORTS_END
|
||||
|
||||
ioport_constructor keytronic_l2207_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(keytronic_l2207);
|
||||
}
|
||||
|
||||
ioport_constructor kayproii_keyboard_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(kayproii_keyboard);
|
||||
}
|
||||
|
||||
void keytronic_l2207_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
I8035(config, m_mcu, 3.579545_MHz_XTAL); // P8035HL + 48-00300-010 XTAL
|
||||
@@ -296,6 +408,21 @@ void keytronic_l2207_device::device_add_mconfig(machine_config &config)
|
||||
SPEAKER_SOUND(config, m_beeper).add_route(ALL_OUTPUTS, "mono", 0.5);
|
||||
}
|
||||
|
||||
void kayproii_keyboard_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
I8048(config, m_mcu, 3.579545_MHz_XTAL);
|
||||
m_mcu->set_addrmap(AS_IO, &kayproii_keyboard_device::ext_map);
|
||||
m_mcu->p1_in_cb().set(FUNC(kayproii_keyboard_device::p1_r));
|
||||
m_mcu->p2_out_cb().set(FUNC(kayproii_keyboard_device::p2_w));
|
||||
m_mcu->t0_in_cb().set_constant(1);
|
||||
m_mcu->t1_in_cb().set_constant(0);
|
||||
m_mcu->bus_out_cb().set_nop();
|
||||
m_mcu->prog_out_cb().set_nop();
|
||||
|
||||
SPEAKER(config, "mono").front_center();
|
||||
SPEAKER_SOUND(config, m_beeper).add_route(ALL_OUTPUTS, "mono", 0.5);
|
||||
}
|
||||
|
||||
ROM_START(keytronic_l2207)
|
||||
ROM_REGION(0x800, "eprom", 0)
|
||||
ROM_SYSTEM_BIOS(0, "a65_02207", "A65-02207-051/2510") // from Wicat System 150
|
||||
@@ -305,7 +432,23 @@ ROM_START(keytronic_l2207)
|
||||
ROMX_LOAD("key_05__162092859__8-23-82.bin", 0x000, 0x800, CRC(970b11a3) SHA1(a1c9c505eb3ccf132307b2ac0e04b0326f50621e), ROM_BIOS(1)) // MM2716Q
|
||||
ROM_END
|
||||
|
||||
ROM_START(kayproii_keyboard)
|
||||
ROM_REGION(0x400, "mcu", 0)
|
||||
ROM_LOAD("kaypro_ii-ins8048.bin", 0x000, 0x400, CRC(f65e1ca5) SHA1(7919385fe8badbb610b793a3f5e4077982094aaa))
|
||||
ROM_END
|
||||
|
||||
const tiny_rom_entry *keytronic_l2207_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(keytronic_l2207);
|
||||
}
|
||||
|
||||
const tiny_rom_entry *kayproii_keyboard_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME(kayproii_keyboard);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
// device type definitions
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(KEYTRONIC_L2207, device_keytronic_interface, keytronic_l2207_device, "keytronic_l2207", "Keytronic L2207 serial keyboard")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(KAYPROII_KEYBOARD, device_keytronic_interface, kayproii_keyboard_device, "kayproiikbd", "Kaypro II Keyboard")
|
||||
@@ -0,0 +1,20 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/**********************************************************************
|
||||
|
||||
Keytronic L2207 83-key keyboard
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_KEYTRONIC_KEYTRONIC_L2207_H
|
||||
#define MAME_BUS_KEYTRONIC_KEYTRONIC_L2207_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "keytronic.h"
|
||||
|
||||
// device type declaration
|
||||
DECLARE_DEVICE_TYPE(KEYTRONIC_L2207, device_keytronic_interface)
|
||||
DECLARE_DEVICE_TYPE(KAYPROII_KEYBOARD, device_keytronic_interface)
|
||||
|
||||
#endif // MAME_BUS_KEYTRONIC_KEYTRONIC_L2207_H
|
||||
Loaded 100 of 521 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user