diff --git a/sys/boot/i386/boot0/boot0.S b/sys/boot/i386/boot0/boot0.S index 9b790de068b3..326911c5a808 100644 --- a/sys/boot/i386/boot0/boot0.S +++ b/sys/boot/i386/boot0/boot0.S @@ -21,75 +21,75 @@ /* ... using a serial console on COM1. */ #endif /* SIO */ - .set NHRDRV,0x475 // Number of hard drives - .set ORIGIN,0x600 // Execution address - .set FAKE,0x800 // Partition entry - .set LOAD,0x7c00 // Load address + .set NHRDRV,0x475 # Number of hard drives + .set ORIGIN,0x600 # Execution address + .set FAKE,0x800 # Partition entry + .set LOAD,0x7c00 # Load address - .set PRT_OFF,0x1be // Partition table + .set PRT_OFF,0x1be # Partition table - .set TBL0SZ,0x3 // Table 0 size - .set TBL1SZ,0xb // Table 1 size + .set TBL0SZ,0x3 # Table 0 size + .set TBL1SZ,0xb # Table 1 size - .set MAGIC,0xaa55 // Magic: bootable - .set B0MAGIC,0xbb66 // Identification + .set MAGIC,0xaa55 # Magic: bootable + .set B0MAGIC,0xbb66 # Identification - .set KEY_ENTER,0x1c // Enter key scan code - .set KEY_F1,0x3b // F1 key scan code - .set KEY_1,0x02 // #1 key scan code + .set KEY_ENTER,0x1c # Enter key scan code + .set KEY_F1,0x3b # F1 key scan code + .set KEY_1,0x02 # #1 key scan code - .set ASCII_BEL,0x07 // ASCII code for - .set ASCII_CR,0x0D // ASCII code for + .set ASCII_BEL,0x07 # ASCII code for + .set ASCII_CR,0x0D # ASCII code for /* * Addresses in the sector of embedded data values. * Accessed with negative offsets from the end of the relocated sector (%ebp). */ - .set _NXTDRV,-0x48 // Next drive - .set _OPT,-0x47 // Default option - .set _SETDRV,-0x46 // Drive to force - .set _FLAGS,-0x45 // Flags - .set _TICKS,-0x44 // Timeout ticks - .set _FAKE,0x0 // Fake partition entry - .set _MNUOPT,0xc // Menu options + .set _NXTDRV,-0x48 # Next drive + .set _OPT,-0x47 # Default option + .set _SETDRV,-0x46 # Drive to force + .set _FLAGS,-0x45 # Flags + .set _TICKS,-0x44 # Timeout ticks + .set _FAKE,0x0 # Fake partition entry + .set _MNUOPT,0xc # Menu options - .globl start // Entry point - .code16 // This runs in real mode + .globl start # Entry point + .code16 # This runs in real mode /* * Initialise segments and registers to known values. * segments start at 0. * The stack is immediately below the address we were loaded to. */ -start: cld // String ops inc - xorw %ax,%ax // Zero - movw %ax,%es // Address - movw %ax,%ds // data - movw %ax,%ss // Set up - movw $LOAD,%sp // stack +start: cld # String ops inc + xorw %ax,%ax # Zero + movw %ax,%es # Address + movw %ax,%ds # data + movw %ax,%ss # Set up + movw $LOAD,%sp # stack /* * Copy this code to the address it was linked for */ - movw %sp,%si // Source - movw $start,%di // Destination - movw $0x100,%cx // Word count - rep // Relocate - movsw // code + movw %sp,%si # Source + movw $start,%di # Destination + movw $0x100,%cx # Word count + rep # Relocate + movsw # code /* * Set address for variable space beyond code, and clear it. * Notice that this is also used to point to the values embedded in the block, * by using negative offsets. */ - movw %di,%bp // Address variables - movb $0x8,%cl // Words to clear - rep // Zero - stosw // them + movw %di,%bp # Address variables + movb $0x8,%cl # Words to clear + rep # Zero + stosw # them /* * Relocate to the new copy of the code. */ - incb -0xe(%di) // Sector number - jmp main-LOAD+ORIGIN // To relocated code + incb -0xe(%di) # Sector number + jmp main-LOAD+ORIGIN # To relocated code main: #ifdef SIO @@ -97,29 +97,29 @@ main: * Initialize the serial port. * Must save DX (contains drive number) */ - pushw %dx // Save - xorw %dx,%dx // Port: COM1 - movb COMSPEED,%al // defined by Makefile - movb $0x00,%ah // BIOS: Set COM Port - int $0x14 // Parameters - popw %dx // Restore + pushw %dx # Save + xorw %dx,%dx # Port: COM1 + movb COMSPEED,%al # defined by Makefile + movb $0x00,%ah # BIOS: Set COM Port + int $0x14 # Parameters + popw %dx # Restore #endif /* SIO */ /* * Check what flags were loaded with us, specifically, Use a predefined Drive. * If what the bios gives us is bad, use the '0' in the block instead, as well. */ - testb $0x20,_FLAGS(%bp) // Set number drive? - jnz main.1 // Yes - testb %dl,%dl // Drive number valid? - js main.2 // Possibly (0x80 set) -main.1: movb _SETDRV(%bp),%dl // Drive number to use + testb $0x20,_FLAGS(%bp) # Set number drive? + jnz main.1 # Yes + testb %dl,%dl # Drive number valid? + js main.2 # Possibly (0x80 set) +main.1: movb _SETDRV(%bp),%dl # Drive number to use /* * Whatever we decided to use, now store it into the fake * partition entry that lives in the data space above us. */ -main.2: movb %dl,_FAKE(%bp) // Save drive number - callw putn // To new line - pushw %dx // Save drive number +main.2: movb %dl,_FAKE(%bp) # Save drive number + callw putn # To new line + pushw %dx # Save drive number /* * Start out with a pointer to the 4th byte of the first table entry * so that after 4 iterations it's beyond the end of the sector. @@ -127,65 +127,65 @@ main.2: movb %dl,_FAKE(%bp) // Save drive number * (remember that the table starts 2 bytes earlier than you would expect * as the bootable flag is after it in the block) */ - movw $(partbl+0x4),%bx // Partition table (+4) - xorw %dx,%dx // Item number + movw $(partbl+0x4),%bx # Partition table (+4) + xorw %dx,%dx # Item number /* * Loop around on the partition table, printing values until we * pass a 256 byte boundary. The end of loop test is at main.5. */ -main.3: movb %ch,-0x4(%bx) // Zero active flag (ch == 0) - btw %dx,_FLAGS(%bp) // Entry enabled? - jnc main.5 // No +main.3: movb %ch,-0x4(%bx) # Zero active flag (ch == 0) + btw %dx,_FLAGS(%bp) # Entry enabled? + jnc main.5 # No /* * If any of the entries in the table are * the same as the 'type' in the slice table entry, * then this is an empty or non bootable partition. Skip it. */ - movb (%bx),%al // Load type - movw $tables,%di // Lookup tables - movb $TBL0SZ,%cl // Number of entries - repne // Exclude - scasb // partition? - je main.5 // Yes + movb (%bx),%al # Load type + movw $tables,%di # Lookup tables + movb $TBL0SZ,%cl # Number of entries + repne # Exclude + scasb # partition? + je main.5 # Yes /* * Now scan the table of known types */ - movb $TBL1SZ,%cl // Number of entries - repne // Known - scasb // type? - jne main.4 // No + movb $TBL1SZ,%cl # Number of entries + repne # Known + scasb # type? + jne main.4 # No /* * If it matches get the matching element in the * next array. if it doesn't, we are already * pointing at its first element which points to a "?". */ - addw $TBL1SZ,%di // Adjust -main.4: movb (%di),%cl // Partition - addw %cx,%di // description - callw putx // Display it -main.5: incw %dx // Next item - addb $0x10,%bl // Next entry - jnc main.3 // Till done + addw $TBL1SZ,%di # Adjust +main.4: movb (%di),%cl # Partition + addw %cx,%di # description + callw putx # Display it +main.5: incw %dx # Next item + addb $0x10,%bl # Next entry + jnc main.3 # Till done /* * Passed a 256 byte boundary.. * table is finished. * Add one to the drive number and check it is valid, */ - popw %ax // Drive number - subb $0x80-0x1,%al // Does next - cmpb NHRDRV,%al // drive exist? (from BIOS?) - jb main.6 // Yes + popw %ax # Drive number + subb $0x80-0x1,%al # Does next + cmpb NHRDRV,%al # drive exist? (from BIOS?) + jb main.6 # Yes /* * If not then if there is only one drive, * Don't display drive as an option. */ - decw %ax // Already drive 0? - jz main.7 // Yes + decw %ax # Already drive 0? + jz main.7 # Yes /* * If it was illegal or we cycled through them, * then go back to drive 0. */ - xorb %al,%al // Drive 0 + xorb %al,%al # Drive 0 /* * Whatever drive we selected, make it an ascii digit and save it back * to the "next drive" location in the loaded block in case we @@ -193,28 +193,28 @@ main.5: incw %dx // Next item * This also is part of the printed drive string so add 0x80 to indicate * end of string. */ -main.6: addb $'0'|0x80,%al // Save next - movb %al,_NXTDRV(%bp) // drive number - movw $drive,%di // Display - callw putx // item +main.6: addb $'0'|0x80,%al # Save next + movb %al,_NXTDRV(%bp) # drive number + movw $drive,%di # Display + callw putx # item /* * Now that we've printed the drive (if we needed to), display a prompt. * Get ready for the input by noting the time. */ -main.7: movw $prompt,%si // Display - callw putstr // prompt - movb _OPT(%bp),%dl // Display - decw %si // default - callw putkey // key +main.7: movw $prompt,%si # Display + callw putstr # prompt + movb _OPT(%bp),%dl # Display + decw %si # default + callw putkey # key main.7_1: - xorb %ah,%ah // BIOS: Get - int $0x1a // system time + xorb %ah,%ah # BIOS: Get + int $0x1a # system time #ifndef SIO - movw %dx,%di // Ticks when - addw _TICKS(%bp),%di // timeout + movw %dx,%di # Ticks when + addw _TICKS(%bp),%di # timeout #else /* SIO */ - movw %dx,%si // Ticks when - addw _TICKS(%bp),%si // timeout + movw %dx,%si # Ticks when + addw _TICKS(%bp),%si # timeout #endif /* SIO */ /* * Busy loop, looking for keystrokes but @@ -222,29 +222,29 @@ main.7_1: */ main.8: #ifndef SIO - movb $0x1,%ah // BIOS: Check - int $0x16 // for keypress - jnz main.11 // Have one + movb $0x1,%ah # BIOS: Check + int $0x16 # for keypress + jnz main.11 # Have one #else /* SIO */ - xorw %dx,%dx // Use COM1 - movb $0x03,%ah // BIOS: Read COM - int $0x14 // Status - testb $0x01,%ah // Check line status - jnz main.11 // (bit 1 indicates input) + xorw %dx,%dx # Use COM1 + movb $0x03,%ah # BIOS: Read COM + int $0x14 # Status + testb $0x01,%ah # Check line status + jnz main.11 # (bit 1 indicates input) #endif /* SIO */ - xorb %ah,%ah // BIOS: Get - int $0x1a // system time + xorb %ah,%ah # BIOS: Get + int $0x1a # system time #ifndef SIO - cmpw %di,%dx // Timeout? + cmpw %di,%dx # Timeout? #else /* SIO */ - cmpw %si,%dx // Timeout? + cmpw %si,%dx # Timeout? #endif /* SIO */ - jb main.8 // No + jb main.8 # No /* * If timed out or defaulting, come here. */ -main.9: movb _OPT(%bp),%al // Load default - jmp main.12 // Join common code +main.9: movb _OPT(%bp),%al # Load default + jmp main.12 # Join common code /* * User's last try was bad, beep in displeasure. * Since nothing was printed, just continue on as if the user @@ -252,177 +252,177 @@ main.9: movb _OPT(%bp),%al // Load default * for all bad keystrokes but no action until either the timeout * occurs or the user hits a good key. */ -main.10: movb $ASCII_BEL,%al // Signal - callw putchr // error +main.10: movb $ASCII_BEL,%al # Signal + callw putchr # error #ifdef SIO - jmp main.7_1 // Go back + jmp main.7_1 # Go back #endif /* SIO */ /* * Get the keystroke. */ main.11: #ifndef SIO - xorb %ah,%ah // BIOS: Get - int $0x16 // keypress - movb %ah,%al // Scan code + xorb %ah,%ah # BIOS: Get + int $0x16 # keypress + movb %ah,%al # Scan code #else /* SIO */ - movb $0x02,%ah // BIOS: Receive - int $0x14 // COM Byte + movb $0x02,%ah # BIOS: Receive + int $0x14 # COM Byte #endif /* SIO */ /* * If it's CR act as if timed out. */ #ifndef SIO - cmpb $KEY_ENTER,%al // Enter pressed? + cmpb $KEY_ENTER,%al # Enter pressed? #else /* SIO */ - cmpb $ASCII_CR,%al // Enter pressed? + cmpb $ASCII_CR,%al # Enter pressed? #endif /* SIO */ - je main.9 // Yes + je main.9 # Yes /* * Otherwise check if legal * If not ask again. */ #ifndef SIO - subb $KEY_F1,%al // Less F1 scan code - cmpb $0x4,%al // F1..F5? - jna main.12 // Yes - subb $(KEY_1 - KEY_F1),%al // Less #1 scan code + subb $KEY_F1,%al # Less F1 scan code + cmpb $0x4,%al # F1..F5? + jna main.12 # Yes + subb $(KEY_1 - KEY_F1),%al # Less #1 scan code #else /* SIO */ - subb $'1',%al // Less '1' ascii character + subb $'1',%al # Less '1' ascii character #endif /* SIO */ - cmpb $0x4,%al // #1..#5? - ja main.10 // No + cmpb $0x4,%al # #1..#5? + ja main.10 # No /* * We have a selection. * but if it's a bad selection go back to complain. * The bits in MNUOPT were set when the options were printed. * Anything not printed is not an option. */ -main.12: cbtw // Option - btw %ax,_MNUOPT(%bp) // enabled? - jnc main.10 // No +main.12: cbtw # Option + btw %ax,_MNUOPT(%bp) # enabled? + jnc main.10 # No /* * Save the info in the original tables * for rewriting to the disk. */ - movb %al,_OPT(%bp) // Save option - movw $FAKE,%si // Partition for write - movb (%si),%dl // Drive number - movw %si,%bx // Partition for read - cmpb $0x4,%al // F5/#5 pressed? - pushf // Save - je main.13 // Yes - shlb $0x4,%al // Point to - addw $partbl,%ax // selected - xchgw %bx,%ax // partition - movb $0x80,(%bx) // Flag active + movb %al,_OPT(%bp) # Save option + movw $FAKE,%si # Partition for write + movb (%si),%dl # Drive number + movw %si,%bx # Partition for read + cmpb $0x4,%al # F5/#5 pressed? + pushf # Save + je main.13 # Yes + shlb $0x4,%al # Point to + addw $partbl,%ax # selected + xchgw %bx,%ax # partition + movb $0x80,(%bx) # Flag active /* * If not asked to do a write-back (flags 0x40) don't do one. */ -main.13: pushw %bx // Save - testb $0x40,_FLAGS(%bp) // No updates? - jnz main.14 // Yes - movw $start,%bx // Data to write - movb $0x3,%ah // Write sector - callw intx13 // to disk -main.14: popw %si // Restore - popf // Restore +main.13: pushw %bx # Save + testb $0x40,_FLAGS(%bp) # No updates? + jnz main.14 # Yes + movw $start,%bx # Data to write + movb $0x3,%ah # Write sector + callw intx13 # to disk +main.14: popw %si # Restore + popf # Restore /* * If going to next drive, replace drive with selected one. * Remember to un-ascii it. Hey 0x80 is already set, cool! */ - jne main.15 // If not F5/#5 - movb _NXTDRV(%bp),%dl // Next drive - subb $'0',%dl // number + jne main.15 # If not F5/#5 + movb _NXTDRV(%bp),%dl # Next drive + subb $'0',%dl # number /* * load selected bootsector to the LOAD location in RAM. * If it fails to read or isn't marked bootable, treat it * as a bad selection. * XXX what does %si carry? */ -main.15: movw $LOAD,%bx // Address for read - movb $0x2,%ah // Read sector - callw intx13 // from disk - jc main.10 // If error - cmpw $MAGIC,0x1fe(%bx) // Bootable? - jne main.10 // No - pushw %si // Save - movw $crlf,%si // Leave some - callw puts // space - popw %si // Restore - jmp *%bx // Invoke bootstrap +main.15: movw $LOAD,%bx # Address for read + movb $0x2,%ah # Read sector + callw intx13 # from disk + jc main.10 # If error + cmpw $MAGIC,0x1fe(%bx) # Bootable? + jne main.10 # No + pushw %si # Save + movw $crlf,%si # Leave some + callw puts # space + popw %si # Restore + jmp *%bx # Invoke bootstrap /* * Display routines */ putkey: #ifndef SIO - movb $'F',%al // Display - callw putchr // 'F' + movb $'F',%al # Display + callw putchr # 'F' #endif /* SIO */ - movb $'1',%al // Prepare - addb %dl,%al // digit - jmp putstr.1 // Display the rest + movb $'1',%al # Prepare + addb %dl,%al # digit + jmp putstr.1 # Display the rest /* * Display the option and note that it is a valid option. * That last point is a bit tricky.. */ -putx: btsw %dx,_MNUOPT(%bp) // Enable menu option - movw $item,%si // Display - callw putkey // key - movw %di,%si // Display the rest +putx: btsw %dx,_MNUOPT(%bp) # Enable menu option + movw $item,%si # Display + callw putkey # key + movw %di,%si # Display the rest -puts: callw putstr // Display string +puts: callw putstr # Display string -putn: movw $crlf,%si // To next line +putn: movw $crlf,%si # To next line -putstr: lodsb // Get byte - testb $0x80,%al // End of string? - jnz putstr.2 // Yes -putstr.1: callw putchr // Display char - jmp putstr // Continue -putstr.2: andb $~0x80,%al // Clear MSB +putstr: lodsb # Get byte + testb $0x80,%al # End of string? + jnz putstr.2 # Yes +putstr.1: callw putchr # Display char + jmp putstr # Continue +putstr.2: andb $~0x80,%al # Clear MSB putchr: #ifndef SIO - pushw %bx // Save - movw $0x7,%bx // Page:attribute - movb $0xe,%ah // BIOS: Display - int $0x10 // character - popw %bx // Restore + pushw %bx # Save + movw $0x7,%bx # Page:attribute + movb $0xe,%ah # BIOS: Display + int $0x10 # character + popw %bx # Restore #else /* SIO */ - pushw %dx // Save - xorw %dx,%dx // Use COM1 - xorw %cx,%cx // No timeout - movb $0x01,%ah // BIOS: Send - int $0x14 // Character - popw %dx // Restore + pushw %dx # Save + xorw %dx,%dx # Use COM1 + xorw %cx,%cx # No timeout + movb $0x01,%ah # BIOS: Send + int $0x14 # Character + popw %dx # Restore #endif /* SIO */ - retw // To caller + retw # To caller /* One-sector disk I/O routine */ -intx13: movb 0x1(%si),%dh // Load head - movw 0x2(%si),%cx // Load cylinder:sector - movb $0x1,%al // Sector count - pushw %si // Save - movw %sp,%di // Save - testb $0x80,_FLAGS(%bp) // Use packet interface? - jz intx13.1 // No - pushl $0x0 // Set the - pushl 0x8(%si) // LBA address - pushw %es // Set the transfer - pushw %bx // buffer address - push $0x1 // Block count - push $0x10 // Packet size - movw %sp,%si // Packet pointer - decw %ax // Verify off - orb $0x40,%ah // Use disk packet -intx13.1: int $0x13 // BIOS: Disk I/O - movw %di,%sp // Restore - popw %si // Restore - retw // To caller +intx13: movb 0x1(%si),%dh # Load head + movw 0x2(%si),%cx # Load cylinder:sector + movb $0x1,%al # Sector count + pushw %si # Save + movw %sp,%di # Save + testb $0x80,_FLAGS(%bp) # Use packet interface? + jz intx13.1 # No + pushl $0x0 # Set the + pushl 0x8(%si) # LBA address + pushw %es # Set the transfer + pushw %bx # buffer address + push $0x1 # Block count + push $0x10 # Packet size + movw %sp,%si # Packet pointer + decw %ax # Verify off + orb $0x40,%ah # Use disk packet +intx13.1: int $0x13 # BIOS: Disk I/O + movw %di,%sp # Restore + popw %si # Restore + retw # To caller /* Menu strings */ @@ -451,18 +451,18 @@ tables: * These are offsets that match the known names above and point to the strings * that will be printed. */ - .byte os_misc-. // Unknown - .byte os_dos-. // DOS - .byte os_dos-. // DOS - .byte os_dos-. // DOS - .byte os_dos-. // Windows - .byte os_dos-. // Windows - .byte os_dos-. // Windows - .byte os_linux-. // Linux - .byte os_bsd-. // BSD/OS - .byte os_freebsd-. // FreeBSD - .byte os_bsd-. // OpenBSD - .byte os_bsd-. // NetBSD + .byte os_misc-. # Unknown + .byte os_dos-. # DOS + .byte os_dos-. # DOS + .byte os_dos-. # DOS + .byte os_dos-. # Windows + .byte os_dos-. # Windows + .byte os_dos-. # Windows + .byte os_linux-. # Linux + .byte os_bsd-. # BSD/OS + .byte os_freebsd-. # FreeBSD + .byte os_bsd-. # OpenBSD + .byte os_bsd-. # NetBSD /* * And here are the strings themselves. 0x80 or'd into a byte indicates * the end of the string. (not so great for Russians but...) @@ -475,7 +475,7 @@ os_bsd: .ascii "BS"; .byte 'D'|0x80 .org PRT_OFF-0xe,0x90 - .word B0MAGIC // Magic number + .word B0MAGIC # Magic number /* * These values are sometimes changed before writing back to the drive @@ -483,14 +483,14 @@ os_bsd: .ascii "BS"; .byte 'D'|0x80 * is part of the same string. */ drive: .ascii "Drive " -nxtdrv: .byte 0x0 // Next drive number -opt: .byte 0x0 // Option -setdrv: .byte 0x80 // Drive to force -flags: .byte FLAGS // Flags -ticks: .word TICKS // Delay +nxtdrv: .byte 0x0 # Next drive number +opt: .byte 0x0 # Option +setdrv: .byte 0x80 # Drive to force +flags: .byte FLAGS # Flags +ticks: .word TICKS # Delay /* * here is the 64 byte partition table that fdisk would fiddle with. */ -partbl: .fill 0x40,0x1,0x0 // Partition table - .word MAGIC // Magic number +partbl: .fill 0x40,0x1,0x0 # Partition table + .word MAGIC # Magic number