mirror of https://git.ia64.cc/perso/cos2000v1.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
3.7 KiB
164 lines
3.7 KiB
boots segment |
|
.386 |
|
org 000h |
|
assume cs:boots,ds:boots |
|
|
|
start: |
|
jmp boot |
|
|
|
|
|
bootdb db 'COS2000A' ;ID Formatage |
|
dw 512 ;octet/secteur |
|
db 1 ;secteur/cluster |
|
dw 1 ;secteur reserv‚ |
|
db 2 ;nb de FAT |
|
dw 224 ;nb secteur rep racine |
|
dw 2880 ;nb secteur du volume |
|
db 0F0h ;ID support |
|
dw 9 ;secteur/FAT |
|
dw 18 ;secteur/piste |
|
dw 2 ;nb de tˆte |
|
dw 0 ;distance 1er sect et sect masse |
|
db 0,0,0,0,0,0,0,0,29h ;? |
|
db 01,02,03,04 ;no de serie |
|
db 'COS2000 ' ;nom de volume |
|
db 'FAT16 ' ;FAT |
|
specialboot: |
|
db 0 ;Secteur Systeme |
|
errorloading db 'The disk inserted in the floppy drive is not a system disk !!',0dh,0 |
|
okloading db 'COS is loading',0dh,0 |
|
|
|
|
|
errorboot: |
|
mov si,offset errorloading |
|
call showstr |
|
mov ah,0 |
|
int 16h |
|
int 19h |
|
boot: |
|
cli |
|
mov ax,07C0h |
|
mov ds,ax |
|
mov ax,09000h |
|
mov ss,ax |
|
mov sp,0FFFFh |
|
mov ax,1000h |
|
mov es,ax |
|
sti |
|
xor ax,ax |
|
xor dx,dx |
|
int 13h |
|
jc errorboot |
|
mov si,offset okloading |
|
call showstr |
|
mov cx,13 |
|
mov bx,100h |
|
call readsector |
|
jc errorboot |
|
mov cx,es:[bx+26] |
|
call readsector |
|
jc errorboot |
|
add bx,512 |
|
inc cx |
|
call readsector |
|
jc errorboot |
|
db 2eh,0ffh,1eh |
|
dw offsets |
|
Offsets dw 100h |
|
dw 1000h |
|
ret |
|
|
|
|
|
DiskSectorsPerTrack dw 18 |
|
DiskTracksPerHead dw 80 |
|
DiskHeads dw 2 |
|
|
|
;===================================Afficher un int EDX a l'‚cran================ |
|
ShowInt: |
|
push eax edx esi di es |
|
mov di,xy |
|
mov ax,0B800h |
|
mov es,ax |
|
mov eax,edx |
|
mov esi,10 |
|
decint2: |
|
xor edx,edx |
|
div esi |
|
add dl,'0' |
|
mov dh,colors |
|
mov es:[di],dx |
|
sub di,2 |
|
cmp ax,0 |
|
jne decint2 |
|
sub di,2 |
|
mov xy,di |
|
pop es di esi edx eax |
|
ret |
|
|
|
xy dw 20 |
|
colors db 4 |
|
|
|
ReadSector: |
|
push cx dx si |
|
mov AX, CX |
|
xor DX, DX |
|
div DiskSectorsPerTrack |
|
mov CL, DL ;{ Set the sector } |
|
and CL, 63 ;{ Top two bits are bits 8&9 of the cylinder } |
|
xor DX, DX |
|
div DiskTracksPerHead |
|
mov CH, DL ;{ Set the track bits 0-7 } |
|
mov AL, DH |
|
ror AL, 1 |
|
ror AL, 1 |
|
and AL, 11000000b |
|
or CL, AL ;{ Set bits 8&9 of track } |
|
xor dX, DX |
|
div DiskHeads |
|
mov DH, DL ;{ Set the head } |
|
inc CL |
|
mov SI, 4 |
|
TryAgain: |
|
mov AL, 1 |
|
mov DL, 0 |
|
mov AH, 2 |
|
int 13h |
|
jnc Done |
|
dec SI |
|
jnz TryAgain |
|
Done: |
|
pop si dx cx |
|
ret |
|
|
|
showcrlf: |
|
push ax bx |
|
mov ax, 0E0Dh |
|
xor bx, bx |
|
int 10h |
|
mov al, 0Ah |
|
int 10h |
|
pop bx ax |
|
ret |
|
|
|
showstr: |
|
push ax bx si |
|
again: |
|
lodsb |
|
or al,al |
|
jz fin |
|
cmp al,0Dh |
|
jne noret |
|
call showcrlf |
|
jmp again |
|
noret: |
|
mov ah,0Eh |
|
mov bx,07h |
|
int 10h |
|
jmp again |
|
fin: |
|
pop si bx ax |
|
ret |
|
|
|
|
|
end start |
|
|
|
|