#define UCHAR unsigned char
#define VIDEO_INT 0x16
class Screen
{
private:
UCHAR mode, row, col;
UCHAR rownum, colnum;
UCHAR active_page, visual_page;
UCHAR attribute;
public:
Screen(void); // Konstruktor default
Screen(UCHAR mode);
~Screen(void); // Desktruktor default
void setMode(UCHAR mode);
UCHAR getMode(void);
void setCursorPos(UCHAR y, UCHAR x);
void getCursorPos(UCHAR *y, UCHAR *x);
void writeChar(UCHAR letter);
void writeString(UCHAR *str);
void setAttribute(UCHAR attr);
UCHAR getCharAttr(UCHAR *attr);
void setActivePage(UCHAR page);
UCHAR getActivePage(void);
void setVisualPage(UCHAR page);
UCHAR getVisualPage(void);
void cls(void);
};
Screen::Screen(void)
{
UCHAR mode;
this->row = 0;
this->col = 0;
this->mode = mode = 0x03;
this->rownum = 25;
this->colnum = 80;
this->active_page = 0;
this->visual_page = 0;
this->attribute = 7;
asm mov ah, 0x00;
asm mov al, mode;
asm or al, 0x80;
asm int VIDEO_INT;
return;
}
Screen::Screen(UCHAR mode)
{
this->setMode(mode);
return;
}
Screen::~Screen(void)
{
return;
}
void Screen::setMode(UCHAR mode)
{
this->mode = mode;
this->active_page = 0;
this->visual_page = 0;
this->rownum = 25;
switch (mode)
{
case 0x00 :
case 0x01 : this->colnum = 40;
break;
case 0x02 :
case 0x03 :
case 0x07 : this->colnum = 80;
break;
default : this->colnum = 0;
break;
}
asm mov ah, 0x00;
asm mov al, mode;
asm or al, 0x80;
asm int VIDEO_INT;
return;
}
UCHAR Screen::getMode(void)
{
return this->mode;
}
void Screen::setCursorPos(UCHAR y, UCHAR x)
{
UCHAR page = this->active_page;
if ((y > this->rownum) || (x > this->colnum))
y = x = 0;
this->row = y;
this->col = x;
asm mov ah, 0x02;
asm mov bh, page;
asm mov dh, y;
asm mov dl, x;
asm int VIDEO_INT;
return;
}
void Screen::getCursorPos(UCHAR *y, UCHAR *x)
{
*y = this->row;
*x = this->col;
return;
}
void Screen::writeChar(UCHAR letter)
{
UCHAR page = this->active_page;
UCHAR attr = this->attribute;
asm mov ah, 0x09;
asm mov al, letter;
asm mov bh, page;
asm mov bl, attr;
asm mov ch, 0x00;
asm mov cl, 0x01;
asm int VIDEO_INT;
return;
}
void Screen::writeString(UCHAR *str)
{
for (; *str != '\0'; str++)
{
if (this->col > this->colnum)
{
this->row++;
this->col = 0;
}
this->setCursorPos(this->row, this->col);
this->writeChar(*str);
this->col++;
}
return;
}
void Screen::setAttribute(UCHAR attr)
{
this->attribute = attr;
return;
}
UCHAR Screen::getCharAttr(UCHAR *attr)
{
UCHAR page = this->active_page;
UCHAR letter, attribute;
asm mov ah, 0x08;
asm mov bh, page;
asm int VIDEO_INT;
asm mov attribute, ah;
asm mov letter, al;
this->attribute = *attr = attribute;
return letter;
}
void Screen::setActivePage(UCHAR page)
{
this->active_page = page;
return;
}
UCHAR Screen::getActivePage(void)
{
return this->active_page;
}
void Screen::setVisualPage(UCHAR page)
{
if (page > 7) page = 0;
this->visual_page = page;
asm mov ah, 0x05;
asm mov al, page;
asm int VIDEO_INT;
return;
}
UCHAR Screen::getVisualPage(void)
{
return this->visual_page;
}
void Screen::cls(void)
{
UCHAR mode = this->mode;
this->row = 0;
this->col = 0;
asm mov ah, 0x00;
asm mov al, mode;
asm int VIDEO_INT;
return;
}
#define VIDEO_INT 0x16
class Screen
{
private:
UCHAR mode, row, col;
UCHAR rownum, colnum;
UCHAR active_page, visual_page;
UCHAR attribute;
public:
Screen(void); // Konstruktor default
Screen(UCHAR mode);
~Screen(void); // Desktruktor default
void setMode(UCHAR mode);
UCHAR getMode(void);
void setCursorPos(UCHAR y, UCHAR x);
void getCursorPos(UCHAR *y, UCHAR *x);
void writeChar(UCHAR letter);
void writeString(UCHAR *str);
void setAttribute(UCHAR attr);
UCHAR getCharAttr(UCHAR *attr);
void setActivePage(UCHAR page);
UCHAR getActivePage(void);
void setVisualPage(UCHAR page);
UCHAR getVisualPage(void);
void cls(void);
};
Screen::Screen(void)
{
UCHAR mode;
this->row = 0;
this->col = 0;
this->mode = mode = 0x03;
this->rownum = 25;
this->colnum = 80;
this->active_page = 0;
this->visual_page = 0;
this->attribute = 7;
asm mov ah, 0x00;
asm mov al, mode;
asm or al, 0x80;
asm int VIDEO_INT;
return;
}
Screen::Screen(UCHAR mode)
{
this->setMode(mode);
return;
}
Screen::~Screen(void)
{
return;
}
void Screen::setMode(UCHAR mode)
{
this->mode = mode;
this->active_page = 0;
this->visual_page = 0;
this->rownum = 25;
switch (mode)
{
case 0x00 :
case 0x01 : this->colnum = 40;
break;
case 0x02 :
case 0x03 :
case 0x07 : this->colnum = 80;
break;
default : this->colnum = 0;
break;
}
asm mov ah, 0x00;
asm mov al, mode;
asm or al, 0x80;
asm int VIDEO_INT;
return;
}
UCHAR Screen::getMode(void)
{
return this->mode;
}
void Screen::setCursorPos(UCHAR y, UCHAR x)
{
UCHAR page = this->active_page;
if ((y > this->rownum) || (x > this->colnum))
y = x = 0;
this->row = y;
this->col = x;
asm mov ah, 0x02;
asm mov bh, page;
asm mov dh, y;
asm mov dl, x;
asm int VIDEO_INT;
return;
}
void Screen::getCursorPos(UCHAR *y, UCHAR *x)
{
*y = this->row;
*x = this->col;
return;
}
void Screen::writeChar(UCHAR letter)
{
UCHAR page = this->active_page;
UCHAR attr = this->attribute;
asm mov ah, 0x09;
asm mov al, letter;
asm mov bh, page;
asm mov bl, attr;
asm mov ch, 0x00;
asm mov cl, 0x01;
asm int VIDEO_INT;
return;
}
void Screen::writeString(UCHAR *str)
{
for (; *str != '\0'; str++)
{
if (this->col > this->colnum)
{
this->row++;
this->col = 0;
}
this->setCursorPos(this->row, this->col);
this->writeChar(*str);
this->col++;
}
return;
}
void Screen::setAttribute(UCHAR attr)
{
this->attribute = attr;
return;
}
UCHAR Screen::getCharAttr(UCHAR *attr)
{
UCHAR page = this->active_page;
UCHAR letter, attribute;
asm mov ah, 0x08;
asm mov bh, page;
asm int VIDEO_INT;
asm mov attribute, ah;
asm mov letter, al;
this->attribute = *attr = attribute;
return letter;
}
void Screen::setActivePage(UCHAR page)
{
this->active_page = page;
return;
}
UCHAR Screen::getActivePage(void)
{
return this->active_page;
}
void Screen::setVisualPage(UCHAR page)
{
if (page > 7) page = 0;
this->visual_page = page;
asm mov ah, 0x05;
asm mov al, page;
asm int VIDEO_INT;
return;
}
UCHAR Screen::getVisualPage(void)
{
return this->visual_page;
}
void Screen::cls(void)
{
UCHAR mode = this->mode;
this->row = 0;
this->col = 0;
asm mov ah, 0x00;
asm mov al, mode;
asm int VIDEO_INT;
return;
}
0 komentar:
Posting Komentar