summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu
diff options
context:
space:
mode:
author Devin Acker <d@revenant1.net>2025-04-02 10:22:45 -0400
committer GitHub <noreply@github.com>2025-04-02 10:22:45 -0400
commit9349b16a17d6395e301c719af14b4428fee73421 (patch)
tree66c885b15f2f4df65e41d31820b702b0375e6c20 /src/devices/cpu
parent838bd064c617062f3c03e6f3255233ecdc98d373 (diff)
Add a skeleton for an Oldsmobile Driver Information System (#13525)
* New NOT_WORKING machine ---------- Oldsmobile Driver Information System (version 2.2 CH) [Devin Acker]
Diffstat (limited to 'src/devices/cpu')
-rw-r--r--src/devices/cpu/upd7810/upd7810.cpp13
-rw-r--r--src/devices/cpu/upd7810/upd7810.h10
-rw-r--r--src/devices/cpu/upd7810/upd7810_opcodes.cpp5
3 files changed, 27 insertions, 1 deletions
diff --git a/src/devices/cpu/upd7810/upd7810.cpp b/src/devices/cpu/upd7810/upd7810.cpp
index 0883dd3cc31..4f706c09a13 100644
--- a/src/devices/cpu/upd7810/upd7810.cpp
+++ b/src/devices/cpu/upd7810/upd7810.cpp
@@ -378,6 +378,7 @@ DEFINE_DEVICE_TYPE(UPD7810, upd7810_device, "upd7810", "NEC uPD7810")
DEFINE_DEVICE_TYPE(UPD78C10, upd78c10_device, "upd78c10", "NEC uPD78C10")
DEFINE_DEVICE_TYPE(UPD7811, upd7811_device, "upd7811", "NEC uPD7811")
DEFINE_DEVICE_TYPE(UPD78C11, upd78c11_device, "upd78c11", "NEC uPD78C11")
+DEFINE_DEVICE_TYPE(UPD78C14, upd78c14_device, "upd78c14", "NEC uPD78C14")
DEFINE_DEVICE_TYPE(UPD7807, upd7807_device, "upd7807", "NEC uPD7807")
DEFINE_DEVICE_TYPE(UPD7801, upd7801_device, "upd7801", "NEC uPD7801")
DEFINE_DEVICE_TYPE(UPD78C05, upd78c05_device, "upd78c05", "NEC uPD78C05")
@@ -408,6 +409,13 @@ void upd7810_device::upd_internal_4096_rom_256_ram_map(address_map &map)
m_ram_view[0](0xff00, 0xffff).ram();
}
+void upd7810_device::upd_internal_16k_rom_256_ram_map(address_map &map)
+{
+ map(0x0000, 0x3fff).rom();
+ map(0xff00, 0xffff).view(m_ram_view);
+ m_ram_view[0](0xff00, 0xffff).ram();
+}
+
upd7810_device::upd7810_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map)
: cpu_device(mconfig, type, tag, owner, clock)
, m_to_func(*this)
@@ -474,6 +482,11 @@ upd78c11_device::upd78c11_device(const machine_config &mconfig, const char *tag,
{
}
+upd78c14_device::upd78c14_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : upd78c10_device(mconfig, UPD78C14, tag, owner, clock, address_map_constructor(FUNC(upd78c14_device::upd_internal_16k_rom_256_ram_map), this))
+{
+}
+
void upd7807_device::configure_ops()
{
m_opXX = s_opXX_7807;
diff --git a/src/devices/cpu/upd7810/upd7810.h b/src/devices/cpu/upd7810/upd7810.h
index 9e07c77043b..cdda6dd8077 100644
--- a/src/devices/cpu/upd7810/upd7810.h
+++ b/src/devices/cpu/upd7810/upd7810.h
@@ -90,6 +90,7 @@ protected:
void upd_internal_256_ram_map(address_map &map) ATTR_COLD;
void upd_internal_4096_rom_128_ram_map(address_map &map) ATTR_COLD;
void upd_internal_4096_rom_256_ram_map(address_map &map) ATTR_COLD;
+ void upd_internal_16k_rom_256_ram_map(address_map &map) ATTR_COLD;
// flags
enum
@@ -1384,6 +1385,14 @@ public:
};
+class upd78c14_device : public upd78c10_device
+{
+public:
+ // construction/destruction
+ upd78c14_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
class upd7807_device : public upd7810_device
{
public:
@@ -1449,6 +1458,7 @@ DECLARE_DEVICE_TYPE(UPD7810, upd7810_device)
DECLARE_DEVICE_TYPE(UPD78C10, upd78c10_device)
DECLARE_DEVICE_TYPE(UPD7811, upd7811_device)
DECLARE_DEVICE_TYPE(UPD78C11, upd78c11_device)
+DECLARE_DEVICE_TYPE(UPD78C14, upd78c14_device)
DECLARE_DEVICE_TYPE(UPD7807, upd7807_device)
DECLARE_DEVICE_TYPE(UPD7801, upd7801_device)
DECLARE_DEVICE_TYPE(UPD78C05, upd78c05_device)
diff --git a/src/devices/cpu/upd7810/upd7810_opcodes.cpp b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
index 892db43bc33..f9580278be5 100644
--- a/src/devices/cpu/upd7810/upd7810_opcodes.cpp
+++ b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
@@ -309,7 +309,10 @@ void upd7810_device::DIV_A()
A = remainder;
}
else
- EA = 0xffff; /* guess */
+ {
+ A = EAL;
+ EA = 0xffff;
+ }
}
/* 48 3e: 0100 1000 0011 1110 */