From 33e589193180a66da66f27d7a55c280b386e3f32 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Tue, 19 Sep 2023 19:48:30 +0300
Subject: [PATCH 01/15] fasm-putchar-virittelyy

---
 src/font.asm        | 38 ++++++++++++++++++++++++++++++
 src/framebuffer.asm | 57 +++++++++++++++++++++++++++++++++++++++++++++
 src/start32.asm     |  6 +++++
 3 files changed, 101 insertions(+)
 create mode 100644 src/font.asm

diff --git a/src/font.asm b/src/font.asm
new file mode 100644
index 0000000..e97def8
--- /dev/null
+++ b/src/font.asm
@@ -0,0 +1,38 @@
+;; Thank you Terminus for letting us use this font under SIL licence
+kfont:
+; controlchars
+times 31 db 0x00000000000000000000000000000000
+; space
+db 11000000b
+db 10000000b
+db 00000000b
+db 00000000b
+db 00000000b
+db 00000001b
+db 00000001b
+db 00000001b
+db 00000001b
+db 00000000b
+db 00000000b
+db 00000000b
+db 00000000b
+db 00000000b
+db 00000001b
+db 00000011b
+; !
+db 00000000b
+db 00000000b
+db 00011000b
+db 00011000b
+db 00011000b
+db 00011000b
+db 00011000b
+db 00011000b
+db 00011000b
+db 00000000b
+db 00011000b
+db 00011000b
+db 00000000b
+db 00000000b
+db 00000000b
+db 00000000b
diff --git a/src/framebuffer.asm b/src/framebuffer.asm
index 5204798..d25ba38 100644
--- a/src/framebuffer.asm
+++ b/src/framebuffer.asm
@@ -42,3 +42,60 @@ putpixel:
 
 	pop ebp
 	ret
+
+; char, x, y
+putchar:
+	push ebp
+	mov ebp, esp
+	push eax
+	push ebx
+	push ecx
+	push edx
+
+	; skip non printable
+	mov eax, [ebp+8] ;char
+	cmp eax, 0x20
+	jl .unprintable
+	cmp eax, 0x7e
+	jg .unprintable
+
+	mov ecx, 16
+	mul ecx
+	mov esi, [kfont+eax]
+
+	mov ebx, [ebp+12] ;x
+	mov edx, [ebp+16] ;y
+
+	cld
+	xor eax, eax
+.loop:
+	lodsb	; load font row to al
+	mov ah, 0
+.loop2:
+	shl al
+	jnc .blankpix
+	; draw a pixel
+	push 0xff
+	push edx ;x
+	push ecx ;y
+.blankpix:
+	inc ah
+	cmp ah, 8
+	je .loop
+
+
+.done:
+	pop edx
+	pop ecx
+	pop ebx
+	pop eax
+	pop ebp
+	ret
+.unprintable:
+	push .unprintablemsg
+	call serialwrite
+	add esp, 4
+	jmp .done
+.unprintablemsg: db 10,"Err: Unprintable char not handled!", 0
+
+include "src/font.asm"
diff --git a/src/start32.asm b/src/start32.asm
index f8e5d36..25342cb 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -133,6 +133,12 @@ rOSkalogodraw:
 	jne .loop
 .done:
 
+push byte 0x21
+push byte 0x21
+push byte 0x21
+call putchar
+add esp, 3*4
+
 	jmp hang
 
 hang:

From e4172c14bb9982895adabc0ea6ac6e832dd3f4d9 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Thu, 21 Sep 2023 21:06:37 +0300
Subject: [PATCH 02/15] Fancy colour loop

---
 src/start32.asm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/src/start32.asm b/src/start32.asm
index f8e5d36..5042d9c 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -133,6 +133,39 @@ rOSkalogodraw:
 	jne .loop
 .done:
 
+
+xor eax, eax
+xor ebx, ebx
+xor ecx, ecx
+cloop:
+push eax ;col
+push ebx ;y
+push ecx ;x
+call putpixel
+pop ecx
+pop ebx
+pop eax
+
+inc ecx
+cmp ecx, VWIDTH
+jle cloop
+
+xor ecx, ecx
+inc ebx
+cmp ebx, VHEIGHT
+jle cloop
+
+xor ebx, ebx
+add eax, 5
+cmp ax, 255
+jle cloop
+
+xor eax, eax
+jmp cloop
+
+
+
+
 	jmp hang
 
 hang:

From a0ba839215c2af7805e8419ba7680fc25fe7846c Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 13 Jan 2024 02:36:35 +0200
Subject: [PATCH 03/15] Get sweet R/G/B positions as numbers for debugging

---
 src/start32.asm | 52 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/src/start32.asm b/src/start32.asm
index 5042d9c..5feda10 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -97,6 +97,52 @@ start:
 	call serialwrite
 	add esp, 4
 
+
+push stuff.rpostxt
+call serialwrite
+add esp, 4
+
+push dword esp
+push dword 10
+xor eax, eax
+mov al, [mbootinfo.fb_rpos]
+push dword eax
+call __uitoa
+add esp, 3*4
+push esp
+call serialwrite
+add esp, 4
+
+push stuff.gpostxt
+call serialwrite
+add esp, 4
+
+push dword esp
+push dword 10
+xor eax, eax
+mov al, [mbootinfo.fb_gpos]
+push dword eax
+call __uitoa
+add esp, 3*4
+push esp
+call serialwrite
+add esp, 4
+
+push stuff.bpostxt
+call serialwrite
+add esp, 4
+
+push dword esp
+push dword 10
+xor eax, eax
+mov al, [mbootinfo.fb_bpos]
+push dword eax
+call __uitoa
+add esp, 3*4
+push esp
+call serialwrite
+add esp, 4
+
 	add esp, 36	;Clean reserved uitoa return string from stack
 
 	; Draw a test pixel to bottom right corner
@@ -132,6 +178,7 @@ rOSkalogodraw:
 	cmp byte bl, [roskalogo.h]
 	jne .loop
 .done:
+jmp hang
 
 
 xor eax, eax
@@ -189,6 +236,11 @@ stuff:
 	.fbdimensionsmsgpfx db 10, "Framebuffer dimensions: ", 0
 	.x db "x", 0
 
+
+	.rpostxt db 10, "rPos: ", 0
+	.gpostxt db 10, "gPos: ", 0
+	.bpostxt db 10, "bPos: ", 0
+
 align 4096
 bss_start:
 ;align 4096

