/******************************************************************************* * * Main Function * *******************************************************************************/ int main() { // setting up everything initialize(); /*************** Main Loop ***********************************/ while (1) { if (_RD6 == 0) // If S3 button is pressed { // Need to display Seconds PORTA = BinaryToBcd(Seconds); // PORTA = BCD value of Seconds PortAToggleFlag = 1; // Toggle Flag to ON } else if (_RD7 == 0) // If S6 button is pressed { // Need to display HOurs PORTA = BinaryToBcd(Hours); // PORTA = BCD value of Hours PortAToggleFlag = 1; // Toggle Flag to ON } } // End of the infinite While loop return 1; }
/******************************************************************************* * * Interrupt Service Routine * *******************************************************************************/ void __attribute__ ((interrupt, no_auto_psv)) _T1Interrupt (void) { // // Turn off flag // IFS0bits.T1IF = 0; // TMR1 = 0; // Clear TMR1 // Check if Seconds is equal to 59 // if (Seconds >= TIME_SECONDS) // { // // if so, check if minutes is equal to 59 also if (Minutes >= TIME_MINUTES) // { // // if so, increment Hours, Minutes = 0, and Seconds = 0 ++Hours; // Minutes = 0; // Seconds = 0; // } // // if not, increment Minutes, and Seconds = 0 else // { // ++Minutes; // Seconds = 0; // } // } // // If not, Increment seconds // else // ++Seconds; // // if ((_RD6 == 1) && (_RD7 == 1)) // Both buttons are not pressed { // Display Minutes with 1 s interval // Decide whether to turn on PORTA or not based on PortAToggleFlag // 1 = PORTA is on right now // // 0 = PORTA is off right now // if (PortAToggleFlag == 1) //PORTA is currently ON, lets turn it OFF { // PORTA = 0; // Turn OFF PORTa PortAToggleFlag = 0; // Toggle the flag to OFF } // else // PORTA is currently OFF, lets set it to Minutes { // PORTA = BinaryToBcd(Minutes); // Set PORTA to the BCD value of minutes PortAToggleFlag = 1; // Toggle the flag to ON } } }
int32 CdromDriverLinux::cd_discinfo(memptr device, memptr buffer) { int drive, errorcode; struct cdrom_tochdr tochdr; struct cdrom_subchnl subchnl; struct cdrom_tocentry tocentry; atari_discinfo_t *discinfo; drive = OpenDrive(device); if (drive<0) { return drive; } /* Read TOC header */ errorcode=cd_unixioctl(drive, CDROMREADTOCHDR, &tochdr); if (errorcode<0) { CloseDrive(drive); return errorcode; } D(bug(NFCD_NAME "DiscInfo(): TOC header read")); discinfo = (atari_discinfo_t *) Atari2HostAddr(buffer); memset(discinfo, 0, sizeof(atari_discinfo_t)); discinfo->first = discinfo->current = tochdr.cdth_trk0; discinfo->last = tochdr.cdth_trk1; discinfo->index = 1; /* Read subchannel */ subchnl.cdsc_format = CDROM_MSF; errorcode=cd_unixioctl(drive, CDROMSUBCHNL, &subchnl); if (errorcode<0) { CloseDrive(drive); return errorcode; } D(bug(NFCD_NAME "DiscInfo(): Subchannel read")); discinfo->current = subchnl.cdsc_trk; /* current track */ discinfo->index = subchnl.cdsc_ind; /* current index */ discinfo->relative.track = 0; discinfo->relative.minute = BinaryToBcd(subchnl.cdsc_reladdr.msf.minute); discinfo->relative.second = BinaryToBcd(subchnl.cdsc_reladdr.msf.second); discinfo->relative.frame = BinaryToBcd(subchnl.cdsc_reladdr.msf.frame); discinfo->absolute.track = 0; discinfo->absolute.minute = BinaryToBcd(subchnl.cdsc_absaddr.msf.minute); discinfo->absolute.second = BinaryToBcd(subchnl.cdsc_absaddr.msf.second); discinfo->absolute.frame = BinaryToBcd(subchnl.cdsc_absaddr.msf.frame); /* Read toc entry for start of disc, to select disc type */ tocentry.cdte_track = tochdr.cdth_trk0; tocentry.cdte_format = CDROM_MSF; errorcode = cd_unixioctl(drive, CDROMREADTOCENTRY, &tocentry); if (errorcode<0) { CloseDrive(drive); return errorcode; } discinfo->disctype = ((tocentry.cdte_ctrl & CDROM_DATA_TRACK) == CDROM_DATA_TRACK); /* Read toc entry for end of disc */ tocentry.cdte_track = CDROM_LEADOUT; tocentry.cdte_format = CDROM_MSF; errorcode = cd_unixioctl(drive, CDROMREADTOCENTRY, &tocentry); if (errorcode<0) { CloseDrive(drive); return errorcode; } D(bug(NFCD_NAME "DiscInfo(): Toc entry read")); discinfo->end.track = 0; discinfo->end.minute = BinaryToBcd(tocentry.cdte_addr.msf.minute); discinfo->end.second = BinaryToBcd(tocentry.cdte_addr.msf.second); discinfo->end.frame = BinaryToBcd(tocentry.cdte_addr.msf.frame); D(bug(NFCD_NAME "DiscInfo(): first=%d, last=%d, current=%d, ind=%d, rel=%02x:%02x:%02x, abs=%02x:%02x:%02x, end=%02x:%02x:%02x", discinfo->first, discinfo->last, discinfo->current, discinfo->index, discinfo->relative.minute, discinfo->relative.second, discinfo->relative.frame, discinfo->absolute.minute, discinfo->absolute.second, discinfo->absolute.frame, discinfo->end.minute, discinfo->end.second, discinfo->end.frame)); CloseDrive(drive); return TOS_E_OK; }
int32 CdromDriverLinux::cd_gettoc(memptr device, uint32 dummy, memptr buffer) { UNUSED(dummy); int drive, i, numtracks, errorcode; struct cdrom_tochdr tochdr; struct cdrom_tocentry tocentry; atari_tocentry_t *atari_tocentry; drive = OpenDrive(device); if (drive<0) { return drive; } /* Read TOC header */ errorcode=cd_unixioctl(drive, CDROMREADTOCHDR, &tochdr); if (errorcode<0) { CloseDrive(drive); return errorcode; } D(bug(NFCD_NAME "GetToc(): TOC header read")); numtracks = tochdr.cdth_trk1-tochdr.cdth_trk0+1; /* Read TOC entries */ atari_tocentry = (atari_tocentry_t *) Atari2HostAddr(buffer); for (i=0; i<=numtracks; i++) { D(bug(NFCD_NAME "GetToc(): reading TOC entry for track %d", i)); tocentry.cdte_track = tochdr.cdth_trk0+i; if (i == numtracks) { tocentry.cdte_track = CDROM_LEADOUT; } tocentry.cdte_format = CDROM_MSF; errorcode = cd_unixioctl(drive, CDROMREADTOCENTRY, &tocentry); if (errorcode<0) { CloseDrive(drive); return errorcode; } atari_tocentry[i].track = tocentry.cdte_track; atari_tocentry[i].minute = BinaryToBcd(tocentry.cdte_addr.msf.minute); atari_tocentry[i].second = BinaryToBcd(tocentry.cdte_addr.msf.second); atari_tocentry[i].frame = BinaryToBcd(tocentry.cdte_addr.msf.frame); if (tocentry.cdte_track == CDROM_LEADOUT) { atari_tocentry[i].track = CDROM_LEADOUT_CDAR; } D(bug(NFCD_NAME "GetToc(): track %d, id 0x%02x, %s", i, tocentry.cdte_track, tocentry.cdte_ctrl & CDROM_DATA_TRACK ? "data" : "audio" )); if (tocentry.cdte_format == CDROM_MSF) { D(bug(NFCD_NAME "GetToc(): msf %02d:%02d:%02d, bcd: %02x:%02x:%02x", tocentry.cdte_addr.msf.minute, tocentry.cdte_addr.msf.second, tocentry.cdte_addr.msf.frame, atari_tocentry[i].minute, atari_tocentry[i].second, atari_tocentry[i].frame )); } else { D(bug(NFCD_NAME "GetToc(): lba 0x%08x", tocentry.cdte_addr.lba)); } } atari_tocentry[numtracks+1].track = atari_tocentry[numtracks+1].minute = atari_tocentry[numtracks+1].second = atari_tocentry[numtracks+1].frame = 0; CloseDrive(drive); return TOS_E_OK; }