//=========================================================================== void LoadConfiguration() { #define LOAD(a,b) RegLoadValue(CONFIG,a,1,(unsigned long *)b); LOAD(EMUJOY, &joytype); LOAD(EMUSOM, &soundtype); LOAD(EMUSLOT, &NewSlotAux); LOAD(EMUVELCPU, &speed); LOAD(EMUDISCO, (DWORD *)&enhancedisk); LOAD(EMUVIDEO, &videotype); LOAD(EMUVIDEOM, &monochrome); LOAD(EMUSCANLINES, &ScanLines); // Scan Lines LOAD(EMUIMPRESSORA, &ImpressoraPorta); LOAD(EMUCOLARRAPIDO, &ColarRapido); #undef LOAD SetCurrentCLK6502(); }
/*LRESULT CALLBACK FrameWndProc ( HWND window, UINT message, WPARAM wparam, LPARAM lparam)*/ void FrameDispatchMessage(SDL_Event * e) // process given SDL event { int mysym = e->key.keysym.sym; // keycode int mymod = e->key.keysym.mod; // some special keys flags int x,y; // used for mouse cursor position switch (e->type) //type of SDL event { case SDL_ACTIVEEVENT: g_bAppActive = e->active.gain; // if gain==1, app is active break; case SDL_KEYDOWN: // printf("keyb %d is down!\n", mysym); if(mysym >= SDLK_0 && mysym <= SDLK_9 && mymod & KMOD_CTRL) { FrameQuickState(mysym - SDLK_0, mymod); break; } if(mysym < 128 && mysym != SDLK_PAUSE) { // it should be ASCII code? if ((g_nAppMode == MODE_RUNNING) || (g_nAppMode == MODE_LOGO) || ((g_nAppMode == MODE_STEPPING) && (mysym != SDLK_ESCAPE))) { KeybQueueKeypress(mysym,ASCII); } else if ((g_nAppMode == MODE_DEBUG) || (g_nAppMode == MODE_STEPPING)) { DebuggerInputConsoleChar(mysym); } break; } else {// this is function key? // KeybUpdateCtrlShiftStatus(); // if ctrl or shift or alt was pressed?------? if ((mysym >= SDLK_F1) && (mysym <= SDLK_F12) && (buttondown == -1)) { // SetUsingCursor(0); -- for what purpose??? buttondown = mysym - SDLK_F1; // special function keys processing /* if (fullscreen && (buttonover != -1)) { if (buttonover != buttondown) EraseButton(buttonover); buttonover = -1; } DrawButton((HDC)0,buttondown);*/ } else if (mysym == SDLK_KP_PLUS) // Gray + - speed up the emulator! { g_dwSpeed = g_dwSpeed + 2; if(g_dwSpeed > SPEED_MAX) g_dwSpeed = SPEED_MAX; // no Maximum tresspassing! printf("Now speed=%d\n", (int)g_dwSpeed); SetCurrentCLK6502(); } else if (mysym == SDLK_KP_MINUS) // Gray + - speed up the emulator! { if(g_dwSpeed > SPEED_MIN) g_dwSpeed = g_dwSpeed - 1;// dw is unsigned value! //if(g_dwSpeed <= SPEED_MIN) g_dwSpeed = SPEED_MIN; // no Minimum tresspassing! printf("Now speed=%d\n", (int)g_dwSpeed); SetCurrentCLK6502(); } else if (mysym == SDLK_KP_MULTIPLY) // Gray * - normal speed! { g_dwSpeed = 10;// dw is unsigned value! printf("Now speed=%d\n", (int)g_dwSpeed); SetCurrentCLK6502(); } else if (mysym == SDLK_CAPSLOCK) // CapsLock { KeybToggleCapsLock(); } else if (mysym == SDLK_PAUSE) // Pause - let us pause all things for the best { SetUsingCursor(0); // release cursor? switch (g_nAppMode) { case MODE_RUNNING: // go in pause g_nAppMode = MODE_PAUSED; SoundCore_SetFade(FADE_OUT); // fade out sound?************** break; case MODE_PAUSED: // go to the normal mode? g_nAppMode = MODE_RUNNING; SoundCore_SetFade(FADE_IN); // fade in sound?*************** break; case MODE_STEPPING: DebuggerInputConsoleChar( DEBUG_EXIT_KEY ); break; } DrawStatusArea(/*(HDC)0,*/DRAW_TITLE); if ((g_nAppMode != MODE_LOGO) && (g_nAppMode != MODE_DEBUG)) VideoRedrawScreen(); g_bResetTiming = true; } else if (mysym == SDLK_SCROLLOCK) // SCROLL LOCK pressed { g_bScrollLock_FullSpeed = !g_bScrollLock_FullSpeed; // turn on/off full speed? } else if ((g_nAppMode == MODE_RUNNING) || (g_nAppMode == MODE_LOGO) || (g_nAppMode == MODE_STEPPING)) { // Note about Alt Gr (Right-Alt): // . WM_KEYDOWN[Left-Control], then: // . WM_KEYDOWN[Right-Alt] BOOL autorep = 0; //previous key was pressed? 30bit of lparam BOOL extended = (mysym >= 273); // 24bit of lparam - is an extended key, what is it??? if ((!JoyProcessKey(mysym ,extended, 1, autorep)) && (g_nAppMode != MODE_LOGO)) KeybQueueKeypress(mysym, NOT_ASCII); } else if (g_nAppMode == MODE_DEBUG) DebuggerProcessKey(mysym); // someone should realize debugger for Linapple!?--bb /* if (wparam == VK_F10) { SetUsingCursor(0); return 0; } break;*/ }//else break; case SDL_KEYUP: // int mysym = e->key.keysym.sym; // keycode if ((mysym >= SDLK_F1) && (mysym <= SDLK_F12) && (buttondown == mysym-SDLK_F1)) { buttondown = -1; // if (fullscreen) // EraseButton(wparam-VK_F1); // else // DrawButton((HDC)0,wparam-VK_F1); ProcessButtonClick(mysym-SDLK_F1, mymod); // process function keys - special events } else { // mysym >= 300 (or 273????)- check for extended key, what is it EXACTLY??? JoyProcessKey(mysym,(mysym >= 273), 0, 0); } break; case SDL_MOUSEBUTTONDOWN: if(e->button.button == SDL_BUTTON_LEFT) {// left mouse button was pressed if (buttondown == -1) { x = e->button.x; // mouse cursor coordinates y = e->button.y; if (usingcursor) // we use mouse cursor for our special needs? { KeybUpdateCtrlShiftStatus(); // if either of ALT, SHIFT or CTRL is pressed if (g_bShiftKey | g_bCtrlKey) { SetUsingCursor(0); // release mouse cursor for user } else { if (sg_Mouse.Active()) sg_Mouse.SetButton(BUTTON0, BUTTON_DOWN); else JoySetButton(BUTTON0, BUTTON_DOWN); } }// we do not use mouse else if ( (/*(x < buttonx) &&*/ JoyUsingMouse() && ((g_nAppMode == MODE_RUNNING) || (g_nAppMode == MODE_STEPPING))) || (sg_Mouse.Active()) ) { SetUsingCursor(1); // capture cursor } DebuggerMouseClick( x, y ); } //RelayEvent(WM_LBUTTONDOWN,wparam,lparam); }//if left mouse button down else if(e->button.button == SDL_BUTTON_RIGHT) { if (usingcursor) { if (sg_Mouse.Active()) sg_Mouse.SetButton(BUTTON1, BUTTON_DOWN); else JoySetButton(BUTTON1, BUTTON_DOWN); } } break; // end of MOSEBUTTONDOWN event case SDL_MOUSEBUTTONUP: if (e->button.button == SDL_BUTTON_LEFT) {// left mouse button was released if (usingcursor) { if (sg_Mouse.Active()) sg_Mouse.SetButton(BUTTON0, BUTTON_UP); else JoySetButton(BUTTON0, BUTTON_UP); } // RelayEvent(WM_LBUTTONUP,wparam,lparam); } else if(e->button.button == SDL_BUTTON_RIGHT) { if (usingcursor) { if (sg_Mouse.Active()) sg_Mouse.SetButton(BUTTON1, BUTTON_UP); else JoySetButton(BUTTON1, BUTTON_UP); } } break; // MOUSEBUTTONUP event case SDL_MOUSEMOTION: x = e->motion.x;// get relative coordinates of mouse cursor y = e->motion.y; if (usingcursor) { // DrawCrosshairs(x,y); I do not like those crosshairs, but... --bb if (sg_Mouse.Active()) sg_Mouse.SetPosition(x, VIEWPORTCX-4, y, VIEWPORTCY-4); else JoySetPosition(x, VIEWPORTCX-4, y, VIEWPORTCY-4); } // RelayEvent(WM_MOUSEMOVE,wparam,lparam); break; case SDL_USEREVENT: if (e->user.code == 1) // should do restart? ProcessButtonClick(BTN_RUN, 0); break; }//switch // return DefWindowProc(window,message,wparam,lparam); }
//Reads configuration from the registry entries void LoadConfiguration(void) { DWORD dwComputerType; if (REGLOAD(TEXT(REGVALUE_APPLE2_TYPE), &dwComputerType)) { if ((dwComputerType >= A2TYPE_MAX) || (dwComputerType >= A2TYPE_UNDEFINED && dwComputerType < A2TYPE_CLONE)) dwComputerType = A2TYPE_APPLE2EENHANCED; g_Apple2Type = (eApple2Type) dwComputerType; } else // Support older AppleWin registry entries { REGLOAD(TEXT(REGVALUE_OLD_APPLE2_TYPE), &dwComputerType); switch (dwComputerType) { // NB. No A2TYPE_APPLE2E (this is correct) case 0: g_Apple2Type = A2TYPE_APPLE2; case 1: g_Apple2Type = A2TYPE_APPLE2PLUS; case 2: g_Apple2Type = A2TYPE_APPLE2EENHANCED; default: g_Apple2Type = A2TYPE_APPLE2EENHANCED; } } switch (g_Apple2Type) //Sets the character set for the Apple model/clone { case A2TYPE_APPLE2: g_nCharsetType = 0; break; case A2TYPE_APPLE2PLUS: g_nCharsetType = 0; break; case A2TYPE_APPLE2E: g_nCharsetType = 0; break; case A2TYPE_APPLE2EENHANCED:g_nCharsetType = 0; break; case A2TYPE_PRAVETS82: g_nCharsetType = 1; break; case A2TYPE_PRAVETS8A: g_nCharsetType = 2; break; case A2TYPE_PRAVETS8M: g_nCharsetType = 3; break; //This charset has a very small difference with the PRAVETS82 one an probably has some misplaced characters. Still the Pravets82 charset is used, because setting charset to 3 results in some problems. } // if (!REGLOAD(TEXT(REGVALUE_JOYSTICK0_EMU_TYPE), &joytype[JN_JOYSTICK0])) LoadConfigOldJoystick(JN_JOYSTICK0); if (!REGLOAD(TEXT(REGVALUE_JOYSTICK1_EMU_TYPE), &joytype[JN_JOYSTICK1])) LoadConfigOldJoystick(JN_JOYSTICK1); REGLOAD(TEXT("Sound Emulation") ,&soundtype); char aySerialPortName[ CSuperSerialCard::SIZEOF_SERIALCHOICE_ITEM ]; if (RegLoadString( TEXT("Configuration"), TEXT(REGVALUE_SERIAL_PORT_NAME), TRUE, aySerialPortName, sizeof(aySerialPortName) ) ) { sg_SSC.SetSerialPortName(aySerialPortName); } REGLOAD(TEXT(REGVALUE_EMULATION_SPEED) ,&g_dwSpeed); REGLOAD(TEXT(REGVALUE_ENHANCE_DISK_SPEED),(DWORD *)&enhancedisk); Config_Load_Video(); REGLOAD(TEXT("Uthernet Active") ,(DWORD *)&tfe_enabled); SetCurrentCLK6502(); // DWORD dwTmp; if(REGLOAD(TEXT(REGVALUE_THE_FREEZES_F8_ROM), &dwTmp)) sg_PropertySheet.SetTheFreezesF8Rom(dwTmp); if(REGLOAD(TEXT(REGVALUE_SPKR_VOLUME), &dwTmp)) SpkrSetVolume(dwTmp, sg_PropertySheet.GetVolumeMax()); if(REGLOAD(TEXT(REGVALUE_MB_VOLUME), &dwTmp)) MB_SetVolume(dwTmp, sg_PropertySheet.GetVolumeMax()); if(REGLOAD(TEXT(REGVALUE_SAVE_STATE_ON_EXIT), &dwTmp)) g_bSaveStateOnExit = dwTmp ? true : false; if(REGLOAD(TEXT(REGVALUE_DUMP_TO_PRINTER), &dwTmp)) g_bDumpToPrinter = dwTmp ? true : false; if(REGLOAD(TEXT(REGVALUE_CONVERT_ENCODING), &dwTmp)) g_bConvertEncoding = dwTmp ? true : false; if(REGLOAD(TEXT(REGVALUE_FILTER_UNPRINTABLE), &dwTmp)) g_bFilterUnprintable = dwTmp ? true : false; if(REGLOAD(TEXT(REGVALUE_PRINTER_APPEND), &dwTmp)) g_bPrinterAppend = dwTmp ? true : false; if(REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp)) HD_SetEnabled(dwTmp ? true : false); char szHDVPathname[MAX_PATH] = {0}; if(RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_1), 1, szHDVPathname, sizeof(szHDVPathname))) HD_InsertDisk(HARDDISK_1, szHDVPathname); if(RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_2), 1, szHDVPathname, sizeof(szHDVPathname))) HD_InsertDisk(HARDDISK_2, szHDVPathname); if(REGLOAD(TEXT(REGVALUE_PDL_XTRIM), &dwTmp)) JoySetTrim((short)dwTmp, true); if(REGLOAD(TEXT(REGVALUE_PDL_YTRIM), &dwTmp)) JoySetTrim((short)dwTmp, false); if(REGLOAD(TEXT(REGVALUE_SCROLLLOCK_TOGGLE), &dwTmp)) sg_PropertySheet.SetScrollLockToggle(dwTmp); if(REGLOAD(TEXT(REGVALUE_CURSOR_CONTROL), &dwTmp)) sg_PropertySheet.SetJoystickCursorControl(dwTmp); if(REGLOAD(TEXT(REGVALUE_AUTOFIRE), &dwTmp)) sg_PropertySheet.SetAutofire(dwTmp); if(REGLOAD(TEXT(REGVALUE_CENTERING_CONTROL), &dwTmp)) sg_PropertySheet.SetJoystickCenteringControl(dwTmp); if(REGLOAD(TEXT(REGVALUE_MOUSE_CROSSHAIR), &dwTmp)) sg_PropertySheet.SetMouseShowCrosshair(dwTmp); if(REGLOAD(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW), &dwTmp)) sg_PropertySheet.SetMouseRestrictToWindow(dwTmp); if(REGLOAD(TEXT(REGVALUE_SLOT4), &dwTmp)) g_Slot4 = (SS_CARDTYPE) dwTmp; if(REGLOAD(TEXT(REGVALUE_SLOT5), &dwTmp)) g_Slot5 = (SS_CARDTYPE) dwTmp; if (g_Slot4 == CT_MockingboardC || g_Slot4 == CT_Phasor) MB_SetSoundcardType(g_Slot4); else MB_SetSoundcardType(CT_Empty); // char szFilename[MAX_PATH] = {0}; // Current/Starting Dir is the "root" of where the user keeps his disk images RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_START_DIR), 1, szFilename, MAX_PATH); if (szFilename[0] == 0) GetCurrentDirectory(sizeof(szFilename), szFilename); SetCurrentImageDir(szFilename); Disk_LoadLastDiskImage(DRIVE_1); Disk_LoadLastDiskImage(DRIVE_2); // szFilename[0] = 0; RegLoadString(TEXT(REG_CONFIG),TEXT(REGVALUE_SAVESTATE_FILENAME),1,szFilename,sizeof(szFilename)); Snapshot_SetFilename(szFilename); // If not in Registry than default will be used (ie. g_sCurrentDir + default filename) szFilename[0] = 0; RegLoadString(TEXT(REG_CONFIG),TEXT(REGVALUE_PRINTER_FILENAME),1,szFilename,sizeof(szFilename)); Printer_SetFilename(szFilename); // If not in Registry than default will be used dwTmp = 10; REGLOAD(TEXT(REGVALUE_PRINTER_IDLE_LIMIT), &dwTmp); Printer_SetIdleLimit(dwTmp); char szUthernetInt[MAX_PATH] = {0}; RegLoadString(TEXT(REG_CONFIG),TEXT("Uthernet Interface"),1,szUthernetInt,MAX_PATH); update_tfe_interface(szUthernetInt,NULL); if (REGLOAD(TEXT(REGVALUE_WINDOW_SCALE), &dwTmp)) SetViewportScale(dwTmp); if (REGLOAD(TEXT(REGVALUE_CONFIRM_REBOOT), &dwTmp)) g_bConfirmReboot = dwTmp; }