#define SCR_WIDTH 80 #define SCR_HEIGHT 23 #define SCR_CTRL 0x3D4 #define SCR_DATA 0x3D5 #define SCR_BLACK 0x0 #define SCR_BLUE 0x1 #define SCR_GREEN 0x2 #define SCR_CYAN 0x3 #define SCR_RED 0x4 // todo... # define SCR_WHITE 0xf void print_char(int x, int y, char c, char col) { char* video_mem=(char *)0xb8000+(x+y*SCR_WIDTH)*2; video_mem[0]=c; video_mem[1]=col; } float func(float x,float y) { return x*x*y; } void clear_screen() { int x=0; int y=0; for(x=0;x300)time=0; } } int cursor=0; char last_code=0; void int0() { int i=0; char make_codes[]={ 0x1e, // A 0x30, // B 0x2e, // C 0x20, // D 0x12, // E 0x21, // F 0x22, // G 0x23, // H 0x17, // I 0x24, // J 0x25, // K 0x26, // L 0x32, // M 0x31, // N 0x18, // O 0x19, // P 0x10, // Q 0x13, // R 0x1F, // S 0x14, // T 0x16, // U 0x2F, // V 0x11, // W 0x2D, // X 0x15, // Y 0x2c, // Z }; char break_codes[]={ 0x9e, // A 0xb0, // B 0xae, // C 0xa0, // D 0x92, // E 0xa1, // F 0xa2, // G 0xa3, // H 0x97, // I 0xa4, // J 0xa5, // K 0xa6, // L 0xb2, // M 0xb1, // N 0x98, // O 0x99, // P 0x90, // Q 0x93, // R 0x9F, // S 0x94, // T 0x96, // U 0xaF, // V 0x91, // W 0xaD, // X 0x95, // Y 0xac, // Z }; char* int_count=(char *)0x7c00+3; if(last_code==*int_count)return; for(i=0;i<26;i++) { if(make_codes[i]==*int_count) { print_char(cursor,10,'A'+i,0xf); } } for(i=0;i<26;i++) { if(break_codes[i]==*int_count) { print_char(cursor++,10,'a'+i,0xf); } } last_code=*int_count; }