$Id: aztcd,v 1.2 2002/10/12 04:23:01 mdk Exp $
          Readme-File /usr/src/Documentation/cdrom/aztcd

	     AZTECH CD-ROM CDA268-01A, ORCHID CD-3110,
      OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540
                           CD-ROM ɥ饤
                       Version 2.6 ʹ
                (¾Υɥ饤֤˴ؤƤ 6. 8.)

աΥɥ饤Фϡˤ CD-ROM ɥ饤֤ưޤ
      ɥ饤֤ˤϡѤΥ󥿥եޤʥɥɡ
      뤤 ISA-AT Хɤ˼Ƥޤˡ
      Aztech CDA269-031SE Ȥä褦ʡɣģš󥿥եǤϡ
      ФưޤͣʬäƤ㳰ϡCyCDROM CR520ie 
      褦ʡֵ IDE ɥ饤֤ǤˤĤƤϡξﲼǡ
      aztcd ưޤ7. ȡˡATAPI ߴȤƤФ롢IDE 
      եդ CD-ROMɥ饤֤ȤĤʤ顢ide-cd.c ɥ饤
      ȤäƲΥɥ饤Ф Mark Lord  Scott Snyder 
      񤤤ΤǤɸΥͥ 1.2.x ǤϡIDE-CDROM-DRIVES 
      ݡȤƤޤΤǡͥ򥳥ѥ뤹ϡ
      make config  HARDDISK SECTION 򻲾ȤƤ
----------------------------------------------------------------------------
ܼ                     1. 
                         2. 󥹥ȡ
                         3. ͥι
                         4. ͥκƥѥ
                         4.1   AZTCD ¹ԻΥ֥⥸塼ˤ
                         4.2   ɥɤ³줿 CDROM
                         5. ΤȺγȯ
                         5.1   ޥåΥݡ
                         5.2   ơǧ
                         5.3   DOSEMU  CDROM ݡ
                         6. Х
                         7. ¾Υɥ饤
                         8. ޤʤ ... ǥХå
                         9. ɥ饤Фε̤Ǥ
                        10. հ
                        11. ɥץκ: CDPLAY.C
                        Ͽ cdplay.c Υ
----------------------------------------------------------------------------

ΥեȥϡեƥȤȥ١ƥȤǤޤưƤꡢ
1994ǯ 12顢ͥ 1.1.8x ʹߤɸ५ͥΰˤʤäƤޤ
Υɥ饤ФϡAZTECH CDA268-01A, ORCHID CDS-3110, ORCHID/WEARNES CDD110 
 CONRAD TXC (Nr.99 31 23 -꡼ 04) ưͥ 1.0.9 ʹ
ǰꤷƤ뤳ȤޤɤΤ褦ʥեȥˤ⡢
ȤƥХ뤫⤷ޤ󡣤ǤƤϡ
Υեȥβ˼ߤߤȡƤ櫓Ǥ

Ǥ顢ܺ٤ʥХäƲʥХξϻȡˡޤ
ݡȤƤɥ饤ֿ䤹⤷ƤФȻפޤ

 REAME եǰɤǤޤޤԤʤȤ
֡Ȥ뤿ˤ⡢ŤͥϾ˥ԡäƤ褦ˤƲ

2. 󥹥ȡ
ɥ饤Ф 'aztcd.h' Ȥإåեȡ'aztcd.c' Ȥ
ǹƤޤԤ /usr/src/linux/drivers/cdrom ˤꡢԤ
̾ƱˤޤΥɥ饤ФǤ /dev/aztcd ʥǥȥӥ塼
ˤäƤ /dev/aztcd0ˤѤޤΥǥХϡ᥸㡼ֹ椬 29 
ʤäƤꡢ/dev ǥ쥯ȥˤ롢ͭʥ֥åǥХǤʤФʤ
CD-ROM ޥȤ硢ͥ ISO9660 ե륷ƥॵݡ
Ȥ߹Ǥɬפޤ

աaztcd.c  Linux ͥ¹ԤƳȯ줿Τǡ̸ߴ
̵פѹ٤ѹ¿ʤޤǤ⤽ǤǤ顢
1.3.33 ŤͥǤϡС 1.80 ʹߤ aztcd.c Фư
ޤ󡣤Ǥ顢ŬڤʥͥȶˡǿǤ aztcd.c ˻Ȥ
褦ˤƤ

3. ͥι
ǤˤȤΥͥ AZTECH ɥ饤ФȤ褦˹ƤСLinux
Υ֡˰ʲΤ褦ʥåФƤΤʬϤǤ
    Aztech CD-ROM Init: DriverVersion=<version number> BaseAddress=<baseaddress>
    Aztech CD-ROM Init: FirmwareVersion=<firmware version id of your I/O-card>>>
    Aztech CD-ROM Init: <drive type> detected
    Aztech CD-ROM Init: End

㤦åФƤ뤱ɤ⡢äƤΤΤ˥ݡȤƤɥ饤
ȤС١ɥ쥹㤦Τ⤷ޤAztech ɥ饤Фϡѥ
 aztcd.h ˻ꤷ١ɥ쥹ǡCD-ROM ɥ饤֤õޤ
ɥ쥹ϡ֡ȥѥ᡼ aztcd=.... Ǿ񤭤ǽǤ֡Ȥ顢
Υ֡ȥѥ᡼ aztcd=<١ɥ쥹> ĤơLinux򥹥Ȥ
㤨Сaztcd=0x320 Ȥޤ١ɥ쥹ʬʤϡ
DOS  PC Ω夲ơCD-ROM  DOS ɥ饤ФФ֡ȥå򸫤
Ǥʬʤϡ֡ȥѥ᡼ aztcd=<١ɥ쥹>,0x79
ȤäƲ aztcd ˤä񤷤Ȥؼޤ
餯aztcd ƥѥ뤷ơ١ɥ쥹μưõȤ褦
Ȼפޤ;ϻȡˡ

å褦ʤ顢'root' 桼ǼΤ褦ˤƥɥ饤֤
ޥȤǤϤǤ

          mount -t iso9660 -r /dev/aztcd0 /mnt
¾Υե륷ƥƱ褦˻ȤϤǤưʤϡ
/dev/aztcd0  /mnt ۤȤ¸ߤ뤫ɤΤƤ
ɬפʤʲΤ褦ˤƺƲˡ
      mknod /dev/aztcd0 b 29 0
      mkdir /mnt                       

