trunk/src/emu/machine/stvcd.c
| r21717 | r21718 | |
| 118 | 118 | cr3 = (get_track_index(cd_curfad)<<8) | (cd_curfad>>16); //index & 0xff00 |
| 119 | 119 | cr4 = cd_curfad; |
| 120 | 120 | } |
| 121 | | cd_stat |= CD_STAT_PERI; |
| 122 | 121 | } |
| 123 | 122 | |
| 124 | 123 | void saturn_state::cd_exec_command( void ) |
| r21717 | r21718 | |
| 137 | 136 | case 0x00: |
| 138 | 137 | //CDROM_LOG(("%s:CD: Get Status\n", machine().describe_context())) |
| 139 | 138 | hirqreg |= CMOK; |
| 140 | | cr_standard_return(cd_stat); |
| 139 | if(status_type == 0) |
| 140 | cr_standard_return(cd_stat); |
| 141 | else |
| 142 | { |
| 143 | cr1 = prev_cr1; |
| 144 | cr2 = prev_cr2; |
| 145 | cr3 = prev_cr3; |
| 146 | cr4 = prev_cr4; |
| 147 | } |
| 141 | 148 | //CDROM_LOG((" = %04x %04x %04x %04x %04x\n", hirqreg, cr1, cr2, cr3, cr4)) |
| 142 | 149 | break; |
| 143 | 150 | |
| r21717 | r21718 | |
| 148 | 155 | cr2 = 0x0201; |
| 149 | 156 | cr3 = 0x0000; |
| 150 | 157 | cr4 = 0x0400; |
| 158 | status_type = 0; |
| 151 | 159 | break; |
| 152 | 160 | |
| 153 | 161 | case 0x02: // Get TOC |
| r21717 | r21718 | |
| 160 | 168 | cr4 = 0; |
| 161 | 169 | xferdnum = 0; |
| 162 | 170 | hirqreg |= (CMOK|DRDY); |
| 171 | status_type = 0; |
| 163 | 172 | break; |
| 164 | 173 | |
| 165 | 174 | case 0x03: // get session info (lower byte = session # to get?) |
| r21717 | r21718 | |
| 196 | 205 | } |
| 197 | 206 | |
| 198 | 207 | hirqreg |= (CMOK); |
| 208 | status_type = 0; |
| 199 | 209 | break; |
| 200 | 210 | |
| 201 | 211 | /* TODO: double check this */ |
| r21717 | r21718 | |
| 245 | 255 | |
| 246 | 256 | hirqreg |= (CMOK|ESEL); |
| 247 | 257 | cr_standard_return(cd_stat); |
| 258 | status_type = 0; |
| 248 | 259 | break; |
| 249 | 260 | |
| 250 | 261 | case 0x06: // end data transfer (TODO: needs to be worked on!) |
| r21717 | r21718 | |
| 319 | 330 | hirqreg |= CMOK; |
| 320 | 331 | |
| 321 | 332 | CDROM_LOG((" = %04x %04x %04x %04x %04x\n", hirqreg, cr1, cr2, cr3, cr4)) |
| 333 | status_type = 0; |
| 322 | 334 | break; |
| 323 | 335 | |
| 324 | 336 | case 0x10: // Play Disc. FAD is in lowest 7 bits of cr1 and all of cr2. |
| r21717 | r21718 | |
| 435 | 447 | cdda_maxrepeat = 0; |
| 436 | 448 | |
| 437 | 449 | cdda_repeat_count = 0; |
| 438 | | |
| 450 | status_type = 0; |
| 439 | 451 | break; |
| 440 | 452 | |
| 441 | 453 | case 0x11: // disc seek |
| r21717 | r21718 | |
| 482 | 494 | |
| 483 | 495 | hirqreg |= CMOK; |
| 484 | 496 | cr_standard_return(cd_stat); |
| 497 | status_type = 0; |
| 485 | 498 | break; |
| 486 | 499 | |
| 487 | 500 | case 0x12: // FFWD / REW |
| r21717 | r21718 | |
| 558 | 571 | break; |
| 559 | 572 | } |
| 560 | 573 | hirqreg |= CMOK|DRDY; |
| 574 | status_type = 0; |
| 561 | 575 | break; |
| 562 | 576 | |
| 563 | 577 | case 0x30: // Set CD Device connection |
| r21717 | r21718 | |
| 586 | 600 | |
| 587 | 601 | hirqreg |= (CMOK|ESEL); |
| 588 | 602 | cr_standard_return(cd_stat); |
| 603 | status_type = 0; |
| 589 | 604 | } |
| 590 | 605 | break; |
| 591 | 606 | |
| r21717 | r21718 | |
| 600 | 615 | cr3 = lastbuf << 8; |
| 601 | 616 | cr4 = 0; |
| 602 | 617 | hirqreg |= (CMOK); |
| 618 | status_type = 0; |
| 603 | 619 | break; |
| 604 | 620 | |
| 605 | 621 | case 0x40: // Set Filter Range |
| r21717 | r21718 | |
| 617 | 633 | |
| 618 | 634 | hirqreg |= (CMOK|ESEL); |
| 619 | 635 | cr_standard_return(cd_stat); |
| 636 | status_type = 0; |
| 620 | 637 | } |
| 621 | 638 | break; |
| 622 | 639 | |
| r21717 | r21718 | |
| 640 | 657 | |
| 641 | 658 | hirqreg |= (CMOK|ESEL); |
| 642 | 659 | cr_standard_return(cd_stat); |
| 660 | status_type = 0; |
| 643 | 661 | } |
| 644 | 662 | break; |
| 645 | 663 | |
| r21717 | r21718 | |
| 655 | 673 | cr4 = (filters[fnum].smval << 8) | (filters[fnum].cival & 0xff); |
| 656 | 674 | |
| 657 | 675 | hirqreg |= (CMOK|ESEL); |
| 676 | status_type = 0; |
| 658 | 677 | } |
| 659 | 678 | break; |
| 660 | 679 | |
| r21717 | r21718 | |
| 676 | 695 | CDROM_LOG(("%s:CD: Set Filter Mode filt %x mode %x\n", machine().describe_context(), fnum, mode)) |
| 677 | 696 | hirqreg |= (CMOK|ESEL); |
| 678 | 697 | cr_standard_return(cd_stat); |
| 698 | status_type = 0; |
| 679 | 699 | } |
| 680 | 700 | break; |
| 681 | 701 | |
| r21717 | r21718 | |
| 689 | 709 | cr4 = 0; |
| 690 | 710 | |
| 691 | 711 | hirqreg |= (CMOK|ESEL); |
| 712 | status_type = 0; |
| 692 | 713 | } |
| 693 | 714 | break; |
| 694 | 715 | |
| r21717 | r21718 | |
| 707 | 728 | |
| 708 | 729 | hirqreg |= (CMOK|ESEL); |
| 709 | 730 | cr_standard_return(cd_stat); |
| 731 | status_type = 0; |
| 710 | 732 | } |
| 711 | 733 | break; |
| 712 | 734 | |
| r21717 | r21718 | |
| 739 | 761 | |
| 740 | 762 | hirqreg |= (CMOK|ESEL); |
| 741 | 763 | cr_standard_return(cd_stat); |
| 764 | status_type = 0; |
| 742 | 765 | return; |
| 743 | 766 | } |
| 744 | 767 | |
| r21717 | r21718 | |
| 795 | 818 | |
| 796 | 819 | hirqreg |= (CMOK|ESEL); |
| 797 | 820 | cr_standard_return(cd_stat); |
| 821 | status_type = 0; |
| 798 | 822 | } |
| 799 | 823 | break; |
| 800 | 824 | |
| r21717 | r21718 | |
| 805 | 829 | cr4 = 200; |
| 806 | 830 | CDROM_LOG(("CD: Get Buffer Size = %d\n", cr2)) |
| 807 | 831 | hirqreg |= (CMOK); |
| 832 | status_type = 0; |
| 808 | 833 | break; |
| 809 | 834 | |
| 810 | 835 | case 0x51: // get # sectors used in a buffer |
| r21717 | r21718 | |
| 830 | 855 | } |
| 831 | 856 | |
| 832 | 857 | hirqreg |= (CMOK|DRDY); |
| 858 | status_type = 1; |
| 833 | 859 | } |
| 834 | 860 | break; |
| 835 | 861 | |
| r21717 | r21718 | |
| 857 | 883 | |
| 858 | 884 | hirqreg |= (CMOK|ESEL); |
| 859 | 885 | cr_standard_return(cd_stat); |
| 886 | status_type = 1; |
| 860 | 887 | } |
| 861 | 888 | break; |
| 862 | 889 | |
| r21717 | r21718 | |
| 867 | 894 | cr3 = 0; |
| 868 | 895 | cr4 = 0; |
| 869 | 896 | hirqreg |= (CMOK|ESEL); |
| 897 | status_type = 1; |
| 870 | 898 | break; |
| 871 | 899 | |
| 872 | 900 | case 0x54: // get sector info |
| r21717 | r21718 | |
| 888 | 916 | cr4 = ((partitions[bufnum].blocks[sectoffs]->subm & 0xff) << 8) | (partitions[bufnum].blocks[sectoffs]->cinf & 0xff); |
| 889 | 917 | hirqreg |= (CMOK|ESEL); |
| 890 | 918 | } |
| 919 | |
| 920 | status_type = 0; |
| 891 | 921 | } |
| 892 | 922 | break; |
| 893 | 923 | |
| r21717 | r21718 | |
| 927 | 957 | } |
| 928 | 958 | hirqreg |= (CMOK|ESEL); |
| 929 | 959 | cr_standard_return(cd_stat); |
| 960 | status_type = 0; |
| 930 | 961 | break; |
| 931 | 962 | |
| 932 | 963 | case 0x61: // get sector data |
| r21717 | r21718 | |
| 967 | 998 | cd_stat |= CD_STAT_TRANS; |
| 968 | 999 | cr_standard_return(cd_stat); |
| 969 | 1000 | hirqreg |= (CMOK|EHST|DRDY); |
| 1001 | status_type = 0; |
| 970 | 1002 | } |
| 971 | 1003 | break; |
| 972 | 1004 | |
| r21717 | r21718 | |
| 1019 | 1051 | cd_stat &= ~CD_STAT_TRANS; |
| 1020 | 1052 | cr_standard_return(cd_stat); |
| 1021 | 1053 | hirqreg |= (CMOK|EHST); |
| 1054 | status_type = 0; |
| 1022 | 1055 | } |
| 1023 | 1056 | break; |
| 1024 | 1057 | |
| r21717 | r21718 | |
| 1061 | 1094 | cd_stat |= CD_STAT_TRANS; |
| 1062 | 1095 | cr_standard_return(cd_stat); |
| 1063 | 1096 | hirqreg |= (CMOK|EHST|DRDY); |
| 1097 | status_type = 0; |
| 1064 | 1098 | } |
| 1065 | 1099 | break; |
| 1066 | 1100 | |
| r21717 | r21718 | |
| 1099 | 1133 | |
| 1100 | 1134 | hirqreg |= (CMOK|DRDY); |
| 1101 | 1135 | cr_standard_return(cd_stat); |
| 1136 | status_type = 0; |
| 1102 | 1137 | break; |
| 1103 | 1138 | |
| 1104 | 1139 | case 0x65: |
| r21717 | r21718 | |
| 1140 | 1175 | |
| 1141 | 1176 | hirqreg |= (CMOK|ECPY); |
| 1142 | 1177 | cr_standard_return(cd_stat); |
| 1178 | status_type = 0; |
| 1143 | 1179 | break; |
| 1144 | 1180 | |
| 1145 | 1181 | |
| r21717 | r21718 | |
| 1151 | 1187 | cr3 = 0; |
| 1152 | 1188 | cr4 = 0; |
| 1153 | 1189 | hirqreg |= (CMOK); |
| 1190 | status_type = 0; |
| 1154 | 1191 | break; |
| 1155 | 1192 | |
| 1156 | 1193 | case 0x70: // change directory |
| r21717 | r21718 | |
| 1162 | 1199 | |
| 1163 | 1200 | read_new_dir(temp); |
| 1164 | 1201 | cr_standard_return(cd_stat); |
| 1202 | status_type = 0; |
| 1165 | 1203 | break; |
| 1166 | 1204 | |
| 1167 | 1205 | case 0x71: // Read directory entry |
| r21717 | r21718 | |
| 1180 | 1218 | |
| 1181 | 1219 | cr_standard_return(cd_stat); |
| 1182 | 1220 | hirqreg |= (CMOK|EFLS); |
| 1221 | status_type = 0; |
| 1183 | 1222 | break; |
| 1184 | 1223 | |
| 1185 | 1224 | case 0x72: // Get file system scope |
| r21717 | r21718 | |
| 1190 | 1229 | cr3 = 0x0100; // report directory held |
| 1191 | 1230 | cr4 = firstfile; // first file id |
| 1192 | 1231 | printf("%04x %04x %04x %04x\n",cr1,cr2,cr3,cr4); |
| 1232 | status_type = 0; |
| 1193 | 1233 | break; |
| 1194 | 1234 | |
| 1195 | 1235 | case 0x73: // Get File Info |
| r21717 | r21718 | |
| 1248 | 1288 | xfercount = 0; |
| 1249 | 1289 | } |
| 1250 | 1290 | CDROM_LOG((" = %04x %04x %04x %04x %04x\n", hirqreg, cr1, cr2, cr3, cr4)) |
| 1291 | status_type = 0; |
| 1251 | 1292 | break; |
| 1252 | 1293 | |
| 1253 | 1294 | case 0x74: // Read File |
| r21717 | r21718 | |
| 1277 | 1318 | playtype = 1; |
| 1278 | 1319 | |
| 1279 | 1320 | hirqreg |= (CMOK|EHST); |
| 1280 | | |
| 1321 | status_type = 0; |
| 1281 | 1322 | break; |
| 1282 | 1323 | |
| 1283 | 1324 | case 0x75: |
| r21717 | r21718 | |
| 1290 | 1331 | if(((cd_stat & 0x0f00) != CD_STAT_NODISC) && ((cd_stat & 0x0f00) != CD_STAT_OPEN)) |
| 1291 | 1332 | cd_stat = CD_STAT_PAUSE; // force to pause |
| 1292 | 1333 | cr_standard_return(cd_stat); |
| 1334 | status_type = 0; |
| 1293 | 1335 | break; |
| 1294 | 1336 | |
| 1295 | 1337 | case 0xe0: // appears to be copy protection check. needs only to return OK. |
| r21717 | r21718 | |
| 1302 | 1344 | sectorstore = 1; |
| 1303 | 1345 | hirqreg = 0xfc5; |
| 1304 | 1346 | cr_standard_return(cd_stat); |
| 1347 | status_type = 0; |
| 1305 | 1348 | break; |
| 1306 | 1349 | |
| 1307 | 1350 | case 0xe1: // get disc region |
| r21717 | r21718 | |
| 1314 | 1357 | cr4 = 0; |
| 1315 | 1358 | hirqreg |= (CMOK); |
| 1316 | 1359 | // cr_standard_return(cd_stat); |
| 1360 | status_type = 0; |
| 1317 | 1361 | break; |
| 1318 | 1362 | |
| 1319 | 1363 | default: |
| r21717 | r21718 | |
| 1322 | 1366 | hirqreg |= (CMOK); |
| 1323 | 1367 | break; |
| 1324 | 1368 | } |
| 1369 | |
| 1370 | prev_cr1 = cr1; |
| 1371 | prev_cr2 = cr2; |
| 1372 | prev_cr3 = cr3; |
| 1373 | prev_cr4 = cr4; |
| 1325 | 1374 | } |
| 1326 | 1375 | |
| 1327 | 1376 | TIMER_DEVICE_CALLBACK_MEMBER( saturn_state::stv_sh1_sim ) |