TNekoDriver::TNekoDriver() : fEmulatorThread(NULL) , fNorBuffer(NULL) , fBROMBuffer(NULL) , fFlashUpdated(false) { // Do initialization that must be repeated for a restart restart = 0; fBROMBuffer = (char*)malloc(512 * 0x8000); // 32K * 256 * 2 for (int i = 0; i < 256; i++) { volume0array[i] = (unsigned char*)fBROMBuffer + i * 0x8000; volume1array[i] = volume0array[i] + 256 * 0x8000; } fNorBuffer = (char*)malloc(16 * 0x8000); // 32K * 16 for (int i = 0; i < 16; i++) { norbankheader[i] = (unsigned char*)fNorBuffer + i * 0x8000; } // DebugInitialize(); MemInitialize(); // TermInitialize(); // FrameCreateWindow(); // enter the main message loop // EnterMessageLoop(); // fEmulatorThread->start(); }
/******************************************************************** WcaGlobalInitialize() - initializes the Wca library, should be called once per custom action Dll during DllMain on DLL_PROCESS_ATTACH ********************************************************************/ extern "C" void WIXAPI WcaGlobalInitialize( __in HINSTANCE hInst ) { g_hInstCADLL = hInst; MemInitialize(); AssertSetModule(g_hInstCADLL); AssertSetDisplayFunction(WcaDisplayAssert); }
//=========================================================================== int APIENTRY WinMain (HINSTANCE passinstance, HINSTANCE previnstance, LPSTR lpCmdLine, int nCmdShow) { #ifdef CPUDEBUG char nomearq[MAX_PATH]; #endif char imagefilename[MAX_PATH]; // DO ONE-TIME INITIALIZATION instance = passinstance; // Initialize COM CoInitialize( NULL ); GdiSetBatchLimit(512); GetProgramDirectory(); RegisterExtensions(); FrameRegisterClass(); Inicializar1(); strcpy(imagefilename, progdir); strcat(imagefilename, NOMEARQTKDOS); if (lpCmdLine[0] != '\0') { CharLowerBuff(&lpCmdLine[strlen(lpCmdLine)-3],3); strcpy(imagefilename, lpCmdLine); } #ifdef CPUDEBUG strcpy(nomearq, progdir); strcat(nomearq, "debugCPU.txt"); DeleteFile(nomearq); arquivocpu = fopen(nomearq, "wb"); #endif do { // DO INITIALIZATION THAT MUST BE REPEATED FOR A RESTART restart = 0; mode = MODE_LOGO; LoadConfiguration(); DebugInitialize(); JoyInitialize(); MemInitialize(); VideoInitialize(); Timer_InitTimer(); FrameCreateWindow(); MemAtualizaSlotAux(); if (imagefilename[0] != '\0') { DiskInsert(0, imagefilename, FALSE, FALSE); imagefilename[0] = '\0'; } // ENTER THE MAIN MESSAGE LOOP EnterMessageLoop(); } while (restart); #ifdef CPUDEBUG //CloseHandle(arquivocpu); fclose(arquivocpu); #endif // Release COM CoUninitialize(); return 0; }
BOOLEAN EmulatorInitialize(HANDLE ConsoleInput, HANDLE ConsoleOutput) { USHORT i; /* Initialize memory */ if (!MemInitialize()) { wprintf(L"Memory initialization failed.\n"); return FALSE; } /* Initialize I/O ports */ /* Initialize RAM */ /* Initialize the CPU */ /* Initialize the internal clock */ if (!ClockInitialize()) { wprintf(L"FATAL: Failed to initialize the clock\n"); EmulatorCleanup(); return FALSE; } /* Initialize the CPU */ CpuInitialize(); /* Initialize DMA */ DmaInitialize(); /* Initialize PIC, PIT, CMOS, PC Speaker and PS/2 */ PicInitialize(); PitInitialize(); PitSetOutFunction(0, NULL, PitChan0Out); PitSetOutFunction(1, NULL, PitChan1Out); PitSetOutFunction(2, NULL, PitChan2Out); CmosInitialize(); SpeakerInitialize(); PpiInitialize(); PS2Initialize(); /* Initialize the keyboard and mouse and connect them to their PS/2 ports */ KeyboardInit(0); MouseInit(1); /**************** ATTACH INPUT WITH CONSOLE *****************/ /* Create the task event */ VdmTaskEvent = CreateEventW(NULL, TRUE, FALSE, NULL); ASSERT(VdmTaskEvent != NULL); /* Start the input thread */ InputThread = CreateThread(NULL, 0, &ConsoleEventThread, ConsoleInput, 0, NULL); if (InputThread == NULL) { wprintf(L"FATAL: Failed to create the console input thread.\n"); EmulatorCleanup(); return FALSE; } ResumeEventThread(); /************************************************************/ /* Initialize the VGA */ if (!VgaInitialize(ConsoleOutput)) { wprintf(L"FATAL: Failed to initialize VGA support.\n"); EmulatorCleanup(); return FALSE; } /* Initialize the disk controller */ if (!DiskCtrlInitialize()) { wprintf(L"FATAL: Failed to completely initialize the disk controller.\n"); EmulatorCleanup(); return FALSE; } /* Mount the available floppy disks */ for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i) { if (GlobalSettings.FloppyDisks[i].Length != 0 && GlobalSettings.FloppyDisks[i].Buffer && GlobalSettings.FloppyDisks[i].Buffer != '\0') { if (!MountDisk(FLOPPY_DISK, i, GlobalSettings.FloppyDisks[i].Buffer, FALSE)) { DPRINT1("Failed to mount floppy disk file '%wZ'.\n", &GlobalSettings.FloppyDisks[i]); RtlFreeUnicodeString(&GlobalSettings.FloppyDisks[i]); RtlInitEmptyUnicodeString(&GlobalSettings.FloppyDisks[i], NULL, 0); } } } /* * Mount the available hard disks. Contrary to floppies, failing * mounting a hard disk is considered as an unrecoverable error. */ for (i = 0; i < ARRAYSIZE(GlobalSettings.HardDisks); ++i) { if (GlobalSettings.HardDisks[i].Length != 0 && GlobalSettings.HardDisks[i].Buffer && GlobalSettings.HardDisks[i].Buffer != L'\0') { if (!MountDisk(HARD_DISK, i, GlobalSettings.HardDisks[i].Buffer, FALSE)) { wprintf(L"FATAL: Failed to mount hard disk file '%wZ'.\n", &GlobalSettings.HardDisks[i]); EmulatorCleanup(); return FALSE; } } } /* Refresh the menu state */ UpdateVdmMenuDisks(); /* Initialize the software callback system and register the emulator BOPs */ InitializeInt32(); RegisterBop(BOP_DEBUGGER , EmulatorDebugBreakBop); // RegisterBop(BOP_UNSIMULATE, CpuUnsimulateBop); /* Initialize VDD support */ VDDSupInitialize(); return TRUE; }