[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

circa alcuni esperimenti



Salve lista!

oggi vi propongo domande divertenti: ho letto l'articolo "writing your
own toy OS", scritto da 3 studenti indiani che mi insegnano a scrivere
un boot sector, a usare gli interrupt e a passare in modalità protetta.
Io ho deciso di scopiazzare per farne una cosetta: un boot sector che
avvia un programma scritto da me in Fortran. Ecco il boot sector:

LOC1=0x500

entry start
start:
        mov ax,#LOC1
        mov es,ax
        mov bx,#0 ;segment offset
	mov dl,#0 ;drive no.
	mov dh,#0 ;head no.
	mov ch,#0 ;track no.
	mov cl,#2 ;sector no.( 1..18 )
	mov al,#1 ;no. of sectors tranferred
	mov ah,#2 ;function no.
	int 0x13
	jmpi 0,#LOC1

che è paro paro quello proposto dai 3 studenti. Da quel che ho capito
permette di saltare ad un settore del disco successivo, nel quale ho
copiato l'eseguibile del programma fortran già compilato. Il tutto viene
copiato su floppy dal seguente programma:

#include <sys/types.h> /* unistd.h needs this */
#include <unistd.h>    /* contains read/write */
#include <fcntl.h>
int main()
{
  char boot_buf[512];
  char file_buf[7000];
  int floppy_desc, file_desc;
  file_desc = open("./bsect", O_RDONLY);
  read(file_desc, boot_buf, 510);
  close(file_desc);
  boot_buf[510] = 0x55;
  boot_buf[511] = 0xaa;
  floppy_desc = open("/dev/sdb", O_RDWR);
  lseek(floppy_desc, 0, SEEK_SET);
  write(floppy_desc, boot_buf, 512);
  file_desc = open("./tempo", O_RDONLY); // tempo è il mio programmino
  read(file_desc, file_buf, 7000);
  close(file_desc);
  lseek(floppy_desc, 512, SEEK_SET);
  write(floppy_desc, file_buf, 7000);
  close(floppy_desc);
  return(0);
}

che è grosso modo identico a quello scritto dagli autori, solo che
invece di copiare un programmino assembler fatto da loro, mette sul
floppy il mio eseguibile. 

Io inserisco il floppy nel lettorino, e riavvio, ma il mio programmino
non da segni di vita. Premetto che con le cose fatte da loro gira tutto.
Dove sbaglio?

grazie mille a chi ha la pazienza di leggere sin quiggiù.


Reply to: