static int pp_read(CBM_FILE fd, unsigned char *c1, unsigned char *c2) { SETSTATEDEBUG((void)0); cbm_iec_release(fd, IEC_CLOCK); SETSTATEDEBUG((void)0); #ifndef USE_CBM_IEC_WAIT while(cbm_iec_get(fd, IEC_DATA)); #else cbm_iec_wait(fd, IEC_DATA, 0); #endif SETSTATEDEBUG((void)0); *c1 = cbm_pp_read(fd); SETSTATEDEBUG((void)0); cbm_iec_set(fd, IEC_CLOCK); SETSTATEDEBUG((void)0); #ifndef USE_CBM_IEC_WAIT while(!cbm_iec_get(fd, IEC_DATA)); #else cbm_iec_wait(fd, IEC_DATA, 1); #endif SETSTATEDEBUG((void)0); *c2 = cbm_pp_read(fd); SETSTATEDEBUG((void)0); return 0; }
static int open_disk(CBM_FILE fd, d64copy_settings *settings, const void *arg, int for_writing, turbo_start start, d64copy_message_cb message_cb) { unsigned char d = (unsigned char)(ULONG_PTR)arg; const unsigned char *drive_prog; int prog_size; fd_cbm = fd; two_sided = settings->two_sided; if(settings->drive_type != cbm_dt_cbm1541) { drive_prog = pp1571_drive_prog; prog_size = sizeof(pp1571_drive_prog); } else { drive_prog = pp1541_drive_prog; prog_size = sizeof(pp1541_drive_prog); } /* make sure the XP1541 portion of the cable is in input mode */ cbm_pp_read(fd_cbm); cbm_upload(fd_cbm, d, 0x700, drive_prog, prog_size); start(fd, d); pp_check_direction(PP_READ); cbm_iec_set(fd_cbm, IEC_CLOCK); cbm_iec_wait(fd_cbm, IEC_DATA, 1); return 0; }
static void close_disk(void) { pp_write(fd_cbm, 0, 0); arch_usleep(100); cbm_iec_wait(fd_cbm, IEC_DATA, 0); /* make sure the XP1541 portion of the cable is in input mode */ cbm_pp_read(fd_cbm); }
static int pp_read(CBM_FILE fd, unsigned char *c1, unsigned char *c2) { pp_check_direction(PP_READ); #ifndef USE_CBM_IEC_WAIT while(!cbm_iec_get(fd, IEC_DATA)); #else cbm_iec_wait(fd, IEC_DATA, 1); #endif *c1 = cbm_pp_read(fd); cbm_iec_release(fd, IEC_CLOCK); #ifndef USE_CBM_IEC_WAIT while(cbm_iec_get(fd, IEC_DATA)); #else cbm_iec_wait(fd, IEC_DATA, 0); #endif *c2 = cbm_pp_read(fd); cbm_iec_set(fd, IEC_CLOCK); return 0; }
static void close_disk(void) { SETSTATEDEBUG((void)0); pp_write(fd_cbm, 0, 0); arch_usleep(100); SETSTATEDEBUG((void)0); cbm_iec_wait(fd_cbm, IEC_DATA, 0); /* make sure the XP1541 portion of the cable is in input mode */ SETSTATEDEBUG((void)0); cbm_pp_read(fd_cbm); SETSTATEDEBUG((void)0); opencbm_plugin_pp_dc_read_n = NULL; opencbm_plugin_pp_dc_write_n = NULL; }
static void read_line_status(CBM_FILE fd) { int data, clock, atn, reset, pp; FUNC_ENTER(); data = cbm_iec_get(fd, IEC_DATA); clock = cbm_iec_get(fd, IEC_CLOCK); atn = cbm_iec_get(fd, IEC_ATN); reset = cbm_iec_get(fd, IEC_RESET); pp = cbm_pp_read(fd); DBG_PRINT((DBG_PREFIX "READ: DATA = %s, CLOCK = %s, ATN = %s, RESET = %s, PP = $%02x", data ? "TRUE " : "FALSE", clock ? "TRUE " : "FALSE", atn ? "TRUE " : "FALSE", reset ? "TRUE " : "FALSE", pp)); FUNC_LEAVE(); }