WIP minor improvements to conio/screen for scrolling, still doesn't work reliably once we print more than 25 lines

This commit is contained in:
2024-05-07 16:17:36 -04:00
parent 559ff15dc0
commit 5b4e0e7a0f
3 changed files with 33 additions and 6 deletions

View File

@@ -27,7 +27,7 @@ void _putch(char c)
#endif
}
void _cputs(char *ptr)
void _cputs(char *ptr)
{
if ( ptr == NULL ) {
return;
@@ -35,7 +35,7 @@ void _cputs(char *ptr)
while ((char)*ptr != 0x0) {
_putch((char)*ptr);
if (*ptr == '\n') {
_cursor_y += 1;
if ( _cursor_y < 24 ) _cursor_y += 1;
_cursor_x = 0;
setCursorPosition(_cursor_x, _cursor_y);
} else {
@@ -81,10 +81,10 @@ char *_cgets(char *d)
while ( scancode != 0 ) {
if ( scancode == 0x0e ) {
if ( d > orig ) {
backupCursor();
setCursorPosition(_cursor_x, _cursor_y);
d -= 1;
_putch(0x0);
backupCursor();
setCursorPosition(_cursor_x, _cursor_y);
d -= 1;
_putch(0x0);
}
} else if ( scancode == 0x1c ) {
break;

View File

@@ -17,6 +17,32 @@ void blankScreen(void)
}
}
void scrollScreenUp(char start, char lines)
{
#ifndef __GNUC__
#asm
push bx;
mov bx, sp;
push ax;
push cx;
push dx;
mov ch, [bx+4];
mov cl, #0x00;
mov dh, #0x18;
mov dl, #0x4F;
mov al, [bx+6];
mov ah, #0x06;
mov bx, #0x0;
int 0x10;
pop dx;
pop cx;
pop ax;
pop bx;
#endasm
return;
#endif
}
void setCursorPosition(char x, char y)
{
#ifndef __GNUC__

View File

@@ -8,5 +8,6 @@ void setCursorPosition(char x, char y);
void backupCursor();
void advanceCursor();
void blankScreen();
void scrollScreenUp(char start, char lines);
#endif /* _SCREEN_H_ */