Newer
Older
ubixos / src / sys / drivers / video.c
@reddawg reddawg on 2 May 2002 1 KB New Kernel
/**************************************************************************************
 Copyright (c) 2002
      The UbixOS Project

 $Id$
**************************************************************************************/

#include <ubixos/io.h>

unsigned char *videoBuffer = (char *)0xB8000;
int printColor = 0x07;

void kprint(char *string) {
  unsigned int bufferOffset = 0,character = 0,i = 0;
  /* We Need To Get The Y Position */
  outportByte(0x3d4, 0x0e);
  bufferOffset = inportByte(0x3d5);
  bufferOffset <<= 8; /* Shift Address Left 8 Bits */
  /* Then We Need To Add The X Position */
  outportByte(0x3d4, 0x0f);
  bufferOffset += inportByte(0x3d5);
  bufferOffset <<= 1; /* Shift Address Left 1 Bits */
  while ((character=*string++)) {
    switch(character) {
      default:
        videoBuffer[bufferOffset++] = character;
        videoBuffer[bufferOffset++] = printColor;
        break;
      }
    /* Check To See If We Are Out Of Bounds */
    if (bufferOffset >= 160*25) {
      for (i = 0; i < 160*24; i++) {
        videoBuffer[i] = videoBuffer[i+160];
        }
      for (i = 0; i < 80; i++) {
        videoBuffer[(160*24)+(i*2)] = 0x20;
        videoBuffer[(160*24)+(i*2)+1] = 0x07;
        }
      bufferOffset -= 160;
      }
    }
  }