trunk/src/mess/machine/lisa.c
| r29221 | r29222 | |
| 842 | 842 | |
| 843 | 843 | /* should save PRAM to file */ |
| 844 | 844 | /* TODO : save time difference with host clock, set default date, etc */ |
| 845 | | NVRAM_HANDLER(lisa) |
| 845 | void lisa_state::nvram_init(nvram_device &nvram, void *data, size_t size) |
| 846 | 846 | { |
| 847 | | lisa_state *state = machine.driver_data<lisa_state>(); |
| 847 | memset(data, 0x00, size); |
| 848 | 848 | |
| 849 | | if (read_or_write) |
| 850 | 849 | { |
| 851 | | file->write(state->m_fdc_ram, 1024); |
| 852 | | } |
| 853 | | else |
| 854 | | { |
| 855 | | if (file) |
| 856 | | file->read(state->m_fdc_ram, 1024); |
| 857 | | else |
| 858 | | memset(state->m_fdc_ram, 0, 1024); |
| 850 | /* Now we copy the host clock into the Lisa clock */ |
| 851 | system_time systime; |
| 852 | machine().base_datetime(systime); |
| 859 | 853 | |
| 860 | | { |
| 861 | | /* Now we copy the host clock into the Lisa clock */ |
| 862 | | system_time systime; |
| 863 | | machine.base_datetime(systime); |
| 854 | m_clock_regs.alarm = 0xfffffL; |
| 855 | /* The clock count starts on 1st January 1980 */ |
| 856 | m_clock_regs.years = (systime.local_time.year - 1980) & 0xf; |
| 857 | m_clock_regs.days1 = (systime.local_time.day + 1) / 100; |
| 858 | m_clock_regs.days2 = ((systime.local_time.day + 1) / 10) % 10; |
| 859 | m_clock_regs.days3 = (systime.local_time.day + 1) % 10; |
| 860 | m_clock_regs.hours1 = systime.local_time.hour / 10; |
| 861 | m_clock_regs.hours2 = systime.local_time.hour % 10; |
| 862 | m_clock_regs.minutes1 = systime.local_time.minute / 10; |
| 863 | m_clock_regs.minutes2 = systime.local_time.minute % 10; |
| 864 | m_clock_regs.seconds1 = systime.local_time.second / 10; |
| 865 | m_clock_regs.seconds2 = systime.local_time.second % 10; |
| 866 | m_clock_regs.tenths = 0; |
| 864 | 867 | |
| 865 | | state->m_clock_regs.alarm = 0xfffffL; |
| 866 | | /* The clock count starts on 1st January 1980 */ |
| 867 | | state->m_clock_regs.years = (systime.local_time.year - 1980) & 0xf; |
| 868 | | state->m_clock_regs.days1 = (systime.local_time.day + 1) / 100; |
| 869 | | state->m_clock_regs.days2 = ((systime.local_time.day + 1) / 10) % 10; |
| 870 | | state->m_clock_regs.days3 = (systime.local_time.day + 1) % 10; |
| 871 | | state->m_clock_regs.hours1 = systime.local_time.hour / 10; |
| 872 | | state->m_clock_regs.hours2 = systime.local_time.hour % 10; |
| 873 | | state->m_clock_regs.minutes1 = systime.local_time.minute / 10; |
| 874 | | state->m_clock_regs.minutes2 = systime.local_time.minute % 10; |
| 875 | | state->m_clock_regs.seconds1 = systime.local_time.second / 10; |
| 876 | | state->m_clock_regs.seconds2 = systime.local_time.second % 10; |
| 877 | | state->m_clock_regs.tenths = 0; |
| 878 | | } |
| 879 | | state->m_clock_regs.clock_mode = timer_disable; |
| 880 | | state->m_clock_regs.clock_write_ptr = -1; |
| 868 | m_clock_regs.clock_mode = timer_disable; |
| 869 | m_clock_regs.clock_write_ptr = -1; |
| 881 | 870 | } |
| 882 | | |
| 883 | | |
| 884 | 871 | #if 0 |
| 885 | 872 | UINT32 temp32; |
| 886 | 873 | SINT8 temp8; |
| 887 | 874 | temp32 = (m_clock_regs.alarm << 12) | (m_clock_regs.years << 8) | (m_clock_regs.days1 << 4) |
| 888 | | | m_clock_regs.days2; |
| 875 | | m_clock_regs.days2; |
| 889 | 876 | |
| 890 | 877 | temp32 = (m_clock_regs.days3 << 28) | (m_clock_regs.hours1 << 24) | (m_clock_regs.hours2 << 20) |
| 891 | | | (m_clock_regs.minutes1 << 16) | (m_clock_regs.minutes2 << 12) |
| 892 | | | (m_clock_regs.seconds1 << 8) | (m_clock_regs.seconds2 << 4) | m_clock_regs.tenths; |
| 878 | | (m_clock_regs.minutes1 << 16) | (m_clock_regs.minutes2 << 12) |
| 879 | | (m_clock_regs.seconds1 << 8) | (m_clock_regs.seconds2 << 4) | m_clock_regs.tenths; |
| 893 | 880 | |
| 894 | 881 | temp8 = clock_mode; /* clock mode */ |
| 895 | 882 | |
| 896 | 883 | temp8 = m_clock_regs.clock_write_ptr; /* clock byte to be written next (-1 if clock write disabled) */ |
| 897 | 884 | #endif |
| 885 | |
| 898 | 886 | } |
| 899 | 887 | |
| 888 | |
| 900 | 889 | #ifdef UNUSED_FUNCTION |
| 901 | 890 | void lisa_state::init_lisa1(void) |
| 902 | 891 | { |
| r29221 | r29222 | |
| 953 | 942 | |
| 954 | 943 | /* read command every ms (don't know the real value) */ |
| 955 | 944 | machine().scheduler().timer_pulse(attotime::from_msec(1), timer_expired_delegate(FUNC(lisa_state::set_COPS_ready),this)); |
| 945 | |
| 946 | m_nvram->set_base(m_fdc_ram, 1024); |
| 956 | 947 | } |
| 957 | 948 | |
| 958 | 949 | void lisa_state::machine_reset() |
trunk/src/mess/includes/lisa.h
| r29221 | r29222 | |
| 10 | 10 | #define LISA_H_ |
| 11 | 11 | |
| 12 | 12 | #include "emu.h" |
| 13 | #include "cpu/m68000/m68000.h" |
| 13 | 14 | #include "machine/6522via.h" |
| 14 | 15 | #include "machine/8530scc.h" |
| 15 | 16 | #include "machine/6522via.h" |
| 17 | #include "machine/nvram.h" |
| 16 | 18 | #include "machine/applefdc.h" |
| 17 | 19 | #include "machine/sonydriv.h" |
| 18 | | #include "cpu/m68000/m68000.h" |
| 19 | 20 | #include "sound/speaker.h" |
| 20 | 21 | |
| 21 | 22 | #define COP421_TAG "u9f" |
| r29221 | r29222 | |
| 106 | 107 | m_fdc(*this, "fdc"), |
| 107 | 108 | m_scc(*this, "scc"), |
| 108 | 109 | m_speaker(*this, "speaker"), |
| 110 | m_nvram(*this, "nvram"), |
| 109 | 111 | m_fdc_rom(*this,"fdc_rom"), |
| 110 | 112 | m_fdc_ram(*this,"fdc_ram"), |
| 111 | 113 | m_io_line0(*this, "LINE0"), |
| r29221 | r29222 | |
| 127 | 129 | optional_device<applefdc_base_device> m_fdc; |
| 128 | 130 | required_device<scc8530_t> m_scc; |
| 129 | 131 | required_device<speaker_sound_device> m_speaker; |
| 132 | required_device<nvram_device> m_nvram; |
| 130 | 133 | |
| 131 | 134 | required_shared_ptr<UINT8> m_fdc_rom; |
| 132 | 135 | required_shared_ptr<UINT8> m_fdc_ram; |
| r29221 | r29222 | |
| 202 | 205 | virtual void machine_start(); |
| 203 | 206 | virtual void machine_reset(); |
| 204 | 207 | virtual void video_start(); |
| 208 | void nvram_init(nvram_device &nvram, void *data, size_t size); |
| 205 | 209 | UINT32 screen_update_lisa(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 206 | 210 | INTERRUPT_GEN_MEMBER(lisa_interrupt); |
| 207 | 211 | TIMER_CALLBACK_MEMBER(handle_mouse); |
trunk/src/mess/includes/nc.h
| r29221 | r29222 | |
| 11 | 11 | #include "machine/i8251.h" |
| 12 | 12 | #include "machine/clock.h" |
| 13 | 13 | #include "machine/ram.h" |
| 14 | #include "machine/nvram.h" |
| 14 | 15 | #include "sound/beep.h" |
| 15 | 16 | |
| 16 | 17 | #define NC_NUM_COLOURS 4 |
| r29221 | r29222 | |
| 41 | 42 | m_beeper2(*this, "beep.2"), |
| 42 | 43 | m_centronics(*this, "centronics"), |
| 43 | 44 | m_uart(*this, "uart"), |
| 44 | | m_uart_clock(*this, "uart_clock") |
| 45 | m_uart_clock(*this, "uart_clock"), |
| 46 | m_nvram(*this, "nvram") |
| 45 | 47 | { |
| 46 | 48 | } |
| 47 | 49 | |
| r29221 | r29222 | |
| 115 | 117 | required_device<centronics_device> m_centronics; |
| 116 | 118 | required_device<i8251_device> m_uart; |
| 117 | 119 | required_device<clock_device> m_uart_clock; |
| 120 | required_device<nvram_device> m_nvram; |
| 118 | 121 | |
| 119 | 122 | char m_memory_config[4]; |
| 120 | 123 | emu_timer *m_keyboard_timer; |
trunk/src/mess/drivers/clcd.c
| r29221 | r29222 | |
| 18 | 18 | #include "machine/mos6551.h" |
| 19 | 19 | #include "machine/msm58321.h" |
| 20 | 20 | #include "machine/ram.h" |
| 21 | #include "machine/nvram.h" |
| 21 | 22 | #include "sound/speaker.h" |
| 22 | 23 | #include "rendlay.h" |
| 23 | | #include "mcfglgcy.h" |
| 24 | 24 | |
| 25 | 25 | class clcd_state : public driver_device |
| 26 | 26 | { |
| r29221 | r29222 | |
| 33 | 33 | m_rtc(*this, "rtc"), |
| 34 | 34 | m_centronics(*this, "centronics"), |
| 35 | 35 | m_ram(*this,"ram"), |
| 36 | m_nvram(*this, "nvram"), |
| 36 | 37 | m_bank1(*this, "bank1"), |
| 37 | 38 | m_bank2(*this, "bank2"), |
| 38 | 39 | m_bank3(*this, "bank3"), |
| r29221 | r29222 | |
| 89 | 90 | |
| 90 | 91 | m_rtc->cs1_w(1); |
| 91 | 92 | m_acia->write_cts(0); |
| 93 | m_nvram->set_base(ram()->pointer(), ram()->size()); |
| 92 | 94 | } |
| 93 | 95 | |
| 94 | 96 | DECLARE_PALETTE_INIT(clcd) |
| r29221 | r29222 | |
| 521 | 523 | m_key_force_format = 10; |
| 522 | 524 | } |
| 523 | 525 | |
| 526 | void nvram_init(nvram_device &nvram, void *data, size_t size); |
| 527 | |
| 524 | 528 | private: |
| 525 | 529 | required_device<cpu_device> m_maincpu; |
| 526 | 530 | required_device<mos6551_device> m_acia; |
| r29221 | r29222 | |
| 528 | 532 | required_device<msm58321_device> m_rtc; |
| 529 | 533 | required_device<centronics_device> m_centronics; |
| 530 | 534 | required_device<ram_device> m_ram; |
| 535 | required_device<nvram_device> m_nvram; |
| 531 | 536 | required_device<address_map_bank_device> m_bank1; |
| 532 | 537 | required_device<address_map_bank_device> m_bank2; |
| 533 | 538 | required_device<address_map_bank_device> m_bank3; |
| r29221 | r29222 | |
| 560 | 565 | required_ioport m_special; |
| 561 | 566 | }; |
| 562 | 567 | |
| 563 | | static NVRAM_HANDLER(clcd) |
| 568 | void clcd_state::nvram_init(nvram_device &nvram, void *data, size_t size) |
| 564 | 569 | { |
| 565 | | clcd_state *state = machine.driver_data<clcd_state>(); |
| 566 | | |
| 567 | | if (read_or_write) |
| 568 | | { |
| 569 | | file->write(state->ram()->pointer(), state->ram()->size()); |
| 570 | | } |
| 571 | | else if (file) |
| 572 | | { |
| 573 | | file->read(state->ram()->pointer(), state->ram()->size()); |
| 574 | | } |
| 575 | | else |
| 576 | | { |
| 577 | | state->force_format(); |
| 578 | | } |
| 570 | memset(data, 0x00, size); |
| 571 | force_format(); |
| 579 | 572 | } |
| 580 | 573 | |
| 574 | |
| 581 | 575 | static ADDRESS_MAP_START( clcd_banked_mem, AS_PROGRAM, 8, clcd_state ) |
| 582 | 576 | /* KERN/APPL/RAM */ |
| 583 | 577 | AM_RANGE(0x00000, 0x1ffff) AM_MIRROR(0x40000) AM_READWRITE(ram_r, ram_w) |
| r29221 | r29222 | |
| 799 | 793 | MCFG_RAM_DEFAULT_VALUE(0) |
| 800 | 794 | MCFG_RAM_EXTRA_OPTIONS("32k,64k") |
| 801 | 795 | MCFG_RAM_DEFAULT_SIZE("128k") |
| 802 | | MCFG_NVRAM_HANDLER(clcd) |
| 796 | |
| 797 | MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram", clcd_state, nvram_init) |
| 803 | 798 | MACHINE_CONFIG_END |
| 804 | 799 | |
| 805 | 800 | |
trunk/src/mess/drivers/nc.c
| r29221 | r29222 | |
| 404 | 404 | } |
| 405 | 405 | |
| 406 | 406 | |
| 407 | | static NVRAM_HANDLER( nc ) |
| 408 | | { |
| 409 | | nc_state *state = machine.driver_data<nc_state>(); |
| 410 | | |
| 411 | | if (read_or_write) |
| 412 | | { |
| 413 | | file->write(state->m_ram->pointer(), state->m_ram->size()); |
| 414 | | } |
| 415 | | else if (file) |
| 416 | | { |
| 417 | | file->read(state->m_ram->pointer(), state->m_ram->size()); |
| 418 | | } |
| 419 | | else |
| 420 | | { |
| 421 | | // leave whatever ram device defaulted to |
| 422 | | } |
| 423 | | } |
| 424 | | |
| 425 | | |
| 426 | 407 | TIMER_DEVICE_CALLBACK_MEMBER(nc_state::dummy_timer_callback) |
| 427 | 408 | { |
| 428 | 409 | int inputport_10_state; |
| r29221 | r29222 | |
| 836 | 817 | /* keyboard timer */ |
| 837 | 818 | m_keyboard_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nc_state::nc_keyboard_timer_callback),this)); |
| 838 | 819 | m_keyboard_timer->adjust(attotime::from_msec(10)); |
| 820 | |
| 821 | m_nvram->set_base(m_ram->pointer(), m_ram->size()); |
| 839 | 822 | } |
| 840 | 823 | |
| 841 | 824 | |
| r29221 | r29222 | |
| 1471 | 1454 | /* internal ram */ |
| 1472 | 1455 | MCFG_RAM_ADD(RAM_TAG) |
| 1473 | 1456 | MCFG_RAM_DEFAULT_SIZE("64K") |
| 1474 | | MCFG_NVRAM_HANDLER(nc) |
| 1457 | MCFG_NVRAM_ADD_NO_FILL("nvram") |
| 1475 | 1458 | |
| 1476 | 1459 | /* dummy timer */ |
| 1477 | 1460 | MCFG_TIMER_DRIVER_ADD_PERIODIC("dummy_timer", nc_state, dummy_timer_callback, attotime::from_hz(50)) |
trunk/src/mess/drivers/lisa.c
| r29221 | r29222 | |
| 9 | 9 | *********************************************************************/ |
| 10 | 10 | |
| 11 | 11 | #include "emu.h" |
| 12 | | #include "cpu/m68000/m68000.h" |
| 13 | 12 | #include "cpu/m6502/m6504.h" |
| 14 | 13 | #include "cpu/cop400/cop400.h" |
| 15 | 14 | #include "includes/lisa.h" |
| 16 | | #include "machine/sonydriv.h" |
| 17 | | #include "machine/applefdc.h" |
| 18 | 15 | #include "formats/ap_dsk35.h" |
| 19 | | #include "machine/6522via.h" |
| 20 | | #include "sound/speaker.h" |
| 21 | | #include "mcfglgcy.h" |
| 22 | 16 | |
| 23 | 17 | |
| 24 | 18 | /*************************************************************************** |
| r29221 | r29222 | |
| 162 | 156 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 163 | 157 | |
| 164 | 158 | /* nvram */ |
| 165 | | MCFG_NVRAM_HANDLER(lisa) |
| 159 | MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram", lisa_state, nvram_init) |
| 166 | 160 | |
| 167 | 161 | /* devices */ |
| 168 | 162 | MCFG_IWM_ADD("fdc", lisa2_fdc_interface) |