#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); }