From f82d5e39b7cb3067f9e4a16f2d3b09f75dae9e03 Mon Sep 17 00:00:00 2001 From: Sandro Ronco Date: Sat, 19 Jul 2014 17:56:32 +0000 Subject: [PATCH] (MESS) New NOT_WORKING system ---------------------------------- Psion Organiser I (MESS) New WORKING system: ---------------------------------- Psion Organiser II XP Psion Organiser II P200 --- src/mess/drivers/psion.c | 184 ++++++++++++++++++++++++++++++++++++-- src/mess/includes/psion.h | 17 ++++ src/mess/mess.lst | 3 + 3 files changed, 199 insertions(+), 5 deletions(-) diff --git a/src/mess/drivers/psion.c b/src/mess/drivers/psion.c index 4ee5413a0aa..9bc5bac3ee9 100644 --- a/src/mess/drivers/psion.c +++ b/src/mess/drivers/psion.c @@ -222,6 +222,40 @@ INPUT_CHANGED_MEMBER(psion_state::psion_on) m_maincpu->reset(); } +READ8_MEMBER( psion1_state::reset_kb_counter_r ) +{ + m_kb_counter = 0; + return 0; +} + +READ8_MEMBER( psion1_state::inc_kb_counter_r ) +{ + m_kb_counter++; + return 0; +} + +READ8_MEMBER( psion1_state::switchoff_r ) +{ + if (!m_stby_pwr) + { + m_stby_pwr = 1; + m_maincpu->reset(); + } + return 0; +} + +static ADDRESS_MAP_START(psion1_mem, AS_PROGRAM, 8, psion1_state) + AM_RANGE(0x0000, 0x001f) AM_READWRITE(hd63701_int_reg_r, hd63701_int_reg_w) + AM_RANGE(0x0040, 0x00ff) AM_RAM AM_SHARE("sys_register") + AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x07fe) AM_DEVREADWRITE("hd44780", hd44780_device, control_read, control_write) + AM_RANGE(0x2001, 0x2001) AM_MIRROR(0x07fe) AM_DEVREADWRITE("hd44780", hd44780_device, data_read, data_write) + AM_RANGE(0x2800, 0x2800) AM_READ(reset_kb_counter_r) + AM_RANGE(0x2e00, 0x2e00) AM_READ(switchoff_r) + AM_RANGE(0x3000, 0x3000) AM_READ(inc_kb_counter_r) + AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("ram") + AM_RANGE(0xf000, 0xffff) AM_ROM +ADDRESS_MAP_END + static ADDRESS_MAP_START(psioncm_mem, AS_PROGRAM, 8, psion_state) ADDRESS_MAP_UNMAP_LOW AM_RANGE(0x0000, 0x001f) AM_READWRITE(hd63701_int_reg_r, hd63701_int_reg_w) @@ -331,6 +365,65 @@ INPUT_PORTS_START( psion ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D [)]") PORT_CODE(KEYCODE_D) INPUT_PORTS_END +INPUT_PORTS_START( psion1 ) + PORT_START("BATTERY") + PORT_CONFNAME( 0x01, 0x00, "Battery Status" ) + PORT_CONFSETTING( 0x00, DEF_STR( Normal ) ) + PORT_CONFSETTING( 0x01, "Low Battery" ) + + PORT_START("ON") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ON/CLEAR") PORT_CODE(KEYCODE_MINUS) PORT_CHANGED_MEMBER(DEVICE_SELF, psion_state, psion_on, 0) + + PORT_START("K1") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down [NUM]") PORT_CODE(KEYCODE_DOWN) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up [CAP]") PORT_CODE(KEYCODE_UP) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("MODE") PORT_CODE(KEYCODE_EQUALS) + + PORT_START("K2") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S [;]") PORT_CODE(KEYCODE_S) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M [,]") PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G [=]") PORT_CODE(KEYCODE_G) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A [<]") PORT_CODE(KEYCODE_A) + + PORT_START("K3") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y [0]") PORT_CODE(KEYCODE_Y) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T [:]") PORT_CODE(KEYCODE_T) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N [$]") PORT_CODE(KEYCODE_N) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H [\"]") PORT_CODE(KEYCODE_H) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B [>]") PORT_CODE(KEYCODE_B) + + PORT_START("K4") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z [.]") PORT_CODE(KEYCODE_Z) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U [1]") PORT_CODE(KEYCODE_U) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O [4]") PORT_CODE(KEYCODE_O) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I [7]") PORT_CODE(KEYCODE_I) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C [(]") PORT_CODE(KEYCODE_C) + + PORT_START("K5") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W [3]") PORT_CODE(KEYCODE_W) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q [6]") PORT_CODE(KEYCODE_Q) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K [9]") PORT_CODE(KEYCODE_K) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E [%]") PORT_CODE(KEYCODE_E) + + PORT_START("K6") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("EXE") PORT_CODE(KEYCODE_ENTER) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X [+]") PORT_CODE(KEYCODE_X) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R [-]") PORT_CODE(KEYCODE_R) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L [*]") PORT_CODE(KEYCODE_L) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F [/]") PORT_CODE(KEYCODE_F) + + PORT_START("K7") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V [2]") PORT_CODE(KEYCODE_V) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P [5]") PORT_CODE(KEYCODE_P) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J [8]") PORT_CODE(KEYCODE_J) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D [)]") PORT_CODE(KEYCODE_D) +INPUT_PORTS_END + void psion_state::nvram_init(nvram_device &nvram, void *data, size_t size) { @@ -346,11 +439,6 @@ void psion_state::machine_start() m_rom_bank_count = 3; m_ram_bank_count = 0; } - else if (!strcmp(machine().system().name, "psionp350")) - { - m_rom_bank_count = 0; - m_ram_bank_count = 5; - } else if (!strncmp(machine().system().name, "psionlz", 7)) { m_rom_bank_count = 3; @@ -361,6 +449,11 @@ void psion_state::machine_start() m_rom_bank_count = 3; m_ram_bank_count = 9; } + else if (!strncmp(machine().system().name, "psionp", 6)) + { + m_rom_bank_count = 0; + m_ram_bank_count = 5; + } else { m_rom_bank_count = 0; @@ -415,6 +508,11 @@ void psion_state::machine_reset() update_banks(); } +void psion1_state::machine_reset() +{ + psion_state::machine_reset(); + m_enable_nmi = 1; +} HD44780_PIXEL_UPDATE(psion_state::lz_pixel_update) { @@ -433,6 +531,12 @@ HD44780_PIXEL_UPDATE(psion_state::lz_pixel_update) } } +HD44780_PIXEL_UPDATE(psion1_state::psion1_pixel_update) +{ + if (pos < 8 && line < 2) + bitmap.pix16(y, (line * 8 + pos) * 6 + x) = state; +} + PALETTE_INIT_MEMBER(psion_state, psion) { palette.set_pen_color(0, rgb_t(138, 146, 148)); @@ -506,6 +610,22 @@ static MACHINE_CONFIG_DERIVED( psion_4lines, psion_2lines ) MCFG_HD44780_PIXEL_UPDATE_CB(psion_state::lz_pixel_update) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED_CLASS( psion1, psion_2lines, psion1_state ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(psion1_mem) + + MCFG_DEVICE_MODIFY("nmi_timer") + MCFG_TIMER_START_DELAY(attotime::from_seconds(1)) + + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_SIZE(6*16, 1*8) + MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 8*1-1) + + MCFG_DEVICE_MODIFY("hd44780") + MCFG_HD44780_LCD_SIZE(1, 16) + MCFG_HD44780_PIXEL_UPDATE_CB(psion1_state::psion1_pixel_update) +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( psioncm, psion_2lines ) MCFG_CPU_MODIFY("maincpu") @@ -541,16 +661,53 @@ static MACHINE_CONFIG_DERIVED( psionlz, psion_4lines ) MACHINE_CONFIG_END /* ROM definition */ + +ROM_START( psion1 ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_SYSTEM_BIOS(0, "v1", "Organiser I") + ROMX_LOAD( "psion1.rom", 0xf000, 0x1000, CRC(7e2609c1) SHA1(a3320ea8ac3ab9e0039ee16f7c571731adde5869), ROM_BIOS(1)) +ROM_END + ROM_START( psioncm ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "v24", "CM v2.4") ROMX_LOAD( "24-cm.dat", 0x8000, 0x8000, CRC(f6798394) SHA1(736997f0db9a9ee50d6785636bdc3f8ff1c33c66), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "v26", "CM v2.6") + ROMX_LOAD( "26-cm.rom", 0x8000, 0x8000, CRC(21b7c94c) SHA1(e0a3168c96a3f0b37b8698e86574e40597fe3c62), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(2, "v33", "CM v3.3") + ROMX_LOAD( "33-cm.rom", 0x8000, 0x8000, CRC(5c10b167) SHA1(6deea00fe648bddae1d61a22858023bc80277ea0), ROM_BIOS(3)) + ROM_SYSTEM_BIOS(3, "v33f","CM v3.3 French") + ROMX_LOAD( "33-cmf.rom", 0x8000, 0x8000, CRC(4d626ce2) SHA1(82b96f11a0abfc1931b6022b84733d975ad7ab2b), ROM_BIOS(4)) + ROM_SYSTEM_BIOS(4, "v36f","CM v3.6 French") + ROMX_LOAD( "36-cmf.rom", 0x8000, 0x8000, CRC(beabe0f5) SHA1(a5ef3bb92190a257cb0e94d58b2c23935436edeb), ROM_BIOS(5)) +ROM_END + +ROM_START( psionxp ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_SYSTEM_BIOS(0, "v26", "XP v2.6") + ROMX_LOAD( "26-xp.rom", 0x8000, 0x8000, CRC(a81db40f) SHA1(af72d94ccee1fa1dade8776bdbd39920665a68b7), ROM_BIOS(1) ) ROM_END ROM_START( psionla ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "v33", "LA v3.3") ROMX_LOAD( "33-la.dat", 0x8000, 0x8000, CRC(02668ed4) SHA1(e5d4ee6b1cde310a2970ffcc6f29a0ce09b08c46), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "v34g", "LA v3.4 German") + ROMX_LOAD( "34-lag.rom", 0x8000, 0x8000, CRC(13a92c4b) SHA1(dab8bd6a41a5fd509c5ad4b0b0ab80d14f2c421a), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(2, "v36", "LA v3.6") + ROMX_LOAD( "36-la.rom", 0x8000, 0x8000, CRC(7442c7f6) SHA1(94f15bd06bd750be70fa4a4ab588237c5a703f65), ROM_BIOS(3)) +ROM_END + +ROM_START( psionp200 ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_SYSTEM_BIOS(0, "v33", "POS200a v3.3") + ROMX_LOAD( "33-p200a.rom", 0x8000, 0x8000, CRC(91e94998) SHA1(e9e8106eb9283d20452697859894aa407cc07bd1), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "v36", "POS200 v3.6") + ROMX_LOAD( "36-p200.rom", 0x8000, 0x8000, CRC(4569ef5b) SHA1(8c275474cc6e3f50156f0b6e32121cadd14ea8be), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(2, "v36a", "POS200a v3.6") + ROMX_LOAD( "36-p200a.rom", 0x8000, 0x8000, CRC(36cceeb7) SHA1(57069812c5a16babfff91dc7d7e0842e5dc68652), ROM_BIOS(3)) + ROM_SYSTEM_BIOS(3, "v36b", "POS250 v3.6") + ROMX_LOAD( "36-p250.rom", 0x8000, 0x8000, CRC(235cc76a) SHA1(3229cdff4b049a1fbf9a758ce3abf3fdc9b547c9), ROM_BIOS(4)) ROM_END ROM_START( psionp350 ) @@ -571,6 +728,14 @@ ROM_START( psionlz64 ) ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "v44", "LZ64 v4.4") ROMX_LOAD( "44-lz64.dat", 0x8000, 0x10000, CRC(aa487913) SHA1(5a44390f63fc8c1bc94299ab2eb291bc3a5b989a), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "v46si", "LZ64 v4.6 Spanish / Italian") + ROMX_LOAD( "46-lz64i.rom", 0x8000, 0x10000, CRC(c96c7e65) SHA1(1b4af43657bbd3ecd92f370762bde166047b85e2), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(2, "v43", "LZ64 v4.3") + ROMX_LOAD( "43-lz64.rom", 0x8000, 0x10000, CRC(57e7a372) SHA1(46c2da1cfe991c0c1f2486e4aa28388767937ddd), ROM_BIOS(3)) + ROM_SYSTEM_BIOS(3, "v46a", "LZ64 v4.6a") + ROMX_LOAD( "46a-lz64.rom", 0x8000, 0x10000, CRC(9b0d5a7a) SHA1(f1cdd6ef43cd65ef18e148deca0500f0c1ad2f80), ROM_BIOS(4)) + ROM_SYSTEM_BIOS(4, "v46b", "LZ64 v4.6b") + ROMX_LOAD( "46b-lz64.rom", 0x8000, 0x10000, CRC(8d1101e2) SHA1(eddd0c3a2881667a1485b0d66f82f8c7792995c2), ROM_BIOS(5)) ROM_REGION( 0x1000, "hd44780", 0 ) ROM_LOAD( "psion_lz_charset.bin", 0x0000, 0x1000, BAD_DUMP CRC(44bff6f6) SHA1(aef544548b783d608a7d55456f6c46f421a11ed7)) @@ -589,6 +754,12 @@ ROM_START( psionlz ) ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "v46", "LZ v4.6") ROMX_LOAD( "46-lz.dat", 0x8000, 0x10000, CRC(22715f48) SHA1(cf460c81cadb53eddb7afd8dadecbe8c38ea3fc2), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "v42", "LZ v4.2") + ROMX_LOAD( "42-lz.rom", 0x8000, 0x10000, CRC(f2d6ad47) SHA1(ee8315ae872463068d805c6e0b71f62ae8eb65be), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(2, "v44", "LZ v4.4") + ROMX_LOAD( "44-lz.rom", 0x8000, 0x10000, CRC(4a0a990b) SHA1(dde0ba69a4a7f02b610ad6bd69a8b8552b060223), ROM_BIOS(3)) + ROM_SYSTEM_BIOS(3, "v45", "LZ v4.5") + ROMX_LOAD( "45-lz.rom", 0x8000, 0x10000, CRC(f95d8f39) SHA1(cb64152c2418bf730c89999d1b13c1d1ada1f082), ROM_BIOS(4)) ROM_REGION( 0x1000, "hd44780", 0 ) ROM_LOAD( "psion_lz_charset.bin", 0x0000, 0x1000, BAD_DUMP CRC(44bff6f6) SHA1(aef544548b783d608a7d55456f6c46f421a11ed7)) @@ -606,8 +777,11 @@ ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ +COMP( 1984, psion1, 0, 0, psion1, psion1,driver_device, 0, "Psion", "Organiser I", GAME_NOT_WORKING) COMP( 1986, psioncm, 0, 0, psioncm, psion, driver_device, 0, "Psion", "Organiser II CM", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS) COMP( 1986, psionla, psioncm, 0, psionla, psion, driver_device, 0, "Psion", "Organiser II LA", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS) +COMP( 1986, psionxp, psioncm, 0, psionla, psion, driver_device, 0, "Psion", "Organiser II XP", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS) +COMP( 1986, psionp200, psioncm, 0, psionp350, psion, driver_device, 0, "Psion", "Organiser II P200", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS) COMP( 1986, psionp350, psioncm, 0, psionp350, psion, driver_device, 0, "Psion", "Organiser II P350", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS) COMP( 1986, psionlam, psioncm, 0, psionlam, psion, driver_device, 0, "Psion", "Organiser II LAM", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS) COMP( 1989, psionlz, 0, 0, psionlz, psion, driver_device, 0, "Psion", "Organiser II LZ", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS) diff --git a/src/mess/includes/psion.h b/src/mess/includes/psion.h index e9dc3d6850d..65d5648f601 100644 --- a/src/mess/includes/psion.h +++ b/src/mess/includes/psion.h @@ -84,4 +84,21 @@ public: static HD44780_PIXEL_UPDATE(lz_pixel_update); }; + +class psion1_state : public psion_state +{ +public: + psion1_state(const machine_config &mconfig, device_type type, const char *tag) + : psion_state(mconfig, type, tag) + { } + + virtual void machine_reset(); + + DECLARE_READ8_MEMBER( reset_kb_counter_r ); + DECLARE_READ8_MEMBER( inc_kb_counter_r ); + DECLARE_READ8_MEMBER( switchoff_r ); + + static HD44780_PIXEL_UPDATE(psion1_pixel_update); +}; + #endif // _PSION_H_ diff --git a/src/mess/mess.lst b/src/mess/mess.lst index ff9ade8c76b..cf6967f60fd 100644 --- a/src/mess/mess.lst +++ b/src/mess/mess.lst @@ -2239,8 +2239,11 @@ bml3 bml3mk2 bml3mk5 b16 +psion1 psioncm psionla +psionxp +psionp200 psionp350 psionlam psionlz64