diff options
Diffstat (limited to 'SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp')
-rw-r--r-- | SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp | 210 |
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; +} |