Ǥ⡢LinuxΥ֡˰㤦åФƤꡢCD-ROM ޥ
褦Ȥȡͥ뤬 ISO9660 ե륷ƥ򥵥ݡȤƤʤ
åФϡͥκƥѥ뤹ɬפޤ

Aztech/Orchid/Okano/Wearnes/TXC Υɥ饤֤ϻäƤʤΤǡLinux Υ֡
˹Ԥʤɥ饤֤θФ򱪲󤷤ϡaztcd=0 Ȥ֡ȥѥ᡼
ꤷ Linux 򥹥ȤƲ

ǶǤϤƤΥǥȥӥ塼ˤϡaztcd ޤ֡ȥǥ
᡼äƤޤǤ˺ʤǲΥɥ饤Ф
IDE/ATAPI ɥ饤֤Ǥưޤ󡣤äɥ饤֤ˤϡ ide-cd.c
ȤʤФʤޤ

4. ͥκƥѥ
ͥ뤬ޤAZTECH ɥ饤Ф ISO9660 ե륷ƥ򥵥ݡȤ褦
ˤʤäƤʤ硢ͥƥѥ뤹ɬפޤ

- aztcd.h ԽơI/O ɥ쥹򡢤Ȥ I/O ١ɥ쥹 
  (AZT_BASE_ADDR) ꤷƲ
  ɥ饤Фϳߤ DMA Ȥޤ󤫤顢AZTECH CD268, an ORCHID CD-3110
  뤤 ORCHID/WEARNES CDD110 ȤĤʤ顢ꤹɬפΤ
  ιܤǤɥɤդƤϡ4.2 Ϥɤǲ
  ¾Υɥ饤֤ȤäƤϡΥեΡ֤¾Υɥ饤֡פξϤɤ
  Ǥ礦Υɥ쥹ϡͥΥ֡ȥѥ᡼ˡaztcd=... 
  褦ꤹ뤳ȤǤޤ

- AZT_BASE_ADDR  -1 ꤹС١ɥ쥹μưõȤ褦ˡ
  aztcd ꤵȻפޤξ硢aztcd  AZT_BASE_AUTO ˥ꥹ
  Ƥ륢ɥ쥹õޤǤФƤƲưõϡ
  ¾ΥϡɥǤ˰ƶͿ뤳Ȥ⤢ޤ

- ¾ˤ⡢ꤷƤޤʤĤޤ㤨Сɥ饤֤Υޥ
   CD μưȤȤȥ쥤ΥåǤܺ٤ aztcd.h 
  ȤƲ

- 2.1.0 ΥСΥͥȤäƤ硢aztcd.h 
  '#define AZT_KERNEL_PRIOR_2_1' ԤΥȤ򳰤Ʋ

- ͥۤޤaztcd 򥫡ͥȤ߹ߤϡ
  'Aztech/Orchid/Okano/Wearnes support'  ͭˤ褦˹Ʋ
  aztcd ¹ԻΥ֥⥸塼ǻȤϡ'Aztech... support'
  ͭˤ褦ʹ򤷤ƤϤޤ󡣤Ȥ⤢졢ISO9660 ե륷ƥ
  ϥͥ˴ޤޤ褦ˤʤФʤޤ

- ͥͭˤޤ̤ LILO ¹ԤФʤޤ
  ʤ LILO ˺ʤǲޤޤʤΤˡ
  ŤͥϥԡäƤƲˡ

- ֡ȤƲ

- aztcd 򥫡ͥȤ߹硢֡˼Τ褦ʥåФ
  ΤʬϤǤ
    Aztech CD-ROM Init: DriverVersion=<version number> BaseAddress=<baseaddress>
    Aztech CD-ROM Init: FirmwareVersion=<firmware version id of your I/O-card>
    Aztech CD-ROM Init: <drive type> detected
    Aztech CD-ROM Init: End

- aztcd 򥫡ͥȤ߹ޤ¹ԻΥ֥⥸塼ǥɤ
  ϡ4.1 򻲾ȤƲ

- å褦ʤ顢桼 'root' ǡʲΤ褦ˤƥɥ饤֤
  ޥȤǤϤǤ
          mount -t iso9660 -r /dev/aztcd0 /mnt

  ¾Υե륷ƥƱ褦˻ȤϤǤưʤϡ
  /dev/aztcd0  /mnt ºݤ¸ߤ뤫ɤĴ٤Ʋ
  ɬפʤ顢ʲΤ褦ˤƺƲ
      mknod /dev/aztcd0 b 29 0
      mkdir /mnt                       
- Ǥʤ顢֤¾Υɥ饤֡פξϤȡ֥ǥХåפξϤ򻲾ȤƲ

4.1 AZTCD ¹ԻΥ֥⥸塼ˤ
aztcd 󤵤ɬפʤСinsmod  rmmod Ȥäơ¹Ի
ɥ饤Фɤ뤳ȤǤޤaztcd ֥⥸塼
ǹۤˤϡAZTECH ⥸塼륵ݡȤͭˤ褦ˡͥ
ʤФʤޤʥͥι 'm' Ʋˡ
ɤΤߤ֡ȥͥΥСȥͥΥС󤬰äޤޡ
⥸塼ȡ뤫⤷ޤ󡣤Ǥ顢ɬפʤ
ͥƹۤƲ

ϡ/usr/src/linux/drivers/cdrom/aztcd.h ˤ AZTECH 󥿥ե
ɤΥ١ɥ쥹ŬڤͤѹޤAZT_BASE_ADDR  '-1' 
ꤷơ١ɥ쥹μưõȤ褦ꤷƤ⤫ޤޤ
ξϡaztcd  AZT_BASE_AUTO ˥ꥹȤƤ륢ɥ쥹õޤ
ϳФƤƲưõϡ¾ΥϡɥǤˡ
ƶͿ뤳Ȥ⤢ޤ¾ˤ⡢ꤷƤɤ褦ʡħŪʤȤ
Ĥޤ㤨Сɥ饤֤ΥޥȻ CD ưȤ
Ǥܺ٤ aztcd.h 򻲾ȤƤ줫ǥ쥯ȥ
/usr/src/linux ѤơʲΤ褦ˤޤ
                    make modules  
	            make modules_install
θ塢ʲΤ褦ˤƥɥ饤Ф¹Ի˥ɤǤ褦ˤʤޤ
                    insmod /lib/modules/X.X.X/misc/aztcd.o
rmmod aztcd ȤơǤ褦ˤʤޤ

