outb 64 bootmain.c outb(0x1F2, 1); // count = 1 outb 65 bootmain.c outb(0x1F3, offset); outb 66 bootmain.c outb(0x1F4, offset >> 8); outb 67 bootmain.c outb(0x1F5, offset >> 16); outb 68 bootmain.c outb(0x1F6, (offset >> 24) | 0xE0); outb 69 bootmain.c outb(0x1F7, 0x20); // cmd 0x20 - read sectors outb 137 console.c outb(CRTPORT, 14); outb 139 console.c outb(CRTPORT, 15); outb 158 console.c outb(CRTPORT, 14); outb 159 console.c outb(CRTPORT+1, pos>>8); outb 160 console.c outb(CRTPORT, 15); outb 161 console.c outb(CRTPORT+1, pos); outb 60 ide.c outb(0x1f6, 0xe0 | (1<<4)); outb 69 ide.c outb(0x1f6, 0xe0 | (0<<4)); outb 88 ide.c outb(0x3f6, 0); // generate interrupt outb 89 ide.c outb(0x1f2, sector_per_block); // number of sectors outb 90 ide.c outb(0x1f3, sector & 0xff); outb 91 ide.c outb(0x1f4, (sector >> 8) & 0xff); outb 92 ide.c outb(0x1f5, (sector >> 16) & 0xff); outb 93 ide.c outb(0x1f6, 0xe0 | ((b->dev&1)<<4) | ((sector>>24)&0x0f)); outb 95 ide.c outb(0x1f7, write_cmd); outb 98 ide.c outb(0x1f7, read_cmd); outb 137 lapic.c outb(CMOS_PORT, 0xF); // offset 0xF is shutdown code outb 138 lapic.c outb(CMOS_PORT+1, 0x0A); outb 177 lapic.c outb(CMOS_PORT, reg); outb 136 mp.c outb(0x22, 0x70); // Select IMCR outb 137 mp.c outb(0x23, inb(0x23) | 1); // Mask external interrupts. outb 14 picirq.c outb(IO_PIC1+1, 0xFF); outb 15 picirq.c outb(IO_PIC2+1, 0xFF); outb 25 uart.c outb(COM1+2, 0); outb 28 uart.c outb(COM1+3, 0x80); // Unlock divisor outb 29 uart.c outb(COM1+0, 115200/9600); outb 30 uart.c outb(COM1+1, 0); outb 31 uart.c outb(COM1+3, 0x03); // Lock divisor, 8 data bits. outb 32 uart.c outb(COM1+4, 0); outb 33 uart.c outb(COM1+1, 0x01); // Enable receive interrupts. outb 60 uart.c outb(COM1+0, c);