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); }
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); }
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; }
static void sense_dongle_reset(void) { tapeport_set_tape_sense(1, sense_dongle_device.id); }
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; }
void datasette_set_tape_sense(int sense) { if (datasette_list_item) { tapeport_set_tape_sense(sense, datasette_device.id); } }