static void advance_hasdisk(void) { char *tmp; int traps; switch (check("READY.", AUTOSTART_WAIT_BLINK)) { case YES: if (autostart_program_name) log_message(autostart_log, "Loading program '%s'", autostart_program_name); else log_message(autostart_log, "Loading program '*'"); orig_drive_true_emulation_state = get_true_drive_emulation_state(); if (handle_drive_true_emulation) { resources_get_int("VirtualDevices", &traps); if (traps) { if (orig_drive_true_emulation_state) log_message(autostart_log, "Turning true drive emulation off."); set_true_drive_emulation_mode(0); } else { if (!orig_drive_true_emulation_state) log_message(autostart_log, "Turning true drive emulation on."); set_true_drive_emulation_mode(1); } } else { traps = 1; } if (autostart_program_name) tmp = lib_msprintf("LOAD\"%s\",8,1:\r", autostart_program_name); else tmp = lib_stralloc("LOAD\"*\",8,1:\r"); kbdbuf_feed(tmp); lib_free(tmp); if (!traps) { if (autostart_run_mode == AUTOSTART_MODE_RUN) kbdbuf_feed(AutostartRunCommand); autostartmode = AUTOSTART_DONE; } else { autostartmode = AUTOSTART_LOADINGDISK; machine_bus_attention_callback_set(disk_attention_callback); } deallocate_program_name(); break; case NO: orig_drive_true_emulation_state = get_true_drive_emulation_state(); autostart_disable(); break; case NOT_YET: break; } }
/* Execute the actions for the current `autostartmode', advancing to the next mode if necessary. */ void autostart_advance(void) { if (!autostart_enabled) { return; } if ( orig_drive_true_emulation_state == -1) { orig_drive_true_emulation_state = get_true_drive_emulation_state(); } if (maincpu_clk < autostart_initial_delay_cycles) { autostart_wait_for_reset = 0; return; } if (autostart_wait_for_reset) { return; } switch (autostartmode) { case AUTOSTART_HASTAPE: advance_hastape(); break; case AUTOSTART_PRESSPLAYONTAPE: advance_pressplayontape(); break; case AUTOSTART_LOADINGTAPE: advance_loadingtape(); break; case AUTOSTART_HASDISK: advance_hasdisk(); break; case AUTOSTART_HASSNAPSHOT: advance_hassnapshot(); break; case AUTOSTART_WAITLOADREADY: advance_waitloadready(); break; case AUTOSTART_WAITLOADING: advance_waitloading(); break; case AUTOSTART_WAITSEARCHINGFOR: advance_waitsearchingfor(); break; case AUTOSTART_INJECT: advance_inject(); break; default: return; } if (autostartmode == AUTOSTART_ERROR && handle_drive_true_emulation_overridden) { log_message(autostart_log, "Now turning true drive emulation %s.", orig_drive_true_emulation_state ? "on" : "off"); set_true_drive_emulation_mode(orig_drive_true_emulation_state); } }
/* Execute the actions for the current `autostartmode', advancing to the next mode if necessary. */ void autostart_advance(void) { if (!autostart_enabled) return; if( orig_drive_true_emulation_state == -1) { orig_drive_true_emulation_state = get_true_drive_emulation_state(); } if (maincpu_clk < min_cycles) { autostart_wait_for_reset = 0; return; } if (autostart_wait_for_reset) return; switch (autostartmode) { case AUTOSTART_HASTAPE: advance_hastape(); break; case AUTOSTART_PRESSPLAYONTAPE: advance_pressplayontape(); break; case AUTOSTART_LOADINGTAPE: advance_loadingtape(); break; case AUTOSTART_HASDISK: advance_hasdisk(); break; case AUTOSTART_HASSNAPSHOT: advance_hassnapshot(); break; default: return; } if (autostartmode == AUTOSTART_ERROR && handle_drive_true_emulation) { log_message(autostart_log, "Now turning true drive emulation %s.", orig_drive_true_emulation_state ? "on" : "off"); set_true_drive_emulation_mode(orig_drive_true_emulation_state); } }
static void advance_hasdisk(void) { char *tmp; int traps; switch (check("READY.", AUTOSTART_WAIT_BLINK)) { case YES: if (autostart_program_name) log_message(autostart_log, "Loading program '%s'", autostart_program_name); else log_message(autostart_log, "Loading program '*'"); orig_drive_true_emulation_state = get_true_drive_emulation_state(); if (handle_drive_true_emulation_overridden) { resources_get_int("VirtualDevices", &traps); if (traps) { if (orig_drive_true_emulation_state) log_message(autostart_log, "Turning true drive emulation off."); set_true_drive_emulation_mode(0); } else { if (!orig_drive_true_emulation_state) log_message(autostart_log, "Turning true drive emulation on."); set_true_drive_emulation_mode(1); } } else { if (!orig_drive_true_emulation_state) { traps = 1; } else { traps = 0; } } tmp = lib_msprintf("LOAD\"%s\",8%s:\r", autostart_program_name ? autostart_program_name : "*", autostart_basic_load ? "" : ",1"); kbdbuf_feed(tmp); lib_free(tmp); if (!traps) { if (AutostartWarp) { autostartmode = AUTOSTART_WAITSEARCHINGFOR; } else { /* be most compatible if warp is disabled */ if (autostart_run_mode == AUTOSTART_MODE_RUN) { kbdbuf_feed(AutostartRunCommand); } autostart_done(); } } else { autostartmode = AUTOSTART_LOADINGDISK; machine_bus_attention_callback_set(disk_attention_callback); } deallocate_program_name(); break; case NO: orig_drive_true_emulation_state = get_true_drive_emulation_state(); disable_warp_if_was_requested(); autostart_disable(); break; case NOT_YET: break; } }
static void advance_hasdisk(void) { char *tmp, *temp_name; int traps; switch (check("READY.", AUTOSTART_WAIT_BLINK)) { case YES: /* autostart_program_name may be petscii or ascii at this point, ANDing the charcodes with 0x7f here is a cheap way to prevent illegal characters in the printed message */ if (autostart_program_name) { temp_name = tmp = lib_stralloc(autostart_program_name); while (*tmp) { *tmp++ &= 0x7f; } log_message(autostart_log, "Loading program '%s'", temp_name); lib_free(temp_name); } else { log_message(autostart_log, "Loading program '*'"); } orig_drive_true_emulation_state = get_true_drive_emulation_state(); if (handle_drive_true_emulation_overridden) { resources_get_int("VirtualDevices", &traps); if (traps) { if (orig_drive_true_emulation_state) { log_message(autostart_log, "Turning true drive emulation off."); } set_true_drive_emulation_mode(0); } else { if (!orig_drive_true_emulation_state) { log_message(autostart_log, "Turning true drive emulation on."); } set_true_drive_emulation_mode(1); } } else { if (!orig_drive_true_emulation_state) { traps = 1; } else { traps = 0; } } tmp = lib_msprintf("LOAD\"%s\",8%s:\r", autostart_program_name ? autostart_program_name : "*", autostart_basic_load ? "" : ",1"); DBG(("advance_hasdisk '%s'", tmp)); kbdbuf_feed(tmp); lib_free(tmp); if (!traps) { if (AutostartWarp) { autostartmode = AUTOSTART_WAITSEARCHINGFOR; } else { /* be most compatible if warp is disabled */ autostart_finish(); autostart_done(); } } else { autostartmode = AUTOSTART_LOADINGDISK; machine_bus_attention_callback_set(disk_attention_callback); } deallocate_program_name(); break; case NO: orig_drive_true_emulation_state = get_true_drive_emulation_state(); disable_warp_if_was_requested(); autostart_disable(); break; case NOT_YET: break; } }