trunk/src/mess/includes/psion.h
| r29241 | r29242 | |
| 12 | 12 | #define _PSION_H_ |
| 13 | 13 | |
| 14 | 14 | #include "cpu/m6800/m6800.h" |
| 15 | #include "machine/nvram.h" |
| 15 | 16 | #include "machine/psion_pack.h" |
| 16 | 17 | #include "video/hd44780.h" |
| 17 | 18 | #include "sound/beep.h" |
| r29241 | r29242 | |
| 29 | 30 | m_beep(*this, "beeper"), |
| 30 | 31 | m_pack1(*this, "pack1"), |
| 31 | 32 | m_pack2(*this, "pack2"), |
| 33 | m_nvram1(*this, "nvram1"), |
| 34 | m_nvram2(*this, "nvram2"), |
| 35 | m_nvram3(*this, "nvram3"), |
| 32 | 36 | m_sys_register(*this, "sys_register"), |
| 37 | m_stby_pwr(1), |
| 33 | 38 | m_ram(*this, "ram"){ } |
| 34 | 39 | |
| 35 | 40 | required_device<hd63701_cpu_device> m_maincpu; |
| r29241 | r29242 | |
| 37 | 42 | required_device<beep_device> m_beep; |
| 38 | 43 | required_device<datapack_device> m_pack1; |
| 39 | 44 | required_device<datapack_device> m_pack2; |
| 45 | required_device<nvram_device> m_nvram1; |
| 46 | required_device<nvram_device> m_nvram2; |
| 47 | optional_device<nvram_device> m_nvram3; |
| 40 | 48 | |
| 41 | 49 | UINT16 m_kb_counter; |
| 42 | 50 | UINT8 m_enable_nmi; |
| r29241 | r29242 | |
| 60 | 68 | |
| 61 | 69 | virtual void machine_start(); |
| 62 | 70 | virtual void machine_reset(); |
| 71 | void nvram_init(nvram_device &nvram, void *data, size_t size); |
| 63 | 72 | |
| 64 | 73 | UINT8 kb_read(); |
| 65 | 74 | void update_banks(); |
trunk/src/mess/drivers/psion.c
| r29241 | r29242 | |
| 23 | 23 | #include "emu.h" |
| 24 | 24 | #include "includes/psion.h" |
| 25 | 25 | #include "rendlay.h" |
| 26 | | #include "mcfglgcy.h" |
| 27 | 26 | |
| 28 | 27 | TIMER_DEVICE_CALLBACK_MEMBER(psion_state::nmi_timer) |
| 29 | 28 | { |
| r29241 | r29242 | |
| 332 | 331 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D [)]") PORT_CODE(KEYCODE_D) |
| 333 | 332 | INPUT_PORTS_END |
| 334 | 333 | |
| 335 | | static NVRAM_HANDLER( psion ) |
| 336 | | { |
| 337 | | psion_state *state = machine.driver_data<psion_state>(); |
| 338 | 334 | |
| 339 | | if (read_or_write) |
| 340 | | { |
| 341 | | file->write(state->m_sys_register, 0xc0); |
| 342 | | file->write(state->m_ram, state->m_ram.bytes()); |
| 343 | | if (state->m_ram_bank_count) |
| 344 | | file->write(state->m_paged_ram, state->m_ram_bank_count * 0x4000); |
| 345 | | } |
| 346 | | else |
| 347 | | { |
| 348 | | if (file) |
| 349 | | { |
| 350 | | file->read(state->m_sys_register, 0xc0); |
| 351 | | file->read(state->m_ram, state->m_ram.bytes()); |
| 352 | | if (state->m_ram_bank_count) |
| 353 | | file->read(state->m_paged_ram, state->m_ram_bank_count * 0x4000); |
| 354 | | |
| 355 | | //warm start |
| 356 | | state->m_stby_pwr = 1; |
| 357 | | } |
| 358 | | else |
| 359 | | //cold start |
| 360 | | state->m_stby_pwr = 0; |
| 361 | | } |
| 335 | void psion_state::nvram_init(nvram_device &nvram, void *data, size_t size) |
| 336 | { |
| 337 | //cold start (by default is 1=warm start) |
| 338 | m_stby_pwr = 0; |
| 362 | 339 | } |
| 363 | 340 | |
| 341 | |
| 364 | 342 | void psion_state::machine_start() |
| 365 | 343 | { |
| 366 | 344 | if (!strcmp(machine().system().name, "psionlam")) |
| r29241 | r29242 | |
| 406 | 384 | membank("rambank")->set_entry(0); |
| 407 | 385 | } |
| 408 | 386 | |
| 387 | m_nvram1->set_base(m_sys_register, 0xc0); |
| 388 | m_nvram2->set_base(m_ram, m_ram.bytes()); |
| 389 | if (m_nvram3) |
| 390 | m_nvram3->set_base(m_paged_ram, m_ram_bank_count * 0x4000); |
| 391 | |
| 409 | 392 | save_item(NAME(m_kb_counter)); |
| 410 | 393 | save_item(NAME(m_enable_nmi)); |
| 411 | 394 | save_item(NAME(m_tcsr_value)); |
| r29241 | r29242 | |
| 498 | 481 | MCFG_SOUND_ADD( "beeper", BEEP, 0 ) |
| 499 | 482 | MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 ) |
| 500 | 483 | |
| 501 | | MCFG_NVRAM_HANDLER(psion) |
| 484 | MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram1", psion_state, nvram_init) // sys_regs |
| 485 | MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram2", psion_state, nvram_init) // RAM |
| 502 | 486 | |
| 503 | 487 | MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", psion_state, nmi_timer, attotime::from_seconds(1)) |
| 504 | 488 | |
| r29241 | r29242 | |
| 544 | 528 | |
| 545 | 529 | MCFG_CPU_MODIFY("maincpu") |
| 546 | 530 | MCFG_CPU_PROGRAM_MAP(psionp350_mem) |
| 531 | |
| 532 | MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram3", psion_state, nvram_init) // paged RAM |
| 547 | 533 | MACHINE_CONFIG_END |
| 548 | 534 | |
| 549 | 535 | static MACHINE_CONFIG_DERIVED( psionlz, psion_4lines ) |
| 550 | 536 | |
| 551 | 537 | MCFG_CPU_MODIFY("maincpu") |
| 552 | 538 | MCFG_CPU_PROGRAM_MAP(psionlz_mem) |
| 539 | |
| 540 | MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram3", psion_state, nvram_init) // paged RAM |
| 553 | 541 | MACHINE_CONFIG_END |
| 554 | 542 | |
| 555 | 543 | /* ROM definition */ |