📄 boot.s
字号:
sectors = 18BOOTSEG = 0x07c0
INITSEG = 0x9000
SYSSEG = 0x1000
SYSSIZE = 0X4000
ENDSEG = SYSSEG + SYSSIZE
.globl begtext, begdata, begbss, endtext, enddata, endbss.textbegtext:.databegdata:.bssbegbss:.textentry startstart: mov ax,#BOOTSEG mov ds,ax mov ax,#INITSEG mov es,ax sub si,si
sub di,di
mov cx,#256
cld rep movsw jmpi go,INITSEGgo:
mov ax,cs mov ds,ax mov es,ax mov ss,ax mov sp,#0x400 mov ah,#0x03 xor bh,bh int 0x10 mov cx,#24 mov bx,#0x0007 mov bp,#msg1 mov ax,#0x1301 int 0x10 call read_it call kill_motor mov ah,#0x03 xor bh,bh int 0x10 mov [510],dx mov ax,#0x0000do_move: mov es,ax add ax,#0x1000 cmp ax,#0x9000 jz end_move mov ds,ax sub si,si
sub di,di mov cx,#0x8000
cld rep movsw j do_move
end_move:
cli mov al,#0x11 out #0x20,al .word 0x00eb,0x00eb out #0xA0,al
.word 0x00eb,0x00eb mov al,#0x20 out #0x21,al .word 0x00eb,0x00eb mov al,#0x28 out #0xA1,al
.word 0x00eb,0x00eb mov al,#0x04 out #0x21,al .word 0x00eb,0x00eb mov al,#0x02 out #0xA1,al
.word 0x00eb,0x00eb mov al,#0x11 out #0x21,al .word 0x00eb,0x00eb out #0xA1,al
.word 0x00eb,0x00eb mov al,#0xFB out #0x21,al .word 0x00eb,0x00eb
mov al,#0xFF out #0xA1,al
call empty_8042
mov al,#0xD1
out #0x64,al
call empty_8042
mov al,#0xDF
out #0x60,al
call empty_8042
mov ax,cs
mov ds,ax
lidt idt_48
lgdt gdt_48
mov ax,#0x0001 lmsw ax jmpi 0,8 empty_8042: .word 0x00eb,0x00eb in al,#0x64 test al,#2 jnz empty_8042 retsread: .byte 1 head: .byte 0track: .byte 0
read_it:
mov ax,#SYSSEG
mov es,ax
xor bx,bx rp_read: mov ax,es cmp ax,#ENDSEG jb ok0_read retok0_read:
xor ax,ax mov al,#sectors sub al,byte sread mov cx,ax shl cx,#9 add cx,bx jnc ok1_read je ok1_read xor ax,ax sub ax,bx shr ax,#9ok1_read: call read_track mov cx,ax add al,byte sread cmp al,#sectors jne ok3_read
xor byte head,#1
jne ok2_read
inc byte track
ok2_read:
xor ax,ax
ok3_read: mov byte sread,al shl cx,#9 add bx,cx jnc rp_read mov ax,es add ax,#0x1000 mov es,ax xor bx,bx jmp rp_readread_track: push ax push bx push cx push dx
mov ch,byte track
mov cl,byte sread
inc cl
mov dh,byte head
mov dl,#0 mov ah,#2 int 0x13 jc bad_rt
pop dx pop cx pop bx pop ax ret
bad_rt:
mov ax,#0 mov dx,#0 int 0x13
pop dx pop cx pop bx pop ax jmp read_trackkill_motor: push dx mov dx,#0x3f2 mov al,#0 outb pop dx retgdt: .word 0,0,0,0 .word 0x07FF .word 0x0000 .word 0x9A00 .word 0x00C0 .word 0x07FF .word 0x0000 .word 0x9200 .word 0x00C0 idt_48: .word 0 .word 0,0 gdt_48: .word 0x800 .word gdt,0x9 msg1: .byte 13,10 .ascii "Loading system ..." .byte 13,10,13,10
.org 510
.byte 0x55,0xaa
.textendtext:.dataenddata:.bssendbss:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -