diff options
Diffstat (limited to 'src/devices/machine/acorn_bmu.h')
-rw-r--r-- | src/devices/machine/acorn_bmu.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/devices/machine/acorn_bmu.h b/src/devices/machine/acorn_bmu.h new file mode 100644 index 00000000000..475404c2895 --- /dev/null +++ b/src/devices/machine/acorn_bmu.h @@ -0,0 +1,87 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************* + + Acorn Battery Management Unit + +*********************************************************************/ + +#ifndef MAME_MACHINE_ACORN_BMU_H +#define MAME_MACHINE_ACORN_BMU_H + +#pragma once + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> acorn_bmu_device + +class acorn_bmu_device : public device_t +{ +public: + acorn_bmu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + void scl_w(int state); + void sda_w(int state); + int sda_r(); + +protected: + // device-level overrides + virtual void device_start() override ATTR_COLD; + +private: + static constexpr uint8_t BMU_SLAVE_ADDRESS = 0xa2; + + // internal state + int m_slave_address; + int m_scl; + int m_sdaw; + int m_sdar; + int m_state; + int m_bits; + int m_shift; + int m_devsel; + int m_register; + + enum { STATE_IDLE, STATE_DEVSEL, STATE_REGISTER, STATE_DATAIN, STATE_DATAOUT, STATE_READSELACK }; + + // registers + enum + { + BMU_VERSION = 0x50, + BMU_TEMPERATURE = 0x52, + BMU_CURRENT = 0x54, + BMU_VOLTAGE = 0x56, + BMU_STATUS = 0x5c, + BMU_CHARGE_RATE = 0x5e, + BMU_CAPACITY_NOMINAL = 0x80, + BMU_CAPACITY_MEASURED = 0x82, + BMU_CAPACITY_USED = 0x88, + BMU_CAPACITY_USABLE = 0x8a, + BMU_CHARGE_ESTIMATE = 0x8e, + BMU_COMMAND = 0x90, + BMU_AUTOSTART = 0x9e + }; + + // flags + enum + { + STATUS_THRESHOLD_3 = 1 << 0, // Battery fully charged + STATUS_LID_OPEN = 1 << 1, // Lid open + STATUS_THRESHOLD_2 = 1 << 2, // Battery flat [shutdown now] + STATUS_THRESHOLD_1 = 1 << 3, // Battery low [warn user] + STATUS_CHARGING_FAULT = 1 << 4, // Fault in charging system + STATUS_CHARGE_STATE_KNOWN = 1 << 5, // Charge state known + STATUS_BATTERY_PRESENT = 1 << 6, // Battery present + STATUS_CHARGER_PRESENT = 1 << 7 // Charger present + }; + + uint8_t m_estimate; +}; + +// device type definition +DECLARE_DEVICE_TYPE(ACORN_BMU, acorn_bmu_device) + +#endif // MAME_MACHINE_ACORN_BMU_H |