Switching back to tabs for indent

This commit is contained in:
Jarkko Toivanen 2023-09-23 21:15:44 +03:00
parent b047235d75
commit e438ef985a
Signed by: jt
GPG key ID: 9151B109B73ECAD5
7 changed files with 412 additions and 412 deletions

View file

@ -9,11 +9,11 @@
* // 8x8 monochrome bitmap fonts for rendering * // 8x8 monochrome bitmap fonts for rendering
* // * //
* // Author: * // Author:
* // Marcel Sondaar * // Marcel Sondaar
* // International Business Machines (public domain VGA fonts) * // International Business Machines (public domain VGA fonts)
* // * //
* // License: * // License:
* // Public Domain * // Public Domain
* *
* Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm
**/ **/
@ -21,132 +21,132 @@
// Constant: font8x8_basic // Constant: font8x8_basic
// Contains an 8x8 font map for unicode points U+0000 - U+007F (basic latin) // Contains an 8x8 font map for unicode points U+0000 - U+007F (basic latin)
char font8x8_basic[128][8] = { char font8x8_basic[128][8] = {
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space)
{ 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!)
{ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (")
{ 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#)
{ 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($)
{ 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%)
{ 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&)
{ 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (')
{ 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (()
{ 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ())
{ 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*)
{ 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,)
{ 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.)
{ 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/)
{ 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0)
{ 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1)
{ 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2)
{ 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3)
{ 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4)
{ 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5)
{ 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6)
{ 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7)
{ 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8)
{ 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9)
{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:)
{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (;) { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (;)
{ 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<)
{ 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=)
{ 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>)
{ 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?)
{ 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@)
{ 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A)
{ 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B)
{ 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C)
{ 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D)
{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E)
{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F)
{ 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G)
{ 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H)
{ 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I)
{ 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J)
{ 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K)
{ 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L)
{ 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M)
{ 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N)
{ 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O)
{ 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P)
{ 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q)
{ 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R)
{ 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S)
{ 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T)
{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U)
{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V)
{ 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W)
{ 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X)
{ 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y)
{ 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z)
{ 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([)
{ 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\)
{ 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (])
{ 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_)
{ 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`)
{ 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a)
{ 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b)
{ 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c)
{ 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d)
{ 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e)
{ 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f)
{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g)
{ 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h)
{ 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i)
{ 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j)
{ 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k)
{ 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l)
{ 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m)
{ 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n)
{ 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o)
{ 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p)
{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q)
{ 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r)
{ 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s)
{ 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t)
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u)
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v)
{ 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w)
{ 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x)
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y)
{ 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z)
{ 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({)
{ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|)
{ 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (})
{ 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F
}; };

View file

@ -9,77 +9,77 @@ static unsigned char fb_bpp, fb_bytespp;
static unsigned char fb_rpos, fb_bpos, fb_gpos; static unsigned char fb_rpos, fb_bpos, fb_gpos;
void initfb( void initfb(
unsigned long addr, unsigned long addr,
unsigned short w, unsigned short w,
unsigned short h, unsigned short h,
unsigned char bpp, unsigned char bpp,
unsigned long pitch, unsigned long pitch,
unsigned char rpos, unsigned char rpos,
unsigned char gpos, unsigned char gpos,
unsigned char bpos unsigned char bpos
){ ){
fb_address = addr; fb_address = addr;
fb_pitch = pitch; fb_pitch = pitch;
fb_width = w; fb_width = w;
fb_height = h; fb_height = h;
fb_bpp = bpp; fb_bpp = bpp;
fb_bytespp = bpp/8; fb_bytespp = bpp/8;
fb_rpos = rpos; fb_rpos = rpos;
fb_gpos = gpos; fb_gpos = gpos;
fb_bpos = bpos; fb_bpos = bpos;
} }
void putpixel( void putpixel(
unsigned short x, unsigned short x,
unsigned short y, unsigned short y,
unsigned char r, unsigned char r,
unsigned char g, unsigned char g,
unsigned char b unsigned char b
){ ){
if (x > fb_width || y > fb_height) if (x > fb_width || y > fb_height)
return; return;
unsigned long dest_addr = fb_address + y*fb_pitch + x*fb_bytespp; unsigned long dest_addr = fb_address + y*fb_pitch + x*fb_bytespp;
if (fb_bpp == 32) { if (fb_bpp == 32) {
*((unsigned long *)(dest_addr)) = r<<fb_rpos | g<<fb_gpos | b<<fb_bpos; *((unsigned long *)(dest_addr)) = r<<fb_rpos | g<<fb_gpos | b<<fb_bpos;
} else { } else {
*((unsigned char *)(dest_addr + fb_rpos/8)) = r; *((unsigned char *)(dest_addr + fb_rpos/8)) = r;
*((unsigned char *)(dest_addr + fb_gpos/8)) = g; *((unsigned char *)(dest_addr + fb_gpos/8)) = g;
*((unsigned char *)(dest_addr + fb_bpos/8)) = b; *((unsigned char *)(dest_addr + fb_bpos/8)) = b;
} }
} }
void putchar( void putchar(
unsigned char *character, unsigned char *character,
unsigned short x, unsigned short x,
unsigned short y, unsigned short y,
unsigned char r, unsigned char r,
unsigned char g, unsigned char g,
unsigned char b unsigned char b
){ ){
// Limit to ASCII printable // Limit to ASCII printable
if (*character < 0x20) { if (*character < 0x20) {
serial_write_string("\nASCII too low"); serial_write_string("\nASCII too low");
return; return;
} }
if (*character > 0x7e) { if (*character > 0x7e) {
serial_write_string("\nASCII too hihg"); serial_write_string("\nASCII too hihg");
return; return;
} }
unsigned char *rowdata = font8x8_basic[*character]; unsigned char *rowdata = font8x8_basic[*character];
unsigned char charx, chary, iy, ix; unsigned char charx, chary, iy, ix;
unsigned char sizex=2; unsigned char sizex=5;
unsigned char sizey=2; unsigned char sizey=5;
for (chary=0;chary<8;chary++) { for (chary=0;chary<8;chary++) {
for (charx=0;charx<8;charx++) { for (charx=0;charx<8;charx++) {
unsigned char pix = rowdata[chary] & 1 << charx; unsigned char pix = rowdata[chary] & 1 << charx;
if (pix) { if (pix) {
for (iy=1;iy<=sizey;iy++) { for (iy=1;iy<=sizey;iy++) {
for (ix=1;ix<=sizex;ix++) { for (ix=1;ix<=sizex;ix++) {
putpixel(x+charx*sizex+ix, y+chary*sizey+iy, r, g, b); putpixel(x+charx*sizex+ix, y+chary*sizey+iy, r, g, b);
} }
} }
} }
} }
} }
} }

View file

@ -2,28 +2,28 @@
#define _FRAMEBUFFER_H 1 #define _FRAMEBUFFER_H 1
void initfb( void initfb(
unsigned long addr, unsigned long addr,
unsigned short w, unsigned short w,
unsigned short h, unsigned short h,
unsigned char bpp, unsigned char bpp,
unsigned long pitch, unsigned long pitch,
unsigned char rpos, unsigned char rpos,
unsigned char gpos, unsigned char gpos,
unsigned char bpos unsigned char bpos
); );
void putpixel( void putpixel(
unsigned short x, unsigned short x,
unsigned short y, unsigned short y,
unsigned char r, unsigned char r,
unsigned char g, unsigned char g,
unsigned char b unsigned char b
); );
void putchar( void putchar(
unsigned char *character, unsigned char *character,
unsigned short x, unsigned short x,
unsigned short y, unsigned short y,
unsigned char r, unsigned char r,
unsigned char g, unsigned char g,
unsigned char b unsigned char b
); );
#endif #endif

View file

@ -6,93 +6,93 @@
static inline void outb(unsigned short port, unsigned char val) static inline void outb(unsigned short port, unsigned char val)
{ {
asm volatile("outb %0, %1" : : "a"(val), "Nd"(port) : "memory"); asm volatile("outb %0, %1" : : "a"(val), "Nd"(port) : "memory");
} }
static inline unsigned char inb(unsigned short port) static inline unsigned char inb(unsigned short port)
{ {
unsigned char ret; unsigned char ret;
asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory"); asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory");
return ret; return ret;
} }
void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo) void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo)
{ {
// Cursor disabling // Cursor disabling
outb(0x3D4, 0x0A); outb(0x3D4, 0x0A);
outb(0x3D5, 0x20); outb(0x3D5, 0x20);
int serial_initialized = serial_init(); int serial_initialized = serial_init();
serial_write_string("\n=== rOSka ===\n"); serial_write_string("\n=== rOSka ===\n");
// Check multiboot header // Check multiboot header
if (mbootmagick != MULTIBOOT_BOOTLOADER_MAGIC) { if (mbootmagick != MULTIBOOT_BOOTLOADER_MAGIC) {
return; return;
} }
serial_write_string("\nMultiboot flags: "); serial_write_string("\nMultiboot flags: ");
serial_write_string(itoa(mbootinfo->flags, 2)); serial_write_string(itoa(mbootinfo->flags, 2));
// Check videomode // Check videomode
if (mbootinfo->flags & MULTIBOOT_INFO_VBE_INFO) { if (mbootinfo->flags & MULTIBOOT_INFO_VBE_INFO) {
serial_write_string("\nVBE Mode: 0x"); serial_write_string("\nVBE Mode: 0x");
serial_write_string(itoa(mbootinfo->vbe_mode, 16)); serial_write_string(itoa(mbootinfo->vbe_mode, 16));
} }
if (!(mbootinfo->flags & MULTIBOOT_INFO_FRAMEBUFFER_INFO)) { if (!(mbootinfo->flags & MULTIBOOT_INFO_FRAMEBUFFER_INFO)) {
serial_write_string("\nVideo info not available"); serial_write_string("\nVideo info not available");
return; return;
} }
serial_write_string("\nFramebuffer: "); serial_write_string("\nFramebuffer: ");
serial_write_string("\n Address: 0x"); serial_write_string("\n Address: 0x");
serial_write_string(ultoa(mbootinfo->framebuffer_addr, 16)); serial_write_string(ultoa(mbootinfo->framebuffer_addr, 16));
serial_write_string("\n Dimensions: "); serial_write_string("\n Dimensions: ");
serial_write_string(itoa(mbootinfo->framebuffer_width, 10)); serial_write_string(itoa(mbootinfo->framebuffer_width, 10));
serial_write_string("X"); serial_write_string("X");
serial_write_string(itoa(mbootinfo->framebuffer_height, 10)); serial_write_string(itoa(mbootinfo->framebuffer_height, 10));
serial_write_string("x"); serial_write_string("x");
serial_write_string(itoa(mbootinfo->framebuffer_bpp, 10)); serial_write_string(itoa(mbootinfo->framebuffer_bpp, 10));
serial_write_string("\n Pitch: "); serial_write_string("\n Pitch: ");
serial_write_string(itoa(mbootinfo->framebuffer_pitch, 10)); serial_write_string(itoa(mbootinfo->framebuffer_pitch, 10));
serial_write_string("\n RPos:"); serial_write_string("\n RPos:");
serial_write_string(itoa(mbootinfo->framebuffer_red_field_position, 10)); serial_write_string(itoa(mbootinfo->framebuffer_red_field_position, 10));
serial_write_string("\n GPos:"); serial_write_string("\n GPos:");
serial_write_string(itoa(mbootinfo->framebuffer_green_field_position, 10)); serial_write_string(itoa(mbootinfo->framebuffer_green_field_position, 10));
serial_write_string("\n BPos:"); serial_write_string("\n BPos:");
serial_write_string(itoa(mbootinfo->framebuffer_blue_field_position, 10)); serial_write_string(itoa(mbootinfo->framebuffer_blue_field_position, 10));
serial_write_string("\nMemory: "); serial_write_string("\nMemory: ");
serial_write_string("\n lower: "); serial_write_string("\n lower: ");
serial_write_string(uitoa(mbootinfo->mem_lower, 10)); serial_write_string(uitoa(mbootinfo->mem_lower, 10));
serial_write_string(" k"); serial_write_string(" k");
serial_write_string("\n upper: "); serial_write_string("\n upper: ");
serial_write_string(uitoa(mbootinfo->mem_upper/1024, 10)); serial_write_string(uitoa(mbootinfo->mem_upper/1024, 10));
serial_write_string(" M"); serial_write_string(" M");
initfb( initfb(
mbootinfo->framebuffer_addr, mbootinfo->framebuffer_addr,
mbootinfo->framebuffer_width, mbootinfo->framebuffer_width,
mbootinfo->framebuffer_height, mbootinfo->framebuffer_height,
mbootinfo->framebuffer_bpp, mbootinfo->framebuffer_bpp,
mbootinfo->framebuffer_pitch, mbootinfo->framebuffer_pitch,
mbootinfo->framebuffer_red_field_position, mbootinfo->framebuffer_red_field_position,
mbootinfo->framebuffer_green_field_position, mbootinfo->framebuffer_green_field_position,
mbootinfo->framebuffer_blue_field_position mbootinfo->framebuffer_blue_field_position
); );
int x, y; int x, y;
for (y=mbootinfo->framebuffer_height; y>=0; y--) { for (y=mbootinfo->framebuffer_height; y>=0; y--) {
for (x=mbootinfo->framebuffer_width; x>=0; x--) { for (x=mbootinfo->framebuffer_width; x>=0; x--) {
putpixel(x, y, 0, 0x55, 0x55); putpixel(x, y, 0, 0x55, 0x55);
} }
} }
putchar("r", 0, 0, 0xff, 0xff, 0xff); putchar("r", 412, 5, 0xff, 0xff, 0xff);
putchar("O", 16, 0, 0xff, 0xff, 0xff); putchar("O", 452, 5, 0xff, 0xff, 0xff);
putchar("S", 32, 0, 0xff, 0xff, 0xff); putchar("S", 492, 5, 0xff, 0xff, 0xff);
putchar("k", 48, 0, 0xff, 0xff, 0xff); putchar("k", 532, 5, 0xff, 0xff, 0xff);
putchar("a", 64, 0, 0xff, 0xff, 0xff); putchar("a", 572, 5, 0xff, 0xff, 0xff);
while(1){} //while(1){}
serial_write_string("\nExecution finished, halting...\n"); serial_write_string("\nExecution finished, halting...\n");
} }

View file

@ -3,54 +3,54 @@
static inline void outb(unsigned short port, unsigned char val) static inline void outb(unsigned short port, unsigned char val)
{ {
asm volatile("outb %0, %1" : : "a"(val), "Nd"(port) : "memory"); asm volatile("outb %0, %1" : : "a"(val), "Nd"(port) : "memory");
} }
static inline unsigned char inb(unsigned short port) static inline unsigned char inb(unsigned short port)
{ {
unsigned char ret; unsigned char ret;
asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory"); asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory");
return ret; return ret;
} }
int serial_init() int serial_init()
{ {
outb(PORT + 1, 0x00); // Disable all interrupts outb(PORT + 1, 0x00); // Disable all interrupts
outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor)
outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud
outb(PORT + 1, 0x00); // (hi byte) outb(PORT + 1, 0x00); // (hi byte)
outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit
outb(PORT + 2, 0xC7); // Enable FIFO, clear them, 14-byte threshold outb(PORT + 2, 0xC7); // Enable FIFO, clear them, 14-byte threshold
outb(PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set outb(PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set
outb(PORT + 4, 0x1E); // Set in loopback mode, test the serial chip outb(PORT + 4, 0x1E); // Set in loopback mode, test the serial chip
outb(PORT + 0, 0xAE); // Test serial chip (send byte 0xAE and check outb(PORT + 0, 0xAE); // Test serial chip (send byte 0xAE and check
// if serial returns same byte) // if serial returns same byte)
// Check if serial is faulty (i.e: not same byte as sent) // Check if serial is faulty (i.e: not same byte as sent)
if (inb(PORT + 0) != 0xAE) if (inb(PORT + 0) != 0xAE)
return 1; return 1;
// If serial is not faulty set it in normal operation mode // If serial is not faulty set it in normal operation mode
// (not-loopback with IRQs enabled and OUT#1 and OUT#2 bits enabled) // (not-loopback with IRQs enabled and OUT#1 and OUT#2 bits enabled)
outb(PORT + 4, 0x0F); outb(PORT + 4, 0x0F);
return 0; return 0;
} }
static int serial_is_transmit_empty() static int serial_is_transmit_empty()
{ {
return inb(PORT + 5) & 0x20; return inb(PORT + 5) & 0x20;
} }
static void serial_write_char(char chr) static void serial_write_char(char chr)
{ {
while (serial_is_transmit_empty() == 0); while (serial_is_transmit_empty() == 0);
outb(PORT, chr); outb(PORT, chr);
} }
void serial_write_string(const char* text) void serial_write_string(const char* text)
{ {
int i = 0; int i = 0;
while (text[i]) { while (text[i]) {
serial_write_char(text[i]); serial_write_char(text[i]);
i++; i++;
} }
} }

View file

@ -4,45 +4,45 @@
.set MULTIBOOT_AOUT_KLUDGE, 0 << 16 .set MULTIBOOT_AOUT_KLUDGE, 0 << 16
.set MULTIBOOT_HEADER_MAGIC, 0x1BADB002 .set MULTIBOOT_HEADER_MAGIC, 0x1BADB002
.set MULTIBOOT_HEADER_FLAGS, \ .set MULTIBOOT_HEADER_FLAGS, \
MULTIBOOT_PAGE_ALIGN \ MULTIBOOT_PAGE_ALIGN \
| MULTIBOOT_MEMORY_INFO \ | MULTIBOOT_MEMORY_INFO \
| MULTIBOOT_VIDEO_REQUEST \ | MULTIBOOT_VIDEO_REQUEST \
| MULTIBOOT_AOUT_KLUDGE | MULTIBOOT_AOUT_KLUDGE
.set MULTIBOOT_CHECKSUM, -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) .set MULTIBOOT_CHECKSUM, -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
#.section ".multiboottbabeee" #.section ".multiboottbabeee"
.align 4 .align 4
.long MULTIBOOT_HEADER_MAGIC .long MULTIBOOT_HEADER_MAGIC
.long MULTIBOOT_HEADER_FLAGS .long MULTIBOOT_HEADER_FLAGS
.long MULTIBOOT_CHECKSUM .long MULTIBOOT_CHECKSUM
.long 0 # header address .long 0 # header address
.long 0 # load address .long 0 # load address
.long 0 # load end address .long 0 # load end address
.long 0 # bss end address .long 0 # bss end address
.long 0 # entry address .long 0 # entry address
.long 0 # video mode_type (0:fb, 1:txt) (set flags[2]!) .long 0 # video mode_type (0:fb, 1:txt) (set flags[2]!)
.long 1024 # video width .long 1024 # video width
.long 768 # video height .long 768 # video height
.long 32 # video depth .long 32 # video depth
.bss .bss
.align 16 .align 16
stack_bottom: stack_bottom:
.skip 16384 # 16k .skip 16384 # 16k
stack_top: stack_top:
.text .text
.global _start .global _start
_start: _start:
# Setup stack # Setup stack
mov $stack_top, %esp mov $stack_top, %esp
# Call the main kernel function. # Call the main kernel function.
push %ebx push %ebx
push %eax push %eax
call kmain call kmain
cli cli
1: hlt 1: hlt
jmp 1b jmp 1b

View file

@ -1,104 +1,104 @@
#include "xtoa.h" #include "xtoa.h"
char* itoa(int value, int base) char* itoa(int value, int base)
{ {
char* result; char* result;
// check that the base if valid // check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; } if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char; char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value; int tmp_value;
do { do {
tmp_value = value; tmp_value = value;
value /= base; value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value ); } while ( value );
// Apply negative sign // Apply negative sign
if (tmp_value < 0) *ptr++ = '-'; if (tmp_value < 0) *ptr++ = '-';
*ptr-- = '\0'; *ptr-- = '\0';
while (ptr1 < ptr) { while (ptr1 < ptr) {
tmp_char = *ptr; tmp_char = *ptr;
*ptr--= *ptr1; *ptr--= *ptr1;
*ptr1++ = tmp_char; *ptr1++ = tmp_char;
} }
return result; return result;
} }
char* uitoa(unsigned int value, int base) char* uitoa(unsigned int value, int base)
{ {
char* result; char* result;
// check that the base if valid // check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; } if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char; char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value; int tmp_value;
do { do {
tmp_value = value; tmp_value = value;
value /= base; value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value ); } while ( value );
*ptr-- = '\0'; *ptr-- = '\0';
while (ptr1 < ptr) { while (ptr1 < ptr) {
tmp_char = *ptr; tmp_char = *ptr;
*ptr--= *ptr1; *ptr--= *ptr1;
*ptr1++ = tmp_char; *ptr1++ = tmp_char;
} }
return result; return result;
} }
char* ltoa(long value, int base) char* ltoa(long value, int base)
{ {
char* result; char* result;
// check that the base if valid // check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; } if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char; char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value; int tmp_value;
do { do {
tmp_value = value; tmp_value = value;
value /= base; value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value ); } while ( value );
// Apply negative sign // Apply negative sign
if (tmp_value < 0) *ptr++ = '-'; if (tmp_value < 0) *ptr++ = '-';
*ptr-- = '\0'; *ptr-- = '\0';
while (ptr1 < ptr) { while (ptr1 < ptr) {
tmp_char = *ptr; tmp_char = *ptr;
*ptr--= *ptr1; *ptr--= *ptr1;
*ptr1++ = tmp_char; *ptr1++ = tmp_char;
} }
return result; return result;
} }
char* ultoa(unsigned long value, int base) char* ultoa(unsigned long value, int base)
{ {
char* result; char* result;
// check that the base if valid // check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; } if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char; char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value; int tmp_value;
do { do {
tmp_value = value; tmp_value = value;
value /= base; value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value ); } while ( value );
*ptr-- = '\0'; *ptr-- = '\0';
while (ptr1 < ptr) { while (ptr1 < ptr) {
tmp_char = *ptr; tmp_char = *ptr;
*ptr--= *ptr1; *ptr--= *ptr1;
*ptr1++ = tmp_char; *ptr1++ = tmp_char;
} }
return result; return result;
} }