/* Kompatiblität ist immer gut * hier die DarkblackAPI * http://www.lowlevel.eu/wiki/DarkblackAPI */ #include #include #include "drivers/vesa/vesa.h" struct cpu_state *darkblack_handler(struct cpu_state *cpu) { switch(HIWORD(cpu->eax)) { case 0: { switch(LOWORD(cpu->eax)) { case 0: // Prozess beenden kill_task(current_task->pid, cpu); break; case 1: // Taskwechsel return schedule(cpu); break; } } case 1: { switch(LOWORD(cpu->eax)) { case 0: // Zeichenausgabe (bl = ASCII) kprintf("%c", LOWORD(cpu->ebx)); break; case 1: // Bildschirm leeren clear_screen(); break; } } case 2: { switch(LOWORD(cpu->eax)) { case 0: // Pixel zeichnen // ebx = X // ecx = Y // edx = Farbe { int r, g, b, a; r = ((cpu->edx >> 24) & 0xFF); g = ((cpu->edx >> 16) & 0xFF); b = ((cpu->edx >> 8) & 0xFF); a = ((cpu->edx >> 0) & 0xFF); putpixel(cpu->ecx * lfb_width + cpu->ebx, r, g, b); } break; case 1: // Hintergrund löschen break; case 2: // Buffer wechseln switch_buffer(); break; case 3: // Grafikmodus setzen break; } } case 3: { switch(LOWORD(cpu->eax)) { case 0: // Tastendruck // SCANCODE nach bl, wenn kein Zeichen, 0xFF break; case 1: // Tastendruck // ASCII nach bl, wenn kein zeichen, 0xFF break; } } } return cpu; }