home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 3
/
FREEWARE.BIN
/
towns_os
/
cdtime20
/
cdtime.c
next >
Wrap
Text File
|
1980-01-02
|
2KB
|
99 lines
/* CDSTOP COPYRIGHT (C) AIH */
/* set the stop-time for CD-drive (real mode) */
/* 90.03 Ver1.0 */
/* 90.04.30 Ver1.1 Modify message */
/*
Towns-GCC関係者,エディタを開発されたMIYAZAKI氏およびNIFTY-SERVE
Waku氏に感謝いたします.
さらにWaku氏のCDINFOを流用させて頂きました.重ねて御礼申し上げます.
ソ-スが公開されていて,どれほど助かったことか.(^_^;) 感謝!
*/
#include <stdio.h>
#include "register.h"
#define CD_BIOS 0x93 /* CD BIOS INT function */
#define CD_devno 0xc0 /* CD device No. */
#define CD_getinfo 0x54 /* CD BIOS function No. */
#define CD_stoptime 0x52 /* CD BIOS function No. */
struct TRACK {
unsigned char min,sec,frame ;
} ;
struct TOC {
unsigned char type ;
unsigned char strk,etrk ;
struct TRACK total ;
struct TRACK trk[99] ;
} tocbuf ;
union REGS reg ;
struct SREGS sreg ;
main(argc, argv)
int argc;
char *argv[];
{
int seg,ofs ;
int trks,i ;
struct TRACK *tp ;
int time;
int retry=0;
if (argc==2){
time=atoi(argv[1]);
}
else {
time==1;
}
if (time<=0 || time>20){
time=1;
}
if( nativetoreal( &(tocbuf), sizeof(tocbuf),&seg, &ofs ) < 0 ) {
printf ( "作業領域の獲得に失敗しました.中止します.(^_^;)\n" ) ;
exit( 1 ) ;
}
/* この部分は、nativetoreal関数と同義
reg.x.ax = 0x250f ;
reg.e.ebx = (unsigned int)&(tocbuf ) ;
intdos( ®, ® ) ;
seg = reg.x.__cx ;
ofs = reg.x.cx ;
printf( "native::%x --> real::%x:%x\n",&(tocbuf),seg,ofs ) ;
*/
while(1){
reg.h.ah = CD_stoptime ;
reg.h.al = CD_devno ;
reg.x.cx = 0xFF00 + time ;
reg.x.di = ofs ;
segread( &sreg ) ;
sreg.ds = seg ;
intreal( CD_BIOS, ®, ®, &sreg ) ;
retry++;
/* printf("ah=%x cx=%x retry=%d\n", reg.h.ah, reg.x.cx, retry);*/
/* bios normal end? */
if (reg.h.ah==0){
break;
}
if (reg.h.ah!=0 && retry==5) {
printf( "CD-ROMの停止時間設定に失敗しました. ごめんなさい(^_^;) ah=%x cx=%x\n",reg.h.ah,reg.x.cx ) ;
exit ( 1 ) ;
}
/* drvie ready? */
if (reg.h.cl==0x01){
printf( "CD-ROMドライブが準備できていません.\n");
exit ( 1 ) ;
exit (1);
}
}
printf("CD-ROMドライブ停止時間を設定しました.\n");
exit ( 0 ) ;
}