r17426 | r17427 | |
150 | 150 | #define M6522_1_TAG "ucd4" |
151 | 151 | #define C64H156_TAG "64h156" |
152 | 152 | |
| 153 | #define MC6821_TAG "pia" |
| 154 | #define CENTRONICS_TAG "centronics" |
153 | 155 | |
| 156 | |
154 | 157 | enum |
155 | 158 | { |
156 | 159 | LED_POWER = 0, |
r17426 | r17427 | |
171 | 174 | const device_type FSD2 = &device_creator<fsd2_device>; |
172 | 175 | const device_type C1541_DOLPHIN_DOS = &device_creator<c1541_dolphin_dos_device>; |
173 | 176 | const device_type C1541_PROFESSIONAL_DOS_V1 = &device_creator<c1541_professional_dos_v1_device>; |
| 177 | const device_type C1541_PROLOGIC_DOS_CLASSIC = &device_creator<c1541_prologic_dos_classic_device>; |
174 | 178 | |
175 | 179 | |
176 | 180 | //------------------------------------------------- |
r17426 | r17427 | |
215 | 219 | case TYPE_1541_PROFESSIONAL_DOS_V1: |
216 | 220 | m_shortname = "c1541pd"; |
217 | 221 | break; |
| 222 | |
| 223 | case TYPE_1541_PROLOGIC_DOS_CLASSIC: |
| 224 | m_shortname = "c1541pdc"; |
| 225 | break; |
218 | 226 | } |
219 | 227 | } |
220 | 228 | |
r17426 | r17427 | |
348 | 356 | |
349 | 357 | |
350 | 358 | //------------------------------------------------- |
| 359 | // ROM( c1541pdc ) |
| 360 | //------------------------------------------------- |
| 361 | |
| 362 | ROM_START( c1541pdc ) |
| 363 | ROM_REGION( 0x8000, M6502_TAG, 0 ) |
| 364 | ROM_LOAD( "325302-01.uab4", 0x0000, 0x2000, CRC(29ae9752) SHA1(8e0547430135ba462525c224e76356bd3d430f11) ) |
| 365 | ROM_LOAD( "901229-06 aa.uab5", 0x2000, 0x2000, CRC(3a235039) SHA1(c7f94f4f51d6de4cdc21ecbb7e57bb209f0530c0) ) |
| 366 | ROM_LOAD( "kernal.bin", 0x4000, 0x4000, CRC(79032ed5) SHA1(0ca4d5ef41c7e3d18d8945476d1481573af3e27c) ) |
| 367 | |
| 368 | ROM_REGION( 0x2000, "mmu", 0 ) |
| 369 | ROM_LOAD( "mmu.bin", 0x0000, 0x2000, CRC(4c41392c) SHA1(78846af2ee6a56fceee44f9246659685ab2cbb7e) ) |
| 370 | ROM_END |
| 371 | |
| 372 | |
| 373 | //------------------------------------------------- |
351 | 374 | // rom_region - device-specific ROM region |
352 | 375 | //------------------------------------------------- |
353 | 376 | |
r17426 | r17427 | |
379 | 402 | |
380 | 403 | case TYPE_1541_PROFESSIONAL_DOS_V1: |
381 | 404 | return ROM_NAME( c1541pd ); |
| 405 | |
| 406 | case TYPE_1541_PROLOGIC_DOS_CLASSIC: |
| 407 | return ROM_NAME( c1541pdc ); |
382 | 408 | } |
383 | 409 | } |
384 | 410 | |
r17426 | r17427 | |
424 | 450 | |
425 | 451 | |
426 | 452 | //------------------------------------------------- |
| 453 | // ADDRESS_MAP( c1541pdc_mem ) |
| 454 | //------------------------------------------------- |
| 455 | |
| 456 | static ADDRESS_MAP_START( c1541pdc_mem, AS_PROGRAM, 8, c1541_prologic_dos_classic_device ) |
| 457 | AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x6000) AM_RAM AM_SHARE("share1") |
| 458 | AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write) |
| 459 | AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_1_TAG, via6522_device, read, write) |
| 460 | AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("share1") |
| 461 | AM_RANGE(0x8800, 0x9fff) AM_RAM |
| 462 | AM_RANGE(0xa000, 0xb7ff) AM_ROM AM_REGION(M6502_TAG, 0x0000) |
| 463 | AM_RANGE(0xb800, 0xb80f) AM_READWRITE(pia_r, pia_w) |
| 464 | AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0x2000) |
| 465 | ADDRESS_MAP_END |
| 466 | |
| 467 | |
| 468 | //------------------------------------------------- |
427 | 469 | // via6522_interface via0_intf |
428 | 470 | //------------------------------------------------- |
429 | 471 | |
r17426 | r17427 | |
728 | 770 | |
729 | 771 | |
730 | 772 | //------------------------------------------------- |
| 773 | // pia6821_interface pia0_intf |
| 774 | //------------------------------------------------- |
| 775 | |
| 776 | READ8_MEMBER( c1541_prologic_dos_classic_device::pia_r ) |
| 777 | { |
| 778 | return m_pia->read(space, (offset >> 2) & 0x03); |
| 779 | } |
| 780 | |
| 781 | WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_w ) |
| 782 | { |
| 783 | m_pia->write(space, (offset >> 2) & 0x03, data); |
| 784 | } |
| 785 | |
| 786 | WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pa_w ) |
| 787 | { |
| 788 | /* |
| 789 | |
| 790 | bit description |
| 791 | |
| 792 | 0 1/2 MHz |
| 793 | 1 |
| 794 | 2 |
| 795 | 3 35/40 tracks |
| 796 | 4 |
| 797 | 5 |
| 798 | 6 |
| 799 | 7 Hi |
| 800 | |
| 801 | */ |
| 802 | } |
| 803 | |
| 804 | READ8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_r ) |
| 805 | { |
| 806 | return m_parallel_data; |
| 807 | } |
| 808 | |
| 809 | WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_w ) |
| 810 | { |
| 811 | m_parallel_data = data; |
| 812 | |
| 813 | m_centronics->write(space, 0, data); |
| 814 | } |
| 815 | |
| 816 | static const pia6821_interface pia_intf = |
| 817 | { |
| 818 | DEVCB_NULL, |
| 819 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1541_prologic_dos_classic_device, pia_pb_r), |
| 820 | DEVCB_DEVICE_LINE_MEMBER(CENTRONICS_TAG, centronics_device, ack_r), |
| 821 | DEVCB_NULL, |
| 822 | DEVCB_NULL, |
| 823 | DEVCB_NULL, |
| 824 | |
| 825 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1541_prologic_dos_classic_device, pia_pa_w), |
| 826 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1541_prologic_dos_classic_device, pia_pb_w), |
| 827 | DEVCB_DEVICE_LINE_MEMBER(CENTRONICS_TAG, centronics_device, strobe_w), |
| 828 | DEVCB_NULL, |
| 829 | DEVCB_NULL, |
| 830 | DEVCB_NULL |
| 831 | }; |
| 832 | |
| 833 | |
| 834 | //------------------------------------------------- |
731 | 835 | // MACHINE_DRIVER( c1541 ) |
732 | 836 | //------------------------------------------------- |
733 | 837 | |
r17426 | r17427 | |
796 | 900 | |
797 | 901 | |
798 | 902 | //------------------------------------------------- |
| 903 | // MACHINE_DRIVER( c1541pdc ) |
| 904 | //------------------------------------------------- |
| 905 | |
| 906 | static MACHINE_CONFIG_FRAGMENT( c1541pdc ) |
| 907 | MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16) |
| 908 | MCFG_CPU_PROGRAM_MAP(c1541pdc_mem) |
| 909 | MCFG_QUANTUM_PERFECT_CPU(M6502_TAG) |
| 910 | |
| 911 | MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, c1541_via0_intf) |
| 912 | MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, c1541_via1_intf) |
| 913 | |
| 914 | MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1541_floppy_interface) |
| 915 | MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf) |
| 916 | MCFG_PIA6821_ADD(MC6821_TAG, pia_intf) |
| 917 | MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics) |
| 918 | MACHINE_CONFIG_END |
| 919 | |
| 920 | |
| 921 | //------------------------------------------------- |
799 | 922 | // machine_config_additions - device-specific |
800 | 923 | // machine configurations |
801 | 924 | //------------------------------------------------- |
r17426 | r17427 | |
815 | 938 | |
816 | 939 | case TYPE_1541_PROFESSIONAL_DOS_V1: |
817 | 940 | return MACHINE_CONFIG_NAME( c1541pd ); |
| 941 | |
| 942 | case TYPE_1541_PROLOGIC_DOS_CLASSIC: |
| 943 | return MACHINE_CONFIG_NAME( c1541pdc ); |
818 | 944 | } |
819 | 945 | } |
820 | 946 | |
r17426 | r17427 | |
845 | 971 | // base_c1541_device - constructor |
846 | 972 | //------------------------------------------------- |
847 | 973 | |
848 | | base_c1541_device::base_c1541_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant) |
| 974 | base_c1541_device:: base_c1541_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant) |
849 | 975 | : device_t(mconfig, type, name, tag, owner, clock), |
850 | 976 | device_cbm_iec_interface(mconfig, *this), |
851 | 977 | device_c64_floppy_parallel_interface(mconfig, *this), |
r17426 | r17427 | |
867 | 993 | //------------------------------------------------- |
868 | 994 | |
869 | 995 | c1540_device::c1540_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
870 | | :base_c1541_device(mconfig, C1540, "C1540", tag, owner, clock, TYPE_1540) { } |
| 996 | : base_c1541_device(mconfig, C1540, "C1540", tag, owner, clock, TYPE_1540) { } |
871 | 997 | |
872 | 998 | |
873 | 999 | //------------------------------------------------- |
r17426 | r17427 | |
875 | 1001 | //------------------------------------------------- |
876 | 1002 | |
877 | 1003 | c1541_device::c1541_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
878 | | :base_c1541_device(mconfig, C1541, "C1541", tag, owner, clock, TYPE_1541) { } |
| 1004 | : base_c1541_device(mconfig, C1541, "C1541", tag, owner, clock, TYPE_1541) { } |
879 | 1005 | |
880 | 1006 | |
881 | 1007 | //------------------------------------------------- |
r17426 | r17427 | |
883 | 1009 | //------------------------------------------------- |
884 | 1010 | |
885 | 1011 | c1541c_device::c1541c_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
886 | | :base_c1541_device(mconfig, C1541C, "C1541C", tag, owner, clock, TYPE_1541C) { } |
| 1012 | : base_c1541_device(mconfig, C1541C, "C1541C", tag, owner, clock, TYPE_1541C) { } |
887 | 1013 | |
888 | 1014 | |
889 | 1015 | //------------------------------------------------- |
r17426 | r17427 | |
891 | 1017 | //------------------------------------------------- |
892 | 1018 | |
893 | 1019 | c1541ii_device::c1541ii_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
894 | | :base_c1541_device(mconfig, C1541II, "C1541-II", tag, owner, clock, TYPE_1541II) { } |
| 1020 | : base_c1541_device(mconfig, C1541II, "C1541-II", tag, owner, clock, TYPE_1541II) { } |
895 | 1021 | |
896 | 1022 | |
897 | 1023 | //------------------------------------------------- |
r17426 | r17427 | |
899 | 1025 | //------------------------------------------------- |
900 | 1026 | |
901 | 1027 | sx1541_device::sx1541_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
902 | | :base_c1541_device(mconfig, SX1541, "SX1541", tag, owner, clock, TYPE_SX1541) { } |
| 1028 | : base_c1541_device(mconfig, SX1541, "SX1541", tag, owner, clock, TYPE_SX1541) { } |
903 | 1029 | |
904 | 1030 | |
905 | 1031 | //------------------------------------------------- |
r17426 | r17427 | |
907 | 1033 | //------------------------------------------------- |
908 | 1034 | |
909 | 1035 | fsd2_device::fsd2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
910 | | :base_c1541_device(mconfig, FSD2, "FSD-2", tag, owner, clock, TYPE_FSD2) { } |
| 1036 | : base_c1541_device(mconfig, FSD2, "FSD-2", tag, owner, clock, TYPE_FSD2) { } |
911 | 1037 | |
912 | 1038 | |
913 | 1039 | //------------------------------------------------- |
r17426 | r17427 | |
915 | 1041 | //------------------------------------------------- |
916 | 1042 | |
917 | 1043 | c1541_dolphin_dos_device::c1541_dolphin_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
918 | | :base_c1541_device(mconfig, C1541_DOLPHIN_DOS, "C1541 Dolphin-DOS 2.0", tag, owner, clock, TYPE_1541_DOLPHIN_DOS) { } |
| 1044 | : base_c1541_device(mconfig, C1541_DOLPHIN_DOS, "C1541 Dolphin-DOS 2.0", tag, owner, clock, TYPE_1541_DOLPHIN_DOS) { } |
919 | 1045 | |
920 | 1046 | |
921 | 1047 | //------------------------------------------------- |
r17426 | r17427 | |
923 | 1049 | //------------------------------------------------- |
924 | 1050 | |
925 | 1051 | c1541_professional_dos_v1_device::c1541_professional_dos_v1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
926 | | :base_c1541_device(mconfig, C1541_PROFESSIONAL_DOS_V1, "C1541 Professional-DOS v1", tag, owner, clock, TYPE_1541_PROFESSIONAL_DOS_V1) { } |
| 1052 | : base_c1541_device(mconfig, C1541_PROFESSIONAL_DOS_V1, "C1541 Professional-DOS v1", tag, owner, clock, TYPE_1541_PROFESSIONAL_DOS_V1) { } |
927 | 1053 | |
928 | 1054 | |
929 | 1055 | //------------------------------------------------- |
| 1056 | // c1541_prologic_dos_classic_device - constructor |
| 1057 | //------------------------------------------------- |
| 1058 | |
| 1059 | c1541_prologic_dos_classic_device::c1541_prologic_dos_classic_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 1060 | : base_c1541_device(mconfig, C1541_PROLOGIC_DOS_CLASSIC, "C1541 ProLogic-DOS Classic", tag, owner, clock, TYPE_1541_PROLOGIC_DOS_CLASSIC), |
| 1061 | m_pia(*this, MC6821_TAG), |
| 1062 | m_centronics(*this, CENTRONICS_TAG) |
| 1063 | { |
| 1064 | } |
| 1065 | |
| 1066 | |
| 1067 | //------------------------------------------------- |
930 | 1068 | // device_start - device-specific startup |
931 | 1069 | //------------------------------------------------- |
932 | 1070 | |