From 3dd934bd83ce770a56cf26505d730e6ae47efcc5 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 13 Jan 2024 03:28:43 +0200
Subject: [PATCH 04/15] Fixed R/G/B field information fetching from Multiboot

---
 src/mbootinfo.asm |  2 ++
 src/start32.asm   | 51 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+)

diff --git a/src/mbootinfo.asm b/src/mbootinfo.asm
index 2ff07e8..d7425f0 100644
--- a/src/mbootinfo.asm
+++ b/src/mbootinfo.asm
@@ -54,6 +54,8 @@ mbootgetinfo:
 	mov [mbootinfo.fb_type], al
 	inc esi
 
+	;garbage?
+	add esi, 2
 	;; r/g/b positions and masks
 	mov ecx, 6
 	mov edi, mbootinfo.fb_rpos
diff --git a/src/start32.asm b/src/start32.asm
index 5feda10..495dde2 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -143,6 +143,54 @@ push esp
 call serialwrite
 add esp, 4
 
+
+
+push stuff.rmasksizetxt
+call serialwrite
+add esp, 4
+
+push dword esp
+push dword 10
+xor eax, eax
+mov al, [mbootinfo.fb_rmasksize]
+push dword eax
+call __uitoa
+add esp, 3*4
+push esp
+call serialwrite
+add esp, 4
+
+push stuff.gmasksizetxt
+call serialwrite
+add esp, 4
+
+push dword esp
+push dword 10
+xor eax, eax
+mov al, [mbootinfo.fb_gmasksize]
+push dword eax
+call __uitoa
+add esp, 3*4
+push esp
+call serialwrite
+add esp, 4
+
+push stuff.bmasksizetxt
+call serialwrite
+add esp, 4
+
+push dword esp
+push dword 10
+xor eax, eax
+mov al, [mbootinfo.fb_bmasksize]
+push dword eax
+call __uitoa
+add esp, 3*4
+push esp
+call serialwrite
+add esp, 4
+
+
 	add esp, 36	;Clean reserved uitoa return string from stack
 
 	; Draw a test pixel to bottom right corner
@@ -240,6 +288,9 @@ stuff:
 	.rpostxt db 10, "rPos: ", 0
 	.gpostxt db 10, "gPos: ", 0
 	.bpostxt db 10, "bPos: ", 0
+	.rmasksizetxt db 10, "rMaskSize: ", 0
+	.gmasksizetxt db 10, "gMaskSize: ", 0
+	.bmasksizetxt db 10, "bMaskSize: ", 0
 
 align 4096
 bss_start:

From bbd80c4f78079ee27923ca567eca9247cd48ca88 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Fri, 26 Jan 2024 18:23:51 +0200
Subject: [PATCH 05/15] Cleaning up

---
 src/start32.asm | 33 ---------------------------------
 1 file changed, 33 deletions(-)

diff --git a/src/start32.asm b/src/start32.asm
index 495dde2..1aa15fc 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -229,39 +229,6 @@ rOSkalogodraw:
 jmp hang
 
 
-xor eax, eax
-xor ebx, ebx
-xor ecx, ecx
-cloop:
-push eax ;col
-push ebx ;y
-push ecx ;x
-call putpixel
-pop ecx
-pop ebx
-pop eax
-
-inc ecx
-cmp ecx, VWIDTH
-jle cloop
-
-xor ecx, ecx
-inc ebx
-cmp ebx, VHEIGHT
-jle cloop
-
-xor ebx, ebx
-add eax, 5
-cmp ax, 255
-jle cloop
-
-xor eax, eax
-jmp cloop
-
-
-
-
-	jmp hang
 
 hang:
 	push .msg

From bcf49f4fefaee820bc2b56e0cc948431057b7fef Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Fri, 26 Jan 2024 18:29:07 +0200
Subject: [PATCH 06/15] Framebuffer supports colour now

---
 src/framebuffer.asm | 32 +++++++++++++++++++++++++++-----
 src/start32.asm     | 21 ++++++++++++---------
 2 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/src/framebuffer.asm b/src/framebuffer.asm
index 5204798..377ba9a 100644
--- a/src/framebuffer.asm
+++ b/src/framebuffer.asm
@@ -1,4 +1,4 @@
-;; x, y, brightness
+;; x, y, r, g, b
 putpixel:
 	push ebp
 	mov ebp, esp
@@ -28,12 +28,34 @@ putpixel:
 	add edi, eax
 
 
-	; Brightness
-	mov eax, [ebp + 16]
 
 	; Poke videomemory
-	cld
-	rep stosb
+	xor eax, eax
+	mov ebx, [ebp+16]
+	mov cl, [mbootinfo.fb_rpos]
+	shl ebx, cl
+	or eax, ebx
+
+	mov ebx, [ebp+20]
+	mov cl, [mbootinfo.fb_gpos]
+	shl ebx, cl
+	or eax, ebx
+
+	mov ebx, [ebp+24]
+	mov cl, [mbootinfo.fb_bpos]
+	shl ebx, cl
+	or eax, ebx
+
+	cmp [mbootinfo.fb_bpp], 32
+	jne .bpp24
+	stosd
+	jmp .done
+.bpp24:
+	stosb
+	shr eax, 8
+	stosb
+	shr eax, 8
+	stosb
 .done:
 	pop edi
 	pop ecx
diff --git a/src/start32.asm b/src/start32.asm
index 1aa15fc..1e3121f 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -13,7 +13,7 @@ MB_CHECKSUM          equ -(MB_HEADER_MAGIC + MB_HEADER_FLAGS)
 
 VWIDTH  equ 640
 VHEIGHT equ 480
-VDEPTH  equ 24
+VDEPTH  equ 32
 
 multiboot:
 	dd MB_HEADER_MAGIC
@@ -194,12 +194,11 @@ add esp, 4
 	add esp, 36	;Clean reserved uitoa return string from stack
 
 	; Draw a test pixel to bottom right corner
-	mov eax, 0xff
-	mov ebx, 767
-	mov ecx, 1023
 	push 0xff
-	push 479
-	push 639
+	push 0xff
+	push 0xff
+	push VHEIGHT-1
+	push VWIDTH-1
 	call putpixel
 	add esp, 3*4
 
