void Vm::execMain(const SCodeObject &c, int argc, char *args[]) { auto fnob = c->getValue("main:"); assert(fnob != nullptr && "We need a main function!"); // make a list out of the char array // push the args into the vm stack auto arglist = ListModule::fromStringArray(argc, args); VM_PUSH(arglist); auto fn = std::dynamic_pointer_cast<FunctionObject>(fnob); SCodeObject cc = fn->getCodeObject(); execCode(cc); }
int UsbBootTarget(int resetpc,int bootflag,int vector) { execCode(resetpc); return 1; #if 0 cmdBuf cmd; // int *cmdvect= (int*) &cmd.data; memset(&cmd,0,sizeof(cmdBuf)); cmd.cmd = HIDASP_JMP; cmd.adr = resetpc; // 実行開始番地. cmd.size = bootflag; // 1ならUSBバスをリセットする. // *cmdvect = vector; // FM3のみで必要: 仮想vector tableのアドレス. if( bootflag ) { // 別のファームを起動させた場合は、戻ってこない. reboot_done = 1; } if( QueryAVR(&cmd) == 0) return 0; //失敗. return 1; #endif }