Add custom font for the Atari version, fix Atari keyboard input handling.

This commit is contained in:
Christian Groessler 2017-09-01 22:33:39 +02:00
parent a4552b0e34
commit 0a546a7eef
6 changed files with 1403 additions and 27 deletions

View File

@ -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

52
apps/atrtelnet.cfg Normal file
View File

@ -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;
}

View File

@ -51,6 +51,7 @@ ATROBJS=\
atrinput.o \
atrfilteredinput.o \
atrvt100.o \
atrvt100font.o \
atrcharconv.o
VIC20OBJS=\

View File

@ -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

View File

@ -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_
; -----------------------------------------------

1329
drivers/atrvt100font.s Normal file

File diff suppressed because it is too large Load Diff