aztcdh. ١ɥ쥹ꤷʤäϡʲΤ褦ˤơ
ɥ饤ФΥɻ˥١ɥ쥹ͿƤ⤫ޤޤ
                    insmod /lib/modules/X.X.X/misc/aztcd.o aztcd=<base address>

֤ˤʤޤaztcd=-1 ȻꤹСưõԤʤޤ
֡ȥͥ iso9660 ե륷ƥȤ߹Ǥʤϡ
CDROM ΥޥˤΥ⥸塼ɤʤФʤޤ
                    insmod /lib/modules/X.X.X/fs/isofs.o

ޥȤμϡ 4. 褦˹Ԥʤޤ
ʤ٤ƤΥޥɤˤơ'X.X.X' ϸߤ Linux ͥΥСֹ
ˤʤޤܺ٤ϡ/usr/src/linux/Documentation  modules.txt ե
ȤƲ

4.2 ɥɤ³줿 CDROM
ۤȤɤΥɥɤˤϡº CD-ROM ɥ饤֤ФХ󥿥ե
ޤ¿ξ硢Υɥɤꤹɬפꡢʤ
CDROM ϻȤ褦ˤʤޤ󡣤Ƥϡνǡ
ɥɤΥ쥸˽񤯤ȤǤ AZTECH-CDROM ɥ饤Ф
ºݤ˥ݡȤƤ륵ɥɤϰSoundWave32ˤǤ
¾ΥɥɤѤƤϡǽ DOS ǥ֡ȤDOS Υɥ饤
ˤΥɥɤ CDROM ơ줫 PC ֡Ȥ
ʤ뤤 loadlin Ȥäƥ֡ȤˡLinux 򥹥ȤƤߤƲ

AZTECH ɥ饤Фϡľ SoundWave32 ɥɤ CD-ROM 󥿥ե
Ƥޤlinux/drivers/cdrom/aztdc.h Խ '#define AZT_SW32'
ΥȤ򳰤AZT_BASE_ADDR  AZT_SW32_BASE_ADDR Ŭڤͤꤷ
ΥݡȤϡSoundWave32  Orchid CDS-3110 ³ƥƥ
ޤ
ʬΥɥɤ򥵥ݡȤϡɤ꤬ɬפʤΤ
ĤФơŬڤʾɮԡ6. ȡˤ˥᡼뤷Ʋ

5. ΤȺγȯ
5.1 ޥåΥݡ
CD ǥޥå򥵥ݡȤȤΤϡޤ̴ʪǤɮԤ
XA CD ǥޥåδŪʥݡȤƥȤޤǤ⡢
̩ʥƥȤԤʤˤϡCD 䥢ץꥱο­ޤ󡣤ǡ
ߤƤʤ顢Ϣ򲼤Żҥ᡼륢ɥ쥹ϰʲ򻲾
ƤˡС 1.4 ʹߤˤĤƤϡAZT_MULTISESSION  1 
Сaztcd.h ǥޥåͭˤǤޤȡISO9660
ե륷ƥǥޥå CD 򰷤ȤˤʤޤĤޤꡢľ
å󤫤Ρơ֥롦֡ƥ (TOC) ؤΥ쥯׵
򰷤櫓ǤξˤΥå󤹤٤ƤξäƤޤ
AZT_MULTISESSION  0 ꤷƤ⡢Ȥˤޥå CD ϻȤޤ
ξ硢ɥ饤֤Υե०ϼưŪ˥쥯ȤԤʤޤ
ISO9660 ե륷ƥФƤϡޥå CD ϡ̤Ρץ󥰥
å CD Τ褦˸ޤǤåΥǡϱ
Ǥ뤷ǤޤǤ顢ŪˤϡΥץꥱǤϡ
٤ƤκۤˤϵŤʤǤ礦Ǥ⾭Υץꥱϡä
ʤޥåεǽѤ뤫⤷ޤ󤫤顢ioctl 
CDROMMULTISESSION ȤäơISO9660 Υޥå󥤥󥿥եѤ
󥿥եμ򳫻Ϥޤ


5.2 ơǧ
ɥ饤֤Υơǧϡ륱ưޤ󡣥ɥ饤֤
˥ޥȤƤ֤ǡǥ򴹤ꡢɥ򳫤ȡAztech
ɥ饤ФϤ򸡽Фޤˤ⤫餺ˤäơISO9660 ե
ƥɥ饤Ф̡Υ쥤䡼ʣɤ߹ߤ򤷤褦Ȥơɥ
ȤˤʤäƤޤޤǤäԤԤäƤʤƤϤʤޤ
...Ǥ⡢ˤƤ⡢ɥ饤֤ޥȤƤ֤ǡǥ򴹤
ȤΤϡޤ󤸤ʤΡ

ɥ饤Фϡɥ饤֤ΥϥɥSTEN_LOW ޥȡDTEN_LOW ޥ
ФơۤȤɤΥǥӥȤѤޤɮԤϡ486/DX266MHz
Υޥȡڥƥ 60MHzƱ 90MHz ǥƥȤޤ
ꤺäȹ®ΥޥǤϡĤǤ⥿ॢȥåФǤ
ξϡaztcd.h Խơॢ AZT_TIMEOUT 䤷Ʋ

ĤΡ®ʡץɥ饤֤ΥޥɤˤĤƤϡޡȥ塼
STEN_LOW_WAIT ޥˤȤäȤޤΥॢ
åФ褦ʤ顢 aztcd.h Խơॢ AZT_STATUS_DELAY 
䤷Ƥޤޤ󡣥ͥѥ˥åΥåФ褦ʤ顢aztcd.c 
ԽơSTEN_LOW_WAIT  STEN_LOW ֤ƲSTEN_LOW Ȥä
ȤϤäȰꤷƤޤCPU Сإåɤθˤʤޤ

5.3 DOSEMU  CDROM ݡ
꡼ 1.20 ǡaztcd  dosemu-0.60.0 ư桢CD-ROM ؤΥ
Ǥ褦˽ޤ1.20 ΥС aztcd Ǥϡdosemu 
CD-ROM 򥢥ȡLinuxäȤ⥯å夷䤹Ǥ
ʬŪˤϽޤǽ˥ǥ쥯ȥ򥢥ȡޤ 30 äۤ
ϥ󥰤뤫⤷ޤ󡣤櫓Ǥ顢dosemu  CD-ROM ݡȤ
aztcd Ȥ߹碌ƻȤϡƲ:-)
ϡ1995ǯ 7ߡdosemu  CD-ROM ɥ饤Фνľޤ
С dosemu-0.60.2 ˤʤޤdosemu README.CDROM 򻲾
Ƥ

