X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=src%2Fboot%2Fboot2.s;h=ab5c6ad339d431a685490b8bd74a44a920d21626;hp=47121ee70f6443544581ad88dcca61d8f8d53d23;hb=06e632cd7cf56db0d187bf1c8ee80172bc56e685;hpb=098b0dd7bf6600ed6b904cd531a55a6415996900 diff --git a/src/boot/boot2.s b/src/boot/boot2.s index 47121ee..ab5c6ad 100644 --- a/src/boot/boot2.s +++ b/src/boot/boot2.s @@ -2,35 +2,126 @@ .code16 .section .boot2,"a" + .extern ser_putchar + mov $0x13, %ax int $0x10 - pushw $63 - pushw $63 - pushw $0 - pushw $0xff - call set_palette - add $8, %sp + movb $10, %al + call ser_putchar - pushw $0xa000 - pop %es - xor %di, %di - mov $16000, %ecx - mov $0xffffffff, %eax - rep stosl - - hlt + # copy palette + mov $logo_pal, %si + xor %cl, %cl -set_palette: - mov %sp, %bp +0: xor %eax, %eax mov $0x3c8, %dx - movw 2(%bp), %ax + movb %cl, %al outb %al, %dx + #### DBG + call ser_print_num + mov $58, %al + call ser_putchar + mov $32, %al + call ser_putchar + xor %eax, %eax + #### inc %dx - movw 4(%bp), %ax + # red + movb (%si), %al + inc %si + shr $2, %al outb %al, %dx - movw 6(%bp), %ax + #### DBG + call ser_print_num + mov $32, %al + call ser_putchar + xor %eax, %eax + #### + # green + movb (%si), %al + inc %si + shr $2, %al outb %al, %dx - movw 8(%bp), %ax + #### DBG + call ser_print_num + mov $32, %al + call ser_putchar + xor %eax, %eax + #### + # blue + movb (%si), %al + inc %si + shr $2, %al outb %al, %dx + #### DBG + call ser_print_num + mov $32, %al + call ser_putchar + mov $10, %al + call ser_putchar + xor %eax, %eax + #### + add $1, %cl + jnc 0b + + # copy pixels + pushw $0xa000 + pop %es + xor %di, %di + mov $logo_pix, %eax + shr $4, %eax + mov %ax, %ds + xor %si, %si + mov $16000, %ecx + rep movsl + + cli + hlt + + # expects string pointer in ds:si +ser_print_str: + pusha + +0: mov (%si), %al + cmp $0, %al + jz .Lend + call ser_putchar + inc %si + jmp 0b + +.Lend: popa ret + + + # expects number in eax +ser_print_num: + # save registers + pusha + + movw $numbuf + 16, %si + movb $0, (%si) + mov $10, %ebx +.Lconvloop: + xor %edx, %edx + div %ebx + add $48, %dl + dec %si + mov %dl, (%si) + cmp $0, %eax + jnz .Lconvloop + + call ser_print_str + + # restore regs + popa + ret + +numbuf: .space 16 + +logo_pal: + .incbin "logo.pal" + + .align 16 +logo_pix: + .incbin "logo.raw"