●feel氏作成のブートローダ

「旧メンバー」だったfeel氏が、ブートローダを書かれました。さらに、ありがたくもそのコードを、KL-01として公開することを承諾してくださいました。
氏のご好意に感謝し、謹んで公開をさせていただきます。

jmp short start

llmsg db 'BootNext',0x0d,0x0a,0
;リアルモード用文字列表示
print:
	mov ah,13h
	mov al,0
	mov bx,7h
	mov cx,20h
	mov dx,0
	int 10h
	ret

bits 16
start:
	mov ax,cs
	mov ds,ax

a20enable:
	mov al,0ch
	in al,64h
	test al,02h
	jnz a20enable
	mov al,0D1h
	out 64h,al
	mov al,0DFh
	out 60h,al

	mov bp,llmsg
	call print
;stop:
;jmp stop
;保護モード以降
changeprot:
	cli
	lgdt [gdtr]
	mov eax,cr0
	or al,01h
	mov cr0,eax
	jmp next


;謎の多いgdtr
gdtr:
	dw gdt_end - gdt - 1
	dd gdt + 0x1000

gdt:
;ヌル
	dw 0
	dw 0
	db 0
	db 0
	db 0
	db 0
;コード
gdt8:
	dw 0x0ffff
	dw 0
	db 0
	db 0x09a
	db 0x0ff
	db 0
;データ
gdt10:
	dw 0x0ffff
	dw 0
	db 0
	db 0x092
	db 0x0ff
	db 0
;テキストモード用vram
gdt18:
	dw 3999
	dw 0x8000
	db 0x0b
	db 0x092
	db 0
	db 0

gdt_end



[bits 32]
next:
	db 0xea
	dw set_desc + 0x1000
	dw 08h

set_desc:
	mov ax,10h
	mov ds,ax
	mov es,ax
	mov ss,ax
	mov ax,18h
	mov gs,ax
	mov esp,1024*1024*8

chkbugs:
	jmp chkbugs

times 512-($-$$) db 0