6. Х
ܺ٤ʥХȤνƤŻҥ᡼ʲƤäƲ

        Werner.Zimmermann@fht-esslingen.de

κݡƱߤΤϡȤ CD-ROMɥ饤֤μȥ󥿥ե
ɤLinux ֡ȻΤʥե०åAZTECH CD-ROM
ɥ饤ФΥСֹ桢 Linux ͥΥСǤˡ
ȤΥƥΡ¾Υϡɥפˤʤ뤳Ȥޤäˡ
ޥץåμࡢåȿɥɤ䥤ͥå
ץ५Ȥä¾Υ󥿥եɤǤ

ɮԤɬפʽ򤷤褦ؤƤޤľܥХԤ
ХνƤäơ³ƥȤȥǥХå򤪴ꤤ뤫⤷ޤ

CD-ROM κԤγˤϡCD-ROM Υݥ졼ȥԡܥƥ
äƤ褦ꤤޤ Linux Ѥ CD-ROM ݡȤ
ƤƤޤäΤ˴ؤ롢ʸκԤ̾͹ؤν
ʲΤȤǤ
           Prof. Dr. W. Zimmermann
           Fachhochschule fuer Technik Esslingen
           Fachbereich IT
           Flandernstrasse 101
           D-73732 Esslingen
           Germany

7. ¾ΥǥХ
ORCHID CDS3110  OKANO CDD110 WEARNES CDD110  Conrad TXC Nr. 993123
꡼ 04 Ȥäɥ饤֤ϡAZTECH CDA268-01A ȤۤȤƱΤΤ褦Ǥ
äˡƱޥɥɤѤƤ褦ǤǤ顢Υɥ饤֤
AZTECH ɥ饤ФưΤϡƴñǤ

ǤˤɮԤѤǤ뤳äɥ饤֤ϤɤäƤޤ
Ǥ鼫ʬǤϥƥȤǤˤޤ󡣻ˤ DOS Υɥ饤Ф
Υɥ饤֤ä˥ɥɤȤ߹碌Ƥˤơ줫
֡ȡCTRL-ALT-RESETˤDOS  Linux 򥹥ȡ㤨 
'loadlin' ȤäơˤɬפꤽǤ

ޤʤϡǥХåξϤɤǲ

ƿޤ󤬡ƥȤѤǤϡɥ̵ϡ
ȯ񤷤ΤǤǤ顢Ǥ󡢼ߤƲ

CyCDROM CR520ie ºݤȤʤ顢Hilmar Berger ζϤ˴դǤ
ɤǤΥɥ饤֤ aztcd ưޤCR520ie  IDE ɥ饤֤
䤵Ƥޤ IDE 󥿥ե³ޤʥץ饤ޥ
 0x1F0 0x170ǡޥǤϤʤ졼֤ꤷޤˡ
ˤ⤫餺ATAPI ߴǤϤʤΤǤȤ Aztech Υޥ
ɤѤƤޤ


8. ǥХåޤʤ硢ʲΤȤƲ
- README ե򡢺ɤࡣ

-ȤΥɥ饤֤ʲΥϡɥˤʤäƤ뤳Ȥǧ롣
    transfer mode: polled
    IRQ:           not used
    DMA:           not used
    Base Address:  something like 300, 320 ...

ȤΥɥ饤֤դƤ DOS Υɥ饤Ф򥹥ȤСΤȤ
ǧǤޤɥ饤֤ DOS Υɥ饤ФꤹСʬΥɥ饤
 DOS βǡΥ⡼ɤưƤ뤫ɤǧǤޤ
⤷ DOS ưʤСLinux Ǥưޤ

ɥ饤֤Υ١ɥ쥹 0x170 䤢뤤 0x1F0 Ȥä褦ʤΤʤ
ʤơΥɥ饤֤ CyCDROM CR520ie Ǥ CR 940ie ǤʤСˡ
Υɥ饤֤ϡ餯 IDE/ATAPI ߴΥɥ饤֤Ǥ aztcd.c
ǤϥݡȤƤޤˡide-cd.c ȤäƲ
١ɥ쥹 aztcd.h ꤷƤ뤳Ȥǧ/dev/aztcd0 
᥸㡼ֹ¸ߤƤ뤳ȤǧƲAztech Υɥ饤֤
ؤƤϡƤ /usr/include/linux/major.h եˤ륨ȥ
ӤƲ

-CD-ROM ơȥ쥤ĤƲ

-PC 򥳡ɥ֡ȤƤʤĤޤꡢŸåꥻåȥܥ
 ȤäƤˡ

-DOS㤨 loadlin ȤäơLinux ưϡ
  CD-ROM ɥ饤Ѥ DOS ɥ饤ФɤʤȤǧ
 DOS  config.sys ǥɥ饤ФƤӽФƤԤ򥳥Ȥ
 Ƥˡ

-Linux  init ˽Ф init å顢aztcd õơΤ
 ΥåαƤƤ

-root ǥ󤷡mount -t iso9660 /dev/aztcd0 /mnt ¹ԤƤ

-ǤޤʤƤ⡢󤫻ƤߤƲȥ쥤򳫤Ĥ
 ⤷ƤߤƤƤ顢ޤޥȤƤפ
 ޥɤɽ줿 aztcd ΥåϤ٤ơտαƲ

-'Aztech CD-ROM init: aborted' ȤåФ顢Сʸ
 ˴ؤ벼դɤǲ

Ǥʤ顢ʲΤ褦ѤơƱȤ򤷤Ʋ

-CD-ROM Ѥ DOS ɥ饤Ф DOS ǳμ¤˥ɤƤ顢DOS 
 ȤƲʤĤޤꡢ config.sys ʬΥ
 򳰤ޤˡ

-PC 򥦥֡ȤƲʤĤޤꡢCTRL-ALT-DEL Ȥޤˡ
 loadlin СȤäƥȤ뤳ȤǤޤξ
 ߤƤˡ
 ...
 ⤦١¹Ԥ٤ƤΥޥɤȡaztcd Υåα
 

STEN_LOW  STEN_LOW_WAIT Υ顼åФϡॢ
䤷Ʋ

Ǥ⡢ޤʤ顢

-aztcd.c μιԤƤߤơ #if 0
                                #define AZT_TEST1
                                ...
                                #endif

