diff --git a/src/font8x8_basic.h b/src/font8x8_basic.h index 1452873..13c38e1 100644 --- a/src/font8x8_basic.h +++ b/src/font8x8_basic.h @@ -9,11 +9,11 @@ * // 8x8 monochrome bitmap fonts for rendering * // * // Author: - * // Marcel Sondaar - * // International Business Machines (public domain VGA fonts) + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) * // * // License: - * // Public Domain + * // Public Domain * * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm **/ @@ -21,132 +21,132 @@ // Constant: font8x8_basic // Contains an 8x8 font map for unicode points U+0000 - U+007F (basic latin) 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+0001 - { 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+0004 - { 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+0007 - { 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+000A - { 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+000D - { 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+0010 - { 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+0013 - { 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+0016 - { 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+0019 - { 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+001C - { 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+001F - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) - { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) - { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") - { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) - { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) - { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) - { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) - { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') - { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() - { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) - { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) - { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) - { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) - { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) - { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) - { 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, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) - { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) - { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) - { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) - { 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, 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, 0x06}, // U+003B (;) - { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) - { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) - { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) - { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) - { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) - { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) - { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) - { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) - { 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, 0x06, 0x0F, 0x00}, // U+0046 (F) - { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) - { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) - { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) - { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) - { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) - { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) - { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) - { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) - { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) - { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) - { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) - { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) - { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) - { 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, 0x1E, 0x0C, 0x00}, // U+0056 (V) - { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) - { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) - { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) - { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) - { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) - { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) - { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) - { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) - { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) - { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) - { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) - { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) - { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) - { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) - { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) - { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) - { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) - { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) - { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) - { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) - { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) - { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) - { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) - { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) - { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) - { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) - { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) - { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) - { 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, 0x1E, 0x0C, 0x00}, // U+0076 (v) - { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) - { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) - { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) - { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) - { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) - { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) - { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) - { 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+0000 (nul) + { 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+0003 + { 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+0006 + { 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+0009 + { 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+000C + { 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+000F + { 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+0012 + { 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+0015 + { 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+0018 + { 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+001B + { 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+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 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, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 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, 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, 0x06}, // U+003B (;) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 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, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 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, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 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, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F }; diff --git a/src/framebuffer.c b/src/framebuffer.c index 570c3a3..c033722 100644 --- a/src/framebuffer.c +++ b/src/framebuffer.c @@ -9,77 +9,77 @@ static unsigned char fb_bpp, fb_bytespp; static unsigned char fb_rpos, fb_bpos, fb_gpos; void initfb( - unsigned long addr, - unsigned short w, - unsigned short h, - unsigned char bpp, - unsigned long pitch, - unsigned char rpos, - unsigned char gpos, - unsigned char bpos + unsigned long addr, + unsigned short w, + unsigned short h, + unsigned char bpp, + unsigned long pitch, + unsigned char rpos, + unsigned char gpos, + unsigned char bpos ){ - fb_address = addr; - fb_pitch = pitch; - fb_width = w; - fb_height = h; - fb_bpp = bpp; - fb_bytespp = bpp/8; - fb_rpos = rpos; - fb_gpos = gpos; - fb_bpos = bpos; + fb_address = addr; + fb_pitch = pitch; + fb_width = w; + fb_height = h; + fb_bpp = bpp; + fb_bytespp = bpp/8; + fb_rpos = rpos; + fb_gpos = gpos; + fb_bpos = bpos; } void putpixel( - unsigned short x, - unsigned short y, - unsigned char r, - unsigned char g, - unsigned char b + unsigned short x, + unsigned short y, + unsigned char r, + unsigned char g, + unsigned char b ){ - if (x > fb_width || y > fb_height) - return; - unsigned long dest_addr = fb_address + y*fb_pitch + x*fb_bytespp; - if (fb_bpp == 32) { - *((unsigned long *)(dest_addr)) = r< fb_width || y > fb_height) + return; + unsigned long dest_addr = fb_address + y*fb_pitch + x*fb_bytespp; + if (fb_bpp == 32) { + *((unsigned long *)(dest_addr)) = r< 0x7e) { - serial_write_string("\nASCII too hihg"); - return; - } + // Limit to ASCII printable + if (*character < 0x20) { + serial_write_string("\nASCII too low"); + return; + } + if (*character > 0x7e) { + serial_write_string("\nASCII too hihg"); + return; + } - unsigned char *rowdata = font8x8_basic[*character]; - unsigned char charx, chary, iy, ix; - unsigned char sizex=2; - unsigned char sizey=2; - for (chary=0;chary<8;chary++) { - for (charx=0;charx<8;charx++) { - unsigned char pix = rowdata[chary] & 1 << charx; - if (pix) { - for (iy=1;iy<=sizey;iy++) { - for (ix=1;ix<=sizex;ix++) { - putpixel(x+charx*sizex+ix, y+chary*sizey+iy, r, g, b); - } - } - } - } - } + unsigned char *rowdata = font8x8_basic[*character]; + unsigned char charx, chary, iy, ix; + unsigned char sizex=5; + unsigned char sizey=5; + for (chary=0;chary<8;chary++) { + for (charx=0;charx<8;charx++) { + unsigned char pix = rowdata[chary] & 1 << charx; + if (pix) { + for (iy=1;iy<=sizey;iy++) { + for (ix=1;ix<=sizex;ix++) { + putpixel(x+charx*sizex+ix, y+chary*sizey+iy, r, g, b); + } + } + } + } + } } diff --git a/src/framebuffer.h b/src/framebuffer.h index dac7813..8cb760b 100644 --- a/src/framebuffer.h +++ b/src/framebuffer.h @@ -2,28 +2,28 @@ #define _FRAMEBUFFER_H 1 void initfb( - unsigned long addr, - unsigned short w, - unsigned short h, - unsigned char bpp, - unsigned long pitch, - unsigned char rpos, - unsigned char gpos, - unsigned char bpos + unsigned long addr, + unsigned short w, + unsigned short h, + unsigned char bpp, + unsigned long pitch, + unsigned char rpos, + unsigned char gpos, + unsigned char bpos ); void putpixel( - unsigned short x, - unsigned short y, - unsigned char r, - unsigned char g, - unsigned char b + unsigned short x, + unsigned short y, + unsigned char r, + unsigned char g, + unsigned char b ); void putchar( - unsigned char *character, - unsigned short x, - unsigned short y, - unsigned char r, - unsigned char g, - unsigned char b + unsigned char *character, + unsigned short x, + unsigned short y, + unsigned char r, + unsigned char g, + unsigned char b ); #endif diff --git a/src/kernel.c b/src/kernel.c index 1d5fed8..3364929 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -6,93 +6,93 @@ 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) { - unsigned char ret; - asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory"); - return ret; + unsigned char ret; + asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory"); + return ret; } void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo) { - // Cursor disabling - outb(0x3D4, 0x0A); - outb(0x3D5, 0x20); + // Cursor disabling + outb(0x3D4, 0x0A); + outb(0x3D5, 0x20); - int serial_initialized = serial_init(); - serial_write_string("\n=== rOSka ===\n"); + int serial_initialized = serial_init(); + serial_write_string("\n=== rOSka ===\n"); - // Check multiboot header - if (mbootmagick != MULTIBOOT_BOOTLOADER_MAGIC) { - return; - } + // Check multiboot header + if (mbootmagick != MULTIBOOT_BOOTLOADER_MAGIC) { + return; + } - serial_write_string("\nMultiboot flags: "); - serial_write_string(itoa(mbootinfo->flags, 2)); + serial_write_string("\nMultiboot flags: "); + serial_write_string(itoa(mbootinfo->flags, 2)); - // Check videomode - if (mbootinfo->flags & MULTIBOOT_INFO_VBE_INFO) { - serial_write_string("\nVBE Mode: 0x"); - serial_write_string(itoa(mbootinfo->vbe_mode, 16)); - } + // Check videomode + if (mbootinfo->flags & MULTIBOOT_INFO_VBE_INFO) { + serial_write_string("\nVBE Mode: 0x"); + serial_write_string(itoa(mbootinfo->vbe_mode, 16)); + } - if (!(mbootinfo->flags & MULTIBOOT_INFO_FRAMEBUFFER_INFO)) { - serial_write_string("\nVideo info not available"); - return; - } + if (!(mbootinfo->flags & MULTIBOOT_INFO_FRAMEBUFFER_INFO)) { + serial_write_string("\nVideo info not available"); + return; + } - serial_write_string("\nFramebuffer: "); - serial_write_string("\n Address: 0x"); - serial_write_string(ultoa(mbootinfo->framebuffer_addr, 16)); + serial_write_string("\nFramebuffer: "); + serial_write_string("\n Address: 0x"); + serial_write_string(ultoa(mbootinfo->framebuffer_addr, 16)); - serial_write_string("\n Dimensions: "); - serial_write_string(itoa(mbootinfo->framebuffer_width, 10)); - serial_write_string("X"); - serial_write_string(itoa(mbootinfo->framebuffer_height, 10)); - serial_write_string("x"); - serial_write_string(itoa(mbootinfo->framebuffer_bpp, 10)); - serial_write_string("\n Pitch: "); - serial_write_string(itoa(mbootinfo->framebuffer_pitch, 10)); - serial_write_string("\n RPos:"); - serial_write_string(itoa(mbootinfo->framebuffer_red_field_position, 10)); - serial_write_string("\n GPos:"); - serial_write_string(itoa(mbootinfo->framebuffer_green_field_position, 10)); - serial_write_string("\n BPos:"); - serial_write_string(itoa(mbootinfo->framebuffer_blue_field_position, 10)); + serial_write_string("\n Dimensions: "); + serial_write_string(itoa(mbootinfo->framebuffer_width, 10)); + serial_write_string("X"); + serial_write_string(itoa(mbootinfo->framebuffer_height, 10)); + serial_write_string("x"); + serial_write_string(itoa(mbootinfo->framebuffer_bpp, 10)); + serial_write_string("\n Pitch: "); + serial_write_string(itoa(mbootinfo->framebuffer_pitch, 10)); + serial_write_string("\n RPos:"); + serial_write_string(itoa(mbootinfo->framebuffer_red_field_position, 10)); + serial_write_string("\n GPos:"); + serial_write_string(itoa(mbootinfo->framebuffer_green_field_position, 10)); + serial_write_string("\n BPos:"); + serial_write_string(itoa(mbootinfo->framebuffer_blue_field_position, 10)); - serial_write_string("\nMemory: "); - serial_write_string("\n lower: "); - serial_write_string(uitoa(mbootinfo->mem_lower, 10)); - serial_write_string(" k"); - serial_write_string("\n upper: "); - serial_write_string(uitoa(mbootinfo->mem_upper/1024, 10)); - serial_write_string(" M"); + serial_write_string("\nMemory: "); + serial_write_string("\n lower: "); + serial_write_string(uitoa(mbootinfo->mem_lower, 10)); + serial_write_string(" k"); + serial_write_string("\n upper: "); + serial_write_string(uitoa(mbootinfo->mem_upper/1024, 10)); + serial_write_string(" M"); - initfb( - mbootinfo->framebuffer_addr, - mbootinfo->framebuffer_width, - mbootinfo->framebuffer_height, - mbootinfo->framebuffer_bpp, - mbootinfo->framebuffer_pitch, - mbootinfo->framebuffer_red_field_position, - mbootinfo->framebuffer_green_field_position, - mbootinfo->framebuffer_blue_field_position - ); - int x, y; - for (y=mbootinfo->framebuffer_height; y>=0; y--) { - for (x=mbootinfo->framebuffer_width; x>=0; x--) { - putpixel(x, y, 0, 0x55, 0x55); - } - } + initfb( + mbootinfo->framebuffer_addr, + mbootinfo->framebuffer_width, + mbootinfo->framebuffer_height, + mbootinfo->framebuffer_bpp, + mbootinfo->framebuffer_pitch, + mbootinfo->framebuffer_red_field_position, + mbootinfo->framebuffer_green_field_position, + mbootinfo->framebuffer_blue_field_position + ); + int x, y; + for (y=mbootinfo->framebuffer_height; y>=0; y--) { + for (x=mbootinfo->framebuffer_width; x>=0; x--) { + putpixel(x, y, 0, 0x55, 0x55); + } + } - putchar("r", 0, 0, 0xff, 0xff, 0xff); - putchar("O", 16, 0, 0xff, 0xff, 0xff); - putchar("S", 32, 0, 0xff, 0xff, 0xff); - putchar("k", 48, 0, 0xff, 0xff, 0xff); - putchar("a", 64, 0, 0xff, 0xff, 0xff); - while(1){} + putchar("r", 412, 5, 0xff, 0xff, 0xff); + putchar("O", 452, 5, 0xff, 0xff, 0xff); + putchar("S", 492, 5, 0xff, 0xff, 0xff); + putchar("k", 532, 5, 0xff, 0xff, 0xff); + putchar("a", 572, 5, 0xff, 0xff, 0xff); + //while(1){} - serial_write_string("\nExecution finished, halting...\n"); + serial_write_string("\nExecution finished, halting...\n"); } diff --git a/src/serial.c b/src/serial.c index d19762d..5497203 100644 --- a/src/serial.c +++ b/src/serial.c @@ -3,54 +3,54 @@ 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) { - unsigned char ret; - asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory"); - return ret; + unsigned char ret; + asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port) : "memory"); + return ret; } int serial_init() { - outb(PORT + 1, 0x00); // Disable all interrupts - outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) - outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud - outb(PORT + 1, 0x00); // (hi byte) - outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit - outb(PORT + 2, 0xC7); // Enable FIFO, clear them, 14-byte threshold - outb(PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set - outb(PORT + 4, 0x1E); // Set in loopback mode, test the serial chip - outb(PORT + 0, 0xAE); // Test serial chip (send byte 0xAE and check - // if serial returns same byte) + outb(PORT + 1, 0x00); // Disable all interrupts + outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) + outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud + outb(PORT + 1, 0x00); // (hi byte) + outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit + outb(PORT + 2, 0xC7); // Enable FIFO, clear them, 14-byte threshold + outb(PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set + outb(PORT + 4, 0x1E); // Set in loopback mode, test the serial chip + outb(PORT + 0, 0xAE); // Test serial chip (send byte 0xAE and check + // if serial returns same byte) - // Check if serial is faulty (i.e: not same byte as sent) - if (inb(PORT + 0) != 0xAE) - return 1; + // Check if serial is faulty (i.e: not same byte as sent) + if (inb(PORT + 0) != 0xAE) + return 1; - // If serial is not faulty set it in normal operation mode - // (not-loopback with IRQs enabled and OUT#1 and OUT#2 bits enabled) - outb(PORT + 4, 0x0F); - return 0; + // If serial is not faulty set it in normal operation mode + // (not-loopback with IRQs enabled and OUT#1 and OUT#2 bits enabled) + outb(PORT + 4, 0x0F); + return 0; } static int serial_is_transmit_empty() { - return inb(PORT + 5) & 0x20; + return inb(PORT + 5) & 0x20; } static void serial_write_char(char chr) { - while (serial_is_transmit_empty() == 0); - outb(PORT, chr); + while (serial_is_transmit_empty() == 0); + outb(PORT, chr); } void serial_write_string(const char* text) { - int i = 0; - while (text[i]) { - serial_write_char(text[i]); - i++; - } + int i = 0; + while (text[i]) { + serial_write_char(text[i]); + i++; + } } diff --git a/src/start32.s b/src/start32.s index f03794a..76cfc63 100644 --- a/src/start32.s +++ b/src/start32.s @@ -4,45 +4,45 @@ .set MULTIBOOT_AOUT_KLUDGE, 0 << 16 .set MULTIBOOT_HEADER_MAGIC, 0x1BADB002 .set MULTIBOOT_HEADER_FLAGS, \ - MULTIBOOT_PAGE_ALIGN \ - | MULTIBOOT_MEMORY_INFO \ - | MULTIBOOT_VIDEO_REQUEST \ - | MULTIBOOT_AOUT_KLUDGE + MULTIBOOT_PAGE_ALIGN \ + | MULTIBOOT_MEMORY_INFO \ + | MULTIBOOT_VIDEO_REQUEST \ + | MULTIBOOT_AOUT_KLUDGE .set MULTIBOOT_CHECKSUM, -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) #.section ".multiboottbabeee" .align 4 - .long MULTIBOOT_HEADER_MAGIC - .long MULTIBOOT_HEADER_FLAGS - .long MULTIBOOT_CHECKSUM - .long 0 # header address - .long 0 # load address - .long 0 # load end address - .long 0 # bss end address - .long 0 # entry address - .long 0 # video mode_type (0:fb, 1:txt) (set flags[2]!) - .long 1024 # video width - .long 768 # video height - .long 32 # video depth + .long MULTIBOOT_HEADER_MAGIC + .long MULTIBOOT_HEADER_FLAGS + .long MULTIBOOT_CHECKSUM + .long 0 # header address + .long 0 # load address + .long 0 # load end address + .long 0 # bss end address + .long 0 # entry address + .long 0 # video mode_type (0:fb, 1:txt) (set flags[2]!) + .long 1024 # video width + .long 768 # video height + .long 32 # video depth .bss .align 16 - stack_bottom: - .skip 16384 # 16k - stack_top: + stack_bottom: + .skip 16384 # 16k + stack_top: .text .global _start _start: - # Setup stack - mov $stack_top, %esp + # Setup stack + mov $stack_top, %esp - # Call the main kernel function. - push %ebx - push %eax - call kmain + # Call the main kernel function. + push %ebx + push %eax + call kmain - cli + cli 1: hlt - jmp 1b + jmp 1b diff --git a/src/xtoa.c b/src/xtoa.c index 2a7b9a5..b6b3739 100644 --- a/src/xtoa.c +++ b/src/xtoa.c @@ -1,104 +1,104 @@ #include "xtoa.h" char* itoa(int value, int base) { - char* result; + char* result; - // check that the base if valid - if (base < 2 || base > 36) { *result = '\0'; return result; } + // check that the base if valid + if (base < 2 || base > 36) { *result = '\0'; return result; } - char* ptr = result, *ptr1 = result, tmp_char; - int tmp_value; + char* ptr = result, *ptr1 = result, tmp_char; + int tmp_value; - do { - tmp_value = value; - value /= base; - *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; - } while ( value ); + do { + tmp_value = value; + value /= base; + *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; + } while ( value ); - // Apply negative sign - if (tmp_value < 0) *ptr++ = '-'; - *ptr-- = '\0'; - while (ptr1 < ptr) { - tmp_char = *ptr; - *ptr--= *ptr1; - *ptr1++ = tmp_char; - } - return result; + // Apply negative sign + if (tmp_value < 0) *ptr++ = '-'; + *ptr-- = '\0'; + while (ptr1 < ptr) { + tmp_char = *ptr; + *ptr--= *ptr1; + *ptr1++ = tmp_char; + } + return result; } char* uitoa(unsigned int value, int base) { - char* result; + char* result; - // check that the base if valid - if (base < 2 || base > 36) { *result = '\0'; return result; } + // check that the base if valid + if (base < 2 || base > 36) { *result = '\0'; return result; } - char* ptr = result, *ptr1 = result, tmp_char; - int tmp_value; + char* ptr = result, *ptr1 = result, tmp_char; + int tmp_value; - do { - tmp_value = value; - value /= base; - *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; - } while ( value ); + do { + tmp_value = value; + value /= base; + *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; + } while ( value ); - *ptr-- = '\0'; - while (ptr1 < ptr) { - tmp_char = *ptr; - *ptr--= *ptr1; - *ptr1++ = tmp_char; - } - return result; + *ptr-- = '\0'; + while (ptr1 < ptr) { + tmp_char = *ptr; + *ptr--= *ptr1; + *ptr1++ = tmp_char; + } + return result; } char* ltoa(long value, int base) { - char* result; + char* result; - // check that the base if valid - if (base < 2 || base > 36) { *result = '\0'; return result; } + // check that the base if valid + if (base < 2 || base > 36) { *result = '\0'; return result; } - char* ptr = result, *ptr1 = result, tmp_char; - int tmp_value; + char* ptr = result, *ptr1 = result, tmp_char; + int tmp_value; - do { - tmp_value = value; - value /= base; - *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; - } while ( value ); + do { + tmp_value = value; + value /= base; + *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; + } while ( value ); - // Apply negative sign - if (tmp_value < 0) *ptr++ = '-'; - *ptr-- = '\0'; - while (ptr1 < ptr) { - tmp_char = *ptr; - *ptr--= *ptr1; - *ptr1++ = tmp_char; - } - return result; + // Apply negative sign + if (tmp_value < 0) *ptr++ = '-'; + *ptr-- = '\0'; + while (ptr1 < ptr) { + tmp_char = *ptr; + *ptr--= *ptr1; + *ptr1++ = tmp_char; + } + return result; } char* ultoa(unsigned long value, int base) { - char* result; + char* result; - // check that the base if valid - if (base < 2 || base > 36) { *result = '\0'; return result; } + // check that the base if valid + if (base < 2 || base > 36) { *result = '\0'; return result; } - char* ptr = result, *ptr1 = result, tmp_char; - int tmp_value; + char* ptr = result, *ptr1 = result, tmp_char; + int tmp_value; - do { - tmp_value = value; - value /= base; - *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; - } while ( value ); + do { + tmp_value = value; + value /= base; + *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; + } while ( value ); - *ptr-- = '\0'; - while (ptr1 < ptr) { - tmp_char = *ptr; - *ptr--= *ptr1; - *ptr1++ = tmp_char; - } - return result; + *ptr-- = '\0'; + while (ptr1 < ptr) { + tmp_char = *ptr; + *ptr--= *ptr1; + *ptr1++ = tmp_char; + } + return result; }