vtac-terminal 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1134 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VTAC = void 0;
7
+ const sdl_1 = __importDefault(require("@kmamal/sdl"));
8
+ const serialport_1 = require("serialport");
9
+ class VTAC {
10
+ constructor() {
11
+ this.baudRate = 9600;
12
+ this.parity = 'none';
13
+ this.dataBits = 8;
14
+ this.stopBits = 1;
15
+ this.scale = 2;
16
+ this.fullscreen = false;
17
+ this.buffer = Buffer.alloc(VTAC.WIDTH * VTAC.HEIGHT).fill(0x00);
18
+ this.mode = 'text';
19
+ this.column = 0;
20
+ this.row = 0;
21
+ this.offset = 0;
22
+ this.columnNextByte = false;
23
+ this.rowNextByte = false;
24
+ this.cursorChar = 0x00; // OFF
25
+ this.cursorMode = 'solid';
26
+ this.cursorCharNextByte = false;
27
+ this.cursorBlinkTime = 0;
28
+ this.cursorVisible = true;
29
+ this.cursorBlinkInterval = 500; // Blink every 500ms (twice per second)
30
+ this.dataNextByte = false;
31
+ this.foregroundColor = 0xFF; // White
32
+ this.backgroundColor = 0x00; // Black
33
+ this.foregroundColorNextByte = false;
34
+ this.backgroundColorNextByte = false;
35
+ this.lastRenderTime = 0;
36
+ this.targetFrameTime = 1000 / 60; // 60fps = ~16.67ms per frame
37
+ //
38
+ // MAIN
39
+ //
40
+ this.launch = () => {
41
+ if (this.path) {
42
+ this.port = new serialport_1.SerialPort({
43
+ path: this.path,
44
+ baudRate: this.baudRate,
45
+ parity: this.parity,
46
+ dataBits: this.dataBits,
47
+ stopBits: this.stopBits
48
+ }, (err) => {
49
+ if (err) {
50
+ console.log('Error: ', err.message);
51
+ }
52
+ });
53
+ this.port.on('data', this.receive);
54
+ }
55
+ this.window = sdl_1.default.video.createWindow({
56
+ title: "VT-AC",
57
+ width: VTAC.WIDTH * this.scale,
58
+ height: VTAC.HEIGHT * this.scale,
59
+ fullscreen: this.fullscreen,
60
+ resizable: false
61
+ });
62
+ this.window.on('keyDown', this.onKey);
63
+ this.window.on('textInput', this.onText);
64
+ this.window.on('close', (event) => {
65
+ if (this.port && this.port.isOpen) {
66
+ this.port.close();
67
+ }
68
+ });
69
+ // Start the render loop
70
+ this.render();
71
+ };
72
+ this.render = () => {
73
+ if (!this.window) {
74
+ return;
75
+ }
76
+ if (this.window.destroyed) {
77
+ return;
78
+ }
79
+ const now = Date.now();
80
+ const elapsed = now - this.lastRenderTime;
81
+ // Update cursor blink state
82
+ if (this.cursorMode === 'blinking') {
83
+ this.cursorBlinkTime += elapsed;
84
+ if (this.cursorBlinkTime >= this.cursorBlinkInterval) {
85
+ this.cursorVisible = !this.cursorVisible;
86
+ this.cursorBlinkTime = 0;
87
+ }
88
+ }
89
+ else {
90
+ this.cursorVisible = true;
91
+ }
92
+ // Create temporary render buffer
93
+ const renderBuffer = Buffer.from(this.buffer);
94
+ // Draw cursor if visible and cursorChar is not 0x00 (OFF)
95
+ if (this.cursorVisible && this.cursorChar !== 0x00) {
96
+ this.drawCursor(renderBuffer);
97
+ }
98
+ this.window.render(VTAC.WIDTH, VTAC.HEIGHT, VTAC.WIDTH, 'rgb332', renderBuffer);
99
+ this.lastRenderTime = now;
100
+ // Calculate delay to maintain target frame rate
101
+ const renderTime = Date.now() - now;
102
+ const delay = Math.max(0, this.targetFrameTime - renderTime);
103
+ setTimeout(this.render, delay);
104
+ };
105
+ this.drawCursor = (renderBuffer) => {
106
+ const character = VTAC.CHARACTERS[this.cursorChar];
107
+ const startRow = this.row * 8;
108
+ const startColumn = this.column * 8;
109
+ // Draw cursor character with inverted colors
110
+ for (let y = 0; y < 8; y++) {
111
+ const rowByte = character[y];
112
+ const bufferRowStart = (startRow + y) * VTAC.WIDTH;
113
+ for (let x = 0; x < 8; x++) {
114
+ const bit = (rowByte >> (7 - x)) & 1;
115
+ // Invert the colors: if bit is 1, use background; if 0, use foreground
116
+ const color = bit ? this.backgroundColor : this.foregroundColor;
117
+ renderBuffer[bufferRowStart + startColumn + x] = color;
118
+ }
119
+ }
120
+ };
121
+ //
122
+ // METHODS
123
+ //
124
+ this.reset = () => {
125
+ this.column = 0;
126
+ this.row = 0;
127
+ this.offset = 0;
128
+ this.mode = 'text';
129
+ this.cursorChar = 0x00;
130
+ this.cursorMode = 'solid';
131
+ this.backgroundColor = 0x00;
132
+ this.foregroundColor = 0xFF;
133
+ this.columnNextByte = false;
134
+ this.rowNextByte = false;
135
+ this.cursorCharNextByte = false;
136
+ this.foregroundColorNextByte = false;
137
+ this.backgroundColorNextByte = false;
138
+ this.buffer.fill(0x00);
139
+ };
140
+ this.bell = () => {
141
+ process.stdout.write('\u0007');
142
+ };
143
+ this.backspace = () => {
144
+ if (this.column > 0) {
145
+ this.column--;
146
+ }
147
+ this.offset = 0;
148
+ };
149
+ this.tab = () => {
150
+ this.column = Math.min((Math.floor(this.column / 4) + 1) * 4, VTAC.COLUMNS - 1);
151
+ this.offset = 0;
152
+ };
153
+ this.lineFeed = () => {
154
+ let nextRow = this.row + 1;
155
+ if (nextRow >= VTAC.ROWS) {
156
+ nextRow = VTAC.ROWS - 1;
157
+ this.scroll('up');
158
+ }
159
+ this.row = nextRow;
160
+ this.offset = 0;
161
+ };
162
+ this.carriageReturn = () => {
163
+ this.column = 0;
164
+ this.offset = 0;
165
+ };
166
+ this.deleteTo = (destination) => {
167
+ switch (destination) {
168
+ case 'startOfLine':
169
+ // Clear from start of current line to current cursor position
170
+ for (let col = 0; col <= this.column; col++) {
171
+ this.clearCharacterCell(col, this.row);
172
+ }
173
+ break;
174
+ case 'endOfLine':
175
+ // Clear from current cursor position to end of current line
176
+ for (let col = this.column; col < VTAC.COLUMNS; col++) {
177
+ this.clearCharacterCell(col, this.row);
178
+ }
179
+ break;
180
+ case 'startOfScreen':
181
+ // Clear from start of screen to current cursor position
182
+ for (let row = 0; row < this.row; row++) {
183
+ for (let col = 0; col < VTAC.COLUMNS; col++) {
184
+ this.clearCharacterCell(col, row);
185
+ }
186
+ }
187
+ // Clear partial line up to and including cursor
188
+ for (let col = 0; col <= this.column; col++) {
189
+ this.clearCharacterCell(col, this.row);
190
+ }
191
+ break;
192
+ case 'endOfScreen':
193
+ // Clear from current cursor position to end of screen
194
+ for (let col = this.column; col < VTAC.COLUMNS; col++) {
195
+ this.clearCharacterCell(col, this.row);
196
+ }
197
+ // Clear remaining lines
198
+ for (let row = this.row + 1; row < VTAC.ROWS; row++) {
199
+ for (let col = 0; col < VTAC.COLUMNS; col++) {
200
+ this.clearCharacterCell(col, row);
201
+ }
202
+ }
203
+ break;
204
+ }
205
+ };
206
+ this.scroll = (direction) => {
207
+ switch (direction) {
208
+ case 'left':
209
+ // Shift all character cells one position to the left
210
+ for (let row = 0; row < VTAC.ROWS; row++) {
211
+ for (let col = 0; col < VTAC.COLUMNS - 1; col++) {
212
+ this.copyCharacterCell(col + 1, row, col, row);
213
+ }
214
+ // Fill rightmost column with background color
215
+ this.clearCharacterCell(VTAC.COLUMNS - 1, row);
216
+ }
217
+ break;
218
+ case 'right':
219
+ // Shift all character cells one position to the right
220
+ for (let row = 0; row < VTAC.ROWS; row++) {
221
+ for (let col = VTAC.COLUMNS - 1; col > 0; col--) {
222
+ this.copyCharacterCell(col - 1, row, col, row);
223
+ }
224
+ // Fill leftmost column with background color
225
+ this.clearCharacterCell(0, row);
226
+ }
227
+ break;
228
+ case 'up':
229
+ // Shift all character cells one position up
230
+ for (let row = 0; row < VTAC.ROWS - 1; row++) {
231
+ for (let col = 0; col < VTAC.COLUMNS; col++) {
232
+ this.copyCharacterCell(col, row + 1, col, row);
233
+ }
234
+ }
235
+ // Fill bottom row with background color
236
+ for (let col = 0; col < VTAC.COLUMNS; col++) {
237
+ this.clearCharacterCell(col, VTAC.ROWS - 1);
238
+ }
239
+ break;
240
+ case 'down':
241
+ // Shift all character cells one position down
242
+ for (let row = VTAC.ROWS - 1; row > 0; row--) {
243
+ for (let col = 0; col < VTAC.COLUMNS; col++) {
244
+ this.copyCharacterCell(col, row - 1, col, row);
245
+ }
246
+ }
247
+ // Fill top row with background color
248
+ for (let col = 0; col < VTAC.COLUMNS; col++) {
249
+ this.clearCharacterCell(col, 0);
250
+ }
251
+ break;
252
+ }
253
+ };
254
+ this.cursor = (direction) => {
255
+ switch (direction) {
256
+ case 'left':
257
+ if (this.column > 0) {
258
+ this.column--;
259
+ }
260
+ break;
261
+ case 'right':
262
+ if (this.column < VTAC.COLUMNS - 1) {
263
+ this.column++;
264
+ }
265
+ break;
266
+ case 'up':
267
+ if (this.row > 0) {
268
+ this.row--;
269
+ }
270
+ break;
271
+ case 'down':
272
+ if (this.row < VTAC.ROWS - 1) {
273
+ this.row++;
274
+ }
275
+ break;
276
+ }
277
+ this.offset = 0;
278
+ };
279
+ this.delete = () => {
280
+ const startRow = this.row * 8;
281
+ const startColumn = this.column * 8;
282
+ // Clear 8x8 pixel block with background color
283
+ for (let y = 0; y < 8; y++) {
284
+ const bufferRowStart = (startRow + y) * VTAC.WIDTH;
285
+ for (let x = 0; x < 8; x++) {
286
+ this.buffer[bufferRowStart + startColumn + x] = this.backgroundColor;
287
+ }
288
+ }
289
+ };
290
+ this.data = (data) => {
291
+ switch (this.mode) {
292
+ case 'text':
293
+ this.insertTextData(data);
294
+ break;
295
+ case 'graphics':
296
+ this.insertGraphicsData(data);
297
+ break;
298
+ }
299
+ };
300
+ //
301
+ // INSERT
302
+ //
303
+ this.insertTextData = (data) => {
304
+ const character = VTAC.CHARACTERS[data];
305
+ const startRow = this.row * 8;
306
+ const startColumn = this.column * 8;
307
+ // Render 8x8 character bitmap
308
+ for (let y = 0; y < 8; y++) {
309
+ const rowByte = character[y];
310
+ const bufferRowStart = (startRow + y) * VTAC.WIDTH;
311
+ for (let x = 0; x < 8; x++) {
312
+ const bit = (rowByte >> (7 - x)) & 1;
313
+ const color = bit ? this.foregroundColor : this.backgroundColor;
314
+ this.buffer[bufferRowStart + startColumn + x] = color;
315
+ }
316
+ }
317
+ // Move to next character position
318
+ this.column++;
319
+ if (this.column >= VTAC.COLUMNS) {
320
+ this.column = 0;
321
+ this.row++;
322
+ if (this.row >= VTAC.ROWS) {
323
+ this.row = VTAC.ROWS - 1;
324
+ }
325
+ }
326
+ this.offset = 0;
327
+ };
328
+ this.insertGraphicsData = (data) => {
329
+ // Calculate starting pixel position (offset is the row within the 8x8 block)
330
+ const pixelRow = this.row * 8 + this.offset;
331
+ const startColumn = this.column * 8;
332
+ const bufferRowStart = pixelRow * VTAC.WIDTH;
333
+ // Write 8 pixels horizontally - each bit in data represents one pixel
334
+ // Bit 7 (MSB) is leftmost pixel, bit 0 (LSB) is rightmost pixel
335
+ for (let i = 0; i < 8; i++) {
336
+ const bit = (data >> (7 - i)) & 1;
337
+ const color = bit ? this.foregroundColor : this.backgroundColor;
338
+ this.buffer[bufferRowStart + startColumn + i] = color;
339
+ }
340
+ // Move to next location in pixel array
341
+ this.offset++;
342
+ if (this.offset >= 8) {
343
+ this.offset = 0;
344
+ this.column++;
345
+ if (this.column >= VTAC.COLUMNS) {
346
+ this.column = 0;
347
+ this.row++;
348
+ if (this.row >= VTAC.ROWS) {
349
+ this.row = 0;
350
+ }
351
+ }
352
+ }
353
+ };
354
+ //
355
+ // HELPERS
356
+ //
357
+ this.copyCharacterCell = (sourceCol, sourceRow, destCol, destRow) => {
358
+ const sourceStartRow = sourceRow * 8;
359
+ const sourceStartColumn = sourceCol * 8;
360
+ const destStartRow = destRow * 8;
361
+ const destStartColumn = destCol * 8;
362
+ // Copy 8x8 pixel block
363
+ for (let y = 0; y < 8; y++) {
364
+ const sourceBufferRowStart = (sourceStartRow + y) * VTAC.WIDTH;
365
+ const destBufferRowStart = (destStartRow + y) * VTAC.WIDTH;
366
+ for (let x = 0; x < 8; x++) {
367
+ this.buffer[destBufferRowStart + destStartColumn + x] =
368
+ this.buffer[sourceBufferRowStart + sourceStartColumn + x];
369
+ }
370
+ }
371
+ };
372
+ this.clearCharacterCell = (col, row) => {
373
+ const startRow = row * 8;
374
+ const startColumn = col * 8;
375
+ // Clear 8x8 pixel block with background color
376
+ for (let y = 0; y < 8; y++) {
377
+ const bufferRowStart = (startRow + y) * VTAC.WIDTH;
378
+ for (let x = 0; x < 8; x++) {
379
+ this.buffer[bufferRowStart + startColumn + x] = this.backgroundColor;
380
+ }
381
+ }
382
+ };
383
+ //
384
+ // EVENTS
385
+ //
386
+ this.parse = (data) => {
387
+ if (this.cursorCharNextByte) {
388
+ this.cursorChar = data;
389
+ this.cursorCharNextByte = false;
390
+ return;
391
+ }
392
+ if (this.columnNextByte) {
393
+ this.column = data % VTAC.COLUMNS; // 0 to COLUMNS-1
394
+ this.offset = 0;
395
+ this.columnNextByte = false;
396
+ return;
397
+ }
398
+ if (this.rowNextByte) {
399
+ this.row = data % VTAC.ROWS; // 0 to ROWS-1
400
+ this.offset = 0;
401
+ this.rowNextByte = false;
402
+ return;
403
+ }
404
+ if (this.foregroundColorNextByte) {
405
+ this.foregroundColor = data;
406
+ this.foregroundColorNextByte = false;
407
+ return;
408
+ }
409
+ if (this.backgroundColorNextByte) {
410
+ this.backgroundColor = data;
411
+ this.backgroundColorNextByte = false;
412
+ return;
413
+ }
414
+ if (this.dataNextByte) {
415
+ this.data(data);
416
+ this.dataNextByte = false;
417
+ return;
418
+ }
419
+ switch (true) {
420
+ case (data == 0x00): // NULL
421
+ break;
422
+ case (data == 0x01): // CURSOR HOME
423
+ this.column = 0;
424
+ this.row = 0;
425
+ this.offset = 0;
426
+ break;
427
+ case (data == 0x02): // CURSOR CHARACTER
428
+ this.cursorCharNextByte = true;
429
+ break;
430
+ case (data == 0x03): // CURSOR BLINKING
431
+ this.cursorMode == 'solid' ? this.cursorMode = 'blinking' : this.cursorMode = 'solid';
432
+ break;
433
+ case (data == 0x04): // RESET
434
+ this.reset();
435
+ break;
436
+ case (data == 0x05): // RESERVED
437
+ // Reserved for future use
438
+ break;
439
+ case (data == 0x06): // RESERVED
440
+ // Reserved for future use
441
+ break;
442
+ case (data == 0x07): // BELL
443
+ this.bell();
444
+ break;
445
+ case (data == 0x08): // BACKSPACE
446
+ this.backspace();
447
+ break;
448
+ case (data == 0x09): // TAB
449
+ this.tab();
450
+ break;
451
+ case (data == 0x0A): // LINE FEED
452
+ this.lineFeed();
453
+ break;
454
+ case (data == 0x0B): // SCREEN MODE
455
+ this.mode == 'text' ? this.mode = 'graphics' : this.mode = 'text';
456
+ break;
457
+ case (data == 0x0C): // CLEAR SCREEN
458
+ this.buffer.fill(this.backgroundColor);
459
+ break;
460
+ case (data == 0x0D): // CARRIAGE RETURN
461
+ this.carriageReturn();
462
+ break;
463
+ case (data == 0x0E): // SET COLUMN
464
+ this.columnNextByte = true;
465
+ break;
466
+ case (data == 0x0F): // SET ROW
467
+ this.rowNextByte = true;
468
+ break;
469
+ case (data == 0x10): // DELETE TO START OF LINE
470
+ this.deleteTo('startOfLine');
471
+ break;
472
+ case (data == 0x11): // DELETE TO END OF LINE
473
+ this.deleteTo('endOfLine');
474
+ break;
475
+ case (data == 0x12): // DELETE TO START OF SCREEN
476
+ this.deleteTo('startOfScreen');
477
+ break;
478
+ case (data == 0x13): // DELETE TO END OF SCREEN
479
+ this.deleteTo('endOfScreen');
480
+ break;
481
+ case (data == 0x14): // SCROLL LEFT
482
+ this.scroll('left');
483
+ break;
484
+ case (data == 0x15): // SCROLL RIGHT
485
+ this.scroll('right');
486
+ break;
487
+ case (data == 0x16): // SCROLL UP
488
+ this.scroll('up');
489
+ break;
490
+ case (data == 0x17): // SCROLL DOWN
491
+ this.scroll('down');
492
+ break;
493
+ case (data == 0x18): // FOREGROUND COLOR
494
+ this.foregroundColorNextByte = true;
495
+ break;
496
+ case (data == 0x19): // BACKGROUND COLOR
497
+ this.backgroundColorNextByte = true;
498
+ break;
499
+ case (data == 0x1A): // NEXT BYTE AS DATA
500
+ this.dataNextByte = true;
501
+ break;
502
+ case (data == 0x1B): // ESCAPE
503
+ // Reserved for future ANSI escape code handling
504
+ break;
505
+ case (data == 0x1C): // CURSOR LEFT
506
+ this.cursor('left');
507
+ break;
508
+ case (data == 0x1D): // CURSOR RIGHT
509
+ this.cursor('right');
510
+ break;
511
+ case (data == 0x1E): // CURSOR UP
512
+ this.cursor('up');
513
+ break;
514
+ case (data == 0x1F): // CURSOR DOWN
515
+ this.cursor('down');
516
+ break;
517
+ case (data >= 0x20 && data <= 0x7E): // ASCII CHARACTERS
518
+ this.data(data);
519
+ break;
520
+ case (data == 0x7F): // DELETE
521
+ this.delete();
522
+ break;
523
+ case (data >= 0x80 && data <= 0xFF): // EXTENDED CHARACTERS
524
+ this.data(data);
525
+ break;
526
+ default:
527
+ break;
528
+ }
529
+ };
530
+ this.transmit = (data) => {
531
+ var _a;
532
+ (_a = this.port) === null || _a === void 0 ? void 0 : _a.write([data], 'hex', (err) => {
533
+ if (err) {
534
+ console.log('Error: ', err.message);
535
+ }
536
+ });
537
+ };
538
+ this.receive = (data) => {
539
+ for (let i = 0; i < data.length; i++) {
540
+ this.parse(data[i]);
541
+ }
542
+ };
543
+ this.onKey = (event) => {
544
+ switch (event.key) {
545
+ case 'backspace':
546
+ this.transmit(0x08);
547
+ break;
548
+ case 'tab':
549
+ this.transmit(0x09);
550
+ break;
551
+ case 'enter':
552
+ case 'return':
553
+ this.transmit(0x0D);
554
+ this.transmit(0x0A);
555
+ break;
556
+ case 'escape':
557
+ this.transmit(0x1B);
558
+ break;
559
+ case 'left':
560
+ this.transmit(0x1C);
561
+ break;
562
+ case 'right':
563
+ this.transmit(0x1D);
564
+ break;
565
+ case 'up':
566
+ this.transmit(0x1E);
567
+ break;
568
+ case 'down':
569
+ this.transmit(0x1F);
570
+ break;
571
+ case 'delete':
572
+ this.transmit(0x7F);
573
+ break;
574
+ default:
575
+ break;
576
+ }
577
+ };
578
+ this.onText = (event) => {
579
+ switch (event.text) {
580
+ case ' ':
581
+ this.transmit(0x20);
582
+ break;
583
+ case '!':
584
+ this.transmit(0x21);
585
+ break;
586
+ case '"':
587
+ this.transmit(0x22);
588
+ break;
589
+ case '#':
590
+ this.transmit(0x23);
591
+ break;
592
+ case '$':
593
+ this.transmit(0x24);
594
+ break;
595
+ case '%':
596
+ this.transmit(0x25);
597
+ break;
598
+ case '&':
599
+ this.transmit(0x26);
600
+ break;
601
+ case '\'':
602
+ this.transmit(0x27);
603
+ break;
604
+ case '(':
605
+ this.transmit(0x28);
606
+ break;
607
+ case ')':
608
+ this.transmit(0x29);
609
+ break;
610
+ case '*':
611
+ this.transmit(0x2A);
612
+ break;
613
+ case '+':
614
+ this.transmit(0x2B);
615
+ break;
616
+ case ',':
617
+ this.transmit(0x2C);
618
+ break;
619
+ case '-':
620
+ this.transmit(0x2D);
621
+ break;
622
+ case '.':
623
+ this.transmit(0x2E);
624
+ break;
625
+ case '/':
626
+ this.transmit(0x2F);
627
+ break;
628
+ case '0':
629
+ this.transmit(0x30);
630
+ break;
631
+ case '1':
632
+ this.transmit(0x31);
633
+ break;
634
+ case '2':
635
+ this.transmit(0x32);
636
+ break;
637
+ case '3':
638
+ this.transmit(0x33);
639
+ break;
640
+ case '4':
641
+ this.transmit(0x34);
642
+ break;
643
+ case '5':
644
+ this.transmit(0x35);
645
+ break;
646
+ case '6':
647
+ this.transmit(0x36);
648
+ break;
649
+ case '7':
650
+ this.transmit(0x37);
651
+ break;
652
+ case '8':
653
+ this.transmit(0x38);
654
+ break;
655
+ case '9':
656
+ this.transmit(0x39);
657
+ break;
658
+ case ':':
659
+ this.transmit(0x3A);
660
+ break;
661
+ case ';':
662
+ this.transmit(0x3B);
663
+ break;
664
+ case '<':
665
+ this.transmit(0x3C);
666
+ break;
667
+ case '=':
668
+ this.transmit(0x3D);
669
+ break;
670
+ case '>':
671
+ this.transmit(0x3E);
672
+ break;
673
+ case '?':
674
+ this.transmit(0x3F);
675
+ break;
676
+ case '@':
677
+ this.transmit(0x40);
678
+ break;
679
+ case 'A':
680
+ this.transmit(0x41);
681
+ break;
682
+ case 'B':
683
+ this.transmit(0x42);
684
+ break;
685
+ case 'C':
686
+ this.transmit(0x43);
687
+ break;
688
+ case 'D':
689
+ this.transmit(0x44);
690
+ break;
691
+ case 'E':
692
+ this.transmit(0x45);
693
+ break;
694
+ case 'F':
695
+ this.transmit(0x46);
696
+ break;
697
+ case 'G':
698
+ this.transmit(0x47);
699
+ break;
700
+ case 'H':
701
+ this.transmit(0x48);
702
+ break;
703
+ case 'I':
704
+ this.transmit(0x49);
705
+ break;
706
+ case 'J':
707
+ this.transmit(0x4A);
708
+ break;
709
+ case 'K':
710
+ this.transmit(0x4B);
711
+ break;
712
+ case 'L':
713
+ this.transmit(0x4C);
714
+ break;
715
+ case 'M':
716
+ this.transmit(0x4D);
717
+ break;
718
+ case 'N':
719
+ this.transmit(0x4E);
720
+ break;
721
+ case 'O':
722
+ this.transmit(0x4F);
723
+ break;
724
+ case 'P':
725
+ this.transmit(0x50);
726
+ break;
727
+ case 'Q':
728
+ this.transmit(0x51);
729
+ break;
730
+ case 'R':
731
+ this.transmit(0x52);
732
+ break;
733
+ case 'S':
734
+ this.transmit(0x53);
735
+ break;
736
+ case 'T':
737
+ this.transmit(0x54);
738
+ break;
739
+ case 'U':
740
+ this.transmit(0x55);
741
+ break;
742
+ case 'V':
743
+ this.transmit(0x56);
744
+ break;
745
+ case 'W':
746
+ this.transmit(0x57);
747
+ break;
748
+ case 'X':
749
+ this.transmit(0x58);
750
+ break;
751
+ case 'Y':
752
+ this.transmit(0x59);
753
+ break;
754
+ case 'Z':
755
+ this.transmit(0x5A);
756
+ break;
757
+ case '[':
758
+ this.transmit(0x5B);
759
+ break;
760
+ case '\\':
761
+ this.transmit(0x5C);
762
+ break;
763
+ case ']':
764
+ this.transmit(0x5D);
765
+ break;
766
+ case '^':
767
+ this.transmit(0x5E);
768
+ break;
769
+ case '_':
770
+ this.transmit(0x5F);
771
+ break;
772
+ case '`':
773
+ this.transmit(0x60);
774
+ break;
775
+ case 'a':
776
+ this.transmit(0x61);
777
+ break;
778
+ case 'b':
779
+ this.transmit(0x62);
780
+ break;
781
+ case 'c':
782
+ this.transmit(0x63);
783
+ break;
784
+ case 'd':
785
+ this.transmit(0x64);
786
+ break;
787
+ case 'e':
788
+ this.transmit(0x65);
789
+ break;
790
+ case 'f':
791
+ this.transmit(0x66);
792
+ break;
793
+ case 'g':
794
+ this.transmit(0x67);
795
+ break;
796
+ case 'h':
797
+ this.transmit(0x68);
798
+ break;
799
+ case 'i':
800
+ this.transmit(0x69);
801
+ break;
802
+ case 'j':
803
+ this.transmit(0x6A);
804
+ break;
805
+ case 'k':
806
+ this.transmit(0x6B);
807
+ break;
808
+ case 'l':
809
+ this.transmit(0x6C);
810
+ break;
811
+ case 'm':
812
+ this.transmit(0x6D);
813
+ break;
814
+ case 'n':
815
+ this.transmit(0x6E);
816
+ break;
817
+ case 'o':
818
+ this.transmit(0x6F);
819
+ break;
820
+ case 'p':
821
+ this.transmit(0x70);
822
+ break;
823
+ case 'q':
824
+ this.transmit(0x71);
825
+ break;
826
+ case 'r':
827
+ this.transmit(0x72);
828
+ break;
829
+ case 's':
830
+ this.transmit(0x73);
831
+ break;
832
+ case 't':
833
+ this.transmit(0x74);
834
+ break;
835
+ case 'u':
836
+ this.transmit(0x75);
837
+ break;
838
+ case 'v':
839
+ this.transmit(0x76);
840
+ break;
841
+ case 'w':
842
+ this.transmit(0x77);
843
+ break;
844
+ case 'x':
845
+ this.transmit(0x78);
846
+ break;
847
+ case 'y':
848
+ this.transmit(0x79);
849
+ break;
850
+ case 'z':
851
+ this.transmit(0x7A);
852
+ break;
853
+ case '{':
854
+ this.transmit(0x7B);
855
+ break;
856
+ case '|':
857
+ this.transmit(0x7C);
858
+ break;
859
+ case '}':
860
+ this.transmit(0x7D);
861
+ break;
862
+ case '~':
863
+ this.transmit(0x7E);
864
+ break;
865
+ default:
866
+ break;
867
+ }
868
+ };
869
+ }
870
+ }
871
+ exports.VTAC = VTAC;
872
+ VTAC.COLUMNS = 40;
873
+ VTAC.ROWS = 30;
874
+ VTAC.WIDTH = VTAC.COLUMNS * 8;
875
+ VTAC.HEIGHT = VTAC.ROWS * 8;
876
+ VTAC.CHARACTERS = [
877
+ [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // [] (0)
878
+ [0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e], // [☺] (1)
879
+ [0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e], // [☻] (2)
880
+ [0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00], // [♥] (3)
881
+ [0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00], // [♦] (4)
882
+ [0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c], // [♣] (5)
883
+ [0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c], // [♠] (6)
884
+ [0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00], // [•] (7)
885
+ [0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff], // [◘] (8)
886
+ [0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00], // [○] (9)
887
+ [0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff], // [◙] (10)
888
+ [0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78], // [♂] (11)
889
+ [0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18], // [♀] (12)
890
+ [0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0], // [♪] (13)
891
+ [0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0], // [♫] (14)
892
+ [0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99], // [☼] (15)
893
+ [0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00], // [►] (16)
894
+ [0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00], // [◄] (17)
895
+ [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18], // [↕] (18)
896
+ [0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00], // [‼] (19)
897
+ [0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00], // [¶] (20)
898
+ [0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78], // [§] (21)
899
+ [0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00], // [▬] (22)
900
+ [0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff], // [↨] (23)
901
+ [0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00], // [↑] (24)
902
+ [0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00], // [↓] (25)
903
+ [0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00], // [→] (26)
904
+ [0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00], // [←] (27)
905
+ [0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00], // [∟] (28)
906
+ [0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00], // [↔] (29)
907
+ [0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00], // [▲] (30)
908
+ [0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00], // [▼] (31)
909
+ [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // [ ] (32)
910
+ [0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00], // [!] (33)
911
+ [0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00], // ["] (34)
912
+ [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], // [#] (35)
913
+ [0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00], // [$] (36)
914
+ [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], // [%] (37)
915
+ [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], // [&] (38)
916
+ [0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], // ['] (39)
917
+ [0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00], // [(] (40)
918
+ [0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00], // [)] (41)
919
+ [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], // [*] (42)
920
+ [0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00], // [+] (43)
921
+ [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60], // [,] (44)
922
+ [0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00], // [-] (45)
923
+ [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00], // [.] (46)
924
+ [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], // [/] (47)
925
+ [0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00], // [0] (48)
926
+ [0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00], // [1] (49)
927
+ [0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00], // [2] (50)
928
+ [0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00], // [3] (51)
929
+ [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], // [4] (52)
930
+ [0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00], // [5] (53)
931
+ [0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00], // [6] (54)
932
+ [0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], // [7] (55)
933
+ [0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00], // [8] (56)
934
+ [0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00], // [9] (57)
935
+ [0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00], // [:] (58)
936
+ [0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60], // [;] (59)
937
+ [0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00], // [<] (60)
938
+ [0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00], // [=] (61)
939
+ [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], // [>] (62)
940
+ [0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00], // [?] (63)
941
+ [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], // [@] (64)
942
+ [0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00], // [A] (65)
943
+ [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], // [B] (66)
944
+ [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], // [C] (67)
945
+ [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], // [D] (68)
946
+ [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], // [E] (69)
947
+ [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], // [F] (70)
948
+ [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00], // [G] (71)
949
+ [0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00], // [H] (72)
950
+ [0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], // [I] (73)
951
+ [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], // [J] (74)
952
+ [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], // [K] (75)
953
+ [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], // [L] (76)
954
+ [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], // [M] (77)
955
+ [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], // [N] (78)
956
+ [0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], // [O] (79)
957
+ [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], // [P] (80)
958
+ [0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00], // [Q] (81)
959
+ [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], // [R] (82)
960
+ [0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00], // [S] (83)
961
+ [0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], // [T] (84)
962
+ [0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00], // [U] (85)
963
+ [0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00], // [V] (86)
964
+ [0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00], // [W] (87)
965
+ [0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00], // [X] (88)
966
+ [0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00], // [Y] (89)
967
+ [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], // [Z] (90)
968
+ [0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00], // [[] (91)
969
+ [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], // [\] (92)
970
+ [0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00], // []] (93)
971
+ [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], // [^] (94)
972
+ [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], // [_] (95)
973
+ [0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], // [`] (96)
974
+ [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], // [a] (97)
975
+ [0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00], // [b] (98)
976
+ [0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00], // [c] (99)
977
+ [0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00], // [d] (100)
978
+ [0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], // [e] (101)
979
+ [0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00], // [f] (102)
980
+ [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], // [g] (103)
981
+ [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], // [h] (104)
982
+ [0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], // [i] (105)
983
+ [0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78], // [j] (106)
984
+ [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], // [k] (107)
985
+ [0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], // [l] (108)
986
+ [0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00], // [m] (109)
987
+ [0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00], // [n] (110)
988
+ [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00], // [o] (111)
989
+ [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], // [p] (112)
990
+ [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], // [q] (113)
991
+ [0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00], // [r] (114)
992
+ [0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00], // [s] (115)
993
+ [0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00], // [t] (116)
994
+ [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], // [u] (117)
995
+ [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00], // [v] (118)
996
+ [0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00], // [w] (119)
997
+ [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], // [x] (120)
998
+ [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], // [y] (121)
999
+ [0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00], // [z] (122)
1000
+ [0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00], // [{] (123)
1001
+ [0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00], // [|] (124)
1002
+ [0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00], // [}] (125)
1003
+ [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // [~] (126)
1004
+ [0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00], // [⌂] (127)
1005
+ [0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x18, 0x0c, 0x78], // [Ç] (128)
1006
+ [0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], // [ü] (129)
1007
+ [0x1c, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], // [é] (130)
1008
+ [0x7e, 0xc3, 0x3c, 0x06, 0x3e, 0x66, 0x3f, 0x00], // [â] (131)
1009
+ [0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], // [ä] (132)
1010
+ [0xe0, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], // [à] (133)
1011
+ [0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], // [å] (134)
1012
+ [0x00, 0x00, 0x78, 0xc0, 0xc0, 0x78, 0x0c, 0x38], // [ç] (135)
1013
+ [0x7e, 0xc3, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00], // [ê] (136)
1014
+ [0xcc, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], // [ë] (137)
1015
+ [0xe0, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], // [è] (138)
1016
+ [0xcc, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], // [ï] (139)
1017
+ [0x7c, 0xc6, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00], // [î] (140)
1018
+ [0xe0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], // [ì] (141)
1019
+ [0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00], // [Ä] (142)
1020
+ [0x30, 0x30, 0x00, 0x78, 0xcc, 0xfc, 0xcc, 0x00], // [Å] (143)
1021
+ [0x1c, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00], // [É] (144)
1022
+ [0x00, 0x00, 0x7f, 0x0c, 0x7f, 0xcc, 0x7f, 0x00], // [æ] (145)
1023
+ [0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00], // [Æ] (146)
1024
+ [0x78, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], // [ô] (147)
1025
+ [0x00, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], // [ö] (148)
1026
+ [0x00, 0xe0, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], // [ò] (149)
1027
+ [0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], // [û] (150)
1028
+ [0x00, 0xe0, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], // [ù] (151)
1029
+ [0x00, 0xcc, 0x00, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], // [ÿ] (152)
1030
+ [0xc3, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x00], // [Ö] (153)
1031
+ [0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00], // [Ü] (154)
1032
+ [0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18], // [¢] (155)
1033
+ [0x38, 0x6c, 0x64, 0xf0, 0x60, 0xe6, 0xfc, 0x00], // [£] (156)
1034
+ [0xcc, 0xcc, 0x78, 0xfc, 0x30, 0xfc, 0x30, 0x30], // [¥] (157)
1035
+ [0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7], // [₧] (158)
1036
+ [0x0e, 0x1b, 0x18, 0x3c, 0x18, 0x18, 0xd8, 0x70], // [ƒ] (159)
1037
+ [0x1c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00], // [á] (160)
1038
+ [0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], // [í] (161)
1039
+ [0x00, 0x1c, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00], // [ó] (162)
1040
+ [0x00, 0x1c, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00], // [ú] (163)
1041
+ [0x00, 0xf8, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0x00], // [ñ] (164)
1042
+ [0xfc, 0x00, 0xcc, 0xec, 0xfc, 0xdc, 0xcc, 0x00], // [Ñ] (165)
1043
+ [0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00], // [ª] (166)
1044
+ [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00], // [º] (167)
1045
+ [0x30, 0x00, 0x30, 0x60, 0xc0, 0xcc, 0x78, 0x00], // [¿] (168)
1046
+ [0x00, 0x00, 0x00, 0xfc, 0xc0, 0xc0, 0x00, 0x00], // [⌐] (169)
1047
+ [0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00], // [¬] (170)
1048
+ [0xc3, 0xc6, 0xcc, 0xde, 0x33, 0x66, 0xcc, 0x0f], // [½] (171)
1049
+ [0xc3, 0xc6, 0xcc, 0xdb, 0x37, 0x6f, 0xcf, 0x03], // [¼] (172)
1050
+ [0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00], // [¡] (173)
1051
+ [0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00], // [«] (174)
1052
+ [0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00], // [»] (175)
1053
+ [0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88], // [░] (176)
1054
+ [0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa], // [▒] (177)
1055
+ [0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, 0xdb, 0xee], // [▓] (178)
1056
+ [0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18], // [│] (179)
1057
+ [0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18], // [┤] (180)
1058
+ [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], // [╡] (181)
1059
+ [0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36], // [╢] (182)
1060
+ [0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36], // [╖] (183)
1061
+ [0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18], // [╕] (184)
1062
+ [0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36], // [╣] (185)
1063
+ [0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36], // [║] (186)
1064
+ [0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36], // [╗] (187)
1065
+ [0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00], // [╝] (188)
1066
+ [0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00], // [╜] (189)
1067
+ [0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00], // [╛] (190)
1068
+ [0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18], // [┐] (191)
1069
+ [0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00], // [└] (192)
1070
+ [0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00], // [┴] (193)
1071
+ [0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18], // [┬] (194)
1072
+ [0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18], // [├] (195)
1073
+ [0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00], // [─] (196)
1074
+ [0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18], // [┼] (197)
1075
+ [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], // [╞] (198)
1076
+ [0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36], // [╟] (199)
1077
+ [0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00], // [╚] (200)
1078
+ [0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36], // [╔] (201)
1079
+ [0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00], // [╩] (202)
1080
+ [0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36], // [╦] (203)
1081
+ [0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36], // [╠] (204)
1082
+ [0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], // [═] (205)
1083
+ [0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36], // [╬] (206)
1084
+ [0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00], // [╧] (207)
1085
+ [0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00], // [╨] (208)
1086
+ [0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18], // [╤] (209)
1087
+ [0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36], // [╥] (210)
1088
+ [0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00], // [╙] (211)
1089
+ [0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00], // [╘] (212)
1090
+ [0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18], // [╒] (213)
1091
+ [0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36], // [╓] (214)
1092
+ [0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36], // [╫] (215)
1093
+ [0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18], // [╪] (216)
1094
+ [0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00], // [┘] (217)
1095
+ [0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18], // [┌] (218)
1096
+ [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], // [█] (219)
1097
+ [0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff], // [▄] (220)
1098
+ [0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0], // [▌] (221)
1099
+ [0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f], // [▐] (222)
1100
+ [0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00], // [▀] (223)
1101
+ [0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00], // [α] (224)
1102
+ [0x00, 0x78, 0xcc, 0xf8, 0xcc, 0xf8, 0xc0, 0xc0], // [ß] (225)
1103
+ [0x00, 0xfc, 0xcc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00], // [Γ] (226)
1104
+ [0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00], // [π] (227)
1105
+ [0xfc, 0xcc, 0x60, 0x30, 0x60, 0xcc, 0xfc, 0x00], // [Σ] (228)
1106
+ [0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00], // [σ] (229)
1107
+ [0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xc0], // [µ] (230)
1108
+ [0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00], // [τ] (231)
1109
+ [0xfc, 0x30, 0x78, 0xcc, 0xcc, 0x78, 0x30, 0xfc], // [Φ] (232)
1110
+ [0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00], // [Θ] (233)
1111
+ [0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00], // [Ω] (234)
1112
+ [0x1c, 0x30, 0x18, 0x7c, 0xcc, 0xcc, 0x78, 0x00], // [δ] (235)
1113
+ [0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00], // [∞] (236)
1114
+ [0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0], // [φ] (237)
1115
+ [0x38, 0x60, 0xc0, 0xf8, 0xc0, 0x60, 0x38, 0x00], // [ε] (238)
1116
+ [0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00], // [∩] (239)
1117
+ [0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00], // [≡] (240)
1118
+ [0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0xfc, 0x00], // [±] (241)
1119
+ [0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xfc, 0x00], // [≥] (242)
1120
+ [0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xfc, 0x00], // [≤] (243)
1121
+ [0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18], // [⌠] (244)
1122
+ [0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70], // [⌡] (245)
1123
+ [0x30, 0x30, 0x00, 0xfc, 0x00, 0x30, 0x30, 0x00], // [÷] (246)
1124
+ [0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00], // [≈] (247)
1125
+ [0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00], // [°] (248)
1126
+ [0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00], // [∙] (249)
1127
+ [0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00], // [·] (250)
1128
+ [0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c], // [√] (251)
1129
+ [0x78, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00], // [ⁿ] (252)
1130
+ [0x70, 0x18, 0x30, 0x60, 0x78, 0x00, 0x00, 0x00], // [²] (253)
1131
+ [0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00], // [■] (254)
1132
+ [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // [ ] (255)
1133
+ ];
1134
+ //# sourceMappingURL=VTAC.js.map