'#if 0'  '#if 1' ֤Ʋ

-ͥƥѥ뤷ơ嵭Ĥμ򷫤֤Ʋ٤ϡɥ饤
 ǥХååβФƤޤ١¹ԤޥɤŬڤʥå
 αƲsyslogd ưƤϡΥå syslogd 
 ͥեǤ⸫Ĥ뤫Τޤ󡣤Ǥ⡢󥹥ȡλ
 äƤϡinit() ƤֻǤޤsyslogd ưƤʤȤޤ
 äơץץȤޤǤΡinit δ֤ aztcd Υå
 õƲ
 줫顢aztcd.c ƤߤơäΤĤФƲ
 ̾θƤӤϡLinux Υ֡ȼ init() δ֤ aztcd_init() ǡ
 'mount -t iso9660 /dev/aztcd0 /mnt' Ԥʤäϡ̾Τ褦ˤʤޤ

     aztcd_open()    -> CDROMʤǥ CD ơɥ֡ȸ Status 2c
                     -> CDROM ƥ֡ȸ Status 8
                     -> ǥ줺ȥ쥤Ĥơɥ֡ȸ Status 2e
                     -> ɥ򳫤ޤޥޥȤơɥ֡ȸ Status 6e
     aztUpdateToc()
     aztGetDiskInfo()
     aztGetQChannelInfo()   󷫤֤

     aztGetToc()
     aztGetQChannelInfo()   󷫤֤
     ȥåꥹ
     do_aztcd_request()  }  
     azt_transfer()    } 󷫤֤
     azt_poll          }

θƤӤäƤꥹơե饰äƤʤɤĴ٤Ʋ

 ¾ˤåϤ󤢤ޤ㤨СACMD ޥɥɡaztcd.h 
ƤޤˡgetAztStatus ޥɤΥơazt_poll() ˤ롢
ͭ¾֥ޥξ֥󥹤ǤڤʤΤϥơåǤ
λ򸫤ơΥå줿ȤƤ̣ƤС
򤹤褦ˤƲCD-ROM 줿֤Ǥϡaztcd_open() С
ơϾ 8 ˤʤϤǤȥ쥤򳫤ơǥ ǥ줿ꡢ
ʤäꡢ CD-ROM 줿ꤷơ˱ƥơӥåȤ
Ѥ뤫ɤĴ٤ƲơӥåȤϡɥ饤֤¤ȼԤѹ
ԤʤֲǽꤽʾǤ

Ǥ⡢ޤʤ顢­ݤ aztcd.c ˤ aztcd_init ؿ򸫤Ƥߤ
ȤǤǡinit ˥ɥ饤֤򸡽ФϤǤʲΤ褦ˤƤߤ


-'aztcd=<١ɥ쥹>,0x79' Ȥ֡ȥѥ᡼դơƥ֡
 Ƥ0x79 Ȥѥ᡼դȡۤȤɤΥɥ饤֤ǡС
θФ򱪲󤷤ޤθ塢init δ֤ƬȽ˶դСʸ
ɽΤʬϤǤ
Ǥϡɽ줿åκǽ 3 ʸ 4 ʸΤ˹礦褦ˡ
      if ((result[1]=='A')&&(result[2]=='Z' ...)
aztcd_init() ˤ嵭ΥơȥȤĴƲ

̤­ݤϡaztcd_init() ˤ롢֥ޡȡץɤθеǽǤ̾
aztcd_init  Сʸɤ⤦ȤϡCD-ROM ɥ饤֤ϥǥ
ˤʤäƤꡢ֤ ACMD_SOFT_RESET Ȥ鷺˺Ѥޤޤϡ
AFL_OP_OK ɤߤȤƤ뤫ɤ򸫤С狼ޤ㤨С
˥顼ФȤǽ DOS ưȤ褦ʤȤǡ
CD-ROM 餫ξ֤ǥϥ󥰤硢СʸΤޤ󤬡
Υޥɤưޤ󡣤ϡACMD_SOFT_RESET ĤǤ
¹Ԥ褦ˡɤѤƲif ʸ 'if ( ...=AFL_OP_OK)'  'if (1)'
֤ޤ

顢ȤΥɥ饤֤ΤʥСʸȥɤνƤˡ
ñդơɮԤ˥᡼뤷ƲޤʤǤ⡢
ǥХååνϤ᡼뤷ƤƤޤޤ󡣤Ǥ˺ʤ
͡äΤΩĤΤϡΤĴǤꡢ
ϡɥΥåȥåפȹԤʤäȡʥɥ֡ȡ֡ȡ
DOS ͭ꡿DOS̵DOS ɥ饤Фưưʤä¹Ԥ Linux
Υޥɡˤܺ٤ˤ錄äƤʤΤǤ

9. ɥ饤Фε̤Ǥ
AZTECH ɥ饤Ф Mitsumi Υɥ饤Ф˼äΤǤùʤƤϤʤʤ
פʹܤ 4 Ĥޤ

a) Mitsumi Υɥ饤֤ϡƥޥɤγǧ򤷤Ƥ봰ʥơ
ºݤФƤޤAztech Υɥ饤֤ǤϡޥɤȤ
椷ФƤޤ󡣤Ǥ顢ʥơɬפʤȡĤ
ACMD_GET_STATUS ޥɤ¹ԤƤޤΥޥɤΥϥɥ
ϡaztSendCmd() ؿ sendAztCmd() ؿ getAztStatus() ؿ
ǸĤޤ

b) Aztech Υɥ饤֤ˤ ACMD_GET_DISK_INFO ޥɤޤ󡣤Ǥ顢
ȥåȥåǽȥåˤǥĹξɬפˤʤä顢
ȥåƬˤ TOC ɤߤȤ餶ޤǤaztGetDiskInfo() 
ؿȡˡ

c) ɥ饤֤ǡɤߤȤ硢Mitsumi Ͼ (0xffffff) Υ
ɤߤȤ륳ޥɤǻϤƤޤŬʿΥɤߤȤȡɥ饤֤
ACMD_STOP ޥɤߤޤǤ⡢ Aztech Υɥ饤֤Ǥưޤ
ߤˡϸĤޤǤߤȰߥޥɤºݤư
ΤϡAUDIO ⡼ɤǡDATA ⡼ɤǤưʤΤǤäơ
azt_poll ؿˤͭ¾֥ޥפơΥ
ɤߤȤꡢθ׵˱ƿɤ߼Ϥ褦ˤʤФʤޤ
ǤMitsumi Υɥ饤ФǼƤ롢Хåեåˡ
򤷤ƤʤäΤǡ٤ƤΥСƤ뤫ɤϡ
οƤޤ󡣥ॢȥåФϡ function azt_poll()
 switch(cmd) դȤ case ACD_S_DATA ˡäȤХꤽǤ

