95 lines
1.5 KiB
C
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);
|
|
}
|