summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2020-02-08 00:08:27 -0500
committer arbee <rb6502@users.noreply.github.com>2020-02-08 00:08:27 -0500
commita48d7c16545a5e127622302223585c625075b6af (patch)
tree3968feeec6fd56bd88829e0d5fe87023f2297856
parentc1d150f3754ef0956e2099d5ce005f0b922675f7 (diff)
New machines added as MACHINE_NOT_WORKING
----------------------------------------- WeatherSTAR 4000 [R. Belmont, Techknight]
-rw-r--r--scripts/target/mame/mess.lua6
-rw-r--r--src/mame/drivers/wxstar4000.cpp143
-rw-r--r--src/mame/mame.lst3
3 files changed, 152 insertions, 0 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index a564a1ae7ce..bc489f951bd 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -1084,6 +1084,7 @@ function linkProjects_mame_mess(_target, _subtarget)
"alesis",
"altos",
"ami",
+ "amirix",
"amiga",
"ampro",
"amstrad",
@@ -1606,6 +1607,11 @@ files {
MAME_DIR .. "src/mame/drivers/hh_amis2k.cpp",
}
+createMESSProjects(_target, _subtarget, "amirix")
+files {
+ MAME_DIR .. "src/mame/drivers/wxstar4000.cpp",
+}
+
createMESSProjects(_target, _subtarget, "amiga")
files {
MAME_DIR .. "src/mame/drivers/amiga.cpp",
diff --git a/src/mame/drivers/wxstar4000.cpp b/src/mame/drivers/wxstar4000.cpp
new file mode 100644
index 00000000000..01d1040b3ab
--- /dev/null
+++ b/src/mame/drivers/wxstar4000.cpp
@@ -0,0 +1,143 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont
+/***************************************************************************
+
+ wxstar4000.cpp: WeatherSTAR 4000 cable head-end unit
+ 1990 Applied Microelectronics Institute (Amirix) / The Weather Channel
+ Skeleton driver by R. Belmont
+
+ This was used by cable companies in the US starting in 1990 to generate
+ graphics and text for the local weather forecast during The Weather Channel's
+ "Local on the 8s" segments.
+
+ There are 4 PCBs on a VME backplane:
+
+ - CPU board contains a 68010 CPU, RAM, and EEPROM
+ - Graphics board contains a 68010 CPU and an i8051 which manages the palette
+ and performs other functions. Framebuffer is 8 bits per pixel and the
+ framebuffer start position can be changed, possibly per-scanline.
+ - Data/Audio board contains an Intel P8344AH, which is an MCU containing an
+ i8051 and an SDLC decoder. The "audio" is a TTL circuit to create an
+ alert tone for severe weather conditions.
+ - I/O board contains an i8051 CPU, an i8251A UART and serial port for a modem,
+ and an AT-style keyboard interface and DIN connector.
+
+ RAM size routine at FE102E assumes bus error will stop it and set the flag
+ at 480. Bus error handler is at FE074E and does that, but it doesn't return
+ correctly, possibly because we aren't generating the correct stack frame
+ for a 68010?
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/m68000/m68000.h"
+#include "machine/gen_latch.h"
+#include "machine/nvram.h"
+#include "machine/timer.h"
+#include "emupal.h"
+#include "screen.h"
+#include "speaker.h"
+
+class wxstar4k_state : public driver_device
+{
+public:
+ wxstar4k_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_mainram(*this, "mainram")
+ { }
+
+ void wxstar4k(machine_config &config);
+
+private:
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void cpubd_main(address_map &map);
+
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
+ required_device<cpu_device> m_maincpu;
+ required_shared_ptr<uint16_t> m_mainram;
+
+ DECLARE_READ16_MEMBER(buserr_r)
+ {
+ m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE);
+ m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE);
+ return 0xffff;
+ }
+};
+
+void wxstar4k_state::video_start()
+{
+}
+
+uint32_t wxstar4k_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
+void wxstar4k_state::cpubd_main(address_map &map)
+{
+ // 4x M5M44400A fast-page DRAMs (1M x 4)
+ map(0x000000, 0x1fffff).ram().share("mainram");
+ map(0x100000, 0x100003).r(FUNC(wxstar4k_state::buserr_r));
+ map(0xfe0000, 0xffffff).rom().region("maincpu", 0);
+}
+
+static INPUT_PORTS_START( wxstar4k )
+INPUT_PORTS_END
+
+void wxstar4k_state::machine_start()
+{
+}
+
+void wxstar4k_state::machine_reset()
+{
+ u16 *RAM = (u16 *)m_mainram.target();
+ u16 *ROM = &memregion("maincpu")->as_u16();
+ memcpy(RAM, ROM, 0x400);
+}
+
+void wxstar4k_state::wxstar4k(machine_config &config)
+{
+ /* basic machine hardware */
+ M68010(config, m_maincpu, XTAL(20'000'000)/2); // 20 MHz crystal / 2 (QA output of a 74LS393)
+ m_maincpu->set_addrmap(AS_PROGRAM, &wxstar4k_state::cpubd_main);
+
+ /* video hardware */
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(59.62); /* verified on pcb */
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(40, 400-1, 16, 240-1);
+ screen.set_screen_update(FUNC(wxstar4k_state::screen_update));
+ screen.set_palette("palette");
+
+ PALETTE(config, "palette").set_format(palette_device::xBGR_888, 256);
+}
+
+ROM_START( wxstar4k )
+ ROM_REGION( 0x20000, "maincpu", 0 ) /* CPU board 68010 program */
+ ROM_LOAD16_BYTE( "u79 rom.bin", 0x000001, 0x010000, CRC(11df2d70) SHA1(ac6cdb5290c90b043562464dc001fc5e3d26f7c6) )
+ ROM_LOAD16_BYTE( "u80 rom.bin", 0x000000, 0x010000, CRC(23e15f22) SHA1(a630bda39c0beec7e7fc3834178ec8a6fece70c8) )
+
+ ROM_REGION(0x2000, "eeprom", 0 ) /* CPU board EEPROM */
+ ROM_LOAD( "u72 eeprom.bin", 0x000000, 0x002000, CRC(f775b4d6) SHA1(a0895177c381919f9bfd99ee35edde0dd5fa379c) )
+
+ ROM_REGION(0x2000, "datacpu", 0) /* P8344 (i8051 plus SDLC decoder) on Data board */
+ ROM_LOAD( "u12 rom.bin", 0x000000, 0x002000, CRC(f7d8432d) SHA1(0ff1dad65ecb4c3d8cb21feef56bbc6f06a2f712) )
+
+ ROM_REGION(0x8000, "iocpu", 0) /* i8051 on I/O board */
+ ROM_LOAD( "u11 rom.bin", 0x000000, 0x008000, CRC(f12cb28b) SHA1(3368f55717d8e9e7a06a4f241de02b7b2577b32b) )
+
+ ROM_REGION(0x2000, "gfxsubcpu", 0) /* i8051 sub-CPU on Graphics board */
+ ROM_LOAD( "u13 rom.bin", 0x000000, 0x002000, CRC(667b0a2b) SHA1(d60bcc271a73633544b0cf2f80589b2e5670b705) )
+
+ ROM_REGION(0x10000, "gfxcpu", 0) /* Graphics board 68010 program */
+ ROM_LOAD16_BYTE( "u42 rom low.bin", 0x000001, 0x008000, CRC(84038ca3) SHA1(b28a0d357d489fb06ff0d5d36ea11ebd1f9612a5) )
+ ROM_LOAD16_BYTE( "u43 rom high.bin", 0x000000, 0x008000, CRC(6f2a7592) SHA1(1aa2394db42b6f28277e35a48a7cef348c213e05) )
+ROM_END
+
+COMP( 1990, wxstar4k, 0, 0, wxstar4k, wxstar4k, wxstar4k_state, empty_init, "Applied Microelectronics Institute/The Weather Channel", "WeatherSTAR 4000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index ddf4c719509..9e133d26fd2 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -41092,6 +41092,9 @@ wwfsstaru7 // TA-0024 (c) 1989 (US, newer)
wwfsstaru6 // TA-0024 (c) 1989 (US)
wwfsstaru4 // TA-0024 (c) 1989 (US)
+@source:wxstar4000.cpp
+wxstar4k // 1990 Applied Microelectronics Research (Amirix) / The Weather Channel
+
@source:wy100.cpp
wy100 // WY-100