d) ɥ饤֥⡼ɤѹ˴ؤꤷƤޤǤ顢
azt_poll() ؿ case AZT_S_MODE դư뤫ɤ路Ǥ
ʬǥƥȤϡraw ⡼ɤǤɤߤȤؤ뤳ȤǤޤǤ
raw ⡼ɤɤߤȤ뤿ᡢAztech ǤѰդ줿⡼ɤǤϤʤ̤Υޥ
ȤäƤޤ ISO9660 ǻȤäƤ륻ǤϤʤioctl 
ǼΤΤǤ

Υɥ饤ФϡIntel 486/DX2, 8MB , 340MB IDE ϡɥǥդ 
AST PC ȡƥΥڥƥ 60MHz, 16MB , 520MB IDE դơ
LST 1.8 ǥȥӥ塼 1.0.9 С Linux ͥ뤬ưƤ
AST PC ǳȯޤͥϡgcc 2.5.8 Ȥäƥѥ뤷ޤ
ȤäƤ CD-ROM ɥ饤֤ϡAztech CDA268-01A Ǥɥ饤֤ξˤС
ե०С AZT26801A1.3 ȤʤäƤޤˤ ISA Х
󥿥եɤդƤꡢDMA ߤȤ鷺 polled I/O ư
ޤ¾Υɥ饤֤ΥɤϤ٤ơ󥿡ͥåȾο¿Υܥƥˡ
֥⡼ȤǡץƥȤȥǥХå򤷤Ƥ餤ޤ

꤬ꤽȴ䡢ɥ饤֤ưʤɤˤ򤷤Ƥʤ
ˤĤƤϤ٤ơ /*???*/ ȤդƤޤ
Mitsumi Υɥ饤ФǤ⡢ɤˤ򤷤ƤʤʬĤޤ


10. ռ
Aztech Ҥ P. Bush  GWDG E.Moenkebergͤνʤä顢
κȤԲǽäȻפޤP. Bush  Aztech ɥ饤֤εѾ
ƤޤE.Moenkeberg  ͡ CD-ROM ɥ饤֤˶̤ʹ¤
ʬϤȤŻ򤷤Ƥޤ 'kernel ready' Ȥ
եȥκˤ礭ʽˤʤäƤޤ˥塼롼
 CDROM Ϣμ¿ˤƤޤळʪ Linux CD-ROM
ѡȤǤ󥿡ͥåȾ֤ˤⴶդޤϡ
CDROM ˴ؤƲͤ򽸤Ƥޤ

ɮԤκǽλʤϤä®äΤǤJoe Nardone (joe@access.digex.net) ϡ
ФƤ⡢ƥȤɤβΤ򤷤Ƥޤ
äˡazt_poll() Ρͭ¾֥ޥפϡɮԤ mcd.c 饳ԡΤǤ
Joe Ϥľơ줤 C ΥɤˤƤ줿ˡ줷 'goto' ʸ
Ƥޤ

Robby Schirmer (schirmer@fmi.uni-passau.de) ϡǥط (ioctl) ƥȤơ
˴ؤ뤿ΥѥåƤƤޤ

Joseph Piskor  Peter Nugent  ORCHID CD3110 ǻȤäƤ줿ǽ
桼ǡ꤬äƤѲƤޤ

Reinhard Max  SoundWave32 ɥɤ CDROM 󥿥ե˴ؤ
Ƥޤ

Jochen Kunz  Olaf Kaluza  Conrad  TXC ɥ饤֤˴ؤ
ޤ

Hilmar Berger  CyCDROM CR520ie 򥵥ݡȤѥåϤƤޤ

ޤǽҤ٤Ƥ˶̣ʤ顢ɤʤǤ 'ftp.gwdg.de' 
'pub/linux/cdrom' ǥ쥯ȥꡢ 'ftp.cdrom.com'  'pub/cdrom'
ǥ쥯ȥƤߤƲ

11. ɥץκcdplay.c
aztcd.c ǻȤäƤ ioctl ؿϡʬΥץǤȤޤ
λȤȤơǥ CD Ѥξ CD ץ졼 'cdplay.c' 
Ҳ𤷤ޤΥץǡǥ CD κǤ褦ˤʤޤ
ꤷȥåκߡ쥸塼ࡢȥåΥåסꡢ
ᤷǤޤɥ饤֤ߤ᤺˥ץλȡϷ³ޤ
cdplay ʸ˻Ѥơǡǥɤ߼ꡢ16ʥפ뤳Ȥ
ǤޤΥեϿˡɤޤǥǤʬ
ǡ'cdplay.c' Ȥ̥եˤƤ⤫ޤޤ󡣥ѥ뤷
¹ԲǽˤˤϡΤ褦ˤޤ
  gcc -s -Wall -O2 -L/usr/lib cdplay.c -o /usr/local/bin/cdplay # ѥ뤹
  chmod +755 /usr/local/bin/cdplay                              # ¹Բǽˤ
  ln -s /dev/aztcd0 /dev/cdrom                                  # 󥯤
   /usr/lib ΤĤƤϡ󥯥롼ɥե뤬ȥåץǥ쥯ȥ֤
   ޤ/usr/local/bin ǥ쥯ȥϡǤ¹ԲǽʥХʥ֤
   ˤƤ

ΥץȤˤϡcdplay֤ӡ /dev/mcd0 ʤ /dev/aztcd0 
ѡߥåꤷʤФʤޤ󡣥ǥ CD Ƥ
ϡ/dev/cdrom ޥȤʤ褦ˤΤ˺ʤǲ

