src/mess/drivers/pc6001.c
| r8685 | r8686 | |
| 105 | 105 | static UINT8 irq_vector = 0x00; |
| 106 | 106 | static UINT8 cas_switch,sys_latch; |
| 107 | 107 | static UINT32 cas_offset; |
| 108 | static UINT32 cas_maxsize; |
| 108 | 109 | |
| 109 | | #define CAS_LENGTH 0x1655 |
| 110 | //#define CAS_LENGTH 0x1655 |
| 110 | 111 | |
| 111 | 112 | static VIDEO_START( pc6001 ) |
| 112 | 113 | { |
| r8685 | r8686 | |
| 255 | 256 | if((!(sys_latch & 8)) && data & 0x8) //PLAY tape cmd |
| 256 | 257 | { |
| 257 | 258 | cas_switch = 1; |
| 258 | | cassette_change_state(space->machine->device("cass" ),CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR); |
| 259 | | cassette_change_state(space->machine->device("cass" ),CASSETTE_PLAY,CASSETTE_MASK_UISTATE); |
| 259 | //cassette_change_state(space->machine->device("cass" ),CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR); |
| 260 | //cassette_change_state(space->machine->device("cass" ),CASSETTE_PLAY,CASSETTE_MASK_UISTATE); |
| 260 | 261 | } |
| 261 | 262 | if((sys_latch & 8) && ((data & 0x8) == 0)) //STOP tape cmd |
| 262 | 263 | { |
| 263 | 264 | cas_switch = 0; |
| 264 | | cassette_change_state(space->machine->device("cass" ),CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR); |
| 265 | | cassette_change_state(space->machine->device("cass" ),CASSETTE_STOPPED,CASSETTE_MASK_UISTATE); |
| 265 | //cassette_change_state(space->machine->device("cass" ),CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR); |
| 266 | //cassette_change_state(space->machine->device("cass" ),CASSETTE_STOPPED,CASSETTE_MASK_UISTATE); |
| 266 | 267 | //irq_vector = 0x00; |
| 267 | 268 | //cputag_set_input_line(space->machine,"maincpu", 0, ASSERT_LINE); |
| 268 | 269 | } |
| r8685 | r8686 | |
| 740 | 741 | |
| 741 | 742 | static TIMER_CALLBACK(cassette_callback) |
| 742 | 743 | { |
| 743 | | //UINT8 *gfx_data = memory_region(machine, "cas"); |
| 744 | | |
| 745 | 744 | if(cas_switch == 1) |
| 746 | 745 | { |
| 746 | #if 0 |
| 747 | 747 | static UINT8 cas_data_i = 0x80,cas_data_poll; |
| 748 | 748 | //cur_keycode = gfx_data[cas_offset++]; |
| 749 | 749 | if(cassette_input(machine->device("cass")) > 0.03) |
| r8685 | r8686 | |
| 760 | 760 | } |
| 761 | 761 | else |
| 762 | 762 | cas_data_i>>=1; |
| 763 | #else |
| 764 | UINT8 *cas_data = memory_region(machine, "cas"); |
| 763 | 765 | |
| 764 | | //popmessage("%04x %02x",cas_offset,cas_switch); |
| 765 | | #if 0 |
| 766 | | if(cas_offset >= CAS_LENGTH) |
| 767 | | { |
| 768 | | cas_offset = 0; |
| 769 | | cas_switch = 0; |
| 770 | | irq_vector = 0x12; |
| 771 | | cputag_set_input_line(machine,"maincpu", 0, ASSERT_LINE); |
| 772 | | } |
| 766 | cur_keycode = cas_data[cas_offset++]; |
| 767 | popmessage("%04x %02x",cas_offset,cas_switch); |
| 768 | if(cas_offset >= cas_maxsize) |
| 769 | { |
| 770 | cas_offset = 0; |
| 771 | cas_switch = 0; |
| 772 | irq_vector = 0x12; |
| 773 | cputag_set_input_line(machine,"maincpu", 0, ASSERT_LINE); |
| 774 | } |
| 775 | else |
| 776 | { |
| 777 | irq_vector = 0x08; |
| 778 | cputag_set_input_line(machine,"maincpu", 0, ASSERT_LINE); |
| 779 | } |
| 773 | 780 | #endif |
| 774 | 781 | } |
| 775 | 782 | } |
| r8685 | r8686 | |
| 876 | 883 | NULL |
| 877 | 884 | }; |
| 878 | 885 | |
| 886 | static DEVICE_IMAGE_LOAD( pc6001_cass ) |
| 887 | { |
| 888 | UINT8 *cas = memory_region(image.device().machine, "cas"); |
| 889 | UINT32 size; |
| 890 | |
| 891 | size = image.length(); |
| 892 | if (image.fread( cas, size) != size) |
| 893 | { |
| 894 | image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unable to fully read from file"); |
| 895 | return IMAGE_INIT_FAIL; |
| 896 | } |
| 897 | |
| 898 | cas_maxsize = size; |
| 899 | |
| 900 | return IMAGE_INIT_PASS; |
| 901 | } |
| 902 | |
| 879 | 903 | static MACHINE_DRIVER_START( pc6001 ) |
| 880 | 904 | /* basic machine hardware */ |
| 881 | 905 | MDRV_CPU_ADD("maincpu",Z80, 7987200 / 4) |
| r8685 | r8686 | |
| 909 | 933 | MDRV_CARTSLOT_EXTENSION_LIST("bin") |
| 910 | 934 | MDRV_CARTSLOT_NOT_MANDATORY |
| 911 | 935 | |
| 912 | | MDRV_CASSETTE_ADD("cass",pc6001_cassette_config) |
| 936 | // MDRV_CASSETTE_ADD("cass",pc6001_cassette_config) |
| 937 | MDRV_CARTSLOT_ADD("cass") |
| 938 | MDRV_CARTSLOT_EXTENSION_LIST("cass") |
| 939 | MDRV_CARTSLOT_NOT_MANDATORY |
| 940 | MDRV_CARTSLOT_INTERFACE("pc6001_cass") |
| 941 | MDRV_CARTSLOT_LOAD(pc6001_cass) |
| 913 | 942 | |
| 914 | 943 | MDRV_SPEAKER_STANDARD_MONO("mono") |
| 915 | 944 | MDRV_SOUND_ADD("ay8910", AY8910, XTAL_4MHz/2) |