void kernel_main() { int i = 0xa0000; for( ; i <= 0xaffff; ++i ){ asm_write_mem( i, 1 ); } // Delete boot sector and temporary data. for( i = 0x1000; i <= 0x9fc00; ++i ){ asm_write_mem( i, 0 ); } init_palette(); i = 0xa0000; for( ; i <= 0xaffff; ++i ){ asm_write_mem( i, 0 ); } asm_disable_intr(); InitGDT(); InitIDT(); InitPIC(); asm_enable_intr(); set_task( 1, task_a, stack[ 0 ] + 2048 ); set_task( 2, task_b, stack[ 1 ] + 2048 ); switch_task_2( TASK_INFO_ADDR, TASK_INFO_ADDR + sizeof( TaskInfo ) ); for(;;){ print_str( 0, 20, "fin" ); asm_halt(); } asm_halt(); }
// this function displays a diagnostic code on a LED. void led_hex(int hex) { int i; int j; int n; int inv; if (debugger_attached) { asm_halt(); } else { splx(7); n = 0; inv = 0; for (;;) { if (n++ >= 10) { #if PICTOCRYPT sleep_delay(0); sleep_poll(); #endif } for (i = 0x10000000; i > 0; i /= 16) { if (hex < i) { continue; } j = (hex/i)%16; if (! j) { j = 16; } while (j--) { led_set(led_red, 1^inv); delay(200); led_set(led_red, 0^inv); delay(200); } delay(1000); } delay(3000); inv = ! inv; led_set(led_red, 0^inv); delay(3000); } } }