mirror of
https://github.com/holub/mame
synced 2025-04-17 22:13:04 +03:00
psion/psion.cpp: Consolidated into single file, and removed runtime tag lookups.
- Simplified ROM/RAM banking. - Added Alpha and Numerical keyboards for POS variants. - Applied software list filters. - Added topslot for Organiser II variants. - Removed fake LZ64S model, ROMs moved to LZ64. psion/psion_pack.cpp: Allow setting image_interface. New working clones ------------------ Organiser II Alpha POS 200 [Nigel Barnes, Jaap Scherphuis] Organiser II P 250 [Nigel Barnes, Jaap Scherphuis] Organiser II P 432 [Nigel Barnes, Jaap Scherphuis]
This commit is contained in:
parent
0e2241ef0a
commit
cbe7391c95
@ -39095,9 +39095,11 @@ psionla
|
||||
psionlam
|
||||
psionlz
|
||||
psionlz64
|
||||
psionlz64s
|
||||
psionp200
|
||||
psionp200a
|
||||
psionp250
|
||||
psionp350
|
||||
psionp432
|
||||
psionp464
|
||||
psionxp
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,120 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Sandro Ronco
|
||||
/***************************************************************************
|
||||
|
||||
Psion Organiser II series
|
||||
|
||||
****************************************************************************/
|
||||
#ifndef MAME_PSION_PSION_H
|
||||
#define MAME_PSION_PSION_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cpu/m6800/m6801.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "psion_pack.h"
|
||||
#include "machine/timer.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "sound/beep.h"
|
||||
#include "emupal.h"
|
||||
|
||||
|
||||
// ======================> psion_state
|
||||
|
||||
class psion_state : public driver_device
|
||||
{
|
||||
public:
|
||||
psion_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_lcdc(*this, "hd44780")
|
||||
, m_beep(*this, "beeper")
|
||||
, m_pack1(*this, "pack1")
|
||||
, m_pack2(*this, "pack2")
|
||||
, m_nvram1(*this, "nvram1")
|
||||
, m_nvram2(*this, "nvram2")
|
||||
, m_ram(*this, "ram")
|
||||
, m_kb_lines(*this, "K%u", 1U)
|
||||
{ }
|
||||
|
||||
void psion_2lines(machine_config &config);
|
||||
void psion_4lines(machine_config &config);
|
||||
void psionlam(machine_config &config);
|
||||
void psioncm(machine_config &config);
|
||||
void psionlz(machine_config &config);
|
||||
void psionla(machine_config &config);
|
||||
void psionp350(machine_config &config);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(psion_on);
|
||||
|
||||
protected:
|
||||
required_device<hd6301x_cpu_device> m_maincpu;
|
||||
required_device<hd44780_device> m_lcdc;
|
||||
required_device<beep_device> m_beep;
|
||||
required_device<datapack_device> m_pack1;
|
||||
required_device<datapack_device> m_pack2;
|
||||
required_device<nvram_device> m_nvram1;
|
||||
optional_device<nvram_device> m_nvram2;
|
||||
|
||||
uint16_t m_kb_counter = 0;
|
||||
bool m_enable_nmi = false;
|
||||
uint8_t m_pulse = 0;
|
||||
|
||||
// RAM/ROM banks
|
||||
required_shared_ptr<uint8_t> m_ram;
|
||||
std::unique_ptr<uint8_t[]> m_paged_ram;
|
||||
uint8_t m_rom_bank = 0;
|
||||
uint8_t m_ram_bank = 0;
|
||||
uint8_t m_ram_bank_count = 0;
|
||||
uint8_t m_rom_bank_count = 0;
|
||||
|
||||
required_ioport_array<7> m_kb_lines;
|
||||
|
||||
virtual void machine_start() override ATTR_COLD;
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
void nvram_init(nvram_device &nvram, void *data, size_t size);
|
||||
|
||||
uint8_t kb_read();
|
||||
void update_banks();
|
||||
void port2_w(offs_t offset, uint8_t data, uint8_t ddr);
|
||||
uint8_t port2_r();
|
||||
uint8_t port5_r();
|
||||
void port6_w(uint8_t data);
|
||||
uint8_t port6_r();
|
||||
void io_rw(uint16_t offset);
|
||||
void io_w(offs_t offset, uint8_t data);
|
||||
uint8_t io_r(offs_t offset);
|
||||
void psion_palette(palette_device &palette) const;
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(nmi_timer);
|
||||
|
||||
HD44780_PIXEL_UPDATE(lz_pixel_update);
|
||||
void psion_int_reg(address_map &map) ATTR_COLD;
|
||||
void psioncm_mem(address_map &map) ATTR_COLD;
|
||||
void psionla_mem(address_map &map) ATTR_COLD;
|
||||
void psionlam_mem(address_map &map) ATTR_COLD;
|
||||
void psionlz_mem(address_map &map) ATTR_COLD;
|
||||
void psionp350_mem(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
|
||||
class psion1_state : public psion_state
|
||||
{
|
||||
public:
|
||||
psion1_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: psion_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void psion1(machine_config &config);
|
||||
|
||||
private:
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
|
||||
uint8_t reset_kb_counter_r();
|
||||
uint8_t inc_kb_counter_r();
|
||||
uint8_t switchoff_r();
|
||||
|
||||
HD44780_PIXEL_UPDATE(psion1_pixel_update);
|
||||
void psion1_mem(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
#endif // MAME_PSION_PSION_H
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sandro Ronco
|
||||
/****************************************************************************
|
||||
|
||||
psion_pack.c
|
||||
psion_pack.cpp
|
||||
|
||||
Psion Organiser II Datapack emulation
|
||||
|
||||
@ -67,6 +67,7 @@ DEFINE_DEVICE_TYPE(PSION_DATAPACK, datapack_device, "datapack", "Psion Datapack"
|
||||
datapack_device::datapack_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, PSION_DATAPACK, tag, owner, clock)
|
||||
, device_memcard_image_interface(mconfig, *this)
|
||||
, m_interface(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -23,16 +23,18 @@ class datapack_device : public device_t,
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
datapack_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
datapack_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
|
||||
virtual ~datapack_device();
|
||||
|
||||
void set_interface(const char *interface) { m_interface = interface; }
|
||||
|
||||
// device_image_interface implementation
|
||||
virtual std::pair<std::error_condition, std::string> call_load() override;
|
||||
virtual void call_unload() override;
|
||||
virtual std::pair<std::error_condition, std::string> call_create(int format_type, util::option_resolution *create_args) override;
|
||||
|
||||
virtual bool is_reset_on_load() const noexcept override { return false; }
|
||||
virtual const char *image_interface() const noexcept override { return "psion_pack"; }
|
||||
virtual const char *image_interface() const noexcept override { return m_interface; }
|
||||
virtual const char *file_extensions() const noexcept override { return "opk"; }
|
||||
virtual const char *image_type_name() const noexcept override { return "datapack"; }
|
||||
virtual const char *image_brief_type_name() const noexcept override { return "dpak"; }
|
||||
@ -64,6 +66,8 @@ private:
|
||||
uint16_t m_counter = 0; //address counter
|
||||
uint8_t m_page = 0; //active page (only for paged Datapack)
|
||||
uint8_t m_segment = 0; //active segment (only for segmented Datapack)
|
||||
|
||||
const char *m_interface;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user