20#include "pedigree/kernel/debugger/LocalIO.h"
21#include "pedigree/kernel/machine/Keyboard.h"
22#include "pedigree/kernel/machine/Vga.h"
32 m_pKeyboard(pKeyboard) {
38void LocalIO::initialise() {
46 for (
size_t i = 0; i < MAX_CONSOLE_WIDTH * MAX_CONSOLE_HEIGHT; i++) {
47 uint8_t attributeByte = (DebuggerIO::Black << 4) | (DebuggerIO::White & 0x0F);
48 uint16_t blank =
' ' | (attributeByte << 8);
55 MAX_CONSOLE_WIDTH * MAX_CONSOLE_HEIGHT * 2);
64void LocalIO::destroy() {
67 MAX_CONSOLE_WIDTH * MAX_CONSOLE_HEIGHT * 2);
72 if (nlines < m_nHeight)
80void LocalIO::setCliLowerLimit(
size_t nlines) {
82 if (nlines < m_nHeight)
92 for (
size_t i = 0; i < m_nWidth * m_nHeight; i++) {
93 uint8_t attributeByte = (DebuggerIO::Black << 4) | (DebuggerIO::White & 0x0F);
94 uint16_t blank =
' ' | (attributeByte << 8);
107void LocalIO::disableCli() {
109 for (
size_t i = 0; i < m_nWidth * m_nHeight; i++) {
110 uint8_t attributeByte = (DebuggerIO::Black << 4) | (DebuggerIO::White & 0x0F);
111 uint16_t blank =
' ' | (attributeByte << 8);
122char LocalIO::getCharNonBlock() {
133 if (colStart > colEnd) {
134 size_t tmp = colStart;
139 if (colEnd >= m_nWidth)
140 colEnd = m_nWidth - 1;
141 if (
static_cast<int32_t
>(colStart) < 0)
143 if (row >= m_nHeight)
145 if (
static_cast<int32_t
>(row) < 0)
148 uint8_t attributeByte = (backColour << 4) | (foreColour & 0x0F);
149 for (
size_t i = colStart; i <= colEnd; i++) {
157void LocalIO::drawVerticalLine(
char c,
size_t col,
size_t rowStart,
size_t rowEnd,
160 if (rowStart > rowEnd) {
161 size_t tmp = rowStart;
166 if (rowEnd >= m_nHeight)
167 rowEnd = m_nHeight - 1;
168 if (
static_cast<int32_t
>(rowStart) < 0)
172 if (
static_cast<int32_t
>(col) < 0)
175 uint8_t attributeByte = (backColour << 4) | (foreColour & 0x0F);
176 for (
size_t i = rowStart; i <= rowEnd; i++) {
189 size_t savedY = m_CursorY;
195 bool bRefreshWasEnabled =
false;
197 bRefreshWasEnabled =
true;
203 putChar(*str++, foreColour, backColour);
205 if (bRefreshWasEnabled) {
223void LocalIO::disableRefreshes() {
227void LocalIO::forceRefresh() {
234 uint8_t attributeByte = (DebuggerIO::Black << 4) | (DebuggerIO::White & 0x0F);
235 uint16_t blank =
' ' | (attributeByte << 8);
265 uint8_t attributeByte = (backColour << 4) | (foreColour & 0x0F);
270 else if (c == 0x09 && (((
m_CursorX + 8) & ~(8 - 1)) < m_nWidth))
278 else if (c ==
'\n') {
285 uint8_t attributeByte = (backColour << 4) | (foreColour & 0x0F);
301 for (
size_t i = 0; i < m_nWidth * m_nHeight; i++) {
302 unsigned char attributeByte = (DebuggerIO::Black << 4) | (DebuggerIO::White & 0x0F);
303 unsigned short blank =
' ' | (attributeByte << 8);
char m_pCommand[COMMAND_MAX]
virtual char getCharNonBlock()=0
uint16_t m_pFramebuffer[MAX_CONSOLE_WIDTH *MAX_CONSOLE_HEIGHT]
LocalIO(Vga *pVga, Keyboard *pKeyboard)
uint16_t m_pOldFramebuffer[MAX_CONSOLE_WIDTH *MAX_CONSOLE_HEIGHT]
void setCliUpperLimit(size_t nlines)
void drawString(const char *str, size_t row, size_t col, DebuggerIO::Colour foreColour, DebuggerIO::Colour backColour)
void drawHorizontalLine(char c, size_t row, size_t colStart, size_t colEnd, DebuggerIO::Colour foreColour, DebuggerIO::Colour backColour)
virtual void moveCursor(size_t nX, size_t nY)=0
virtual bool setLargestTextMode()=0
virtual size_t getNumRows()=0
virtual void pokeBuffer(uint8_t *pBuffer, size_t nBufLen)=0
virtual size_t getNumCols()=0
virtual void peekBuffer(uint8_t *pBuffer, size_t nBufLen)=0