static int cbm2_set_model(const char *model, void *extra) { int i; /* vsync_suspend_speed_eval(); */ for (i = 0; modtab[i].model; i++) { if (machine_class != modtab[i].modelline) { continue; } if (strcmp(modtab[i].model, model)) { continue; } cbm2model_set(modtab[i].modelid); cbm2_model = i; /* we have to wait until we did enough initialization */ if (!cbm2_init_ok) { return 0; } mem_powerup(); mem_load(); machine_trigger_reset(MACHINE_RESET_MODE_SOFT); return 0; } return -1; }
int cbm2_set_model(const char *model, void *extra) { int i; vsync_suspend_speed_eval(); for (i = 0; modtab[i].model; i++) { if (strcmp(modtab[i].model, model)) continue; resources_set_int("UseVicII", modtab[i].usevicii); resources_set_int("RamSize", modtab[i].ramsize); resources_set_string("BasicName", modtab[i].basic); resources_set_string("ChargenName", modtab[i].charrom); resources_set_string("KernalName", modtab[i].kernal); resources_set_int("ModelLine", modtab[i].line); cbm2_model = i; /* we have to wait until we did enough initialization */ if (!cbm2_init_ok) return 0; mem_powerup(); mem_load(); machine_trigger_reset(MACHINE_RESET_MODE_SOFT); return 0; } return -1; }
/* C64-specific initialization. */ int machine_specific_init(void) { #if defined(USE_SDLUI) || defined(USE_SDLUI2) if (console_mode) { video_disabled_mode = 1; } #else video_disabled_mode = 1; #endif c64_log = log_open("C64"); if (mem_load() < 0) { return -1; } if (vicii_init(VICII_STANDARD) == NULL && !video_disabled_mode) { return -1; } c64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); c64_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { vsid_ui_init(); } /* Initialize glue logic. */ c64_glue_init(); machine_drive_stub(); return 0; }
/* C128-specific initialization. */ int machine_specific_init(void) { c128_log = log_open("C128"); if (mem_load() < 0) { return -1; } if (z80mem_load() < 0) { return -1; } /* Setup trap handling. */ traps_init(); /* Initialize serial traps. */ if (serial_init(c128_serial_traps) < 0) { return -1; } serial_trap_init(0xa4); serial_iec_bus_init(); /* initialize RS232 handler */ rs232drv_init(); c64_rsuser_init(); /* initialize print devices */ printer_init(); /* Initialize the tape emulation. */ machine_tape_init_c128(); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); /* Initialize autostart. FIXME: at least 0xa26 is only for 40 cols */ autostart_init((CLOCK)(3 * C128_PAL_RFSH_PER_SEC * C128_PAL_CYCLES_PER_RFSH), 1, 0xa27, 0xe0, 0xec, 0xee); if (vdc_init() == NULL) { return -1; } if (vicii_init(VICII_EXTENDED) == NULL) { return -1; } cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (c128_kbd_init() < 0) { return -1; } #endif c64keyboard_init(); c128_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(842, 208, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C128-specific part of the UI. */ c128ui_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); /* Initialize lightpen support and register VICII/VDC callbacks */ lightpen_init(); lightpen_register_timing_callback(vicii_lightpen_timing, 1); lightpen_register_timing_callback(vdc_lightpen_timing, 0); lightpen_register_trigger_callback(c128_trigger_light_pen); #endif c64iec_init(); c128fastiec_init(); cartridge_init(); mmu_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline use VICII as default */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_get_int("40/80ColumnKey", &fs); if (fs == 1) { resources_set_int("VICIIFullscreen", 1); } else { resources_set_int("VDCFullscreen", 1); } } } #endif return 0; }
/* PET-specific initialization. */ int machine_specific_init(void) { pet_log = log_open("PET"); pet_init_ok = 1; /* used in pet_set_model() */ /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) { return -1; } log_message(pet_log, "Initializing IEEE488 bus..."); rs232drv_init(); /* initialize print devices */ printer_init(); /* Initialize autostart. FIXME: We could probably use smaller values. */ /* moved to mem_load() as it is kernal-dependant AF 30jun1998 autostart_init(1 * PET_PAL_RFSH_PER_SEC * PET_PAL_CYCLES_PER_RFSH, 0); */ /* Initialize the CRTC emulation. */ if (crtc_init() == NULL) { return -1; } crtc_set_retrace_type(petres.crtc); crtc_set_retrace_callback(pet_crtc_signal); pet_crtc_set_screen(); petcolour_init(); via_init(machine_context.via); pia1_init(); pia2_init(); acia1_init(); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (pet_kbd_init() < 0) { return -1; } #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); pet_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize the sidcart first */ sidcart_sound_chip_init(); /* Initialize native sound chip */ pet_sound_chip_init(); /* Initialize cartridge based sound chips */ userport_dac_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. FIXME: Is this correct? */ /* moved to mem_load() because it's model specific... AF 30jun1998 kbdbuf_init(631, 198, 10, PET_PAL_CYCLES_PER_RFSH * PET_PAL_RFSH_PER_SEC); */ /* Initialize the PET-specific part of the UI. */ petui_init(); /* Initialize the PET Ram and Expansion Unit. */ petreu_init(); /* Initialize the PET Double-W Hi-Res graphics card. */ petdww_init(); /* Initialize the PET Hi-Res Emulator graphics card. */ pethre_init(); petiec_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && \ (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("CRTCFullscreen", 1); } } #endif return 0; }
/* C128-specific initialization. */ int machine_specific_init(void) { int delay; c128_log = log_open("C128"); if (mem_load() < 0) { return -1; } event_init(); if (z80mem_load() < 0) { return -1; } /* Setup trap handling. */ traps_init(); /* Initialize serial traps. */ if (serial_init(c128_serial_traps) < 0) { return -1; } serial_trap_init(0xa4); serial_iec_bus_init(); if (!video_disabled_mode) { joystick_init(); } gfxoutput_init(); /* initialize RS232 handler */ rs232drv_init(); c64_rsuser_init(); /* initialize print devices */ printer_init(); /* Initialize the tape emulation. */ machine_tape_init_c128(); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); disk_image_init(); /* Initialize autostart. FIXME: at least 0xa26 is only for 40 cols */ resources_get_int("AutostartDelay", &delay); if (delay == 0) { delay = 3; /* default */ } autostart_init((CLOCK)(delay * C128_PAL_RFSH_PER_SEC * C128_PAL_CYCLES_PER_RFSH), 1, 0xa27, 0xe0, 0xec, 0xee); #ifdef USE_BEOS_UI /* Pre-init C128-specific parts of the menus before vdc_init() and vicii_init() create canvas windows with menubars at the top. This could also be used by other ports, e.g. GTK+... */ c128ui_init_early(); #endif if (vdc_init() == NULL) { return -1; } if (vicii_init(VICII_EXTENDED) == NULL) { return -1; } cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (c128_kbd_init() < 0) { return -1; } #endif c64keyboard_init(); c128_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); /* Initialize cartridge based sound chips */ cartridge_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(842, 208, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C128-specific I/O */ c128io_init(); /* Initialize the C128-specific part of the UI. */ c128ui_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #ifdef HAVE_LIGHTPEN /* Initialize lightpen support and register VICII/VDC callbacks */ lightpen_init(); lightpen_register_timing_callback(vicii_lightpen_timing, 1); lightpen_register_timing_callback(vdc_lightpen_timing, 0); lightpen_register_trigger_callback(c128_trigger_light_pen); #endif #endif c64iec_init(); c128fastiec_init(); cartridge_init(); mmu_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline use VICII as default */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_get_int("40/80ColumnKey", &fs); if (fs == 1) { resources_set_int("VICIIFullscreen", 1); } else { resources_set_int("VDCFullscreen", 1); } } } #endif return 0; }
/* Plus4-specific initialization. */ int machine_specific_init(void) { int delay; plus4_log = log_open("Plus4"); if (mem_load() < 0) { return -1; } event_init(); /* Setup trap handling. */ traps_init(); gfxoutput_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #endif /* Initialize serial traps. */ if (serial_init(plus4_serial_traps) < 0) { return -1; } serial_trap_init(0xa8); serial_iec_bus_init(); rs232drv_init(); /* Initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); disk_image_init(); /* Initialize autostart. */ resources_get_int("AutostartDelay", &delay); if (delay == 0) { delay = 2; /* default */ } autostart_init((CLOCK)(delay * PLUS4_PAL_RFSH_PER_SEC * PLUS4_PAL_CYCLES_PER_RFSH), 1, 0, 0xc8, 0xca, -40); /* Initialize the sidcart first */ sidcart_sound_chip_init(); /* Initialize native sound chip */ ted_sound_chip_init(); /* Initialize cartridge based sound chips */ digiblaster_sound_chip_init(); speech_sound_chip_init(); /* Initialize userport based sound chips */ userport_dac_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); #ifdef USE_BEOS_UI /* Pre-init Plus4-specific parts of the menus before ted_init() creates a canvas window with a menubar at the top. This could also be used by other ports, e.g. GTK+... */ plus4ui_init_early(); #endif if (ted_init() == NULL) { return -1; } acia_init(); #ifndef COMMON_KBD if (plus4_kbd_init() < 0) { return -1; } #endif plus4_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize keyboard buffer. */ kbdbuf_init(1319, 239, 8, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); if (!console_mode) { plus4ui_init(); } if (!video_disabled_mode) { joystick_init(); } cs256k_init(); h256k_init(); plus4iec_init(); machine_drive_stub(); /* Initialize the machine specific I/O */ plus4io_init(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("TEDFullscreen", 1); } } #endif return 0; }
/* C64-specific initialization. */ int machine_specific_init(void) { c64_log = log_open("C64"); if (mem_load() < 0) return -1; if (vsid_mode) { psid_init_driver(); } if (!vsid_mode) { /* Setup trap handling. */ traps_init(); /* Initialize serial traps. */ if (serial_init(c64_serial_traps) < 0) return -1; serial_trap_init(0xa4); serial_iec_bus_init(); /* Initialize RS232 handler. */ rs232drv_init(); c64_rsuser_init(); /* Initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); /* Initialize autostart. */ autostart_init((CLOCK)(3 * C64_PAL_RFSH_PER_SEC * C64_PAL_CYCLES_PER_RFSH), 1, 0xcc, 0xd1, 0xd3, 0xd5); } if (vicii_init(VICII_STANDARD) == NULL && !console_mode && !vsid_mode) return -1; c64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); if (!vsid_mode) { tpi_init(machine_context.tpi1); acia1_init(); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (c64_kbd_init() < 0) return -1; #endif c64keyboard_init(); } c64_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { if (vsid_mode) vsid_ui_init(); else c64ui_init(); } if (!vsid_mode) { /* Initialize the REU. */ reu_init(); /* Initialize the GEORAM. */ georam_init(); /* Initialize the RAMCART. */ ramcart_init(); /* Initialize the +60K. */ plus60k_init(); /* Initialize the +256K. */ plus256k_init(); /* Initialize the C64 256K. */ c64_256k_init(); /* Initialize the MMC64. */ mmc64_init(); #ifdef HAVE_TFE /* Initialize the TFE. */ tfe_init(); #endif #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #endif c64iec_init(); c64fastiec_init(); cartridge_init(); } machine_drive_stub(); return 0; }
/** * Opens the references file, reads in each line, and dispatches the commands * specified as appropriate to the CPU and OS modules. */ void sim_readdata(void) { FILE *fp; char buff[512]; if ((fp = fopen(filename, "r")) == NULL) { PERROR(filename); exit(EXIT_FAILURE); } /* For each line in the file... */ while (fgets(buff, sizeof(buff), fp) != NULL) { char *cmd, *arg1, *arg2, *arg3; int pid; vaddr_t addr; word_t val, val2; /* Parse command and possible arguments */ cmd = strtok(buff, WHITESPACE); arg1 = strtok(NULL, WHITESPACE); arg2 = strtok(NULL, WHITESPACE); arg3 = strtok(NULL, WHITESPACE); switch (cmd[0]) { /* Create a new process */ case '@': pid = atoi(arg1); if (pid < max_jobs) { printf("Forking new process %s. Assigning pid: %d.\n\n", arg2, pid); proc_fork(pid, arg2); } else { printf("Too many jobs, not forking new process!\n"); } break; /* Load from a memory location */ case 'l': pid = atoi(arg1); addr = atoi(arg2); val = atoi(arg3) % 256; if (pid >= max_jobs) { break; } else if (current == NULL || current->pid != pid) { printf("===================================================\n"); printf("Switching to process: %s. Corresponding pid: %d.\n", proc_getname(pid), pid); printf("===================================================\n\n"); proc_switch(pid); } val2 = mem_load(addr); printf("Value Loaded: %d\n", val2); if (val2 != val) { printf(" ERROR! loaded value did not equal expected!\nValue Expected: %d\n\n", val); /* XXX: Dump a mem image here and quit */ } else { printf("Complete\n\n"); } break; /* Store to a memory location */ case 's': pid = atoi(arg1); addr = atoi(arg2); val = atoi(arg3) % 256; if (pid >= max_jobs) { break; } else if (current == NULL || current->pid != pid) { printf("===================================================\n"); printf("Switching to process: %s. Corresponding pid: %d.\n", proc_getname(pid), pid); printf("===================================================\n\n"); proc_switch(pid); } mem_store(addr, val); printf("Complete\n\n"); /* Ignore other commands (for comments and the like */ default: break; } } fclose(fp); }
/* CBM-II-specific initialization. */ int machine_specific_init(void) { cbm2_log = log_open("CBM2"); cbm2_init_ok = 1; event_init(); /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) { return -1; } if (!video_disabled_mode) { joystick_init(); } gfxoutput_init(); rs232drv_init(); /* initialize print devices */ printer_init(); if (vicii_init(VICII_STANDARD) == NULL) { return -1; } /* c500_set_phi1_bank(15); c500_set_phi2_bank(15); */ c500_powerline_clk_alarm = alarm_new(maincpu_alarm_context, "C500PowerlineClk", c500_powerline_clk_alarm_handler, NULL); clk_guard_add_callback(maincpu_clk_guard, c500_powerline_clk_overflow_callback, NULL); machine_timing.cycles_per_sec = C500_PAL_CYCLES_PER_SEC; machine_timing.rfsh_per_sec = C500_PAL_RFSH_PER_SEC; machine_timing.cycles_per_rfsh = C500_PAL_CYCLES_PER_RFSH; cia1_init(machine_context.cia1); acia1_init(); tpi1_init(machine_context.tpi1); tpi2_init(machine_context.tpi2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (cbm2_kbd_init() < 0) { return -1; } #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); disk_image_init(); cbm2_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. This appears to work but doesn't account for banking. */ kbdbuf_init(939, 209, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the CBM-II-specific part of the UI. */ cbm5x0ui_init(); cbm2iec_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("VICIIFullscreen", 1); } } #endif return 0; }
/* CBM-II-specific initialization. */ int machine_specific_init(void) { cbm2_log = log_open("CBM2"); cbm2_init_ok = 1; event_init(); /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) { return -1; } if (!video_disabled_mode) { joystick_init(); } gfxoutput_init(); rs232drv_init(); /* initialize print devices */ printer_init(); #ifdef USE_BEOS_UI /* Pre-init CBM-II-specific parts of the menus before crtc_init() creates a canvas window with a menubar at the top. This could also be used by other ports, e.g. GTK+... */ cbm2ui_init_early(); #endif if (crtc_init() == NULL) { return -1; } crtc_set_retrace_callback(cbm2_crtc_signal); crtc_set_retrace_type(0); crtc_set_hw_options(1, 0x7ff, 0x1000, 512, -0x2000); cia1_init(machine_context.cia1); acia1_init(); tpi1_init(machine_context.tpi1); tpi2_init(machine_context.tpi2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (cbm2_kbd_init() < 0) { return -1; } #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); disk_image_init(); cbm2_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); /* Initialize userport based sound chips */ userport_dac_sound_chip_init(); userport_digimax_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. This appears to work but doesn't account for banking. */ kbdbuf_init(939, 209, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the CBM-II-specific part of the UI. */ cbm2ui_init(); cbm2iec_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #endif machine_drive_stub(); /* Initialize the CBM2-specific I/O */ cbm2io_init(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("CRTCFullscreen", 1); } } #endif return 0; }
/* CBM-II-specific initialization. */ int machine_specific_init(void) { cbm2_log = log_open("CBM2"); cbm2_init_ok = 1; /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) { return -1; } rs232drv_init(); /* initialize print devices */ printer_init(); if (crtc_init() == NULL) { return -1; } crtc_set_retrace_callback(cbm2_crtc_signal); crtc_set_retrace_type(0); crtc_set_hw_options(1, 0x7ff, 0x1000, 512, -0x2000); cia1_init(machine_context.cia1); acia1_init(); tpi1_init(machine_context.tpi1); tpi2_init(machine_context.tpi2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (cbm2_kbd_init() < 0) { return -1; } #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); cbm2_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. This appears to work but doesn't account for banking. */ kbdbuf_init(939, 209, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the CBM-II-specific part of the UI. */ cbm2ui_init(); cbm2iec_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && \ (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("CRTCFullscreen", 1); } } #endif return 0; }
/* VIC20-specific initialization. */ int machine_specific_init(void) { int delay; vic20_log = log_open("VIC20"); if (mem_load() < 0) { return -1; } event_init(); /* Setup trap handling. */ traps_init(); if (!video_disabled_mode) { joystick_init(); } gfxoutput_init(); /* Initialize serial traps. If user does not want them, or if the ``drive'' emulation is used, do not install them. */ if (serial_init(vic20_serial_traps) < 0) { return -1; } serial_trap_init(0xa4); serial_iec_bus_init(); /* Initialize RS232 handler. */ rs232drv_init(); vic20_rsuser_init(); /* initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); disk_image_init(); /* Initialize autostart. */ resources_get_int("AutostartDelay", &delay); if (delay == 0) { delay = 3; /* default */ } autostart_init((CLOCK) (delay * VIC20_PAL_RFSH_PER_SEC * VIC20_PAL_CYCLES_PER_RFSH), 1, 0xcc, 0xd1, 0xd3, 0xd5); #ifdef USE_BEOS_UI /* Pre-init VIC20-specific parts of the menus before vic_init() creates a canvas window with a menubar at the top. This could also be used by other ports, e.g. GTK+... */ vic20ui_init_early(); #endif /* Initialize the VIC-I emulation. */ if (vic_init() == NULL) { return -1; } via1_init(machine_context.via1); via2_init(machine_context.via2); ieeevia1_init(machine_context.ieeevia1); ieeevia2_init(machine_context.ieeevia2); #ifndef COMMON_KBD /* Load the default keymap file. */ if (vic20_kbd_init() < 0) { return -1; } #endif vic20_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip first */ vic_sound_chip_init(); /* Initialize the sidcart */ sidcart_sound_chip_init(); /* Initialize cartridge based sound chips */ cartridge_sound_chip_init(); /* Initialize userport based sound chips */ userport_dac_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.cycles_per_rfsh * machine_timing.rfsh_per_sec)); /* Initialize the VIC20-specific part of the UI. */ vic20ui_init(); vic20iec_init(); cartridge_init(); #ifdef HAVE_MOUSE mouse_init(); #ifdef HAVE_LIGHTPEN /* Initialize lightpen support and register VIC-I callbacks */ lightpen_init(); lightpen_register_timing_callback(vic_lightpen_timing, 0); lightpen_register_trigger_callback(vic_trigger_light_pen); #endif #endif /* Register joystick callback (for lightpen triggering via fire button) */ joystick_register_machine(via2_check_lightpen); #ifdef HAVE_MIDI midi_init(); #endif machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("VICFullscreen", 1); } } #endif return 0; }
/* VIC20-specific initialization. */ int machine_specific_init(void) { vic20_log = log_open("VIC20"); if (mem_load() < 0) return -1; /* Setup trap handling. */ traps_init(); /* Initialize serial traps. If user does not want them, or if the ``drive'' emulation is used, do not install them. */ if (serial_init(vic20_serial_traps) < 0) return -1; serial_trap_init(0xa4); serial_iec_bus_init(); /* Initialize RS232 handler. */ rs232drv_init(); vic20_rsuser_init(); /* initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); /* Initialize autostart. */ autostart_init((CLOCK) (3 * VIC20_PAL_RFSH_PER_SEC * VIC20_PAL_CYCLES_PER_RFSH), 1, 0xcc, 0xd1, 0xd3, 0xd5); /* Initialize the VIC-I emulation. */ if (vic_init() == NULL) return -1; via1_init(machine_context.via1); via2_init(machine_context.via2); ieeevia1_init(machine_context.ieeevia1); ieeevia2_init(machine_context.ieeevia2); #ifndef COMMON_KBD /* Load the default keymap file. */ if (vic20_kbd_init() < 0) return -1; #endif vic20_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.cycles_per_rfsh * machine_timing.rfsh_per_sec)); /* Initialize the VIC20-specific part of the UI. */ vic20ui_init(); vic20iec_init(); machine_drive_stub(); return 0; }
/* Plus4-specific initialization. */ int machine_specific_init(void) { int delay; plus4_log = log_open("Plus4"); if (mem_load() < 0) return -1; /* Setup trap handling. */ traps_init(); /* Initialize serial traps. */ if (serial_init(plus4_serial_traps) < 0) return -1; serial_trap_init(0xa8); serial_iec_bus_init(); rs232drv_init(); /* Initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); /* Initialize autostart. */ resources_get_int("AutostartDelay", &delay); if (delay == 0) { delay = 2; /* default */ } autostart_init((CLOCK)(delay * PLUS4_PAL_RFSH_PER_SEC * PLUS4_PAL_CYCLES_PER_RFSH), 0, 0, 0xc8, 0xca, -40); /* Initialize the sidcart first */ sidcart_sound_chip_init(); /* Initialize native sound chip */ ted_sound_chip_init(); /* Initialize cartridge based sound chips */ digiblaster_sound_chip_init(); speech_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); if (ted_init() == NULL) { return -1; } acia_init(); #ifndef COMMON_KBD if (plus4_kbd_init() < 0) { return -1; } #endif plus4_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize keyboard buffer. */ kbdbuf_init(1319, 239, 8, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); plus4ui_init(); cs256k_init(); h256k_init(); plus4iec_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && \ (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("TEDFullscreen", 1); } } #endif return 0; }
/* C64-specific initialization. */ int machine_specific_init(void) { int delay; scpu64_log = log_open("SCPU64"); if (mem_load() < 0) { return -1; } event_init(); /* Setup trap handling. */ traps_init(); if (!video_disabled_mode) { joystick_init(); } gfxoutput_init(); /* Initialize serial traps. */ if (serial_init(scpu64_serial_traps) < 0) { return -1; } serial_trap_init(0xa4); serial_iec_bus_init(); /* Initialize RS232 handler. */ rs232drv_init(); c64_rsuser_init(); /* Initialize print devices. */ printer_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); disk_image_init(); resources_get_int("AutostartDelay", &delay); if (delay == 0) { delay = 3; /* default */ } /* Initialize autostart. */ autostart_init((CLOCK)(delay * SCPU64_PAL_RFSH_PER_SEC * SCPU64_PAL_CYCLES_PER_RFSH), 1, 0xcc, 0xd1, 0xd3, 0xd5); #ifdef USE_BEOS_UI /* Pre-init C64-specific parts of the menus before vicii_init() creates a canvas window with a menubar at the top. This could also be used by other ports, e.g. GTK+... */ if (!console_mode) { scpu64ui_init_early(); } #endif if (vicii_init(VICII_STANDARD) == NULL && !video_disabled_mode) { return -1; } scpu64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (c64_kbd_init() < 0) { return -1; } #endif c64keyboard_init(); scpu64_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); /* Initialize cartridge based sound chips */ cartridge_sound_chip_init(); /* Initialize userport based sound chips */ userport_dac_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific I/O */ c64io_init(); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { scpu64ui_init(); } /* Initialize glue logic. */ scpu64_glue_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #ifdef HAVE_LIGHTPEN /* Initialize lightpen support and register VICII callbacks */ lightpen_init(); lightpen_register_timing_callback(vicii_lightpen_timing, 0); lightpen_register_trigger_callback(vicii_trigger_light_pen); #endif #endif c64iec_init(); c64fastiec_init(); cartridge_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("VICIIFullscreen", 1); } } #endif return 0; }
/* C64-specific initialization. */ int machine_specific_init(void) { int delay; c64_log = log_open("C64"); if (mem_load() < 0) { return -1; } /* Setup trap handling. */ traps_init(); /* Initialize serial traps. */ if (serial_init(c64_serial_traps) < 0) { return -1; } serial_trap_init(0xa4); serial_iec_bus_init(); /* Initialize RS232 handler. */ rs232drv_init(); c64_rsuser_init(); /* Initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); resources_get_int("AutostartDelay", &delay); if (delay == 0) { delay = 3; /* default */ } /* Initialize autostart. */ autostart_init((CLOCK)(delay * C64_PAL_RFSH_PER_SEC * C64_PAL_CYCLES_PER_RFSH), 1, 0xcc, 0xd1, 0xd3, 0xd5); if (vicii_init(VICII_STANDARD) == NULL && !video_disabled_mode) { return -1; } c64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (c64_kbd_init() < 0) { return -1; } #endif c64keyboard_init(); c64_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); /* Initialize cartridge based sound chips */ cartridge_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific I/O */ c64io_init(); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { if (machine_class == VICE_MACHINE_C64SC) { c64scui_init(); } else { c64ui_init(); } } /* Initialize glue logic. */ c64_glue_init(); /* Initialize the +60K. */ plus60k_init(); /* Initialize the +256K. */ plus256k_init(); /* Initialize the C64 256K. */ c64_256k_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); /* Initialize lightpen support and register VICII callbacks */ lightpen_init(); lightpen_register_timing_callback(vicii_lightpen_timing, 0); lightpen_register_trigger_callback(vicii_trigger_light_pen); #endif c64iec_init(); c64fastiec_init(); cartridge_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("VICIIFullscreen", 1); } } #endif return 0; }
/* C64-specific initialization. */ int machine_specific_init(void) { #ifdef USE_SDLUI if (console_mode) { video_disabled_mode = 1; } #else video_disabled_mode = 1; #endif c64_log = log_open("C64"); if (mem_load() < 0) { return -1; } if (vicii_init(VICII_STANDARD) == NULL && !video_disabled_mode) { return -1; } c64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); c64_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific I/O */ c64io_init(); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { vsid_ui_init(); } /* Initialize glue logic. */ c64_glue_init(); machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("VICIIFullscreen", 1); } } #endif return 0; }
/* Plus4-specific initialization. */ int machine_specific_init(void) { plus4_log = log_open("Plus4"); if (mem_load() < 0) return -1; /* Setup trap handling. */ traps_init(); /* Initialize serial traps. */ if (serial_init(plus4_serial_traps) < 0) return -1; serial_trap_init(0xa8); serial_iec_bus_init(); rs232drv_init(); /* Initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); /* Initialize autostart. */ autostart_init((CLOCK)(2 * PLUS4_PAL_RFSH_PER_SEC * PLUS4_PAL_CYCLES_PER_RFSH), 0, 0, 0xc8, 0xca, -40); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); if (ted_init() == NULL) return -1; acia_init(); #ifndef COMMON_KBD if (plus4_kbd_init() < 0) return -1; #endif plus4_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize keyboard buffer. */ kbdbuf_init(1319, 239, 8, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); plus4ui_init(); cs256k_init(); h256k_init(); plus4iec_init(); machine_drive_stub(); return 0; }
/* PET-specific initialization. */ int machine_specific_init(void) { pet_log = log_open("PET"); pet_init_ok = 1; /* used in petmodel_set() */ event_init(); /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) { return -1; } if (!video_disabled_mode) { joystick_init(); } gfxoutput_init(); log_message(pet_log, "Initializing IEEE488 bus..."); rs232drv_init(); /* initialize print devices */ printer_init(); #ifdef USE_BEOS_UI /* Pre-init PET-specific parts of the menus before crtc_init() creates a canvas window with a menubar at the top. This could also be used by other ports, e.g. GTK+... */ petui_init_early(); #endif /* Initialize the CRTC emulation. */ if (crtc_init() == NULL) { return -1; } crtc_set_retrace_type(petres.crtc); crtc_set_retrace_callback(pet_crtc_signal); pet_crtc_set_screen(); petcolour_init(); via_init(machine_context.via); pia1_init(); pia2_init(); acia1_init(); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (pet_kbd_init() < 0) { return -1; } #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); disk_image_init(); pet_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize the sidcart first */ sidcart_sound_chip_init(); /* Initialize native sound chip */ pet_sound_chip_init(); /* Initialize userport based sound chips */ userport_dac_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. FIXME: Is this correct? */ /* moved to mem_load() because it's model specific... AF 30jun1998 kbdbuf_init(631, 198, 10, PET_PAL_CYCLES_PER_RFSH * PET_PAL_RFSH_PER_SEC); */ /* Initialize the PET-specific part of the UI. */ petui_init(); /* Initialize the PET Ram and Expansion Unit. */ petreu_init(); /* Initialize the PET Double-W Hi-Res graphics card. */ petdww_init(); /* Initialize the PET Hi-Res Emulator graphics card. */ pethre_init(); petiec_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #endif machine_drive_stub(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("CRTCFullscreen", 1); } } #endif return 0; }
/* CBM-II-specific initialization. */ int machine_specific_init(void) { cbm2_log = log_open("CBM2"); cbm2_init_ok = 1; /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) return -1; rs232drv_init(); /* initialize print devices */ printer_init(); if (!cbm2_isC500) { if (crtc_init() == NULL) return -1; crtc_set_retrace_callback(cbm2_crtc_signal); crtc_set_retrace_type(0); crtc_set_hw_options(1, 0x7ff, 0x1000, 512, -0x2000); } else { if (vicii_init(VICII_STANDARD) == NULL) return -1; /* c500_set_phi1_bank(15); c500_set_phi2_bank(15); */ c500_powerline_clk_alarm = alarm_new(maincpu_alarm_context, "C500PowerlineClk", c500_powerline_clk_alarm_handler, NULL); clk_guard_add_callback(maincpu_clk_guard, c500_powerline_clk_overflow_callback, NULL); machine_timing.cycles_per_sec = C500_PAL_CYCLES_PER_SEC; machine_timing.rfsh_per_sec = C500_PAL_RFSH_PER_SEC; machine_timing.cycles_per_rfsh = C500_PAL_CYCLES_PER_RFSH; } cia1_init(machine_context.cia1); acia1_init(); tpi1_init(machine_context.tpi1); tpi2_init(machine_context.tpi2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (cbm2_kbd_init() < 0) return -1; #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); cbm2_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize the CBM-II-specific part of the UI. */ cbm2ui_init(); cbm2iec_init(); machine_drive_stub(); return 0; }