mindstorm
Сообщений: 200
Оценки: 0
Присоединился: 2005-08-25 20:55:34
|
доработал один из бесплатных загрузчиков ос до компилируемого состояния(респект JTG за вылавливание последнего бага компиляции ) но при загрузки с дискеты bios находит загрузочный сектор но экран остаётся пустым толи неверно записывается бинарник в boot сектор дискеты(пробовал через partcopy, cp boot.bin /dev/fd0) или же код загрузчика тк я с ассамблером только начинаю то мог и незаметить петлю в коде если кто может прозьба проверить на валидность код
section .text
BITS 16
org 0x7c00
%define CTR 10
%define MRE 5
entry:
cli ;
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7c00
sti
mov ax, 0x07c0
mov ds, ax
mov ax, 0x9000
mov es, ax
xor si, si
xor di, di
mov cx, 128
rep movsd
jmp 0x9000:start
begin:
mov ax, cs
mov ds, ax
mov ss, ax
mov si, msg_startup
call ps
mov di, 1
mov ax, 0x290
xor bx, bx
.loop:
mov cx, 0x50
mov es, cx
push di
shr di, 1
setc dh
mov cx, di
xchg cl, ch
pop di
cmp di, CTR
je .quit
call r_cyl
pusha
push ds
mov cx, 0x50
mov ds, cx
mov es, ax
xor di, di
xor si, si
mov cx, 0x2400
rep movsb
pop ds
popa
inc di
add ax, 0x240
jmp short .loop
.quit:
mov ax, 0x50
mov es, ax
mov bx, 0
mov ch, 0
mov dh, 0
call r_cyl
jmp 0x0000:0x0700
r_cyl:
mov [err], byte 0
pusha
mov si, msg_cyl
call ps
mov ah, ch
call pe
mov si, msg_head
call ps
mov ah, dh
call pe
mov si, msg_crlf
call ps
popa
pusha
start:
mov ah, 0x02
mov al, 18
mov cl, 1
int 0x13
jc r_err
popa
ret
err: db 0
r_err:
inc byte [err]
mov si, msg_err
call ps
call pe
mov si, msg_crlf
call ps
cmp byte [err], MRE
jl start
mov si, msg_end
call ps
hlt
jmp short $
table: db "0123456789ABCDEF"
pe:
pusha
xor bx, bx
mov bl, ah
and bl, 11110000b
shr bl, 4
mov al, [table+bx]
call pc
mov bl, ah
and bl, 00001111b
mov al, [table+bx]
call pc
popa
ret
pc:
pusha
mov ah, 0x0E
int 0x10
popa
ret
ps:
pusha
.loop:
lodsb
test al, al
jz .quit
mov ah, 0x0e
int 0x10
jmp short .loop
.quit:
popa
ret
msg_startup: db "OS loading...", 0x0A, 0x0D, 0
msg_cyl: db "Cylinder:", 0
msg_head: db ", head:",0
msg_err: db "Error! Code of it:",0
msg_end: db "Errors while reading",0x0A,0x0D, "Reboot the computer, please", 0
msg_crlf: db 0x0A, 0x0D,0
TIMES 510 - ($-$$) db 0
db 0xAA, 0x55
incbin 'boot2.bin' ps boot2.bin файл переводящий проц в защищённый режим и передающий управление на ядро, исспользовался компилятор nasm есесно с параметром -fbin
|