From 89536d1f20dae094b9e18c2f2e8b930f94fbc2c4 Mon Sep 17 00:00:00 2001 From: Alee Date: Sun, 13 May 2018 16:58:36 -0400 Subject: Added souce files --- include/kb.h | 311 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/screen.h | 116 +++++++++++++++++++++ include/string.h | 31 ++++++ include/system.h | 16 +++ include/types.h | 18 ++++ 5 files changed, 492 insertions(+) create mode 100644 include/kb.h create mode 100644 include/screen.h create mode 100644 include/string.h create mode 100644 include/system.h create mode 100644 include/types.h (limited to 'include') diff --git a/include/kb.h b/include/kb.h new file mode 100644 index 0000000..94ab19e --- /dev/null +++ b/include/kb.h @@ -0,0 +1,311 @@ +#ifndef KB_H +#define KB_H +#include "screen.h" +#include "system.h" +#include "types.h" + +string readStr() +{ + char buff; + string buffstr; + uint8 i = 0; + uint8 reading = 1; + while(reading) + { + if(inportb(0x64) & 0x1) + { + switch(inportb(0x60)) + { + /*case 1: + printch('(char)27); Escape button + buffstr[i] = (char)27; + i++; + break;*/ + case 2: + printch('1'); + buffstr[i] = '1'; + i++; + break; + case 3: + printch('2'); + buffstr[i] = '2'; + i++; + break; + case 4: + printch('3'); + buffstr[i] = '3'; + i++; + break; + case 5: + printch('4'); + buffstr[i] = '4'; + i++; + break; + case 6: + printch('5'); + buffstr[i] = '5'; + i++; + break; + case 7: + printch('6'); + buffstr[i] = '6'; + i++; + break; + case 8: + printch('7'); + buffstr[i] = '7'; + i++; + break; + case 9: + printch('8'); + buffstr[i] = '8'; + i++; + break; + case 10: + printch('9'); + buffstr[i] = '9'; + i++; + break; + case 11: + printch('0'); + buffstr[i] = '0'; + i++; + break; + case 12: + printch('-'); + buffstr[i] = '-'; + i++; + break; + case 13: + printch('='); + buffstr[i] = '='; + i++; + break; + case 14: + printch('\b'); + i--; + buffstr[i] = 0; + break; + /* case 15: + printch('\t'); Tab button + buffstr[i] = '\t'; + i++; + break;*/ + case 16: + printch('q'); + buffstr[i] = 'q'; + i++; + break; + case 17: + printch('w'); + buffstr[i] = 'w'; + i++; + break; + case 18: + printch('e'); + buffstr[i] = 'e'; + i++; + break; + case 19: + printch('r'); + buffstr[i] = 'r'; + i++; + break; + case 20: + printch('t'); + buffstr[i] = 't'; + i++; + break; + case 21: + printch('y'); + buffstr[i] = 'y'; + i++; + break; + case 22: + printch('u'); + buffstr[i] = 'u'; + i++; + break; + case 23: + printch('i'); + buffstr[i] = 'i'; + i++; + break; + case 24: + printch('o'); + buffstr[i] = 'o'; + i++; + break; + case 25: + printch('p'); + buffstr[i] = 'p'; + i++; + break; + case 26: + printch('['); + buffstr[i] = '['; + i++; + break; + case 27: + printch(']'); + buffstr[i] = ']'; + i++; + break; + case 28: + // printch('\n'); + // buffstr[i] = '\n'; + i++; + reading = 0; + break; + /* case 29: + printch('q'); Left Control + buffstr[i] = 'q'; + i++; + break;*/ + case 30: + printch('a'); + buffstr[i] = 'a'; + i++; + break; + case 31: + printch('s'); + buffstr[i] = 's'; + i++; + break; + case 32: + printch('d'); + buffstr[i] = 'd'; + i++; + break; + case 33: + printch('f'); + buffstr[i] = 'f'; + i++; + break; + case 34: + printch('g'); + buffstr[i] = 'g'; + i++; + break; + case 35: + printch('h'); + buffstr[i] = 'h'; + i++; + break; + case 36: + printch('j'); + buffstr[i] = 'j'; + i++; + break; + case 37: + printch('k'); + buffstr[i] = 'k'; + i++; + break; + case 38: + printch('l'); + buffstr[i] = 'l'; + i++; + break; + case 39: + printch(';'); + buffstr[i] = ';'; + i++; + break; + case 40: + printch((char)44); // Single quote (') + buffstr[i] = (char)44; + i++; + break; + case 41: + printch((char)44); // Back tick (`) + buffstr[i] = (char)44; + i++; + break; + /* case 42: Left shift + printch('q'); + buffstr[i] = 'q'; + i++; + break; + case 43: \ (< for somekeyboards) + printch((char)92); + buffstr[i] = 'q'; + i++; + break;*/ + case 44: + printch('z'); + buffstr[i] = 'z'; + i++; + break; + case 45: + printch('x'); + buffstr[i] = 'x'; + i++; + break; + case 46: + printch('c'); + buffstr[i] = 'c'; + i++; + break; + case 47: + printch('v'); + buffstr[i] = 'v'; + i++; + break; + case 48: + printch('b'); + buffstr[i] = 'b'; + i++; + break; + case 49: + printch('n'); + buffstr[i] = 'n'; + i++; + break; + case 50: + printch('m'); + buffstr[i] = 'm'; + i++; + break; + case 51: + printch(','); + buffstr[i] = ','; + i++; + break; + case 52: + printch('.'); + buffstr[i] = '.'; + i++; + break; + case 53: + printch('/'); + buffstr[i] = '/'; + i++; + break; + case 54: + printch('.'); + buffstr[i] = '.'; + i++; + break; + case 55: + printch('/'); + buffstr[i] = '/'; + i++; + break; + /*case 56: + printch(' '); Right shift + buffstr[i] = ' '; + i++; + break;*/ + case 57: + printch(' '); + buffstr[i] = ' '; + i++; + break; + } + } + } + buffstr[i] = 0; + return buffstr; +} +#endif diff --git a/include/screen.h b/include/screen.h new file mode 100644 index 0000000..9d2873e --- /dev/null +++ b/include/screen.h @@ -0,0 +1,116 @@ +#ifndef SCREEN_H +#define SCREEN_H +#include "types.h" +#include "system.h" +#include "string.h" +int cursorX = 0, cursorY = 0; +const uint8 sw = 80,sh = 25,sd = 2; //We define the screen width, height, and depth. +void clearLine(uint8 from,uint8 to) +{ + uint16 i = sw * from * sd; + string vidmem=(string)0xb8000; + for(i;i<(sw*to*sd);i++) + { + vidmem[i] = 0x0; + } +} +void updateCursor() +{ + unsigned temp; + + temp = cursorY * sw + cursorX; // Position = (y * width) + x + + outportb(0x3D4, 14); // CRT Control Register: Select Cursor Location + outportb(0x3D5, temp >> 8); // Send the high byte across the bus + outportb(0x3D4, 15); // CRT Control Register: Select Send Low byte + outportb(0x3D5, temp); // Send the Low byte of the cursor location +} +void clearScreen() +{ + clearLine(0,sh-1); + cursorX = 0; + cursorY = 0; + updateCursor(); +} + +void scrollUp(uint8 lineNumber) +{ + string vidmem = (string)0xb8000; + uint16 i = 0; + clearLine(0,lineNumber-1); //updated + for (i;i=sh-1) + { + scrollUp(1); + } +} + +void printch(char c) +{ + string vidmem = (string) 0xb8000; + switch(c) + { + case (0x08): + if(cursorX > 0) + { + cursorX--; + vidmem[(cursorY * sw + cursorX)*sd]=0x00; + } + break; + /* case (0x09): + cursorX = (cursorX + 8) & ~(8 - 1); + break;*/ + case ('\r'): + cursorX = 0; + break; + case ('\n'): + cursorX = 0; + cursorY++; + break; + default: + vidmem [((cursorY * sw + cursorX))*sd] = c; + vidmem [((cursorY * sw + cursorX))*sd+1] = 0x0F; + cursorX++; + break; + + } + if(cursorX >= sw) + { + cursorX = 0; + cursorY++; + } + updateCursor(); + newLineCheck(); +} + +void print (string ch) +{ + uint16 i = 0; + uint8 length = strlength(ch)-1; //Updated (Now we store string length on a variable to call the function only once) + for(i;i