| Ассемблер AVR C++ Pascal | Все листинги Мои листинги Добавить листинг |
VM.c
Автор DI HALT
Язык: C++
Опубликовано 27 июля 2010 года в 22:56
Просмотров 207
Модуль с подключаемой либо виртуальной машины
#include <VM.h> #include <VM_PROG.h> static u08 VM_RAM[256]; static u08 VM_PC[10]; void VM_Forward(void) { LED_PORT ^=1<<LED3; VM_PC[0]++; SetTask(VM); } void VM_Back(void) { LED_PORT ^=1<<LED3; VM_PC[0]++; SetTask(VM); } void VM_Stop(void) { LED_PORT ^=1<<LED3; VM_PC[0]++; SetTask(VM); } void VM_Delay(void) { u16 delay; u08 *OneByte; OneByte = (u08 *)&delay; *OneByte = VM_PGM[++VM_PC[0]]; OneByte++; *OneByte = VM_PGM[++VM_PC[0]]; VM_PC[0]++; SetTimerTask(VM,delay); } void VM_OFF(void) { InitVM(); } //VM Task Table ========================================================== static TPTR VM_FUNC[] PROGMEM = { &VM_OFF, //0 &VM_Back, //1 &VM_Forward, //2 &VM_Delay, //3 &VM_Stop //4 }; //VM Dispatcher void VM(void) // Виртуальная машина { SetTask((void*)pgm_read_word_near(VM_FUNC+VM_PGM[VM_PC[0]])); } // VM initializations ==================================================== void InitVM(void) { u08 i; for(i=0;i!=10;i++) { VM_PC[i]=0; } }


