commit 43912b2a127e7499de0baabe3af849379f35d45a
parent 34c9eaf92356fc9fbdc276a01ad88ac183c74c03
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sat, 20 Jul 2024 03:45:15 +0200
begin front panel & keyboard classes
Diffstat:
9 files changed, 128 insertions(+), 25 deletions(-)
diff --git a/source/nord/n2x/n2xLib/CMakeLists.txt b/source/nord/n2x/n2xLib/CMakeLists.txt
@@ -8,8 +8,10 @@ set(SOURCES
i2c.cpp i2c.h
n2xdevice.cpp n2xdevice.h
n2xdsp.cpp n2xdsp.h
+ n2xfrontpanel.cpp n2xfrontpanel.h
n2xhardware.cpp n2xhardware.h
n2xi2cflash.cpp n2xi2cflash.h
+ n2xkeyboard.cpp n2xkeyboard.h
n2xmc.cpp n2xmc.h
n2xmiditypes.h
n2xrom.cpp n2xrom.h
diff --git a/source/nord/n2x/n2xLib/n2xdevice.cpp b/source/nord/n2x/n2xLib/n2xdevice.cpp
@@ -0,0 +1,5 @@
+#include "n2xdevice.h"
+
+namespace n2x
+{
+}
diff --git a/source/nord/n2x/n2xLib/n2xfrontpanel.cpp b/source/nord/n2x/n2xLib/n2xfrontpanel.cpp
@@ -0,0 +1,15 @@
+#include "n2xfrontpanel.h"
+
+namespace n2x
+{
+ template class FrontPanelCS<g_frontPanelAddressCS4>;
+ template class FrontPanelCS<g_frontPanelAddressCS6>;
+
+ template <uint32_t Base> FrontPanelCS<Base>::FrontPanelCS(FrontPanel& _fp): m_panel(_fp)
+ {
+ }
+
+ FrontPanel::FrontPanel(): m_cs4(*this), m_cs6(*this)
+ {
+ }
+}
diff --git a/source/nord/n2x/n2xLib/n2xfrontpanel.h b/source/nord/n2x/n2xLib/n2xfrontpanel.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#include "n2xtypes.h"
+#include "mc68k/peripheralBase.h"
+
+namespace n2x
+{
+ class FrontPanel;
+
+ template<uint32_t Base>
+ class FrontPanelCS : public mc68k::PeripheralBase<Base, g_frontPanelSize>
+ {
+ public:
+ explicit FrontPanelCS(FrontPanel& _fp);
+
+ private:
+ FrontPanel& m_panel;
+ };
+
+ using FrontPanelCS4 = FrontPanelCS<g_frontPanelAddressCS4>;
+ using FrontPanelCS6 = FrontPanelCS<g_frontPanelAddressCS6>;
+
+ class FrontPanel
+ {
+ public:
+ FrontPanel();
+
+ auto& cs4() { return m_cs4; }
+ auto& cs6() { return m_cs6; }
+
+ bool isInRange(const mc68k::PeriphAddress _pa) const
+ {
+ return m_cs4.isInRange(_pa) || m_cs6.isInRange(_pa);
+ }
+
+ private:
+ FrontPanelCS4 m_cs4;
+ FrontPanelCS6 m_cs6;
+ };
+}
diff --git a/source/nord/n2x/n2xLib/n2xkeyboard.cpp b/source/nord/n2x/n2xLib/n2xkeyboard.cpp
@@ -0,0 +1,5 @@
+#include "n2xkeyboard.h"
+
+namespace n2x
+{
+}
diff --git a/source/nord/n2x/n2xLib/n2xkeyboard.h b/source/nord/n2x/n2xLib/n2xkeyboard.h
@@ -0,0 +1,5 @@
+#pragma once
+
+namespace n2x
+{
+}
diff --git a/source/nord/n2x/n2xLib/n2xmc.cpp b/source/nord/n2x/n2xLib/n2xmc.cpp
@@ -96,6 +96,7 @@ namespace n2x
assert(!m_hdi08A.isInRange(pa));
assert(!m_hdi08B.isInRange(pa));
+ assert(!m_panel.isInRange(pa));
return 0;
}
@@ -110,16 +111,16 @@ namespace n2x
if(m_hdi08A.isInRange(pa)) return m_hdi08A.read16(pa);
if(m_hdi08B.isInRange(pa)) return m_hdi08B.read16(pa);
- if(_addr >= g_frontPanelAddressA && _addr < g_frontPanelAddressA + g_frontPanelSize)
+ if(m_panel.cs4().isInRange(pa))
{
- LOG("Read Frontpanel A " << HEX(_addr));
- return 0;
+ LOG("Read Frontpanel CS4 " << HEX(_addr));
+ return m_panel.cs4().read16(pa);
}
- if(_addr >= g_frontPanelAddressB && _addr < g_frontPanelAddressB + g_frontPanelSize)
+ if(m_panel.cs6().isInRange(pa))
{
- LOG("Read Frontpanel B " << HEX(_addr));
- return 0;
+ LOG("Read Frontpanel CS6 " << HEX(_addr));
+ return m_panel.cs6().read16(pa);
}
if(_addr >= g_keyboardAddress && _addr < g_keyboardAddress + g_keyboardSize)
@@ -141,16 +142,16 @@ namespace n2x
if(m_hdi08A.isInRange(pa)) return m_hdi08A.read8(pa);
if(m_hdi08B.isInRange(pa)) return m_hdi08B.read8(pa);
- if(_addr >= g_frontPanelAddressA && _addr < g_frontPanelAddressA + g_frontPanelSize)
+ if(m_panel.cs4().isInRange(pa))
{
- LOG("Read Frontpanel A " << HEX(_addr));
- return 0xff;
+ LOG("Read Frontpanel CS4 " << HEX(_addr));
+ return 0xff;//m_panel.cs4().read8(pa);
}
- if(_addr >= g_frontPanelAddressB && _addr < g_frontPanelAddressB + g_frontPanelSize)
+ if(m_panel.cs6().isInRange(pa))
{
- LOG("Read Frontpanel B " << HEX(_addr));
- return 0xff;
+ LOG("Read Frontpanel CS6 " << HEX(_addr));
+ return m_panel.cs6().read8(pa);
}
if(_addr >= g_keyboardAddress && _addr < g_keyboardAddress + g_keyboardSize)
@@ -190,6 +191,20 @@ namespace n2x
return;
}
+ if(m_panel.cs4().isInRange(pa))
+ {
+ LOG("Write Frontpanel CS4 " << HEX(_addr) << "=" << HEXN(_val, 4));
+ m_panel.cs4().write16(pa, _val);
+ return;
+ }
+
+ if(m_panel.cs6().isInRange(pa))
+ {
+ LOG("Write Frontpanel CS6 " << HEX(_addr) << "=" << HEXN(_val, 4));
+ m_panel.cs6().write16(pa, _val);
+ return;
+ }
+
Mc68k::write16(_addr, _val);
}
@@ -220,6 +235,20 @@ namespace n2x
m_hdi08B.write8(pa, _val);
return;
}
+
+ if(m_panel.cs4().isInRange(pa))
+ {
+ LOG("Write Frontpanel CS4 " << HEX(_addr) << "=" << HEXN(_val, 2));
+ m_panel.cs4().write8(pa, _val);
+ return;
+ }
+
+ if(m_panel.cs6().isInRange(pa))
+ {
+ LOG("Write Frontpanel CS6 " << HEX(_addr) << "=" << HEXN(_val, 2));
+ m_panel.cs6().write8(pa, _val);
+ return;
+ }
Mc68k::write8(_addr, _val);
}
diff --git a/source/nord/n2x/n2xLib/n2xmc.h b/source/nord/n2x/n2xLib/n2xmc.h
@@ -1,5 +1,6 @@
#pragma once
+#include "n2xfrontpanel.h"
#include "n2xi2cflash.h"
#include "n2xtypes.h"
#include "mc68k/hdi08.h"
@@ -42,6 +43,7 @@ namespace n2x
Hdi08DspA m_hdi08A;
Hdi08DspB m_hdi08B;
+ FrontPanel m_panel;
uint32_t m_prevPC;
wLib::Midi m_midi;
diff --git a/source/nord/n2x/n2xLib/n2xtypes.h b/source/nord/n2x/n2xLib/n2xtypes.h
@@ -19,22 +19,22 @@ namespace n2x
CSBOOT = BootROM $?????? $?????
*/
- static constexpr uint32_t g_romSize = 1024 * 512;
- static constexpr uint32_t g_ramSize = 1024 * 256;
- static constexpr uint32_t g_flashSize = 1024 * 64;
+ static constexpr uint32_t g_romSize = 1024 * 512;
+ static constexpr uint32_t g_ramSize = 1024 * 256;
+ static constexpr uint32_t g_flashSize = 1024 * 64;
- static constexpr uint32_t g_pcInitial = 0xc2;
+ static constexpr uint32_t g_pcInitial = 0xc2;
- static constexpr uint32_t g_romAddress = 0;
- static constexpr uint32_t g_ramAddress = 0x100000;
+ static constexpr uint32_t g_romAddress = 0;
+ static constexpr uint32_t g_ramAddress = 0x100000;
- static constexpr uint32_t g_dspAAddress = 0x200008;
- static constexpr uint32_t g_dspBAddress = 0x200010;
+ static constexpr uint32_t g_dspAAddress = 0x200008;
+ static constexpr uint32_t g_dspBAddress = 0x200010;
- static constexpr uint32_t g_frontPanelAddressA = 0x202800;
- static constexpr uint32_t g_frontPanelAddressB = 0x202000;
- static constexpr uint32_t g_keyboardAddress = 0x203000;
+ static constexpr uint32_t g_frontPanelAddressCS4 = 0x202800;
+ static constexpr uint32_t g_frontPanelAddressCS6 = 0x202000;
+ static constexpr uint32_t g_keyboardAddress = 0x203000;
- static constexpr uint32_t g_frontPanelSize = 0x800;
- static constexpr uint32_t g_keyboardSize = 0x800;
+ static constexpr uint32_t g_frontPanelSize = 0x800;
+ static constexpr uint32_t g_keyboardSize = 0x800;
}