trunk/src/mess/includes/trs80m2.h
| r19330 | r19331 | |
| 14 | 14 | #include "machine/pic8259.h" |
| 15 | 15 | #include "machine/ram.h" |
| 16 | 16 | #include "machine/trs80m2kb.h" |
| 17 | | #include "machine/wd17xx.h" |
| 17 | #include "machine/wd_fdc.h" |
| 18 | 18 | #include "machine/z80ctc.h" |
| 19 | 19 | #include "machine/z80dma.h" |
| 20 | 20 | #include "machine/z80pio.h" |
| r19330 | r19331 | |
| 40 | 40 | : driver_device(mconfig, type, tag), |
| 41 | 41 | m_maincpu(*this, Z80_TAG), |
| 42 | 42 | m_ctc(*this, Z80CTC_TAG), |
| 43 | m_dmac(*this, Z80DMA_TAG), |
| 43 | 44 | m_pio(*this, Z80PIO_TAG), |
| 44 | 45 | m_crtc(*this, MC6845_TAG), |
| 45 | 46 | m_fdc(*this, FD1791_TAG), |
| 46 | 47 | m_centronics(*this, CENTRONICS_TAG), |
| 47 | | m_floppy(*this, FLOPPY_0), |
| 48 | m_floppy0(*this, FD1791_TAG":0"), |
| 49 | m_floppy1(*this, FD1791_TAG":1"), |
| 50 | m_floppy2(*this, FD1791_TAG":2"), |
| 51 | m_floppy3(*this, FD1791_TAG":3"), |
| 52 | m_floppy(NULL), |
| 48 | 53 | m_ram(*this, RAM_TAG), |
| 49 | 54 | m_kb(*this, TRS80M2_KEYBOARD_TAG) |
| 50 | 55 | { } |
| 51 | 56 | |
| 52 | 57 | required_device<cpu_device> m_maincpu; |
| 53 | | required_device<z80ctc_device>m_ctc; |
| 58 | required_device<z80ctc_device> m_ctc; |
| 59 | required_device<z80dma_device> m_dmac; |
| 54 | 60 | required_device<z80pio_device> m_pio; |
| 55 | 61 | required_device<mc6845_device> m_crtc; |
| 56 | | required_device<fd1791_device> m_fdc; |
| 62 | required_device<fd1791_t> m_fdc; |
| 57 | 63 | required_device<centronics_device> m_centronics; |
| 58 | | required_device<legacy_floppy_image_device> m_floppy; |
| 64 | required_device<floppy_connector> m_floppy0; |
| 65 | required_device<floppy_connector> m_floppy1; |
| 66 | required_device<floppy_connector> m_floppy2; |
| 67 | required_device<floppy_connector> m_floppy3; |
| 68 | floppy_image_device *m_floppy; |
| 59 | 69 | required_device<ram_device> m_ram; |
| 60 | 70 | required_device<trs80m2_keyboard_device> m_kb; |
| 61 | 71 | |
| r19330 | r19331 | |
| 84 | 94 | DECLARE_READ8_MEMBER( pio_pa_r ); |
| 85 | 95 | DECLARE_WRITE8_MEMBER( pio_pa_w ); |
| 86 | 96 | DECLARE_WRITE_LINE_MEMBER( strobe_w ); |
| 87 | | DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w ); |
| 97 | void fdc_intrq_w(bool state); |
| 98 | void fdc_drq_w(bool state); |
| 88 | 99 | DECLARE_WRITE_LINE_MEMBER( kb_clock_w ); |
| 89 | 100 | |
| 90 | 101 | void scan_keyboard(); |
trunk/src/mess/drivers/trs80m2.c
| r19330 | r19331 | |
| 221 | 221 | */ |
| 222 | 222 | |
| 223 | 223 | // drive select |
| 224 | | if (!BIT(data, 0)) wd17xx_set_drive(m_fdc, 0); |
| 225 | | if (!BIT(data, 1)) wd17xx_set_drive(m_fdc, 1); |
| 226 | | if (!BIT(data, 2)) wd17xx_set_drive(m_fdc, 2); |
| 227 | | if (!BIT(data, 3)) wd17xx_set_drive(m_fdc, 3); |
| 224 | m_floppy = NULL; |
| 228 | 225 | |
| 226 | if (!BIT(data, 0)) m_floppy = m_floppy0->get_device(); |
| 227 | if (!BIT(data, 1)) m_floppy = m_floppy1->get_device(); |
| 228 | if (!BIT(data, 2)) m_floppy = m_floppy2->get_device(); |
| 229 | if (!BIT(data, 3)) m_floppy = m_floppy3->get_device(); |
| 230 | |
| 231 | m_fdc->set_floppy(m_floppy); |
| 232 | |
| 229 | 233 | // side select |
| 230 | | wd17xx_set_side(m_fdc, !BIT(data, 6)); |
| 234 | if (m_floppy) m_floppy->ss_w(!BIT(data, 6)); |
| 231 | 235 | |
| 232 | 236 | // FM/MFM |
| 233 | | wd17xx_dden_w(m_fdc, BIT(data, 7)); |
| 237 | m_fdc->dden_w(BIT(data, 7)); |
| 234 | 238 | } |
| 235 | 239 | |
| 236 | 240 | READ8_MEMBER( trs80m2_state::keyboard_r ) |
| r19330 | r19331 | |
| 332 | 336 | |
| 333 | 337 | READ8_MEMBER( trs80m2_state::fdc_r ) |
| 334 | 338 | { |
| 335 | | return wd17xx_r(m_fdc, space, offset) ^ 0xff; |
| 339 | return m_fdc->gen_r(offset) ^ 0xff; |
| 336 | 340 | } |
| 337 | 341 | |
| 338 | 342 | WRITE8_MEMBER( trs80m2_state::fdc_w ) |
| 339 | 343 | { |
| 340 | | wd17xx_w(m_fdc, space, offset, data ^ 0xff); |
| 344 | m_fdc->gen_w(offset, data ^ 0xff); |
| 341 | 345 | } |
| 342 | 346 | |
| 343 | 347 | WRITE8_MEMBER( trs80m16_state::tcl_w ) |
| r19330 | r19331 | |
| 730 | 734 | UINT8 data = 0; |
| 731 | 735 | |
| 732 | 736 | // floppy interrupt |
| 733 | | data |= wd17xx_intrq_r(m_fdc); |
| 737 | data |= m_fdc->intrq_r(); |
| 734 | 738 | |
| 735 | 739 | // 2-sided diskette |
| 736 | | data |= floppy_twosid_r(m_floppy) << 1; |
| 740 | data |= (m_floppy ? m_floppy->twosid_r() : 1) << 1; |
| 737 | 741 | |
| 738 | 742 | // disk change |
| 739 | | data |= floppy_dskchg_r(m_floppy) << 2; |
| 743 | data |= (m_floppy ? m_floppy->dskchg_r() : 1) << 2; |
| 740 | 744 | |
| 741 | 745 | // printer fault |
| 742 | 746 | data |= m_centronics->fault_r() << 4; |
| r19330 | r19331 | |
| 855 | 859 | // wd17xx_interface fdc_intf |
| 856 | 860 | //------------------------------------------------- |
| 857 | 861 | |
| 858 | | static const floppy_interface trs80m2_floppy_interface = |
| 859 | | { |
| 860 | | DEVCB_NULL, |
| 861 | | DEVCB_NULL, |
| 862 | | DEVCB_NULL, |
| 863 | | DEVCB_NULL, |
| 864 | | DEVCB_NULL, |
| 865 | | FLOPPY_STANDARD_8_DSDD, // Shugart SA-800 |
| 866 | | LEGACY_FLOPPY_OPTIONS_NAME(default), |
| 867 | | "floppy_8", |
| 868 | | NULL |
| 869 | | }; |
| 862 | static SLOT_INTERFACE_START( trs80m2_floppies ) |
| 863 | SLOT_INTERFACE( "8ssdd", FLOPPY_8_SSDD ) // Shugart SA-800 |
| 864 | SLOT_INTERFACE( "8dsdd", FLOPPY_8_DSDD ) // Shugart SA-850 |
| 865 | SLOT_INTERFACE_END |
| 870 | 866 | |
| 871 | | WRITE_LINE_MEMBER( trs80m2_state::fdc_intrq_w ) |
| 867 | void trs80m2_state::fdc_intrq_w(bool state) |
| 872 | 868 | { |
| 873 | 869 | m_pio->port_a_write(state); |
| 874 | 870 | } |
| 875 | 871 | |
| 876 | | static const wd17xx_interface fdc_intf = |
| 872 | void trs80m2_state::fdc_drq_w(bool state) |
| 877 | 873 | { |
| 878 | | DEVCB_NULL, |
| 879 | | DEVCB_DRIVER_LINE_MEMBER(trs80m2_state, fdc_intrq_w), |
| 880 | | DEVCB_DEVICE_LINE(Z80DMA_TAG, z80dma_rdy_w), |
| 881 | | { FLOPPY_0, NULL, NULL, NULL } |
| 882 | | }; |
| 874 | m_dmac->rdy_w(state); |
| 875 | } |
| 883 | 876 | |
| 884 | 877 | |
| 885 | 878 | //------------------------------------------------- |
| r19330 | r19331 | |
| 926 | 919 | |
| 927 | 920 | void trs80m2_state::machine_start() |
| 928 | 921 | { |
| 929 | | // Shugart SA-800 motor spins constantly |
| 930 | | floppy_mon_w(m_floppy, CLEAR_LINE); |
| 922 | // floppy callbacks |
| 923 | m_fdc->setup_intrq_cb(wd_fdc_t::line_cb(FUNC(trs80m2_state::fdc_intrq_w), this)); |
| 924 | m_fdc->setup_drq_cb(wd_fdc_t::line_cb(FUNC(trs80m2_state::fdc_drq_w), this)); |
| 931 | 925 | |
| 932 | 926 | // register for state saving |
| 933 | 927 | save_item(NAME(m_boot_rom)); |
| r19330 | r19331 | |
| 1009 | 1003 | MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_12_48MHz/8, mc6845_intf) |
| 1010 | 1004 | |
| 1011 | 1005 | // devices |
| 1012 | | MCFG_FD1791_ADD(FD1791_TAG, fdc_intf) |
| 1006 | MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/8) |
| 1013 | 1007 | MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf) |
| 1014 | 1008 | MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", trs80m2_state, ctc_tick, attotime::from_hz(XTAL_8MHz/2/2)) |
| 1015 | 1009 | MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_8MHz/2, dma_intf) |
| 1016 | 1010 | MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_8MHz/2, pio_intf) |
| 1017 | 1011 | MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_8MHz/2, sio_intf) |
| 1018 | 1012 | MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf) |
| 1019 | | MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, trs80m2_floppy_interface) |
| 1013 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":0", trs80m2_floppies, "8dsdd", NULL, floppy_image_device::default_floppy_formats) |
| 1014 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":1", trs80m2_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) |
| 1015 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":2", trs80m2_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) |
| 1016 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":3", trs80m2_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) |
| 1020 | 1017 | MCFG_TRS80M2_KEYBOARD_ADD(kb_intf) |
| 1021 | 1018 | |
| 1022 | 1019 | MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", trs80m2_state, trs80m2_keyboard_tick, attotime::from_hz(60)) |
| r19330 | r19331 | |
| 1057 | 1054 | MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_12_48MHz/8, mc6845_intf) |
| 1058 | 1055 | |
| 1059 | 1056 | // devices |
| 1060 | | MCFG_FD1791_ADD(FD1791_TAG, fdc_intf) |
| 1057 | MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/8) |
| 1061 | 1058 | MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf) |
| 1062 | 1059 | MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", trs80m2_state, ctc_tick, attotime::from_hz(XTAL_8MHz/2/2)) |
| 1063 | 1060 | MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_8MHz/2, dma_intf) |
| 1064 | 1061 | MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_8MHz/2, pio_intf) |
| 1065 | 1062 | MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_8MHz/2, sio_intf) |
| 1066 | 1063 | MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf) |
| 1067 | | MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, trs80m2_floppy_interface) |
| 1064 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":0", trs80m2_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats) |
| 1065 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":1", trs80m2_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) |
| 1066 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":2", trs80m2_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) |
| 1067 | MCFG_FLOPPY_DRIVE_ADD(FD1791_TAG":3", trs80m2_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) |
| 1068 | 1068 | MCFG_PIC8259_ADD(AM9519A_TAG, pic_intf) |
| 1069 | 1069 | MCFG_TRS80M2_KEYBOARD_ADD(kb_intf) |
| 1070 | 1070 | |
| r19330 | r19331 | |
| 1085 | 1085 | // ROMS |
| 1086 | 1086 | //************************************************************************** |
| 1087 | 1087 | |
| 1088 | | //------------------------------------------------- |
| 1089 | | // ROM( trs80m2 ) |
| 1090 | | //------------------------------------------------- |
| 1091 | | |
| 1092 | | ROM_START( trs80m2 ) |
| 1093 | | ROM_REGION( 0x800, Z80_TAG, 0 ) |
| 1094 | | ROM_LOAD( "8043216.u11", 0x0000, 0x0800, CRC(7017a373) SHA1(1c7127fcc99fc351a40d3a3199ba478e783c452e) ) |
| 1095 | | |
| 1096 | | ROM_REGION( 0x800, MC6845_TAG, 0 ) |
| 1097 | | ROM_LOAD( "8043316.u9", 0x0000, 0x0800, CRC(04425b03) SHA1(32a29dc202b7fcf21838289cc3bffc51ef943dab) ) |
| 1098 | | ROM_END |
| 1099 | | |
| 1100 | | |
| 1101 | | //------------------------------------------------- |
| 1102 | | // ROM( trs80m16 ) |
| 1103 | | //------------------------------------------------- |
| 1104 | | |
| 1105 | 1088 | /* |
| 1106 | 1089 | |
| 1107 | 1090 | TRS-80 Model II/16 Z80 CPU Board ROM |
| r19330 | r19331 | |
| 1135 | 1118 | |
| 1136 | 1119 | */ |
| 1137 | 1120 | |
| 1138 | | ROM_START( trs80m16 ) |
| 1121 | //------------------------------------------------- |
| 1122 | // ROM( trs80m2 ) |
| 1123 | //------------------------------------------------- |
| 1124 | |
| 1125 | ROM_START( trs80m2 ) |
| 1139 | 1126 | ROM_REGION( 0x800, Z80_TAG, 0 ) |
| 1140 | | ROM_SYSTEM_BIOS( 0, "v1", "Version 1 (S/N 120353)" ) |
| 1141 | | ROMX_LOAD( "cpu_c8ff.u11", 0x0000, 0x0800, CRC(7017a373) SHA1(1c7127fcc99fc351a40d3a3199ba478e783c452e), ROM_BIOS(1) ) |
| 1142 | | ROM_SYSTEM_BIOS( 1, "v2", "Version 2 (S/N 187173)" ) |
| 1143 | | ROMX_LOAD( "cpu_2bff.u11", 0x0000, 0x0800, CRC(c6c71d8b) SHA1(7107e2cbbe769851a4460680c2deff8e76a101b5), ROM_BIOS(2) ) |
| 1144 | | ROM_SYSTEM_BIOS( 2, "v3", "Version 3 (S/N 64014509)" ) |
| 1127 | ROM_DEFAULT_BIOS( "9733" ) |
| 1128 | ROM_SYSTEM_BIOS( 0, "c8ff", "Version 1" ) |
| 1129 | ROMX_LOAD( "8043216.u11", 0x0000, 0x0800, CRC(7017a373) SHA1(1c7127fcc99fc351a40d3a3199ba478e783c452e), ROM_BIOS(1) ) |
| 1130 | ROM_SYSTEM_BIOS( 1, "2bff", "Version 2 (1981-07-29)" ) |
| 1131 | ROMX_LOAD( "8047316.u11", 0x0000, 0x0800, CRC(c6c71d8b) SHA1(7107e2cbbe769851a4460680c2deff8e76a101b5), ROM_BIOS(2) ) |
| 1132 | ROM_SYSTEM_BIOS( 2, "2119", "Version 3 (1982-05-07)" ) |
| 1145 | 1133 | ROMX_LOAD( "cpu_2119.u11", 0x0000, 0x0800, CRC(7a663049) SHA1(f308439ce266df717bfe79adcdad6024b4faa141), ROM_BIOS(3) ) |
| 1146 | | ROM_SYSTEM_BIOS( 3, "v4", "Version 4 (S/N ?)" ) |
| 1147 | | ROMX_LOAD( "cpu_fc86.u11", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(4) ) |
| 1148 | | ROM_SYSTEM_BIOS( 4, "v5", "Version 5 (S/N 161993)" ) |
| 1149 | | ROMX_LOAD( "cpu_9733.u11", 0x0000, 0x0800, CRC(823924b1) SHA1(aee0625bcbd8620b28ab705e15ad9bea804c8476), ROM_BIOS(5) ) |
| 1134 | ROM_SYSTEM_BIOS( 3, "1bbe", "Version 3 (1982-05-07, Alt)" ) |
| 1135 | ROMX_LOAD( "cpu_11be.u11", 0x0000, 0x0800, CRC(8edceea7) SHA1(3d797acedd8a71a82c695129ca764f85aa9022b2), ROM_BIOS(4) ) |
| 1136 | ROM_SYSTEM_BIOS( 4, "fc86", "Version 4 (1982-11-18)" ) |
| 1137 | ROMX_LOAD( "cpu_fc86.u11", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(5) ) |
| 1138 | ROM_SYSTEM_BIOS( 5, "9733", "Version 5 (1983-07-29)" ) |
| 1139 | ROMX_LOAD( "u54.u11", 0x0000, 0x0800, CRC(823924b1) SHA1(aee0625bcbd8620b28ab705e15ad9bea804c8476), ROM_BIOS(6) ) |
| 1150 | 1140 | |
| 1151 | 1141 | ROM_REGION( 0x800, MC6845_TAG, 0 ) |
| 1152 | 1142 | ROM_LOAD( "8043316.u9", 0x0000, 0x0800, CRC(04425b03) SHA1(32a29dc202b7fcf21838289cc3bffc51ef943dab) ) |
| 1153 | 1143 | ROM_END |
| 1154 | 1144 | |
| 1155 | 1145 | |
| 1146 | //------------------------------------------------- |
| 1147 | // ROM( trs80m16 ) |
| 1148 | //------------------------------------------------- |
| 1156 | 1149 | |
| 1150 | #define rom_trs80m16 rom_trs80m2 |
| 1151 | |
| 1152 | |
| 1153 | |
| 1157 | 1154 | //************************************************************************** |
| 1158 | 1155 | // SYSTEM DRIVERS |
| 1159 | 1156 | //************************************************************************** |