Previous 199869 Revisions Next

r20955 Monday 11th February, 2013 at 20:01:56 UTC by Angelo Salese
Cosmetic change, nw
[src/emu/machine]stvcd.c

trunk/src/emu/machine/stvcd.c
r20954r20955
109109      1)
110110      printf("CD: command exec %04x %04x %04x %04x %04x (stat %04x)\n", hirqreg, cr1, cr2, cr3, cr4, cd_stat);
111111
112   switch (cr1 & 0xff00)
112   switch ((cr1 >> 8) & 0xff)
113113   {
114      case 0x0000:
114      case 0x00:
115115         //CDROM_LOG(("%s:CD: Get Status\n", machine.describe_context()))
116116         hirqreg |= CMOK;
117117         cr_standard_return(cd_stat);
118118         //CDROM_LOG(("   = %04x %04x %04x %04x %04x\n", hirqreg, cr1, cr2, cr3, cr4))
119119         break;
120120
121      case 0x0100:
121      case 0x01:
122122         CDROM_LOG(("%s:CD: Get Hardware Info\n", machine.describe_context()))
123123         hirqreg |= CMOK;
124124         cr1 = cd_stat;
r20954r20955
127127         cr4 = 0x0400;
128128         break;
129129
130      case 0x0200:    // Get TOC
130      case 0x02:    // Get TOC
131131         CDROM_LOG(("%s:CD: Get TOC\n", machine.describe_context()))
132132         cd_readTOC();
133133         cd_stat = CD_STAT_TRANS|CD_STAT_PAUSE;
r20954r20955
139139         hirqreg |= (CMOK|DRDY);
140140         break;
141141
142      case 0x0300:    // get session info (lower byte = session # to get?)
142      case 0x03:    // get session info (lower byte = session # to get?)
143143                  // bios is interested in returns in cr3 and cr4
144144                  // cr3 should be data track #
145145                  // cr4 must be > 1 and < 100 or bios gets angry.
r20954r20955
176176         break;
177177
178178      /* TODO: double check this */
179      case 0x0400:    // initialize CD system
179      case 0x04:    // initialize CD system
180180            // CR1 & 1 = reset software
181181            // CR1 & 2 = decode RW subcode
182182            // CR1 & 4 = don't confirm mode 2 subheader
r20954r20955
224224         cr_standard_return(cd_stat);
225225         break;
226226
227      case 0x0600:    // end data transfer (TODO: needs to be worked on!)
227      case 0x06:    // end data transfer (TODO: needs to be worked on!)
228228            // returns # of bytes transfered (24 bits) in
229229            // low byte of cr1 (MSB) and cr2 (middle byte, LSB)
230230         CDROM_LOG(("%s:CD: End data transfer (%d bytes xfer'd)\n", machine.describe_context(), xferdnum))
r20954r20955
297297         CDROM_LOG(("   = %04x %04x %04x %04x %04x\n", hirqreg, cr1, cr2, cr3, cr4))
298298         break;
299299
300      case 0x1000: // Play Disc.  FAD is in lowest 7 bits of cr1 and all of cr2.
300      case 0x10: // Play Disc.  FAD is in lowest 7 bits of cr1 and all of cr2.
301301         UINT32 start_pos,end_pos;
302302         UINT8 play_mode;
303303
r20954r20955
413413
414414         break;
415415
416      case 0x1100: // disc seek
416      case 0x11: // disc seek
417417         CDROM_LOG(("%s:CD: Disc seek\n",   machine.describe_context()))
418418         //printf("%08x %08x %08x %08x\n",cr1,cr2,cr3,cr4);
419419         if (cr1 & 0x80)
r20954r20955
459459         cr_standard_return(cd_stat);
460460         break;
461461
462      case 0x1200: // FFWD / REW
462      case 0x12: // FFWD / REW
463463         //cr1 bit 0 determines if this is a Fast Forward (0) or a Rewind (1) command
464464         // ...
465465         break;
466466
467      case 0x2000: // Get SubCode Q / RW Channel
467      case 0x20: // Get SubCode Q / RW Channel
468468         switch(cr1 & 0xff)
469469         {
470470            case 0: // Get Q
r20954r20955
535535         hirqreg |= CMOK|DRDY;
536536         break;
537537
538      case 0x3000:    // Set CD Device connection
538      case 0x30:    // Set CD Device connection
539539         {
540540            UINT8 parm;
541541
r20954r20955
564564         }
565565         break;
566566
567      case 0x3100:
567      case 0x31:
568568         popmessage("Get CD Device Connection, contact MAMEdev");
569569         hirqreg |= CMOK;
570570         break;
571571
572      case 0x3200:    // Last Buffer Destination
572      case 0x32:    // Last Buffer Destination
573573         cr1 = cd_stat | 0;
574574         cr2 = 0;
575575         cr3 = lastbuf << 8;
r20954r20955
577577         hirqreg |= (CMOK);
578578         break;
579579
580      case 0x4000:    // Set Filter Range
580      case 0x40:    // Set Filter Range
581581                  // cr1 low + cr2 = FAD0, cr3 low + cr4 = FAD1
582582                  // cr3 hi = filter num.
583583         {
r20954r20955
595595         }
596596         break;
597597
598      case 0x4100:
598      case 0x41:
599599         popmessage("Get Filter Range, contact MAMEdev");
600600         hirqreg |= CMOK;
601601         break;
602602
603      case 0x4200:    // Set Filter Subheader conditions
603      case 0x42:    // Set Filter Subheader conditions
604604         {
605605            UINT8 fnum = (cr3>>8)&0xff;
606606
r20954r20955
618618         }
619619         break;
620620
621      case 0x4300:    // Get Filter Subheader conditions
621      case 0x43:    // Get Filter Subheader conditions
622622         {
623623            UINT8 fnum = (cr3>>8)&0xff;
624624
r20954r20955
633633         }
634634         break;
635635
636      case 0x4400:    // Set Filter Mode
636      case 0x44:    // Set Filter Mode
637637         {
638638            UINT8 fnum = (cr3>>8)&0xff;
639639            UINT8 mode = (cr1 & 0xff);
r20954r20955
654654         }
655655         break;
656656
657      case 0x4500:    // Get Filter Mode
657      case 0x45:    // Get Filter Mode
658658         {
659659            UINT8 fnum = (cr3>>8)&0xff;
660660
r20954r20955
666666         }
667667         break;
668668
669      case 0x4600:    // Set Filter Connection
669      case 0x46:    // Set Filter Connection
670670         {
671671            /* TODO: maybe condition false is cr3 low? */
672672            UINT8 fnum = (cr3>>8)&0xff;
r20954r20955
684684         }
685685         break;
686686
687      case 0x4800:    // Reset Selector
687      case 0x48:    // Reset Selector
688688         {
689689         int i,j;
690690
r20954r20955
771771         }
772772         break;
773773
774      case 0x5000:    // get Buffer Size
774      case 0x50:    // get Buffer Size
775775         cr1 = cd_stat;
776776         cr2 = (freeblocks > 200) ? 200 : freeblocks;
777777         cr3 = 0x1800;
r20954r20955
780780         hirqreg |= (CMOK);
781781         break;
782782
783      case 0x5100:    // get # sectors used in a buffer
783      case 0x51:    // get # sectors used in a buffer
784784         {
785785            UINT32 bufnum = cr3>>8;
786786
r20954r20955
803803         }
804804         break;
805805
806      case 0x5200:    // calculate actual size
806      case 0x52:    // calculate actual size
807807         {
808808            UINT32 bufnum = cr3>>8;
809809            UINT32 sectoffs = cr2;
r20954r20955
830830         }
831831         break;
832832
833      case 0x5300:    // get actual block size
833      case 0x53:    // get actual block size
834834         CDROM_LOG(("%s:CD: Get actual block size\n", machine.describe_context()))
835835         hirqreg |= (CMOK|ESEL);
836836         cr1 = cd_stat | ((calcsize>>16)&0xff);
r20954r20955
839839         cr4 = 0;
840840         break;
841841
842      case 0x5400:    // get sector info
842      case 0x54:    // get sector info
843843         {
844844            UINT32 sectoffs = cr2 & 0xff;
845845            UINT32 bufnum = cr3>>8;
r20954r20955
861861         }
862862         break;
863863
864      case 0x6000:    // set sector length
864      case 0x60:    // set sector length
865865         CDROM_LOG(("%s:CD: Set sector length\n",   machine.describe_context()))
866866
867867         switch (cr1 & 0xff)
r20954r20955
899899         cr_standard_return(cd_stat);
900900         break;
901901
902      case 0x6100:    // get sector data
902      case 0x61:    // get sector data
903903         {
904904            UINT32 sectnum = cr4;
905905            UINT32 sectofs = cr2;
r20954r20955
941941         }
942942         break;
943943
944      case 0x6200:    // delete sector data
944      case 0x62:    // delete sector data
945945         {
946946            UINT32 sectnum = cr4;
947947            UINT32 sectofs = cr2;
r20954r20955
993993         }
994994         break;
995995
996      case 0x6300:    // get then delete sector data
996      case 0x63:    // get then delete sector data
997997         {
998998            UINT32 sectnum = cr4;
999999            UINT32 sectofs = cr2;
r20954r20955
10351035         }
10361036         break;
10371037
1038      case 0x6400:    // put sector data
1038      case 0x64:    // put sector data
10391039         /* TODO: After Burner 2, Out Run, Fantasy Zone and Dungeon Master Nexus trips this */
10401040         // ...
10411041         {
r20954r20955
10491049         cr_standard_return(cd_stat);
10501050         break;
10511051
1052      case 0x6500:
1052      case 0x65:
10531053         popmessage("Copy Sector data, contact MAMEdev");
10541054         hirqreg |= (CMOK);
10551055         break;
10561056
1057      case 0x6600:    // move sector data
1057      case 0x66:    // move sector data
10581058         /* TODO: Sword & Sorcery / Riglord Saga 2 */
10591059         {
10601060            //UINT8 src_filter = (cr3>>8)&0xff;
r20954r20955
10661066         break;
10671067
10681068
1069      case 0x6700:    // get copy error
1069      case 0x67:    // get copy error
10701070         CDROM_LOG(("%s:CD: Get copy error\n",   machine.describe_context()))
10711071         printf("Get copy error\n");
10721072         cr1 = cd_stat;
r20954r20955
10761076         hirqreg |= (CMOK);
10771077         break;
10781078
1079      case 0x7000:    // change directory
1079      case 0x70:    // change directory
10801080         CDROM_LOG(("%s:CD: Change Directory\n",   machine.describe_context()))
10811081         hirqreg |= (CMOK|EFLS);
10821082
r20954r20955
10871087         cr_standard_return(cd_stat);
10881088         break;
10891089
1090      case 0x7100:    // Read directory entry
1090      case 0x71:    // Read directory entry
10911091         CDROM_LOG(("%s:CD: Read Directory Entry\n",   machine.describe_context()))
10921092//          UINT32 read_dir;
10931093
r20954r20955
11051105         hirqreg |= (CMOK|EFLS);
11061106         break;
11071107
1108      case 0x7200:    // Get file system scope
1108      case 0x72:    // Get file system scope
11091109         CDROM_LOG(("CD: Get file system scope\n"))
11101110         hirqreg |= (CMOK|EFLS);
11111111         cr1 = cd_stat;
r20954r20955
11151115         printf("%04x %04x %04x %04x\n",cr1,cr2,cr3,cr4);
11161116         break;
11171117
1118      case 0x7300:    // Get File Info
1118      case 0x73:    // Get File Info
11191119         CDROM_LOG(("%s:CD: Get File Info\n",   machine.describe_context()))
11201120         cd_stat |= CD_STAT_TRANS;
11211121         cd_stat &= 0xff00;      // clear top byte of return value
r20954r20955
11731173         CDROM_LOG(("   = %04x %04x %04x %04x %04x\n", hirqreg, cr1, cr2, cr3, cr4))
11741174         break;
11751175
1176      case 0x7400:    // Read File
1176      case 0x74:    // Read File
11771177         CDROM_LOG(("%s:CD: Read File\n",   machine.describe_context()))
11781178         UINT16 file_offset,file_filter,file_id,file_size;
11791179
r20954r20955
12031203
12041204         break;
12051205
1206      case 0x7500:
1206      case 0x75:
12071207         CDROM_LOG(("%s:CD: Abort File\n",   machine.describe_context()))
12081208         // bios expects "2bc" mask to work against this
12091209         hirqreg |= (CMOK|EFLS);
r20954r20955
12151215         cr_standard_return(cd_stat);
12161216         break;
12171217
1218      case 0xe000:    // appears to be copy protection check.  needs only to return OK.
1218      case 0xe0:    // appears to be copy protection check.  needs only to return OK.
12191219         CDROM_LOG(("%s:CD: Verify copy protection\n",   machine.describe_context()))
12201220         if(((cd_stat & 0x0f00) != CD_STAT_NODISC) && ((cd_stat & 0x0f00) != CD_STAT_OPEN))
12211221            cd_stat = CD_STAT_PAUSE;
r20954r20955
12271227         cr_standard_return(cd_stat);
12281228         break;
12291229
1230      case 0xe100:    // get disc region
1230      case 0xe1:    // get disc region
12311231         CDROM_LOG(("%s:CD: Get disc region\n",   machine.describe_context()))
12321232         if(cd_stat != CD_STAT_NODISC && cd_stat != CD_STAT_OPEN)
12331233            cd_stat = CD_STAT_PAUSE;
r20954r20955
12401240         break;
12411241
12421242      default:
1243         CDROM_LOG(("CD: Unknown command %04x\n", cr1))
1243         CDROM_LOG(("CD: Unknown command %04x\n", cr1>>8))
1244         popmessage("CD Block unknown command %02x, contact MAMEdev",cr1>>8);
12441245         hirqreg |= (CMOK);
12451246         break;
12461247   }

Previous 199869 Revisions Next


© 1997-2024 The MAME Team