10 #define DOS_NROOT 0x11
11 #define DOS_MAXSECT 0x13
12 #define DOS_MEDIA 0x15
13 #define DOS_FATLEN 0x16
15 #define DOS_HEADS 0x1A
16 #define DOS_HIDDEN 0x1C
17 #define DOS4_MAXSECT 0x20
18 #define DOS4_PHY_DRIVE 0x24
19 #define DOS4_SERIAL 0x27
20 #define DOS4_LABEL 0x2B
21 #define DOS4_FATTYPE 0x36
23 unsigned char buffer
[1024];
35 static char * s
= "Usage: lsys [a:]\n";
36 if( argc
== 2 && argv
[1][1] == ':' && argv
[1][2] <= ' ' )
38 if( argv
[1][0] == 'a' || argv
[1][0] == 'A' )
40 else if( argv
[1][0] == 'b' || argv
[1][0] == 'B' )
49 for(tries
=0; tries
<6; tries
++)
50 if( (rv
= dos_sect_read(drive
, 0, 0, 1, buffer
)) == 0 )
53 for(tries
=0; tries
<6; tries
++)
54 if( (rv
= dos_sect_read(drive
, 0, 0, 2, buffer
+512)) == 0 )
56 if( rv
) fatal("Cannot read bootsector");
58 if( buffer
[DOS_MEDIA
] != buffer
[512] ||
59 buffer
[DOS_MEDIA
] < 0xF0 ||
60 buffer
[DOS_NFAT
] > 2 ||
61 buffer
[DOS_SECT
+1] != 2 )
62 fatal("Floppy has invalid format");
64 if( memcmp(buffer
+DOS4_FATTYPE
, "FAT16", 5) )
66 for(i
=0; i
<msdos_dosfs_stat
- msdos_start
; i
++)
67 buffer
[i
] = msdos_data
[i
];
68 for(i
=msdos_codestart
- msdos_start
; i
<512; i
++)
69 buffer
[i
] = msdos_data
[i
];
73 for(i
=0; i
<msdos16_dosfs_stat
- msdos_start
; i
++)
74 buffer
[i
] = msdos16_data
[i
];
75 for(i
=msdos_codestart
- msdos_start
; i
<512; i
++)
76 buffer
[i
] = msdos16_data
[i
];
79 for(tries
=0; tries
<6; tries
++)
80 if( (rv
= dos_sect_write(drive
, 0, 0, 1, buffer
)) == 0 )
82 if( rv
) fatal("Cannot write bootsector");
84 write(0, "Wrote bootsector\r\n", 18);
90 write(0, str
, strlen(str
));
95 dos_sect_write(drv
, track
, head
, sector
, loadaddr
)
104 mov dh
,[bp
+2+_dos_sect_write
.head
]
105 mov dl
,[bp
+2+_dos_sect_write
.drv
]
106 mov cl
,[bp
+2+_dos_sect_write
.sector
]
107 mov ch
,[bp
+2+_dos_sect_write
.track
]
109 mov bx
,[bp
+2+_dos_sect_write
.loadaddr
]
121 dos_sect_read(drv
, track
, head
, sector
, loadaddr
)
130 mov dh
,[bp
+2+_dos_sect_read
.head
]
131 mov dl
,[bp
+2+_dos_sect_read
.drv
]
132 mov cl
,[bp
+2+_dos_sect_read
.sector
]
133 mov ch
,[bp
+2+_dos_sect_read
.track
]
135 mov bx
,[bp
+2+_dos_sect_read
.loadaddr
]