Υץϡaztcd.c  ioctl ؿƥȤ뤿ˡϥåΤ
ޤɮԤϤΥץΥƥʥ󥹤ϹԤʤޤ󡣤Ǥ顢
ϤΥץΤƤ뤫 'cdplay.c' 򸫤
ץˤϺ¤Υ桼ݸϥ顼ФäƤޤ
äǥޥɤȤäꡢCD δְäɤߤȤȤȡ
顼åФꡢޥ󤬥ϥ󥰤뤳Ȥ뤫⤷ޤ
cdplay λˡSTEN_LOW, STEN_LOW_WAIT 뤤ϥȿȤΥ顼
åФƤޤȡθ奷ƥϤʾꤷʤʤ뤫⤷ޤ
֡ȤǤ礦ioctl ؿϥͥ⡼ɤưΤǡ
äȤ̤˸롢Linux Υޥݸǽưޤ
Ƥʤָ㤤ΡץݥȤȡ¾Υ桼Υǡ
ץΰ˽񤭤ꡢͥΥơ֥˲ΤϴñǤ
Ǥ顢ƥץߥ󥰤򤷤ꥫͥϥåݡioctl ¸
ϡ˥ƥΥԡʾ˥ХååפƲʤ
ǽ˥ХååץԡΥꥹȥƲˡ

'cdtester.c' ȤäƲСˤϡCDROM ɥ饤֤ΥƥѤˡ
¿εǽޤ E.Moenkeberg 񤤤Τǡ
/usr/src/linux/Documentation/cdrom/sbpcd ˤޤ

Werner Zimmermann
Fachhochschule fuer Technik Esslingen
(EMail: Werner.Zimmermann@fht-esslingen.de)
October, 1997

---------------------------------------------------------------------------
APPENDIX: cdplay.c Υ

/* Tiny Audio CD Player

   Copyright 1994, 1995, 1996 Werner Zimmermann (Werner.Zimmermann@fht-esslingen.de)

This program originally was written to test the audio functions of the
AZTECH.CDROM-driver, but it should work with every CD-ROM drive. Before 
using it, you should set a symlink from /dev/cdrom to your real CDROM
device.

The GNU General Public License applies to this program.

History:  V0.1  W.Zimmermann: First release. Nov. 8, 1994
          V0.2  W.Zimmermann: Enhanced functionality. Nov. 9, 1994
          V0.3  W.Zimmermann: Additional functions. Nov. 28, 1994          
          V0.4  W.Zimmermann: fixed some bugs. Dec. 17, 1994
          V0.5  W.Zimmermann: clean 'scanf' commands without compiler warnings
                              Jan. 6, 1995
          V0.6  W.Zimmermann: volume control (still experimental). Jan. 24, 1995
          V0.7  W.Zimmermann: read raw modified. July 26, 95
*/

#include <stdio.h>
#include <ctype.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/cdrom.h>
#include <linux/../../drivers/cdrom/aztcd.h>

void help(void)
{ printf("Available Commands:  STOP         s      EJECT/CLOSE  e       QUIT         q\n");
  printf("                     PLAY TRACK   t      PAUSE        p       RESUME       r\n");
  printf("                     NEXT TRACK   n      REPEAT LAST  l       HELP         h\n");
  printf("                     SUB CHANNEL  c      TRACK INFO   i       PLAY AT      a\n");
  printf("                     READ         d      READ RAW     w       VOLUME       v\n");
}

int main(void)
{ int handle;
  unsigned char command=' ', ini=0, first=1, last=1;
  unsigned int cmd, i,j,k, arg1,arg2,arg3;
  struct cdrom_ti       ti;
  struct cdrom_tochdr   tocHdr;
  struct cdrom_subchnl  subchnl;
  struct cdrom_tocentry entry;
  struct cdrom_msf      msf;
  union  { struct cdrom_msf msf;
           unsigned char buf[CD_FRAMESIZE_RAW];
         } azt;
  struct cdrom_volctrl  volctrl;

  printf("\nMini-Audio CD-Player V0.72   (C) 1994,1995,1996  W.Zimmermann\n");
  handle=open("/dev/cdrom",O_RDWR);
  ioctl(handle,CDROMRESUME);
  
  if (handle<=0) 
    { printf("Drive Error: already playing, no audio disk, door open\n");
      printf("             or no permission (you must be ROOT in order to use this program)\n");
    }
  else
    { help();
      while (1)
        { printf("Type command (h = help):  ");
          scanf("%s",&command); 
          switch (command)
            { case 'e':   cmd=CDROMEJECT;
                          ioctl(handle,cmd);
                          break;  
              case 'p':   if (!ini)
                             { printf("Command not allowed - play track first\n");
                             }
                          else
                             { cmd=CDROMPAUSE;
                               if (ioctl(handle,cmd)) printf("Drive Error\n");
                             }
                          break;
              case 'r':   if (!ini)
                             { printf("Command not allowed - play track first\n");
                             }
                          else
                             { cmd=CDROMRESUME;
                               if (ioctl(handle,cmd)) printf("Drive Error\n");
                             }
                          break;
              case 's':   cmd=CDROMPAUSE;
                          if (ioctl(handle,cmd)) printf("Drive error or already stopped\n");
                          cmd=CDROMSTOP;
                          if (ioctl(handle,cmd)) printf("Drive error\n");
                          break;
              case 't':   cmd=CDROMREADTOCHDR;
                          if (ioctl(handle,cmd,&tocHdr)) printf("Drive Error\n");
                          first=tocHdr.cdth_trk0;
                          last= tocHdr.cdth_trk1;
                          if ((first==0)||(first>last))
                            { printf ("--could not read TOC\n");
                            }
                          else
                            { printf("--first track: %d   --last track: %d   --enter track number: ",first,last);
                              cmd=CDROMPLAYTRKIND;
                              scanf("%i",&arg1);
                              ti.cdti_trk0=arg1;
                              if (ti.cdti_trk0<first) ti.cdti_trk0=first;
                              if (ti.cdti_trk0>last)  ti.cdti_trk0=last;
                              ti.cdti_ind0=0;
                              ti.cdti_trk1=last;
                              ti.cdti_ind1=0;
                              if (ioctl(handle,cmd,&ti)) printf("Drive Error\n");
                              ini=1;
                            } 
                          break;
              case 'n':   if (!ini++) 
                            { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n");
                              first=tocHdr.cdth_trk0;
                              last= tocHdr.cdth_trk1;
                              ti.cdti_trk0=first-1;
                            }
                          if ((first==0)||(first>last))
                            { printf ("--could not read TOC\n");
                            }
                          else
                            { cmd=CDROMPLAYTRKIND;
                              if (++ti.cdti_trk0 > last)  ti.cdti_trk0=last;
                              ti.cdti_ind0=0;
                              ti.cdti_trk1=last;
                              ti.cdti_ind1=0;
                              if (ioctl(handle,cmd,&ti)) printf("Drive Error\n");
                              ini=1;
                            }
                          break;
              case 'l':   if (!ini++)
                            { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n");
                              first=tocHdr.cdth_trk0;
                              last= tocHdr.cdth_trk1;
                              ti.cdti_trk0=first+1;
                            }
                          if ((first==0)||(first>last))
                            { printf ("--could not read TOC\n");
                            }
                          else
                            { cmd=CDROMPLAYTRKIND;
                              if (--ti.cdti_trk0 < first) ti.cdti_trk0=first;
                              ti.cdti_ind0=0;
                              ti.cdti_trk1=last;
                              ti.cdti_ind1=0;
                              if (ioctl(handle,cmd,&ti)) printf("Drive Error\n");
                              ini=1;
                            }  
                          break;
              case 'c':   subchnl.cdsc_format=CDROM_MSF;
                          if (ioctl(handle,CDROMSUBCHNL,&subchnl)) 
                            printf("Drive Error\n");
                          else
                            { printf("AudioStatus:%s   Track:%d  Mode:%d   MSF=%d:%d:%d\n", \
                              subchnl.cdsc_audiostatus==CDROM_AUDIO_PLAY ? "PLAYING":"NOT PLAYING",\
                              subchnl.cdsc_trk,subchnl.cdsc_adr, \
                              subchnl.cdsc_absaddr.msf.minute, subchnl.cdsc_absaddr.msf.second, \
                              subchnl.cdsc_absaddr.msf.frame);
                            }
                          break;              
              case 'i':   if (!ini)
                            { printf("Command not allowed - play track first\n");
                            }
                          else
                            { cmd=CDROMREADTOCENTRY;
                              printf("Track No.: ");
                              scanf("%d",&arg1);
                              entry.cdte_track=arg1;
                              if (entry.cdte_track<first) entry.cdte_track=first;
                              if (entry.cdte_track>last)  entry.cdte_track=last;
			      entry.cdte_format=CDROM_MSF;
                              if (ioctl(handle,cmd,&entry)) 
                               { printf("Drive error or invalid track no.\n");
                               }
                              else
                               { printf("Mode %d Track, starts at %d:%d:%d\n", \
                               entry.cdte_adr,entry.cdte_addr.msf.minute, \
                               entry.cdte_addr.msf.second,entry.cdte_addr.msf.frame);
                               }
                            }
                          break;
              case 'a':   cmd=CDROMPLAYMSF;
                          printf("Address (min:sec:frame)  ");
                          scanf("%d:%d:%d",&arg1,&arg2,&arg3);
                          msf.cdmsf_min0  =arg1;
                          msf.cdmsf_sec0  =arg2;
                          msf.cdmsf_frame0=arg3;
                          if (msf.cdmsf_sec0  > 59) msf.cdmsf_sec0  =59;
                          if (msf.cdmsf_frame0> 74) msf.cdmsf_frame0=74;
                          msf.cdmsf_min1=60;
                          msf.cdmsf_sec1=00;
                          msf.cdmsf_frame1=00;
                          if (ioctl(handle,cmd,&msf)) 
                           { printf("Drive error or invalid address\n");
                           }
                          break;
#ifdef AZT_PRIVATE_IOCTLS /*not supported by every CDROM driver*/
              case 'd':   cmd=CDROMREADCOOKED;
                          printf("Address (min:sec:frame)  ");
                          scanf("%d:%d:%d",&arg1,&arg2,&arg3);
                          azt.msf.cdmsf_min0  =arg1;
                          azt.msf.cdmsf_sec0  =arg2;
                          azt.msf.cdmsf_frame0=arg3;
                          if (azt.msf.cdmsf_sec0  > 59) azt.msf.cdmsf_sec0  =59;
                          if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74;
                          if (ioctl(handle,cmd,&azt.msf)) 
                           { printf("Drive error, invalid address or unsupported command\n");
                           }
                          k=0;
                          getchar();
                          for (i=0;i<128;i++)
                           { printf("%4d:",i*16);
                             for (j=0;j<16;j++)
                               { printf("%2x ",azt.buf[i*16+j]);
                               }
                             for (j=0;j<16;j++)
                               { if (isalnum(azt.buf[i*16+j])) 
                                   printf("%c",azt.buf[i*16+j]);
                                 else
                                   printf(".");
                               }
                             printf("\n"); 
                             k++;
                             if (k>=20)
                              { printf("press ENTER to continue\n");
                                getchar();
                                k=0;
                              }
                           } 
                          break;
              case 'w':   cmd=CDROMREADRAW;
                          printf("Address (min:sec:frame)  ");
                          scanf("%d:%d:%d",&arg1,&arg2,&arg3);
                          azt.msf.cdmsf_min0  =arg1;
                          azt.msf.cdmsf_sec0  =arg2;
                          azt.msf.cdmsf_frame0=arg3;                          
                          if (azt.msf.cdmsf_sec0  > 59) azt.msf.cdmsf_sec0  =59;
                          if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74;
                          if (ioctl(handle,cmd,&azt)) 
                           { printf("Drive error, invalid address or unsupported command\n");
                           }
                          k=0;
                          for (i=0;i<147;i++)
                           { printf("%4d:",i*16);
                             for (j=0;j<16;j++)
                               { printf("%2x ",azt.buf[i*16+j]);
                               }
                             for (j=0;j<16;j++)
                               { if (isalnum(azt.buf[i*16+j])) 
                                   printf("%c",azt.buf[i*16+j]);
                                 else
                                   printf(".");
                               }
                             printf("\n"); 
                             k++;
                             if (k>=20)
                              { getchar();
                                k=0;
                              }
                           } 
                          break;
#endif
              case 'v':   cmd=CDROMVOLCTRL;
                          printf("--Channel 0 Left  (0-255): ");
                          scanf("%d",&arg1);
                          printf("--Channel 1 Right (0-255): ");
                          scanf("%d",&arg2);
                          volctrl.channel0=arg1;
                          volctrl.channel1=arg2;
                          volctrl.channel2=0;
                          volctrl.channel3=0;
                          if (ioctl(handle,cmd,&volctrl)) 
                           { printf("Drive error or unsupported command\n");
                           }
                          break;  
              case 'q':   if (close(handle)) printf("Drive Error: CLOSE\n");
                          exit(0);
              case 'h':   help();
                          break;
              default:    printf("unknown command\n");
                          break;
            }
       }
    }
  return 0;
}
==============================================================================
ΡJF ץ <http://www.linux.or.jp/JF/>
ԡ˧
ϡJF ץ <http://www.linux.or.jp/JF/>

