int main(int argc, char **argv) { #if USE_IRQ uint8_t status; #else bool first; #endif command(0xa8); // enable aux. PS2 command(0xf6); // load default config command(0xf4); // enable mouse command(0xf3); // set sample rate: outb(0x60, 10); // 10 samples per second #if USE_IRQ wait_signal(); outb(0x64, 0x20); status = inb(0x60); status &= ~0x20; // enable mouse clock status |= 0x02; // enable IRQ12 wait_signal(); outb(0x64, 0x60); wait_signal(); outb(0x60, status); wait_signal(); #endif rdi_init(); mouse = rdi_file_cons(robject_new_index(), ACCS_READ | ACCS_EVENT); #if USE_IRQ rdi_set_irq(12, mouse_irq); #endif fs_plink("/dev/mouse", RP_CONS(getpid(), mouse->index), NULL); msendb(RP_CONS(getppid(), 0), ACTION_CHILD); #if USE_IRQ _done(); #else while (1) { first = true; while ((inb(0x64) & 0x21) != 0x21) { if (first) { send_event_delta(dx, dy); send_event_button(buttons); dx = dy = 0; } first = false; sleep(); } read_byte(); } #endif return 0; }
int main(int argc, char **argv) { struct robject *canvas; char *modesstr0; char *modestr; int i; rdi_init(); canvas = rdi_file_cons(robject_new_index(), ACCS_READ | ACCS_WRITE | ACCS_EVENT); robject_set_data(canvas, "type", (void*) "canvas share"); svga_init(); // generate list of modes modesstr = strdup(""); for (i = 0; i < modelist_count; i++) { modesstr0 = modesstr; modestr = malloc(16); sprintf(modestr, "%d:%d:%d ", modelist[i].w, modelist[i].h, modelist[i].d); modesstr = strvcat(modesstr, modestr, NULL); free(modesstr0); } svga_set_mode(svga_find_mode(640, 480, 24)); buffer = malloc(svga.w * svga.h * 4); /* set up driver interface */ robject_set_call(canvas, "getmode", svga_rcall_getmode, STAT_READER); robject_set_call(canvas, "listmodes", svga_rcall_listmodes, STAT_READER); robject_set_call(canvas, "unshare", svga_rcall_unshare, STAT_WRITER); robject_set_call(canvas, "setmode", svga_rcall_setmode, STAT_WRITER); robject_set_call(canvas, "syncrect", svga_rcall_syncrect, STAT_WRITER); robject_set_call(canvas, "sync", svga_rcall_sync, STAT_WRITER); rdi_global_share_hook = svga_share; /* register the driver as /dev/svga0 */ fs_plink("/dev/svga0", RP_CONS(getpid(), canvas->index), NULL); msendb(RP_CONS(getppid(), 0), PORT_CHILD); _done(); return 0; }
int main() { struct tar_file *boot_image, *file; char const **argv; uint64_t temp, temp1, temp2; argv = malloc(sizeof(char*) * 4); /* Boot Image */ boot_image = tar_parse((void*) BOOT_IMAGE); /* Dynamic Linker */ file = tar_find(boot_image, "lib/dl.so"); dl_load(file->start); /* Initial Root Filesystem / Device Filesystem / System Filesystem (tmpfs) */ argv[0] = "tmpfs"; argv[1] = NULL; file = tar_find(boot_image, "sbin/tmpfs"); fs_root = start(file, argv); fs_cons("/dev", "dir"); fs_cons("/sys", "dir"); /* Serial Driver */ argv[0] = "serial"; argv[1] = NULL; file = tar_find(boot_image, "sbin/serial"); fs_plink("/dev/serial", start(file, argv), NULL); ropen(1, fs_find("/dev/serial"), STAT_WRITER); ropen(2, fs_find("/dev/serial"), STAT_WRITER); stdout = fdopen(1, "w"); stderr = fdopen(2, "w"); fs_plink("/dev/stderr", fs_find("/dev/serial"), NULL); /* Keyboard Driver */ argv[0] = "kbd"; argv[1] = NULL; file = tar_find(boot_image, "sbin/kbd"); temp = start(file, argv); /* Graphics Driver */ argv[0] = "svga"; argv[1] = NULL; file = tar_find(boot_image, "sbin/svga"); start(file, argv); /* Init control file */ fs_plink("/sys/init", RP_CONS(getpid(), 0), NULL); /* Initrd */ initrd_init(); fs_plink("/dev/initrd", RP_CONS(getpid(), 1), NULL); /* Root filesystem (tarfs) */ argv[0] = "tarfs"; argv[1] = "/dev/initrd"; argv[2] = NULL; file = tar_find(boot_image, "sbin/tarfs"); temp = start(file, argv); /* Link /dev and /sys and change root */ temp1 = fs_find("/dev"); temp2 = fs_find("/sys"); fs_root = temp; fs_plink("/dev", temp1, NULL); fs_plink("/sys", temp2, NULL); /* Terminal Driver */ argv[0] = "biterm"; argv[1] = "/dev/kbd"; argv[2] = "/dev/svga0"; argv[3] = NULL; file = tar_find(boot_image, "sbin/biterm"); fs_plink("/dev/tty", start(file, argv), NULL); /* Temporary filesystem */ argv[0] = "tmpfs"; argv[1] = NULL; file = tar_find(boot_image, "sbin/tmpfs"); fs_plink("/tmp", start(file, argv), NULL); /* Time Driver */ argv[0] = "time"; argv[1] = NULL; file = tar_find(boot_image, "sbin/time"); fs_plink("/dev/time", start(file, argv), NULL); /* Pipe Driver */ argv[0] = "pipe"; argv[1] = NULL; file = tar_find(boot_image, "sbin/pipe"); fs_plink("/sys/pipe", start(file, argv), NULL); setname("init"); mwait(PORT_CHILD, 0); printf("INIT PANIC: system daemon died\n"); for(;;); return 0; }