X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Fboot%2Fboot2.s;h=f27d940cb0f35ab631a162b0bd82a8a079acd168;hb=6b3e7a8a2f729acac518abc4b2546a528de362a6;hp=7b8c7bb68a3a1614a35de1da6aecdb007ee499ad;hpb=07db0aabb3ad8dbb0a3cee2d3837dd93792ae825;p=bootcensus diff --git a/src/boot/boot2.s b/src/boot/boot2.s index 7b8c7bb..f27d940 100644 --- a/src/boot/boot2.s +++ b/src/boot/boot2.s @@ -1,35 +1,85 @@ +# pcboot - bootable PC demo/game kernel +# Copyright (C) 2018 John Tsiombikas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + # this is the second-stage boot loader .code16 .section .boot2,"a" + .extern ser_putchar + mov $0x13, %ax int $0x10 + movb $10, %al + call ser_putchar + # copy palette mov $logo_pal, %si xor %cl, %cl -0: mov $0x3c8, %dx +0: xor %eax, %eax + mov $0x3c8, %dx 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 # red movb (%si), %al inc %si shr $2, %al outb %al, %dx + #### 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 + #### 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 - inc %cl - jno 0b + #### 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 @@ -45,20 +95,46 @@ cli hlt -set_palette: - mov %sp, %bp - mov $0x3c8, %dx - movw 2(%bp), %ax - outb %al, %dx - inc %dx - movw 4(%bp), %ax - outb %al, %dx - movw 6(%bp), %ax - outb %al, %dx - movw 8(%bp), %ax - outb %al, %dx + # 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"