Example #1
0
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;
}
Example #2
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;
}
Example #3
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);
}
Example #4
0
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;
}
Example #5
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;
}
Example #6
0
File: main.c Project: bogde/OpenCBM
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();
}