This commit is contained in:
QkoSad
2025-07-16 13:00:37 +03:00
commit 7894b48931
806 changed files with 162532 additions and 0 deletions
+280
View File
@@ -0,0 +1,280 @@
class Main {
static Array charMaps;
static int address;
static bool half;
/** Initializes the screen, and locates the cursor at the screen's top-left. */
function void test_init() {
do Main.initMap();
do Main.moveCursor(0, 0);
return;
}
function void main(){tInt(i);
return;
}
// Returns the character map (array of size 11) of the given character.
// If the given character is invalid or non-printable, returns the
// character map of a black square.
function Array getMap(char c) {
if ((c < 32) | (c > 126)) {
let c = 0;
}
return charMaps[c];
}
/** Moves the cursor to the j-th column of the i-th row,
* and erases the character displayed there. */
function void moveCursor(int i, int j) {
var int count, display;
var Array r, char;
if (j = 0){
let half = true;
}
else{
let half = (j / 2) * 2 = j; // chetno true, 1vaa chast
}
let address = (352 * i) + (j / 2) + 16384;
let char = Main.getMap(32);
while (count < 11){
if (half){
let display = r[address] & (-256);
let r[address] = char[count] | display;
}
else{
let display = r[address] & 255;
let r[address] = (char[count]*256) | display;
}
let count = count + 1;
let address = address + 32;
}
let address = address - 352;
return;
}
/** Displays the given character at the cursor location,
* and advances the cursor one column forward. */
function void printChar(char c) {
var Array char, r;
var int count, display;
let char = Main.getMap(c);
while (count < 11){
if (half){
let display = r[address] & (-256);
let r[address] = char[count] | display;
}
else{
let display = r[address] & 255;
let r[address] = (char[count]*256) | display;
}
let count = count + 1;
let address = address + 32;
}
if (half){
let address = address - 352;
let half = false;
}
else{
if (address > 24480){
let address = 16384;
let half = true;
}
else{
let address = address - 351;
let half = true;
}
}
return;
}
/** displays the given string starting at the cursor location,
* and advances the cursor appropriately. */
function void printString(String s) {
var int i, length;
let length = s.length();
while (i < length){
do Main.printChar(s[i+2]);
let i = i + 1;
}
return;
}
/** Displays the given integer starting at the cursor location,
* and advances the cursor appropriately. */
function void printInt(int i) {
var String s;
let s = String.new(6);
do s.setInt(i);
do Main.printString(s);
return;
}
/** Advances the cursor to the beginning of the next line. */
function void println() {
var int row;
let row = (((address - 16384) / 32)/11) + 1;
if (row > 32){
let row = 0;
}
do Main.moveCursor(row, 0);
return;
}
/** Moves the cursor one column back. */
function void backSpace() {
if (address = 16384){
let address = 24191;
let half = true;
return;
}
if (half){
let address = address - 1;
let half = false;
}
else{
let half = true;
}
return;
}
// Initializes the character map array
function void initMap() {
var int i;
let charMaps = Array.new(127);
// Black square, used for displaying non-printable characters.
do Main.create(0,63,63,63,63,63,63,63,63,63,0,0);
// Assigns the bitmap for each character in the charachter set.
// The first parameter is the character index, the next 11 numbers
// are the values of each row in the frame that represents this character.
do Main.create(32,0,0,0,0,0,0,0,0,0,0,0); //
do Main.create(33,12,30,30,30,12,12,0,12,12,0,0); // !
do Main.create(34,54,54,20,0,0,0,0,0,0,0,0); // "
do Main.create(35,0,18,18,63,18,18,63,18,18,0,0); // #
do Main.create(36,12,30,51,3,30,48,51,30,12,12,0); // $
do Main.create(37,0,0,35,51,24,12,6,51,49,0,0); // %
do Main.create(38,12,30,30,12,54,27,27,27,54,0,0); // &
do Main.create(39,12,12,6,0,0,0,0,0,0,0,0); // '
do Main.create(40,24,12,6,6,6,6,6,12,24,0,0); // (
do Main.create(41,6,12,24,24,24,24,24,12,6,0,0); // )
do Main.create(42,0,0,0,51,30,63,30,51,0,0,0); // *
do Main.create(43,0,0,0,12,12,63,12,12,0,0,0); // +
do Main.create(44,0,0,0,0,0,0,0,12,12,6,0); // ,
do Main.create(45,0,0,0,0,0,63,0,0,0,0,0); // -
do Main.create(46,0,0,0,0,0,0,0,12,12,0,0); // .
do Main.create(47,0,0,32,48,24,12,6,3,1,0,0); // /
do Main.create(48,12,30,51,51,51,51,51,30,12,0,0); // 0
do Main.create(49,12,14,15,12,12,12,12,12,63,0,0); // 1
do Main.create(50,30,51,48,24,12,6,3,51,63,0,0); // 2
do Main.create(51,30,51,48,48,28,48,48,51,30,0,0); // 3
do Main.create(52,16,24,28,26,25,63,24,24,60,0,0); // 4
do Main.create(53,63,3,3,31,48,48,48,51,30,0,0); // 5
do Main.create(54,28,6,3,3,31,51,51,51,30,0,0); // 6
do Main.create(55,63,49,48,48,24,12,12,12,12,0,0); // 7
do Main.create(56,30,51,51,51,30,51,51,51,30,0,0); // 8
do Main.create(57,30,51,51,51,62,48,48,24,14,0,0); // 9
do Main.create(58,0,0,12,12,0,0,12,12,0,0,0); // :
do Main.create(59,0,0,12,12,0,0,12,12,6,0,0); // ;
do Main.create(60,0,0,24,12,6,3,6,12,24,0,0); // <
do Main.create(61,0,0,0,63,0,0,63,0,0,0,0); // =
do Main.create(62,0,0,3,6,12,24,12,6,3,0,0); // >
do Main.create(64,30,51,51,59,59,59,27,3,30,0,0); // @
do Main.create(63,30,51,51,24,12,12,0,12,12,0,0); // ?
do Main.create(65,12,30,51,51,63,51,51,51,51,0,0); // A
do Main.create(66,31,51,51,51,31,51,51,51,31,0,0); // B
do Main.create(67,28,54,35,3,3,3,35,54,28,0,0); // C
do Main.create(68,15,27,51,51,51,51,51,27,15,0,0); // D
do Main.create(69,63,51,35,11,15,11,35,51,63,0,0); // E
do Main.create(70,63,51,35,11,15,11,3,3,3,0,0); // F
do Main.create(71,28,54,35,3,59,51,51,54,44,0,0); // G
do Main.create(72,51,51,51,51,63,51,51,51,51,0,0); // H
do Main.create(73,30,12,12,12,12,12,12,12,30,0,0); // I
do Main.create(74,60,24,24,24,24,24,27,27,14,0,0); // J
do Main.create(75,51,51,51,27,15,27,51,51,51,0,0); // K
do Main.create(76,3,3,3,3,3,3,35,51,63,0,0); // L
do Main.create(77,33,51,63,63,51,51,51,51,51,0,0); // M
do Main.create(78,51,51,55,55,63,59,59,51,51,0,0); // N
do Main.create(79,30,51,51,51,51,51,51,51,30,0,0); // O
do Main.create(80,31,51,51,51,31,3,3,3,3,0,0); // P
do Main.create(81,30,51,51,51,51,51,63,59,30,48,0);// Q
do Main.create(82,31,51,51,51,31,27,51,51,51,0,0); // R
do Main.create(83,30,51,51,6,28,48,51,51,30,0,0); // S
do Main.create(84,63,63,45,12,12,12,12,12,30,0,0); // T
do Main.create(85,51,51,51,51,51,51,51,51,30,0,0); // U
do Main.create(86,51,51,51,51,51,30,30,12,12,0,0); // V
do Main.create(87,51,51,51,51,51,63,63,63,18,0,0); // W
do Main.create(88,51,51,30,30,12,30,30,51,51,0,0); // X
do Main.create(89,51,51,51,51,30,12,12,12,30,0,0); // Y
do Main.create(90,63,51,49,24,12,6,35,51,63,0,0); // Z
do Main.create(91,30,6,6,6,6,6,6,6,30,0,0); // [
do Main.create(92,0,0,1,3,6,12,24,48,32,0,0); // \
do Main.create(93,30,24,24,24,24,24,24,24,30,0,0); // ]
do Main.create(94,8,28,54,0,0,0,0,0,0,0,0); // ^
do Main.create(95,0,0,0,0,0,0,0,0,0,63,0); // _
do Main.create(96,6,12,24,0,0,0,0,0,0,0,0); // `
do Main.create(97,0,0,0,14,24,30,27,27,54,0,0); // a
do Main.create(98,3,3,3,15,27,51,51,51,30,0,0); // b
do Main.create(99,0,0,0,30,51,3,3,51,30,0,0); // c
do Main.create(100,48,48,48,60,54,51,51,51,30,0,0); // d
do Main.create(101,0,0,0,30,51,63,3,51,30,0,0); // e
do Main.create(102,28,54,38,6,15,6,6,6,15,0,0); // f
do Main.create(103,0,0,30,51,51,51,62,48,51,30,0); // g
do Main.create(104,3,3,3,27,55,51,51,51,51,0,0); // h
do Main.create(105,12,12,0,14,12,12,12,12,30,0,0); // i
do Main.create(106,48,48,0,56,48,48,48,48,51,30,0); // j
do Main.create(107,3,3,3,51,27,15,15,27,51,0,0); // k
do Main.create(108,14,12,12,12,12,12,12,12,30,0,0); // l
do Main.create(109,0,0,0,29,63,43,43,43,43,0,0); // m
do Main.create(110,0,0,0,29,51,51,51,51,51,0,0); // n
do Main.create(111,0,0,0,30,51,51,51,51,30,0,0); // o
do Main.create(112,0,0,0,30,51,51,51,31,3,3,0); // p
do Main.create(113,0,0,0,30,51,51,51,62,48,48,0); // q
do Main.create(114,0,0,0,29,55,51,3,3,7,0,0); // r
do Main.create(115,0,0,0,30,51,6,24,51,30,0,0); // s
do Main.create(116,4,6,6,15,6,6,6,54,28,0,0); // t
do Main.create(117,0,0,0,27,27,27,27,27,54,0,0); // u
do Main.create(118,0,0,0,51,51,51,51,30,12,0,0); // v
do Main.create(119,0,0,0,51,51,51,63,63,18,0,0); // w
do Main.create(120,0,0,0,51,30,12,12,30,51,0,0); // x
do Main.create(121,0,0,0,51,51,51,62,48,24,15,0); // y
do Main.create(122,0,0,0,63,27,12,6,51,63,0,0); // z
do Main.create(123,56,12,12,12,7,12,12,12,56,0,0); // {
do Main.create(124,12,12,12,12,12,12,12,12,12,0,0); // |
do Main.create(125,7,12,12,12,56,12,12,12,7,0,0); // }
do Main.create(126,38,45,25,0,0,0,0,0,0,0,0); // ~
return;
}
// Creates the character map array of the given character index, using the given values.
function void create(int index, int a, int b, int c, int d, int e,
int f, int g, int h, int i, int j, int k) {
var Array map;
let map = Array.new(11);
let charMaps[index] = map;
let map[0] = a;
let map[1] = b;
let map[2] = c;
let map[3] = d;
let map[4] = e;
let map[5] = f;
let map[6] = g;
let map[7] = h;
let map[8] = i;
let map[9] = j;
let map[10] = k;
return;
}
}