int main(void) { FILE* file = fopen("d:/vm/code.bin", "rb"); fread(code, sizeof(code), 1, file); fclose(file); vmInit(); vmStart(1); // vmInit(); for (;;) { int status; status = vmGetStatus(); if (status != VMSTATUS_RUNNING) { printf("status = %d\n", status); return 1; } _sleep(VM_STEP); vmStep(VM_STEP); } return 0; }
void startVM(int8_t start) { if (start) { int i; for (i = REG_RAM0; i < REG_RAM0 + REG_RAM_CNT; i++) setReg(i, 0); } if (start && !checkCode()) { if (getCodeLen() == 0) vmSetStatus(VMSTATUS_STOPPED); else vmSetStatus(VMSTATUS_WRONG_CHECKSUM); return; } vmStart(start); }
void VBoxTrayIcon::showSubMenu () { if (!mActive) return; UIVMItem* pItem = NULL; QMenu *pMenu = NULL; QVariant vID; if ((pMenu = qobject_cast<QMenu*>(sender()))) { vID = pMenu->menuAction()->data(); if (vID.canConvert<QString>() && mVMModel) pItem = mVMModel->itemById (qvariant_cast<QString>(vID)); } mVmConfigAction->setData (vID); mVmDeleteAction->setData (vID); mVmDiscardAction->setData (vID); mVmStartAction->setData (vID); mVmPauseAction->setData (vID); mVmShowLogsAction->setData (vID); if (pItem && pItem->accessible()) { /* look at vmListViewCurrentChanged() */ CMachine m = pItem->machine(); KMachineState s = pItem->machineState(); bool running = pItem->sessionState() != KSessionState_Unlocked; bool modifyEnabled = !running && s != KMachineState_Saved; /* Settings */ mVmConfigAction->setEnabled (modifyEnabled); /* Delete */ mVmDeleteAction->setEnabled (!running); /* Discard */ mVmDiscardAction->setEnabled (s == KMachineState_Saved && !running); /* Change the Start button text accordingly */ if ( s == KMachineState_PoweredOff || s == KMachineState_Saved || s == KMachineState_Teleported || s == KMachineState_Aborted ) { mVmStartAction->setText (UIVMListView::tr ("S&tart")); mVmStartAction->setStatusTip ( UIVMListView::tr ("Start the selected virtual machine")); mVmStartAction->setEnabled (!running); } else { mVmStartAction->setText (UIVMListView::tr ("S&how")); mVmStartAction->setStatusTip ( UIVMListView::tr ("Switch to the window of the selected virtual machine")); mVmStartAction->setEnabled (pItem->canSwitchTo()); } /* Change the Pause/Resume button text accordingly */ mVmPauseAction->setEnabled ( s == KMachineState_Running || s == KMachineState_Teleporting || s == KMachineState_LiveSnapshotting || s == KMachineState_Paused || s == KMachineState_TeleportingPausedVM ); if ( s == KMachineState_Paused || s == KMachineState_TeleportingPausedVM /*?*/ ) { mVmPauseAction->setText (UIVMListView::tr ("R&esume")); mVmPauseAction->setStatusTip ( UIVMListView::tr ("Resume the execution of the virtual machine")); mVmPauseAction->blockSignals (true); mVmPauseAction->setChecked (true); mVmPauseAction->blockSignals (false); } else { mVmPauseAction->setText (UIVMListView::tr ("&Pause")); mVmPauseAction->setStatusTip ( UIVMListView::tr ("Suspend the execution of the virtual machine")); mVmPauseAction->blockSignals (true); mVmPauseAction->setChecked (false); mVmPauseAction->blockSignals (false); } mVmShowLogsAction->setEnabled (true); /* Disconnect old slot which maybe was connected from another selected sub menu. */ disconnect (mVmConfigAction, SIGNAL (triggered()), this, SLOT (vmSettings())); disconnect (mVmDeleteAction, SIGNAL (triggered()), this, SLOT (vmDelete())); disconnect (mVmDiscardAction, SIGNAL (triggered()), this, SLOT (vmDiscard())); disconnect (mVmStartAction, SIGNAL (triggered()), this, SLOT (vmStart())); disconnect (mVmPauseAction, SIGNAL (toggled (bool)), this, SLOT (vmPause (bool))); disconnect (mVmShowLogsAction, SIGNAL (triggered()), this, SLOT (vmShowLogs())); /* Connect new sub menu with slots. */ connect (mVmConfigAction, SIGNAL (triggered()), this, SLOT (vmSettings())); connect (mVmDeleteAction, SIGNAL (triggered()), this, SLOT (vmDelete())); connect (mVmDiscardAction, SIGNAL (triggered()), this, SLOT (vmDiscard())); connect (mVmStartAction, SIGNAL (triggered()), this, SLOT (vmStart())); connect (mVmPauseAction, SIGNAL (toggled (bool)), this, SLOT (vmPause (bool))); connect (mVmShowLogsAction, SIGNAL (triggered()), this, SLOT (vmShowLogs())); }