mirror of
https://github.com/dingusdev/dingusppc.git
synced 2025-01-11 05:29:43 +00:00
machineid: implement BoardRegister class.
This commit is contained in:
parent
858f699750
commit
a1ad0a3e07
@ -39,6 +39,8 @@ enum HWCompType : uint64_t {
|
|||||||
I2C_DEV = 1ULL << 9, // I2C device
|
I2C_DEV = 1ULL << 9, // I2C device
|
||||||
ADB_HOST = 1ULL << 12, // ADB host
|
ADB_HOST = 1ULL << 12, // ADB host
|
||||||
ADB_DEV = 1ULL << 13, // ADB device
|
ADB_DEV = 1ULL << 13, // ADB device
|
||||||
|
IOBUS_HOST = 1ULL << 14, // IOBus host
|
||||||
|
IOBUS_DEV = 1ULL << 15, // IOBus device
|
||||||
INT_CTRL = 1ULL << 16, // interrupt controller
|
INT_CTRL = 1ULL << 16, // interrupt controller
|
||||||
SCSI_BUS = 1ULL << 20, // SCSI bus
|
SCSI_BUS = 1ULL << 20, // SCSI bus
|
||||||
SCSI_HOST = 1ULL << 21, // SCSI host adapter
|
SCSI_HOST = 1ULL << 21, // SCSI host adapter
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
DingusPPC - The Experimental PowerPC Macintosh emulator
|
DingusPPC - The Experimental PowerPC Macintosh emulator
|
||||||
Copyright (C) 2018-21 divingkatae and maximum
|
Copyright (C) 2018-23 divingkatae and maximum
|
||||||
(theweirdo) spatium
|
(theweirdo) spatium
|
||||||
|
|
||||||
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
|
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
|
||||||
@ -24,8 +24,10 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include <devices/common/hwcomponent.h>
|
#include <devices/common/hwcomponent.h>
|
||||||
#include <devices/common/mmiodevice.h>
|
#include <devices/common/mmiodevice.h>
|
||||||
|
#include <devices/ioctrl/macio.h>
|
||||||
|
|
||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@file Contains definitions for PowerMacintosh machine ID registers.
|
@file Contains definitions for PowerMacintosh machine ID registers.
|
||||||
@ -66,6 +68,36 @@ private:
|
|||||||
uint8_t id[4];
|
uint8_t id[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
TNT-style machines and derivatives provide two board registers
|
||||||
|
telling whether some particular piece of HW is installed or not.
|
||||||
|
Both board registers are attached to the IOBus of the I/O controller.
|
||||||
|
See machines/machinetnt.cpp for further details.
|
||||||
|
**/
|
||||||
|
class BoardRegister : public HWComponent, public IobusDevice {
|
||||||
|
public:
|
||||||
|
BoardRegister(std::string name, const uint16_t data) {
|
||||||
|
this->set_name(name);
|
||||||
|
supports_types(HWCompType::IOBUS_DEV);
|
||||||
|
this->data = data;
|
||||||
|
};
|
||||||
|
~BoardRegister() = default;
|
||||||
|
|
||||||
|
uint16_t iodev_read(uint32_t address) {
|
||||||
|
return (!address) ? this->data : 0xFFFFU;
|
||||||
|
};
|
||||||
|
|
||||||
|
// appears read-only to guest
|
||||||
|
void iodev_write(uint32_t address, uint16_t value) {};
|
||||||
|
|
||||||
|
void update_bits(const uint16_t val, const uint16_t mask) {
|
||||||
|
this->data = (this->data & ~mask) | (val & mask);
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint16_t data;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The machine ID for the Gossamer board is accesible at 0xFF000004 (phys).
|
The machine ID for the Gossamer board is accesible at 0xFF000004 (phys).
|
||||||
It contains a 16-bit value revealing machine's capabilities like bus speed,
|
It contains a 16-bit value revealing machine's capabilities like bus speed,
|
||||||
@ -92,4 +124,4 @@ private:
|
|||||||
uint16_t id;
|
uint16_t id;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* MACHINE_ID_H */
|
#endif // MACHINE_ID_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user