@@ -210,13 +209,17 @@ rOSkalogodraw:
 	mov ecx, 0	;x
 .loop:
 	lodsb
-	push eax
-	push ebx
-	push ecx
+	push eax		;b
+	push eax		;g
+	push eax		;r
+	push ebx		;y
+	push ecx		;x
 	call putpixel
 	pop ecx
 	pop ebx
 	pop eax
+	pop eax
+	pop eax
 
 	inc ecx
 	cmp byte cl, [roskalogo.w]

From 32ccb3abd176002669a8f6e9e719b1887b7adf92 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Fri, 16 Aug 2024 18:22:30 +0300
Subject: [PATCH 07/15] Automating image-file creation

---
 Makefile | 29 +++++++++++++++++++++++++----
 grub.cfg |  3 +++
 2 files changed, 28 insertions(+), 4 deletions(-)
 create mode 100644 grub.cfg

diff --git a/Makefile b/Makefile
index 7864526..72c8af7 100644
--- a/Makefile
+++ b/Makefile
@@ -4,13 +4,13 @@ clean:
 
 start32.bin: src/*
 	fasm src/start32.asm start32.bin
-image: start32.bin mount
+image: start32.bin mount grub-cfg roska.img mnt/roska/
 	cp start32.bin mnt/roska/
 	sync
 
 qemu-multiboot: start32.bin
 	qemu-system-i386 -kernel start32.bin -serial stdio
-qemu-image: image
+qemu-image: image roska.img
 	qemu-system-i386 roska.img -serial stdio
 
 mount: roska.img mnt/
@@ -18,8 +18,29 @@ mount: roska.img mnt/
 		sudo mount -o loop,offset=1048576,umask=177,dmask=022,uid=$(shell id -u),gid=$(shell id -g) roska.img mnt/; \
 	fi;
 umount:
-	@sudo umount mnt
+	@if mountpoint -q "mnt/"; then \
+		sudo umount mnt/; \
+	fi;
 mnt/:
-	@mkdir mnt
+	@mkdir -p mnt
+mnt/roska/: mount roska.img
+	@mkdir -p mnt/roska
 build/:
 	@mkdir build
+
+roska.img: mnt/
+	dd if=/dev/zero of=roska.img bs=16M count=1
+	echo 'type=83' | sudo sfdisk roska.img
+	sudo losetup /dev/loop0 roska.img
+	sudo losetup /dev/loop1 roska.img -o1048576
+	sudo mkdosfs -F32 -f 2 /dev/loop1
+	sudo mount /dev/loop1 mnt/
+	sudo grub-install --target=i386-pc --root-directory=mnt --boot-directory=mnt/boot --no-floppy --modules="normal part_msdos multiboot" /dev/loop0
+	sudo umount mnt/
+	sudo losetup -d /dev/loop1
+	sudo losetup -d /dev/loop0
+grub-cfg: grub.cfg mount
+	cp grub.cfg mnt/boot/grub/grub.cfg
+lo-unsetup: umount
+	sudo losetup -d /dev/loop1
+	sudo losetup -d /dev/loop0
diff --git a/grub.cfg b/grub.cfg
new file mode 100644
index 0000000..30eab69
--- /dev/null
+++ b/grub.cfg
@@ -0,0 +1,3 @@
+menuentry "rOSka" {
+   multiboot /roska/start32.bin
+}

From 7a22e4aed728eb0b5fa0cee700c70bf9928c31d4 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 17 Aug 2024 00:37:07 +0300
Subject: [PATCH 08/15] Follow C calling convention (futureproofing) and
 utilize macros

---
 src/framebuffer.asm |  14 ++-
 src/mbootinfo.asm   |  16 ++--
 src/serial.asm      |  12 ++-
 src/start32.asm     | 229 ++++++++++++++++++--------------------------
 4 files changed, 115 insertions(+), 156 deletions(-)

diff --git a/src/framebuffer.asm b/src/framebuffer.asm
index 377ba9a..e7168b0 100644
--- a/src/framebuffer.asm
+++ b/src/framebuffer.asm
@@ -1,11 +1,19 @@
+macro kputpixel x, y, r, g, b {
+	push b		;b
+	push g		;g
+	push r		;r
+	push y		;y
+	push x		;x
+	call putpixel
+	add esp, 4*5
+}
+
 ;; x, y, r, g, b
 putpixel:
 	push ebp
 	mov ebp, esp
 
-	push eax
 	push ebx
-	push ecx
 	push edi
 
 	; check pixel is in screen
@@ -58,9 +66,7 @@ putpixel:
 	stosb
 .done:
 	pop edi
-	pop ecx
 	pop ebx
-	pop eax
 
 	pop ebp
 	ret
diff --git a/src/mbootinfo.asm b/src/mbootinfo.asm
index d7425f0..3c3db73 100644
--- a/src/mbootinfo.asm
+++ b/src/mbootinfo.asm
@@ -1,7 +1,6 @@
 mbootgetinfo:
 	push ebp
 	mov ebp, esp
-	push ebx
 	push esi
 	push edi
 	cld
@@ -10,23 +9,23 @@ mbootgetinfo:
 	cmp eax, 0x2badb002
 	jne mbootnomagic
 
-	mov ebx, [ebp+12]
-	mov eax, [ebx]
+	mov edx, [ebp+12]
+	mov eax, [edx]
 	mov [mbootinfo.flags], eax
 
 	;; Get memoryinformation
 	test eax, 1b
 	jz mbootnomeminfo
-	mov eax, [ebx+4]
+	mov eax, [edx+4]
 	mov [mbootinfo.mem_lower], eax
-	mov eax, [ebx+8]
+	mov eax, [edx+8]
 	mov [mbootinfo.mem_upper], eax
 
 	;; Get videoinformation
 	test [mbootinfo.flags], (1 shl 02)
 	jz mbootnovideoinfo
 
-	mov esi, ebx
+	mov esi, edx
 	add esi, 88
 	mov eax, [esi]
 	mov [mbootinfo.fb_addr], eax
@@ -64,13 +63,12 @@ mbootgetinfo:
 .bytesppcalc:
 	xor eax, eax
 	mov al, [mbootinfo.fb_bpp]
-	mov ebx, 8
-	div bl
+	mov edx, 8
+	div dl
 	mov [mbootinfo.fb_bytespp], al
 .done:
 	pop edi
 	pop esi
-	pop ebx
 	pop ebp
 	ret
 
diff --git a/src/serial.asm b/src/serial.asm
index b4e3353..c46b511 100644
--- a/src/serial.asm
+++ b/src/serial.asm
@@ -1,9 +1,14 @@
 SERIAL_PORT equ 0x3f8
 serialinitialized db 0
 
-serialinit:
-	push ax
+; Write null terminated string in address str_pointer to serial
+macro serw str_pointer {
+	push str_pointer
+	call serialwrite
+	add esp, 4
+}
 
+serialinit:
 	;Disable ints
 	mov dx, SERIAL_PORT+1
 	mov al, 0x00
@@ -54,7 +59,6 @@ serialinit:
 	out dx, al
 	mov [serialinitialized], 1
 .end:
-	pop ax
 	ret
 .errormsg db "Serial init failed", 0
 
@@ -64,7 +68,6 @@ serialwrite:
 	push ebp
 	mov ebp, esp
 	push esi
-	push ax
 	cld
 	mov esi, [ebp+8]
 .loop:
@@ -80,7 +83,6 @@ serialwrite:
 	out dx, al
 	jmp .loop
 .done:
-	pop ax
 	pop esi
 	pop ebp
 	ret
diff --git a/src/start32.asm b/src/start32.asm
index 1e3121f..b6cb689 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -29,6 +29,13 @@ multiboot:
 	dd VHEIGHT	; video height
 	dd VDEPTH	; video depth
 
+; Includes yayyy
+include "src/serial.asm"
+include "src/mbootinfo.asm"
+include "src/itoa.asm"
+include "src/framebuffer.asm"
+include "src/roskalogoraw.asm"
+
 start:
 	; Setup stack
 	mov ebp, stack_top
@@ -38,16 +45,13 @@ start:
 	push eax
 
 	call serialinit
-	push stuff.bootmsg
-	call serialwrite
-	add esp, 4
+
+	serw stuff.bootmsg
 
 	call mbootgetinfo
 	add esp, 2*4
 
-	push stuff.fbaddrmsgpfx
-	call serialwrite
-	add esp, 4
+	serw stuff.fbaddrmsgpfx
 
 	sub esp, 36	;Reserve stack for return
 	push dword esp	;Destination address
@@ -55,36 +59,24 @@ start:
 	push dword [mbootinfo.fb_addr]	;source
 	call __uitoa
 	add esp, 3*4
-	push esp
-	call serialwrite
-	add esp, 4
+	serw esp
 
-	push stuff.fbdimensionsmsgpfx
-	call serialwrite
-	add esp, 4
+	serw stuff.fbdimensionsmsgpfx
 	push dword esp	;destination address
 	push dword 10	;base
 	push dword [mbootinfo.fb_width]
 	call __uitoa
 	add esp, 3*4
-	push esp
-	call serialwrite
-	add esp, 4
-	push stuff.x
-	call serialwrite
-	add esp, 4
+	serw esp
+	serw stuff.x
 
 	push dword esp	;destination address
 	push dword 10	;base
 	push dword [mbootinfo.fb_height]
 	call __uitoa
 	add esp, 3*4
-	push esp
-	call serialwrite
-	add esp, 4
-	push stuff.x
-	call serialwrite
-	add esp, 4
+	serw esp
+	serw stuff.x
 
 	push dword esp	;destination address
 	push dword 10	;base
@@ -93,115 +85,87 @@ start:
 	push dword eax
 	call __uitoa
 	add esp, 3*4
-	push esp
+	serw esp
+
+
+	serw stuff.rpostxt
+
+	push dword esp
+	push dword 10
+	xor eax, eax
+	mov al, [mbootinfo.fb_rpos]
+	push dword eax
+	call __uitoa
+	add esp, 3*4
+	serw esp
+
+	serw stuff.gpostxt
+
+	push dword esp
+	push dword 10
+	xor eax, eax
+	mov al, [mbootinfo.fb_gpos]
+	push dword eax
+	call __uitoa
+	add esp, 3*4
+	serw esp
+
+	serw stuff.bpostxt
+
+	push dword esp
+	push dword 10
+	xor eax, eax
+	mov al, [mbootinfo.fb_bpos]
+	push dword eax
+	call __uitoa
+	add esp, 3*4
+	serw esp
+
+
+
+	push stuff.rmasksizetxt
 	call serialwrite
 	add esp, 4
 
+	push dword esp
+	push dword 10
+	xor eax, eax
+	mov al, [mbootinfo.fb_rmasksize]
+	push dword eax
+	call __uitoa
+	add esp, 3*4
+	serw esp
 
-push stuff.rpostxt
-call serialwrite
-add esp, 4
+	push stuff.gmasksizetxt
+	call serialwrite
+	add esp, 4
 
-push dword esp
-push dword 10
-xor eax, eax
-mov al, [mbootinfo.fb_rpos]
-push dword eax
-call __uitoa
-add esp, 3*4
-push esp
-call serialwrite
-add esp, 4
+	push dword esp
+	push dword 10
+	xor eax, eax
+	mov al, [mbootinfo.fb_gmasksize]
+	push dword eax
+	call __uitoa
+	add esp, 3*4
+	serw esp
 
-push stuff.gpostxt
-call serialwrite
-add esp, 4
-
-push dword esp
-push dword 10
-xor eax, eax
-mov al, [mbootinfo.fb_gpos]
-push dword eax
-call __uitoa
-add esp, 3*4
-push esp
-call serialwrite
-add esp, 4
-
-push stuff.bpostxt
-call serialwrite
-add esp, 4
-
-push dword esp
-push dword 10
-xor eax, eax
-mov al, [mbootinfo.fb_bpos]
-push dword eax
-call __uitoa
-add esp, 3*4
-push esp
-call serialwrite
-add esp, 4
-
-
-
-push stuff.rmasksizetxt
-call serialwrite
-add esp, 4
-
-push dword esp
-push dword 10
-xor eax, eax
-mov al, [mbootinfo.fb_rmasksize]
-push dword eax
-call __uitoa
-add esp, 3*4
-push esp
-call serialwrite
-add esp, 4
-
-push stuff.gmasksizetxt
-call serialwrite
-add esp, 4
-
-push dword esp
-push dword 10
-xor eax, eax
-mov al, [mbootinfo.fb_gmasksize]
-push dword eax
-call __uitoa
-add esp, 3*4
-push esp
-call serialwrite
-add esp, 4
-
-push stuff.bmasksizetxt
-call serialwrite
-add esp, 4
-
-push dword esp
-push dword 10
-xor eax, eax
-mov al, [mbootinfo.fb_bmasksize]
-push dword eax
-call __uitoa
-add esp, 3*4
-push esp
-call serialwrite
-add esp, 4
+	serw stuff.bmasksizetxt
 
+	push dword esp
+	push dword 10
+	xor eax, eax
+	mov al, [mbootinfo.fb_bmasksize]
+	push dword eax
+	call __uitoa
+	add esp, 3*4
+	serw esp
 
 	add esp, 36	;Clean reserved uitoa return string from stack
 
-	; Draw a test pixel to bottom right corner
-	push 0xff
-	push 0xff
-	push 0xff
-	push VHEIGHT-1
-	push VWIDTH-1
-	call putpixel
-	add esp, 3*4
+	; Draw a green test pixel to bottom-right
+	kputpixel VWIDTH-1, VHEIGHT-1, 0x00, 0xff, 0x00
 
+; Draw a predefined logo in magenta to top-left
 rOSkalogodraw:
 	mov esi, roskalogo
 	mov eax, 0	;Brightness
@@ -209,17 +173,12 @@ rOSkalogodraw:
 	mov ecx, 0	;x
 .loop:
 	lodsb
-	push eax		;b
-	push eax		;g
-	push eax		;r
-	push ebx		;y
-	push ecx		;x
-	call putpixel
+
+	push ecx
+	push eax
+	kputpixel ecx, ebx, eax, 0x00, eax
+	pop eax
 	pop ecx
-	pop ebx
-	pop eax
-	pop eax
-	pop eax
 
 	inc ecx
 	cmp byte cl, [roskalogo.w]
@@ -242,12 +201,6 @@ hang:
 	jmp .loop
 .msg db 10, "Halting...", 10, 0
 
-include "src/serial.asm"
-include "src/mbootinfo.asm"
-include "src/itoa.asm"
-include "src/framebuffer.asm"
-include "src/roskalogoraw.asm"
-
 stuff:
 	.bootmsg db 10, "=== rOSka ===", 10, 0
 	.fbaddrmsgpfx db 10, "Framebuffer address: 0x", 0

From c2e69b6f7f320e8457274d2d935bb4536162e6bb Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 17 Aug 2024 06:21:47 +0300
Subject: [PATCH 09/15] More and advanceder macros

---
 src/framebuffer.asm |   2 +-
 src/itoa.asm        |   8 +++
 src/serial.asm      |   2 +-
 src/start32.asm     | 123 ++++++++++----------------------------------
 4 files changed, 37 insertions(+), 98 deletions(-)

diff --git a/src/framebuffer.asm b/src/framebuffer.asm
index e7168b0..e58e16e 100644
--- a/src/framebuffer.asm
+++ b/src/framebuffer.asm
@@ -1,4 +1,4 @@
-macro kputpixel x, y, r, g, b {
+macro kputpixel x*, y*, r*, g*, b* {
 	push b		;b
 	push g		;g
 	push r		;r
diff --git a/src/itoa.asm b/src/itoa.asm
index 914b214..429f9cf 100644
--- a/src/itoa.asm
+++ b/src/itoa.asm
@@ -26,6 +26,14 @@
 ; ECX: Target address (active)
 ; EDX: Target address (temporary)
 ;
+macro kuitoa src*, dest*, base* {
+	push dest
+	push base
+	push src
+	call __uitoa
+	add esp, 3*4
+}
+
 __uitoa:
 .start:
 	push ebp
diff --git a/src/serial.asm b/src/serial.asm
index c46b511..2699f01 100644
--- a/src/serial.asm
+++ b/src/serial.asm
@@ -2,7 +2,7 @@ SERIAL_PORT equ 0x3f8
 serialinitialized db 0
 
 ; Write null terminated string in address str_pointer to serial
-macro serw str_pointer {
+macro serw [str_pointer*] {
 	push str_pointer
 	call serialwrite
 	add esp, 4
diff --git a/src/start32.asm b/src/start32.asm
index b6cb689..b72db5e 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -51,114 +51,46 @@ start:
 	call mbootgetinfo
 	add esp, 2*4
 
-	serw stuff.fbaddrmsgpfx
-
 	sub esp, 36	;Reserve stack for return
-	push dword esp	;Destination address
-	push dword 16	;Base
-	push dword [mbootinfo.fb_addr]	;source
-	call __uitoa
-	add esp, 3*4
-	serw esp
+	kuitoa [mbootinfo.fb_addr], esp, 16
+	serw stuff.fbaddrmsgpfx, esp
 
-	serw stuff.fbdimensionsmsgpfx
-	push dword esp	;destination address
-	push dword 10	;base
-	push dword [mbootinfo.fb_width]
-	call __uitoa
-	add esp, 3*4
-	serw esp
-	serw stuff.x
+	kuitoa [mbootinfo.fb_width], esp, 10
+	serw stuff.fbdimensionsmsgpfx, esp, stuff.x
 
-	push dword esp	;destination address
-	push dword 10	;base
-	push dword [mbootinfo.fb_height]
-	call __uitoa
-	add esp, 3*4
-	serw esp
-	serw stuff.x
+	kuitoa [mbootinfo.fb_height], esp, 10
+	serw esp, stuff.x
 
-	push dword esp	;destination address
-	push dword 10	;base
-	xor eax, eax
-	mov al, [mbootinfo.fb_bpp]
-	push dword eax
-	call __uitoa
-	add esp, 3*4
+	movzx eax, byte [mbootinfo.fb_bpp]
+	kuitoa eax, esp, 10
 	serw esp
 
 
-	serw stuff.rpostxt
+	movzx eax, byte [mbootinfo.fb_rpos]
+	kuitoa eax, esp, 10
+	serw stuff.rpostxt, esp
 
-	push dword esp
-	push dword 10
-	xor eax, eax
-	mov al, [mbootinfo.fb_rpos]
-	push dword eax
-	call __uitoa
-	add esp, 3*4
-	serw esp
+	movzx eax, byte [mbootinfo.fb_gpos]
+	kuitoa eax, esp, 10
+	serw stuff.gpostxt, esp
 
-	serw stuff.gpostxt
-
-	push dword esp
-	push dword 10
-	xor eax, eax
-	mov al, [mbootinfo.fb_gpos]
-	push dword eax
-	call __uitoa
-	add esp, 3*4
-	serw esp
-
-	serw stuff.bpostxt
-
-	push dword esp
-	push dword 10
-	xor eax, eax
-	mov al, [mbootinfo.fb_bpos]
-	push dword eax
-	call __uitoa
-	add esp, 3*4
-	serw esp
+	movzx eax, byte [mbootinfo.fb_bpos]
+	kuitoa eax, esp, 10
+	serw stuff.bpostxt, esp
 
 
 
-	push stuff.rmasksizetxt
-	call serialwrite
-	add esp, 4
+	movzx eax, byte [mbootinfo.fb_rmasksize]
+	kuitoa eax, esp, 10
+	serw stuff.rmasksizetxt, esp
 
-	push dword esp
-	push dword 10
-	xor eax, eax
-	mov al, [mbootinfo.fb_rmasksize]
-	push dword eax
-	call __uitoa
-	add esp, 3*4
-	serw esp
+	movzx eax, byte [mbootinfo.fb_gmasksize]
+	kuitoa eax, esp, 10
+	serw stuff.gmasksizetxt, esp
 
-	push stuff.gmasksizetxt
-	call serialwrite
-	add esp, 4
-
-	push dword esp
-	push dword 10
-	xor eax, eax
-	mov al, [mbootinfo.fb_gmasksize]
-	push dword eax
-	call __uitoa
-	add esp, 3*4
-	serw esp
-
-	serw stuff.bmasksizetxt
-
-	push dword esp
-	push dword 10
-	xor eax, eax
-	mov al, [mbootinfo.fb_bmasksize]
-	push dword eax
-	call __uitoa
-	add esp, 3*4
-	serw esp
+	movzx eax, byte [mbootinfo.fb_bmasksize]
+	kuitoa eax, esp, 10
+	serw stuff.bmasksizetxt, esp
 
 	add esp, 36	;Clean reserved uitoa return string from stack
 
@@ -193,8 +125,7 @@ jmp hang
 
 
 hang:
-	push .msg
-	call serialwrite
+	serw .msg
 	cli
 .loop:
 	hlt

From 0d9fcf5ae4bf3b1a2a1f25dc2391a13ee28d89c5 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 17 Aug 2024 19:16:53 +0300
Subject: [PATCH 10/15] BOCHS debugging stuff

---
 .gitignore  |  1 +
 Makefile    |  9 ++++-----
 bochsrc.txt | 13 +++++++++++++
 3 files changed, 18 insertions(+), 5 deletions(-)
 create mode 100644 bochsrc.txt

diff --git a/.gitignore b/.gitignore
index 770baf3..e9c4c3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
 *.bin
 mnt/
 build/
+bx_enh_dbg.ini
diff --git a/Makefile b/Makefile
index 72c8af7..0826a2a 100644
--- a/Makefile
+++ b/Makefile
@@ -8,11 +8,10 @@ image: start32.bin mount grub-cfg roska.img mnt/roska/
 	cp start32.bin mnt/roska/
 	sync
 
-qemu-multiboot: start32.bin
-	qemu-system-i386 -kernel start32.bin -serial stdio
-qemu-image: image roska.img
+qemu-run: image roska.img
 	qemu-system-i386 roska.img -serial stdio
-
+bochs-run: image roska.img
+	bochs -qf bochsrc.txt
 mount: roska.img mnt/
 	@if ! mountpoint -q "mnt/"; then \
 		sudo mount -o loop,offset=1048576,umask=177,dmask=022,uid=$(shell id -u),gid=$(shell id -g) roska.img mnt/; \
@@ -29,7 +28,7 @@ build/:
 	@mkdir build
 
 roska.img: mnt/
-	dd if=/dev/zero of=roska.img bs=16M count=1
+	dd if=/dev/zero of=roska.img bs=1k count=16128
 	echo 'type=83' | sudo sfdisk roska.img
 	sudo losetup /dev/loop0 roska.img
 	sudo losetup /dev/loop1 roska.img -o1048576
diff --git a/bochsrc.txt b/bochsrc.txt
new file mode 100644
index 0000000..f13fbe5
--- /dev/null
+++ b/bochsrc.txt
@@ -0,0 +1,13 @@
+display_library:	x, options="gui_debug"
+magic_break:	enabled=1
+romimage:	file=$BXSHARE/BIOS-bochs-legacy
+vgaromimage:	file=$BXSHARE/VGABIOS-lgpl-latest
+clock:	sync=realtime
+cpu:	ips=4294967295, reset_on_triple_fault=false
+megs:	128
+ata0:	enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
+ata0-master:	type=disk, mode=flat, path=roska.img, cylinders=32, heads=16, spt=63
+boot:	disk
+
+# Use `bximage` to get disk geometry
+# TODO: Figure out how to get sensible TTY serial

From f9e2dc33e904fa2cbaac0ab2d08a86335d99b41c Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 17 Aug 2024 20:21:04 +0300
Subject: [PATCH 11/15] Made __uitoa comply with our calling convention

Changed __uitoa order of arguments from
  src,base,target
to
  src,target,base
Also returns target in EAX
---
 src/itoa.asm    | 23 +++++++++++++----------
 src/start32.asm | 43 ++++++++++++++++++++++---------------------
 2 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/src/itoa.asm b/src/itoa.asm
index 429f9cf..3985f9d 100644
--- a/src/itoa.asm
+++ b/src/itoa.asm
@@ -1,8 +1,12 @@
 ;; Modified from: https://gist.github.com/SplittyDev/8e728627012e57ac0deac196660014fb
 
+; __itoa(src int, target addr, base)
+;target address returned in EAX
+;EBX, EBP, ESP preserved as our calling convention,
+;refer to docs or something
+
 ;
 ; Routine to convert a 32-bit integer to a string.
-; Registers are preserved.
 ;
 ; EAX: Source integer
 ; EBX: Target address
@@ -26,9 +30,13 @@
 ; ECX: Target address (active)
 ; EDX: Target address (temporary)
 ;
+; return:
+; put original target at EAX
+; (we trust this blindly)
+
 macro kuitoa src*, dest*, base* {
-	push dest
 	push base
+	push dest
 	push src
 	call __uitoa
 	add esp, 3*4
@@ -39,14 +47,11 @@ __uitoa:
 	push ebp
 	mov ebp, esp
 
-	push eax
 	push ebx
-	push ecx
-	push edx
 
 	mov eax, [ebp+8]
-	mov ecx, [ebp+12]
-	mov ebx, [ebp+16]
+	mov ebx, [ebp+12]
+	mov ecx, [ebp+16]
 
 	mov edx, ecx
 	mov ecx, ebx
@@ -83,11 +88,9 @@ __uitoa:
 	dec ecx
 	jmp .reverse
 .end:
-	pop edx
-	pop ecx
 	pop ebx
-	pop eax
 
+	mov eax, [ebp+12]	; Return target address
 	pop ebp
 	ret
 
diff --git a/src/start32.asm b/src/start32.asm
index b72db5e..a196470 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -52,45 +52,46 @@ start:
 	add esp, 2*4
 
 	sub esp, 36	;Reserve stack for return
-	kuitoa [mbootinfo.fb_addr], esp, 16
-	serw stuff.fbaddrmsgpfx, esp
+	mov ebx, esp	;Store str buff addr
 
-	kuitoa [mbootinfo.fb_width], esp, 10
-	serw stuff.fbdimensionsmsgpfx, esp, stuff.x
+	kuitoa [mbootinfo.fb_addr], ebx, 16
+	serw stuff.fbaddrmsgpfx, ebx
 
-	kuitoa [mbootinfo.fb_height], esp, 10
-	serw esp, stuff.x
+	kuitoa [mbootinfo.fb_width], ebx, 10
+	serw stuff.fbdimensionsmsgpfx, ebx, stuff.x
+
+	kuitoa [mbootinfo.fb_height], ebx, 10
+	serw ebx, stuff.x
 
 	movzx eax, byte [mbootinfo.fb_bpp]
-	kuitoa eax, esp, 10
-	serw esp
+	kuitoa eax, ebx, 10
+	serw ebx
 
 
 	movzx eax, byte [mbootinfo.fb_rpos]
-	kuitoa eax, esp, 10
-	serw stuff.rpostxt, esp
+	kuitoa eax, ebx, 10
+	serw stuff.rpostxt, ebx
 
 	movzx eax, byte [mbootinfo.fb_gpos]
-	kuitoa eax, esp, 10
-	serw stuff.gpostxt, esp
+	kuitoa eax, ebx, 10
+	serw stuff.gpostxt, ebx
 
 	movzx eax, byte [mbootinfo.fb_bpos]
-	kuitoa eax, esp, 10
-	serw stuff.bpostxt, esp
-
+	kuitoa eax, ebx, 10
+	serw stuff.bpostxt, ebx
 
 
 	movzx eax, byte [mbootinfo.fb_rmasksize]
-	kuitoa eax, esp, 10
-	serw stuff.rmasksizetxt, esp
+	kuitoa eax, ebx, 10
+	serw stuff.rmasksizetxt, ebx
 
 	movzx eax, byte [mbootinfo.fb_gmasksize]
-	kuitoa eax, esp, 10
-	serw stuff.gmasksizetxt, esp
+	kuitoa eax, ebx, 10
+	serw stuff.gmasksizetxt, ebx
 
 	movzx eax, byte [mbootinfo.fb_bmasksize]
-	kuitoa eax, esp, 10
-	serw stuff.bmasksizetxt, esp
+	kuitoa eax, ebx, 10
+	serw stuff.bmasksizetxt, ebx
 
 	add esp, 36	;Clean reserved uitoa return string from stack
 

From 091f7cb4b842c3296f3c1c590adf1067588ef30a Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 17 Aug 2024 20:25:42 +0300
Subject: [PATCH 12/15] Bochs: serial to file

---
 .gitignore  | 1 +
 Makefile    | 1 +
 bochsrc.txt | 3 ++-
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index e9c4c3e..97fbd68 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
 mnt/
 build/
 bx_enh_dbg.ini
+serial.out
diff --git a/Makefile b/Makefile
index 0826a2a..0ecd477 100644
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,7 @@ image: start32.bin mount grub-cfg roska.img mnt/roska/
 qemu-run: image roska.img
 	qemu-system-i386 roska.img -serial stdio
 bochs-run: image roska.img
+	touch serial.out
 	bochs -qf bochsrc.txt
 mount: roska.img mnt/
 	@if ! mountpoint -q "mnt/"; then \
diff --git a/bochsrc.txt b/bochsrc.txt
index f13fbe5..32dc163 100644
--- a/bochsrc.txt
+++ b/bochsrc.txt
@@ -10,4 +10,5 @@ ata0-master:	type=disk, mode=flat, path=roska.img, cylinders=32, heads=16, spt=6
 boot:	disk
 
 # Use `bximage` to get disk geometry
-# TODO: Figure out how to get sensible TTY serial
+# Serial is piped to serial.out for your `tail`ing sweetness
+com1:	enabled=1, mode=file, dev=serial.out

From 57dd60bcef105ad3354db4f366cf552cab48f6c2 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Sat, 24 Aug 2024 15:56:51 +0300
Subject: [PATCH 13/15] Started making an ASCII font

---
 src/font.asm | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 src/font.asm

diff --git a/src/font.asm b/src/font.asm
new file mode 100644
index 0000000..e8136a4
--- /dev/null
+++ b/src/font.asm
@@ -0,0 +1,89 @@
+;;; Resolution: 8x16
+kfontbasicascii:
+	;; 0	NULL
+	db 11001100b
+	db 11001100b
+	db 00110011b
+	db 00110011b
+	db 11001100b
+	db 11001100b
+	db 00110011b
+	db 00110011b
+	db 11001100b
+	db 11001100b
+	db 00110011b
+	db 00110011b
+	db 11001100b
+	db 11001100b
+	db 00110011b
+	db 00110011b
+	;; 1-31 control characters
+	rb 30*16
+	;; 32	Space
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	;; 33	!
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00011000b
+	db 00011000b
+	db 00011000b
+	db 00011000b
+	db 00011000b
+	db 00011000b
+	db 00011000b
+	db 00011000b
+	db 00000000b
+	db 00000000b
+	db 00011000b
+	db 00011000b
+	db 00000000b
+	;; 34	"
+	db 00000000b
+	db 01100110b
+	db 01100110b
+	db 01100110b
+	db 01100110b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	;; 35	#
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 01100110b
+	db 01100110b
+	db 11111111b
+	db 11111111b
+	db 01100110b
+	db 01100110b
+	db 11111111b
+	db 11111111b
+	db 01100110b
+	db 01100110b
+	db 00000000b
+	db 00000000b
+	db 00000000b

From f344fc52539e3a5ba4ecfb95d1838b586035f77f Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Tue, 14 Jan 2025 20:27:40 +0200
Subject: [PATCH 14/15] Fonting awayy wheeeeee

---
 Makefile        |  4 +++-
 src/font.asm    | 51 ++++++++++---------------------------------------
 src/start32.asm |  4 ++++
 3 files changed, 17 insertions(+), 42 deletions(-)

diff --git a/Makefile b/Makefile
index 0ecd477..695aa47 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,10 @@ all: start32.bin
 clean:
 	-@rm *.bin 2> /dev/null || true
 
-start32.bin: src/*
+start32.bin: src/* font.bin
 	fasm src/start32.asm start32.bin
+font.bin: src/font.asm
+	fasm src/font.asm font.bin
 image: start32.bin mount grub-cfg roska.img mnt/roska/
 	cp start32.bin mnt/roska/
 	sync
diff --git a/src/font.asm b/src/font.asm
index e8136a4..3df2563 100644
--- a/src/font.asm
+++ b/src/font.asm
@@ -1,24 +1,16 @@
-;;; Resolution: 8x16
-kfontbasicascii:
+	format binary
+;;; Resolution: 8x8
 	;; 0	NULL
 	db 11001100b
-	db 11001100b
-	db 00110011b
 	db 00110011b
 	db 11001100b
-	db 11001100b
-	db 00110011b
 	db 00110011b
 	db 11001100b
-	db 11001100b
-	db 00110011b
 	db 00110011b
 	db 11001100b
-	db 11001100b
-	db 00110011b
 	db 00110011b
 	;; 1-31 control characters
-	rb 30*16
+	rb 30*8
 	;; 32	Space
 	db 00000000b
 	db 00000000b
@@ -28,43 +20,19 @@ kfontbasicascii:
 	db 00000000b
 	db 00000000b
 	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
 	;; 33	!
 	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00011000b
-	db 00011000b
-	db 00011000b
-	db 00011000b
 	db 00011000b
 	db 00011000b
 	db 00011000b
 	db 00011000b
 	db 00000000b
-	db 00000000b
 	db 00011000b
 	db 00011000b
-	db 00000000b
 	;; 34	"
 	db 00000000b
 	db 01100110b
 	db 01100110b
-	db 01100110b
-	db 01100110b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
-	db 00000000b
 	db 00000000b
 	db 00000000b
 	db 00000000b
@@ -73,17 +41,18 @@ kfontbasicascii:
 	;; 35	#
 	db 00000000b
 	db 00000000b
-	db 00000000b
-	db 01100110b
 	db 01100110b
 	db 11111111b
-	db 11111111b
-	db 01100110b
 	db 01100110b
 	db 11111111b
-	db 11111111b
-	db 01100110b
 	db 01100110b
 	db 00000000b
+	;; 36	$
 	db 00000000b
+	db 00001000b
+	db 01111110b
+	db 01010000b
+	db 01111110b
+	db 00010010b
+	db 01111110b
 	db 00000000b
diff --git a/src/start32.asm b/src/start32.asm
index a196470..e36b4f7 100644
--- a/src/start32.asm
+++ b/src/start32.asm
@@ -36,6 +36,10 @@ include "src/itoa.asm"
 include "src/framebuffer.asm"
 include "src/roskalogoraw.asm"
 
+align 4096
+font FILE "font.bin"
+align 4096
+
 start:
 	; Setup stack
 	mov ebp, stack_top

From 85da5bf55277fa1db088c1fe23335cf69064b553 Mon Sep 17 00:00:00 2001
From: Jarkko Toivanen <jt@jakest.us>
Date: Fri, 17 Jan 2025 01:39:11 +0200
Subject: [PATCH 15/15] 8x8 >> 8x12 to make font more spacious

---
 src/font.asm | 46 +++++++++++++++++++++++++++++++++++-----------
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/src/font.asm b/src/font.asm
index 3df2563..42d3fd4 100644
--- a/src/font.asm
+++ b/src/font.asm
@@ -1,5 +1,5 @@
 	format binary
-;;; Resolution: 8x8
+;;; Resolution: 8x12
 	;; 0	NULL
 	db 11001100b
 	db 00110011b
@@ -9,8 +9,12 @@
 	db 00110011b
 	db 11001100b
 	db 00110011b
+	db 11001100b
+	db 00110011b
+	db 11001100b
+	db 00110011b
 	;; 1-31 control characters
-	rb 30*8
+	rb 30*12
 	;; 32	Space
 	db 00000000b
 	db 00000000b
@@ -20,19 +24,31 @@
 	db 00000000b
 	db 00000000b
 	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
+	db 00000000b
 	;; 33	!
 	db 00000000b
 	db 00011000b
 	db 00011000b
 	db 00011000b
 	db 00011000b
+	db 00011000b
+	db 00011000b
+	db 00011000b
 	db 00000000b
 	db 00011000b
 	db 00011000b
+	db 00000000b
 	;; 34	"
 	db 00000000b
 	db 01100110b
 	db 01100110b
+	db 01100110b
+	db 00000000b
+	db 00000000b
+	db 00000000b
 	db 00000000b
 	db 00000000b
 	db 00000000b
@@ -40,19 +56,27 @@
 	db 00000000b
 	;; 35	#
 	db 00000000b
-	db 00000000b
-	db 01100110b
-	db 11111111b
-	db 01100110b
-	db 11111111b
-	db 01100110b
+	db 01101100b
+	db 01101100b
+	db 11111110b
+	db 01101100b
+	db 01101100b
+	db 01101100b
+	db 01101100b
+	db 11111110b
+	db 01101100b
+	db 01101100b
 	db 00000000b
 	;; 36	$
 	db 00000000b
-	db 00001000b
+	db 00011000b
 	db 01111110b
-	db 01010000b
+	db 01011000b
 	db 01111110b
-	db 00010010b
+	db 01011000b
+	db 01111110b
+	db 00011010b
+	db 00011010b
+	db 00011010b
 	db 01111110b
 	db 00000000b