gigatron/rom/Archive/lcc/Libs/Gigatron/Newline.c
2025-01-28 19:17:01 +03:00

40 lines
1.1 KiB
C

#include <Gigatron.h>
void Newline(void)
{
// Go down 1..8 pixels, realigning at next 8 pixel rows
// for easy detection of reaching bottom of screen
ScreenPos = (ScreenPos & 0x7800) + 0x0800;
if (ScreenPos < 0) // Wrap around screen memory
ScreenPos = (int)screenMemory;
// At the top of the visible screen
if ((ScreenPos >> 8) == videoTable[0]) {
int i;
// Clear this line
sysFn = SYS_VDrawBits_134; // SYS function plots 8 pixels vertically
sysArgs[0] = BgColor; // Set background color
sysArgs[2] = 0; // Set bit pattern: only background
*(int*)(sysArgs+4) = ScreenPos;// Set screen address
do {
__syscall(134);
sysArgs[4]++; // Step 1 pixel right
} while (sysArgs[4] != 160);// Until reaching X position 160
// Scroll up by manipulating video indirection table
i = 240;
do {
byte page;
i -= 2;
page = videoTable[i] + 8;
videoTable[i] = page & 128 ? page - 120 : page;
} while (i);
}
ScreenPos += Indent; // Apply small indentation
}