From 0a546a7eefd407f6fd10db51b3adcc55d8b18566 Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Fri, 1 Sep 2017 22:33:39 +0200 Subject: [PATCH] Add custom font for the Atari version, fix Atari keyboard input handling. --- apps/Makefile | 2 +- apps/atrtelnet.cfg | 52 ++ drivers/Makefile | 1 + drivers/atrinput.s | 4 +- drivers/atrvt100.s | 42 +- drivers/atrvt100font.s | 1329 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1403 insertions(+), 27 deletions(-) create mode 100644 apps/atrtelnet.cfg create mode 100644 drivers/atrvt100font.s diff --git a/apps/Makefile b/apps/Makefile index a8869c6..a11b61e 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -80,7 +80,7 @@ drivers: ld65 -o $*.bin -C apple2.cfg -m $*.a2.map -vm $< $(IP65LIB) $(A2DRIVERLIB) apple2.lib %.com: %.o ip65 drivers $(INCFILES) - ld65 -o $*.com -C atari.cfg -m $*.atr.map -vm $< $(IP65LIB) $(ATRDRIVERLIB) atari.lib + ld65 -o $*.com -C atrtelnet.cfg -m $*.atr.map -vm $< $(IP65LIB) $(ATRDRIVERLIB) atari.lib %.vicprg: %.o ip65 drivers $(INCFILES) ld65 -o $*.vicprg -C vic20-32k.cfg -m $*.vic.map -vm $< $(IP65LIB) $(VICDRIVERLIB) vic20.lib diff --git a/apps/atrtelnet.cfg b/apps/atrtelnet.cfg new file mode 100644 index 0000000..1661052 --- /dev/null +++ b/apps/atrtelnet.cfg @@ -0,0 +1,52 @@ +FEATURES { + STARTADDRESS: default = $2400; # must start on an 1K boundary since the replacement font gets loaded there +} +SYMBOLS { + __EXEHDR__: type = import; + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" + __STACKSIZE__: type = export, value = $0000; # no (C language) stack here, but symbol is referenced by the 'system_check.s' library file + __STARTADDRESS__: type = export, value = %S; + __RESERVED_MEMORY__: type = export, value = $0000; # also referenced by 'system_check.s' +} +MEMORY { + ZP: file = "", define = yes, start = $0082, size = $007E; + +# file header, just $FFFF + HEADER: file = %O, start = $0000, size = $0002; + +# "system check" load chunk + SYSCHKHDR: file = %O, start = $0000, size = $0004; + SYSCHKCHNK: file = %O, start = $2E00, size = $0300; + SYSCHKTRL: file = %O, start = $0000, size = $0006; + +# "main program" load chunk + MAINHDR: file = %O, start = $0000, size = $0004; + MAIN: file = %O, define = yes, start = %S + $0400, size = $9C20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S - $0400; + +# "font" load chunk, loads below MAIN + FONTHDR: file = %O, start = $0000, size = $0004; + FONT: file = %O, start = %S, size = $0400; + + TRAILER: file = %O, start = $0000, size = $0006; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXTZP: load = ZP, type = zp, optional = yes; + EXEHDR: load = HEADER, type = ro; + SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes; + SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; + SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; + MAINHDR: load = MAINHDR, type = ro; + STARTUP: load = MAIN, type = ro, define = yes; + LOWCODE: load = MAIN, type = ro, define = yes, optional = yes; + ONCE: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro, define = yes; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + INIT: load = MAIN, type = rw, optional = yes; + BSS: load = MAIN, type = bss, define = yes; + FONTHDR: load = FONTHDR, type = ro; + FONT: load = FONT, type = ro; + AUTOSTRT: load = TRAILER, type = ro; +} diff --git a/drivers/Makefile b/drivers/Makefile index 40eaa25..0c7bc4b 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -51,6 +51,7 @@ ATROBJS=\ atrinput.o \ atrfilteredinput.o \ atrvt100.o \ + atrvt100font.o \ atrcharconv.o VIC20OBJS=\ diff --git a/drivers/atrinput.s b/drivers/atrinput.s index 07693f4..19885ad 100644 --- a/drivers/atrinput.s +++ b/drivers/atrinput.s @@ -60,8 +60,8 @@ special_key_table2: .byte $7b ; Shift-Ctrl-9 ==> { .byte $fd ; Ctrl-0 ==> } .byte $fd ; Shift-Ctrl-0 ==> } - .byte $9e ; Shift-Ctrl-T ==> ~ - .byte $9e ; Shift-Ctrl-2 ==> ~ + .byte $9a ; Shift-Ctrl-T ==> ~ + .byte $9a ; Shift-Ctrl-2 ==> ~ ; translations $9c..$9f -> $1c..$1f, $9e -> $7e, and $fd -> $7d will be done in atrvt100.s .bss diff --git a/drivers/atrvt100.s b/drivers/atrvt100.s index 7fa2210..bc4eec7 100644 --- a/drivers/atrvt100.s +++ b/drivers/atrvt100.s @@ -14,6 +14,7 @@ .import telnet_close .import telnet_send_char .import telnet_send_string +.import vt100_font Cols = vt100_screen_cols Rows = vt100_screen_rows @@ -142,6 +143,7 @@ mul10buf .res 1 LMARGN_save .res 1 SHFLOK_save .res 1 INVFLG_save .res 1 +CHBAS_save .res 1 ; ************************************* @@ -1542,6 +1544,10 @@ InitVar lda #$00 ; ------------------------------------- InitChar + lda CHBAS + sta CHBAS_save + lda #>vt100_font + sta CHBAS rts ; ------------------------------------- @@ -1550,6 +1556,8 @@ InitChar ; ------------------------------------- ExitChar + lda CHBAS_save + sta CHBAS rts ; ------------------------------------- @@ -1634,11 +1642,11 @@ ltsc;_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f ; ◆ ▒ ␉ ␌ ␍ ␊ ° ± ␤ ␋ ┘ ┐ ┌ └ ┼ ⎺ ; ◆ ▒ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ⎸ ' ' _ ⎿ ⎿ ⎺ ;.byt $5b,$56,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$5f,$a0,$9f,$54,$54,$4c ; 6_ -.byt $5b,$56,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$43,$45,$51,$5a,$54,$4c ; 6_ +.byt $5b,$56,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$43,$45,$51,$5a,$53,$4c ; 6_ ; ⎻ ─ ⎼ ⎽ ├ ┤ ┴ ┬ │ ≤ ≥ π ≠ £ · ' ' ; ─ _ _ _ ⎿ ⎸ ⎿ _ ⎸ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ;.byt $53,$9f,$9f,$9f,$54,$5f,$54,$9f,$5f,$a0,$a0,$a0,$a0,$a0,$a0,$a0 ; 7_ -.byt $53,$52,$9f,$9f,$54,$5f,$54,$9f,$7c,$a0,$a0,$a0,$a0,$a0,$a0,$a0 ; 7_ +.byt $53,$52,$9f,$9f,$41,$44,$54,$9f,$7c,$a0,$a0,$a0,$a0,$a0,$a0,$a0 ; 7_ ; ------------------------------------- ; table keyboard to ASCII @@ -1678,36 +1686,22 @@ kta ;_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f .byt $60,$61,$62,$63,$64,$65,$66,$67,$fe,$69,$6a,$6b,$6c,$6d,$6e,$6f ; 6_ ; {DELETE} ; p q r s t u v w x y z { | } ~ DEL -.byt $70,$fe,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$0c,$08,$09 ; 7_ +.byt $70,$fe,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$0c,$7f,$09 ; 7_ + +; --- most of the following values are set to "ignored" ($ff) ------ +; --- some of the not ignored values can come from the ROM --------- +; --- some of them are synthesized in atrinput.s ------------------- -; --- high bit set typically means "inverse chars" ----------------- -; --- map them to regular chars in case the user has --------------- -; --- accidentally switched to inverse ----------------------------- -; {←} {↓} {↑} -; ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O .byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff ; 8_ -; {→} ~ -; ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^\ ^] ^^ ^_ ; {RETURN} -.byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$0d,$7f,$ff,$7e,$1f ; 9_ - -; --- special chars ------------------------------------------------ -; ' ' ! " # $ % & ' ( ) * + , - . / +.byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7e,$0d,$1c,$1d,$1e,$1f ; 9_ .byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff ; a_ -; 0 1 2 3 4 5 6 7 8 9 : ; < = > ? .byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff ; b_ - -; --- capital letters ---------------------------------------------- -; @ A B C D E F G H I J K L M N O .byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff ; c_ -; P Q R S T U V W X Y Z [ \ ] ^ _ .byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff ; d_ - -; --- lower case letters ------------------------------------------- -; ` a b c d e f g h i j k l m n o .byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff ; e_ -; p q r s t u v w x y z { | } ~ DEL -.byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$fe,$ff,$7f,$ff ; f_ +; {HELP} +.byt $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$fe,$7d,$08,$ff ; f_ ; ----------------------------------------------- diff --git a/drivers/atrvt100font.s b/drivers/atrvt100font.s new file mode 100644 index 0000000..b9f4d6a --- /dev/null +++ b/drivers/atrvt100font.s @@ -0,0 +1,1329 @@ + +.segment "FONTHDR" + + .word vt100_font + .word vt100_font_end - 1 + +.segment "FONT" + +.export vt100_font + +.assert (vt100_font & $3ff) = 0, error, "Invalid font address" ; font definition must be at an 1K boundary + +vt100_font: + +;$00 - space + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$01 - ! + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + .byte %00011000 + .byte %00000000 + +;$02 - " + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$03 - # + .byte %00000000 + .byte %01100110 + .byte %11111111 + .byte %01100110 + .byte %01100110 + .byte %11111111 + .byte %01100110 + .byte %00000000 + +;$04 - $ + .byte %00011000 + .byte %00111110 + .byte %01100000 + .byte %00111100 + .byte %00000110 + .byte %01111100 + .byte %00011000 + .byte %00000000 + +;$05 - % + .byte %00000000 + .byte %01100110 + .byte %01101100 + .byte %00011000 + .byte %00110000 + .byte %01100110 + .byte %01000110 + .byte %00000000 + +;$06 - & + .byte %00011100 + .byte %00110110 + .byte %00011100 + .byte %00111000 + .byte %01101111 + .byte %01100110 + .byte %00111011 + .byte %00000000 + +;$07 - ' + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$08 - ( + .byte %00000000 + .byte %00001110 + .byte %00011100 + .byte %00011000 + .byte %00011000 + .byte %00011100 + .byte %00001110 + .byte %00000000 + +;$09 - ) + .byte %00000000 + .byte %01110000 + .byte %00111000 + .byte %00011000 + .byte %00011000 + .byte %00111000 + .byte %01110000 + .byte %00000000 + +;$0A - asterisk + .byte %00000000 + .byte %01100110 + .byte %00111100 + .byte %11111111 + .byte %00111100 + .byte %01100110 + .byte %00000000 + .byte %00000000 + +;$0B - plus + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %01111110 + .byte %00011000 + .byte %00011000 + .byte %00000000 + .byte %00000000 + +;$0C - comma + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00110000 + +;$0D - minus + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %01111110 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$0E - period + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + +;$0F - / + .byte %00000000 + .byte %00000110 + .byte %00001100 + .byte %00011000 + .byte %00110000 + .byte %01100000 + .byte %01000000 + .byte %00000000 + +;$10 - 0 + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %01101110 + .byte %01110110 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$11 - 1 + .byte %00000000 + .byte %00011000 + .byte %00111000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %01111110 + .byte %00000000 + +;$12 - 2 + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %00001100 + .byte %00011000 + .byte %00110000 + .byte %01111110 + .byte %00000000 + +;$13 - 3 + .byte %00000000 + .byte %01111110 + .byte %00001100 + .byte %00011000 + .byte %00001100 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$14 - 4 + .byte %00000000 + .byte %00001100 + .byte %00011100 + .byte %00111100 + .byte %01101100 + .byte %01111110 + .byte %00001100 + .byte %00000000 + +;$15 - 5 + .byte %00000000 + .byte %01111110 + .byte %01100000 + .byte %01111100 + .byte %00000110 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$16 - 6 + .byte %00000000 + .byte %00111100 + .byte %01100000 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$17 - 7 + .byte %00000000 + .byte %01111110 + .byte %00000110 + .byte %00001100 + .byte %00011000 + .byte %00110000 + .byte %00110000 + .byte %00000000 + +;$18 - 8 + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %00111100 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$19 - 9 + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %00111110 + .byte %00000110 + .byte %00001100 + .byte %00111000 + .byte %00000000 + +;$1A - colon + .byte %00000000 + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + +;$1B - semicolon + .byte %00000000 + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00110000 + +;$1C - < + .byte %00000110 + .byte %00001100 + .byte %00011000 + .byte %00110000 + .byte %00011000 + .byte %00001100 + .byte %00000110 + .byte %00000000 + +;$1D - = + .byte %00000000 + .byte %00000000 + .byte %01111110 + .byte %00000000 + .byte %00000000 + .byte %01111110 + .byte %00000000 + .byte %00000000 + +;$1E - > + .byte %01100000 + .byte %00110000 + .byte %00011000 + .byte %00001100 + .byte %00011000 + .byte %00110000 + .byte %01100000 + .byte %00000000 + +;$1F - ? + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %00001100 + .byte %00011000 + .byte %00000000 + .byte %00011000 + .byte %00000000 + +;$20 - @ + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %01101110 + .byte %01101110 + .byte %01100000 + .byte %00111110 + .byte %00000000 + +;$21 - A + .byte %00000000 + .byte %00011000 + .byte %00111100 + .byte %01100110 + .byte %01100110 + .byte %01111110 + .byte %01100110 + .byte %00000000 + +;$22 - B + .byte %00000000 + .byte %01111100 + .byte %01100110 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %01111100 + .byte %00000000 + +;$23 - C + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %01100000 + .byte %01100000 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$24 - D + .byte %00000000 + .byte %01111000 + .byte %01101100 + .byte %01100110 + .byte %01100110 + .byte %01101100 + .byte %01111000 + .byte %00000000 + +;$25 - E + .byte %00000000 + .byte %01111110 + .byte %01100000 + .byte %01111100 + .byte %01100000 + .byte %01100000 + .byte %01111110 + .byte %00000000 + +;$26 - F + .byte %00000000 + .byte %01111110 + .byte %01100000 + .byte %01111100 + .byte %01100000 + .byte %01100000 + .byte %01100000 + .byte %00000000 + +;$27 - G + .byte %00000000 + .byte %00111110 + .byte %01100000 + .byte %01100000 + .byte %01101110 + .byte %01100110 + .byte %00111110 + .byte %00000000 + +;$28 - H + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %01111110 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00000000 + +;$29 - I + .byte %00000000 + .byte %01111110 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %01111110 + .byte %00000000 + +;$2A - J + .byte %00000000 + .byte %00000110 + .byte %00000110 + .byte %00000110 + .byte %00000110 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$2B - K + .byte %00000000 + .byte %01100110 + .byte %01101100 + .byte %01111000 + .byte %01111000 + .byte %01101100 + .byte %01100110 + .byte %00000000 + +;$2C - L + .byte %00000000 + .byte %01100000 + .byte %01100000 + .byte %01100000 + .byte %01100000 + .byte %01100000 + .byte %01111110 + .byte %00000000 + +;$2D - M + .byte %00000000 + .byte %01100011 + .byte %01110111 + .byte %01111111 + .byte %01101011 + .byte %01100011 + .byte %01100011 + .byte %00000000 + +;$2E - N + .byte %00000000 + .byte %01100110 + .byte %01110110 + .byte %01111110 + .byte %01111110 + .byte %01101110 + .byte %01100110 + .byte %00000000 + +;$2F - O + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$30 - P + .byte %00000000 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %01111100 + .byte %01100000 + .byte %01100000 + .byte %00000000 + +;$31 - Q + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01101100 + .byte %00110110 + .byte %00000000 + +;$32 - R + .byte %00000000 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %01111100 + .byte %01101100 + .byte %01100110 + .byte %00000000 + +;$33 - S + .byte %00000000 + .byte %00111100 + .byte %01100000 + .byte %00111100 + .byte %00000110 + .byte %00000110 + .byte %00111100 + .byte %00000000 + +;$34 - T + .byte %00000000 + .byte %01111110 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + +;$35 - U + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01111110 + .byte %00000000 + +;$36 - V + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00011000 + .byte %00000000 + +;$37 - W + .byte %00000000 + .byte %01100011 + .byte %01100011 + .byte %01101011 + .byte %01111111 + .byte %01110111 + .byte %01100011 + .byte %00000000 + +;$38 - X + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00111100 + .byte %01100110 + .byte %01100110 + .byte %00000000 + +;$39 - Y + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + +;$3A - Z + .byte %00000000 + .byte %01111110 + .byte %00001100 + .byte %00011000 + .byte %00110000 + .byte %01100000 + .byte %01111110 + .byte %00000000 + +;$3B - [ + .byte %00000000 + .byte %00011110 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011110 + .byte %00000000 + +;$3C - \ + .byte %00000000 + .byte %01000000 + .byte %01100000 + .byte %00110000 + .byte %00011000 + .byte %00001100 + .byte %00000110 + .byte %00000000 + +;$3D - ] + .byte %00000000 + .byte %01111000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %01111000 + .byte %00000000 + +;$3E - ^ + .byte %00000000 + .byte %00001000 + .byte %00011100 + .byte %00110110 + .byte %01100011 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$3F - underline + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %11111111 + .byte %00000000 + +;$40 - heart card + .byte %00000000 + .byte %00110110 + .byte %01111111 + .byte %01111111 + .byte %00111110 + .byte %00011100 + .byte %00001000 + .byte %00000000 + +;$41 - mid left window + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011111 + .byte %00011111 + .byte %00011000 + .byte %00011000 + .byte %00011000 + +;$42 - right box + .byte %00000011 + .byte %00000011 + .byte %00000011 + .byte %00000011 + .byte %00000011 + .byte %00000011 + .byte %00000011 + .byte %00000011 + +;$43 - low right window + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %11111000 + .byte %11111000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$44 - mid right window + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %11111000 + .byte %11111000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + +;$45 - up right window + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %11111000 + .byte %11111000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + +;$46 - right slant box + .byte %00000011 + .byte %00000111 + .byte %00001110 + .byte %00011100 + .byte %00111000 + .byte %01110000 + .byte %11100000 + .byte %11000000 + +;$47 - left slant box + .byte %11000000 + .byte %11100000 + .byte %01110000 + .byte %00111000 + .byte %00011100 + .byte %00001110 + .byte %00000111 + .byte %00000011 + +;$48 - right slant solid + .byte %00000001 + .byte %00000011 + .byte %00000111 + .byte %00001111 + .byte %00011111 + .byte %00111111 + .byte %01111111 + .byte %11111111 + +;$49 - low right solid + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00001111 + .byte %00001111 + .byte %00001111 + .byte %00001111 + +;$4A - left slant solid + .byte %10000000 + .byte %11000000 + .byte %11100000 + .byte %11110000 + .byte %11111000 + .byte %11111100 + .byte %11111110 + .byte %11111111 + +;$4B - up right solid + .byte %00001111 + .byte %00001111 + .byte %00001111 + .byte %00001111 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$4C - up left solid + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$4D - top box + .byte %11111111 + .byte %11111111 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$4E - bottom box + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %11111111 + .byte %11111111 + +;$4F - low left solid + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + +;$50 - club card + .byte %00000000 + .byte %00011100 + .byte %00011100 + .byte %01110111 + .byte %01110111 + .byte %00001000 + .byte %00011100 + .byte %00000000 + +;$51 - up left window + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00011111 + .byte %00011111 + .byte %00011000 + .byte %00011000 + .byte %00011000 + +;$52 - mid box + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %11111111 + .byte %11111111 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$53 - mid window + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %11111111 + .byte %11111111 + .byte %00011000 + .byte %00011000 + .byte %00011000 + +;$54 - solid circle + .byte %00000000 + .byte %00000000 + .byte %00111100 + .byte %01111110 + .byte %01111110 + .byte %01111110 + .byte %00111100 + .byte %00000000 + +;$55 - bottom solid + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %11111111 + .byte %11111111 + .byte %11111111 + .byte %11111111 + +;$56 - left box + .byte %11000000 + .byte %11000000 + .byte %11000000 + .byte %11000000 + .byte %11000000 + .byte %11000000 + .byte %11000000 + .byte %11000000 + +;$57 - up mid window + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %11111111 + .byte %11111111 + .byte %00011000 + .byte %00011000 + .byte %00011000 + +;$58 - low mid window + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %11111111 + .byte %11111111 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$59 - left solid + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + .byte %11110000 + +;$5A - low left window + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011111 + .byte %00011111 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$5B - display escape + .byte %01111000 + .byte %01100000 + .byte %01111000 + .byte %01100000 + .byte %01111110 + .byte %00011000 + .byte %00011110 + .byte %00000000 + +;$5C - up arrow + .byte %00000000 + .byte %00011000 + .byte %00111100 + .byte %01111110 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + +;$5D - down arrow + .byte %00000000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %01111110 + .byte %00111100 + .byte %00011000 + .byte %00000000 + +;$5E - left arrow + .byte %00000000 + .byte %00011000 + .byte %00110000 + .byte %01111110 + .byte %00110000 + .byte %00011000 + .byte %00000000 + .byte %00000000 + +;$5F - right arrow + .byte %00000000 + .byte %00011000 + .byte %00001100 + .byte %01111110 + .byte %00001100 + .byte %00011000 + .byte %00000000 + .byte %00000000 + +;$60 - original: diamond card; now ` +; .byte %00000000 +; .byte %00011000 +; .byte %00111100 +; .byte %01111110 +; .byte %01111110 +; .byte %00111100 +; .byte %00011000 +; .byte %00000000 + .byte %00000000 + .byte %00110000 + .byte %00011000 + .byte %00001100 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$61 - a + .byte %00000000 + .byte %00000000 + .byte %00111100 + .byte %00000110 + .byte %00111110 + .byte %01100110 + .byte %00111110 + .byte %00000000 + +;$62 - b + .byte %00000000 + .byte %01100000 + .byte %01100000 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %01111100 + .byte %00000000 + +;$63 - c + .byte %00000000 + .byte %00000000 + .byte %00111100 + .byte %01100000 + .byte %01100000 + .byte %01100000 + .byte %00111100 + .byte %00000000 + +;$64 - d + .byte %00000000 + .byte %00000110 + .byte %00000110 + .byte %00111110 + .byte %01100110 + .byte %01100110 + .byte %00111110 + .byte %00000000 + +;$65 - e + .byte %00000000 + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %01111110 + .byte %01100000 + .byte %00111100 + .byte %00000000 + +;$66 - f + .byte %00000000 + .byte %00001110 + .byte %00011000 + .byte %00111110 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00000000 + +;$67 - g + .byte %00000000 + .byte %00000000 + .byte %00111110 + .byte %01100110 + .byte %01100110 + .byte %00111110 + .byte %00000110 + .byte %01111100 + +;$68 - h + .byte %00000000 + .byte %01100000 + .byte %01100000 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00000000 + +;$69 - i + .byte %00000000 + .byte %00011000 + .byte %00000000 + .byte %00111000 + .byte %00011000 + .byte %00011000 + .byte %00111100 + .byte %00000000 + +;$6A - j + .byte %00000000 + .byte %00000110 + .byte %00000000 + .byte %00000110 + .byte %00000110 + .byte %00000110 + .byte %00000110 + .byte %00111100 + +;$6B - k + .byte %00000000 + .byte %01100000 + .byte %01100000 + .byte %01101100 + .byte %01111000 + .byte %01101100 + .byte %01100110 + .byte %00000000 + +;$6C - l + .byte %00000000 + .byte %00111000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00111100 + .byte %00000000 + +;$6D - m + .byte %00000000 + .byte %00000000 + .byte %01100110 + .byte %01111111 + .byte %01111111 + .byte %01101011 + .byte %01100011 + .byte %00000000 + +;$6E - n + .byte %00000000 + .byte %00000000 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00000000 + +;$6F - o + .byte %00000000 + .byte %00000000 + .byte %00111100 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00000000 + +;$70 - p + .byte %00000000 + .byte %00000000 + .byte %01111100 + .byte %01100110 + .byte %01100110 + .byte %01111100 + .byte %01100000 + .byte %01100000 + +;$71 - q + .byte %00000000 + .byte %00000000 + .byte %00111110 + .byte %01100110 + .byte %01100110 + .byte %00111110 + .byte %00000110 + .byte %00000110 + +;$72 - r + .byte %00000000 + .byte %00000000 + .byte %01111100 + .byte %01100110 + .byte %01100000 + .byte %01100000 + .byte %01100000 + .byte %00000000 + +;$73 - s + .byte %00000000 + .byte %00000000 + .byte %00111110 + .byte %01100000 + .byte %00111100 + .byte %00000110 + .byte %01111100 + .byte %00000000 + +;$74 - t + .byte %00000000 + .byte %00011000 + .byte %01111110 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00001110 + .byte %00000000 + +;$75 - u + .byte %00000000 + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00111110 + .byte %00000000 + +;$76 - v + .byte %00000000 + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00111100 + .byte %00011000 + .byte %00000000 + +;$77 - w + .byte %00000000 + .byte %00000000 + .byte %01100011 + .byte %01101011 + .byte %01111111 + .byte %00111110 + .byte %00110110 + .byte %00000000 + +;$78 - x + .byte %00000000 + .byte %00000000 + .byte %01100110 + .byte %00111100 + .byte %00011000 + .byte %00111100 + .byte %01100110 + .byte %00000000 + +;$79 - y + .byte %00000000 + .byte %00000000 + .byte %01100110 + .byte %01100110 + .byte %01100110 + .byte %00111110 + .byte %00001100 + .byte %01111000 + +;$7A - z + .byte %00000000 + .byte %00000000 + .byte %01111110 + .byte %00001100 + .byte %00011000 + .byte %00110000 + .byte %01111110 + .byte %00000000 + +;$7B - original: spade card; now: { +; .byte %00000000 +; .byte %00011000 +; .byte %00111100 +; .byte %01111110 +; .byte %01111110 +; .byte %00011000 +; .byte %00111100 +; .byte %00000000 + .byte %00000000 + .byte %00011110 + .byte %00011000 + .byte %00110000 + .byte %00110000 + .byte %00011000 + .byte %00011110 + .byte %00000000 + +;$7C - | + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + .byte %00011000 + +;$7D - original: display clear; now: } +; .byte %00000000 +; .byte %01111110 +; .byte %01111000 +; .byte %01111100 +; .byte %01101110 +; .byte %01100110 +; .byte %00000110 +; .byte %00000000 + .byte %00000000 + .byte %01111000 + .byte %00011000 + .byte %00001100 + .byte %00001100 + .byte %00011000 + .byte %01111000 + .byte %00000000 + +;$7E - original: display backspace; now: ~ +; .byte %00001000 +; .byte %00011000 +; .byte %00111000 +; .byte %01111000 +; .byte %00111000 +; .byte %00011000 +; .byte %00001000 +; .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00110110 + .byte %11011000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +;$7F - display tab + .byte %00010000 + .byte %00011000 + .byte %00011100 + .byte %00011110 + .byte %00011100 + .byte %00011000 + .byte %00010000 + .byte %00000000 + +vt100_font_end: + + .end