aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp')
-rw-r--r--SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp210
1 files changed, 210 insertions, 0 deletions
diff --git a/SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp b/SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp
new file mode 100644
index 0000000..6f0bc8b
--- /dev/null
+++ b/SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp
@@ -0,0 +1,210 @@
+/* -*- mode: C++; tab-width: 4 -*- */
+/* ===================================================================== *\
+ Copyright (c) 2000-2001 Palm, Inc. or its subsidiaries.
+ All rights reserved.
+
+ This file is part of the Palm OS Emulator.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+\* ===================================================================== */
+
+#include "EmCommon.h"
+#include "EmRegsPLDPalmVIIEZ.h"
+
+#include "EmHAL.h" // EmHAL::GetSerialPortOn
+
+#define NON_PORTABLE
+#include "EZSumo/IncsPrv/HardwareEZ.h" // hwrJerryPldBase, hwrJerryPld232Enable
+#undef NON_PORTABLE
+
+// Given a register (specified by its field name), return its address
+// in emulated space.
+
+#define addressof(reg) \
+ (this->GetAddressStart () + fRegs.offsetof_##reg ())
+
+
+// Macro to help the installation of handlers for a register.
+
+#define INSTALL_HANDLER(read, write, reg) \
+ this->SetHandler ( (ReadFunction) &EmRegsPLDPalmVIIEZ::read, \
+ (WriteFunction) &EmRegsPLDPalmVIIEZ::write, \
+ addressof (reg), \
+ fRegs.reg.GetSize ())
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::EmRegsPLDPalmVIIEZ
+// ---------------------------------------------------------------------------
+
+EmRegsPLDPalmVIIEZ::EmRegsPLDPalmVIIEZ (void)
+{
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::~EmRegsPLDPalmVIIEZ
+// ---------------------------------------------------------------------------
+
+EmRegsPLDPalmVIIEZ::~EmRegsPLDPalmVIIEZ (void)
+{
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::Initialize
+// ---------------------------------------------------------------------------
+
+void EmRegsPLDPalmVIIEZ::Initialize (void)
+{
+ EmRegs::Initialize ();
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::Reset
+// ---------------------------------------------------------------------------
+
+void EmRegsPLDPalmVIIEZ::Reset (Bool hardwareReset)
+{
+ EmRegs::Reset (hardwareReset);
+
+ if (hardwareReset)
+ {
+ memset (fRegs.GetPtr (), 0, fRegs.GetSize ());
+ }
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::Save
+// ---------------------------------------------------------------------------
+
+void EmRegsPLDPalmVIIEZ::Save (SessionFile& f)
+{
+ EmRegs::Save (f);
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::Load
+// ---------------------------------------------------------------------------
+
+void EmRegsPLDPalmVIIEZ::Load (SessionFile& f)
+{
+ EmRegs::Load (f);
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::Dispose
+// ---------------------------------------------------------------------------
+
+void EmRegsPLDPalmVIIEZ::Dispose (void)
+{
+ EmRegs::Dispose ();
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::GetSerialPortOn
+// ---------------------------------------------------------------------------
+
+Bool EmRegsPLDPalmVIIEZ::GetSerialPortOn (int /*uartNum*/)
+{
+ return (fRegs.rs232Shdn & hwrJerryPld232Enable) != 0;
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::SetSubBankHandlers
+// ---------------------------------------------------------------------------
+
+void EmRegsPLDPalmVIIEZ::SetSubBankHandlers (void)
+{
+ // Install base handlers.
+
+ EmRegs::SetSubBankHandlers ();
+
+ // Now add standard/specialized handers for the defined registers.
+
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, dspOn);
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, chargeOn);
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, refOn);
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, pipaBiasEnable);
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, dspReset);
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, ezToDsl);
+ INSTALL_HANDLER (StdReadBE, rs232ShdnWrite, rs232Shdn);
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, spareOut);
+ INSTALL_HANDLER (StdReadBE, StdWriteBE, dTo3Sln);
+ INSTALL_HANDLER (iXtrnl2Read, StdWriteBE, iXtrnl2);
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::GetRealAddress
+// ---------------------------------------------------------------------------
+
+uint8* EmRegsPLDPalmVIIEZ::GetRealAddress (emuptr address)
+{
+ return (uint8*) fRegs.GetPtr () + address - this->GetAddressStart ();
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::GetAddressStart
+// ---------------------------------------------------------------------------
+
+emuptr EmRegsPLDPalmVIIEZ::GetAddressStart (void)
+{
+ return hwrJerryPldBase;
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::GetAddressRange
+// ---------------------------------------------------------------------------
+
+uint32 EmRegsPLDPalmVIIEZ::GetAddressRange (void)
+{
+ return fRegs.GetSize ();
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::rs232ShdnWrite
+// ---------------------------------------------------------------------------
+
+void EmRegsPLDPalmVIIEZ::rs232ShdnWrite (emuptr address, int size, uint32 value)
+{
+ // Take a snapshot of the line driver states.
+
+ Bool driverStates[kUARTEnd];
+ EmHAL::GetLineDriverStates (driverStates);
+
+ StdWriteBE (address, size, value);
+
+ // Respond to any changes in the line driver states.
+
+ EmHAL::CompareLineDriverStates (driverStates);
+}
+
+
+// ---------------------------------------------------------------------------
+// ¥ EmRegsPLDPalmVIIEZ::iXtrnl2Read
+// ---------------------------------------------------------------------------
+
+uint32 EmRegsPLDPalmVIIEZ::iXtrnl2Read (emuptr address, int size)
+{
+ uint32 result = StdReadBE (address, size);
+
+ // Ensure that bit 0x0080 is set. If it's clear, HotSync
+ // will sync via the modem instead of the serial port.
+
+ result |= 0x0080;
+
+ return result;
+}