f256/f256lib/f256.c
2023-12-31 19:56:36 -06:00

95 lines
1.5 KiB
C

#include "f256.h"
char error;
#define MAX_COL 80
#define MAX_ROW 60
static char row = 0;
static char col = 0;
static char *line = (char *)TEXT_MATRIX;
void cls(void) {
int i;
char *vram = (char *)TEXT_MATRIX;
unsigned char mmu;
mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
POKE(MMU_IO_CTRL, 2); // Swap I/O page 2 into bank 6.
for (i = 0; i < 80*60; i++) {
*vram++ = 32;
}
row = col = 0;
line = (char *)TEXT_MATRIX;
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
POKE(CURSOR_SETTINGS, 9); // Disable cursor flash.
POKE(CURSOR_CHARACTER, '_'); // Set cursor shape.
POKE(CURSOR_X_LOW, col); // Set cursor X position.
POKE(CURSOR_X_HIGH, 0);
POKE(CURSOR_Y_LOW, row); // Set cursor Y position.
POKE(CURSOR_Y_HIGH, 0);
POKE(0xd011, 0);
}
static void scroll() {
int i;
char *vram = (char *)TEXT_MATRIX;
for (i = 0; i < 80*59; i++) {
vram[i] = vram[i+80];
}
vram += i;
for (i = 0; i < 80; i++) {
*vram++ = 32;
}
}
void print(char *message) {
int x = 0;
unsigned char mmu;
mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
POKE(MMU_IO_CTRL, 2); // Swap I/O page 2 into bank 6.
while (message[x] != 0) {
switch (message[x]) {
default:
line[col] = message[x];
col++;
if (col != MAX_COL) {
break;
}
// Fall through.
case 10:
case 13:
col = 0;
row++;
if (row == MAX_ROW) {
scroll();
row--;
break;
}
line += 80;
break;
}
x++;
}
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
POKE(CURSOR_X_LOW, col);
POKE(CURSOR_Y_LOW, row);
}