From 440442981d25447c111f04d149ca5bc2da741c86 Mon Sep 17 00:00:00 2001 From: Martin Hoffmann-Vetter Date: Thu, 13 Feb 2014 22:40:56 -0800 Subject: [PATCH] added AIM-65 --- aim65.cfg | 19 +++++++++++++ aim65_extra.s | 5 ++++ aim65_iscntc.s | 18 +++++++++++++ aim65_loadsave.s | 51 +++++++++++++++++++++++++++++++++++ defines.s | 7 +++++ defines_aim65.s | 59 ++++++++++++++++++++++++++++++++++++++++ error.s | 2 +- extra.s | 4 +++ float.s | 30 ++++++++++----------- flow1.s | 2 ++ header.s | 5 ++++ init.s | 69 +++++++++++++++++++++++++++++++++++++++++++---- inline.s | 35 ++++++++++++++++++++++-- input.s | 10 +++++++ iscntc.s | 3 +++ loadsave.s | 3 +++ make.sh | 2 +- message.s | 5 ++-- misc1.s | 10 +++++++ orig/aim65.bin | Bin 0 -> 8192 bytes poke.s | 2 +- print.s | 28 +++++++++++++++++-- program.s | 41 ++++++++++++++++++++++------ regress.sh | 2 +- string.s | 11 ++++++-- trig.s | 2 ++ zeropage.s | 6 +++++ 27 files changed, 391 insertions(+), 40 deletions(-) create mode 100644 aim65.cfg create mode 100644 aim65_extra.s create mode 100644 aim65_iscntc.s create mode 100644 aim65_loadsave.s create mode 100644 defines_aim65.s create mode 100644 orig/aim65.bin diff --git a/aim65.cfg b/aim65.cfg new file mode 100644 index 0000000..72359b4 --- /dev/null +++ b/aim65.cfg @@ -0,0 +1,19 @@ +MEMORY { + ZP: start = $0000, size = $0100, type = rw; + BASROM: start = $B000, size = $2000, fill = no, file = %O; + DUMMY: start = $0000, size = $00FF, file = ""; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + HEADER: load = BASROM, type = ro; + VECTORS: load = BASROM, type = ro; + KEYWORDS: load = BASROM, type = ro; + ERROR: load = BASROM, type = ro; + CODE: load = BASROM, type = ro; + CHRGET: load = BASROM, type = ro; + INIT: load = BASROM, type = ro; + EXTRA: load = BASROM, type = ro; + DUMMY: load = DUMMY; # don't include +} + diff --git a/aim65_extra.s b/aim65_extra.s new file mode 100644 index 0000000..b76891e --- /dev/null +++ b/aim65_extra.s @@ -0,0 +1,5 @@ +.segment "EXTRA" + +LCFFA: + jsr CHRGOT + jmp LB89D \ No newline at end of file diff --git a/aim65_iscntc.s b/aim65_iscntc.s new file mode 100644 index 0000000..1d519b2 --- /dev/null +++ b/aim65_iscntc.s @@ -0,0 +1,18 @@ +.segment "CODE" +ISCNTC: + lda DRA2 + pha + lda #$7f + sta DRA2 + pha + pla + lda DRB2 + rol a + pla + sta DRA2 + bcs RET2 + + jsr GETKEY + lda #$03 + cmp #$03 +;!!! runs into "STOP" \ No newline at end of file diff --git a/aim65_loadsave.s b/aim65_loadsave.s new file mode 100644 index 0000000..b239321 --- /dev/null +++ b/aim65_loadsave.s @@ -0,0 +1,51 @@ +.segment "CODE" + +SAVE: + pha + jsr WHEREO + jsr OUTSP + lda #$ff + jmp LB4BF + +MONRDKEY: + lda INFLG + jsr COUT5 + bne LOAD2 + jmp INALL +LOAD2: + jmp CUREAD + +MONCOUT: + pha + lda OUTFLG + jsr COUT5 + bne COUT3 + pla + jmp OUTALL + +COUT3: + pla + cmp #LF + beq COUT6 + cmp #CR + beq COUT4 + jmp OUTPUT +COUT4: + jsr CRCK + lda #CR + rts + +COUT5: + cmp #$54 + beq COUT6 + cmp #$55 + beq COUT6 + cmp #$4C +COUT6: + rts + +MONRDKEY2: + jsr ROONEK + tya + beq COUT5 + jmp GETKY diff --git a/defines.s b/defines.s index 0eac6a5..28e27dc 100644 --- a/defines.s +++ b/defines.s @@ -19,6 +19,9 @@ KBD := 1 .elseif .def(microtan) MICROTAN := 1 .include "defines_microtan.s" +.elseif .def(aim65) +AIM65 := 1 +.include "defines_aim65.s" .endif .ifdef CONFIG_2C @@ -42,6 +45,7 @@ CONFIG_10A := 1 .ifdef CONFIG_SMALL BYTES_FP := 4 +CONFIG_SMALL_ERROR := 1 .else BYTES_FP := 5 .endif @@ -60,6 +64,9 @@ MAX_EXPON = 10 .endif STACK := $0100 +.ifndef STACK2 +STACK2 := STACK +.endif .ifdef INPUTBUFFER .if INPUTBUFFER >= $0100 diff --git a/defines_aim65.s b/defines_aim65.s new file mode 100644 index 0000000..7811c07 --- /dev/null +++ b/defines_aim65.s @@ -0,0 +1,59 @@ +; configuration +CONFIG_2A := 1 + +CONFIG_NULL := 1 +CONFIG_PRINT_CR := 1 ; print CR when line end reached +CONFIG_SAFE_NAMENOTFOUND := 1 +CONFIG_SCRTCH_ORDER := 1 +CONFIG_PEEK_SAVE_LINNUM := 1 +CONFIG_SMALL_ERROR := 1 + +; zero page +ZP_START1 = $00 +ZP_START2 = $10 +ZP_START3 = $06 +ZP_START4 = $5E + +;extra ZP variables +USR := $03 +TXPSV := LASTOP + +NULL := IQERR + +; inputbuffer +INPUTBUFFER := $0016 + +;extra stack +STACK2 := $0200 + +; constants +STACK_TOP := $FD +SPACE_FOR_GOSUB := $44 +NULL_MAX := $F2 ; probably different in original version; the image I have seems +CRLF_1 := CR +CRLF_2 := LF +WIDTH := 20 +WIDTH2 := 10 + +; memory layout +RAMSTART2 := $0211 + +; monitor functions +PRIFLG := $A411 +INFLG := $A412 +OUTFLG := $A413 +DRA2 := $A480 +DRB2 := $A482 + +DU13 := $E520 +PSLS := $E7DC +LOAD := $E848 +WHEREO := $E871 +OUTPUT := $E97A +INALL := $E993 +OUTALL := $E9BC +CRCK := $EA24 +GETKEY := $EC40 +GETKY := $EC43 +ROONEK := $ECEF +CUREAD := $FE83 \ No newline at end of file diff --git a/error.s b/error.s index aa184e2..edaf6f2 100644 --- a/error.s +++ b/error.s @@ -1,6 +1,6 @@ init_error_table -.ifdef CONFIG_SMALL +.ifdef CONFIG_SMALL_ERROR define_error ERR_NOFOR, "NF" define_error ERR_SYNTAX, "SN" define_error ERR_NOGOSUB, "RG" diff --git a/extra.s b/extra.s index f6b80a5..8d99dc9 100644 --- a/extra.s +++ b/extra.s @@ -18,4 +18,8 @@ .ifdef MICROTAN .include "microtan_extra.s" +.endif + +.ifdef AIM65 +.include "aim65_extra.s" .endif \ No newline at end of file diff --git a/float.s b/float.s index 220e1fd..f555d1b 100644 --- a/float.s +++ b/float.s @@ -1428,7 +1428,7 @@ FOUT1: bpl L3C73 lda #$2D L3C73: - sta $FF,y + sta STACK2-1,y sta FACSIGN sty STRNG2 iny @@ -1509,12 +1509,12 @@ L3CDF: ldy STRNG2 lda #$2E iny - sta $FF,y + sta STACK2-1,y txa beq L3CF0 lda #$30 iny - sta $FF,y + sta STACK2-1,y L3CF0: sty STRNG2 ; ---------------------------------------------------------------------------- @@ -1564,12 +1564,12 @@ L3D23: iny tax and #$7F - sta $FF,y + sta STACK2-1,y dec INDX bne L3D3E lda #$2E iny - sta $FF,y + sta STACK2-1,y L3D3E: sty STRNG2 ldy VARPNT @@ -1591,7 +1591,7 @@ L3D3E: LDD96: ldy STRNG2 L3D4E: - lda $FF,y + lda STACK2-1,y dey cmp #$30 beq L3D4E @@ -1609,9 +1609,9 @@ L3D5B: tax lda #$2D L3D6B: - sta STACK+1,y + sta STACK2+1,y lda #$45 - sta STACK,y + sta STACK2,y txa ldx #$2F sec @@ -1620,20 +1620,20 @@ L3D77: sbc #$0A bcs L3D77 adc #$3A - sta STACK+3,y + sta STACK2+3,y txa - sta STACK+2,y + sta STACK2+2,y lda #$00 - sta STACK+4,y + sta STACK2+4,y beq L3D94 FOUT4: - sta $FF,y + sta STACK2-1,y L3D8F: lda #$00 - sta STACK,y + sta STACK2,y L3D94: - lda #$00 - ldy #$01 + lda #STACK2 rts ; ---------------------------------------------------------------------------- diff --git a/flow1.s b/flow1.s index 593e814..1fdbd3b 100644 --- a/flow1.s +++ b/flow1.s @@ -299,6 +299,7 @@ LE68E: rts .endif +.ifndef AIM65 .if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS) ; CBM1 has the keyword removed, ; but the code is still here @@ -319,3 +320,4 @@ CLEAR: bne RET1 jmp CLEARC .endif +.endif diff --git a/header.s b/header.s index 10ef261..879cd4c 100644 --- a/header.s +++ b/header.s @@ -3,3 +3,8 @@ jmp LE68C .byte $00,$13,$56 .endif +.ifdef AIM65 + jmp COLD_START + jmp RESTART + .word AYINT,GIVAYF +.endif diff --git a/init.s b/init.s index 3dbc919..eacf244 100644 --- a/init.s +++ b/init.s @@ -10,9 +10,11 @@ FNDLIN2: PR_WRITTEN_BY: .ifndef KBD .ifndef CONFIG_CBM_ALL + .ifndef AIM65 lda #QT_WRITTEN_BY jsr STROUT + .endif .endif .endif COLD_START: @@ -34,6 +36,8 @@ COLD_START: .endif .ifdef CONFIG_NO_INPUTBUFFER_ZP ldx #$FB + .elseif .def(AIM65) + ldx #$FE .endif txs .ifndef CONFIG_CBM_ALL @@ -41,6 +45,7 @@ COLD_START: ldy #>COLD_START sta GORESTART+1 sty GORESTART+2 + .ifndef AIM65 sta GOSTROUT+1 sty GOSTROUT+2 lda #GIVAYF sta GOGIVEAYF sty GOGIVEAYF+1 + .endif .endif lda #$4C .ifdef CONFIG_CBM_ALL sta JMPADRS .endif sta GORESTART + .ifdef AIM65 + sta JMPADRS + sta ATN + sta GOSTROUT + .else .ifndef CONFIG_CBM_ALL sta GOSTROUT sta JMPADRS @@ -64,6 +75,7 @@ COLD_START: .if (!.def(CONFIG_RAM)) && (!.def(CONFIG_CBM_ALL)) sta USR .endif + .endif .ifndef CONFIG_RAM .ifdef APPLE @@ -73,8 +85,15 @@ COLD_START: lda #IQERR .endif + .ifdef AIM65 + sta ATN+1 + sty ATN+2 + sta GOSTROUT+1 + sty GOSTROUT+2 + .else sta USR+1 sty USR+2 + .endif .endif .ifndef CBM1 lda #WIDTH @@ -82,7 +101,7 @@ COLD_START: lda #WIDTH2 sta Z18 .endif -.endif /* KBD */ +.endif ; All non-CONFIG_SMALL versions of BASIC have ; the same bug here: While the number of bytes @@ -125,19 +144,23 @@ L4098: sta CURDVC .endif sta LASTPT+1 + .ifndef AIM65 .if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS) sta Z15 .endif + .endif .ifndef CONFIG_11 sta POSX .endif pha sta Z14 .ifndef CBM2 + .ifndef AIM65 .ifndef MICROTAN lda #$03 sta DSCLEN .endif + .endif .ifndef CONFIG_11 lda #$2C sta LINNUM+1 @@ -168,8 +191,10 @@ L4098: stx TXTPTR sty TXTPTR+1 jsr CHRGET + .ifndef AIM65 cmp #$41 beq PR_WRITTEN_BY + .endif tay bne L40EE .endif @@ -202,6 +227,12 @@ L40D7: ; optimized version of the CBM1 code bmi L40FA .endif +.if .def(AIM65) +; AIM65: hard RAM top limit is $A000 + lda LINNUM+1 + cmp #$A0 + beq L40FA +.endif L40DD: .ifdef CONFIG_2 lda #$55 ; 01010101 / 10101010 @@ -236,7 +267,7 @@ L40FA: ldy LINNUM+1 sta MEMSIZ sty MEMSIZ+1 -.ifndef MICROTAN +.if !(.def(MICROTAN) || .def(AIM65)) sta FRETOP sty FRETOP+1 .endif @@ -267,10 +298,18 @@ L4106: L2829: sta Z17 L4129: + .ifdef AIM65 + sbc #$0A + .else sbc #$0E + .endif bcs L4129 eor #$FF + .ifdef AIM65 + sbc #$08 + .else sbc #$0C + .endif clc adc Z17 sta Z18 @@ -355,6 +394,12 @@ L4192: .endif .ifdef CONFIG_CBM_ALL jmp RESTART +.elseif .def(AIM65) + lda #CRDO + sta GORESTART+1 + sty GORESTART+2 + jmp RESTART .else lda #STROUT @@ -379,6 +424,7 @@ QT_WANT: .endif QT_WRITTEN_BY: .ifndef CONFIG_CBM_ALL + .ifndef AIM65 .ifdef APPLE asc80 "COPYRIGHT 1977 BY MICROSOFT CO" .byte CR,0 @@ -391,11 +437,15 @@ QT_WRITTEN_BY: .endif .byte CR,LF,0 .endif + .endif QT_MEMORY_SIZE: .byte "MEMORY SIZE" .byte 0 QT_TERMINAL_WIDTH: - .byte "TERMINAL WIDTH" + .ifndef AIM65 + .byte "TERMINAL " + .endif + .byte "WIDTH" .byte 0 .endif QT_BYTES_FREE: @@ -418,6 +468,9 @@ QT_BASIC: .ifdef MICROTAN .byte "MICROTAN BASIC" .endif + .ifdef AIM65 + .byte " AIM 65 BASIC V1.1" + .endif .ifdef CBM1 .byte $13 ; HOME .byte "*** COMMODORE BASIC ***" @@ -435,9 +488,15 @@ QT_BASIC: .byte CR,LF .ifdef MICROTAN .byte "(C) 1980 MICROSOFT" + .elseif .def(AIM65) + .byte 0 + .byte "(C) 1978 MICROSOFT" .else .byte "COPYRIGHT 1977 BY MICROSOFT CO." .endif - .byte CR,LF,0 + .byte CR,LF + .ifndef AIM65 + .byte 0 + .endif .endif -.endif /* KBD */ +.endif diff --git a/inline.s b/inline.s index 5c591da..3599520 100644 --- a/inline.s +++ b/inline.s @@ -6,7 +6,15 @@ L2420: jsr OUTDO .endif dex + .ifdef AIM65 + bmi L2423 + jsr PSLS + jmp INLIN2 +LB35F: + jsr OUTDO + .else bpl INLIN2 + .endif L2423: .ifdef OSI jsr OUTDO @@ -39,6 +47,13 @@ L0C32: ldx #$00 INLIN2: jsr GETLN + .ifdef AIM65 + cmp #$1A + bne INLINAIM + jsr DU13 + jmp INLIN +INLINAIM: + .endif .ifndef CONFIG_NO_LINE_EDITING cmp #$07 beq L2443 @@ -47,14 +62,25 @@ INLIN2: beq L2453 .ifndef CONFIG_NO_LINE_EDITING cmp #$20 + .ifdef AIM65 + bcc L244E + .else bcc INLIN2 + .endif .ifdef MICROTAN cmp #$80 .else + .ifdef AIM65 + cmp #$7F + beq L2420 + .endif cmp #$7D .endif bcs INLIN2 cmp #$40 ; @ + .ifdef AIM65 + beq LB35F + .else beq L2423 .ifdef MICROTAN cmp #$7F ; DEL @@ -62,6 +88,7 @@ INLIN2: cmp #$5F ; _ .endif beq L2420 + .endif L2443: .ifdef MICROTAN cpx #$4F @@ -73,6 +100,9 @@ L2443: sta INPUTBUFFER,x inx .ifdef OSI + .byte $2C + .elseif .def(AIM65) + .byte $2C .else bne INLIN2 @@ -80,6 +110,7 @@ L2443: L244C: .ifndef CONFIG_NO_LINE_EDITING lda #$07 ; BEL +L244E: jsr OUTDO bne INLIN2 .endif @@ -115,7 +146,7 @@ GETLN: nop and #$7F .endif - .endif /* APPLE */ + .endif .ifdef APPLE RDKEY: jsr LFD0C @@ -130,4 +161,4 @@ RDKEY: pla L2465: rts -.endif /* KBD */ +.endif diff --git a/input.s b/input.s index ed52b07..720eb3e 100644 --- a/input.s +++ b/input.s @@ -111,6 +111,11 @@ LCAE0: INPUT: .ifndef KBD lsr Z14 +.endif +.ifdef AIM65 + lda PRIFLG + sta ZBE + jsr LCFFA .endif cmp #$22 bne L2A9E @@ -231,6 +236,8 @@ PROCESS_INPUT_ITEM: bvc L2AF0 .ifdef MICROTAN jsr MONRDKEY2 + .elseif .def(AIM65) + jsr MONRDKEY2 .else jsr MONRDKEY .endif @@ -392,6 +399,9 @@ INPDONE: jmp SETDA L2B94: ldy #$00 +.ifdef AIM65 + jsr LB8B1 +.endif lda (INPTR),y beq L2BA1 .ifdef CONFIG_FILE diff --git a/iscntc.s b/iscntc.s index 61182e8..7b2d822 100644 --- a/iscntc.s +++ b/iscntc.s @@ -20,4 +20,7 @@ .ifdef MICROTAN .include "microtan_iscntc.s" .endif +.ifdef AIM65 +.include "aim65_iscntc.s" +.endif ;!!! runs into "STOP" \ No newline at end of file diff --git a/loadsave.s b/loadsave.s index e897c7b..63607fd 100644 --- a/loadsave.s +++ b/loadsave.s @@ -9,3 +9,6 @@ .ifdef MICROTAN .include "microtan_loadsave.s" .endif +.ifdef AIM65 +.include "aim65_loadsave.s" +.endif \ No newline at end of file diff --git a/make.sh b/make.sh index f542d65..2ab6568 100644 --- a/make.sh +++ b/make.sh @@ -2,7 +2,7 @@ if [ ! -d tmp ]; then mkdir tmp fi -for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan; do +for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan aim65; do echo $i ca65 -D $i msbasic.s -o tmp/$i.o && diff --git a/message.s b/message.s index 5a36568..726b21f 100644 --- a/message.s +++ b/message.s @@ -30,6 +30,7 @@ OKPRT: rts nop .else + .ifndef AIM65 QT_OK: .ifdef CONFIG_CBM_ALL .byte CR,LF,"READY.",CR,LF @@ -42,15 +43,15 @@ QT_OK: .endif .endif .byte 0 + .endif .endif - QT_BREAK: .ifdef KBD .byte CR,LF," Brk" .byte 0 .byte $54,$D0 ; ??? -.elseif .def(MICROTAN) +.elseif .def(MICROTAN) || .def(AIM65) .byte CR,LF," BREAK" .byte 0 .else diff --git a/misc1.s b/misc1.s index 86bb5d1..6107f25 100644 --- a/misc1.s +++ b/misc1.s @@ -203,7 +203,17 @@ L2963: iny lda (DSCPTR),y sta (FORPNT),y +RET5: rts +.ifdef AIM65 +LB89D: + cmp #$21 + bne RET5 + lda #$80 + sta PRIFLG + jmp CHRGET +.endif + .ifdef CONFIG_FILE PRINTH: jsr CMD diff --git a/orig/aim65.bin b/orig/aim65.bin new file mode 100644 index 0000000000000000000000000000000000000000..37742c4a62f673cf6276706ca6d3e79c91159e5b GIT binary patch literal 8192 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 .ifdef CONFIG_CBM_ALL @@ -86,6 +87,9 @@ LE28E: .else jsr GOSTROUT .endif + .else + jsr GORESTART + .endif L2351: jsr INLIN .endif @@ -639,9 +643,20 @@ LIST: L25A6: jsr CRDO .else + .ifdef AIM65 + pha + lda #$00 +LB4BF: + sta INPUTFLG + pla + .endif .ifdef MICROTAN php jmp LE21C ; patch +LC57E: + .elseif .def(AIM65) + php + jsr LINGET LC57E: .else bcc L2581 @@ -652,12 +667,12 @@ L2581: jsr LINGET .endif jsr FNDLIN - .ifdef MICROTAN + .if .def(MICROTAN) || .def(AIM65) plp beq L2598 .endif jsr CHRGOT - .ifdef MICROTAN + .if .def(MICROTAN) || .def(AIM65) beq L25A6 .else beq L2598 @@ -665,7 +680,7 @@ L2581: cmp #TOKEN_MINUS bne L2520 jsr CHRGET - .ifdef MICROTAN + .if .def(MICROTAN) || .def(AIM65) beq L2598 jsr LINGET beq L25A6 @@ -675,7 +690,7 @@ L2581: bne L2520 .endif L2598: - .ifndef MICROTAN + .if !(.def(MICROTAN) || .def(AIM65)) pla pla lda LINNUM @@ -686,7 +701,7 @@ L2598: sta LINNUM sta LINNUM+1 L25A6: - .ifdef MICROTAN + .if .def(MICROTAN) || .def(AIM65) pla pla .endif @@ -749,12 +764,22 @@ LA519: lda (LOWTRX),y stx LOWTRX sta LOWTRX+1 -.ifdef MICROTAN +.if .def(MICROTAN) || .def(AIM65) bne L25A6X .else bne L25A6 .endif L25E5: +.ifdef AIM65 + lda INPUTFLG + beq L25E5a + jsr CRDO + jsr CRDO + lda #$1a + jsr OUTDO + jsr $e50a +L25E5a: +.endif jmp RESTART L25E8: bpl L25CE diff --git a/regress.sh b/regress.sh index bbfcf00..2b81beb 100755 --- a/regress.sh +++ b/regress.sh @@ -5,7 +5,7 @@ if [ ! -d orig ]; then exit; fi -for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan; do +for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan aim65; do echo $i ca65 -D $i msbasic.s -o tmp/$i.o && diff --git a/string.s b/string.s index 499d4cd..ed49389 100644 --- a/string.s +++ b/string.s @@ -9,9 +9,13 @@ STR: pla pla LD353: - lda #$FF - ldy #$00 + lda #<(STACK2-1) + ldy #>(STACK2-1) +.if STACK2 > $0100 + bne STRLIT +.else beq STRLIT +.endif ; ---------------------------------------------------------------------------- ; GET SPACE AND MAKE DESCRIPTOR FOR STRING WHOSE @@ -85,6 +89,9 @@ L32B6: .ifdef CONFIG_NO_INPUTBUFFER_ZP beq LD399 cmp #>INPUTBUFFER +.elseif .def(AIM65) + beq LD399 + cmp #$01 .endif bne PUTNEW LD399: diff --git a/trig.s b/trig.s index 817a74a..12aa0fb 100644 --- a/trig.s +++ b/trig.s @@ -130,6 +130,7 @@ MICROSOFT: .endif .endif +.ifndef AIM65 ; ---------------------------------------------------------------------------- ; "ATN" FUNCTION ; ---------------------------------------------------------------------------- @@ -199,3 +200,4 @@ POLY_ATN: .if .def(CONFIG_11A) && (!.def(CONFIG_2)) .byte $00 ; XXX .endif +.endif \ No newline at end of file diff --git a/zeropage.s b/zeropage.s index cd30c91..4787d0d 100644 --- a/zeropage.s +++ b/zeropage.s @@ -180,6 +180,12 @@ SGNCPR = STRNG1 FACEXTENSION = STRNG1+1 STRNG2: .res 2 +.ifdef AIM65 +ATN: + .res 3 +ZBE: + .res 1 +.endif CHRGET: TXTPTR = <(GENERIC_TXTPTR-GENERIC_CHRGET + CHRGET) CHRGOT = <(GENERIC_CHRGOT-GENERIC_CHRGET + CHRGET)