00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "includes.h"
00011
00012 CGA_CONTROL CgaCtrl;
00013
00014 void CgaInit(void){
00015 CgaCtrl.CursorPosition=0;
00016 CgaCtrl.CharacterAttribute=0x0f;
00017 CgaScreenClean();
00018 OutByte(CGA_ADDRESS_PORT,CGA_CLLR);
00019 OutByte(CGA_DATA_PORT,((CgaCtrl.CursorPosition/2)&0xff));
00020 OutByte(CGA_ADDRESS_PORT,CGA_CLHR);
00021 OutByte(CGA_DATA_PORT,(((CgaCtrl.CursorPosition/2)>>8)&0xff));
00022 }
00023
00024 void CgaCursorSet(void){
00025 OutByte(CGA_ADDRESS_PORT,CGA_CLLR);
00026 OutByte(CGA_DATA_PORT,((CgaCtrl.CursorPosition/2)&0xff));
00027 OutByte(CGA_ADDRESS_PORT,CGA_CLHR);
00028 OutByte(CGA_DATA_PORT,(((CgaCtrl.CursorPosition/2)>>8)&0xff));
00029 }
00030
00031 void CgaScrollUp(void){
00032 U32 i;
00033 U8 ByteValue;
00034
00035 for(i=0;i<3840;i++){
00036 ByteValue=CgaByteRead(i+160);
00037 CgaByteWrite(i,ByteValue);
00038 }
00039 for(i=3840;i<4000;i=i+2){
00040 CgaByteWrite(i,' ');
00041 CgaByteWrite(i+1,CgaCtrl.CharacterAttribute);
00042 }
00043 CgaCtrl.CursorPosition=3840;
00044 }
00045
00046 void CgaCharPut(U8 CharValue){
00047 if((CharValue>=0x20)&&(CharValue<=0x7e)){
00048 CgaByteWrite(CgaCtrl.CursorPosition++,CharValue);
00049 CgaByteWrite(CgaCtrl.CursorPosition++,CgaCtrl.CharacterAttribute);
00050 }
00051 else{
00052 CgaByteWrite(CgaCtrl.CursorPosition++,'?');
00053 CgaByteWrite(CgaCtrl.CursorPosition++,CgaCtrl.CharacterAttribute);
00054 }
00055 if(CgaCtrl.CursorPosition==4000) CgaScrollUp();
00056 }
00057
00058 void CgaBackSpace(void){
00059 if(CgaCtrl.CursorPosition>=2) CgaCtrl.CursorPosition=CgaCtrl.CursorPosition-2;
00060 CgaByteWrite(CgaCtrl.CursorPosition,' ');
00061 CgaByteWrite(CgaCtrl.CursorPosition+1,CgaCtrl.CharacterAttribute);
00062 }
00063
00064 void CgaScreenClean(void){
00065 U32 i;
00066
00067 for(i=0;i<4000;i=i+2){
00068 CgaByteWrite(i,' ');
00069 CgaByteWrite(i+1,CgaCtrl.CharacterAttribute);
00070 }
00071 CgaCtrl.CursorPosition=0;
00072 }
00073
00074 void CgaChangeLine(void){
00075 U8 i;
00076
00077 i=0;
00078 while(CgaCtrl.CursorPosition>160){
00079 CgaCtrl.CursorPosition=CgaCtrl.CursorPosition-160;
00080 i++;
00081 }
00082 CgaCtrl.CursorPosition=(i+1)*160;
00083 if(CgaCtrl.CursorPosition==4000) CgaScrollUp();
00084 }