void vmsfs_timestamp_from_bcd(struct timestamp *tstamp, unsigned char *bcd) { tstamp->year = frombcd(bcd[0])*100+frombcd(bcd[1]); tstamp->month = frombcd(bcd[2]); tstamp->day = frombcd(bcd[3]); tstamp->hour = frombcd(bcd[4]); tstamp->minute = frombcd(bcd[5]); tstamp->second = frombcd(bcd[6]); tstamp->wkday = frombcd(bcd[7]); }
void convertfrombcd(sceCdCLOCK* time) { time->second= frombcd(time->second); time->minute= frombcd(time->minute); time->hour = frombcd(time->hour); time->day = frombcd(time->day); time->month = frombcd(time->month); time->year = frombcd(time->year); }
static void setsubchannel(uae_u8 *s) { uae_u8 *d; // q-channel d = &cdtvcr_4510_ram[CDTVCR_SUBQ]; s += SUB_ENTRY_SIZE; int track = frombcd(s[1]); /* CtlAdr */ d[0] = s[0]; /* Track */ d[1] = s[1]; cdtvcr_4510_ram[CDTVCR_PLAYLIST_TRACK] = track; /* Index */ d[2] = s[2]; /* TrackPos */ d[3] = s[3]; d[4] = s[4]; d[5] = s[5]; /* DiskPos */ d[6] = s[6]; d[7] = s[7]; d[8] = s[8]; d[9] = s[9]; uae_u8 mins = 0, secs = 0; uae_s32 trackpos = msf2lsn(fromlongbcd(s + 3)); if (trackpos < 0) trackpos = 0; uae_s32 diskpos = msf2lsn(fromlongbcd(s + 7)); if (diskpos < 0) diskpos = 0; switch (cdtvcr_4510_ram[CDTVCR_PLAYLIST_TIME_MODE2]) { case 0: secs = (trackpos / 75) % 60; mins = trackpos / (75 * 60); break; case 1: trackpos = toc.toc[toc.first_track_offset + track].paddress - diskpos; secs = (trackpos / 75) % 60; mins = trackpos / (75 * 60); break; case 2: secs = (diskpos / 75) % 60; mins = diskpos / (75 * 60); break; case 3: diskpos = toc.lastaddress - diskpos; secs = (diskpos / 75) % 60; mins = diskpos / (75 * 60); break; } cdtvcr_4510_ram[CDTVCR_PLAYLIST_TIME_MINS] = mins; cdtvcr_4510_ram[CDTVCR_PLAYLIST_TIME_SECS] = secs; cdtvcr_4510_ram[CDTVCR_SUBQ - 2] = 1; // qcode valid cdtvcr_4510_ram[CDTVCR_SUBQ - 1] = 0; if (cdtvcr_4510_ram[CDTVCR_CD_SUBCODES]) cdtvcr_4510_ram[CDTVCR_INTREQ] |= 4; }