Skip to contentSkip to conversation

2 questions on bootsect.S

DISCUSSION ram 2 participants 3 messages Jan 12, 2003 – Jan 13, 2003

lore
Share & tools
lore

ram

author
#0 lore raw

Hi,

I was looking through the linux (2.5.56) arch/i386/boot/bootsect.S and was puzzled about a couple of things:

1. Near line 221 we have:

       sread:  .word 0             # sectors read of current track
       head:   .word 0             # current head
       track:  .word 0             # current track

However, since a diskette can have at most 2 heads, 80 tracks and 36
sectors
per track, why are these not bytes instead of words especially since
space is
at such a tight premium in this code ?

2. Near line 272 we have "movw $7, %bx" but the documentation I've

    been able to find about the "int 0x13" BIOS call says that for service
    code 0xe (write character and advance cursor), it does not take an
    attribute byte input parameter but rather uses the existing 

attribute. Is
this movw instruction superfluous ?

Thanks.

Ram

#1 lore raw

You may need some tools if you
decide to "bend it around." Attached
is a shell script and a little C program
that I use to mess with bootsect.S:

#2 lore raw
In reply to ram

Sorry, that was supposed to
attach in the clear as plain text. Try one more time:

#! /bin/bash
# asmboot.sh: assemble bootsect.S
cpp -traditional bootsect.S -o bootsect.ss removebl < bootsect.ss > bootsect.s
as -aln=bootsect.lst -o bootsect.o bootsect.s

--------------------------------------------------------------
/* removebl.c: filter to remove blank lines
...well, most of them, leaves single blank lines in place
*/
#include <stdio.h>
#include <string.h>

#define MAXLINE 256
char line[MAXLINE];

/* getline: get line into s, return length */ int getline(char s[], int lim)

{
	int c, i;
	
	i = 0;
	while (--lim > 0 && (c = getchar()) != EOF
			 && c != '\n')
		s[i++] = c;
	if (c == '\n')
		s[i++] = c;
	s[i] = '\0';
	return i;
}

main()

{
	int c, i, length;
	int plength = 0;  /* previous line length */

	while ( (length = getline(line,MAXLINE)) > 0) {
		if (length > 1 || plength > 1) {
			for (i = 0; i < length; i++)
			putchar(line[i]);
		}
		plength = length;
	}
}