*** wcd.c.ORG Sun Jun 27 16:33:43 1999 --- wcd.c Sun Jun 27 17:36:58 1999 *************** *** 14,19 **** --- 14,24 ---- * * Version 1.9, Mon Oct 9 20:27:42 MSK 1995 */ + /* modified by shige for NEC CD60D (NEC 260), Sun Jun 27 17:29:00 JST 1999 + * shige@iee.niit.ac.jp + */ + /* #undef NEC260 */ + #define NEC260 #include "wdc.h" #include "wcd.h" *************** *** 821,838 **** --- 826,866 ---- case CDIOCPLAYMSF: { struct ioc_play_msf *args = (struct ioc_play_msf*) addr; + #ifndef NEC260 return wcd_request_wait (t, ATAPI_PLAY_MSF, 0, 0, args->start_m, args->start_s, args->start_f, args->end_m, args->end_s, args->end_f, 0, 0, 0); + #else /* NEC260 */ + return wcd_request_wait (t, ATAPI_PLAY_MSF, 0, 0, + bin2bcd(args->start_m), bin2bcd(args->start_s), + bin2bcd(args->start_f), + bin2bcd(args->end_m), bin2bcd(args->end_s), + bin2bcd(args->end_f), 0, 0, 0); + #endif /* NEC260 */ } case CDIOCPLAYBLOCKS: { struct ioc_play_blocks *args = (struct ioc_play_blocks*) addr; + #ifndef NEC260 return wcd_request_wait (t, ATAPI_PLAY_BIG, 0, args->blk >> 24 & 0xff, args->blk >> 16 & 0xff, args->blk >> 8 & 0xff, args->blk & 0xff, args->len >> 24 & 0xff, args->len >> 16 & 0xff, args->len >> 8 & 0xff, args->len & 0xff, 0, 0); + #else /* NEC260 */ + { + u_long start,end; + u_char s_m,s_s,s_f,e_m,e_s,e_f; + + start=args->blk; end=args->blk+args->len; + lba2msf(start,&s_m,&s_s,&s_f); + lba2msf(end,&e_m,&e_s,&e_f); + return wcd_request_wait (t, ATAPI_PLAY_MSF, 0, 0, + bin2bcd(s_m), bin2bcd(s_s), bin2bcd(s_f), + bin2bcd(e_m), bin2bcd(e_s), bin2bcd(e_f), + 0, 0, 0); + } + #endif /* NEC260 */ } case CDIOCPLAYTRACKS: { struct ioc_play_track *args = (struct ioc_play_track*) addr; *************** *** 855,865 **** --- 883,907 ---- start = ntohl(t->toc.tab[t1].addr.lba); len = ntohl(t->toc.tab[t2].addr.lba) - start; + #ifndef NEC260 return wcd_request_wait (t, ATAPI_PLAY_BIG, 0, start >> 24 & 0xff, start >> 16 & 0xff, start >> 8 & 0xff, start & 0xff, len >> 24 & 0xff, len >> 16 & 0xff, len >> 8 & 0xff, len & 0xff, 0, 0); + #else /* NEC260 */ + { + u_long end; + u_char s_m,s_s,s_f,e_m,e_s,e_f; + + end=start+len; + lba2msf(start,&s_m,&s_s,&s_f); + lba2msf(end,&e_m,&e_s,&e_f); + return wcd_request_wait (t, ATAPI_PLAY_MSF, 0, 0, + bin2bcd(s_m),bin2bcd(s_s),bin2bcd(s_f), + bin2bcd(e_m),bin2bcd(e_s),bin2bcd(e_f),0,0,0); + } + #endif /* NEC260 */ } case CDIOCGETVOL: { struct ioc_vol *arg = (struct ioc_vol*) addr;