trunk/src/emu/machine/smpc.c
| r21995 | r21996 | |
| 220 | 220 | state->m_smpc.SF = 0x00; //clear hand-shake flag |
| 221 | 221 | } |
| 222 | 222 | |
| 223 | static TIMER_CALLBACK( smpc_cd_enable ) |
| 224 | { |
| 225 | saturn_state *state = machine.driver_data<saturn_state>(); |
| 226 | |
| 227 | state->m_smpc.OREG[31] = param + 0x08; //read-back for last command issued |
| 228 | state->m_smpc.SF = 0x08; //clear hand-shake flag (TODO: diagnostic wants this to have bit 3 high) |
| 229 | } |
| 230 | |
| 223 | 231 | static void smpc_system_reset(running_machine &machine) |
| 224 | 232 | { |
| 225 | 233 | saturn_state *state = machine.driver_data<saturn_state>(); |
| r21995 | r21996 | |
| 699 | 707 | space.machine().scheduler().timer_set(attotime::from_usec(100), FUNC(smpc_sound_enable),data & 1); |
| 700 | 708 | break; |
| 701 | 709 | /*CD (SH-1) ON/OFF */ |
| 702 | | //case 0x08: |
| 703 | | //case 0x09: |
| 710 | case 0x08: |
| 711 | case 0x09: |
| 712 | printf ("SMPC: CD %s\n",(data & 1) ? "off" : "on"); |
| 713 | space.machine().scheduler().timer_set(attotime::from_usec(40), FUNC(smpc_cd_enable),data & 1); |
| 714 | break; |
| 704 | 715 | case 0x0d: |
| 705 | 716 | if(LOG_SMPC) printf ("SMPC: System Reset\n"); |
| 706 | 717 | smpc_system_reset(space.machine()); |
| r21995 | r21996 | |
| 850 | 861 | smpc_comreg_exec(space,data,1); |
| 851 | 862 | |
| 852 | 863 | // we've processed the command, clear status flag |
| 853 | | if(data != 0x10 && data != 0x02 && data != 0x03 && data != 0xe && data != 0xf && data != 0x19 && data != 0x1a) |
| 864 | if(data != 0x10 && data != 0x02 && data != 0x03 && data != 0x08 && data != 0x09 && data != 0xe && data != 0xf && data != 0x19 && data != 0x1a) |
| 854 | 865 | { |
| 855 | 866 | state->m_smpc.OREG[31] = data; //read-back command |
| 856 | 867 | state->m_smpc.SF = 0x00; |
| r21995 | r21996 | |
| 1010 | 1021 | |
| 1011 | 1022 | switch(cur_ddr & 0x60) |
| 1012 | 1023 | { |
| 1024 | case 0x00: break; // in diag test |
| 1013 | 1025 | case 0x40: return_data = smpc_th_control_mode(offset == 0x77); break; |
| 1014 | 1026 | case 0x60: return_data = smpc_direct_mode(offset == 0x77); break; |
| 1015 | 1027 | default: |
| r21995 | r21996 | |
| 1060 | 1072 | smpc_comreg_exec(space,data,0); |
| 1061 | 1073 | |
| 1062 | 1074 | // we've processed the command, clear status flag |
| 1063 | | if(data != 0x10 && data != 2 && data != 3 && data != 6 && data != 7 && data != 0x0e && data != 0x0f && data != 0x19 && data != 0x1a) |
| 1075 | if(data != 0x10 && data != 2 && data != 3 && data != 6 && data != 7 && data != 0x08 && data != 0x09 && data != 0x0e && data != 0x0f && data != 0x19 && data != 0x1a) |
| 1064 | 1076 | { |
| 1065 | 1077 | m_smpc.OREG[31] = data; //read-back for last command issued |
| 1066 | 1078 | m_smpc.SF = 0x00; //clear hand-shake flag |