home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cdrom.zip / DDK / BASE / SRC / DEV / DASD / CDROM / MITSUMI / cmd.h < prev    next >
C/C++ Source or Header  |  1996-06-18  |  14KB  |  402 lines

  1. // Mistumi LS005 commands
  2. // ALl commands return AT least Drive Status
  3.  
  4.  
  5. #define TimeOut              0xff
  6. #define SearchCount            2000
  7. #define Spincount            0x4ee0L
  8. #define ReadSpinCount        0x8AA0L
  9. #define ReadToc                0x10
  10. #define ReadDiscInfo           0x11
  11. #define ReadSubQ               0x20
  12. #define RequestSense           0x30
  13. #define RequestDriveStatus     0x40
  14. #define SetDriveMode           0x50
  15. #define Reset                  0x60
  16. #define Hold                   0x70
  17. #define HoldTime        (UCHAR)0x80
  18. #define GetAudioVolume  (UCHAR)0x8E
  19. #define DriveConfig            0x90
  20. #define ModeSet         (UCHAR)0xA0
  21. #define ReadUPC         (UCHAR)0xA2
  22. #define SetAudioVolume  (UCHAR)0xAE
  23. #define ReadSubCode            0xB0
  24. #define Seek            (UCHAR)0xC0
  25. #define PlayAudioMSF    (UCHAR)0xC1
  26. #define ReadDriveMode   (UCHAR)0xC2
  27. #define Read            (UCHAR)0xC3
  28. #define ReadFast        (UCHAR)0xC1
  29. #define SetInterleave   (UCHAR)0xC8
  30. #define GetVersion      (UCHAR)0xDC
  31. #define Stop            (UCHAR)0xF0
  32. #define Eject           (UCHAR)0xF6
  33. #define Close           (UCHAR)0xF8
  34. #define LockUnlock      (UCHAR)0xFE
  35. #define SuspendData     0x0C
  36. #define ReleaseData     0x04
  37.  
  38. #define DataReg   0
  39. #define StatusReg 1
  40.  
  41. // Drive status bit definitions
  42. // base adapter address +1 (301h for example)
  43.  
  44. #define DoorOpen     0x80 // 1 = door open
  45. #define DiscIn       0x40 // 1 = disc in
  46. #define DiscChg      0x20 // 1 = disc changed
  47. #define Spinup       0x10 // 1 = disc spinning
  48. #define AudioDisc    0x08 // 1= Audio
  49. #define ReadError    0x04 // 1 = error, see sense data
  50. #define AudioBusy    0x02 // 1 = playback in progress
  51. #define CommandCheck 0x01 // 1 = command error
  52. #define COMMANDCHECK(x) ((LOBYTE(x) & CommandCheck))
  53. #define DOOROPEN(x) ((LOBYTE(x) & DoorOpen))
  54. #define TIMEOUT(x) ((HIBYTE(x)==TimeOut))
  55. #define DUMMYWAIT  { USHORT i=0x4000;while(i)i--;}
  56. #define SHORTWAIT  { USHORT i=0x0100;while(i)i--;}
  57. #define DISCCHANGE(x)  ((LOBYTE(x) & DiscChg))
  58. #define DISCIN(x)      ((LOBYTE(x) & DiscIn))
  59. #define READERROR(x)   ((LOBYTE(x) & ReadError))
  60. #define AUDIODISC(x)   ((LOBYTE(x) & AudioDisc))
  61. #define AUDIOBUSY(x)   ((LOBYTE(x) & AudioBusy))
  62. #define SPINNING(x)    ((LOBYTE(x) & Spinup))
  63.  
  64. union   OutputCommands {
  65.         UCHAR Command;
  66.         struct {
  67.                UCHAR c;
  68.                UCHAR Min;
  69.                UCHAR Sec;
  70.                UCHAR Frame;
  71.                UCHAR Rsv[3];
  72.                } SeekCmd;
  73.         struct {
  74.                UCHAR c;
  75.                UCHAR Min;
  76.                UCHAR Sec;
  77.                UCHAR Frame;
  78.                UCHAR Length1;
  79.                UCHAR Length2;
  80.                UCHAR Length3;
  81.                } ReadCmd;
  82.         struct {
  83.                UCHAR c;
  84.                UCHAR StartMin;
  85.                UCHAR StartSec;
  86.                UCHAR StartFrame;
  87.                UCHAR StopFrame;
  88.                UCHAR StopMin;
  89.                UCHAR StopSec;
  90.                } PlayAudio;
  91.         struct {
  92.                UCHAR c;
  93.                UCHAR ModeType;
  94.                #define Mode0 0
  95.                #define Mode1 1
  96.                #define Mode2 2
  97.                } DataModeSet;
  98.  
  99.         struct {
  100.                UCHAR c;
  101.                UCHAR UnitsofTenSeconds;
  102.                // Default is 0C= 120 seconds, 01-FF valid
  103.                } HoldCmd;
  104.  
  105.         struct {
  106.                UCHAR c;
  107.                UCHAR Mode;
  108.                // drive modes used in command 0x50 (set) and 0xC2 (get)
  109.  
  110.                #define TestMode   0x80   // 0 = bit 6 (next bit) is valid
  111.                #define DataLength 0x40   // 1 = 2352, 2048 user data
  112.                                          // 0 = 2048 user data only
  113.                #define EccBit     0x20   // 0 = yes secondary correction after CIRC error
  114.                                          // 1 = no correction
  115.                #define RsvMode1   0x10   // reserved, set to 0 on write
  116.                #define SpinDisc   0x08   // 1 = spindown
  117.                                          // 0 = spinup
  118.                #define TocData    0x04   // 1 = read TOC on ReadSubQ (0x20)
  119.                #define RsvMode2   0x02
  120.                #define MuteData   0x01   // 1 = no audio playback of data tracks
  121.                                          // 0 = always muted
  122.                } DriveMode;
  123.  
  124.         struct {
  125.                UCHAR c;
  126.                union {
  127.                      UCHAR  Byte;
  128.                      struct {
  129.                             UCHAR  ByteLength:1;
  130.                                    // if True
  131.                                    // Byte 2 = MSB of block length
  132.                                    // Byte 3 - LSB of block length
  133.                             UCHAR  DMAMode:1;
  134.                                    // if True Data Transfers use DMA, Regardless of this bit, ONLY Data can use DMA, nothing else
  135.                             UCHAR  UPCCode:1;
  136.                                    // If True
  137.                                    // Issue ReadUpc (0xA2) as next command
  138.                             UCHAR  DMATimeut:1;
  139.                                    // if True
  140.                                    // Byte2 = millisecond timeout value
  141.                             UCHAR  IRQEnable:1;
  142.                                    // if IRQEnable = True
  143.                                    // Byte2 settings
  144.                                       #define PreIrq  1
  145.                                       #define PostIrq 2
  146.                                       #define ErrIrq  4
  147.                             UCHAR  RetryCount:1;
  148.                                    // byte2 count
  149.                             UCHAR  Reserved:2;
  150.                             } Bits;
  151.                       } Byte1;
  152.                UCHAR  Byte2;
  153.                UCHAR  Byte3;
  154.                } DriveConfigCmd;
  155.                #define RETRYCOUNT 0x20L
  156.                #define IRQFLAG 0x10L
  157.                #define DMAFLAG 0x08L
  158.                #define UPCFLAG 0x04L
  159.                #define GetSubq 0
  160.                #define GetUpc  1
  161.                #define MODEFLAG 0x02L
  162.                #define BLOCKSIZE 0x01L
  163.  
  164.                // don't know why we'd use this command yet, reads P-W subchannels all at once, 98 bytes returned
  165.         struct {
  166.                UCHAR c;
  167.                UCHAR  Min;
  168.                UCHAR  Sec;
  169.                UCHAR  Frame;
  170.                UCHAR Length1; // MSB
  171.                UCHAR Length2;
  172.                UCHAR Length3; // LSB
  173.                } ReadSubCode_n_Block;
  174.  
  175.         struct {
  176.                UCHAR c;
  177.                UCHAR ATT0;
  178.                UCHAR ATT1;
  179.                UCHAR ATT2;
  180.                UCHAR ATT3;
  181.  
  182.                  // table of settings
  183.                  // ┌──────┬──────┬──────┬──────┬──────────┬──────────┐
  184.                  // │ Att0 │ Att1 │ Att2 │ Att3 │ Right Ch │ Left Ch  │
  185.                  // ├──────┼──────┼──────┼──────┼──────────┼──────────┤
  186.                  // │  01  │  00  │  01  │  00  │   On     │   On     │
  187.                  // ├──────┼──────┼──────┼──────┼──────────┼──────────┤
  188.                  // │  00  │  00  │  01  │  00  │   On     │   Off    │
  189.                  // ├──────┼──────┼──────┼──────┼──────────┼──────────┤
  190.                  // │  01  │  00  │  00  │  00  │   Off    │   On     │
  191.                  // ├──────┼──────┼──────┼──────┼──────────┴──────────┤
  192.                  // │  00  │  00  │  01  │  01  │  Mono From Right Ch │
  193.                  // ├──────┼──────┼──────┼──────┼─────────────────────┤
  194.                  // │  01  │  01  │  00  │  00  │  Mono From Left  Ch │
  195.                  // ├──────┼──────┼──────┼──────┼─────────────────────┤
  196.                  // │  01  │  01  │  01  │  01  │      Mixing         │
  197.                  // ├──────┼──────┼──────┼──────┼─────────────────────┤
  198.                  // │  00  │  01  │  00  │  01  │      Reverse        │
  199.                  // └──────┴──────┴──────┴──────┴─────────────────────┘
  200.  
  201.                } AudioLevel;
  202.  
  203.         struct {
  204.                UCHAR c;
  205.                 UCHAR Size;
  206.                 // Default = Minimum = 1;
  207.                 // Value is decremented by 1 at drive, so 1 = 0 = No interleave
  208.                } InterLeave;
  209.         struct {
  210.                UCHAR c;
  211.                UCHAR Option;
  212.                #define Unlock 0
  213.                #define Lock 1
  214.                #define Query  2
  215.                } LockDrawer;
  216.         } ;
  217.  
  218. typedef union   CommandResults {
  219.         struct {
  220.                UCHAR Code; // always 'M'
  221.                UCHAR VerLSN:4;
  222.                UCHAR VerMSN:4;
  223.                } Version;
  224.  
  225.         struct {
  226.                UCHAR SenseKey;
  227.                // Only valid if ReadError or Drive_Status is on
  228.                #define No_Error      0
  229.                #define ModeMismatch  1
  230.                #define BlockNotFound 2
  231.                #define FatalError    3
  232.                #define SeekError     4
  233.                } SenseData;
  234.  
  235.         struct t {
  236.                struct {
  237.                       UCHAR ADR:4;
  238.                       UCHAR Control:4;
  239.                        }S;
  240.                UCHAR TNO;
  241.                UCHAR Index;
  242.                UCHAR Min;
  243.                UCHAR Sec;
  244.                UCHAR Frame;
  245.                UCHAR Zero;
  246.                UCHAR AMin;
  247.                UCHAR ASec;
  248.                UCHAR AFrame;
  249.                } TrackInfo;
  250.                #define MinFrame 0x00000200L             // 2 min, 0 seconds
  251.  
  252.         struct {
  253.                UCHAR FirstTrack;
  254.                UCHAR LastTrack;
  255.                UCHAR LeadoutMin;
  256.                UCHAR LeadoutSec;
  257.                UCHAR LeadoutFrame;
  258.                UCHAR FirstTrackMin;
  259.                UCHAR FirstTrackSec;
  260.                UCHAR FirstTrackFrame;
  261.                } TOC;
  262.  
  263.         struct {
  264.                UCHAR ATT0;
  265.                UCHAR ATT1;
  266.                UCHAR ATT2;
  267.                UCHAR ATT3;
  268.  
  269.                  // table of settings
  270.                  // ┌──────┬──────┬──────┬──────┬──────────┬──────────┐
  271.                  // │ Att0 │ Att1 │ Att2 │ Att3 │ Right Ch │ Left Ch  │
  272.                  // ├──────┼──────┼──────┼──────┼──────────┼──────────┤
  273.                  // │  01  │  00  │  01  │  00  │   On     │   On     │
  274.                  // ├──────┼──────┼──────┼──────┼──────────┼──────────┤
  275.                  // │  00  │  00  │  01  │  00  │   On     │   Off    │
  276.                  // ├──────┼──────┼──────┼──────┼──────────┼──────────┤
  277.                  // │  01  │  00  │  00  │  00  │   Off    │   On     │
  278.                  // ├──────┼──────┼──────┼──────┼──────────┴──────────┤
  279.                  // │  00  │  00  │  01  │  01  │  Mono From Right Ch │
  280.                  // ├──────┼──────┼──────┼──────┼─────────────────────┤
  281.                  // │  01  │  01  │  00  │  00  │  Mono From Left  Ch │
  282.                  // ├──────┼──────┼──────┼──────┼─────────────────────┤
  283.                  // │  01  │  01  │  01  │  01  │      Mixing         │
  284.                  // ├──────┼──────┼──────┼──────┼─────────────────────┤
  285.                  // │  00  │  01  │  00  │  01  │      Reverse        │
  286.                  // └──────┴──────┴──────┴──────┴─────────────────────┘
  287.  
  288.                } AudioLevel;
  289.  
  290.         struct {
  291.                UCHAR Mode;
  292.                // drive modes used in command 0x50 (set) and 0xC2 (get), see 0x50 for values
  293.                } DriveMode;
  294.  
  295.         struct {
  296.                 UCHAR Size;
  297.                 // Default = Minimum = 1;
  298.                 // Value is decremented by 1 at drive, so 1 = 0 = No interleave
  299.                } InterLeave;
  300.         struct {
  301.                 UCHAR State;
  302.                 #define Unlocked 0
  303.                 #define Locked 1
  304.                 // Value is decremented by 1 at drive, so 1 = 0 = No interleave
  305.                } LockStatus;
  306.         struct {
  307.                UCHAR Control:4;
  308.                UCHAR ADR:4;
  309.                UCHAR UPCCode[7];
  310.                UCHAR Zero;
  311.                UCHAR AFrame;
  312.                } UPC;
  313.         struct {
  314.                UCHAR Type;
  315.                // Disc types, see DataMode command above
  316.                // Mode1 = Multi-Session Photo CD
  317.                // if Mode1, then these values are the first sector of last session
  318.                // else all zeros
  319.                UCHAR Min;
  320.                UCHAR Sec;
  321.                UCHAR Frame;
  322.                } DiscInfo;
  323.  
  324.         } CDROMSTAT, *PCDROMSTAT, near * nPCDROMSTAT ;
  325.  
  326. typedef struct {
  327.        UCHAR Sync1[12];
  328.        UCHAR Header[4];
  329.        UCHAR Subheader1[4];
  330.        UCHAR Subheader2[4];
  331.        UCHAR Data[2048];
  332.        UCHAR ECCbits[280];
  333.        } RawSector, *PRawSector;
  334.  
  335. #define Disable _asm { cli }
  336. #define Enable  _asm { sti }
  337. #define STEN 4                  // status Enable, when 0, status is available
  338. #define DTEN 2                  // data Enable, when 0, data is available
  339.  
  340. #define DefaultDiscSize    270000L
  341.  
  342. typedef struct TOCInfo
  343. {
  344.    UCHAR          min;
  345.    UCHAR          sec;
  346.    UCHAR          frame;
  347.    UCHAR          Control:4;
  348.    UCHAR          ADR:4;
  349.    ULONG          start;
  350. } TOCINFO ;
  351.  
  352. #ifdef DEBUG
  353. #define DPRINTF(x)   printf x ; flushall();
  354. #else
  355. #define DPRINTF(x)
  356. #endif
  357. #define SET_VS             0x04
  358. #define SET_TI             0x08
  359.  
  360. #define CLR_TI             0xF7
  361. #define CLR_VS             0xFB
  362.  
  363. #define TCI_DATA           0x04
  364. #define TCI_AUDIO          0x00
  365. #define CDXA               0x20
  366.  
  367. #define CHANGED         -1
  368. #define DONT_KNOW       0
  369. #define NOT_CHANGED     1
  370. #define I386            (UCHAR)1
  371. #define I486            (UCHAR)2
  372.  
  373. #ifdef TRACE
  374. #define DevHelp_RAS(w,x,y,z) DevHelp_RAS(w,x,y,z)
  375. #else
  376. #define DevHelp_RAS(w,x,y,z)
  377. #endif
  378. #if defined(TRACE1) | defined(TRACE)
  379. #define DevHelp_RAS1(w,x,y,z) DevHelp_RAS(w,x,y,z)
  380. #else
  381. #define DevHelp_RAS1(w,x,y,z)
  382. #endif
  383. #define NoIrq   0
  384. #define Oti12   0x00
  385. #define Irq9    0x10
  386. #define Irq3    0x20
  387. #define Irq5    0x30
  388. #define Irq10   0x40
  389. #define Irq11   0x50
  390. #define Irq12   0x60
  391. #define Irq15   0x70
  392.  
  393. typedef struct _MSGTABLE {              /* DHMT */
  394.  
  395.   USHORT   MsgId;                       /* Message Id #                  */
  396.   USHORT   cMsgStrings;                 /* # of (%) substitution strings */
  397.   PSZ      MsgStrings[1];               /* Substitution string pointers  */
  398. } MSGTABLE;
  399.  
  400. #define MSG_REPLACEMENT_STRING 1178
  401.  
  402.