コード例 #1
0
ファイル: datasette.c プロジェクト: OpenEmu/VICE-Core
void datasette_set_tape_image(tap_t *image)
{
    CLOCK gap;

    DBG(("datasette_set_tape_image (image present:%s)", image ? "yes" : "no"));

    current_image = image;
    last_tap = next_tap = 0;
    datasette_internal_reset();

    if (image != NULL) {
        /* We need the length of tape for realistic counter. */
        current_image->cycle_counter_total = 0;
        do {
            gap = datasette_read_gap(1);
            current_image->cycle_counter_total += gap / 8;
        } while (gap);
        current_image->current_file_seek_position = 0;
    }
    if (datasette_list_item) {
        tapeport_set_tape_sense(0, datasette_device.id);
    }

    last_tap = next_tap = 0;
    fullwave = 0;

    ui_set_tape_status(current_image ? 1 : 0);
}
コード例 #2
0
ファイル: tapelog.c プロジェクト: aerdnar/emu-ex-plus-alpha
static void tapelog_set_tape_sense_passthrough(int sense)
{
    BYTE val = sense ? 1 : 0;

    if (tapelog_sense_in == val) {
        return;
    }

    if (tapelog_sense_in == 2) {
        tapelog_initial_set("sense in", val);
    } else {
        tapelog_transition("sense in", val);
    }

    tapelog_sense_in = val;
    tapeport_set_tape_sense(sense, tapelog_device.id);
}
コード例 #3
0
static int set_sense_dongle_enabled(int value, void *param)
{
    int val = value ? 1 : 0;

    if (sense_dongle_enabled == val) {
        return 0;
    }

    if (val) {
        sense_dongle_list_item = tapeport_device_register(&sense_dongle_device);
        if (sense_dongle_list_item == NULL) {
            return -1;
        }
        tapeport_set_tape_sense(1, sense_dongle_device.id);
    } else {
        tapeport_device_unregister(sense_dongle_list_item);
        sense_dongle_list_item = NULL;
    }

    sense_dongle_enabled = val;
    return 0;
}
コード例 #4
0
static void sense_dongle_reset(void)
{
    tapeport_set_tape_sense(1, sense_dongle_device.id);
}
コード例 #5
0
ファイル: datasette.c プロジェクト: OpenEmu/VICE-Core
static void datasette_control_internal(int command)
{
    DBG(("datasette_control_internal (%s) (image present:%s)", cmdstr[command], current_image ? "yes" : "no"));
    if (current_image) {
        switch (command) {
            case DATASETTE_CONTROL_RESET_COUNTER:
                datasette_reset_counter();
                break;
            case DATASETTE_CONTROL_RESET:
                datasette_internal_reset();
                /* falls through */
            case DATASETTE_CONTROL_STOP:
                current_image->mode = DATASETTE_CONTROL_STOP;
                if (datasette_list_item) {
                    tapeport_set_tape_sense(0, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                break;
            case DATASETTE_CONTROL_START:
                current_image->mode = DATASETTE_CONTROL_START;
                if (datasette_list_item) {
                    tapeport_set_tape_sense(1, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                if (datasette_motor) {
                    datasette_start_motor();
                }
                break;
            case DATASETTE_CONTROL_FORWARD:
                current_image->mode = DATASETTE_CONTROL_FORWARD;
                datasette_forward();
                if (datasette_list_item) {
                    tapeport_set_tape_sense(1, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                if (datasette_motor) {
                    datasette_start_motor();
                }
                break;
            case DATASETTE_CONTROL_REWIND:
                current_image->mode = DATASETTE_CONTROL_REWIND;
                datasette_rewind();
                if (datasette_list_item) {
                    tapeport_set_tape_sense(1, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                if (datasette_motor) {
                    datasette_start_motor();
                }
                break;
            case DATASETTE_CONTROL_RECORD:
                if (current_image->read_only == 0) {
                    current_image->mode = DATASETTE_CONTROL_RECORD;
                    if (datasette_list_item) {
                        tapeport_set_tape_sense(1, datasette_device.id);
                    }
                    last_write_clk = (CLOCK)0;
                }
                break;
        }
        ui_display_tape_control_status(current_image->mode);
    } else {
       switch (command) {
            case DATASETTE_CONTROL_RESET_COUNTER:
                datasette_reset_counter();
                break;
            case DATASETTE_CONTROL_RESET:
                datasette_internal_reset();
                /* falls through */
            case DATASETTE_CONTROL_STOP:
                notape_mode = DATASETTE_CONTROL_STOP;
                if (datasette_list_item) {
                    tapeport_set_tape_sense(0, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                break;
            case DATASETTE_CONTROL_START:
                notape_mode = DATASETTE_CONTROL_START;
                if (datasette_list_item) {
                    tapeport_set_tape_sense(1, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                if (datasette_motor) {
                    datasette_start_motor();
                }
                break;
            case DATASETTE_CONTROL_FORWARD:
                notape_mode = DATASETTE_CONTROL_FORWARD;
                datasette_forward();
                if (datasette_list_item) {
                    tapeport_set_tape_sense(1, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                if (datasette_motor) {
                    datasette_start_motor();
                }
                break;
            case DATASETTE_CONTROL_REWIND:
                notape_mode = DATASETTE_CONTROL_REWIND;
                datasette_rewind();
                if (datasette_list_item) {
                    tapeport_set_tape_sense(1, datasette_device.id);
                }
                last_write_clk = (CLOCK)0;
                if (datasette_motor) {
                    datasette_start_motor();
                }
                break;
            case DATASETTE_CONTROL_RECORD:
                /* record can usually not be pressed when no tape is present */
                break;
        }
        ui_display_tape_control_status(notape_mode);
    }
    /* clear the tap-buffer */
    last_tap = next_tap = 0;
}
コード例 #6
0
ファイル: datasette.c プロジェクト: OpenEmu/VICE-Core
void datasette_set_tape_sense(int sense)
{
    if (datasette_list_item) {
        tapeport_set_tape_sense(sense, datasette_device.id);
    }
}