ca65 V2.19
Main file   : C:\work\msbasic65\msbasic.s
Current file: C:\work\msbasic65\msbasic.s

00.000000r 1               ; Microsoft BASIC for 6502
00.000000r 1               ;
00.000000r 1               ; (first revision of this distribution, 20 Oct 2008, Michael Steil www.pagetable.com)
00.000000r 1               ;
00.000000r 1               ; This is a single integrated assembly source tree that can generate seven different versions of
00.000000r 1               ; Microsoft BASIC for 6502.
00.000000r 1               ;
00.000000r 1               ; By running ./make.sh, this will generate all versions and compare them to the original files
00.000000r 1               ; byte by byte. The CC65 compiler suite is need to build this project.
00.000000r 1               ;
00.000000r 1               ; These are the first eight (known) versions of Microsoft BASIC for 6502:
00.000000r 1               ;
00.000000r 1               ; Name                 Release   MS Version    ROM   9digit  INPUTBUFFER   extensions   .define
00.000000r 1               ;---------------------------------------------------------------------------------------------------
00.000000r 1               ; Commodore BASIC 1     1977                    Y      Y          ZP          CBM
00.000000r 1               ; OSI BASIC             1977     1.0 REV 3.2    Y      N          ZP            -        CONFIG_10A
00.000000r 1               ; AppleSoft I           1977     1.1            N      Y        $0200         Apple      CONFIG_11
00.000000r 1               ; KIM BASIC             1977     1.1            N      Y          ZP            -        CONFIG_11A
00.000000r 1               ; AppleSoft II          1978                    Y      Y        $0200         Apple      CONFIG_2
00.000000r 1               ; Commodore BASIC 2     1979                    Y      Y        $0200          CBM       CONFIG_2A
00.000000r 1               ; KBD BASIC             1982                    Y      N        $0700          KBD       CONFIG_2B
00.000000r 1               ; MicroTAN              1980                    Y      Y          ZP            -        CONFIG_2C
00.000000r 1               ;
00.000000r 1               ; (Note that this assembly source cannot (yet) build AppleSoft II.)
00.000000r 1               ;
00.000000r 1               ; This lists the versions in the order in which they were forked from the Microsoft source base.
00.000000r 1               ; Commodore BASIC 1, as used on the original PET is the oldest known version of Microsoft BASIC
00.000000r 1               ; for 6502. It contains some additions to Microsoft's version, like Commodore-style file I/O.
00.000000r 1               ;
00.000000r 1               ; The CONFIG_n defines specify what Microsoft-version the OEM version is based on. If CONFIG_2B
00.000000r 1               ; is defined, for example, CONFIG_2A, CONFIG_2, CONFIG_11A, CONFIG_11 and CONFIG_10A will be
00.000000r 1               ; defined as well, and all bugfixes up to version 2B will be enabled.
00.000000r 1               ;
00.000000r 1               ; The following symbols can be defined in addition:
00.000000r 1               ;
00.000000r 1               ; CONFIG_CBM1_PATCHES				jump out into CBM1's binary patches instead of doing the right thing inline
00.000000r 1               ; CONFIG_CBM_ALL					add all Commodore-specific additions except file I/O
00.000000r 1               ; CONFIG_DATAFLG					?
00.000000r 1               ; CONFIG_EASTER_EGG					include the CBM2 "WAIT 6502" easter egg
00.000000r 1               ; CONFIG_FILE						support Commodore PRINT#, INPUT#, GET#, CMD
00.000000r 1               ; CONFIG_IO_MSB						all I/O has bit #7 set
00.000000r 1               ; CONFIG_MONCOUT_DESTROYS_Y			Y needs to be preserved when calling MONCOUT
00.000000r 1               ; CONFIG_NO_CR						terminal doesn't need explicit CRs on line ends
00.000000r 1               ; CONFIG_NO_LINE_EDITING			disable support for Microsoft-style "@", "_", BEL etc.
00.000000r 1               ; CONFIG_NO_POKE					don't support PEEK, POKE and WAIT
00.000000r 1               ; CONFIG_NO_READ_Y_IS_ZERO_HACK		don't do a very volatile trick that saves one byte
00.000000r 1               ; CONFIG_NULL						support for the NULL statement
00.000000r 1               ; CONFIG_PEEK_SAVE_LINNUM			preserve LINNUM on a PEEK
00.000000r 1               ; CONFIG_PRINTNULLS					whether PRINTNULLS does anything
00.000000r 1               ; CONFIG_PRINT_CR					print CR when line end reached
00.000000r 1               ; CONFIG_RAM						optimizations for RAM version of BASIC, only use on 1.x
00.000000r 1               ; CONFIG_ROR_WORKAROUND				use workaround for buggy 6502s from 1975/1976; not safe for CONFIG_SMALL!
00.000000r 1               ; CONFIG_SAFE_NAMENOTFOUND			check both bytes of the caller's address in NAMENOTFOUND
00.000000r 1               ; CONFIG_SCRTCH_ORDER				where in the init code to call SCRTCH
00.000000r 1               ; CONFIG_SMALL						use 6 digit FP instead of 9 digit, use 2 character error messages, don't have GET
00.000000r 1               ;
00.000000r 1               ; Changing symbol definitions can alter an existing base configuration, but it not guaranteed to assemble
00.000000r 1               ; or work correctly.
00.000000r 1               ;
00.000000r 1               ; Credits:
00.000000r 1               ; * main work by Michael Steil
00.000000r 1               ; * function names and all uppercase comments taken from Bob Sander-Cederlof's excellent AppleSoft II disassembly:
00.000000r 1               ;   http://www.txbobsc.com/scsc/scdocumentor/
00.000000r 1               ; * Applesoft lite by Tom Greene http://cowgod.org/replica1/applesoft/ helped a lot, too.
00.000000r 1               ; * Thanks to Joe Zbicak for help with Intellision Keyboard BASIC
00.000000r 1               ; * This work is dedicated to the memory of my dear hacking pal Michael "acidity" Kollmann.
00.000000r 1               
00.000000r 1               .debuginfo +
00.000000r 1               
00.000000r 1               .setcpu "6502"
00.000000r 1               .macpack longbranch
00.000000r 2               .macro  jeq     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                       bne     *+5
00.000000r 2                       jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               beq     Target
00.000000r 2                       .else
00.000000r 2                               bne     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               .macro  jne     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                               beq     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               bne     Target
00.000000r 2                       .else
00.000000r 2                               beq     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               .macro  jmi     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                               bpl     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               bmi     Target
00.000000r 2                       .else
00.000000r 2                               bpl     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               .macro  jpl     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                               bmi     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               bpl     Target
00.000000r 2                       .else
00.000000r 2                               bmi     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               .macro  jcs     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                               bcc     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               bcs     Target
00.000000r 2                       .else
00.000000r 2                               bcc     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               .macro  jcc     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                               bcs     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               bcc     Target
00.000000r 2                       .else
00.000000r 2                               bcs     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               .macro  jvs     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                               bvc     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               bvs     Target
00.000000r 2                       .else
00.000000r 2                               bvc     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               .macro  jvc     Target
00.000000r 2                       .if     .match(Target, 0)
00.000000r 2                               bvs     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
00.000000r 2                               bvc     Target
00.000000r 2                       .else
00.000000r 2                               bvs     *+5
00.000000r 2                               jmp     Target
00.000000r 2                       .endif
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 1               
00.000000r 1               .include "defines.s"
00.000000r 2               .if .def(cbmbasic1)
00.000000r 2               CBM1 := 1
00.000000r 2               .include "defines_cbm1.s"
00.000000r 2               .elseif .def(osi)
00.000000r 2               OSI := 1
00.000000r 2               .include "defines_osi.s"
00.000000r 2               .elseif .def(applesoft)
00.000000r 2               APPLE := 1
00.000000r 2               .include "defines_apple.s"
00.000000r 2               .elseif .def(kb9)
00.000000r 2               KIM := 1
00.000000r 2               .include "defines_kim.s"
00.000000r 3               ; configuration
00.000000r 3               CONFIG_11A := 1
00.000000r 3               
00.000000r 3               CONFIG_MONCOUT_DESTROYS_Y := 1
00.000000r 3               CONFIG_NULL := 1
00.000000r 3               CONFIG_PRINT_CR := 1 ; print CR when line end reached
00.000000r 3               CONFIG_RAM := 1
00.000000r 3               CONFIG_ROR_WORKAROUND := 1
00.000000r 3               CONFIG_SAFE_NAMENOTFOUND := 1
00.000000r 3               CONFIG_SCRTCH_ORDER := 2
00.000000r 3               
00.000000r 3               ; zero page
00.000000r 3               ZP_START1 = $00
00.000000r 3               ZP_START2 = $15
00.000000r 3               ZP_START3 = $0A
00.000000r 3               ZP_START4 = $63
00.000000r 3               
00.000000r 3               ; constants
00.000000r 3               STACK_TOP		:= $FC
00.000000r 3               SPACE_FOR_GOSUB := $36
00.000000r 3               NULL_MAX		:= $F2 ; probably different in original version; the image I have seems to be modified; see PDF
00.000000r 3               WIDTH			:= 72
00.000000r 3               WIDTH2			:= 56
00.000000r 3               
00.000000r 3               ; magic memory locations
00.000000r 3               L1800           := $1800
00.000000r 3               L1873           := $1873
00.000000r 3               
00.000000r 3               ; monitor functions
00.000000r 3               MONRDKEY        := $1E5A
00.000000r 3               MONCOUT         := $1EA0
00.000000r 3               
00.000000r 3               
00.000000r 2               .elseif .def(cbmbasic2)
00.000000r 2               CBM2 := 1
00.000000r 2               .include "defines_cbm2.s"
00.000000r 2               .elseif .def(kbdbasic)
00.000000r 2               KBD := 1
00.000000r 2               .include "defines_kbd.s"
00.000000r 2               .elseif .def(microtan)
00.000000r 2               MICROTAN := 1
00.000000r 2               .include "defines_microtan.s"
00.000000r 2               .endif
00.000000r 2               
00.000000r 2               .ifdef CONFIG_2C
00.000000r 2               CONFIG_2B := 1
00.000000r 2               .endif
00.000000r 2               .ifdef CONFIG_2B
00.000000r 2               CONFIG_2A := 1
00.000000r 2               .endif
00.000000r 2               .ifdef CONFIG_2A
00.000000r 2               CONFIG_2 := 1
00.000000r 2               .endif
00.000000r 2               .ifdef CONFIG_2
00.000000r 2               CONFIG_11A := 1
00.000000r 2               .endif
00.000000r 2               .ifdef CONFIG_11A
00.000000r 2               CONFIG_11 := 1
00.000000r 2               .endif
00.000000r 2               .ifdef CONFIG_11
00.000000r 2               CONFIG_10A := 1
00.000000r 2               .endif
00.000000r 2               
00.000000r 2               .ifdef CONFIG_SMALL
00.000000r 2               BYTES_FP		:= 4
00.000000r 2               .else
00.000000r 2               BYTES_FP		:= 5
00.000000r 2               .endif
00.000000r 2               
00.000000r 2               .ifndef BYTES_PER_ELEMENT
00.000000r 2               BYTES_PER_ELEMENT := BYTES_FP
00.000000r 2               .endif
00.000000r 2               BYTES_PER_VARIABLE := BYTES_FP+2
00.000000r 2               MANTISSA_BYTES	:= BYTES_FP-1
00.000000r 2               BYTES_PER_FRAME := 2*BYTES_FP+8
00.000000r 2               FOR_STACK1		:= 2*BYTES_FP+5
00.000000r 2               FOR_STACK2		:= BYTES_FP+4
00.000000r 2               
00.000000r 2               .ifndef MAX_EXPON
00.000000r 2               MAX_EXPON = 10
00.000000r 2               .endif
00.000000r 2               
00.000000r 2               STACK           := $0100
00.000000r 2               
00.000000r 2               .ifdef INPUTBUFFER
00.000000r 2                 .if INPUTBUFFER >= $0100
00.000000r 2               CONFIG_NO_INPUTBUFFER_ZP := 1
00.000000r 2                 .endif
00.000000r 2                 .if INPUTBUFFER = $0200
00.000000r 2               CONFIG_INPUTBUFFER_0200 := 1
00.000000r 2                 .endif
00.000000r 2               .endif
00.000000r 2               INPUTBUFFERX = INPUTBUFFER & $FF00
00.000000r 2               
00.000000r 2               CR=13
00.000000r 2               LF=10
00.000000r 2               
00.000000r 2               .ifndef CRLF_1
00.000000r 2               CRLF_1 := CR
00.000000r 2               CRLF_2 := LF
00.000000r 2               .endif
00.000000r 2               
00.000000r 2               
00.000000r 2               
00.000000r 2               
00.000000r 1               .include "macros.s"
00.000000r 2               ; htasc - set the hi bit on the last byte of a string for termination
00.000000r 2               ; (by Tom Greene)
00.000000r 2               .macro htasc str
00.000000r 2               	.repeat	.strlen(str)-1,I
00.000000r 2               		.byte	.strat(str,I)
00.000000r 2               	.endrep
00.000000r 2               	.byte	.strat(str,.strlen(str)-1) | $80
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               ; For every token, a byte gets put into segment "DUMMY".
00.000000r 2               ; This way, we count up with every token. The DUMMY segment
00.000000r 2               ; doesn't get linked into the binary.
00.000000r 2               .macro init_token_tables
00.000000r 2                       .segment "VECTORS"
00.000000r 2               TOKEN_ADDRESS_TABLE:
00.000000r 2                       .segment "KEYWORDS"
00.000000r 2               TOKEN_NAME_TABLE:
00.000000r 2               		.segment "DUMMY"
00.000000r 2               DUMMY_START:
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               ; optionally define token symbol
00.000000r 2               ; count up token number
00.000000r 2               .macro define_token token
00.000000r 2                       .segment "DUMMY"
00.000000r 2               		.ifnblank token
00.000000r 2               			token := <(*-DUMMY_START)+$80
00.000000r 2               		.endif
00.000000r 2               		.res 1; count up in any case
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               ; lay down a keyword, optionally define a token symbol
00.000000r 2               .macro keyword key, token
00.000000r 2               		.segment "KEYWORDS"
00.000000r 2               		htasc	key
00.000000r 2               		define_token token
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               ; lay down a keyword and an address (RTS style),
00.000000r 2               ; optionally define a token symbol
00.000000r 2               .macro keyword_rts key, vec, token
00.000000r 2                       .segment "VECTORS"
00.000000r 2               		.word	vec-1
00.000000r 2               		keyword key, token
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               ; lay down a keyword and an address,
00.000000r 2               ; optionally define a token symbol
00.000000r 2               .macro keyword_addr key, vec, token
00.000000r 2                       .segment "VECTORS"
00.000000r 2               		.addr	vec
00.000000r 2               		keyword key, token
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               .macro count_tokens
00.000000r 2                       .segment "DUMMY"
00.000000r 2               		NUM_TOKENS := <(*-DUMMY_START)
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               .macro init_error_table
00.000000r 2                       .segment "ERROR"
00.000000r 2               ERROR_MESSAGES:
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               .macro define_error error, msg
00.000000r 2                       .segment "ERROR"
00.000000r 2               		error := <(*-ERROR_MESSAGES)
00.000000r 2               		htasc msg
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               ;---------------------------------------------
00.000000r 2               ; set the MSB of every byte of a string
00.000000r 2               .macro asc80 str
00.000000r 2               	.repeat	.strlen(str),I
00.000000r 2               		.byte	.strat(str,I)+$80
00.000000r 2               	.endrep
00.000000r 2               .endmacro
00.000000r 2               
00.000000r 2               
00.000000r 1               .include "zeropage.s"
00.000000r 2               
00.000000r 2               .feature org_per_seg
00.000000r 2               .zeropage
04.000000r 2               
04.000000r 2               .org ZP_START1
   000000  2               
   000000  2               GORESTART:
   000000  2  xx xx xx     	.res 3
   000003  2               GOSTROUT:
   000003  2  xx xx xx     	.res 3
   000006  2               GOAYINT:
   000006  2  xx xx        	.res 2
   000008  2               GOGIVEAYF:
   000008  2  xx xx        	.res 2
   00000A  2               
   00000A  2               .org ZP_START2
   000015  2               Z15:
   000015  2  xx           	.res 1
   000016  2               .ifndef POSX; allow override
   000016  2               POSX:
   000016  2               .endif
   000016  2  xx           	.res 1
   000017  2               .ifndef Z17; allow override
   000017  2               Z17:
   000017  2               .endif
   000017  2  xx           	.res 1
   000018  2               .ifndef Z18; allow override
   000018  2               Z18:
   000018  2               .endif
   000018  2  xx           	.res 1
   000019  2               LINNUM:
   000019  2               .ifndef TXPSV; allow override
   000019  2               TXPSV:
   000019  2               .endif
   000019  2  xx xx        	.res 2
   00001B  2               .ifndef INPUTBUFFER; allow override
   00001B  2               INPUTBUFFER:
   00001B  2               .endif
   00001B  2               
   00001B  2               .org ZP_START3
   00000A  2               
   00000A  2               CHARAC:
   00000A  2  xx           	.res 1
   00000B  2               ENDCHR:
   00000B  2  xx           	.res 1
   00000C  2               EOLPNTR:
   00000C  2  xx           	.res 1
   00000D  2               DIMFLG:
   00000D  2  xx           	.res 1
   00000E  2               VALTYP:
   00000E  2               .ifdef CONFIG_SMALL
   00000E  2               	.res 1
   00000E  2               .else
   00000E  2  xx xx        	.res 2
   000010  2               .endif
   000010  2               DATAFLG:
   000010  2  xx           	.res 1
   000011  2               SUBFLG:
   000011  2  xx           	.res 1
   000012  2               INPUTFLG:
   000012  2  xx           	.res 1
   000013  2               CPRMASK:
   000013  2  xx           	.res 1
   000014  2               Z14:
   000014  2  xx           	.res 1
   000015  2               
   000015  2               .org ZP_START4
   000063  2               
   000063  2               TEMPPT:
   000063  2  xx           	.res 1
   000064  2               LASTPT:
   000064  2  xx xx        	.res 2
   000066  2               TEMPST:
   000066  2  xx xx xx xx  	.res 9
   00006A  2  xx xx xx xx  
   00006E  2  xx           
   00006F  2               INDEX:
   00006F  2  xx xx        	.res 2
   000071  2               DEST:
   000071  2  xx xx        	.res 2
   000073  2               RESULT:
   000073  2  xx xx xx xx  	.res BYTES_FP
   000077  2  xx           
   000078  2               RESULT_LAST = RESULT + BYTES_FP-1
   000078  2               TXTTAB:
   000078  2  xx xx        	.res 2
   00007A  2               VARTAB:
   00007A  2  xx xx        	.res 2
   00007C  2               ARYTAB:
   00007C  2  xx xx        	.res 2
   00007E  2               STREND:
   00007E  2  xx xx        	.res 2
   000080  2               FRETOP:
   000080  2  xx xx        	.res 2
   000082  2               FRESPC:
   000082  2  xx xx        	.res 2
   000084  2               MEMSIZ:
   000084  2  xx xx        	.res 2
   000086  2               CURLIN:
   000086  2  xx xx        	.res 2
   000088  2               OLDLIN:
   000088  2  xx xx        	.res 2
   00008A  2               OLDTEXT:
   00008A  2  xx xx        	.res 2
   00008C  2               Z8C:
   00008C  2  xx xx        	.res 2
   00008E  2               DATPTR:
   00008E  2  xx xx        	.res 2
   000090  2               INPTR:
   000090  2  xx xx        	.res 2
   000092  2               VARNAM:
   000092  2  xx xx        	.res 2
   000094  2               VARPNT:
   000094  2  xx xx        	.res 2
   000096  2               FORPNT:
   000096  2  xx xx        	.res 2
   000098  2               LASTOP:
   000098  2  xx xx        	.res 2
   00009A  2               CPRTYP:
   00009A  2  xx           	.res 1
   00009B  2               FNCNAM:
   00009B  2               TEMP3:
   00009B  2  xx xx        	.res 2
   00009D  2               DSCPTR:
   00009D  2               .ifdef CONFIG_SMALL
   00009D  2               		.res 2
   00009D  2               .else
   00009D  2  xx xx xx     		.res 3
   0000A0  2               .endif
   0000A0  2               DSCLEN:
   0000A0  2  xx xx        	.res 2
   0000A2  2               .ifndef JMPADRS ; allow override
   0000A2  2               JMPADRS			:= DSCLEN + 1
   0000A2  2               .endif
   0000A2  2               Z52:
   0000A2  2  xx           	.res 1
   0000A3  2               ARGEXTENSION:
   0000A3  2               .ifndef CONFIG_SMALL
   0000A3  2  xx           	.res 1
   0000A4  2               .endif
   0000A4  2               TEMP1:
   0000A4  2  xx           	.res 1
   0000A5  2               HIGHDS:
   0000A5  2  xx xx        	.res 2
   0000A7  2               HIGHTR:
   0000A7  2  xx xx        	.res 2
   0000A9  2               .ifndef CONFIG_SMALL
   0000A9  2               TEMP2:
   0000A9  2  xx           	.res 1
   0000AA  2               .endif
   0000AA  2               INDX:
   0000AA  2               TMPEXP:
   0000AA  2               .ifdef CONFIG_SMALL
   0000AA  2               TEMP2:
   0000AA  2               .endif
   0000AA  2  xx           	.res 1
   0000AB  2               EXPON:
   0000AB  2  xx           	.res 1
   0000AC  2               LOWTR:
   0000AC  2               .ifndef LOWTRX ; allow override
   0000AC  2               LOWTRX:
   0000AC  2               .endif
   0000AC  2  xx           	.res 1
   0000AD  2               EXPSGN:
   0000AD  2  xx           	.res 1
   0000AE  2               FAC:
   0000AE  2  xx xx xx xx  	.res BYTES_FP
   0000B2  2  xx           
   0000B3  2               FAC_LAST = FAC + BYTES_FP-1
   0000B3  2               FACSIGN:
   0000B3  2  xx           	.res 1
   0000B4  2               SERLEN:
   0000B4  2  xx           	.res 1
   0000B5  2               SHIFTSIGNEXT:
   0000B5  2  xx           	.res 1
   0000B6  2               ARG:
   0000B6  2  xx xx xx xx  	.res BYTES_FP
   0000BA  2  xx           
   0000BB  2               ARG_LAST = ARG + BYTES_FP-1
   0000BB  2               ARGSIGN:
   0000BB  2  xx           	.res 1
   0000BC  2               STRNG1:
   0000BC  2  xx xx        	.res 2
   0000BE  2               SGNCPR = STRNG1
   0000BE  2               FACEXTENSION = STRNG1+1
   0000BE  2               STRNG2:
   0000BE  2  xx xx        	.res 2
   0000C0  2               CHRGET:
   0000C0  2               TXTPTR = <(GENERIC_TXTPTR-GENERIC_CHRGET + CHRGET)
   0000C0  2               CHRGOT = <(GENERIC_CHRGOT-GENERIC_CHRGET + CHRGET)
   0000C0  2               CHRGOT2 = <(GENERIC_CHRGOT2-GENERIC_CHRGET + CHRGET)
   0000C0  2               RNDSEED = <(GENERIC_RNDSEED-GENERIC_CHRGET + CHRGET)
   0000C0  2               
   0000C0  2               
   0000C0  2               
   0000C0  1               
   0000C0  1               .include "header.s"
   0000C0  2               		.segment "HEADER"
06.000000r 2               .ifdef KBD
06.000000r 2                       jmp     LE68C
06.000000r 2                       .byte   $00,$13,$56
06.000000r 2               .endif
06.000000r 2               
06.000000r 1               .include "token.s"
06.000000r 2               		init_token_tables
09.000000r 2               
09.000000r 2  rr rr 45 4E  		keyword_rts "END", END
09.000004r 2  C4 xx        
09.000001r 2  rr rr 46 4F  		keyword_rts "FOR", FOR
09.000005r 2  D2 xx        
09.000002r 2  rr rr 4E 45  		keyword_rts "NEXT", NEXT
09.000006r 2  58 D4 xx     
09.000003r 2  rr rr 44 41  		keyword_rts "DATA", DATA
09.000007r 2  54 C1 xx     
09.000004r 2               .ifdef CONFIG_FILE
09.000004r 2               		keyword_rts "INPUT#", INPUTH
09.000004r 2               .endif
09.000004r 2  rr rr 49 4E  		keyword_rts "INPUT", INPUT
09.000008r 2  50 55 D4 xx  
09.000005r 2  rr rr 44 49  		keyword_rts "DIM", DIM
09.000009r 2  CD xx        
09.000006r 2  rr rr 52 45  		keyword_rts "READ", READ
09.00000Ar 2  41 C4 xx     
09.000007r 2               .ifdef APPLE
09.000007r 2               		keyword_rts "PLT", PLT
09.000007r 2               .else
09.000007r 2  rr rr 4C 45  		keyword_rts "LET", LET
09.00000Br 2  D4 xx        
09.000008r 2               .endif
09.000008r 2  rr rr 47 4F  		keyword_rts "GOTO", GOTO, TOKEN_GOTO
09.00000Cr 2  54 CF xx     
09.000009r 2  rr rr 52 55  		keyword_rts "RUN", RUN
09.00000Dr 2  CE xx        
09.00000Ar 2  rr rr 49 C6  		keyword_rts "IF", IF
09.00000Er 2  xx           
09.00000Br 2  rr rr 52 45  		keyword_rts "RESTORE", RESTORE
09.00000Fr 2  53 54 4F 52  
09.000013r 2  C5 xx        
09.00000Cr 2  rr rr 47 4F  		keyword_rts "GOSUB", GOSUB, TOKEN_GOSUB
09.000010r 2  53 55 C2 xx  
09.00000Dr 2  rr rr 52 45  		keyword_rts "RETURN", POP
09.000011r 2  54 55 52 CE  
09.000015r 2  xx           
09.00000Er 2               .ifdef APPLE
09.00000Er 2               		keyword_rts "TEX", TEX, TOKEN_REM
09.00000Er 2               .else
09.00000Er 2  rr rr 52 45  		keyword_rts "REM", REM, TOKEN_REM
09.000012r 2  CD xx        
09.00000Fr 2               .endif
09.00000Fr 2  rr rr 53 54  		keyword_rts "STOP", STOP
09.000013r 2  4F D0 xx     
09.000010r 2  rr rr 4F CE  		keyword_rts "ON", ON
09.000014r 2  xx           
09.000011r 2               .ifdef CONFIG_NULL
09.000011r 2  rr rr 4E 55  		keyword_rts "NULL", NULL
09.000015r 2  4C CC xx     
09.000012r 2               .endif
09.000012r 2               .ifdef KBD
09.000012r 2               		keyword_rts "PLOD", PLOD
09.000012r 2               		keyword_rts "PSAV", PSAV
09.000012r 2               		keyword_rts "VLOD", VLOD
09.000012r 2               		keyword_rts "VSAV", VSAV
09.000012r 2               .endif
09.000012r 2               .ifndef CONFIG_NO_POKE
09.000012r 2  rr rr 57 41  		keyword_rts "WAIT", WAIT
09.000016r 2  49 D4 xx     
09.000013r 2               .endif
09.000013r 2               .ifndef KBD
09.000013r 2  rr rr 4C 4F  		keyword_rts "LOAD", LOAD
09.000017r 2  41 C4 xx     
09.000014r 2  rr rr 53 41  		keyword_rts "SAVE", SAVE
09.000018r 2  56 C5 xx     
09.000015r 2               .endif
09.000015r 2               .ifdef CONFIG_CBM_ALL
09.000015r 2               		keyword_rts "VERIFY", VERIFY
09.000015r 2               .endif
09.000015r 2  rr rr 44 45  		keyword_rts "DEF", DEF
09.000019r 2  C6 xx        
09.000016r 2               .ifdef KBD
09.000016r 2               		keyword_rts "SLOD", SLOD
09.000016r 2               .endif
09.000016r 2               .ifndef CONFIG_NO_POKE
09.000016r 2  rr rr 50 4F  		keyword_rts "POKE", POKE
09.00001Ar 2  4B C5 xx     
09.000017r 2               .endif
09.000017r 2               .ifdef CONFIG_FILE
09.000017r 2               		keyword_rts "PRINT#", PRINTH
09.000017r 2               .endif
09.000017r 2  rr rr 50 52  		keyword_rts "PRINT", PRINT, TOKEN_PRINT
09.00001Br 2  49 4E D4 xx  
09.000018r 2  rr rr 43 4F  		keyword_rts "CONT", CONT
09.00001Cr 2  4E D4 xx     
09.000019r 2  rr rr 4C 49  		keyword_rts "LIST", LIST
09.00001Dr 2  53 D4 xx     
09.00001Ar 2               .ifdef CONFIG_CBM_ALL
09.00001Ar 2               		keyword_rts "CLR", CLEAR
09.00001Ar 2               .else
09.00001Ar 2  rr rr 43 4C  		keyword_rts "CLEAR", CLEAR
09.00001Er 2  45 41 D2 xx  
09.00001Br 2               .endif
09.00001Br 2               .ifdef CONFIG_FILE
09.00001Br 2               		keyword_rts "CMD", CMD
09.00001Br 2               		keyword_rts "SYS", SYS
09.00001Br 2               		keyword_rts "OPEN", OPEN
09.00001Br 2               		keyword_rts "CLOSE", CLOSE
09.00001Br 2               .endif
09.00001Br 2               .ifndef CONFIG_SMALL
09.00001Br 2  rr rr 47 45  		keyword_rts "GET", GET
09.00001Fr 2  D4 xx        
09.00001Cr 2               .endif
09.00001Cr 2               .ifdef KBD
09.00001Cr 2               		keyword_rts "PRT", PRT
09.00001Cr 2               .endif
09.00001Cr 2  rr rr 4E 45  		keyword_rts "NEW", NEW
09.000020r 2  D7 xx        
09.00001Dr 2               
09.00001Dr 2               		count_tokens
09.00001Dr 2               
09.00001Dr 2  54 41 42 A8  		keyword	"TAB(", TOKEN_TAB
09.000021r 2  xx           
09.00001Er 2  54 CF xx     		keyword	"TO", TOKEN_TO
09.00001Fr 2  46 CE xx     		keyword	"FN", TOKEN_FN
09.000020r 2  53 50 43 A8  		keyword	"SPC(", TOKEN_SPC
09.000024r 2  xx           
09.000021r 2  54 48 45 CE  		keyword	"THEN", TOKEN_THEN
09.000025r 2  xx           
09.000022r 2  4E 4F D4 xx  		keyword	"NOT", TOKEN_NOT
09.000023r 2  53 54 45 D0  		keyword	"STEP", TOKEN_STEP
09.000027r 2  xx           
09.000024r 2  AB xx        		keyword	"+", TOKEN_PLUS
09.000025r 2  AD xx        		keyword	"-", TOKEN_MINUS
09.000026r 2  AA xx        		keyword	"*"
09.000027r 2  AF xx        		keyword	"/"
09.000028r 2               .ifdef KBD
09.000028r 2               		keyword	"#"
09.000028r 2               .else
09.000028r 2  DE xx        		keyword	"^"
09.000029r 2               .endif
09.000029r 2  41 4E C4 xx  		keyword	"AND"
09.00002Ar 2  4F D2 xx     		keyword	"OR"
09.00002Br 2  BE xx        		keyword	">", TOKEN_GREATER
09.00002Cr 2  BD xx        		keyword	"=", TOKEN_EQUAL
09.00002Dr 2  BC xx        		keyword	"<"
09.00002Er 2               
09.00002Er 2                       .segment "VECTORS"
07.00003Ar 2               UNFNC:
07.00003Ar 2               
07.00003Ar 2  rr rr 53 47  		keyword_addr "SGN", SGN, TOKEN_SGN
07.00003Er 2  CE xx        
09.00002Fr 2  rr rr 49 4E  		keyword_addr "INT", INT
09.000033r 2  D4 xx        
09.000030r 2  rr rr 41 42  		keyword_addr "ABS", ABS
09.000034r 2  D3 xx        
09.000031r 2               .ifdef KBD
09.000031r 2               		keyword_addr "VER", VER
09.000031r 2               .endif
09.000031r 2               .ifndef CONFIG_NO_POKE
09.000031r 2                 .ifdef CONFIG_RAM
09.000031r 2  rr rr 55 53  		keyword_addr "USR", IQERR
09.000035r 2  D2 xx        
09.000032r 2                 .else
09.000032r 2               		keyword_addr "USR", USR
09.000032r 2                 .endif
09.000032r 2               .endif
09.000032r 2  rr rr 46 52  		keyword_addr "FRE", FRE
09.000036r 2  C5 xx        
09.000033r 2  rr rr 50 4F  		keyword_addr "POS", POS
09.000037r 2  D3 xx        
09.000034r 2  rr rr 53 51  		keyword_addr "SQR", SQR
09.000038r 2  D2 xx        
09.000035r 2  rr rr 52 4E  		keyword_addr "RND", RND
09.000039r 2  C4 xx        
09.000036r 2  rr rr 4C 4F  		keyword_addr "LOG", LOG
09.00003Ar 2  C7 xx        
09.000037r 2  rr rr 45 58  		keyword_addr "EXP", EXP
09.00003Br 2  D0 xx        
09.000038r 2               .segment "VECTORS"
07.00004Er 2               UNFNC_COS:
07.00004Er 2  rr rr 43 4F  		keyword_addr "COS", COS
07.000052r 2  D3 xx        
09.000039r 2               .segment "VECTORS"
07.000050r 2               UNFNC_SIN:
07.000050r 2  rr rr 53 49  		keyword_addr "SIN", SIN
07.000054r 2  CE xx        
09.00003Ar 2               .segment "VECTORS"
07.000052r 2               UNFNC_TAN:
07.000052r 2  rr rr 54 41  		keyword_addr "TAN", TAN
07.000056r 2  CE xx        
09.00003Br 2               .segment "VECTORS"
07.000054r 2               UNFNC_ATN:
07.000054r 2  rr rr 41 54  		keyword_addr "ATN", ATN
07.000058r 2  CE xx        
09.00003Cr 2               .ifdef KBD
09.00003Cr 2               		keyword_addr "GETC", GETC
09.00003Cr 2               .endif
09.00003Cr 2               .ifndef CONFIG_NO_POKE
09.00003Cr 2  rr rr 50 45  		keyword_addr "PEEK", PEEK
09.000040r 2  45 CB xx     
09.00003Dr 2               .endif
09.00003Dr 2  rr rr 4C 45  		keyword_addr "LEN", LEN
09.000041r 2  CE xx        
09.00003Er 2  rr rr 53 54  		keyword_addr "STR$", STR
09.000042r 2  52 A4 xx     
09.00003Fr 2  rr rr 56 41  		keyword_addr "VAL", VAL
09.000043r 2  CC xx        
09.000040r 2  rr rr 41 53  		keyword_addr "ASC", ASC
09.000044r 2  C3 xx        
09.000041r 2  rr rr 43 48  		keyword_addr "CHR$", CHRSTR
09.000045r 2  52 A4 xx     
09.000042r 2  rr rr 4C 45  		keyword_addr "LEFT$", LEFTSTR, TOKEN_LEFTSTR
09.000046r 2  46 54 A4 xx  
09.000043r 2  rr rr 52 49  		keyword_addr "RIGHT$", RIGHTSTR
09.000047r 2  47 48 54 A4  
09.00004Br 2  xx           
09.000044r 2  rr rr 4D 49  		keyword_addr "MID$", MIDSTR
09.000048r 2  44 A4 xx     
09.000045r 2               .ifdef CONFIG_2
09.000045r 2               		keyword	"GO", TOKEN_GO
09.000045r 2               .endif
09.000045r 2                       .segment "KEYWORDS"
08.0000E2r 2  00           		.byte   0
08.0000E3r 2               
08.0000E3r 2                       .segment "VECTORS"
07.000068r 2               MATHTBL:
07.000068r 2  79                   .byte   $79
07.000069r 2  rr rr                .word   FADDT-1
07.00006Br 2  79                   .byte   $79
07.00006Cr 2  rr rr                .word   FSUBT-1
07.00006Er 2  7B                   .byte   $7B
07.00006Fr 2  rr rr                .word   FMULTT-1
07.000071r 2  7B                   .byte   $7B
07.000072r 2  rr rr                .word   FDIVT-1
07.000074r 2  7F                   .byte   $7F
07.000075r 2  rr rr                .word   FPWRT-1
07.000077r 2  50                   .byte   $50
07.000078r 2  rr rr                .word   TAND-1
07.00007Ar 2  46                   .byte   $46
07.00007Br 2  rr rr                .word   OR-1
07.00007Dr 2  7D                   .byte   $7D
07.00007Er 2  rr rr                .word   NEGOP-1
07.000080r 2  5A                   .byte   $5A
07.000081r 2  rr rr                .word   EQUOP-1
07.000083r 2  64                   .byte   $64
07.000084r 2  rr rr                .word   RELOPS-1
07.000086r 2               
07.000086r 1               .include "error.s"
07.000086r 2               init_error_table
0A.000000r 2               
0A.000000r 2               .ifdef CONFIG_SMALL
0A.000000r 2               define_error ERR_NOFOR, "NF"
0A.000000r 2               define_error ERR_SYNTAX, "SN"
0A.000000r 2               define_error ERR_NOGOSUB, "RG"
0A.000000r 2               define_error ERR_NODATA, "OD"
0A.000000r 2               define_error ERR_ILLQTY, "FC"
0A.000000r 2               define_error ERR_OVERFLOW, "OV"
0A.000000r 2               define_error ERR_MEMFULL, "OM"
0A.000000r 2               define_error ERR_UNDEFSTAT, "US"
0A.000000r 2               define_error ERR_BADSUBS, "BS"
0A.000000r 2               define_error ERR_REDIMD, "DD"
0A.000000r 2               define_error ERR_ZERODIV, "/0"
0A.000000r 2               define_error ERR_ILLDIR, "ID"
0A.000000r 2               define_error ERR_BADTYPE, "TM"
0A.000000r 2               define_error ERR_STRLONG, "LS"
0A.000000r 2               define_error ERR_FRMCPX, "ST"
0A.000000r 2               define_error ERR_CANTCONT, "CN"
0A.000000r 2               define_error ERR_UNDEFFN, "UF"
0A.000000r 2               .else
0A.000000r 2  4E 45 58 54  define_error ERR_NOFOR, "NEXT WITHOUT FOR"
0A.000004r 2  20 57 49 54  
0A.000008r 2  48 4F 55 54  
0A.000010r 2  53 59 4E 54  define_error ERR_SYNTAX, "SYNTAX"
0A.000014r 2  41 D8        
0A.000016r 2  52 45 54 55  define_error ERR_NOGOSUB, "RETURN WITHOUT GOSUB"
0A.00001Ar 2  52 4E 20 57  
0A.00001Er 2  49 54 48 4F  
0A.00002Ar 2  4F 55 54 20  define_error ERR_NODATA, "OUT OF DATA"
0A.00002Er 2  4F 46 20 44  
0A.000032r 2  41 54 C1     
0A.000035r 2  49 4C 4C 45  define_error ERR_ILLQTY, "ILLEGAL QUANTITY"
0A.000039r 2  47 41 4C 20  
0A.00003Dr 2  51 55 41 4E  
0A.000045r 2               .ifdef CBM1
0A.000045r 2               	.byte 0,0,0,0,0
0A.000045r 2               .endif
0A.000045r 2  4F 56 45 52  define_error ERR_OVERFLOW, "OVERFLOW"
0A.000049r 2  46 4C 4F D7  
0A.00004Dr 2  4F 55 54 20  define_error ERR_MEMFULL, "OUT OF MEMORY"
0A.000051r 2  4F 46 20 4D  
0A.000055r 2  45 4D 4F 52  
0A.00005Ar 2  55 4E 44 45  define_error ERR_UNDEFSTAT, "UNDEF'D STATEMENT"
0A.00005Er 2  46 27 44 20  
0A.000062r 2  53 54 41 54  
0A.00006Br 2  42 41 44 20  define_error ERR_BADSUBS, "BAD SUBSCRIPT"
0A.00006Fr 2  53 55 42 53  
0A.000073r 2  43 52 49 50  
0A.000078r 2  52 45 44 49  define_error ERR_REDIMD, "REDIM'D ARRAY"
0A.00007Cr 2  4D 27 44 20  
0A.000080r 2  41 52 52 41  
0A.000085r 2  44 49 56 49  define_error ERR_ZERODIV, "DIVISION BY ZERO"
0A.000089r 2  53 49 4F 4E  
0A.00008Dr 2  20 42 59 20  
0A.000095r 2  49 4C 4C 45  define_error ERR_ILLDIR, "ILLEGAL DIRECT"
0A.000099r 2  47 41 4C 20  
0A.00009Dr 2  44 49 52 45  
0A.0000A3r 2  54 59 50 45  define_error ERR_BADTYPE, "TYPE MISMATCH"
0A.0000A7r 2  20 4D 49 53  
0A.0000ABr 2  4D 41 54 43  
0A.0000B0r 2  53 54 52 49  define_error ERR_STRLONG, "STRING TOO LONG"
0A.0000B4r 2  4E 47 20 54  
0A.0000B8r 2  4F 4F 20 4C  
0A.0000BFr 2               .ifdef CONFIG_FILE
0A.0000BFr 2                 .ifdef CBM1
0A.0000BFr 2               define_error ERR_BADDATA, "BAD DATA"
0A.0000BFr 2                 .else
0A.0000BFr 2               define_error ERR_BADDATA, "FILE DATA"
0A.0000BFr 2                 .endif
0A.0000BFr 2               .endif
0A.0000BFr 2  46 4F 52 4D  define_error ERR_FRMCPX, "FORMULA TOO COMPLEX"
0A.0000C3r 2  55 4C 41 20  
0A.0000C7r 2  54 4F 4F 20  
0A.0000D2r 2  43 41 4E 27  define_error ERR_CANTCONT, "CAN'T CONTINUE"
0A.0000D6r 2  54 20 43 4F  
0A.0000DAr 2  4E 54 49 4E  
0A.0000E0r 2  55 4E 44 45  define_error ERR_UNDEFFN, "UNDEF'D FUNCTION"
0A.0000E4r 2  46 27 44 20  
0A.0000E8r 2  46 55 4E 43  
0A.0000F0r 2               .endif
0A.0000F0r 2               
0A.0000F0r 1               .include "message.s"
0A.0000F0r 2               ; global messages: "error", "in", "ready", "break"
0A.0000F0r 2               
0A.0000F0r 2               .segment "CODE"
00.000000r 2               
00.000000r 2               QT_ERROR:
00.000000r 2               .ifdef KBD
00.000000r 2                       .byte   " err"
00.000000r 2               .else
00.000000r 2                 .ifdef APPLE
00.000000r 2                       .byte   " ERR"
00.000000r 2               		.byte	$07,$07
00.000000r 2                 .else
00.000000r 2  20 45 52 52          .byte   " ERROR"
00.000004r 2  4F 52        
00.000006r 2                 .endif
00.000006r 2               .endif
00.000006r 2  00                   .byte   0
00.000007r 2               
00.000007r 2               .ifndef KBD
00.000007r 2               QT_IN:
00.000007r 2  20 49 4E 20          .byte   " IN "
00.00000Br 2  00                   .byte   $00
00.00000Cr 2               .endif
00.00000Cr 2               
00.00000Cr 2               .ifdef KBD
00.00000Cr 2               		.byte	$54,$D2 ; ???
00.00000Cr 2               OKPRT:
00.00000Cr 2               		jsr     PRIMM
00.00000Cr 2                       .byte   CR,CR,">>",CR,LF
00.00000Cr 2               		.byte	0
00.00000Cr 2                       rts
00.00000Cr 2                       nop
00.00000Cr 2               .else
00.00000Cr 2               QT_OK:
00.00000Cr 2                 .ifdef CONFIG_CBM_ALL
00.00000Cr 2               		.byte   CR,LF,"READY.",CR,LF
00.00000Cr 2                 .else
00.00000Cr 2                   .ifdef APPLE
00.00000Cr 2               		; binary patch!
00.00000Cr 2                       .byte   CR,0,0,"K",CR,LF
00.00000Cr 2                   .else
00.00000Cr 2  0D 0A 4F 4B  		.byte   CR,LF,"OK",CR,LF
00.000010r 2  0D 0A        
00.000012r 2                   .endif
00.000012r 2                 .endif
00.000012r 2  00           		.byte	0
00.000013r 2               .endif
00.000013r 2               
00.000013r 2               QT_BREAK:
00.000013r 2               
00.000013r 2               .ifdef KBD
00.000013r 2               		.byte	CR,LF," Brk"
00.000013r 2                       .byte   0
00.000013r 2                       .byte   $54,$D0 ; ???
00.000013r 2               .elseif .def(MICROTAN)
00.000013r 2               		.byte CR,LF," BREAK"
00.000013r 2                       .byte   0
00.000013r 2               .else
00.000013r 2  0D 0A 42 52  		.byte CR,LF,"BREAK"
00.000017r 2  45 41 4B     
00.00001Ar 2  00                   .byte   0
00.00001Br 2               .endif
00.00001Br 2               
00.00001Br 1               .include "memory.s"
00.00001Br 2               ; generic stack and memory management code
00.00001Br 2               ; this code is identical across all versions of
00.00001Br 2               ; BASIC
00.00001Br 2               
00.00001Br 2               .segment "CODE"
00.00001Br 2               
00.00001Br 2               ; ----------------------------------------------------------------------------
00.00001Br 2               ; CALLED BY "NEXT" AND "FOR" TO SCAN THROUGH
00.00001Br 2               ; THE STACK FOR A FRAME WITH THE SAME VARIABLE.
00.00001Br 2               ;
00.00001Br 2               ; (FORPNT) = ADDRESS OF VARIABLE IF "FOR" OR "NEXT"
00.00001Br 2               ; 	= $XXFF IF CALLED FROM "RETURN"
00.00001Br 2               ; 	<<< BUG: SHOULD BE $FFXX >>>
00.00001Br 2               ;
00.00001Br 2               ;	RETURNS .NE. IF VARIABLE NOT FOUND,
00.00001Br 2               ;	(X) = STACK PNTR AFTER SKIPPING ALL FRAMES
00.00001Br 2               ;
00.00001Br 2               ;	.EQ. IF FOUND
00.00001Br 2               ;	(X) = STACK PNTR OF FRAME FOUND
00.00001Br 2               ; ----------------------------------------------------------------------------
00.00001Br 2               GTFORPNT:
00.00001Br 2  BA                   tsx
00.00001Cr 2  E8                   inx
00.00001Dr 2  E8                   inx
00.00001Er 2  E8                   inx
00.00001Fr 2  E8                   inx
00.000020r 2               L2279:
00.000020r 2  BD 01 01             lda     STACK+1,x
00.000023r 2  C9 81                cmp     #$81
00.000025r 2  D0 21                bne     L22A1
00.000027r 2  A5 97                lda     FORPNT+1
00.000029r 2  D0 0A                bne     L228E
00.00002Br 2  BD 02 01             lda     STACK+2,x
00.00002Er 2  85 96                sta     FORPNT
00.000030r 2  BD 03 01             lda     STACK+3,x
00.000033r 2  85 97                sta     FORPNT+1
00.000035r 2               L228E:
00.000035r 2  DD 03 01             cmp     STACK+3,x
00.000038r 2  D0 07                bne     L229A
00.00003Ar 2  A5 96                lda     FORPNT
00.00003Cr 2  DD 02 01             cmp     STACK+2,x
00.00003Fr 2  F0 07                beq     L22A1
00.000041r 2               L229A:
00.000041r 2  8A                   txa
00.000042r 2  18                   clc
00.000043r 2  69 12                adc     #BYTES_PER_FRAME
00.000045r 2  AA                   tax
00.000046r 2  D0 D8                bne     L2279
00.000048r 2               L22A1:
00.000048r 2  60                   rts
00.000049r 2               
00.000049r 2               ; ----------------------------------------------------------------------------
00.000049r 2               ; MOVE BLOCK OF MEMORY UP
00.000049r 2               ;
00.000049r 2               ; ON ENTRY:
00.000049r 2               ;	(Y,A) = (HIGHDS) = DESTINATION END+1
00.000049r 2               ;	(LOWTR) = LOWEST ADDRESS OF SOURCE
00.000049r 2               ;	(HIGHTR) = HIGHEST SOURCE ADDRESS+1
00.000049r 2               ; ----------------------------------------------------------------------------
00.000049r 2               BLTU:
00.000049r 2  20 rr rr             jsr     REASON
00.00004Cr 2  85 7E                sta     STREND
00.00004Er 2  84 7F                sty     STREND+1
00.000050r 2               BLTU2:
00.000050r 2  38                   sec
00.000051r 2  A5 A7                lda     HIGHTR
00.000053r 2  E5 AC                sbc     LOWTR
00.000055r 2  85 6F                sta     INDEX
00.000057r 2  A8                   tay
00.000058r 2  A5 A8                lda     HIGHTR+1
00.00005Ar 2  E5 AD                sbc     LOWTR+1
00.00005Cr 2  AA                   tax
00.00005Dr 2  E8                   inx
00.00005Er 2  98                   tya
00.00005Fr 2  F0 23                beq     L22DD
00.000061r 2  A5 A7                lda     HIGHTR
00.000063r 2  38                   sec
00.000064r 2  E5 6F                sbc     INDEX
00.000066r 2  85 A7                sta     HIGHTR
00.000068r 2  B0 03                bcs     L22C6
00.00006Ar 2  C6 A8                dec     HIGHTR+1
00.00006Cr 2  38                   sec
00.00006Dr 2               L22C6:
00.00006Dr 2  A5 A5                lda     HIGHDS
00.00006Fr 2  E5 6F                sbc     INDEX
00.000071r 2  85 A5                sta     HIGHDS
00.000073r 2  B0 08                bcs     L22D6
00.000075r 2  C6 A6                dec     HIGHDS+1
00.000077r 2  90 04                bcc     L22D6
00.000079r 2               L22D2:
00.000079r 2  B1 A7                lda     (HIGHTR),y
00.00007Br 2  91 A5                sta     (HIGHDS),y
00.00007Dr 2               L22D6:
00.00007Dr 2  88                   dey
00.00007Er 2  D0 F9                bne     L22D2
00.000080r 2  B1 A7                lda     (HIGHTR),y
00.000082r 2  91 A5                sta     (HIGHDS),y
00.000084r 2               L22DD:
00.000084r 2  C6 A8                dec     HIGHTR+1
00.000086r 2  C6 A6                dec     HIGHDS+1
00.000088r 2  CA                   dex
00.000089r 2  D0 F2                bne     L22D6
00.00008Br 2  60                   rts
00.00008Cr 2               
00.00008Cr 2               ; ----------------------------------------------------------------------------
00.00008Cr 2               ; CHECK IF ENOUGH ROOM LEFT ON STACK
00.00008Cr 2               ; FOR "FOR", "GOSUB", OR EXPRESSION EVALUATION
00.00008Cr 2               ; ----------------------------------------------------------------------------
00.00008Cr 2               CHKMEM:
00.00008Cr 2  0A                   asl     a
00.00008Dr 2  69 36                adc     #SPACE_FOR_GOSUB
00.00008Fr 2  B0 35                bcs     MEMERR
00.000091r 2  85 6F                sta     INDEX
00.000093r 2  BA                   tsx
00.000094r 2  E4 6F                cpx     INDEX
00.000096r 2  90 2E                bcc     MEMERR
00.000098r 2  60                   rts
00.000099r 2               
00.000099r 2               ; ----------------------------------------------------------------------------
00.000099r 2               ; CHECK IF ENOUGH ROOM BETWEEN ARRAYS AND STRINGS
00.000099r 2               ; (Y,A) = ADDR ARRAYS NEED TO GROW TO
00.000099r 2               ; ----------------------------------------------------------------------------
00.000099r 2               REASON:
00.000099r 2  C4 81                cpy     FRETOP+1
00.00009Br 2  90 28                bcc     L231E
00.00009Dr 2  D0 04                bne     L22FC
00.00009Fr 2  C5 80                cmp     FRETOP
00.0000A1r 2  90 22                bcc     L231E
00.0000A3r 2               L22FC:
00.0000A3r 2  48                   pha
00.0000A4r 2  A2 09                ldx     #FAC-TEMP1-1
00.0000A6r 2  98                   tya
00.0000A7r 2               L2300:
00.0000A7r 2  48                   pha
00.0000A8r 2  B5 A4                lda     TEMP1,x
00.0000AAr 2  CA                   dex
00.0000ABr 2  10 FA                bpl     L2300
00.0000ADr 2  20 rr rr             jsr     GARBAG
00.0000B0r 2  A2 F7                ldx     #<(TEMP1-FAC+1)
00.0000B2r 2               L230B:
00.0000B2r 2  68                   pla
00.0000B3r 2  95 AE                sta     FAC,x
00.0000B5r 2  E8                   inx
00.0000B6r 2  30 FA                bmi     L230B
00.0000B8r 2  68                   pla
00.0000B9r 2  A8                   tay
00.0000BAr 2  68                   pla
00.0000BBr 2  C4 81                cpy     FRETOP+1
00.0000BDr 2  90 06                bcc     L231E
00.0000BFr 2  D0 05                bne     MEMERR
00.0000C1r 2  C5 80                cmp     FRETOP
00.0000C3r 2  B0 01                bcs     MEMERR
00.0000C5r 2               L231E:
00.0000C5r 2  60                   rts
00.0000C6r 2               
00.0000C6r 1               .include "program.s"
00.0000C6r 2               ; error
00.0000C6r 2               ; line input, line editing
00.0000C6r 2               ; tokenize
00.0000C6r 2               ; detokenize
00.0000C6r 2               ; BASIC program memory management
00.0000C6r 2               
00.0000C6r 2               ; MICROTAN has some nonstandard extension to LIST here
00.0000C6r 2               
00.0000C6r 2               .segment "CODE"
00.0000C6r 2               
00.0000C6r 2               MEMERR:
00.0000C6r 2  A2 4D                ldx     #ERR_MEMFULL
00.0000C8r 2               
00.0000C8r 2               ; ----------------------------------------------------------------------------
00.0000C8r 2               ; HANDLE AN ERROR
00.0000C8r 2               ;
00.0000C8r 2               ; (X)=OFFSET IN ERROR MESSAGE TABLE
00.0000C8r 2               ; (ERRFLG) > 128 IF "ON ERR" TURNED ON
00.0000C8r 2               ; (CURLIN+1) = $FF IF IN DIRECT MODE
00.0000C8r 2               ; ----------------------------------------------------------------------------
00.0000C8r 2               ERROR:
00.0000C8r 2  46 14                lsr     Z14
00.0000CAr 2               .ifdef CONFIG_FILE
00.0000CAr 2                       lda     CURDVC    ; output
00.0000CAr 2                       beq     LC366     ; is screen
00.0000CAr 2                       jsr     CLRCH     ; otherwise redirect output back to screen
00.0000CAr 2                       lda     #$00
00.0000CAr 2                       sta     CURDVC
00.0000CAr 2               LC366:
00.0000CAr 2               .endif
00.0000CAr 2  20 rr rr             jsr     CRDO
00.0000CDr 2  20 rr rr             jsr     OUTQUES
00.0000D0r 2               L2329:
00.0000D0r 2  BD rr rr             lda     ERROR_MESSAGES,x
00.0000D3r 2               .ifndef CONFIG_SMALL
00.0000D3r 2  48                   pha
00.0000D4r 2  29 7F                and     #$7F
00.0000D6r 2               .endif
00.0000D6r 2  20 rr rr             jsr     OUTDO
00.0000D9r 2               .ifdef CONFIG_SMALL
00.0000D9r 2                       lda     ERROR_MESSAGES+1,x
00.0000D9r 2                 .ifdef KBD
00.0000D9r 2                       and     #$7F
00.0000D9r 2                 .endif
00.0000D9r 2                       jsr     OUTDO
00.0000D9r 2               .else
00.0000D9r 2  E8                   inx
00.0000DAr 2  68                   pla
00.0000DBr 2  10 F3                bpl     L2329
00.0000DDr 2               .endif
00.0000DDr 2  20 rr rr             jsr     STKINI
00.0000E0r 2  A9 rr                lda     #<QT_ERROR
00.0000E2r 2  A0 rr                ldy     #>QT_ERROR
00.0000E4r 2               
00.0000E4r 2               ; ----------------------------------------------------------------------------
00.0000E4r 2               ; PRINT STRING AT (Y,A)
00.0000E4r 2               ; PRINT CURRENT LINE # UNLESS IN DIRECT MODE
00.0000E4r 2               ; FALL INTO WARM RESTART
00.0000E4r 2               ; ----------------------------------------------------------------------------
00.0000E4r 2               PRINT_ERROR_LINNUM:
00.0000E4r 2  20 rr rr             jsr     STROUT
00.0000E7r 2  A4 87                ldy     CURLIN+1
00.0000E9r 2  C8                   iny
00.0000EAr 2  F0 03                beq     RESTART
00.0000ECr 2  20 rr rr             jsr     INPRT
00.0000EFr 2               
00.0000EFr 2               ; ----------------------------------------------------------------------------
00.0000EFr 2               ; WARM RESTART ENTRY
00.0000EFr 2               ; ----------------------------------------------------------------------------
00.0000EFr 2               RESTART:
00.0000EFr 2               .ifdef KBD
00.0000EFr 2                       jsr     CRDO
00.0000EFr 2                       nop
00.0000EFr 2               L2351X:
00.0000EFr 2                       jsr     OKPRT
00.0000EFr 2               L2351:
00.0000EFr 2                       jsr     INLIN
00.0000EFr 2               LE28E:
00.0000EFr 2                       bpl     RESTART
00.0000EFr 2               .else
00.0000EFr 2  46 14                lsr     Z14
00.0000F1r 2  A9 rr                lda     #<QT_OK
00.0000F3r 2  A0 rr                ldy     #>QT_OK
00.0000F5r 2                 .ifdef CONFIG_CBM_ALL
00.0000F5r 2                       jsr     STROUT
00.0000F5r 2                 .else
00.0000F5r 2  20 03 00             jsr     GOSTROUT
00.0000F8r 2                 .endif
00.0000F8r 2               L2351:
00.0000F8r 2  20 rr rr             jsr     INLIN
00.0000FBr 2               .endif
00.0000FBr 2  86 C7                stx     TXTPTR
00.0000FDr 2  84 C8                sty     TXTPTR+1
00.0000FFr 2  20 C0 00             jsr     CHRGET
00.000102r 2               .ifdef CONFIG_11
00.000102r 2               ; bug in pre-1.1: CHRGET sets Z on '\0'
00.000102r 2               ; and ':' - a line starting with ':' in
00.000102r 2               ; direct mode gets ignored
00.000102r 2  AA                   tax
00.000103r 2               .endif
00.000103r 2               .ifdef KBD
00.000103r 2                       beq     L2351X
00.000103r 2               .else
00.000103r 2  F0 F3                beq     L2351
00.000105r 2               .endif
00.000105r 2  A2 FF                ldx     #$FF
00.000107r 2  86 87                stx     CURLIN+1
00.000109r 2  90 06                bcc     NUMBERED_LINE
00.00010Br 2  20 rr rr             jsr     PARSE_INPUT_LINE
00.00010Er 2  4C rr rr             jmp     NEWSTT2
00.000111r 2               
00.000111r 2               ; ----------------------------------------------------------------------------
00.000111r 2               ; HANDLE NUMBERED LINE
00.000111r 2               ; ----------------------------------------------------------------------------
00.000111r 2               NUMBERED_LINE:
00.000111r 2  20 rr rr             jsr     LINGET
00.000114r 2  20 rr rr             jsr     PARSE_INPUT_LINE
00.000117r 2  84 0C                sty     EOLPNTR
00.000119r 2               .ifdef KBD
00.000119r 2                       jsr     FNDLIN2
00.000119r 2                       lda     JMPADRS+1
00.000119r 2                       sta     LOWTR
00.000119r 2                       sta     Z96
00.000119r 2                       lda     JMPADRS+2
00.000119r 2                       sta     LOWTR+1
00.000119r 2                       sta     Z96+1
00.000119r 2                       lda     LINNUM
00.000119r 2                       sta     L06FE
00.000119r 2                       lda     LINNUM+1
00.000119r 2                       sta     L06FE+1
00.000119r 2                       inc     LINNUM
00.000119r 2                       bne     LE2D2
00.000119r 2                       inc     LINNUM+1
00.000119r 2                       bne     LE2D2
00.000119r 2                       jmp     SYNERR
00.000119r 2               LE2D2:
00.000119r 2                       jsr     LF457
00.000119r 2                       ldx     #Z96
00.000119r 2                       jsr     CMPJMPADRS
00.000119r 2                       bcs     LE2FD
00.000119r 2               LE2DC:
00.000119r 2                       ldx     #$00
00.000119r 2                       lda     (JMPADRS+1,x)
00.000119r 2                       sta     (Z96,x)
00.000119r 2                       inc     JMPADRS+1
00.000119r 2                       bne     LE2E8
00.000119r 2                       inc     JMPADRS+2
00.000119r 2               LE2E8:
00.000119r 2                       inc     Z96
00.000119r 2                       bne     LE2EE
00.000119r 2                       inc     Z96+1
00.000119r 2               LE2EE:
00.000119r 2                       ldx     #VARTAB
00.000119r 2                       jsr     CMPJMPADRS
00.000119r 2                       bne     LE2DC
00.000119r 2                       lda     Z96
00.000119r 2                       sta     VARTAB
00.000119r 2                       lda     Z96+1
00.000119r 2                       sta     VARTAB+1
00.000119r 2               LE2FD:
00.000119r 2                       jsr     SETPTRS
00.000119r 2                       jsr     LE33D
00.000119r 2                       lda     INPUTBUFFER
00.000119r 2               LE306:
00.000119r 2                       beq     LE28E
00.000119r 2                       cmp     #$A5
00.000119r 2                       beq     LE306
00.000119r 2                       clc
00.000119r 2               .else
00.000119r 2  20 rr rr             jsr     FNDLIN
00.00011Cr 2  90 44                bcc     PUT_NEW_LINE
00.00011Er 2  A0 01                ldy     #$01
00.000120r 2  B1 AC                lda     (LOWTR),y
00.000122r 2  85 70                sta     INDEX+1
00.000124r 2  A5 7A                lda     VARTAB
00.000126r 2  85 6F                sta     INDEX
00.000128r 2  A5 AD                lda     LOWTR+1
00.00012Ar 2  85 72                sta     DEST+1
00.00012Cr 2  A5 AC                lda     LOWTR
00.00012Er 2  88                   dey
00.00012Fr 2  F1 AC                sbc     (LOWTR),y
00.000131r 2  18                   clc
00.000132r 2  65 7A                adc     VARTAB
00.000134r 2  85 7A                sta     VARTAB
00.000136r 2  85 71                sta     DEST
00.000138r 2  A5 7B                lda     VARTAB+1
00.00013Ar 2  69 FF                adc     #$FF
00.00013Cr 2  85 7B                sta     VARTAB+1
00.00013Er 2  E5 AD                sbc     LOWTR+1
00.000140r 2  AA                   tax
00.000141r 2  38                   sec
00.000142r 2  A5 AC                lda     LOWTR
00.000144r 2  E5 7A                sbc     VARTAB
00.000146r 2  A8                   tay
00.000147r 2  B0 03                bcs     L23A5
00.000149r 2  E8                   inx
00.00014Ar 2  C6 72                dec     DEST+1
00.00014Cr 2               L23A5:
00.00014Cr 2  18                   clc
00.00014Dr 2  65 6F                adc     INDEX
00.00014Fr 2  90 03                bcc     L23AD
00.000151r 2  C6 70                dec     INDEX+1
00.000153r 2  18                   clc
00.000154r 2               L23AD:
00.000154r 2  B1 6F                lda     (INDEX),y
00.000156r 2  91 71                sta     (DEST),y
00.000158r 2  C8                   iny
00.000159r 2  D0 F9                bne     L23AD
00.00015Br 2  E6 70                inc     INDEX+1
00.00015Dr 2  E6 72                inc     DEST+1
00.00015Fr 2  CA                   dex
00.000160r 2  D0 F2                bne     L23AD
00.000162r 2               .endif
00.000162r 2               ; ----------------------------------------------------------------------------
00.000162r 2               PUT_NEW_LINE:
00.000162r 2               .ifndef KBD
00.000162r 2                 .ifdef CONFIG_2
00.000162r 2                       jsr     SETPTRS
00.000162r 2                       jsr     LE33D
00.000162r 2                       lda     INPUTBUFFER
00.000162r 2                       beq     L2351
00.000162r 2                       clc
00.000162r 2                 .else
00.000162r 2  A5 1B                lda     INPUTBUFFER
00.000164r 2  F0 2F                beq     FIX_LINKS
00.000166r 2  A5 84                lda     MEMSIZ
00.000168r 2  A4 85                ldy     MEMSIZ+1
00.00016Ar 2  85 80                sta     FRETOP
00.00016Cr 2  84 81                sty     FRETOP+1
00.00016Er 2                 .endif
00.00016Er 2               .endif
00.00016Er 2  A5 7A                lda     VARTAB
00.000170r 2  85 A7                sta     HIGHTR
00.000172r 2  65 0C                adc     EOLPNTR
00.000174r 2  85 A5                sta     HIGHDS
00.000176r 2  A4 7B                ldy     VARTAB+1
00.000178r 2  84 A8                sty     HIGHTR+1
00.00017Ar 2  90 01                bcc     L23D6
00.00017Cr 2  C8                   iny
00.00017Dr 2               L23D6:
00.00017Dr 2  84 A6                sty     HIGHDS+1
00.00017Fr 2  20 rr rr             jsr     BLTU
00.000182r 2               .ifdef CONFIG_INPUTBUFFER_0200
00.000182r 2                       lda     LINNUM
00.000182r 2                       ldy     LINNUM+1
00.000182r 2                       sta     INPUTBUFFER-2
00.000182r 2                       sty     INPUTBUFFER-1
00.000182r 2               .endif
00.000182r 2  A5 7E                lda     STREND
00.000184r 2  A4 7F                ldy     STREND+1
00.000186r 2  85 7A                sta     VARTAB
00.000188r 2  84 7B                sty     VARTAB+1
00.00018Ar 2  A4 0C                ldy     EOLPNTR
00.00018Cr 2  88                   dey
00.00018Dr 2               ; ---COPY LINE INTO PROGRAM-------
00.00018Dr 2               L23E6:
00.00018Dr 2  B9 17 00             lda     INPUTBUFFER-4,y
00.000190r 2  91 AC                sta     (LOWTR),y
00.000192r 2  88                   dey
00.000193r 2  10 F8                bpl     L23E6
00.000195r 2               
00.000195r 2               ; ----------------------------------------------------------------------------
00.000195r 2               ; CLEAR ALL VARIABLES
00.000195r 2               ; RE-ESTABLISH ALL FORWARD LINKS
00.000195r 2               ; ----------------------------------------------------------------------------
00.000195r 2               FIX_LINKS:
00.000195r 2  20 rr rr             jsr     SETPTRS
00.000198r 2               .ifdef CONFIG_2
00.000198r 2                       jsr     LE33D
00.000198r 2                       jmp     L2351
00.000198r 2               LE33D:
00.000198r 2               .endif
00.000198r 2  A5 78                lda     TXTTAB
00.00019Ar 2  A4 79                ldy     TXTTAB+1
00.00019Cr 2  85 6F                sta     INDEX
00.00019Er 2  84 70                sty     INDEX+1
00.0001A0r 2  18                   clc
00.0001A1r 2               L23FA:
00.0001A1r 2  A0 01                ldy     #$01
00.0001A3r 2  B1 6F                lda     (INDEX),y
00.0001A5r 2               .ifdef CONFIG_2
00.0001A5r 2                       beq     RET3
00.0001A5r 2               .else
00.0001A5r 2  D0 03 4C rr          jeq     L2351
00.0001A9r 2  rr           
00.0001AAr 2               .endif
00.0001AAr 2  A0 04                ldy     #$04
00.0001ACr 2               L2405:
00.0001ACr 2  C8                   iny
00.0001ADr 2  B1 6F                lda     (INDEX),y
00.0001AFr 2  D0 FB                bne     L2405
00.0001B1r 2  C8                   iny
00.0001B2r 2  98                   tya
00.0001B3r 2  65 6F                adc     INDEX
00.0001B5r 2  AA                   tax
00.0001B6r 2  A0 00                ldy     #$00
00.0001B8r 2  91 6F                sta     (INDEX),y
00.0001BAr 2  A5 70                lda     INDEX+1
00.0001BCr 2  69 00                adc     #$00
00.0001BEr 2  C8                   iny
00.0001BFr 2  91 6F                sta     (INDEX),y
00.0001C1r 2  86 6F                stx     INDEX
00.0001C3r 2  85 70                sta     INDEX+1
00.0001C5r 2  90 DA                bcc     L23FA	; always
00.0001C7r 2               
00.0001C7r 2               ; ----------------------------------------------------------------------------
00.0001C7r 2               .ifdef KBD
00.0001C7r 2               .include "kbd_loadsave.s"
00.0001C7r 2               .endif
00.0001C7r 2               
00.0001C7r 2               .ifdef CONFIG_2
00.0001C7r 2               ; !!! kbd_loadsave.s requires an RTS here!
00.0001C7r 2               RET3:
00.0001C7r 2               		rts
00.0001C7r 2               .endif
00.0001C7r 2               
00.0001C7r 2               .include "inline.s"
00.0001C7r 3               .segment "CODE"
00.0001C7r 3               
00.0001C7r 3               .ifndef CONFIG_NO_INPUTBUFFER_ZP
00.0001C7r 3               L2420:
00.0001C7r 3                 .ifdef OSI
00.0001C7r 3                       jsr     OUTDO
00.0001C7r 3                 .endif
00.0001C7r 3  CA                   dex
00.0001C8r 3  10 05                bpl     INLIN2
00.0001CAr 3               L2423:
00.0001CAr 3                 .ifdef OSI
00.0001CAr 3                       jsr     OUTDO
00.0001CAr 3                 .endif
00.0001CAr 3  20 rr rr             jsr     CRDO
00.0001CDr 3               .endif
00.0001CDr 3               
00.0001CDr 3               ; ----------------------------------------------------------------------------
00.0001CDr 3               ; READ A LINE, AND STRIP OFF SIGN BITS
00.0001CDr 3               ; ----------------------------------------------------------------------------
00.0001CDr 3               .ifndef KBD
00.0001CDr 3               INLIN:
00.0001CDr 3                 .ifdef APPLE
00.0001CDr 3                       ldx     #$DD
00.0001CDr 3               INLIN1:
00.0001CDr 3                       stx     $33
00.0001CDr 3                       jsr     L2900
00.0001CDr 3                       cpx     #$EF
00.0001CDr 3                       bcs     L0C32
00.0001CDr 3                       ldx     #$EF
00.0001CDr 3               L0C32:
00.0001CDr 3                       lda     #$00
00.0001CDr 3                       sta     INPUTBUFFER,x
00.0001CDr 3                       ldx     #<INPUTBUFFER-1
00.0001CDr 3                       ldy     #>INPUTBUFFER-1
00.0001CDr 3                       rts
00.0001CDr 3                 .endif
00.0001CDr 3               
00.0001CDr 3                 .ifndef APPLE
00.0001CDr 3  A2 00                ldx     #$00
00.0001CFr 3               INLIN2:
00.0001CFr 3  20 rr rr             jsr     GETLN
00.0001D2r 3                   .ifndef CONFIG_NO_LINE_EDITING
00.0001D2r 3  C9 07                cmp     #$07
00.0001D4r 3  F0 14                beq     L2443
00.0001D6r 3                   .endif
00.0001D6r 3  C9 0D                cmp     #$0D
00.0001D8r 3  F0 20                beq     L2453
00.0001DAr 3                   .ifndef CONFIG_NO_LINE_EDITING
00.0001DAr 3  C9 20                cmp     #$20
00.0001DCr 3  90 F1                bcc     INLIN2
00.0001DEr 3                     .ifdef MICROTAN
00.0001DEr 3                       cmp     #$80
00.0001DEr 3                     .else
00.0001DEr 3  C9 7D                cmp     #$7D
00.0001E0r 3                     .endif
00.0001E0r 3  B0 ED                bcs     INLIN2
00.0001E2r 3  C9 40                cmp     #$40 ; @
00.0001E4r 3  F0 E4                beq     L2423
00.0001E6r 3                     .ifdef MICROTAN
00.0001E6r 3                       cmp     #$7F ; DEL
00.0001E6r 3                     .else
00.0001E6r 3  C9 5F                cmp     #$5F ; _
00.0001E8r 3                     .endif
00.0001E8r 3  F0 DD                beq     L2420
00.0001EAr 3               L2443:
00.0001EAr 3                     .ifdef MICROTAN
00.0001EAr 3                       cpx     #$4F
00.0001EAr 3                     .else
00.0001EAr 3  E0 47                cpx     #$47
00.0001ECr 3                     .endif
00.0001ECr 3  B0 05                bcs     L244C
00.0001EEr 3                   .endif
00.0001EEr 3  95 1B                sta     INPUTBUFFER,x
00.0001F0r 3  E8                   inx
00.0001F1r 3                   .ifdef OSI
00.0001F1r 3                       .byte   $2C
00.0001F1r 3                   .else
00.0001F1r 3  D0 DC                bne     INLIN2
00.0001F3r 3                   .endif
00.0001F3r 3               L244C:
00.0001F3r 3                   .ifndef CONFIG_NO_LINE_EDITING
00.0001F3r 3  A9 07                lda     #$07 ; BEL
00.0001F5r 3  20 rr rr             jsr     OUTDO
00.0001F8r 3  D0 D5                bne     INLIN2
00.0001FAr 3                   .endif
00.0001FAr 3               L2453:
00.0001FAr 3  4C rr rr             jmp     L29B9
00.0001FDr 3                 .endif
00.0001FDr 3               .endif
00.0001FDr 3               
00.0001FDr 3               .ifndef KBD
00.0001FDr 3                 .ifndef APPLE
00.0001FDr 3               GETLN:
00.0001FDr 3                   .ifdef CONFIG_FILE
00.0001FDr 3                       jsr     CHRIN
00.0001FDr 3                       ldy     CURDVC
00.0001FDr 3                       bne     L2465
00.0001FDr 3                   .else
00.0001FDr 3  20 5A 1E             jsr     MONRDKEY
00.000200r 3                   .endif
00.000200r 3                   .ifdef OSI
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       nop
00.000200r 3                       and     #$7F
00.000200r 3                   .endif
00.000200r 3                 .endif ; APPLE
00.000200r 3                 .ifdef APPLE
00.000200r 3               RDKEY:
00.000200r 3                       jsr     LFD0C
00.000200r 3                       and     #$7F
00.000200r 3                 .endif
00.000200r 3  C9 0F                cmp     #$0F
00.000202r 3  D0 08                bne     L2465
00.000204r 3  48                   pha
00.000205r 3  A5 14                lda     Z14
00.000207r 3  49 FF                eor     #$FF
00.000209r 3  85 14                sta     Z14
00.00020Br 3  68                   pla
00.00020Cr 3               L2465:
00.00020Cr 3  60                   rts
00.00020Dr 3               .endif ; KBD
00.00020Dr 3               
00.00020Dr 2               
00.00020Dr 2               ; ----------------------------------------------------------------------------
00.00020Dr 2               ; TOKENIZE THE INPUT LINE
00.00020Dr 2               ; ----------------------------------------------------------------------------
00.00020Dr 2               PARSE_INPUT_LINE:
00.00020Dr 2  A6 C7                ldx     TXTPTR
00.00020Fr 2  A0 04                ldy     #$04
00.000211r 2  84 10                sty     DATAFLG
00.000213r 2               L246C:
00.000213r 2  BD 00 00             lda     INPUTBUFFERX,x
00.000216r 2               .ifdef CONFIG_CBM_ALL
00.000216r 2                       bpl     LC49E
00.000216r 2                       cmp     #$FF
00.000216r 2                       beq     L24AC
00.000216r 2                       inx
00.000216r 2                       bne     L246C
00.000216r 2               LC49E:
00.000216r 2               .endif
00.000216r 2  C9 20                cmp     #$20
00.000218r 2  F0 3B                beq     L24AC
00.00021Ar 2  85 0B                sta     ENDCHR
00.00021Cr 2  C9 22                cmp     #$22
00.00021Er 2  F0 5A                beq     L24D0
00.000220r 2  24 10                bit     DATAFLG
00.000222r 2  70 31                bvs     L24AC
00.000224r 2  C9 3F                cmp     #$3F
00.000226r 2  D0 04                bne     L2484
00.000228r 2  A9 97                lda     #TOKEN_PRINT
00.00022Ar 2  D0 29                bne     L24AC
00.00022Cr 2               L2484:
00.00022Cr 2  C9 30                cmp     #$30
00.00022Er 2  90 04                bcc     L248C
00.000230r 2  C9 3C                cmp     #$3C
00.000232r 2  90 21                bcc     L24AC
00.000234r 2               ; ----------------------------------------------------------------------------
00.000234r 2               ; SEARCH TOKEN NAME TABLE FOR MATCH STARTING
00.000234r 2               ; WITH CURRENT CHAR FROM INPUT LINE
00.000234r 2               ; ----------------------------------------------------------------------------
00.000234r 2               L248C:
00.000234r 2  84 BE                sty     STRNG2
00.000236r 2  A0 00                ldy     #$00
00.000238r 2  84 0C                sty     EOLPNTR
00.00023Ar 2  88                   dey
00.00023Br 2  86 C7                stx     TXTPTR
00.00023Dr 2  CA                   dex
00.00023Er 2               L2496:
00.00023Er 2  C8                   iny
00.00023Fr 2               L2497:
00.00023Fr 2  E8                   inx
00.000240r 2               L2498:
00.000240r 2               .ifdef KBD
00.000240r 2                       jsr     GET_UPPER
00.000240r 2               .else
00.000240r 2  BD 00 00             lda     INPUTBUFFERX,x
00.000243r 2                 .ifndef CONFIG_2
00.000243r 2  C9 20                cmp     #$20
00.000245r 2  F0 F8                beq     L2497
00.000247r 2                 .endif
00.000247r 2               .endif
00.000247r 2  38                   sec
00.000248r 2  F9 rr rr             sbc     TOKEN_NAME_TABLE,y
00.00024Br 2  F0 F1                beq     L2496
00.00024Dr 2  C9 80                cmp     #$80
00.00024Fr 2  D0 30                bne     L24D7
00.000251r 2  05 0C                ora     EOLPNTR
00.000253r 2               ; ----------------------------------------------------------------------------
00.000253r 2               ; STORE CHARACTER OR TOKEN IN OUTPUT LINE
00.000253r 2               ; ----------------------------------------------------------------------------
00.000253r 2               L24AA:
00.000253r 2  A4 BE                ldy     STRNG2
00.000255r 2               L24AC:
00.000255r 2  E8                   inx
00.000256r 2  C8                   iny
00.000257r 2  99 16 00             sta     INPUTBUFFER-5,y
00.00025Ar 2  B9 16 00             lda     INPUTBUFFER-5,y
00.00025Dr 2  F0 36                beq     L24EA
00.00025Fr 2  38                   sec
00.000260r 2  E9 3A                sbc     #$3A
00.000262r 2  F0 04                beq     L24BF
00.000264r 2  C9 49                cmp     #$49
00.000266r 2  D0 02                bne     L24C1
00.000268r 2               L24BF:
00.000268r 2  85 10                sta     DATAFLG
00.00026Ar 2               L24C1:
00.00026Ar 2  38                   sec
00.00026Br 2  E9 54                sbc     #TOKEN_REM-':'
00.00026Dr 2  D0 A4                bne     L246C
00.00026Fr 2  85 0B                sta     ENDCHR
00.000271r 2               ; ----------------------------------------------------------------------------
00.000271r 2               ; HANDLE LITERAL (BETWEEN QUOTES) OR REMARK,
00.000271r 2               ; BY COPYING CHARS UP TO ENDCHR.
00.000271r 2               ; ----------------------------------------------------------------------------
00.000271r 2               L24C8:
00.000271r 2  BD 00 00             lda     INPUTBUFFERX,x
00.000274r 2  F0 DF                beq     L24AC
00.000276r 2  C5 0B                cmp     ENDCHR
00.000278r 2  F0 DB                beq     L24AC
00.00027Ar 2               L24D0:
00.00027Ar 2  C8                   iny
00.00027Br 2  99 16 00             sta     INPUTBUFFER-5,y
00.00027Er 2  E8                   inx
00.00027Fr 2  D0 F0                bne     L24C8
00.000281r 2               ; ----------------------------------------------------------------------------
00.000281r 2               ; ADVANCE POINTER TO NEXT TOKEN NAME
00.000281r 2               ; ----------------------------------------------------------------------------
00.000281r 2               L24D7:
00.000281r 2  A6 C7                ldx     TXTPTR
00.000283r 2  E6 0C                inc     EOLPNTR
00.000285r 2               L24DB:
00.000285r 2  C8                   iny
00.000286r 2  B9 rr rr             lda     MATHTBL+28+1,y
00.000289r 2  10 FA                bpl     L24DB
00.00028Br 2  B9 rr rr             lda     TOKEN_NAME_TABLE,y
00.00028Er 2  D0 B0                bne     L2498
00.000290r 2  BD 00 00             lda     INPUTBUFFERX,x
00.000293r 2  10 BE                bpl     L24AA
00.000295r 2               ; ---END OF LINE------------------
00.000295r 2               L24EA:
00.000295r 2  99 18 00             sta     INPUTBUFFER-3,y
00.000298r 2               .ifdef CONFIG_NO_INPUTBUFFER_ZP
00.000298r 2                       dec     TXTPTR+1
00.000298r 2               .endif
00.000298r 2  A9 1A                lda     #<INPUTBUFFER-1
00.00029Ar 2  85 C7                sta     TXTPTR
00.00029Cr 2  60                   rts
00.00029Dr 2               
00.00029Dr 2               ; ----------------------------------------------------------------------------
00.00029Dr 2               ; SEARCH FOR LINE
00.00029Dr 2               ;
00.00029Dr 2               ; (LINNUM) = LINE # TO FIND
00.00029Dr 2               ; IF NOT FOUND:  CARRY = 0
00.00029Dr 2               ;	LOWTR POINTS AT NEXT LINE
00.00029Dr 2               ; IF FOUND:      CARRY = 1
00.00029Dr 2               ;	LOWTR POINTS AT LINE
00.00029Dr 2               ; ----------------------------------------------------------------------------
00.00029Dr 2               FNDLIN:
00.00029Dr 2               .ifdef KBD
00.00029Dr 2                       jsr     CHRGET
00.00029Dr 2                       jmp     LE444
00.00029Dr 2               LE440:
00.00029Dr 2                       php
00.00029Dr 2                       jsr     LINGET
00.00029Dr 2               LE444:
00.00029Dr 2                       jsr     LF457
00.00029Dr 2                       ldx     #$FF
00.00029Dr 2                       plp
00.00029Dr 2                       beq     LE464
00.00029Dr 2                       jsr     CHRGOT
00.00029Dr 2                       beq     L2520
00.00029Dr 2                       cmp     #$A5
00.00029Dr 2                       bne     L2520
00.00029Dr 2                       jsr     CHRGET
00.00029Dr 2                       beq     LE464
00.00029Dr 2                       bcs     LE461
00.00029Dr 2                       jsr     LINGET
00.00029Dr 2                       beq     L2520
00.00029Dr 2               LE461:
00.00029Dr 2                       jmp     SYNERR
00.00029Dr 2               LE464:
00.00029Dr 2                       stx     LINNUM
00.00029Dr 2                       stx     LINNUM+1
00.00029Dr 2               .else
00.00029Dr 2  A5 78                lda     TXTTAB
00.00029Fr 2  A6 79                ldx     TXTTAB+1
00.0002A1r 2               FL1:
00.0002A1r 2  A0 01                ldy     #$01
00.0002A3r 2  85 AC                sta     LOWTR
00.0002A5r 2  86 AD                stx     LOWTR+1
00.0002A7r 2  B1 AC                lda     (LOWTR),y
00.0002A9r 2  F0 1F                beq     L251F
00.0002ABr 2  C8                   iny
00.0002ACr 2  C8                   iny
00.0002ADr 2  A5 1A                lda     LINNUM+1
00.0002AFr 2  D1 AC                cmp     (LOWTR),y
00.0002B1r 2  90 18                bcc     L2520
00.0002B3r 2  F0 03                beq     L250D
00.0002B5r 2  88                   dey
00.0002B6r 2  D0 09                bne     L2516
00.0002B8r 2               L250D:
00.0002B8r 2  A5 19                lda     LINNUM
00.0002BAr 2  88                   dey
00.0002BBr 2  D1 AC                cmp     (LOWTR),y
00.0002BDr 2  90 0C                bcc     L2520
00.0002BFr 2  F0 0A                beq     L2520
00.0002C1r 2               L2516:
00.0002C1r 2  88                   dey
00.0002C2r 2  B1 AC                lda     (LOWTR),y
00.0002C4r 2  AA                   tax
00.0002C5r 2  88                   dey
00.0002C6r 2  B1 AC                lda     (LOWTR),y
00.0002C8r 2  B0 D7                bcs     FL1
00.0002CAr 2               L251F:
00.0002CAr 2  18                   clc
00.0002CBr 2               .endif
00.0002CBr 2               L2520:
00.0002CBr 2  60                   rts
00.0002CCr 2               
00.0002CCr 2               ; ----------------------------------------------------------------------------
00.0002CCr 2               ; "NEW" STATEMENT
00.0002CCr 2               ; ----------------------------------------------------------------------------
00.0002CCr 2               NEW:
00.0002CCr 2  D0 FD                bne     L2520
00.0002CEr 2               SCRTCH:
00.0002CEr 2  A9 00                lda     #$00
00.0002D0r 2  A8                   tay
00.0002D1r 2  91 78                sta     (TXTTAB),y
00.0002D3r 2  C8                   iny
00.0002D4r 2  91 78                sta     (TXTTAB),y
00.0002D6r 2  A5 78                lda     TXTTAB
00.0002D8r 2               .ifdef CONFIG_2
00.0002D8r 2               		clc
00.0002D8r 2               .endif
00.0002D8r 2  69 02                adc     #$02
00.0002DAr 2  85 7A                sta     VARTAB
00.0002DCr 2  A5 79                lda     TXTTAB+1
00.0002DEr 2  69 00                adc     #$00
00.0002E0r 2  85 7B                sta     VARTAB+1
00.0002E2r 2               ; ----------------------------------------------------------------------------
00.0002E2r 2               SETPTRS:
00.0002E2r 2  20 rr rr             jsr     STXTPT
00.0002E5r 2               .ifdef CONFIG_11A
00.0002E5r 2  A9 00                lda     #$00
00.0002E7r 2               
00.0002E7r 2               ; ----------------------------------------------------------------------------
00.0002E7r 2               ; "CLEAR" STATEMENT
00.0002E7r 2               ; ----------------------------------------------------------------------------
00.0002E7r 2               CLEAR:
00.0002E7r 2  D0 2C                bne     L256A
00.0002E9r 2               .endif
00.0002E9r 2               CLEARC:
00.0002E9r 2               .ifdef KBD
00.0002E9r 2                       lda     #<CONST_MEMSIZ
00.0002E9r 2                       ldy     #>CONST_MEMSIZ
00.0002E9r 2               .else
00.0002E9r 2  A5 84                lda     MEMSIZ
00.0002EBr 2  A4 85                ldy     MEMSIZ+1
00.0002EDr 2               .endif
00.0002EDr 2  85 80                sta     FRETOP
00.0002EFr 2  84 81                sty     FRETOP+1
00.0002F1r 2               .ifdef CONFIG_CBM_ALL
00.0002F1r 2                       jsr     CLALL
00.0002F1r 2               .endif
00.0002F1r 2  A5 7A                lda     VARTAB
00.0002F3r 2  A4 7B                ldy     VARTAB+1
00.0002F5r 2  85 7C                sta     ARYTAB
00.0002F7r 2  84 7D                sty     ARYTAB+1
00.0002F9r 2  85 7E                sta     STREND
00.0002FBr 2  84 7F                sty     STREND+1
00.0002FDr 2  20 rr rr             jsr     RESTORE
00.000300r 2               ; ----------------------------------------------------------------------------
00.000300r 2               STKINI:
00.000300r 2  A2 66                ldx     #TEMPST
00.000302r 2  86 63                stx     TEMPPT
00.000304r 2  68                   pla
00.000305r 2               .ifdef CONFIG_2
00.000305r 2               		tay
00.000305r 2               .else
00.000305r 2  8D FD 01             sta     STACK+STACK_TOP+1
00.000308r 2               .endif
00.000308r 2  68                   pla
00.000309r 2               .ifndef CONFIG_2
00.000309r 2  8D FE 01             sta     STACK+STACK_TOP+2
00.00030Cr 2               .endif
00.00030Cr 2  A2 FC                ldx     #STACK_TOP
00.00030Er 2  9A                   txs
00.00030Fr 2               .ifdef CONFIG_2
00.00030Fr 2                       pha
00.00030Fr 2                       tya
00.00030Fr 2                       pha
00.00030Fr 2               .endif
00.00030Fr 2  A9 00                lda     #$00
00.000311r 2  85 8B                sta     OLDTEXT+1
00.000313r 2  85 11                sta     SUBFLG
00.000315r 2               L256A:
00.000315r 2  60                   rts
00.000316r 2               
00.000316r 2               ; ----------------------------------------------------------------------------
00.000316r 2               ; SET TXTPTR TO BEGINNING OF PROGRAM
00.000316r 2               ; ----------------------------------------------------------------------------
00.000316r 2               STXTPT:
00.000316r 2  18                   clc
00.000317r 2  A5 78                lda     TXTTAB
00.000319r 2  69 FF                adc     #$FF
00.00031Br 2  85 C7                sta     TXTPTR
00.00031Dr 2  A5 79                lda     TXTTAB+1
00.00031Fr 2  69 FF                adc     #$FF
00.000321r 2  85 C8                sta     TXTPTR+1
00.000323r 2  60                   rts
00.000324r 2               
00.000324r 2               ; ----------------------------------------------------------------------------
00.000324r 2               .ifdef KBD
00.000324r 2               LE4C0:
00.000324r 2                       ldy     #<LE444
00.000324r 2                       ldx     #>LE444
00.000324r 2               LE4C4:
00.000324r 2                       jsr     LFFD6
00.000324r 2                       jsr     LFFED
00.000324r 2                       lda     $0504
00.000324r 2                       clc
00.000324r 2                       adc     #$08
00.000324r 2                       sta     $0504
00.000324r 2                       rts
00.000324r 2               
00.000324r 2               CMPJMPADRS:
00.000324r 2                       lda     1,x
00.000324r 2                       cmp     JMPADRS+2
00.000324r 2                       bne     LE4DE
00.000324r 2                       lda     0,x
00.000324r 2                       cmp     JMPADRS+1
00.000324r 2               LE4DE:
00.000324r 2                       rts
00.000324r 2               .endif
00.000324r 2               
00.000324r 2               ; ----------------------------------------------------------------------------
00.000324r 2               ; "LIST" STATEMENT
00.000324r 2               ; ----------------------------------------------------------------------------
00.000324r 2               LIST:
00.000324r 2               .ifdef KBD
00.000324r 2                       jsr     LE440
00.000324r 2                       bne     LE4DE
00.000324r 2                       pla
00.000324r 2                       pla
00.000324r 2               L25A6:
00.000324r 2                       jsr     CRDO
00.000324r 2               .else
00.000324r 2                 .ifdef MICROTAN
00.000324r 2                       php
00.000324r 2                       jmp     LE21C ; patch
00.000324r 2               LC57E:
00.000324r 2                 .else
00.000324r 2  90 06                bcc     L2581
00.000326r 2  F0 04                beq     L2581
00.000328r 2  C9 A5                cmp     #TOKEN_MINUS
00.00032Ar 2  D0 E9                bne     L256A
00.00032Cr 2               L2581:
00.00032Cr 2  20 rr rr             jsr     LINGET
00.00032Fr 2                 .endif
00.00032Fr 2  20 rr rr             jsr     FNDLIN
00.000332r 2                 .ifdef MICROTAN
00.000332r 2                       plp
00.000332r 2                       beq     L2598
00.000332r 2                 .endif
00.000332r 2  20 C6 00             jsr     CHRGOT
00.000335r 2                 .ifdef MICROTAN
00.000335r 2                       beq     L25A6
00.000335r 2                 .else
00.000335r 2  F0 0C                beq     L2598
00.000337r 2                 .endif
00.000337r 2  C9 A5                cmp     #TOKEN_MINUS
00.000339r 2  D0 90                bne     L2520
00.00033Br 2  20 C0 00             jsr     CHRGET
00.00033Er 2                 .ifdef MICROTAN
00.00033Er 2                       beq     L2598
00.00033Er 2                       jsr     LINGET
00.00033Er 2                       beq     L25A6
00.00033Er 2                       rts
00.00033Er 2                 .else
00.00033Er 2  20 rr rr             jsr     LINGET
00.000341r 2  D0 88                bne     L2520
00.000343r 2                 .endif
00.000343r 2               L2598:
00.000343r 2                 .ifndef MICROTAN
00.000343r 2  68                   pla
00.000344r 2  68                   pla
00.000345r 2  A5 19                lda     LINNUM
00.000347r 2  05 1A                ora     LINNUM+1
00.000349r 2  D0 06                bne     L25A6
00.00034Br 2                 .endif
00.00034Br 2  A9 FF                lda     #$FF
00.00034Dr 2  85 19                sta     LINNUM
00.00034Fr 2  85 1A                sta     LINNUM+1
00.000351r 2               L25A6:
00.000351r 2                 .ifdef MICROTAN
00.000351r 2                       pla
00.000351r 2                       pla
00.000351r 2                 .endif
00.000351r 2               L25A6X:
00.000351r 2               .endif
00.000351r 2  A0 01                ldy     #$01
00.000353r 2               .ifdef CONFIG_DATAFLG
00.000353r 2                       sty     DATAFLG
00.000353r 2               .endif
00.000353r 2  B1 AC                lda     (LOWTRX),y
00.000355r 2  F0 39                beq     L25E5
00.000357r 2               .ifdef MICROTAN
00.000357r 2                       jmp     LE21F
00.000357r 2               LC5A9:
00.000357r 2               .else
00.000357r 2  20 rr rr             jsr     ISCNTC
00.00035Ar 2               .endif
00.00035Ar 2               .ifndef KBD
00.00035Ar 2  20 rr rr             jsr     CRDO
00.00035Dr 2               .endif
00.00035Dr 2  C8                   iny
00.00035Er 2  B1 AC                lda     (LOWTRX),y
00.000360r 2  AA                   tax
00.000361r 2  C8                   iny
00.000362r 2  B1 AC                lda     (LOWTRX),y
00.000364r 2  C5 1A                cmp     LINNUM+1
00.000366r 2  D0 04                bne     L25C1
00.000368r 2  E4 19                cpx     LINNUM
00.00036Ar 2  F0 02                beq     L25C3
00.00036Cr 2               L25C1:
00.00036Cr 2  B0 22                bcs     L25E5
00.00036Er 2               ; ---LIST ONE LINE----------------
00.00036Er 2               L25C3:
00.00036Er 2  84 96                sty     FORPNT
00.000370r 2  20 rr rr             jsr     LINPRT
00.000373r 2  A9 20                lda     #$20
00.000375r 2               L25CA:
00.000375r 2  A4 96                ldy     FORPNT
00.000377r 2  29 7F                and     #$7F
00.000379r 2               L25CE:
00.000379r 2  20 rr rr             jsr     OUTDO
00.00037Cr 2               .ifdef CONFIG_DATAFLG
00.00037Cr 2                       cmp     #$22
00.00037Cr 2                       bne     LA519
00.00037Cr 2                       lda     DATAFLG
00.00037Cr 2                       eor     #$FF
00.00037Cr 2                       sta     DATAFLG
00.00037Cr 2               LA519:
00.00037Cr 2               .endif
00.00037Cr 2  C8                   iny
00.00037Dr 2               .ifdef CONFIG_11
00.00037Dr 2  F0 11                beq     L25E5
00.00037Fr 2               .endif
00.00037Fr 2  B1 AC                lda     (LOWTRX),y
00.000381r 2  D0 10                bne     L25E8
00.000383r 2  A8                   tay
00.000384r 2  B1 AC                lda     (LOWTRX),y
00.000386r 2  AA                   tax
00.000387r 2  C8                   iny
00.000388r 2  B1 AC                lda     (LOWTRX),y
00.00038Ar 2  86 AC                stx     LOWTRX
00.00038Cr 2  85 AD                sta     LOWTRX+1
00.00038Er 2               .ifdef MICROTAN
00.00038Er 2                       bne     L25A6X
00.00038Er 2               .else
00.00038Er 2  D0 C1                bne     L25A6
00.000390r 2               .endif
00.000390r 2               L25E5:
00.000390r 2  4C rr rr             jmp     RESTART
00.000393r 2               L25E8:
00.000393r 2  10 E4                bpl     L25CE
00.000395r 2               .ifdef CONFIG_DATAFLG
00.000395r 2                       cmp     #$FF
00.000395r 2                       beq     L25CE
00.000395r 2                       bit     DATAFLG
00.000395r 2                       bmi     L25CE
00.000395r 2               .endif
00.000395r 2  38                   sec
00.000396r 2  E9 7F                sbc     #$7F
00.000398r 2  AA                   tax
00.000399r 2  84 96                sty     FORPNT
00.00039Br 2  A0 FF                ldy     #$FF
00.00039Dr 2               L25F2:
00.00039Dr 2  CA                   dex
00.00039Er 2  F0 08                beq     L25FD
00.0003A0r 2               L25F5:
00.0003A0r 2  C8                   iny
00.0003A1r 2  B9 rr rr             lda     TOKEN_NAME_TABLE,y
00.0003A4r 2  10 FA                bpl     L25F5
00.0003A6r 2  30 F5                bmi     L25F2
00.0003A8r 2               L25FD:
00.0003A8r 2  C8                   iny
00.0003A9r 2  B9 rr rr             lda     TOKEN_NAME_TABLE,y
00.0003ACr 2  30 C7                bmi     L25CA
00.0003AEr 2  20 rr rr             jsr     OUTDO
00.0003B1r 2  D0 F5                bne     L25FD	; always
00.0003B3r 2               
00.0003B3r 2               
00.0003B3r 1               .include "flow1.s"
00.0003B3r 2               .segment "CODE"
00.0003B3r 2               
00.0003B3r 2               ; ----------------------------------------------------------------------------
00.0003B3r 2               ; "FOR" STATEMENT
00.0003B3r 2               ;
00.0003B3r 2               ; FOR PUSHES 18 BYTES ON THE STACK:
00.0003B3r 2               ; 2 -- TXTPTR
00.0003B3r 2               ; 2 -- LINE NUMBER
00.0003B3r 2               ; 5 -- INITIAL (CURRENT)  FOR VARIABLE VALUE
00.0003B3r 2               ; 1 -- STEP SIGN
00.0003B3r 2               ; 5 -- STEP VALUE
00.0003B3r 2               ; 2 -- ADDRESS OF FOR VARIABLE IN VARTAB
00.0003B3r 2               ; 1 -- FOR TOKEN ($81)
00.0003B3r 2               ; ----------------------------------------------------------------------------
00.0003B3r 2               FOR:
00.0003B3r 2  A9 80                lda     #$80
00.0003B5r 2  85 11                sta     SUBFLG
00.0003B7r 2  20 rr rr             jsr     LET
00.0003BAr 2  20 rr rr             jsr     GTFORPNT
00.0003BDr 2  D0 05                bne     L2619
00.0003BFr 2  8A                   txa
00.0003C0r 2  69 0F                adc     #FOR_STACK1
00.0003C2r 2  AA                   tax
00.0003C3r 2  9A                   txs
00.0003C4r 2               L2619:
00.0003C4r 2  68                   pla
00.0003C5r 2  68                   pla
00.0003C6r 2  A9 09                lda     #FOR_STACK2
00.0003C8r 2  20 rr rr             jsr     CHKMEM
00.0003CBr 2  20 rr rr             jsr     DATAN
00.0003CEr 2  18                   clc
00.0003CFr 2  98                   tya
00.0003D0r 2  65 C7                adc     TXTPTR
00.0003D2r 2  48                   pha
00.0003D3r 2  A5 C8                lda     TXTPTR+1
00.0003D5r 2  69 00                adc     #$00
00.0003D7r 2  48                   pha
00.0003D8r 2  A5 87                lda     CURLIN+1
00.0003DAr 2  48                   pha
00.0003DBr 2  A5 86                lda     CURLIN
00.0003DDr 2  48                   pha
00.0003DEr 2  A9 9E                lda     #TOKEN_TO
00.0003E0r 2  20 rr rr             jsr     SYNCHR
00.0003E3r 2  20 rr rr             jsr     CHKNUM
00.0003E6r 2  20 rr rr             jsr     FRMNUM
00.0003E9r 2  A5 B3                lda     FACSIGN
00.0003EBr 2  09 7F                ora     #$7F
00.0003EDr 2  25 AF                and     FAC+1
00.0003EFr 2  85 AF                sta     FAC+1
00.0003F1r 2  A9 rr                lda     #<STEP
00.0003F3r 2  A0 rr                ldy     #>STEP
00.0003F5r 2  85 6F                sta     INDEX
00.0003F7r 2  84 70                sty     INDEX+1
00.0003F9r 2  4C rr rr             jmp     FRM_STACK3
00.0003FCr 2               
00.0003FCr 2               ; ----------------------------------------------------------------------------
00.0003FCr 2               ; "STEP" PHRASE OF "FOR" STATEMENT
00.0003FCr 2               ; ----------------------------------------------------------------------------
00.0003FCr 2               STEP:
00.0003FCr 2  A9 rr                lda     #<CON_ONE
00.0003FEr 2  A0 rr                ldy     #>CON_ONE
00.000400r 2  20 rr rr             jsr     LOAD_FAC_FROM_YA
00.000403r 2  20 C6 00             jsr     CHRGOT
00.000406r 2  C9 A3                cmp     #TOKEN_STEP
00.000408r 2  D0 06                bne     L2665
00.00040Ar 2  20 C0 00             jsr     CHRGET
00.00040Dr 2  20 rr rr             jsr     FRMNUM
00.000410r 2               L2665:
00.000410r 2  20 rr rr             jsr     SIGN
00.000413r 2  20 rr rr             jsr     FRM_STACK2
00.000416r 2  A5 97                lda     FORPNT+1
00.000418r 2  48                   pha
00.000419r 2  A5 96                lda     FORPNT
00.00041Br 2  48                   pha
00.00041Cr 2  A9 81                lda     #$81
00.00041Er 2  48                   pha
00.00041Fr 2               
00.00041Fr 2               ; ----------------------------------------------------------------------------
00.00041Fr 2               ; PERFORM NEXT STATEMENT
00.00041Fr 2               ; ----------------------------------------------------------------------------
00.00041Fr 2               NEWSTT:
00.00041Fr 2  20 rr rr             jsr     ISCNTC
00.000422r 2  A5 C7                lda     TXTPTR
00.000424r 2  A4 C8                ldy     TXTPTR+1
00.000426r 2               .if .def(CONFIG_NO_INPUTBUFFER_ZP) && .def(CONFIG_2)
00.000426r 2                       cpy     #>INPUTBUFFER
00.000426r 2                 .ifdef CBM2
00.000426r 2                       nop
00.000426r 2                 .endif
00.000426r 2                       beq     LC6D4
00.000426r 2               .else
00.000426r 2               ; BUG on AppleSoft I,
00.000426r 2               ; fixed differently on AppleSoft II (ldx/inx)
00.000426r 2  F0 06                beq     L2683
00.000428r 2               .endif
00.000428r 2  85 8A                sta     OLDTEXT
00.00042Ar 2  84 8B                sty     OLDTEXT+1
00.00042Cr 2               LC6D4:
00.00042Cr 2  A0 00                ldy     #$00
00.00042Er 2               L2683:
00.00042Er 2  B1 C7                lda     (TXTPTR),y
00.000430r 2               .ifndef CONFIG_11
00.000430r 2                       beq     LA5DC	; old: 1 cycle more on generic case
00.000430r 2                       cmp     #$3A
00.000430r 2                       beq     NEWSTT2
00.000430r 2               SYNERR1:
00.000430r 2                       jmp     SYNERR
00.000430r 2               LA5DC:
00.000430r 2               .else
00.000430r 2  D0 3D                bne     COLON; new: 1 cycle more on ":" case
00.000432r 2               .endif
00.000432r 2  A0 02                ldy     #$02
00.000434r 2  B1 C7                lda     (TXTPTR),y
00.000436r 2  18                   clc
00.000437r 2               .ifdef CONFIG_2
00.000437r 2                       jeq     L2701
00.000437r 2               .else
00.000437r 2  F0 73                beq     L2701
00.000439r 2               .endif
00.000439r 2  C8                   iny
00.00043Ar 2  B1 C7                lda     (TXTPTR),y
00.00043Cr 2  85 86                sta     CURLIN
00.00043Er 2  C8                   iny
00.00043Fr 2  B1 C7                lda     (TXTPTR),y
00.000441r 2  85 87                sta     CURLIN+1
00.000443r 2  98                   tya
00.000444r 2  65 C7                adc     TXTPTR
00.000446r 2  85 C7                sta     TXTPTR
00.000448r 2  90 02                bcc     NEWSTT2
00.00044Ar 2  E6 C8                inc     TXTPTR+1
00.00044Cr 2               NEWSTT2:
00.00044Cr 2  20 C0 00             jsr     CHRGET
00.00044Fr 2  20 rr rr             jsr     EXECUTE_STATEMENT
00.000452r 2  4C rr rr             jmp     NEWSTT
00.000455r 2               
00.000455r 2               ; ----------------------------------------------------------------------------
00.000455r 2               ; EXECUTE A STATEMENT
00.000455r 2               ;
00.000455r 2               ; (A) IS FIRST CHAR OF STATEMENT
00.000455r 2               ; CARRY IS SET
00.000455r 2               ; ----------------------------------------------------------------------------
00.000455r 2               EXECUTE_STATEMENT:
00.000455r 2               .ifndef CONFIG_11A
00.000455r 2                       beq     RET1
00.000455r 2               .else
00.000455r 2  F0 2D                beq     RET2
00.000457r 2               .endif
00.000457r 2               .ifndef CONFIG_11
00.000457r 2                       sec
00.000457r 2               .endif
00.000457r 2               EXECUTE_STATEMENT1:
00.000457r 2  E9 80                sbc     #$80
00.000459r 2               .ifndef CONFIG_11
00.000459r 2                       jcc     LET	; old: 1 cycle more on instr.
00.000459r 2               .else
00.000459r 2  90 11                bcc     LET1; new: 1 cycle more on assignment
00.00045Br 2               .endif
00.00045Br 2  C9 1D                cmp     #NUM_TOKENS
00.00045Dr 2               .ifdef CONFIG_2
00.00045Dr 2                       bcs     LC721
00.00045Dr 2               .else
00.00045Dr 2  B0 14                bcs     SYNERR1
00.00045Fr 2               .endif
00.00045Fr 2  0A                   asl     a
00.000460r 2  A8                   tay
00.000461r 2  B9 rr rr             lda     TOKEN_ADDRESS_TABLE+1,y
00.000464r 2  48                   pha
00.000465r 2  B9 rr rr             lda     TOKEN_ADDRESS_TABLE,y
00.000468r 2  48                   pha
00.000469r 2  4C C0 00             jmp     CHRGET
00.00046Cr 2               
00.00046Cr 2               .ifdef CONFIG_11
00.00046Cr 2               LET1:
00.00046Cr 2  4C rr rr             jmp     LET
00.00046Fr 2               
00.00046Fr 2               COLON:
00.00046Fr 2  C9 3A                cmp     #$3A
00.000471r 2  F0 D9                beq     NEWSTT2
00.000473r 2               SYNERR1:
00.000473r 2  4C rr rr             jmp     SYNERR
00.000476r 2               .endif
00.000476r 2               
00.000476r 2               .ifdef CONFIG_2; GO TO
00.000476r 2               LC721:
00.000476r 2                       cmp     #TOKEN_GO-$80
00.000476r 2                       bne     SYNERR1
00.000476r 2                       jsr     CHRGET
00.000476r 2                       lda     #TOKEN_TO
00.000476r 2                       jsr     SYNCHR
00.000476r 2                       jmp     GOTO
00.000476r 2               .endif
00.000476r 2               
00.000476r 2               ; ----------------------------------------------------------------------------
00.000476r 2               ; "RESTORE" STATEMENT
00.000476r 2               ; ----------------------------------------------------------------------------
00.000476r 2               RESTORE:
00.000476r 2  38                   sec
00.000477r 2  A5 78                lda     TXTTAB
00.000479r 2  E9 01                sbc     #$01
00.00047Br 2  A4 79                ldy     TXTTAB+1
00.00047Dr 2  B0 01                bcs     SETDA
00.00047Fr 2  88                   dey
00.000480r 2               SETDA:
00.000480r 2  85 8E                sta     DATPTR
00.000482r 2  84 8F                sty     DATPTR+1
00.000484r 2               RET2:
00.000484r 2  60                   rts
00.000485r 2               
00.000485r 2               .include "iscntc.s"
00.000485r 3               .segment "CODE"
00.000485r 3               ; ----------------------------------------------------------------------------
00.000485r 3               ; SEE IF CONTROL-C TYPED
00.000485r 3               ; ----------------------------------------------------------------------------
00.000485r 3               .ifndef CONFIG_CBM_ALL
00.000485r 3               .include "cbm_iscntc.s"
00.000485r 4               ; nothing - ISCNTC is a KERNAL function
00.000485r 4               
00.000485r 3               .endif
00.000485r 3               .ifdef KBD
00.000485r 3               .include "kbd_iscntc.s"
00.000485r 3               .endif
00.000485r 3               .ifdef OSI
00.000485r 3               .include "osi_iscntc.s"
00.000485r 3               .endif
00.000485r 3               .ifdef APPLE
00.000485r 3               .include "apple_iscntc.s"
00.000485r 3               .endif
00.000485r 3               .ifdef KIM
00.000485r 3               .include "kim_iscntc.s"
00.000485r 4               .segment "CODE"
00.000485r 4               ISCNTC:
00.000485r 4  A9 01                lda     #$01
00.000487r 4  2C 40 17             bit     $1740
00.00048Ar 4  30 F8                bmi     RET2
00.00048Cr 4  A2 08                ldx     #$08
00.00048Er 4  A9 03                lda     #$03
00.000490r 4  18                   clc
00.000491r 4  C9 03                cmp     #$03
00.000493r 4               ;!!! runs into "STOP"
00.000493r 4               
00.000493r 3               .endif
00.000493r 3               .ifdef MICROTAN
00.000493r 3               .include "microtan_iscntc.s"
00.000493r 3               .endif
00.000493r 3               ;!!! runs into "STOP"
00.000493r 3               
00.000493r 2               ;!!! runs into "STOP"
00.000493r 2               ; ----------------------------------------------------------------------------
00.000493r 2               ; "STOP" STATEMENT
00.000493r 2               ; ----------------------------------------------------------------------------
00.000493r 2               STOP:
00.000493r 2  B0 01                bcs     END2
00.000495r 2               
00.000495r 2               ; ----------------------------------------------------------------------------
00.000495r 2               ; "END" STATEMENT
00.000495r 2               ; ----------------------------------------------------------------------------
00.000495r 2               END:
00.000495r 2  18                   clc
00.000496r 2               END2:
00.000496r 2  D0 3D                bne     RET1
00.000498r 2  A5 C7                lda     TXTPTR
00.00049Ar 2  A4 C8                ldy     TXTPTR+1
00.00049Cr 2               .if .def(CONFIG_NO_INPUTBUFFER_ZP) && .def(CONFIG_2)
00.00049Cr 2               ; BUG on AppleSoft I
00.00049Cr 2               ; fix exists on AppleSoft II
00.00049Cr 2               ; TXTPTR+1 will always be > 0
00.00049Cr 2                       ldx     CURLIN+1
00.00049Cr 2                       inx
00.00049Cr 2               .endif
00.00049Cr 2  F0 0C                beq     END4
00.00049Er 2  85 8A                sta     OLDTEXT
00.0004A0r 2  84 8B                sty     OLDTEXT+1
00.0004A2r 2               CONTROL_C_TYPED:
00.0004A2r 2  A5 86                lda     CURLIN
00.0004A4r 2  A4 87                ldy     CURLIN+1
00.0004A6r 2  85 88                sta     OLDLIN
00.0004A8r 2  84 89                sty     OLDLIN+1
00.0004AAr 2               END4:
00.0004AAr 2  68                   pla
00.0004ABr 2  68                   pla
00.0004ACr 2               L2701:
00.0004ACr 2  A9 rr                lda     #<QT_BREAK
00.0004AEr 2  A0 rr                ldy     #>QT_BREAK
00.0004B0r 2               .ifndef KBD
00.0004B0r 2  A2 00                ldx     #$00
00.0004B2r 2  86 14                stx     Z14
00.0004B4r 2               .endif
00.0004B4r 2  90 03                bcc     L270E
00.0004B6r 2  4C rr rr             jmp     PRINT_ERROR_LINNUM
00.0004B9r 2               L270E:
00.0004B9r 2  4C rr rr             jmp     RESTART
00.0004BCr 2               .ifdef KBD
00.0004BCr 2               LE664:
00.0004BCr 2                       tay
00.0004BCr 2                       jmp     SNGFLT
00.0004BCr 2               .endif
00.0004BCr 2               
00.0004BCr 2               ; ----------------------------------------------------------------------------
00.0004BCr 2               ; "CONT" COMMAND
00.0004BCr 2               ; ----------------------------------------------------------------------------
00.0004BCr 2               CONT:
00.0004BCr 2  D0 17                bne     RET1
00.0004BEr 2  A2 D2                ldx     #ERR_CANTCONT
00.0004C0r 2  A4 8B                ldy     OLDTEXT+1
00.0004C2r 2  D0 03                bne     L271C
00.0004C4r 2  4C rr rr             jmp     ERROR
00.0004C7r 2               L271C:
00.0004C7r 2  A5 8A                lda     OLDTEXT
00.0004C9r 2  85 C7                sta     TXTPTR
00.0004CBr 2  84 C8                sty     TXTPTR+1
00.0004CDr 2  A5 88                lda     OLDLIN
00.0004CFr 2  A4 89                ldy     OLDLIN+1
00.0004D1r 2  85 86                sta     CURLIN
00.0004D3r 2  84 87                sty     CURLIN+1
00.0004D5r 2               RET1:
00.0004D5r 2  60                   rts
00.0004D6r 2               
00.0004D6r 2               .ifdef KBD
00.0004D6r 2               PRT:
00.0004D6r 2                       jsr     GETBYT
00.0004D6r 2                       txa
00.0004D6r 2               ; not ROR bug safe
00.0004D6r 2                       ror     a
00.0004D6r 2                       ror     a
00.0004D6r 2                       ror     a
00.0004D6r 2                       sta     $8F
00.0004D6r 2                       rts
00.0004D6r 2               
00.0004D6r 2               LE68C:
00.0004D6r 2                       ldy     #$12
00.0004D6r 2               LE68E:
00.0004D6r 2                       lda     LEA30,y
00.0004D6r 2                       sta     $03A2,y
00.0004D6r 2                       dey
00.0004D6r 2                       bpl     LE68E
00.0004D6r 2                       rts
00.0004D6r 2               .endif
00.0004D6r 2               
00.0004D6r 2               .if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS)
00.0004D6r 2               ; CBM1 has the keyword removed,
00.0004D6r 2               ; but the code is still here
00.0004D6r 2               NULL:
00.0004D6r 2  20 rr rr             jsr     GETBYT
00.0004D9r 2  D0 FA                bne     RET1
00.0004DBr 2  E8                   inx
00.0004DCr 2  E0 F2                cpx     #NULL_MAX
00.0004DEr 2  B0 04                bcs     L2739
00.0004E0r 2  CA                   dex
00.0004E1r 2  86 15                stx     Z15
00.0004E3r 2  60                   rts
00.0004E4r 2               L2739:
00.0004E4r 2  4C rr rr             jmp     IQERR
00.0004E7r 2               .endif
00.0004E7r 2               .ifndef CONFIG_11A
00.0004E7r 2               CLEAR:
00.0004E7r 2                       bne     RET1
00.0004E7r 2                       jmp     CLEARC
00.0004E7r 2               .endif
00.0004E7r 2               
00.0004E7r 1               .include "loadsave.s"
00.0004E7r 2               .segment "CODE"
00.0004E7r 2               
00.0004E7r 2               .ifdef APPLE
00.0004E7r 2               .include "apple_loadsave.s"
00.0004E7r 2               .endif
00.0004E7r 2               .ifdef KIM
00.0004E7r 2               .include "kim_loadsave.s"
00.0004E7r 3               .segment "CODE"
00.0004E7r 3               SAVE:
00.0004E7r 3  BA                   tsx
00.0004E8r 3  86 12                stx     INPUTFLG
00.0004EAr 3  A9 37                lda     #$37
00.0004ECr 3  85 F2                sta     $F2
00.0004EEr 3  A9 FE                lda     #$FE
00.0004F0r 3  8D F9 17             sta     $17F9
00.0004F3r 3  A5 78                lda     TXTTAB
00.0004F5r 3  A4 79                ldy     TXTTAB+1
00.0004F7r 3  8D F5 17             sta     $17F5
00.0004FAr 3  8C F6 17             sty     $17F6
00.0004FDr 3  A5 7A                lda     VARTAB
00.0004FFr 3  A4 7B                ldy     VARTAB+1
00.000501r 3  8D F7 17             sta     $17F7
00.000504r 3  8C F8 17             sty     $17F8
00.000507r 3  4C 00 18             jmp     L1800
00.00050Ar 3  A6 12                ldx     INPUTFLG
00.00050Cr 3  9A                   txs
00.00050Dr 3  A9 rr                lda     #<QT_SAVED
00.00050Fr 3  A0 rr                ldy     #>QT_SAVED
00.000511r 3  4C rr rr             jmp     STROUT
00.000514r 3               QT_LOADED:
00.000514r 3  4C 4F 41 44          .byte   "LOADED"
00.000518r 3  45 44        
00.00051Ar 3  00                   .byte   $00
00.00051Br 3               QT_SAVED:
00.00051Br 3  53 41 56 45          .byte   "SAVED"
00.00051Fr 3  44           
00.000520r 3  0D 0A 00 00          .byte   $0D,$0A,$00,$00,$00,$00,$00,$00
00.000524r 3  00 00 00 00  
00.000528r 3  00 00 00 00          .byte   $00,$00,$00,$00,$00,$00,$00,$00
00.00052Cr 3  00 00 00 00  
00.000530r 3  00 00 00 00          .byte   $00,$00,$00,$00,$00,$00,$00
00.000534r 3  00 00 00     
00.000537r 3               LOAD:
00.000537r 3  A5 78                lda     TXTTAB
00.000539r 3  A4 79                ldy     TXTTAB+1
00.00053Br 3  8D F5 17             sta     $17F5
00.00053Er 3  8C F6 17             sty     $17F6
00.000541r 3  A9 FF                lda     #$FF
00.000543r 3  8D F9 17             sta     $17F9
00.000546r 3  A9 rr                lda     #<L27A6
00.000548r 3  A0 rr                ldy     #>L27A6
00.00054Ar 3  85 01                sta     GORESTART+1
00.00054Cr 3  84 02                sty     GORESTART+2
00.00054Er 3  4C 73 18             jmp     L1873
00.000551r 3               L27A6:
00.000551r 3  A2 FF                ldx     #$FF
00.000553r 3  9A                   txs
00.000554r 3  A9 rr                lda     #<RESTART
00.000556r 3  A0 rr                ldy     #>RESTART
00.000558r 3  85 01                sta     GORESTART+1
00.00055Ar 3  84 02                sty     GORESTART+2
00.00055Cr 3  A9 rr                lda     #<QT_LOADED
00.00055Er 3  A0 rr                ldy     #>QT_LOADED
00.000560r 3  20 rr rr             jsr     STROUT
00.000563r 3  AE ED 17             ldx     $17ED
00.000566r 3  AC EE 17             ldy     $17EE
00.000569r 3  8A                   txa
00.00056Ar 3  D0 01                bne     L27C2
00.00056Cr 3  EA                   nop
00.00056Dr 3               L27C2:
00.00056Dr 3  EA                   nop
00.00056Er 3  86 7A                stx     VARTAB
00.000570r 3  84 7B                sty     VARTAB+1
00.000572r 3  4C rr rr             jmp     FIX_LINKS
00.000575r 3               
00.000575r 2               .endif
00.000575r 2               .ifdef MICROTAN
00.000575r 2               .include "microtan_loadsave.s"
00.000575r 2               .endif
00.000575r 2               
00.000575r 1               .include "flow2.s"
00.000575r 2               .segment "CODE"
00.000575r 2               ; ----------------------------------------------------------------------------
00.000575r 2               ; "RUN" COMMAND
00.000575r 2               ; ----------------------------------------------------------------------------
00.000575r 2               RUN:
00.000575r 2  D0 03                bne     L27CF
00.000577r 2  4C rr rr             jmp     SETPTRS
00.00057Ar 2               L27CF:
00.00057Ar 2  20 rr rr             jsr     CLEARC
00.00057Dr 2  4C rr rr             jmp     L27E9
00.000580r 2               
00.000580r 2               ; ----------------------------------------------------------------------------
00.000580r 2               ; "GOSUB" STATEMENT
00.000580r 2               ;
00.000580r 2               ; LEAVES 7 BYTES ON STACK:
00.000580r 2               ; 2 -- RETURN ADDRESS (NEWSTT)
00.000580r 2               ; 2 -- TXTPTR
00.000580r 2               ; 2 -- LINE #
00.000580r 2               ; 1 -- GOSUB TOKEN
00.000580r 2               ; ----------------------------------------------------------------------------
00.000580r 2               GOSUB:
00.000580r 2  A9 03                lda     #$03
00.000582r 2  20 rr rr             jsr     CHKMEM
00.000585r 2  A5 C8                lda     TXTPTR+1
00.000587r 2  48                   pha
00.000588r 2  A5 C7                lda     TXTPTR
00.00058Ar 2  48                   pha
00.00058Br 2  A5 87                lda     CURLIN+1
00.00058Dr 2  48                   pha
00.00058Er 2  A5 86                lda     CURLIN
00.000590r 2  48                   pha
00.000591r 2  A9 8C                lda     #TOKEN_GOSUB
00.000593r 2  48                   pha
00.000594r 2               L27E9:
00.000594r 2  20 C6 00             jsr     CHRGOT
00.000597r 2  20 rr rr             jsr     GOTO
00.00059Ar 2  4C rr rr             jmp     NEWSTT
00.00059Dr 2               
00.00059Dr 2               ; ----------------------------------------------------------------------------
00.00059Dr 2               ; "GOTO" STATEMENT
00.00059Dr 2               ; ALSO USED BY "RUN" AND "GOSUB"
00.00059Dr 2               ; ----------------------------------------------------------------------------
00.00059Dr 2               GOTO:
00.00059Dr 2  20 rr rr             jsr     LINGET
00.0005A0r 2  20 rr rr             jsr     REMN
00.0005A3r 2  A5 87                lda     CURLIN+1
00.0005A5r 2  C5 1A                cmp     LINNUM+1
00.0005A7r 2  B0 0B                bcs     L2809
00.0005A9r 2  98                   tya
00.0005AAr 2  38                   sec
00.0005ABr 2  65 C7                adc     TXTPTR
00.0005ADr 2  A6 C8                ldx     TXTPTR+1
00.0005AFr 2  90 07                bcc     L280D
00.0005B1r 2  E8                   inx
00.0005B2r 2  B0 04                bcs     L280D
00.0005B4r 2               L2809:
00.0005B4r 2  A5 78                lda     TXTTAB
00.0005B6r 2  A6 79                ldx     TXTTAB+1
00.0005B8r 2               L280D:
00.0005B8r 2               .ifdef KBD
00.0005B8r 2                       jsr     LF457
00.0005B8r 2                       bne     UNDERR
00.0005B8r 2               .else
00.0005B8r 2  20 rr rr             jsr     FL1
00.0005BBr 2  90 1E                bcc     UNDERR
00.0005BDr 2               .endif
00.0005BDr 2  A5 AC                lda     LOWTRX
00.0005BFr 2  E9 01                sbc     #$01
00.0005C1r 2  85 C7                sta     TXTPTR
00.0005C3r 2  A5 AD                lda     LOWTRX+1
00.0005C5r 2  E9 00                sbc     #$00
00.0005C7r 2  85 C8                sta     TXTPTR+1
00.0005C9r 2               L281E:
00.0005C9r 2  60                   rts
00.0005CAr 2               
00.0005CAr 2               ; ----------------------------------------------------------------------------
00.0005CAr 2               ; "POP" AND "RETURN" STATEMENTS
00.0005CAr 2               ; ----------------------------------------------------------------------------
00.0005CAr 2               POP:
00.0005CAr 2  D0 FD                bne     L281E
00.0005CCr 2  A9 FF                lda     #$FF
00.0005CEr 2               .ifdef CONFIG_2A
00.0005CEr 2                       sta     FORPNT+1 ; bugfix, wrong in AppleSoft II
00.0005CEr 2               .else
00.0005CEr 2  85 96                sta     FORPNT
00.0005D0r 2               .endif
00.0005D0r 2  20 rr rr             jsr     GTFORPNT
00.0005D3r 2  9A                   txs
00.0005D4r 2  C9 8C                cmp     #TOKEN_GOSUB
00.0005D6r 2  F0 0B                beq     RETURN
00.0005D8r 2  A2 16                ldx     #ERR_NOGOSUB
00.0005DAr 2  2C                   .byte   $2C
00.0005DBr 2               UNDERR:
00.0005DBr 2  A2 5A                ldx     #ERR_UNDEFSTAT
00.0005DDr 2  4C rr rr             jmp     ERROR
00.0005E0r 2               ; ----------------------------------------------------------------------------
00.0005E0r 2               SYNERR2:
00.0005E0r 2  4C rr rr             jmp     SYNERR
00.0005E3r 2               ; ----------------------------------------------------------------------------
00.0005E3r 2               RETURN:
00.0005E3r 2  68                   pla
00.0005E4r 2  68                   pla
00.0005E5r 2  85 86                sta     CURLIN
00.0005E7r 2  68                   pla
00.0005E8r 2  85 87                sta     CURLIN+1
00.0005EAr 2  68                   pla
00.0005EBr 2  85 C7                sta     TXTPTR
00.0005EDr 2  68                   pla
00.0005EEr 2  85 C8                sta     TXTPTR+1
00.0005F0r 2               
00.0005F0r 2               ; ----------------------------------------------------------------------------
00.0005F0r 2               ; "DATA" STATEMENT
00.0005F0r 2               ; EXECUTED BY SKIPPING TO NEXT COLON OR EOL
00.0005F0r 2               ; ----------------------------------------------------------------------------
00.0005F0r 2               DATA:
00.0005F0r 2  20 rr rr             jsr     DATAN
00.0005F3r 2               
00.0005F3r 2               ; ----------------------------------------------------------------------------
00.0005F3r 2               ; ADD (Y) TO TXTPTR
00.0005F3r 2               ; ----------------------------------------------------------------------------
00.0005F3r 2               ADDON:
00.0005F3r 2  98                   tya
00.0005F4r 2  18                   clc
00.0005F5r 2  65 C7                adc     TXTPTR
00.0005F7r 2  85 C7                sta     TXTPTR
00.0005F9r 2  90 02                bcc     L2852
00.0005FBr 2  E6 C8                inc     TXTPTR+1
00.0005FDr 2               L2852:
00.0005FDr 2  60                   rts
00.0005FEr 2               
00.0005FEr 2               ; ----------------------------------------------------------------------------
00.0005FEr 2               ; SCAN AHEAD TO NEXT ":" OR EOL
00.0005FEr 2               ; ----------------------------------------------------------------------------
00.0005FEr 2               DATAN:
00.0005FEr 2  A2 3A                ldx     #$3A
00.000600r 2  2C                   .byte   $2C
00.000601r 2               REMN:
00.000601r 2  A2 00                ldx     #$00
00.000603r 2  86 0A                stx     CHARAC
00.000605r 2  A0 00                ldy     #$00
00.000607r 2  84 0B                sty     ENDCHR
00.000609r 2               L285E:
00.000609r 2  A5 0B                lda     ENDCHR
00.00060Br 2  A6 0A                ldx     CHARAC
00.00060Dr 2  85 0A                sta     CHARAC
00.00060Fr 2  86 0B                stx     ENDCHR
00.000611r 2               L2866:
00.000611r 2  B1 C7                lda     (TXTPTR),y
00.000613r 2  F0 E8                beq     L2852
00.000615r 2  C5 0B                cmp     ENDCHR
00.000617r 2  F0 E4                beq     L2852
00.000619r 2  C8                   iny
00.00061Ar 2  C9 22                cmp     #$22
00.00061Cr 2               .ifndef CONFIG_11
00.00061Cr 2                       beq     L285E; old: swap & cont is faster
00.00061Cr 2                       bne     L2866
00.00061Cr 2               .else
00.00061Cr 2  D0 F3                bne     L2866; new: cont is faster
00.00061Er 2  F0 E9                beq     L285E
00.000620r 2               .endif
00.000620r 2               
00.000620r 2               ; ----------------------------------------------------------------------------
00.000620r 2               ; "IF" STATEMENT
00.000620r 2               ; ----------------------------------------------------------------------------
00.000620r 2               IF:
00.000620r 2  20 rr rr             jsr     FRMEVL
00.000623r 2  20 C6 00             jsr     CHRGOT
00.000626r 2  C9 88                cmp     #TOKEN_GOTO
00.000628r 2  F0 05                beq     L2884
00.00062Ar 2  A9 A1                lda     #TOKEN_THEN
00.00062Cr 2  20 rr rr             jsr     SYNCHR
00.00062Fr 2               L2884:
00.00062Fr 2  A5 AE                lda     FAC
00.000631r 2  D0 05                bne     L288D
00.000633r 2               
00.000633r 2               ; ----------------------------------------------------------------------------
00.000633r 2               ; "REM" STATEMENT, OR FALSE "IF" STATEMENT
00.000633r 2               ; ----------------------------------------------------------------------------
00.000633r 2               REM:
00.000633r 2  20 rr rr             jsr     REMN
00.000636r 2  F0 BB                beq     ADDON
00.000638r 2               L288D:
00.000638r 2  20 C6 00             jsr     CHRGOT
00.00063Br 2  B0 03                bcs     L2895
00.00063Dr 2  4C rr rr             jmp     GOTO
00.000640r 2               L2895:
00.000640r 2  4C rr rr             jmp     EXECUTE_STATEMENT
00.000643r 2               
00.000643r 2               ; ----------------------------------------------------------------------------
00.000643r 2               ; "ON" STATEMENT
00.000643r 2               ;
00.000643r 2               ; ON <EXP> GOTO <LIST>
00.000643r 2               ; ON <EXP> GOSUB <LIST>
00.000643r 2               ; ----------------------------------------------------------------------------
00.000643r 2               ON:
00.000643r 2  20 rr rr             jsr     GETBYT
00.000646r 2  48                   pha
00.000647r 2  C9 8C                cmp     #TOKEN_GOSUB
00.000649r 2  F0 04                beq     L28A4
00.00064Br 2               L28A0:
00.00064Br 2  C9 88                cmp     #TOKEN_GOTO
00.00064Dr 2  D0 91                bne     SYNERR2
00.00064Fr 2               L28A4:
00.00064Fr 2  C6 B2                dec     FAC_LAST
00.000651r 2  D0 04                bne     L28AC
00.000653r 2  68                   pla
00.000654r 2  4C rr rr             jmp     EXECUTE_STATEMENT1
00.000657r 2               L28AC:
00.000657r 2  20 C0 00             jsr     CHRGET
00.00065Ar 2  20 rr rr             jsr     LINGET
00.00065Dr 2  C9 2C                cmp     #$2C
00.00065Fr 2  F0 EE                beq     L28A4
00.000661r 2  68                   pla
00.000662r 2               L28B7:
00.000662r 2  60                   rts
00.000663r 2               
00.000663r 1               .include "misc1.s"
00.000663r 2               .segment "CODE"
00.000663r 2               
00.000663r 2               ; ----------------------------------------------------------------------------
00.000663r 2               ; CONVERT LINE NUMBER
00.000663r 2               ; ----------------------------------------------------------------------------
00.000663r 2               LINGET:
00.000663r 2  A2 00                ldx     #$00
00.000665r 2  86 19                stx     LINNUM
00.000667r 2  86 1A                stx     LINNUM+1
00.000669r 2               L28BE:
00.000669r 2  B0 F7                bcs     L28B7
00.00066Br 2  E9 2F                sbc     #$2F
00.00066Dr 2  85 0A                sta     CHARAC
00.00066Fr 2  A5 1A                lda     LINNUM+1
00.000671r 2  85 6F                sta     INDEX
00.000673r 2  C9 19                cmp     #$19
00.000675r 2  B0 D4                bcs     L28A0
00.000677r 2               ; <<<<<DANGEROUS CODE>>>>>
00.000677r 2               ; NOTE THAT IF (A) = $AB ON THE LINE ABOVE,
00.000677r 2               ; ON.1 WILL COMPARE = AND CAUSE A CATASTROPHIC
00.000677r 2               ; JUMP TO $22D9 (FOR GOTO), OR OTHER LOCATIONS
00.000677r 2               ; FOR OTHER CALLS TO LINGET.
00.000677r 2               ;
00.000677r 2               ; YOU CAN SEE THIS IS YOU FIRST PUT "BRK" IN $22D9,
00.000677r 2               ; THEN TYPE "GO TO 437761".
00.000677r 2               ;
00.000677r 2               ; ANY VALUE FROM 437760 THROUGH 440319 WILL CAUSE
00.000677r 2               ; THE PROBLEM.  ($AB00 - $ABFF)
00.000677r 2               ; <<<<<DANGEROUS CODE>>>>>
00.000677r 2  A5 19                lda     LINNUM
00.000679r 2  0A                   asl     a
00.00067Ar 2  26 6F                rol     INDEX
00.00067Cr 2  0A                   asl     a
00.00067Dr 2  26 6F                rol     INDEX
00.00067Fr 2  65 19                adc     LINNUM
00.000681r 2  85 19                sta     LINNUM
00.000683r 2  A5 6F                lda     INDEX
00.000685r 2  65 1A                adc     LINNUM+1
00.000687r 2  85 1A                sta     LINNUM+1
00.000689r 2  06 19                asl     LINNUM
00.00068Br 2  26 1A                rol     LINNUM+1
00.00068Dr 2  A5 19                lda     LINNUM
00.00068Fr 2  65 0A                adc     CHARAC
00.000691r 2  85 19                sta     LINNUM
00.000693r 2  90 02                bcc     L28EC
00.000695r 2  E6 1A                inc     LINNUM+1
00.000697r 2               L28EC:
00.000697r 2  20 C0 00             jsr     CHRGET
00.00069Ar 2  4C rr rr             jmp     L28BE
00.00069Dr 2               
00.00069Dr 2               ; ----------------------------------------------------------------------------
00.00069Dr 2               ; "LET" STATEMENT
00.00069Dr 2               ;
00.00069Dr 2               ; LET <VAR> = <EXP>
00.00069Dr 2               ; <VAR> = <EXP>
00.00069Dr 2               ; ----------------------------------------------------------------------------
00.00069Dr 2               LET:
00.00069Dr 2  20 rr rr             jsr     PTRGET
00.0006A0r 2  85 96                sta     FORPNT
00.0006A2r 2  84 97                sty     FORPNT+1
00.0006A4r 2  A9 AC                lda     #TOKEN_EQUAL
00.0006A6r 2  20 rr rr             jsr     SYNCHR
00.0006A9r 2               .ifndef CONFIG_SMALL
00.0006A9r 2  A5 0F                lda     VALTYP+1
00.0006ABr 2  48                   pha
00.0006ACr 2               .endif
00.0006ACr 2  A5 0E                lda     VALTYP
00.0006AEr 2  48                   pha
00.0006AFr 2  20 rr rr             jsr     FRMEVL
00.0006B2r 2  68                   pla
00.0006B3r 2  2A                   rol     a
00.0006B4r 2  20 rr rr             jsr     CHKVAL
00.0006B7r 2  D0 18                bne     LETSTRING
00.0006B9r 2               .ifndef CONFIG_SMALL
00.0006B9r 2  68                   pla
00.0006BAr 2               LET2:
00.0006BAr 2  10 12                bpl     L2923
00.0006BCr 2  20 rr rr             jsr     ROUND_FAC
00.0006BFr 2  20 rr rr             jsr     AYINT
00.0006C2r 2  A0 00                ldy     #$00
00.0006C4r 2  A5 B1                lda     FAC+3
00.0006C6r 2  91 96                sta     (FORPNT),y
00.0006C8r 2  C8                   iny
00.0006C9r 2  A5 B2                lda     FAC+4
00.0006CBr 2  91 96                sta     (FORPNT),y
00.0006CDr 2  60                   rts
00.0006CEr 2               L2923:
00.0006CEr 2               .endif
00.0006CEr 2               
00.0006CEr 2               ; ----------------------------------------------------------------------------
00.0006CEr 2               ; REAL VARIABLE = EXPRESSION
00.0006CEr 2               ; ----------------------------------------------------------------------------
00.0006CEr 2  4C rr rr             jmp     SETFOR
00.0006D1r 2               LETSTRING:
00.0006D1r 2               .ifndef CONFIG_SMALL
00.0006D1r 2  68                   pla
00.0006D2r 2               .endif
00.0006D2r 2               
00.0006D2r 2               ; ----------------------------------------------------------------------------
00.0006D2r 2               ; INSTALL STRING, DESCRIPTOR ADDRESS IS AT FAC+3,4
00.0006D2r 2               ; ----------------------------------------------------------------------------
00.0006D2r 2               PUTSTR:
00.0006D2r 2               .ifdef CONFIG_CBM_ALL
00.0006D2r 2                       ldy     FORPNT+1
00.0006D2r 2                 .ifdef CBM1
00.0006D2r 2                       cpy     #$D0	; TI$
00.0006D2r 2                 .else
00.0006D2r 2                       cpy     #$DE
00.0006D2r 2                 .endif
00.0006D2r 2                       bne     LC92B
00.0006D2r 2                       jsr     FREFAC
00.0006D2r 2                       cmp     #$06
00.0006D2r 2                 .ifdef CBM2
00.0006D2r 2                       bne     IQERR1
00.0006D2r 2                 .else
00.0006D2r 2                       jne     IQERR
00.0006D2r 2                 .endif
00.0006D2r 2                       ldy     #$00
00.0006D2r 2                       sty     FAC
00.0006D2r 2                       sty     FACSIGN
00.0006D2r 2               LC8E8:
00.0006D2r 2                       sty     STRNG2
00.0006D2r 2                       jsr     LC91C
00.0006D2r 2                       jsr     MUL10
00.0006D2r 2                       inc     STRNG2
00.0006D2r 2                       ldy     STRNG2
00.0006D2r 2                       jsr     LC91C
00.0006D2r 2                       jsr     COPY_FAC_TO_ARG_ROUNDED
00.0006D2r 2                       tax
00.0006D2r 2                       beq     LC902
00.0006D2r 2                       inx
00.0006D2r 2                       txa
00.0006D2r 2                       jsr     LD9BF
00.0006D2r 2               LC902:
00.0006D2r 2                       ldy     STRNG2
00.0006D2r 2                       iny
00.0006D2r 2                       cpy     #$06
00.0006D2r 2                       bne     LC8E8
00.0006D2r 2                       jsr     MUL10
00.0006D2r 2                       jsr     QINT
00.0006D2r 2                       ldx     #$02
00.0006D2r 2                       sei
00.0006D2r 2               LC912:
00.0006D2r 2                       lda     FAC+2,x
00.0006D2r 2                       sta     TISTR,x
00.0006D2r 2                       dex
00.0006D2r 2                       bpl     LC912
00.0006D2r 2                       cli
00.0006D2r 2                       rts
00.0006D2r 2               LC91C:
00.0006D2r 2                       lda     (INDEX),y
00.0006D2r 2                       jsr     CHRGOT2
00.0006D2r 2                       bcc     LC926
00.0006D2r 2               IQERR1:
00.0006D2r 2                       jmp     IQERR
00.0006D2r 2               LC926:
00.0006D2r 2                       sbc     #$2F
00.0006D2r 2                       jmp     ADDACC
00.0006D2r 2               LC92B:
00.0006D2r 2               .endif
00.0006D2r 2  A0 02                ldy     #$02
00.0006D4r 2  B1 B1                lda     (FAC_LAST-1),y
00.0006D6r 2  C5 81                cmp     FRETOP+1
00.0006D8r 2  90 17                bcc     L2946
00.0006DAr 2  D0 07                bne     L2938
00.0006DCr 2  88                   dey
00.0006DDr 2  B1 B1                lda     (FAC_LAST-1),y
00.0006DFr 2  C5 80                cmp     FRETOP
00.0006E1r 2  90 0E                bcc     L2946
00.0006E3r 2               L2938:
00.0006E3r 2  A4 B2                ldy     FAC_LAST
00.0006E5r 2  C4 7B                cpy     VARTAB+1
00.0006E7r 2  90 08                bcc     L2946
00.0006E9r 2  D0 0D                bne     L294D
00.0006EBr 2  A5 B1                lda     FAC_LAST-1
00.0006EDr 2  C5 7A                cmp     VARTAB
00.0006EFr 2  B0 07                bcs     L294D
00.0006F1r 2               L2946:
00.0006F1r 2  A5 B1                lda     FAC_LAST-1
00.0006F3r 2  A4 B2                ldy     FAC_LAST
00.0006F5r 2  4C rr rr             jmp     L2963
00.0006F8r 2               L294D:
00.0006F8r 2  A0 00                ldy     #$00
00.0006FAr 2  B1 B1                lda     (FAC_LAST-1),y
00.0006FCr 2  20 rr rr             jsr     STRINI
00.0006FFr 2  A5 9D                lda     DSCPTR
00.000701r 2  A4 9E                ldy     DSCPTR+1
00.000703r 2  85 BC                sta     STRNG1
00.000705r 2  84 BD                sty     STRNG1+1
00.000707r 2  20 rr rr             jsr     MOVINS
00.00070Ar 2  A9 AE                lda     #FAC
00.00070Cr 2  A0 00                ldy     #$00
00.00070Er 2               L2963:
00.00070Er 2  85 9D                sta     DSCPTR
00.000710r 2  84 9E                sty     DSCPTR+1
00.000712r 2  20 rr rr             jsr     FRETMS
00.000715r 2  A0 00                ldy     #$00
00.000717r 2  B1 9D                lda     (DSCPTR),y
00.000719r 2  91 96                sta     (FORPNT),y
00.00071Br 2  C8                   iny
00.00071Cr 2  B1 9D                lda     (DSCPTR),y
00.00071Er 2  91 96                sta     (FORPNT),y
00.000720r 2  C8                   iny
00.000721r 2  B1 9D                lda     (DSCPTR),y
00.000723r 2  91 96                sta     (FORPNT),y
00.000725r 2  60                   rts
00.000726r 2               .ifdef CONFIG_FILE
00.000726r 2               PRINTH:
00.000726r 2                       jsr     CMD
00.000726r 2                       jmp     LCAD6
00.000726r 2               CMD:
00.000726r 2                       jsr     GETBYT
00.000726r 2                       beq     LC98F
00.000726r 2                       lda     #$2C
00.000726r 2                       jsr     SYNCHR
00.000726r 2               LC98F:
00.000726r 2                       php
00.000726r 2                       jsr     CHKOUT
00.000726r 2                       stx     CURDVC
00.000726r 2                       plp
00.000726r 2                       jmp     PRINT
00.000726r 2               .endif
00.000726r 2               
00.000726r 2               
00.000726r 1               .include "print.s"
00.000726r 2               .segment "CODE"
00.000726r 2               
00.000726r 2               PRSTRING:
00.000726r 2  20 rr rr             jsr     STRPRT
00.000729r 2               L297E:
00.000729r 2  20 C6 00             jsr     CHRGOT
00.00072Cr 2               
00.00072Cr 2               ; ----------------------------------------------------------------------------
00.00072Cr 2               ; "PRINT" STATEMENT
00.00072Cr 2               ; ----------------------------------------------------------------------------
00.00072Cr 2               PRINT:
00.00072Cr 2  F0 3C                beq     CRDO
00.00072Er 2               PRINT2:
00.00072Er 2  F0 58                beq     L29DD
00.000730r 2  C9 9D                cmp     #TOKEN_TAB
00.000732r 2  F0 6C                beq     L29F5
00.000734r 2  C9 A0                cmp     #TOKEN_SPC
00.000736r 2               .ifdef CONFIG_2
00.000736r 2                       clc	; also AppleSoft II
00.000736r 2               .endif
00.000736r 2  F0 68                beq     L29F5
00.000738r 2  C9 2C                cmp     #','
00.00073Ar 2               ; Pre-KIM had no CLC. KIM added the CLC
00.00073Ar 2               ; here. Post-KIM moved the CLC up...
00.00073Ar 2               ; (makes no sense on KIM, liveness = 0)
00.00073Ar 2               .if .def(CONFIG_11A) && (!.def(CONFIG_2))
00.00073Ar 2  18                   clc
00.00073Br 2               .endif
00.00073Br 2  F0 4C                beq     L29DE
00.00073Dr 2  C9 3B                cmp     #$3B
00.00073Fr 2  F0 77                beq     L2A0D
00.000741r 2  20 rr rr             jsr     FRMEVL
00.000744r 2  24 0E                bit     VALTYP
00.000746r 2  30 DE                bmi     PRSTRING
00.000748r 2  20 rr rr             jsr     FOUT
00.00074Br 2  20 rr rr             jsr     STRLIT
00.00074Er 2               .ifndef CONFIG_NO_CR
00.00074Er 2  A0 00                ldy     #$00
00.000750r 2  B1 B1                lda     (FAC_LAST-1),y
00.000752r 2  18                   clc
00.000753r 2  65 16                adc     POSX
00.000755r 2                 .ifdef KBD
00.000755r 2                       cmp     #$28
00.000755r 2                 .else
00.000755r 2  C5 17                cmp     Z17
00.000757r 2                 .endif
00.000757r 2  90 03                bcc     L29B1
00.000759r 2  20 rr rr             jsr     CRDO
00.00075Cr 2               L29B1:
00.00075Cr 2               .endif
00.00075Cr 2  20 rr rr             jsr     STRPRT
00.00075Fr 2               .ifdef KBD
00.00075Fr 2                       jmp     L297E
00.00075Fr 2               .else
00.00075Fr 2  20 rr rr             jsr     OUTSP
00.000762r 2  D0 C5                bne     L297E ; branch always
00.000764r 2               .endif
00.000764r 2               
00.000764r 2               .ifdef KBD
00.000764r 2               ; PATCHES
00.000764r 2               LE86C:
00.000764r 2                       pla
00.000764r 2                       jmp     CONTROL_C_TYPED
00.000764r 2               LE870:
00.000764r 2                       jsr     GETBYT
00.000764r 2                       txa
00.000764r 2               LE874:
00.000764r 2                       beq     LE878
00.000764r 2                       bpl     LE8F2
00.000764r 2               LE878:
00.000764r 2                       jmp     IQERR
00.000764r 2               ; PATCHES
00.000764r 2               .endif
00.000764r 2               
00.000764r 2               
00.000764r 2               
00.000764r 2               .ifndef KBD
00.000764r 2               L29B9:
00.000764r 2                 .ifdef CBM2
00.000764r 2                       lda     #$00
00.000764r 2                       sta     INPUTBUFFER,x
00.000764r 2                       ldx     #<(INPUTBUFFER-1)
00.000764r 2                       ldy     #>(INPUTBUFFER-1)
00.000764r 2                 .else
00.000764r 2                   .ifndef APPLE
00.000764r 2  A0 00                ldy     #$00
00.000766r 2  94 1B                sty     INPUTBUFFER,x
00.000768r 2  A2 1A                ldx     #LINNUM+1
00.00076Ar 2                   .endif
00.00076Ar 2                   .ifdef MICROTAN
00.00076Ar 2                       bne     CRDO2
00.00076Ar 2               	.endif
00.00076Ar 2                 .endif
00.00076Ar 2                 .ifdef CONFIG_FILE
00.00076Ar 2                       lda     CURDVC
00.00076Ar 2                       bne     L29DD
00.00076Ar 2                 .endif
00.00076Ar 2               .endif
00.00076Ar 2               
00.00076Ar 2               
00.00076Ar 2               CRDO:
00.00076Ar 2               .if .def(CONFIG_PRINTNULLS) && .def(CONFIG_FILE)
00.00076Ar 2                       lda     CURDVC
00.00076Ar 2                       bne     LC9D8
00.00076Ar 2                       sta     POSX
00.00076Ar 2               LC9D8:
00.00076Ar 2               .endif
00.00076Ar 2  A9 0D                lda     #CRLF_1
00.00076Cr 2               .ifndef CONFIG_CBM_ALL
00.00076Cr 2  85 16                sta     POSX
00.00076Er 2               .endif
00.00076Er 2  20 rr rr             jsr     OUTDO
00.000771r 2               CRDO2:
00.000771r 2  A9 0A                lda     #CRLF_2
00.000773r 2  20 rr rr             jsr     OUTDO
00.000776r 2               
00.000776r 2               PRINTNULLS:
00.000776r 2               .ifdef KBD
00.000776r 2                       lda     #$00
00.000776r 2                       sta     POSX
00.000776r 2                       eor     #$FF
00.000776r 2               .else
00.000776r 2                 .if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS)
00.000776r 2                   .ifdef CONFIG_FILE
00.000776r 2                   ; Although there is no statement for it,
00.000776r 2                   ; CBM1 had NULL support and ignores
00.000776r 2                   ; it when not targeting the screen,
00.000776r 2                   ; CBM2 dropped it completely.
00.000776r 2                       lda     CURDVC
00.000776r 2                       bne     L29DD
00.000776r 2                   .endif
00.000776r 2  8A                   txa
00.000777r 2  48                   pha
00.000778r 2  A6 15                ldx     Z15
00.00077Ar 2  F0 08                beq     L29D9
00.00077Cr 2  A9 00                lda     #$00
00.00077Er 2               L29D3:
00.00077Er 2  20 rr rr             jsr     OUTDO
00.000781r 2  CA                   dex
00.000782r 2  D0 FA                bne     L29D3
00.000784r 2               L29D9:
00.000784r 2  86 16                stx     POSX
00.000786r 2  68                   pla
00.000787r 2  AA                   tax
00.000788r 2                 .else
00.000788r 2                   .ifndef CONFIG_2
00.000788r 2                       lda     #$00
00.000788r 2                       sta     POSX
00.000788r 2                   .endif
00.000788r 2                       eor     #$FF
00.000788r 2                 .endif
00.000788r 2               .endif
00.000788r 2               L29DD:
00.000788r 2  60                   rts
00.000789r 2               L29DE:
00.000789r 2  A5 16                lda     POSX
00.00078Br 2               .ifndef CONFIG_NO_CR
00.00078Br 2                 .ifdef KBD
00.00078Br 2                       cmp     #$1A
00.00078Br 2                 .else
00.00078Br 2  C5 18                cmp     Z18
00.00078Dr 2                 .endif
00.00078Dr 2  90 06                bcc     L29EA
00.00078Fr 2  20 rr rr             jsr     CRDO
00.000792r 2  4C rr rr             jmp     L2A0D
00.000795r 2               L29EA:
00.000795r 2               .endif
00.000795r 2  38                   sec
00.000796r 2               L29EB:
00.000796r 2               .ifdef CONFIG_CBM_ALL
00.000796r 2                       sbc     #$0A
00.000796r 2               .else
00.000796r 2                 .ifdef KBD
00.000796r 2                       sbc     #$0D
00.000796r 2                 .else
00.000796r 2  E9 0E                sbc     #$0E
00.000798r 2                 .endif
00.000798r 2               .endif
00.000798r 2  B0 FC                bcs     L29EB
00.00079Ar 2  49 FF                eor     #$FF
00.00079Cr 2  69 01                adc     #$01
00.00079Er 2  D0 13                bne     L2A08
00.0007A0r 2               L29F5:
00.0007A0r 2               .ifdef CONFIG_11A
00.0007A0r 2  08                   php
00.0007A1r 2               .else
00.0007A1r 2                       pha
00.0007A1r 2               .endif
00.0007A1r 2  20 rr rr             jsr     GTBYTC
00.0007A4r 2  C9 29                cmp     #')'
00.0007A6r 2               .ifdef CONFIG_11A
00.0007A6r 2                 .ifdef CONFIG_2
00.0007A6r 2                       bne     SYNERR4
00.0007A6r 2                 .else
00.0007A6r 2  F0 03 4C rr          jne     SYNERR
00.0007AAr 2  rr           
00.0007ABr 2                 .endif
00.0007ABr 2  28                   plp
00.0007ACr 2  90 06                bcc     L2A09
00.0007AEr 2               .else
00.0007AEr 2                 .ifdef CONFIG_11
00.0007AEr 2                       jne     SYNERR
00.0007AEr 2                 .else
00.0007AEr 2                       bne     SYNERR4
00.0007AEr 2                 .endif
00.0007AEr 2                       pla
00.0007AEr 2                       cmp     #TOKEN_TAB
00.0007AEr 2                 .ifdef CONFIG_11
00.0007AEr 2                       bne     L2A09
00.0007AEr 2                 .else
00.0007AEr 2                       bne     L2A0A
00.0007AEr 2                 .endif
00.0007AEr 2               .endif
00.0007AEr 2  8A                   txa
00.0007AFr 2  E5 16                sbc     POSX
00.0007B1r 2  90 05                bcc     L2A0D
00.0007B3r 2               .ifndef CONFIG_11
00.0007B3r 2                       beq     L2A0D
00.0007B3r 2               .endif
00.0007B3r 2               L2A08:
00.0007B3r 2  AA                   tax
00.0007B4r 2               .ifdef CONFIG_11
00.0007B4r 2               L2A09:
00.0007B4r 2  E8                   inx
00.0007B5r 2               .endif
00.0007B5r 2               L2A0A:
00.0007B5r 2               .ifndef CONFIG_11
00.0007B5r 2                       jsr     OUTSP
00.0007B5r 2               .endif
00.0007B5r 2  CA                   dex
00.0007B6r 2               .ifndef CONFIG_11
00.0007B6r 2                       bne     L2A0A
00.0007B6r 2               .else
00.0007B6r 2  D0 06                bne     L2A13
00.0007B8r 2               .endif
00.0007B8r 2               L2A0D:
00.0007B8r 2  20 C0 00             jsr     CHRGET
00.0007BBr 2  4C rr rr             jmp     PRINT2
00.0007BEr 2               .ifdef CONFIG_11
00.0007BEr 2               L2A13:
00.0007BEr 2  20 rr rr             jsr     OUTSP
00.0007C1r 2  D0 F2                bne     L2A0A
00.0007C3r 2               .endif
00.0007C3r 2               
00.0007C3r 2               ; ----------------------------------------------------------------------------
00.0007C3r 2               ; PRINT STRING AT (Y,A)
00.0007C3r 2               ; ----------------------------------------------------------------------------
00.0007C3r 2               STROUT:
00.0007C3r 2  20 rr rr             jsr     STRLIT
00.0007C6r 2               
00.0007C6r 2               ; ----------------------------------------------------------------------------
00.0007C6r 2               ; PRINT STRING AT (FACMO,FACLO)
00.0007C6r 2               ; ----------------------------------------------------------------------------
00.0007C6r 2               STRPRT:
00.0007C6r 2  20 rr rr             jsr     FREFAC
00.0007C9r 2  AA                   tax
00.0007CAr 2  A0 00                ldy     #$00
00.0007CCr 2  E8                   inx
00.0007CDr 2               L2A22:
00.0007CDr 2  CA                   dex
00.0007CEr 2  F0 B8                beq     L29DD
00.0007D0r 2  B1 6F                lda     (INDEX),y
00.0007D2r 2  20 rr rr             jsr     OUTDO
00.0007D5r 2  C8                   iny
00.0007D6r 2  C9 0D                cmp     #$0D
00.0007D8r 2  D0 F3                bne     L2A22
00.0007DAr 2  20 rr rr             jsr     PRINTNULLS
00.0007DDr 2  4C rr rr             jmp     L2A22
00.0007E0r 2               ; ----------------------------------------------------------------------------
00.0007E0r 2               OUTSP:
00.0007E0r 2               .ifdef CONFIG_FILE
00.0007E0r 2                 .ifndef CBM1
00.0007E0r 2               ; on non-screen devices, print SPACE
00.0007E0r 2               ; instead of CRSR RIGHT
00.0007E0r 2                       lda     CURDVC
00.0007E0r 2                       beq     LCA40
00.0007E0r 2                       lda     #$20
00.0007E0r 2                       .byte   $2C
00.0007E0r 2               LCA40:
00.0007E0r 2                 .endif
00.0007E0r 2                       lda     #$1D ; CRSR RIGHT
00.0007E0r 2               .else
00.0007E0r 2  A9 20                lda     #$20
00.0007E2r 2               .endif
00.0007E2r 2  2C                   .byte   $2C
00.0007E3r 2               OUTQUES:
00.0007E3r 2  A9 3F                lda     #$3F
00.0007E5r 2               
00.0007E5r 2               ; ----------------------------------------------------------------------------
00.0007E5r 2               ; PRINT CHAR FROM (A)
00.0007E5r 2               ; ----------------------------------------------------------------------------
00.0007E5r 2               OUTDO:
00.0007E5r 2               .ifndef KBD
00.0007E5r 2  24 14                bit     Z14
00.0007E7r 2  30 18                bmi     L2A56
00.0007E9r 2               .endif
00.0007E9r 2               .if .def(CONFIG_PRINT_CR) || .def(CBM1)
00.0007E9r 2               ; Commodore forgot to remove this in CBM1
00.0007E9r 2  48                   pha
00.0007EAr 2               .endif
00.0007EAr 2               .ifdef CBM1
00.0007EAr 2                       cmp     #$1D ; CRSR RIGHT
00.0007EAr 2                       beq     LCA6A
00.0007EAr 2                       cmp     #$9D ; CRSR LEFT
00.0007EAr 2                       beq     LCA5A
00.0007EAr 2                       cmp     #$14 ; DEL
00.0007EAr 2                       bne     LCA64
00.0007EAr 2               LCA5A:
00.0007EAr 2                       lda     POSX
00.0007EAr 2                       beq     L2A4E
00.0007EAr 2                       lda     CURDVC
00.0007EAr 2                       bne     L2A4E
00.0007EAr 2                       dec     POSX
00.0007EAr 2               LCA64:
00.0007EAr 2                       and     #$7F
00.0007EAr 2               .endif
00.0007EAr 2               .ifndef CBM2
00.0007EAr 2  C9 20                cmp     #$20
00.0007ECr 2  90 0B                bcc     L2A4E
00.0007EEr 2               .endif
00.0007EEr 2               LCA6A:
00.0007EEr 2               .ifdef CONFIG_CBM1_PATCHES
00.0007EEr 2                       lda     CURDVC
00.0007EEr 2                       jsr     PATCH6
00.0007EEr 2                       nop
00.0007EEr 2               .endif
00.0007EEr 2               .ifdef CONFIG_PRINT_CR
00.0007EEr 2  A5 16                lda     POSX
00.0007F0r 2  C5 17                cmp     Z17
00.0007F2r 2  D0 03                bne     L2A4C
00.0007F4r 2                 .ifdef APPLE
00.0007F4r 2                       nop ; PATCH!
00.0007F4r 2                       nop ; don't print CR
00.0007F4r 2                       nop
00.0007F4r 2                 .else
00.0007F4r 2  20 rr rr             jsr     CRDO
00.0007F7r 2                 .endif
00.0007F7r 2               L2A4C:
00.0007F7r 2               .endif
00.0007F7r 2               .ifndef CONFIG_CBM_ALL
00.0007F7r 2  E6 16                inc     POSX
00.0007F9r 2               .endif
00.0007F9r 2               L2A4E:
00.0007F9r 2               .if .def(CONFIG_PRINT_CR) || .def(CBM1)
00.0007F9r 2               ; Commodore forgot to remove this in CBM1
00.0007F9r 2  68                   pla
00.0007FAr 2               .endif
00.0007FAr 2               .ifdef CONFIG_MONCOUT_DESTROYS_Y
00.0007FAr 2  84 0D                sty     DIMFLG
00.0007FCr 2               .endif
00.0007FCr 2               .ifdef CONFIG_IO_MSB
00.0007FCr 2                       ora     #$80
00.0007FCr 2               .endif
00.0007FCr 2  20 A0 1E             jsr     MONCOUT
00.0007FFr 2               .ifdef CONFIG_IO_MSB
00.0007FFr 2                       and     #$7F
00.0007FFr 2               .endif
00.0007FFr 2               .ifdef CONFIG_MONCOUT_DESTROYS_Y
00.0007FFr 2  A4 0D                ldy     DIMFLG
00.000801r 2               .endif
00.000801r 2               .ifdef OSI
00.000801r 2                       nop
00.000801r 2                       nop
00.000801r 2                       nop
00.000801r 2                       nop
00.000801r 2               .endif
00.000801r 2               L2A56:
00.000801r 2  29 FF                and     #$FF
00.000803r 2               LE8F2:
00.000803r 2  60                   rts
00.000804r 2               
00.000804r 2               ; ----------------------------------------------------------------------------
00.000804r 2               ; ???
00.000804r 2               ; ----------------------------------------------------------------------------
00.000804r 2               .ifdef KBD
00.000804r 2               LE8F3:
00.000804r 2                       pha
00.000804r 2                       lda     $047F
00.000804r 2                       clc
00.000804r 2                       beq     LE900
00.000804r 2                       lda     #$00
00.000804r 2                       sta     $047F
00.000804r 2                       sec
00.000804r 2               LE900:
00.000804r 2                       pla
00.000804r 2                       rts
00.000804r 2               .endif
00.000804r 2               
00.000804r 1               .include "input.s"
00.000804r 2               .segment "CODE"
00.000804r 2               
00.000804r 2               ; ----------------------------------------------------------------------------
00.000804r 2               ; INPUT CONVERSION ERROR:  ILLEGAL CHARACTER
00.000804r 2               ; IN NUMERIC FIELD.  MUST DISTINGUISH
00.000804r 2               ; BETWEEN INPUT, READ, AND GET
00.000804r 2               ; ----------------------------------------------------------------------------
00.000804r 2               INPUTERR:
00.000804r 2  A5 12                lda     INPUTFLG
00.000806r 2  F0 11                beq     RESPERR	; INPUT
00.000808r 2               .ifndef CONFIG_SMALL
00.000808r 2               .ifdef CONFIG_10A
00.000808r 2               ; without this, it treats GET errors
00.000808r 2               ; like READ errors
00.000808r 2  30 04                bmi     L2A63	; READ
00.00080Ar 2  A0 FF                ldy     #$FF	; GET
00.00080Cr 2  D0 04                bne     L2A67
00.00080Er 2               L2A63:
00.00080Er 2               .endif
00.00080Er 2               .endif
00.00080Er 2               .ifdef CONFIG_CBM1_PATCHES
00.00080Er 2                       jsr     PATCH5
00.00080Er 2               		nop
00.00080Er 2               .else
00.00080Er 2  A5 8C                lda     Z8C
00.000810r 2  A4 8D                ldy     Z8C+1
00.000812r 2               .endif
00.000812r 2               L2A67:
00.000812r 2  85 86                sta     CURLIN
00.000814r 2  84 87                sty     CURLIN+1
00.000816r 2               SYNERR4:
00.000816r 2  4C rr rr             jmp     SYNERR
00.000819r 2               RESPERR:
00.000819r 2               .ifdef CONFIG_FILE
00.000819r 2                       lda     CURDVC
00.000819r 2                       beq     LCA8F
00.000819r 2                       ldx     #ERR_BADDATA
00.000819r 2                       jmp     ERROR
00.000819r 2               LCA8F:
00.000819r 2               .endif
00.000819r 2  A9 rr                lda     #<ERRREENTRY
00.00081Br 2  A0 rr                ldy     #>ERRREENTRY
00.00081Dr 2  20 rr rr             jsr     STROUT
00.000820r 2  A5 8A                lda     OLDTEXT
00.000822r 2  A4 8B                ldy     OLDTEXT+1
00.000824r 2  85 C7                sta     TXTPTR
00.000826r 2  84 C8                sty     TXTPTR+1
00.000828r 2               RTS20:
00.000828r 2  60                   rts
00.000829r 2               
00.000829r 2               ; ----------------------------------------------------------------------------
00.000829r 2               ; "GET" STATEMENT
00.000829r 2               ; ----------------------------------------------------------------------------
00.000829r 2               .ifndef CONFIG_SMALL
00.000829r 2               GET:
00.000829r 2  20 rr rr             jsr     ERRDIR
00.00082Cr 2               ; CBM: if GET#, then switch input
00.00082Cr 2               .ifdef CONFIG_FILE
00.00082Cr 2                       cmp     #'#'
00.00082Cr 2                       bne     LCAB6
00.00082Cr 2                       jsr     CHRGET
00.00082Cr 2                       jsr     GETBYT
00.00082Cr 2                       lda     #','
00.00082Cr 2                       jsr     SYNCHR
00.00082Cr 2                       jsr     CHKIN
00.00082Cr 2                       stx     CURDVC
00.00082Cr 2               LCAB6:
00.00082Cr 2               .endif
00.00082Cr 2  A2 1C                ldx     #<(INPUTBUFFER+1)
00.00082Er 2  A0 00                ldy     #>(INPUTBUFFER+1)
00.000830r 2               .ifdef CONFIG_NO_INPUTBUFFER_ZP
00.000830r 2                       lda     #$00
00.000830r 2                       sta     INPUTBUFFER+1
00.000830r 2               .else
00.000830r 2  84 1C                sty     INPUTBUFFER+1
00.000832r 2               .endif
00.000832r 2  A9 40                lda     #$40
00.000834r 2  20 rr rr             jsr     PROCESS_INPUT_LIST
00.000837r 2               ; CBM: if GET#, then switch input back
00.000837r 2               .ifdef CONFIG_FILE
00.000837r 2                       ldx     CURDVC
00.000837r 2                       bne     LCAD8
00.000837r 2               .endif
00.000837r 2  60                   rts
00.000838r 2               .endif
00.000838r 2               
00.000838r 2               ; ----------------------------------------------------------------------------
00.000838r 2               ; "INPUT#" STATEMENT
00.000838r 2               ; ----------------------------------------------------------------------------
00.000838r 2               .ifdef CONFIG_FILE
00.000838r 2               INPUTH:
00.000838r 2                       jsr     GETBYT
00.000838r 2                       lda     #$2C
00.000838r 2                       jsr     SYNCHR
00.000838r 2                       jsr     CHKIN
00.000838r 2                       stx     CURDVC
00.000838r 2                       jsr     L2A9E
00.000838r 2               LCAD6:
00.000838r 2                       lda     CURDVC
00.000838r 2               LCAD8:
00.000838r 2                       jsr     CLRCH
00.000838r 2                       ldx     #$00
00.000838r 2                       stx     CURDVC
00.000838r 2                       rts
00.000838r 2               LCAE0:
00.000838r 2               .endif
00.000838r 2               
00.000838r 2               ; ----------------------------------------------------------------------------
00.000838r 2               ; "INPUT" STATEMENT
00.000838r 2               ; ----------------------------------------------------------------------------
00.000838r 2               INPUT:
00.000838r 2               .ifndef KBD
00.000838r 2  46 14                lsr     Z14
00.00083Ar 2               .endif
00.00083Ar 2  C9 22                cmp     #$22
00.00083Cr 2  D0 0B                bne     L2A9E
00.00083Er 2  20 rr rr             jsr     STRTXT
00.000841r 2  A9 3B                lda     #$3B
00.000843r 2  20 rr rr             jsr     SYNCHR
00.000846r 2  20 rr rr             jsr     STRPRT
00.000849r 2               L2A9E:
00.000849r 2  20 rr rr             jsr     ERRDIR
00.00084Cr 2  A9 2C                lda     #$2C
00.00084Er 2  85 1A                sta     INPUTBUFFER-1
00.000850r 2               LCAF8:
00.000850r 2               .ifdef APPLE
00.000850r 2                       jsr     INLINX
00.000850r 2               .else
00.000850r 2  20 rr rr             jsr     NXIN
00.000853r 2               .endif
00.000853r 2               .ifdef KBD
00.000853r 2                       bmi     L2ABE
00.000853r 2               .else
00.000853r 2                 .ifdef CONFIG_FILE
00.000853r 2                       lda     CURDVC
00.000853r 2                       beq     LCB0C
00.000853r 2                       lda     Z96
00.000853r 2                       and     #$02
00.000853r 2                       beq     LCB0C
00.000853r 2                       jsr     LCAD6
00.000853r 2                       jmp     DATA
00.000853r 2               LCB0C:
00.000853r 2                 .endif
00.000853r 2  A5 1B                lda     INPUTBUFFER
00.000855r 2  D0 12                bne     L2ABE
00.000857r 2                 .ifdef CONFIG_FILE
00.000857r 2                       lda     CURDVC
00.000857r 2                       bne     LCAF8
00.000857r 2                 .endif
00.000857r 2                 .ifdef CONFIG_CBM1_PATCHES
00.000857r 2                       jmp     PATCH1
00.000857r 2                 .else
00.000857r 2  18                   clc
00.000858r 2  4C rr rr             jmp     CONTROL_C_TYPED
00.00085Br 2                 .endif
00.00085Br 2               .endif
00.00085Br 2               
00.00085Br 2               NXIN:
00.00085Br 2               .ifdef KBD
00.00085Br 2                       jsr     INLIN
00.00085Br 2                       bmi     RTS20
00.00085Br 2                       pla
00.00085Br 2                       jmp     LE86C
00.00085Br 2               .else
00.00085Br 2                 .ifdef CONFIG_FILE
00.00085Br 2                       lda     CURDVC
00.00085Br 2                       bne     LCB21
00.00085Br 2                 .endif
00.00085Br 2  20 rr rr             jsr     OUTQUES	; '?'
00.00085Er 2  20 rr rr             jsr     OUTSP
00.000861r 2               LCB21:
00.000861r 2  4C rr rr             jmp     INLIN
00.000864r 2               .endif
00.000864r 2               
00.000864r 2               ; ----------------------------------------------------------------------------
00.000864r 2               ; "GETC" STATEMENT
00.000864r 2               ; ----------------------------------------------------------------------------
00.000864r 2               .ifdef KBD
00.000864r 2               GETC:
00.000864r 2                       jsr     CONINT
00.000864r 2                       jsr     LF43D
00.000864r 2                       jmp     LE664
00.000864r 2               .endif
00.000864r 2               
00.000864r 2               ; ----------------------------------------------------------------------------
00.000864r 2               ; "READ" STATEMENT
00.000864r 2               ; ----------------------------------------------------------------------------
00.000864r 2               READ:
00.000864r 2  A6 8E                ldx     DATPTR
00.000866r 2  A4 8F                ldy     DATPTR+1
00.000868r 2               .ifdef CONFIG_NO_READ_Y_IS_ZERO_HACK
00.000868r 2               ; AppleSoft II, too
00.000868r 2                       lda     #$98	; READ
00.000868r 2                       .byte   $2C
00.000868r 2               L2ABE:
00.000868r 2                       lda     #$00	; INPUT
00.000868r 2               .else
00.000868r 2  A9                   .byte   $A9	; LDA #$98
00.000869r 2               L2ABE:
00.000869r 2  98                   tya
00.00086Ar 2               .endif
00.00086Ar 2               
00.00086Ar 2               ; ----------------------------------------------------------------------------
00.00086Ar 2               ; PROCESS INPUT LIST
00.00086Ar 2               ;
00.00086Ar 2               ; (Y,X) IS ADDRESS OF INPUT DATA STRING
00.00086Ar 2               ; (A) = VALUE FOR INPUTFLG:  $00 FOR INPUT
00.00086Ar 2               ; 				$40 FOR GET
00.00086Ar 2               ;				$98 FOR READ
00.00086Ar 2               ; ----------------------------------------------------------------------------
00.00086Ar 2               PROCESS_INPUT_LIST:
00.00086Ar 2  85 12                sta     INPUTFLG
00.00086Cr 2  86 90                stx     INPTR
00.00086Er 2  84 91                sty     INPTR+1
00.000870r 2               PROCESS_INPUT_ITEM:
00.000870r 2  20 rr rr             jsr     PTRGET
00.000873r 2  85 96                sta     FORPNT
00.000875r 2  84 97                sty     FORPNT+1
00.000877r 2  A5 C7                lda     TXTPTR
00.000879r 2  A4 C8                ldy     TXTPTR+1
00.00087Br 2  85 19                sta     TXPSV
00.00087Dr 2  84 1A                sty     TXPSV+1
00.00087Fr 2  A6 90                ldx     INPTR
00.000881r 2  A4 91                ldy     INPTR+1
00.000883r 2  86 C7                stx     TXTPTR
00.000885r 2  84 C8                sty     TXTPTR+1
00.000887r 2  20 C6 00             jsr     CHRGOT
00.00088Ar 2  D0 1B                bne     INSTART
00.00088Cr 2  24 12                bit     INPUTFLG
00.00088Er 2               .ifndef CONFIG_SMALL ; GET
00.00088Er 2  50 0B                bvc     L2AF0
00.000890r 2                 .ifdef MICROTAN
00.000890r 2                       jsr     MONRDKEY2
00.000890r 2                 .else
00.000890r 2  20 5A 1E             jsr     MONRDKEY
00.000893r 2                 .endif
00.000893r 2                 .ifdef CONFIG_IO_MSB
00.000893r 2                       and     #$7F
00.000893r 2                 .endif
00.000893r 2  85 1B                sta     INPUTBUFFER
00.000895r 2               ; BUG: The beq/bne L2AF8 below is supposed
00.000895r 2               ; to be always taken. For this to happen,
00.000895r 2               ; the last load must be a 0 for beq
00.000895r 2               ; and != 0 for bne. The original Microsoft
00.000895r 2               ; code had ldx/ldy/bne here, which was only
00.000895r 2               ; correct for a non-ZP INPUTBUFFER. Commodore
00.000895r 2               ; fixed it in CBMBASIC V1 by swapping the
00.000895r 2               ; ldx and the ldy. It was broken on KIM,
00.000895r 2               ; but okay on APPLE and CBM2, because
00.000895r 2               ; these used a non-ZP INPUTBUFFER.
00.000895r 2               ; Microsoft fixed this somewhere after KIM
00.000895r 2               ; and before MICROTAN, by using beq instead
00.000895r 2               ; of bne in the ZP case.
00.000895r 2                 .ifdef CBM1
00.000895r 2                       ldy     #>(INPUTBUFFER-1)
00.000895r 2                       ldx     #<(INPUTBUFFER-1)
00.000895r 2                 .else
00.000895r 2  A2 1A                ldx     #<(INPUTBUFFER-1)
00.000897r 2  A0 00                ldy     #>(INPUTBUFFER-1)
00.000899r 2                 .endif
00.000899r 2                 .if .def(CONFIG_2) && (!.def(CONFIG_NO_INPUTBUFFER_ZP))
00.000899r 2                       beq     L2AF8	; always
00.000899r 2                 .else
00.000899r 2  D0 08                bne     L2AF8	; always
00.00089Br 2                 .endif
00.00089Br 2               L2AF0:
00.00089Br 2               .endif
00.00089Br 2  30 71                bmi     FINDATA
00.00089Dr 2               .ifdef CONFIG_FILE
00.00089Dr 2                       lda     CURDVC
00.00089Dr 2                       bne     LCB64
00.00089Dr 2               .endif
00.00089Dr 2               .ifdef KBD
00.00089Dr 2                       jsr     OUTQUESSP
00.00089Dr 2               .else
00.00089Dr 2  20 rr rr             jsr     OUTQUES
00.0008A0r 2               .endif
00.0008A0r 2               LCB64:
00.0008A0r 2  20 rr rr             jsr     NXIN
00.0008A3r 2               L2AF8:
00.0008A3r 2  86 C7                stx     TXTPTR
00.0008A5r 2  84 C8                sty     TXTPTR+1
00.0008A7r 2               
00.0008A7r 2               ; ----------------------------------------------------------------------------
00.0008A7r 2               INSTART:
00.0008A7r 2  20 C0 00             jsr     CHRGET
00.0008AAr 2  24 0E                bit     VALTYP
00.0008ACr 2  10 31                bpl     L2B34
00.0008AEr 2               .ifndef CONFIG_SMALL ; GET
00.0008AEr 2  24 12                bit     INPUTFLG
00.0008B0r 2  50 09                bvc     L2B10
00.0008B2r 2                 .ifdef CONFIG_CBM1_PATCHES
00.0008B2r 2                       lda     #$00
00.0008B2r 2                       jsr     PATCH4
00.0008B2r 2                       nop
00.0008B2r 2                 .else
00.0008B2r 2  E8                   inx
00.0008B3r 2  86 C7                stx     TXTPTR
00.0008B5r 2  A9 00                lda     #$00
00.0008B7r 2  85 0A                sta     CHARAC
00.0008B9r 2  F0 0C                beq     L2B1C
00.0008BBr 2                 .endif
00.0008BBr 2               L2B10:
00.0008BBr 2               .endif
00.0008BBr 2  85 0A                sta     CHARAC
00.0008BDr 2  C9 22                cmp     #$22
00.0008BFr 2  F0 07                beq     L2B1D
00.0008C1r 2  A9 3A                lda     #$3A
00.0008C3r 2  85 0A                sta     CHARAC
00.0008C5r 2  A9 2C                lda     #$2C
00.0008C7r 2               L2B1C:
00.0008C7r 2  18                   clc
00.0008C8r 2               L2B1D:
00.0008C8r 2  85 0B                sta     ENDCHR
00.0008CAr 2  A5 C7                lda     TXTPTR
00.0008CCr 2  A4 C8                ldy     TXTPTR+1
00.0008CEr 2  69 00                adc     #$00
00.0008D0r 2  90 01                bcc     L2B28
00.0008D2r 2  C8                   iny
00.0008D3r 2               L2B28:
00.0008D3r 2  20 rr rr             jsr     STRLT2
00.0008D6r 2  20 rr rr             jsr     POINT
00.0008D9r 2               .ifdef CONFIG_SMALL
00.0008D9r 2                       jsr     LETSTRING
00.0008D9r 2               .else
00.0008D9r 2  20 rr rr             jsr     PUTSTR
00.0008DCr 2               .endif
00.0008DCr 2  4C rr rr             jmp     INPUT_MORE
00.0008DFr 2               ; ----------------------------------------------------------------------------
00.0008DFr 2               L2B34:
00.0008DFr 2  20 rr rr             jsr     FIN
00.0008E2r 2               .ifdef CONFIG_SMALL
00.0008E2r 2                       jsr     SETFOR
00.0008E2r 2               .else
00.0008E2r 2  A5 0F                lda     VALTYP+1
00.0008E4r 2  20 rr rr             jsr     LET2
00.0008E7r 2               .endif
00.0008E7r 2               ; ----------------------------------------------------------------------------
00.0008E7r 2               INPUT_MORE:
00.0008E7r 2  20 C6 00             jsr     CHRGOT
00.0008EAr 2  F0 07                beq     L2B48
00.0008ECr 2  C9 2C                cmp     #$2C
00.0008EEr 2  F0 03                beq     L2B48
00.0008F0r 2  4C rr rr             jmp     INPUTERR
00.0008F3r 2               L2B48:
00.0008F3r 2  A5 C7                lda     TXTPTR
00.0008F5r 2  A4 C8                ldy     TXTPTR+1
00.0008F7r 2  85 90                sta     INPTR
00.0008F9r 2  84 91                sty     INPTR+1
00.0008FBr 2  A5 19                lda     TXPSV
00.0008FDr 2  A4 1A                ldy     TXPSV+1
00.0008FFr 2  85 C7                sta     TXTPTR
00.000901r 2  84 C8                sty     TXTPTR+1
00.000903r 2  20 C6 00             jsr     CHRGOT
00.000906r 2  F0 2C                beq     INPDONE
00.000908r 2  20 rr rr             jsr     CHKCOM
00.00090Br 2  4C rr rr             jmp     PROCESS_INPUT_ITEM
00.00090Er 2               ; ----------------------------------------------------------------------------
00.00090Er 2               FINDATA:
00.00090Er 2  20 rr rr             jsr     DATAN
00.000911r 2  C8                   iny
00.000912r 2  AA                   tax
00.000913r 2  D0 12                bne     L2B7C
00.000915r 2  A2 2A                ldx     #ERR_NODATA
00.000917r 2  C8                   iny
00.000918r 2  B1 C7                lda     (TXTPTR),y
00.00091Ar 2  F0 69                beq     GERR
00.00091Cr 2  C8                   iny
00.00091Dr 2  B1 C7                lda     (TXTPTR),y
00.00091Fr 2  85 8C                sta     Z8C
00.000921r 2  C8                   iny
00.000922r 2  B1 C7                lda     (TXTPTR),y
00.000924r 2  C8                   iny
00.000925r 2  85 8D                sta     Z8C+1
00.000927r 2               L2B7C:
00.000927r 2  B1 C7                lda     (TXTPTR),y
00.000929r 2  AA                   tax
00.00092Ar 2  20 rr rr             jsr     ADDON
00.00092Dr 2  E0 83                cpx     #$83
00.00092Fr 2  D0 DD                bne     FINDATA
00.000931r 2  4C rr rr             jmp     INSTART
00.000934r 2               ; ---NO MORE INPUT REQUESTED------
00.000934r 2               INPDONE:
00.000934r 2  A5 90                lda     INPTR
00.000936r 2  A4 91                ldy     INPTR+1
00.000938r 2  A6 12                ldx     INPUTFLG
00.00093Ar 2               .if .def(CONFIG_SMALL) && (!.def(CONFIG_11))
00.00093Ar 2                       beq     L2B94 ; INPUT
00.00093Ar 2               .else
00.00093Ar 2  10 03                bpl     L2B94; INPUT or GET
00.00093Cr 2               .endif
00.00093Cr 2  4C rr rr             jmp     SETDA
00.00093Fr 2               L2B94:
00.00093Fr 2  A0 00                ldy     #$00
00.000941r 2  B1 90                lda     (INPTR),y
00.000943r 2  F0 07                beq     L2BA1
00.000945r 2               .ifdef CONFIG_FILE
00.000945r 2                       lda     CURDVC
00.000945r 2                       bne     L2BA1
00.000945r 2               .endif
00.000945r 2  A9 rr                lda     #<ERREXTRA
00.000947r 2  A0 rr                ldy     #>ERREXTRA
00.000949r 2  4C rr rr             jmp     STROUT
00.00094Cr 2               L2BA1:
00.00094Cr 2  60                   rts
00.00094Dr 2               
00.00094Dr 2               ; ----------------------------------------------------------------------------
00.00094Dr 2               ERREXTRA:
00.00094Dr 2               .ifdef KBD
00.00094Dr 2                       .byte   "?Extra"
00.00094Dr 2               .else
00.00094Dr 2  3F 45 58 54          .byte   "?EXTRA IGNORED"
00.000951r 2  52 41 20 49  
00.000955r 2  47 4E 4F 52  
00.00095Br 2               .endif
00.00095Br 2  0D 0A 00             .byte   $0D,$0A,$00
00.00095Er 2               ERRREENTRY:
00.00095Er 2               .ifdef KBD
00.00095Er 2                       .byte   "What?"
00.00095Er 2               .else
00.00095Er 2  3F 52 45 44          .byte   "?REDO FROM START"
00.000962r 2  4F 20 46 52  
00.000966r 2  4F 4D 20 53  
00.00096Er 2               .endif
00.00096Er 2  0D 0A 00             .byte   $0D,$0A,$00
00.000971r 2               .ifdef KBD
00.000971r 2               LEA30:
00.000971r 2                       .byte   "B"
00.000971r 2                       .byte   $FD
00.000971r 2                       .byte   "GsBASIC"
00.000971r 2                       .byte   $00,$1B,$0D,$13
00.000971r 2                       .byte   " BASIC"
00.000971r 2               .endif
00.000971r 2               
00.000971r 1               .include "eval.s"
00.000971r 2               .segment "CODE"
00.000971r 2               
00.000971r 2               ; ----------------------------------------------------------------------------
00.000971r 2               ; "NEXT" STATEMENT
00.000971r 2               ; ----------------------------------------------------------------------------
00.000971r 2               NEXT:
00.000971r 2  D0 04                bne     NEXT1
00.000973r 2  A0 00                ldy     #$00
00.000975r 2  F0 03                beq     NEXT2
00.000977r 2               NEXT1:
00.000977r 2  20 rr rr             jsr     PTRGET
00.00097Ar 2               NEXT2:
00.00097Ar 2  85 96                sta     FORPNT
00.00097Cr 2  84 97                sty     FORPNT+1
00.00097Er 2  20 rr rr             jsr     GTFORPNT
00.000981r 2  F0 04                beq     NEXT3
00.000983r 2  A2 00                ldx     #$00
00.000985r 2               GERR:
00.000985r 2  F0 69                beq     JERROR
00.000987r 2               NEXT3:
00.000987r 2  9A                   txs
00.000988r 2               .ifndef CONFIG_2
00.000988r 2  E8                   inx
00.000989r 2  E8                   inx
00.00098Ar 2  E8                   inx
00.00098Br 2  E8                   inx
00.00098Cr 2               .endif
00.00098Cr 2  8A                   txa
00.00098Dr 2               .ifdef CONFIG_2
00.00098Dr 2                       clc
00.00098Dr 2                       adc     #$04
00.00098Dr 2                       pha
00.00098Dr 2                       adc     #BYTES_FP+1
00.00098Dr 2                       sta     DEST
00.00098Dr 2                       pla
00.00098Dr 2               .else
00.00098Dr 2  E8                   inx
00.00098Er 2  E8                   inx
00.00098Fr 2  E8                   inx
00.000990r 2  E8                   inx
00.000991r 2  E8                   inx
00.000992r 2               .ifndef CONFIG_SMALL
00.000992r 2  E8                   inx
00.000993r 2               .endif
00.000993r 2  86 71                stx     DEST
00.000995r 2               .endif
00.000995r 2  A0 01                ldy     #>STACK
00.000997r 2  20 rr rr             jsr     LOAD_FAC_FROM_YA
00.00099Ar 2  BA                   tsx
00.00099Br 2  BD 09 01             lda     STACK+BYTES_FP+4,x
00.00099Er 2  85 B3                sta     FACSIGN
00.0009A0r 2  A5 96                lda     FORPNT
00.0009A2r 2  A4 97                ldy     FORPNT+1
00.0009A4r 2  20 rr rr             jsr     FADD
00.0009A7r 2  20 rr rr             jsr     SETFOR
00.0009AAr 2  A0 01                ldy     #>STACK
00.0009ACr 2  20 rr rr             jsr     FCOMP2
00.0009AFr 2  BA                   tsx
00.0009B0r 2  38                   sec
00.0009B1r 2  FD 09 01             sbc     STACK+BYTES_FP+4,x
00.0009B4r 2  F0 17                beq     L2C22
00.0009B6r 2  BD 0F 01             lda     STACK+2*BYTES_FP+5,x
00.0009B9r 2  85 86                sta     CURLIN
00.0009BBr 2  BD 10 01             lda     STACK+2*BYTES_FP+6,x
00.0009BEr 2  85 87                sta     CURLIN+1
00.0009C0r 2  BD 12 01             lda     STACK+2*BYTES_FP+8,x
00.0009C3r 2  85 C7                sta     TXTPTR
00.0009C5r 2  BD 11 01             lda     STACK+2*BYTES_FP+7,x
00.0009C8r 2  85 C8                sta     TXTPTR+1
00.0009CAr 2               L2C1F:
00.0009CAr 2  4C rr rr             jmp     NEWSTT
00.0009CDr 2               L2C22:
00.0009CDr 2  8A                   txa
00.0009CEr 2  69 11                adc     #2*BYTES_FP+7
00.0009D0r 2  AA                   tax
00.0009D1r 2  9A                   txs
00.0009D2r 2  20 C6 00             jsr     CHRGOT
00.0009D5r 2  C9 2C                cmp     #$2C
00.0009D7r 2  D0 F1                bne     L2C1F
00.0009D9r 2  20 C0 00             jsr     CHRGET
00.0009DCr 2  20 rr rr             jsr     NEXT1
00.0009DFr 2               
00.0009DFr 2               ; ----------------------------------------------------------------------------
00.0009DFr 2               ; EVALUATE EXPRESSION, MAKE SURE IT IS NUMERIC
00.0009DFr 2               ; ----------------------------------------------------------------------------
00.0009DFr 2               FRMNUM:
00.0009DFr 2  20 rr rr             jsr     FRMEVL
00.0009E2r 2               
00.0009E2r 2               ; ----------------------------------------------------------------------------
00.0009E2r 2               ; MAKE SURE (FAC) IS NUMERIC
00.0009E2r 2               ; ----------------------------------------------------------------------------
00.0009E2r 2               CHKNUM:
00.0009E2r 2  18                   clc
00.0009E3r 2  24                   .byte   $24
00.0009E4r 2               
00.0009E4r 2               ; ----------------------------------------------------------------------------
00.0009E4r 2               ; MAKE SURE (FAC) IS STRING
00.0009E4r 2               ; ----------------------------------------------------------------------------
00.0009E4r 2               CHKSTR:
00.0009E4r 2  38                   sec
00.0009E5r 2               
00.0009E5r 2               ; ----------------------------------------------------------------------------
00.0009E5r 2               ; MAKE SURE (FAC) IS CORRECT TYPE
00.0009E5r 2               ; IF C=0, TYPE MUST BE NUMERIC
00.0009E5r 2               ; IF C=1, TYPE MUST BE STRING
00.0009E5r 2               ; ----------------------------------------------------------------------------
00.0009E5r 2               CHKVAL:
00.0009E5r 2  24 0E                bit     VALTYP
00.0009E7r 2  30 03                bmi     L2C41
00.0009E9r 2  B0 03                bcs     L2C43
00.0009EBr 2               L2C40:
00.0009EBr 2  60                   rts
00.0009ECr 2               L2C41:
00.0009ECr 2  B0 FD                bcs     L2C40
00.0009EEr 2               L2C43:
00.0009EEr 2  A2 A3                ldx     #ERR_BADTYPE
00.0009F0r 2               JERROR:
00.0009F0r 2  4C rr rr             jmp     ERROR
00.0009F3r 2               
00.0009F3r 2               ; ----------------------------------------------------------------------------
00.0009F3r 2               ; EVALUATE THE EXPRESSION AT TXTPTR, LEAVING THE
00.0009F3r 2               ; RESULT IN FAC.  WORKS FOR BOTH STRING AND NUMERIC
00.0009F3r 2               ; EXPRESSIONS.
00.0009F3r 2               ; ----------------------------------------------------------------------------
00.0009F3r 2               FRMEVL:
00.0009F3r 2  A6 C7                ldx     TXTPTR
00.0009F5r 2  D0 02                bne     L2C4E
00.0009F7r 2  C6 C8                dec     TXTPTR+1
00.0009F9r 2               L2C4E:
00.0009F9r 2  C6 C7                dec     TXTPTR
00.0009FBr 2  A2 00                ldx     #$00
00.0009FDr 2  24                   .byte   $24
00.0009FEr 2               FRMEVL1:
00.0009FEr 2  48                   pha
00.0009FFr 2  8A                   txa
00.000A00r 2  48                   pha
00.000A01r 2  A9 01                lda     #$01
00.000A03r 2  20 rr rr             jsr     CHKMEM
00.000A06r 2  20 rr rr             jsr     FRM_ELEMENT
00.000A09r 2  A9 00                lda     #$00
00.000A0Br 2  85 9A                sta     CPRTYP
00.000A0Dr 2               FRMEVL2:
00.000A0Dr 2  20 C6 00             jsr     CHRGOT
00.000A10r 2               L2C65:
00.000A10r 2  38                   sec
00.000A11r 2  E9 AB                sbc     #TOKEN_GREATER
00.000A13r 2  90 17                bcc     L2C81
00.000A15r 2  C9 03                cmp     #$03
00.000A17r 2  B0 13                bcs     L2C81
00.000A19r 2  C9 01                cmp     #$01
00.000A1Br 2  2A                   rol     a
00.000A1Cr 2  49 01                eor     #$01
00.000A1Er 2  45 9A                eor     CPRTYP
00.000A20r 2  C5 9A                cmp     CPRTYP
00.000A22r 2  90 61                bcc     SNTXERR
00.000A24r 2  85 9A                sta     CPRTYP
00.000A26r 2  20 C0 00             jsr     CHRGET
00.000A29r 2  4C rr rr             jmp     L2C65
00.000A2Cr 2               L2C81:
00.000A2Cr 2  A6 9A                ldx     CPRTYP
00.000A2Er 2  D0 2C                bne     FRM_RELATIONAL
00.000A30r 2  B0 7B                bcs     L2D02
00.000A32r 2  69 07                adc     #$07
00.000A34r 2  90 77                bcc     L2D02
00.000A36r 2  65 0E                adc     VALTYP
00.000A38r 2  D0 03                bne     L2C92
00.000A3Ar 2  4C rr rr             jmp     CAT
00.000A3Dr 2               L2C92:
00.000A3Dr 2  69 FF                adc     #$FF
00.000A3Fr 2  85 6F                sta     INDEX
00.000A41r 2  0A                   asl     a
00.000A42r 2  65 6F                adc     INDEX
00.000A44r 2  A8                   tay
00.000A45r 2               FRM_PRECEDENCE_TEST:
00.000A45r 2  68                   pla
00.000A46r 2  D9 rr rr             cmp     MATHTBL,y
00.000A49r 2  B0 67                bcs     FRM_PERFORM1
00.000A4Br 2  20 rr rr             jsr     CHKNUM
00.000A4Er 2               L2CA3:
00.000A4Er 2  48                   pha
00.000A4Fr 2               L2CA4:
00.000A4Fr 2  20 rr rr             jsr     FRM_RECURSE
00.000A52r 2  68                   pla
00.000A53r 2  A4 98                ldy     LASTOP
00.000A55r 2  10 17                bpl     PREFNC
00.000A57r 2  AA                   tax
00.000A58r 2  F0 56                beq     GOEX
00.000A5Ar 2  D0 5F                bne     FRM_PERFORM2
00.000A5Cr 2               
00.000A5Cr 2               ; ----------------------------------------------------------------------------
00.000A5Cr 2               ; FOUND ONE OR MORE RELATIONAL OPERATORS <,=,>
00.000A5Cr 2               ; ----------------------------------------------------------------------------
00.000A5Cr 2               FRM_RELATIONAL:
00.000A5Cr 2  46 0E                lsr     VALTYP
00.000A5Er 2  8A                   txa
00.000A5Fr 2  2A                   rol     a
00.000A60r 2  A6 C7                ldx     TXTPTR
00.000A62r 2  D0 02                bne     L2CBB
00.000A64r 2  C6 C8                dec     TXTPTR+1
00.000A66r 2               L2CBB:
00.000A66r 2  C6 C7                dec     TXTPTR
00.000A68r 2  A0 1B                ldy     #$1B
00.000A6Ar 2  85 9A                sta     CPRTYP
00.000A6Cr 2  D0 D7                bne     FRM_PRECEDENCE_TEST
00.000A6Er 2               PREFNC:
00.000A6Er 2  D9 rr rr             cmp     MATHTBL,y
00.000A71r 2  B0 48                bcs     FRM_PERFORM2
00.000A73r 2  90 D9                bcc     L2CA3
00.000A75r 2               
00.000A75r 2               ; ----------------------------------------------------------------------------
00.000A75r 2               ; STACK THIS OPERATION AND CALL FRMEVL FOR
00.000A75r 2               ; ANOTHER ONE
00.000A75r 2               ; ----------------------------------------------------------------------------
00.000A75r 2               FRM_RECURSE:
00.000A75r 2  B9 rr rr             lda     MATHTBL+2,y
00.000A78r 2  48                   pha
00.000A79r 2  B9 rr rr             lda     MATHTBL+1,y
00.000A7Cr 2  48                   pha
00.000A7Dr 2  20 rr rr             jsr     FRM_STACK1
00.000A80r 2  A5 9A                lda     CPRTYP
00.000A82r 2  4C rr rr             jmp     FRMEVL1
00.000A85r 2               SNTXERR:
00.000A85r 2  4C rr rr             jmp     SYNERR
00.000A88r 2               
00.000A88r 2               ; ----------------------------------------------------------------------------
00.000A88r 2               ; STACK (FAC)
00.000A88r 2               ; THREE ENTRY POINTS:
00.000A88r 2               ; 	1, FROM FRMEVL
00.000A88r 2               ;	2, FROM "STEP"
00.000A88r 2               ;	3, FROM "FOR"
00.000A88r 2               ; ----------------------------------------------------------------------------
00.000A88r 2               FRM_STACK1:
00.000A88r 2  A5 B3                lda     FACSIGN
00.000A8Ar 2  BE rr rr             ldx     MATHTBL,y
00.000A8Dr 2               
00.000A8Dr 2               ; ----------------------------------------------------------------------------
00.000A8Dr 2               ; ENTER HERE FROM "STEP", TO PUSH STEP SIGN AND VALUE
00.000A8Dr 2               ; ----------------------------------------------------------------------------
00.000A8Dr 2               FRM_STACK2:
00.000A8Dr 2  A8                   tay
00.000A8Er 2  68                   pla
00.000A8Fr 2  85 6F                sta     INDEX
00.000A91r 2               .ifndef CONFIG_2B
00.000A91r 2  E6 6F                inc     INDEX ; bug: assumes not on page boundary
00.000A93r 2               ; bug exists on AppleSoft II
00.000A93r 2               .endif
00.000A93r 2  68                   pla
00.000A94r 2  85 70                sta     INDEX+1
00.000A96r 2               .ifdef CONFIG_2B
00.000A96r 2                       inc     INDEX
00.000A96r 2                       bne     LEB69
00.000A96r 2                       inc     INDEX+1
00.000A96r 2               LEB69:
00.000A96r 2               .endif
00.000A96r 2  98                   tya
00.000A97r 2  48                   pha
00.000A98r 2               
00.000A98r 2               ; ----------------------------------------------------------------------------
00.000A98r 2               ; ENTER HERE FROM "FOR", WITH (INDEX) = STEP,
00.000A98r 2               ; TO PUSH INITIAL VALUE OF "FOR" VARIABLE
00.000A98r 2               ; ----------------------------------------------------------------------------
00.000A98r 2               FRM_STACK3:
00.000A98r 2  20 rr rr             jsr     ROUND_FAC
00.000A9Br 2               .ifndef CONFIG_SMALL
00.000A9Br 2  A5 B2                lda     FAC+4
00.000A9Dr 2  48                   pha
00.000A9Er 2               .endif
00.000A9Er 2  A5 B1                lda     FAC+3
00.000AA0r 2  48                   pha
00.000AA1r 2  A5 B0                lda     FAC+2
00.000AA3r 2  48                   pha
00.000AA4r 2  A5 AF                lda     FAC+1
00.000AA6r 2  48                   pha
00.000AA7r 2  A5 AE                lda     FAC
00.000AA9r 2  48                   pha
00.000AAAr 2  6C 6F 00             jmp     (INDEX)
00.000AADr 2               L2D02:
00.000AADr 2  A0 FF                ldy     #$FF
00.000AAFr 2  68                   pla
00.000AB0r 2               GOEX:
00.000AB0r 2  F0 23                beq     EXIT
00.000AB2r 2               
00.000AB2r 2               ; ----------------------------------------------------------------------------
00.000AB2r 2               ; PERFORM STACKED OPERATION
00.000AB2r 2               ;
00.000AB2r 2               ; (A) = PRECEDENCE BYTE
00.000AB2r 2               ; STACK:  1 -- CPRMASK
00.000AB2r 2               ;	5 -- (ARG)
00.000AB2r 2               ;	2 -- ADDR OF PERFORMER
00.000AB2r 2               ; ----------------------------------------------------------------------------
00.000AB2r 2               FRM_PERFORM1:
00.000AB2r 2  C9 64                cmp     #$64
00.000AB4r 2  F0 03                beq     L2D0E
00.000AB6r 2  20 rr rr             jsr     CHKNUM
00.000AB9r 2               L2D0E:
00.000AB9r 2  84 98                sty     LASTOP
00.000ABBr 2               FRM_PERFORM2:
00.000ABBr 2  68                   pla
00.000ABCr 2  4A                   lsr     a
00.000ABDr 2  85 13                sta     CPRMASK
00.000ABFr 2  68                   pla
00.000AC0r 2  85 B6                sta     ARG
00.000AC2r 2  68                   pla
00.000AC3r 2  85 B7                sta     ARG+1
00.000AC5r 2  68                   pla
00.000AC6r 2  85 B8                sta     ARG+2
00.000AC8r 2  68                   pla
00.000AC9r 2  85 B9                sta     ARG+3
00.000ACBr 2  68                   pla
00.000ACCr 2               .ifndef CONFIG_SMALL
00.000ACCr 2  85 BA                sta     ARG+4
00.000ACEr 2  68                   pla
00.000ACFr 2               .endif
00.000ACFr 2  85 BB                sta     ARGSIGN
00.000AD1r 2  45 B3                eor     FACSIGN
00.000AD3r 2  85 BC                sta     SGNCPR
00.000AD5r 2               EXIT:
00.000AD5r 2  A5 AE                lda     FAC
00.000AD7r 2  60                   rts
00.000AD8r 2               
00.000AD8r 2               ; ----------------------------------------------------------------------------
00.000AD8r 2               ; GET ELEMENT IN EXPRESSION
00.000AD8r 2               ;
00.000AD8r 2               ; GET VALUE OF VARIABLE OR NUMBER AT TXTPNT, OR POINT
00.000AD8r 2               ; TO STRING DESCRIPTOR IF A STRING, AND PUT IN FAC.
00.000AD8r 2               ; ----------------------------------------------------------------------------
00.000AD8r 2               FRM_ELEMENT:
00.000AD8r 2  A9 00                lda     #$00
00.000ADAr 2  85 0E                sta     VALTYP
00.000ADCr 2               L2D31:
00.000ADCr 2  20 C0 00             jsr     CHRGET
00.000ADFr 2  B0 03                bcs     L2D39
00.000AE1r 2               L2D36:
00.000AE1r 2  4C rr rr             jmp     FIN
00.000AE4r 2               L2D39:
00.000AE4r 2  20 rr rr             jsr     ISLETC
00.000AE7r 2  B0 67                bcs     FRM_VARIABLE
00.000AE9r 2               .ifdef CONFIG_CBM_ALL
00.000AE9r 2                       cmp     #$FF
00.000AE9r 2                       bne     LCDC1
00.000AE9r 2                       lda     #<CON_PI
00.000AE9r 2                       ldy     #>CON_PI
00.000AE9r 2                       jsr     LOAD_FAC_FROM_YA
00.000AE9r 2                       jmp     CHRGET
00.000AE9r 2               CON_PI:
00.000AE9r 2                       .byte   $82,$49,$0f,$DA,$A1
00.000AE9r 2               LCDC1:
00.000AE9r 2               .endif
00.000AE9r 2  C9 2E                cmp     #$2E
00.000AEBr 2  F0 F4                beq     L2D36
00.000AEDr 2  C9 A5                cmp     #TOKEN_MINUS
00.000AEFr 2  F0 58                beq     MIN
00.000AF1r 2  C9 A4                cmp     #TOKEN_PLUS
00.000AF3r 2  F0 E7                beq     L2D31
00.000AF5r 2  C9 22                cmp     #$22
00.000AF7r 2  D0 0F                bne     NOT_
00.000AF9r 2               
00.000AF9r 2               ; ----------------------------------------------------------------------------
00.000AF9r 2               ; STRING CONSTANT ELEMENT
00.000AF9r 2               ;
00.000AF9r 2               ; SET Y,A = (TXTPTR)+CARRY
00.000AF9r 2               ; ----------------------------------------------------------------------------
00.000AF9r 2               STRTXT:
00.000AF9r 2  A5 C7                lda     TXTPTR
00.000AFBr 2  A4 C8                ldy     TXTPTR+1
00.000AFDr 2  69 00                adc     #$00
00.000AFFr 2  90 01                bcc     L2D57
00.000B01r 2  C8                   iny
00.000B02r 2               L2D57:
00.000B02r 2  20 rr rr             jsr     STRLIT
00.000B05r 2  4C rr rr             jmp     POINT
00.000B08r 2               
00.000B08r 2               ; ----------------------------------------------------------------------------
00.000B08r 2               ; "NOT" FUNCTION
00.000B08r 2               ; IF FAC=0, RETURN FAC=1
00.000B08r 2               ; IF FAC<>0, RETURN FAC=0
00.000B08r 2               ; ----------------------------------------------------------------------------
00.000B08r 2               NOT_:
00.000B08r 2  C9 A2                cmp     #TOKEN_NOT
00.000B0Ar 2  D0 13                bne     L2D74
00.000B0Cr 2  A0 18                ldy     #$18
00.000B0Er 2  D0 3B                bne     EQUL
00.000B10r 2               
00.000B10r 2               ; ----------------------------------------------------------------------------
00.000B10r 2               ; COMPARISON FOR EQUALITY (= OPERATOR)
00.000B10r 2               ; ALSO USED TO EVALUATE "NOT" FUNCTION
00.000B10r 2               ; ----------------------------------------------------------------------------
00.000B10r 2               EQUOP:
00.000B10r 2  20 rr rr             jsr     AYINT
00.000B13r 2  A5 B2                lda     FAC_LAST
00.000B15r 2  49 FF                eor     #$FF
00.000B17r 2  A8                   tay
00.000B18r 2  A5 B1                lda     FAC_LAST-1
00.000B1Ar 2  49 FF                eor     #$FF
00.000B1Cr 2  4C rr rr             jmp     GIVAYF
00.000B1Fr 2               L2D74:
00.000B1Fr 2  C9 9F                cmp     #TOKEN_FN
00.000B21r 2  D0 03                bne     L2D7B
00.000B23r 2  4C rr rr             jmp     L31F3
00.000B26r 2               L2D7B:
00.000B26r 2  C9 AE                cmp     #TOKEN_SGN
00.000B28r 2  90 03                bcc     PARCHK
00.000B2Ar 2  4C rr rr             jmp     UNARY
00.000B2Dr 2               
00.000B2Dr 2               ; ----------------------------------------------------------------------------
00.000B2Dr 2               ; EVALUATE "(EXPRESSION)"
00.000B2Dr 2               ; ----------------------------------------------------------------------------
00.000B2Dr 2               PARCHK:
00.000B2Dr 2  20 rr rr             jsr     CHKOPN
00.000B30r 2  20 rr rr             jsr     FRMEVL
00.000B33r 2               CHKCLS:
00.000B33r 2  A9 29                lda     #$29
00.000B35r 2  2C                   .byte   $2C
00.000B36r 2               CHKOPN:
00.000B36r 2  A9 28                lda     #$28
00.000B38r 2  2C                   .byte   $2C
00.000B39r 2               CHKCOM:
00.000B39r 2  A9 2C                lda     #$2C
00.000B3Br 2               
00.000B3Br 2               ; ----------------------------------------------------------------------------
00.000B3Br 2               ; UNLESS CHAR AT TXTPTR = (A), SYNTAX ERROR
00.000B3Br 2               ; ----------------------------------------------------------------------------
00.000B3Br 2               SYNCHR:	; XXX all CBM code calls SYNCHR instead of CHKCOM
00.000B3Br 2  A0 00                ldy     #$00
00.000B3Dr 2  D1 C7                cmp     (TXTPTR),y
00.000B3Fr 2  D0 03                bne     SYNERR
00.000B41r 2  4C C0 00             jmp     CHRGET
00.000B44r 2               ; ----------------------------------------------------------------------------
00.000B44r 2               SYNERR:
00.000B44r 2  A2 10                ldx     #ERR_SYNTAX
00.000B46r 2  4C rr rr             jmp     ERROR
00.000B49r 2               ; ----------------------------------------------------------------------------
00.000B49r 2               MIN:
00.000B49r 2  A0 15                ldy     #$15
00.000B4Br 2               EQUL:
00.000B4Br 2  68                   pla
00.000B4Cr 2  68                   pla
00.000B4Dr 2  4C rr rr             jmp     L2CA4
00.000B50r 2               ; ----------------------------------------------------------------------------
00.000B50r 2               FRM_VARIABLE:
00.000B50r 2  20 rr rr             jsr     PTRGET
00.000B53r 2               FRM_VARIABLE_CALL	= *-1
00.000B53r 2  85 B1                sta     FAC_LAST-1
00.000B55r 2  84 B2                sty     FAC_LAST
00.000B57r 2               .ifdef CONFIG_CBM_ALL
00.000B57r 2                       lda     VARNAM
00.000B57r 2                       ldy     VARNAM+1
00.000B57r 2               .endif
00.000B57r 2  A6 0E                ldx     VALTYP
00.000B59r 2  F0 01                beq     L2DB1
00.000B5Br 2               .ifdef CONFIG_CBM_ALL
00.000B5Br 2                 .ifdef CONFIG_CBM1_PATCHES
00.000B5Br 2                       jmp     PATCH2
00.000B5Br 2                       clc
00.000B5Br 2               LCE3B:
00.000B5Br 2                 .else
00.000B5Br 2                       ldx     #$00
00.000B5Br 2                       stx     STRNG1+1
00.000B5Br 2                       bit     FAC+4
00.000B5Br 2                       bpl     LCE53
00.000B5Br 2                       cmp     #$54	; T
00.000B5Br 2                       bne     LCE53
00.000B5Br 2                 .endif
00.000B5Br 2                       cpy     #$C9	; I$
00.000B5Br 2                       bne     LCE53
00.000B5Br 2                       jsr     LCE76
00.000B5Br 2                       sty     EXPON
00.000B5Br 2                       dey
00.000B5Br 2                       sty     STRNG2
00.000B5Br 2                       ldy     #$06
00.000B5Br 2                       sty     INDX
00.000B5Br 2                       ldy     #$24
00.000B5Br 2                       jsr     LDD3A
00.000B5Br 2                       jmp     LD353
00.000B5Br 2               LCE53:
00.000B5Br 2               .endif
00.000B5Br 2               .ifdef CONFIG_2
00.000B5Br 2                 .ifndef CBM2
00.000B5Br 2               ; bugfix?
00.000B5Br 2               ; fixed on AppleSoft II, not on any CBM
00.000B5Br 2                       ldx     #$00
00.000B5Br 2                       stx     STRNG1+1
00.000B5Br 2                 .endif
00.000B5Br 2               .endif
00.000B5Br 2  60                   rts
00.000B5Cr 2               L2DB1:
00.000B5Cr 2               .ifndef CONFIG_SMALL
00.000B5Cr 2  A6 0F                ldx     VALTYP+1
00.000B5Er 2  10 0D                bpl     L2DC2
00.000B60r 2  A0 00                ldy     #$00
00.000B62r 2  B1 B1                lda     (FAC+3),y
00.000B64r 2  AA                   tax
00.000B65r 2  C8                   iny
00.000B66r 2  B1 B1                lda     (FAC+3),y
00.000B68r 2  A8                   tay
00.000B69r 2  8A                   txa
00.000B6Ar 2  4C rr rr             jmp     GIVAYF
00.000B6Dr 2               L2DC2:
00.000B6Dr 2               .endif
00.000B6Dr 2               .ifdef CONFIG_CBM1_PATCHES
00.000B6Dr 2                       jmp     PATCH3
00.000B6Dr 2                       .byte   $19
00.000B6Dr 2               .endif
00.000B6Dr 2               .ifdef CBM2
00.000B6Dr 2                       bit     FAC+4
00.000B6Dr 2                       bpl     LCE90
00.000B6Dr 2                       cmp     #$54
00.000B6Dr 2                       bne     LCE82
00.000B6Dr 2               .endif
00.000B6Dr 2               .ifndef CONFIG_CBM_ALL
00.000B6Dr 2  4C rr rr             jmp     LOAD_FAC_FROM_YA
00.000B70r 2               .endif
00.000B70r 2               .ifdef CONFIG_CBM_ALL
00.000B70r 2               LCE69:
00.000B70r 2                       cpy     #$49
00.000B70r 2               .ifdef CBM1
00.000B70r 2                       bne     LCE82
00.000B70r 2               .else
00.000B70r 2                       bne     LCE90
00.000B70r 2               .endif
00.000B70r 2                       jsr     LCE76
00.000B70r 2                       tya
00.000B70r 2                       ldx     #$A0
00.000B70r 2                       jmp     LDB21
00.000B70r 2               LCE76:
00.000B70r 2               .ifdef CBM1
00.000B70r 2                       lda     #$FE
00.000B70r 2                       ldy     #$01
00.000B70r 2               .else
00.000B70r 2                       lda     #$8B
00.000B70r 2                       ldy     #$00
00.000B70r 2               .endif
00.000B70r 2                       sei
00.000B70r 2                       jsr     LOAD_FAC_FROM_YA
00.000B70r 2                       cli
00.000B70r 2                       sty     FAC+1
00.000B70r 2                       rts
00.000B70r 2               LCE82:
00.000B70r 2                       cmp     #$53
00.000B70r 2                       bne     LCE90
00.000B70r 2                       cpy     #$54
00.000B70r 2                       bne     LCE90
00.000B70r 2                       lda     Z96
00.000B70r 2                       jmp     FLOAT
00.000B70r 2               LCE90:
00.000B70r 2                       lda     FAC+3
00.000B70r 2                       ldy     FAC+4
00.000B70r 2                       jmp     LOAD_FAC_FROM_YA
00.000B70r 2               .endif
00.000B70r 2               
00.000B70r 2               ; ----------------------------------------------------------------------------
00.000B70r 2               UNARY:
00.000B70r 2  0A                   asl     a
00.000B71r 2  48                   pha
00.000B72r 2  AA                   tax
00.000B73r 2  20 C0 00             jsr     CHRGET
00.000B76r 2  E0 83                cpx     #<(TOKEN_LEFTSTR*2-1)
00.000B78r 2  90 20                bcc     L2DEF
00.000B7Ar 2  20 rr rr             jsr     CHKOPN
00.000B7Dr 2  20 rr rr             jsr     FRMEVL
00.000B80r 2  20 rr rr             jsr     CHKCOM
00.000B83r 2  20 rr rr             jsr     CHKSTR
00.000B86r 2  68                   pla
00.000B87r 2  AA                   tax
00.000B88r 2  A5 B2                lda     FAC_LAST
00.000B8Ar 2  48                   pha
00.000B8Br 2  A5 B1                lda     FAC_LAST-1
00.000B8Dr 2  48                   pha
00.000B8Er 2  8A                   txa
00.000B8Fr 2  48                   pha
00.000B90r 2  20 rr rr             jsr     GETBYT
00.000B93r 2  68                   pla
00.000B94r 2  A8                   tay
00.000B95r 2  8A                   txa
00.000B96r 2  48                   pha
00.000B97r 2  4C rr rr             jmp     L2DF4
00.000B9Ar 2               L2DEF:
00.000B9Ar 2  20 rr rr             jsr     PARCHK
00.000B9Dr 2  68                   pla
00.000B9Er 2  A8                   tay
00.000B9Fr 2               L2DF4:
00.000B9Fr 2  B9 rr rr             lda     UNFNC-TOKEN_SGN-TOKEN_SGN+$100,y
00.000BA2r 2  85 A2                sta     JMPADRS+1
00.000BA4r 2  B9 rr rr             lda     UNFNC-TOKEN_SGN-TOKEN_SGN+$101,y
00.000BA7r 2  85 A3                sta     JMPADRS+2
00.000BA9r 2               .ifdef KBD
00.000BA9r 2                       jsr     LF47D
00.000BA9r 2               .else
00.000BA9r 2  20 A1 00             jsr     JMPADRS
00.000BACr 2               .endif
00.000BACr 2  4C rr rr             jmp     CHKNUM
00.000BAFr 2               
00.000BAFr 2               ; ----------------------------------------------------------------------------
00.000BAFr 2               OR:
00.000BAFr 2  A0 FF                ldy     #$FF
00.000BB1r 2  2C                   .byte   $2C
00.000BB2r 2               ; ----------------------------------------------------------------------------
00.000BB2r 2               TAND:
00.000BB2r 2  A0 00                ldy     #$00
00.000BB4r 2  84 0C                sty     EOLPNTR
00.000BB6r 2  20 rr rr             jsr     AYINT
00.000BB9r 2  A5 B1                lda     FAC_LAST-1
00.000BBBr 2  45 0C                eor     EOLPNTR
00.000BBDr 2  85 0A                sta     CHARAC
00.000BBFr 2  A5 B2                lda     FAC_LAST
00.000BC1r 2  45 0C                eor     EOLPNTR
00.000BC3r 2  85 0B                sta     ENDCHR
00.000BC5r 2  20 rr rr             jsr     COPY_ARG_TO_FAC
00.000BC8r 2  20 rr rr             jsr     AYINT
00.000BCBr 2  A5 B2                lda     FAC_LAST
00.000BCDr 2  45 0C                eor     EOLPNTR
00.000BCFr 2  25 0B                and     ENDCHR
00.000BD1r 2  45 0C                eor     EOLPNTR
00.000BD3r 2  A8                   tay
00.000BD4r 2  A5 B1                lda     FAC_LAST-1
00.000BD6r 2  45 0C                eor     EOLPNTR
00.000BD8r 2  25 0A                and     CHARAC
00.000BDAr 2  45 0C                eor     EOLPNTR
00.000BDCr 2  4C rr rr             jmp     GIVAYF
00.000BDFr 2               
00.000BDFr 2               ; ----------------------------------------------------------------------------
00.000BDFr 2               ; PERFORM RELATIONAL OPERATIONS
00.000BDFr 2               ; ----------------------------------------------------------------------------
00.000BDFr 2               RELOPS:
00.000BDFr 2  20 rr rr             jsr     CHKVAL
00.000BE2r 2  B0 13                bcs     STRCMP
00.000BE4r 2  A5 BB                lda     ARGSIGN
00.000BE6r 2  09 7F                ora     #$7F
00.000BE8r 2  25 B7                and     ARG+1
00.000BEAr 2  85 B7                sta     ARG+1
00.000BECr 2  A9 B6                lda     #<ARG
00.000BEEr 2  A0 00                ldy     #$00
00.000BF0r 2  20 rr rr             jsr     FCOMP
00.000BF3r 2  AA                   tax
00.000BF4r 2  4C rr rr             jmp     NUMCMP
00.000BF7r 2               
00.000BF7r 2               ; ----------------------------------------------------------------------------
00.000BF7r 2               ; STRING COMPARISON
00.000BF7r 2               ; ----------------------------------------------------------------------------
00.000BF7r 2               STRCMP:
00.000BF7r 2  A9 00                lda     #$00
00.000BF9r 2  85 0E                sta     VALTYP
00.000BFBr 2  C6 9A                dec     CPRTYP
00.000BFDr 2  20 rr rr             jsr     FREFAC
00.000C00r 2  85 AE                sta     FAC
00.000C02r 2  86 AF                stx     FAC+1
00.000C04r 2  84 B0                sty     FAC+2
00.000C06r 2  A5 B9                lda     ARG_LAST-1
00.000C08r 2  A4 BA                ldy     ARG_LAST
00.000C0Ar 2  20 rr rr             jsr     FRETMP
00.000C0Dr 2  86 B9                stx     ARG_LAST-1
00.000C0Fr 2  84 BA                sty     ARG_LAST
00.000C11r 2  AA                   tax
00.000C12r 2  38                   sec
00.000C13r 2  E5 AE                sbc     FAC
00.000C15r 2  F0 08                beq     L2E74
00.000C17r 2  A9 01                lda     #$01
00.000C19r 2  90 04                bcc     L2E74
00.000C1Br 2  A6 AE                ldx     FAC
00.000C1Dr 2  A9 FF                lda     #$FF
00.000C1Fr 2               L2E74:
00.000C1Fr 2  85 B3                sta     FACSIGN
00.000C21r 2  A0 FF                ldy     #$FF
00.000C23r 2  E8                   inx
00.000C24r 2               STRCMP1:
00.000C24r 2  C8                   iny
00.000C25r 2  CA                   dex
00.000C26r 2  D0 07                bne     L2E84
00.000C28r 2  A6 B3                ldx     FACSIGN
00.000C2Ar 2               NUMCMP:
00.000C2Ar 2  30 0F                bmi     CMPDONE
00.000C2Cr 2  18                   clc
00.000C2Dr 2  90 0C                bcc     CMPDONE
00.000C2Fr 2               L2E84:
00.000C2Fr 2  B1 B9                lda     (ARG_LAST-1),y
00.000C31r 2  D1 AF                cmp     (FAC+1),y
00.000C33r 2  F0 EF                beq     STRCMP1
00.000C35r 2  A2 FF                ldx     #$FF
00.000C37r 2  B0 02                bcs     CMPDONE
00.000C39r 2  A2 01                ldx     #$01
00.000C3Br 2               CMPDONE:
00.000C3Br 2  E8                   inx
00.000C3Cr 2  8A                   txa
00.000C3Dr 2  2A                   rol     a
00.000C3Er 2  25 13                and     CPRMASK
00.000C40r 2  F0 02                beq     L2E99
00.000C42r 2  A9 FF                lda     #$FF
00.000C44r 2               L2E99:
00.000C44r 2  4C rr rr             jmp     FLOAT
00.000C47r 2               
00.000C47r 1               .include "var.s"
00.000C47r 2               .segment "CODE"
00.000C47r 2               
00.000C47r 2               ; ----------------------------------------------------------------------------
00.000C47r 2               ; "DIM" STATEMENT
00.000C47r 2               ; ----------------------------------------------------------------------------
00.000C47r 2               NXDIM:
00.000C47r 2  20 rr rr             jsr     CHKCOM
00.000C4Ar 2               DIM:
00.000C4Ar 2  AA                   tax
00.000C4Br 2  20 rr rr             jsr     PTRGET2
00.000C4Er 2  20 C6 00             jsr     CHRGOT
00.000C51r 2  D0 F4                bne     NXDIM
00.000C53r 2  60                   rts
00.000C54r 2               
00.000C54r 2               ; ----------------------------------------------------------------------------
00.000C54r 2               ; PTRGET -- GENERAL VARIABLE SCAN
00.000C54r 2               ;
00.000C54r 2               ; SCANS VARIABLE NAME AT TXTPTR, AND SEARCHES THE
00.000C54r 2               ; VARTAB AND ARYTAB FOR THE NAME.
00.000C54r 2               ; IF NOT FOUND, CREATE VARIABLE OF APPROPRIATE TYPE.
00.000C54r 2               ; RETURN WITH ADDRESS IN VARPNT AND Y,A
00.000C54r 2               ;
00.000C54r 2               ; ACTUAL ACTIVITY CONTROLLED SOMEWHAT BY TWO FLAGS:
00.000C54r 2               ;	DIMFLG -- NONZERO IF CALLED FROM "DIM"
00.000C54r 2               ;		ELSE = 0
00.000C54r 2               ;
00.000C54r 2               ;	SUBFLG -- = $00
00.000C54r 2               ;		= $40 IF CALLED FROM "GETARYPT"
00.000C54r 2               ; ----------------------------------------------------------------------------
00.000C54r 2               PTRGET:
00.000C54r 2  A2 00                ldx     #$00
00.000C56r 2  20 C6 00             jsr     CHRGOT
00.000C59r 2               PTRGET2:
00.000C59r 2  86 0D                stx     DIMFLG
00.000C5Br 2               PTRGET3:
00.000C5Br 2  85 92                sta     VARNAM
00.000C5Dr 2  20 C6 00             jsr     CHRGOT
00.000C60r 2  20 rr rr             jsr     ISLETC
00.000C63r 2  B0 03                bcs     NAMOK
00.000C65r 2               SYNERR3:
00.000C65r 2  4C rr rr             jmp     SYNERR
00.000C68r 2               NAMOK:
00.000C68r 2  A2 00                ldx     #$00
00.000C6Ar 2  86 0E                stx     VALTYP
00.000C6Cr 2               .ifndef CONFIG_SMALL
00.000C6Cr 2  86 0F                stx     VALTYP+1
00.000C6Er 2               .endif
00.000C6Er 2  20 C0 00             jsr     CHRGET
00.000C71r 2  90 05                bcc     L2ECD
00.000C73r 2  20 rr rr             jsr     ISLETC
00.000C76r 2  90 0B                bcc     L2ED8
00.000C78r 2               L2ECD:
00.000C78r 2  AA                   tax
00.000C79r 2               L2ECE:
00.000C79r 2  20 C0 00             jsr     CHRGET
00.000C7Cr 2  90 FB                bcc     L2ECE
00.000C7Er 2  20 rr rr             jsr     ISLETC
00.000C81r 2  B0 F6                bcs     L2ECE
00.000C83r 2               L2ED8:
00.000C83r 2  C9 24                cmp     #$24
00.000C85r 2               .ifdef CONFIG_SMALL
00.000C85r 2                       bne     L2EF9
00.000C85r 2               .else
00.000C85r 2  D0 06                bne     L2EE2
00.000C87r 2               .endif
00.000C87r 2  A9 FF                lda     #$FF
00.000C89r 2  85 0E                sta     VALTYP
00.000C8Br 2               .ifndef CONFIG_SMALL
00.000C8Br 2  D0 10                bne     L2EF2
00.000C8Dr 2               L2EE2:
00.000C8Dr 2  C9 25                cmp     #$25
00.000C8Fr 2  D0 13                bne     L2EF9
00.000C91r 2  A5 11                lda     SUBFLG
00.000C93r 2  D0 D0                bne     SYNERR3
00.000C95r 2  A9 80                lda     #$80
00.000C97r 2  85 0F                sta     VALTYP+1
00.000C99r 2  05 92                ora     VARNAM
00.000C9Br 2  85 92                sta     VARNAM
00.000C9Dr 2               L2EF2:
00.000C9Dr 2               .endif
00.000C9Dr 2  8A                   txa
00.000C9Er 2  09 80                ora     #$80
00.000CA0r 2  AA                   tax
00.000CA1r 2  20 C0 00             jsr     CHRGET
00.000CA4r 2               L2EF9:
00.000CA4r 2  86 93                stx     VARNAM+1
00.000CA6r 2  38                   sec
00.000CA7r 2  05 11                ora     SUBFLG
00.000CA9r 2  E9 28                sbc     #$28
00.000CABr 2  D0 03                bne     L2F05
00.000CADr 2  4C rr rr             jmp     ARRAY
00.000CB0r 2               L2F05:
00.000CB0r 2  A9 00                lda     #$00
00.000CB2r 2  85 11                sta     SUBFLG
00.000CB4r 2  A5 7A                lda     VARTAB
00.000CB6r 2  A6 7B                ldx     VARTAB+1
00.000CB8r 2  A0 00                ldy     #$00
00.000CBAr 2               L2F0F:
00.000CBAr 2  86 AD                stx     LOWTR+1
00.000CBCr 2               L2F11:
00.000CBCr 2  85 AC                sta     LOWTR
00.000CBEr 2  E4 7D                cpx     ARYTAB+1
00.000CC0r 2  D0 04                bne     L2F1B
00.000CC2r 2  C5 7C                cmp     ARYTAB
00.000CC4r 2  F0 22                beq     NAMENOTFOUND
00.000CC6r 2               L2F1B:
00.000CC6r 2  A5 92                lda     VARNAM
00.000CC8r 2  D1 AC                cmp     (LOWTR),y
00.000CCAr 2  D0 08                bne     L2F29
00.000CCCr 2  A5 93                lda     VARNAM+1
00.000CCEr 2  C8                   iny
00.000CCFr 2  D1 AC                cmp     (LOWTR),y
00.000CD1r 2  F0 6C                beq     SET_VARPNT_AND_YA
00.000CD3r 2  88                   dey
00.000CD4r 2               L2F29:
00.000CD4r 2  18                   clc
00.000CD5r 2  A5 AC                lda     LOWTR
00.000CD7r 2  69 07                adc     #BYTES_PER_VARIABLE
00.000CD9r 2  90 E1                bcc     L2F11
00.000CDBr 2  E8                   inx
00.000CDCr 2  D0 DC                bne     L2F0F
00.000CDEr 2               
00.000CDEr 2               ; ----------------------------------------------------------------------------
00.000CDEr 2               ; CHECK IF (A) IS ASCII LETTER A-Z
00.000CDEr 2               ;
00.000CDEr 2               ; RETURN CARRY = 1 IF A-Z
00.000CDEr 2               ;	= 0 IF NOT
00.000CDEr 2               ; ----------------------------------------------------------------------------
00.000CDEr 2               ISLETC:
00.000CDEr 2  C9 41                cmp     #$41
00.000CE0r 2  90 05                bcc     L2F3C
00.000CE2r 2  E9 5B                sbc     #$5B
00.000CE4r 2  38                   sec
00.000CE5r 2  E9 A5                sbc     #$A5
00.000CE7r 2               L2F3C:
00.000CE7r 2  60                   rts
00.000CE8r 2               
00.000CE8r 2               ; ----------------------------------------------------------------------------
00.000CE8r 2               ; VARIABLE NOT FOUND, SO MAKE ONE
00.000CE8r 2               ; ----------------------------------------------------------------------------
00.000CE8r 2               NAMENOTFOUND:
00.000CE8r 2  68                   pla
00.000CE9r 2  48                   pha
00.000CEAr 2  C9 rr                cmp     #<FRM_VARIABLE_CALL
00.000CECr 2  D0 0F                bne     MAKENEWVARIABLE
00.000CEEr 2               .ifdef CONFIG_SAFE_NAMENOTFOUND
00.000CEEr 2  BA                   tsx
00.000CEFr 2  BD 02 01             lda     STACK+2,x
00.000CF2r 2  C9 rr                cmp     #>FRM_VARIABLE_CALL
00.000CF4r 2  D0 07                bne     MAKENEWVARIABLE
00.000CF6r 2               .endif
00.000CF6r 2               LD015:
00.000CF6r 2  A9 rr                lda     #<C_ZERO
00.000CF8r 2  A0 rr                ldy     #>C_ZERO
00.000CFAr 2  60                   rts
00.000CFBr 2               
00.000CFBr 2               ; ----------------------------------------------------------------------------
00.000CFBr 2               .ifndef CONFIG_2
00.000CFBr 2               C_ZERO:
00.000CFBr 2  00 00                .byte   $00,$00
00.000CFDr 2               .endif
00.000CFDr 2               
00.000CFDr 2               ; ----------------------------------------------------------------------------
00.000CFDr 2               ; MAKE A NEW SIMPLE VARIABLE
00.000CFDr 2               ;
00.000CFDr 2               ; MOVE ARRAYS UP 7 BYTES TO MAKE ROOM FOR NEW VARIABLE
00.000CFDr 2               ; ENTER 7-BYTE VARIABLE DATA IN THE HOLE
00.000CFDr 2               ; ----------------------------------------------------------------------------
00.000CFDr 2               MAKENEWVARIABLE:
00.000CFDr 2               .ifdef CONFIG_CBM_ALL
00.000CFDr 2                       lda     VARNAM
00.000CFDr 2                       ldy     VARNAM+1
00.000CFDr 2                       cmp     #$54
00.000CFDr 2                       bne     LD02F
00.000CFDr 2                       cpy     #$C9
00.000CFDr 2                       beq     LD015
00.000CFDr 2                       cpy     #$49
00.000CFDr 2                       bne     LD02F
00.000CFDr 2               LD02C:
00.000CFDr 2                       jmp     SYNERR
00.000CFDr 2               LD02F:
00.000CFDr 2                       cmp     #$53
00.000CFDr 2                       bne     LD037
00.000CFDr 2                       cpy     #$54
00.000CFDr 2                       beq     LD02C
00.000CFDr 2               LD037:
00.000CFDr 2               .endif
00.000CFDr 2  A5 7C                lda     ARYTAB
00.000CFFr 2  A4 7D                ldy     ARYTAB+1
00.000D01r 2  85 AC                sta     LOWTR
00.000D03r 2  84 AD                sty     LOWTR+1
00.000D05r 2  A5 7E                lda     STREND
00.000D07r 2  A4 7F                ldy     STREND+1
00.000D09r 2  85 A7                sta     HIGHTR
00.000D0Br 2  84 A8                sty     HIGHTR+1
00.000D0Dr 2  18                   clc
00.000D0Er 2  69 07                adc     #BYTES_PER_VARIABLE
00.000D10r 2  90 01                bcc     L2F68
00.000D12r 2  C8                   iny
00.000D13r 2               L2F68:
00.000D13r 2  85 A5                sta     HIGHDS
00.000D15r 2  84 A6                sty     HIGHDS+1
00.000D17r 2  20 rr rr             jsr     BLTU
00.000D1Ar 2  A5 A5                lda     HIGHDS
00.000D1Cr 2  A4 A6                ldy     HIGHDS+1
00.000D1Er 2  C8                   iny
00.000D1Fr 2  85 7C                sta     ARYTAB
00.000D21r 2  84 7D                sty     ARYTAB+1
00.000D23r 2  A0 00                ldy     #$00
00.000D25r 2  A5 92                lda     VARNAM
00.000D27r 2  91 AC                sta     (LOWTR),y
00.000D29r 2  C8                   iny
00.000D2Ar 2  A5 93                lda     VARNAM+1
00.000D2Cr 2  91 AC                sta     (LOWTR),y
00.000D2Er 2  A9 00                lda     #$00
00.000D30r 2  C8                   iny
00.000D31r 2  91 AC                sta     (LOWTR),y
00.000D33r 2  C8                   iny
00.000D34r 2  91 AC                sta     (LOWTR),y
00.000D36r 2  C8                   iny
00.000D37r 2  91 AC                sta     (LOWTR),y
00.000D39r 2  C8                   iny
00.000D3Ar 2  91 AC                sta     (LOWTR),y
00.000D3Cr 2               .ifndef CONFIG_SMALL
00.000D3Cr 2  C8                   iny
00.000D3Dr 2  91 AC                sta     (LOWTR),y
00.000D3Fr 2               .endif
00.000D3Fr 2               
00.000D3Fr 2               ; ----------------------------------------------------------------------------
00.000D3Fr 2               ; PUT ADDRESS OF VALUE OF VARIABLE IN VARPNT AND Y,A
00.000D3Fr 2               ; ----------------------------------------------------------------------------
00.000D3Fr 2               SET_VARPNT_AND_YA:
00.000D3Fr 2  A5 AC                lda     LOWTR
00.000D41r 2  18                   clc
00.000D42r 2  69 02                adc     #$02
00.000D44r 2  A4 AD                ldy     LOWTR+1
00.000D46r 2  90 01                bcc     L2F9E
00.000D48r 2  C8                   iny
00.000D49r 2               L2F9E:
00.000D49r 2  85 94                sta     VARPNT
00.000D4Br 2  84 95                sty     VARPNT+1
00.000D4Dr 2  60                   rts
00.000D4Er 2               
00.000D4Er 1               .include "array.s"
00.000D4Er 2               .segment "CODE"
00.000D4Er 2               
00.000D4Er 2               ; ----------------------------------------------------------------------------
00.000D4Er 2               ; COMPUTE ADDRESS OF FIRST VALUE IN ARRAY
00.000D4Er 2               ; ARYPNT = (LOWTR) + #DIMS*2 + 5
00.000D4Er 2               ; ----------------------------------------------------------------------------
00.000D4Er 2               GETARY:
00.000D4Er 2  A5 0C                lda     EOLPNTR
00.000D50r 2  0A                   asl     a
00.000D51r 2  69 05                adc     #$05
00.000D53r 2  65 AC                adc     LOWTR
00.000D55r 2  A4 AD                ldy     LOWTR+1
00.000D57r 2  90 01                bcc     L2FAF
00.000D59r 2  C8                   iny
00.000D5Ar 2               L2FAF:
00.000D5Ar 2  85 A5                sta     HIGHDS
00.000D5Cr 2  84 A6                sty     HIGHDS+1
00.000D5Er 2  60                   rts
00.000D5Fr 2               
00.000D5Fr 2               ; ----------------------------------------------------------------------------
00.000D5Fr 2               NEG32768:
00.000D5Fr 2  90 80 00 00          .byte   $90,$80,$00,$00
00.000D63r 2               
00.000D63r 2               .ifdef CONFIG_2C
00.000D63r 2               		.byte	$00; bugfix: short number
00.000D63r 2               .endif
00.000D63r 2               
00.000D63r 2               ; ----------------------------------------------------------------------------
00.000D63r 2               ; EVALUATE NUMERIC FORMULA AT TXTPTR
00.000D63r 2               ; CONVERTING RESULT TO INTEGER 0 <= X <= 32767
00.000D63r 2               ; IN FAC+3,4
00.000D63r 2               ; ----------------------------------------------------------------------------
00.000D63r 2               MAKINT:
00.000D63r 2  20 C0 00             jsr     CHRGET
00.000D66r 2               .ifdef CONFIG_2
00.000D66r 2                       jsr     FRMEVL
00.000D66r 2               .else
00.000D66r 2  20 rr rr             jsr     FRMNUM
00.000D69r 2               .endif
00.000D69r 2               
00.000D69r 2               ; ----------------------------------------------------------------------------
00.000D69r 2               ; CONVERT FAC TO INTEGER
00.000D69r 2               ; MUST BE POSITIVE AND LESS THAN 32768
00.000D69r 2               ; ----------------------------------------------------------------------------
00.000D69r 2               MKINT:
00.000D69r 2               .ifdef CONFIG_2
00.000D69r 2                       jsr     CHKNUM
00.000D69r 2               .endif
00.000D69r 2  A5 B3                lda     FACSIGN
00.000D6Br 2  30 0D                bmi     MI1
00.000D6Dr 2               
00.000D6Dr 2               ; ----------------------------------------------------------------------------
00.000D6Dr 2               ; CONVERT FAC TO INTEGER
00.000D6Dr 2               ; MUST BE -32767 <= FAC <= 32767
00.000D6Dr 2               ; ----------------------------------------------------------------------------
00.000D6Dr 2               AYINT:
00.000D6Dr 2  A5 AE                lda     FAC
00.000D6Fr 2  C9 90                cmp     #$90
00.000D71r 2  90 09                bcc     MI2
00.000D73r 2  A9 rr                lda     #<NEG32768
00.000D75r 2  A0 rr                ldy     #>NEG32768
00.000D77r 2  20 rr rr             jsr     FCOMP
00.000D7Ar 2               MI1:
00.000D7Ar 2  D0 7A                bne     IQERR
00.000D7Cr 2               MI2:
00.000D7Cr 2  4C rr rr             jmp     QINT
00.000D7Fr 2               
00.000D7Fr 2               ; ----------------------------------------------------------------------------
00.000D7Fr 2               ; LOCATE ARRAY ELEMENT OR CREATE AN ARRAY
00.000D7Fr 2               ; ----------------------------------------------------------------------------
00.000D7Fr 2               ARRAY:
00.000D7Fr 2  A5 0D                lda     DIMFLG
00.000D81r 2               .ifndef CONFIG_SMALL
00.000D81r 2  05 0F                ora     VALTYP+1
00.000D83r 2               .endif
00.000D83r 2  48                   pha
00.000D84r 2  A5 0E                lda     VALTYP
00.000D86r 2  48                   pha
00.000D87r 2  A0 00                ldy     #$00
00.000D89r 2               L2FDE:
00.000D89r 2  98                   tya
00.000D8Ar 2  48                   pha
00.000D8Br 2  A5 93                lda     VARNAM+1
00.000D8Dr 2  48                   pha
00.000D8Er 2  A5 92                lda     VARNAM
00.000D90r 2  48                   pha
00.000D91r 2  20 rr rr             jsr     MAKINT
00.000D94r 2  68                   pla
00.000D95r 2  85 92                sta     VARNAM
00.000D97r 2  68                   pla
00.000D98r 2  85 93                sta     VARNAM+1
00.000D9Ar 2  68                   pla
00.000D9Br 2  A8                   tay
00.000D9Cr 2  BA                   tsx
00.000D9Dr 2  BD 02 01             lda     STACK+2,x
00.000DA0r 2  48                   pha
00.000DA1r 2  BD 01 01             lda     STACK+1,x
00.000DA4r 2  48                   pha
00.000DA5r 2  A5 B1                lda     FAC_LAST-1
00.000DA7r 2  9D 02 01             sta     STACK+2,x
00.000DAAr 2  A5 B2                lda     FAC_LAST
00.000DACr 2  9D 01 01             sta     STACK+1,x
00.000DAFr 2  C8                   iny
00.000DB0r 2  20 C6 00             jsr     CHRGOT
00.000DB3r 2  C9 2C                cmp     #$2C
00.000DB5r 2  F0 D2                beq     L2FDE
00.000DB7r 2  84 0C                sty     EOLPNTR
00.000DB9r 2  20 rr rr             jsr     CHKCLS
00.000DBCr 2  68                   pla
00.000DBDr 2  85 0E                sta     VALTYP
00.000DBFr 2  68                   pla
00.000DC0r 2               .ifndef CONFIG_SMALL
00.000DC0r 2  85 0F                sta     VALTYP+1
00.000DC2r 2  29 7F                and     #$7F
00.000DC4r 2               .endif
00.000DC4r 2  85 0D                sta     DIMFLG
00.000DC6r 2               ; ----------------------------------------------------------------------------
00.000DC6r 2               ; SEARCH ARRAY TABLE FOR THIS ARRAY NAME
00.000DC6r 2               ; ----------------------------------------------------------------------------
00.000DC6r 2  A6 7C                ldx     ARYTAB
00.000DC8r 2  A5 7D                lda     ARYTAB+1
00.000DCAr 2               L301F:
00.000DCAr 2  86 AC                stx     LOWTR
00.000DCCr 2  85 AD                sta     LOWTR+1
00.000DCEr 2  C5 7F                cmp     STREND+1
00.000DD0r 2  D0 04                bne     L302B
00.000DD2r 2  E4 7E                cpx     STREND
00.000DD4r 2  F0 39                beq     MAKE_NEW_ARRAY
00.000DD6r 2               L302B:
00.000DD6r 2  A0 00                ldy     #$00
00.000DD8r 2  B1 AC                lda     (LOWTR),y
00.000DDAr 2  C8                   iny
00.000DDBr 2  C5 92                cmp     VARNAM
00.000DDDr 2  D0 06                bne     L303A
00.000DDFr 2  A5 93                lda     VARNAM+1
00.000DE1r 2  D1 AC                cmp     (LOWTR),y
00.000DE3r 2  F0 16                beq     USE_OLD_ARRAY
00.000DE5r 2               L303A:
00.000DE5r 2  C8                   iny
00.000DE6r 2  B1 AC                lda     (LOWTR),y
00.000DE8r 2  18                   clc
00.000DE9r 2  65 AC                adc     LOWTR
00.000DEBr 2  AA                   tax
00.000DECr 2  C8                   iny
00.000DEDr 2  B1 AC                lda     (LOWTR),y
00.000DEFr 2  65 AD                adc     LOWTR+1
00.000DF1r 2  90 D7                bcc     L301F
00.000DF3r 2               
00.000DF3r 2               ; ----------------------------------------------------------------------------
00.000DF3r 2               ; ERROR:  BAD SUBSCRIPTS
00.000DF3r 2               ; ----------------------------------------------------------------------------
00.000DF3r 2               SUBERR:
00.000DF3r 2  A2 6B                ldx     #ERR_BADSUBS
00.000DF5r 2  2C                   .byte   $2C
00.000DF6r 2               
00.000DF6r 2               ; ----------------------------------------------------------------------------
00.000DF6r 2               ; ERROR:  ILLEGAL QUANTITY
00.000DF6r 2               ; ----------------------------------------------------------------------------
00.000DF6r 2               IQERR:
00.000DF6r 2  A2 35                ldx     #ERR_ILLQTY
00.000DF8r 2               JER:
00.000DF8r 2  4C rr rr             jmp     ERROR
00.000DFBr 2               
00.000DFBr 2               ; ----------------------------------------------------------------------------
00.000DFBr 2               ; FOUND THE ARRAY
00.000DFBr 2               ; ----------------------------------------------------------------------------
00.000DFBr 2               USE_OLD_ARRAY:
00.000DFBr 2  A2 78                ldx     #ERR_REDIMD
00.000DFDr 2  A5 0D                lda     DIMFLG
00.000DFFr 2  D0 F7                bne     JER
00.000E01r 2  20 rr rr             jsr     GETARY
00.000E04r 2  A5 0C                lda     EOLPNTR
00.000E06r 2  A0 04                ldy     #$04
00.000E08r 2  D1 AC                cmp     (LOWTR),y
00.000E0Ar 2  D0 E7                bne     SUBERR
00.000E0Cr 2  4C rr rr             jmp     FIND_ARRAY_ELEMENT
00.000E0Fr 2               
00.000E0Fr 2               ; ----------------------------------------------------------------------------
00.000E0Fr 2               ; CREATE A NEW ARRAY, UNLESS CALLED FROM GETARYPT
00.000E0Fr 2               ; ----------------------------------------------------------------------------
00.000E0Fr 2               MAKE_NEW_ARRAY:
00.000E0Fr 2  20 rr rr             jsr     GETARY
00.000E12r 2  20 rr rr             jsr     REASON
00.000E15r 2  A9 00                lda     #$00
00.000E17r 2  A8                   tay
00.000E18r 2  85 BF                sta     STRNG2+1
00.000E1Ar 2  A2 05                ldx     #BYTES_PER_ELEMENT
00.000E1Cr 2               .if .def(CONFIG_SMALL) && (!.def(CONFIG_2))
00.000E1Cr 2                       stx     STRNG2
00.000E1Cr 2               .endif
00.000E1Cr 2  A5 92                lda     VARNAM
00.000E1Er 2  91 AC                sta     (LOWTR),y
00.000E20r 2               .ifndef CONFIG_SMALL
00.000E20r 2  10 01                bpl     L3078
00.000E22r 2  CA                   dex
00.000E23r 2               L3078:
00.000E23r 2               .endif
00.000E23r 2  C8                   iny
00.000E24r 2  A5 93                lda     VARNAM+1
00.000E26r 2  91 AC                sta     (LOWTR),y
00.000E28r 2               .if (!.def(CONFIG_SMALL)) || .def(CONFIG_2)
00.000E28r 2  10 02                bpl     L3081
00.000E2Ar 2  CA                   dex
00.000E2Br 2                 .if !(.def(CONFIG_SMALL) && .def(CONFIG_2))
00.000E2Br 2  CA                   dex
00.000E2Cr 2                 .endif
00.000E2Cr 2               L3081:
00.000E2Cr 2  86 BE                stx     STRNG2
00.000E2Er 2               .endif
00.000E2Er 2  A5 0C                lda     EOLPNTR
00.000E30r 2  C8                   iny
00.000E31r 2  C8                   iny
00.000E32r 2  C8                   iny
00.000E33r 2  91 AC                sta     (LOWTR),y
00.000E35r 2               L308A:
00.000E35r 2  A2 0B                ldx     #$0B
00.000E37r 2  A9 00                lda     #$00
00.000E39r 2  24 0D                bit     DIMFLG
00.000E3Br 2  50 08                bvc     L309A
00.000E3Dr 2  68                   pla
00.000E3Er 2  18                   clc
00.000E3Fr 2  69 01                adc     #$01
00.000E41r 2  AA                   tax
00.000E42r 2  68                   pla
00.000E43r 2  69 00                adc     #$00
00.000E45r 2               L309A:
00.000E45r 2  C8                   iny
00.000E46r 2  91 AC                sta     (LOWTR),y
00.000E48r 2  C8                   iny
00.000E49r 2  8A                   txa
00.000E4Ar 2  91 AC                sta     (LOWTR),y
00.000E4Cr 2  20 rr rr             jsr     MULTIPLY_SUBSCRIPT
00.000E4Fr 2  86 BE                stx     STRNG2
00.000E51r 2  85 BF                sta     STRNG2+1
00.000E53r 2  A4 6F                ldy     INDEX
00.000E55r 2  C6 0C                dec     EOLPNTR
00.000E57r 2  D0 DC                bne     L308A
00.000E59r 2  65 A6                adc     HIGHDS+1
00.000E5Br 2  B0 5D                bcs     GME
00.000E5Dr 2  85 A6                sta     HIGHDS+1
00.000E5Fr 2  A8                   tay
00.000E60r 2  8A                   txa
00.000E61r 2  65 A5                adc     HIGHDS
00.000E63r 2  90 03                bcc     L30BD
00.000E65r 2  C8                   iny
00.000E66r 2  F0 52                beq     GME
00.000E68r 2               L30BD:
00.000E68r 2  20 rr rr             jsr     REASON
00.000E6Br 2  85 7E                sta     STREND
00.000E6Dr 2  84 7F                sty     STREND+1
00.000E6Fr 2  A9 00                lda     #$00
00.000E71r 2  E6 BF                inc     STRNG2+1
00.000E73r 2  A4 BE                ldy     STRNG2
00.000E75r 2  F0 05                beq     L30D1
00.000E77r 2               L30CC:
00.000E77r 2  88                   dey
00.000E78r 2  91 A5                sta     (HIGHDS),y
00.000E7Ar 2  D0 FB                bne     L30CC
00.000E7Cr 2               L30D1:
00.000E7Cr 2  C6 A6                dec     HIGHDS+1
00.000E7Er 2  C6 BF                dec     STRNG2+1
00.000E80r 2  D0 F5                bne     L30CC
00.000E82r 2  E6 A6                inc     HIGHDS+1
00.000E84r 2  38                   sec
00.000E85r 2  A5 7E                lda     STREND
00.000E87r 2  E5 AC                sbc     LOWTR
00.000E89r 2  A0 02                ldy     #$02
00.000E8Br 2  91 AC                sta     (LOWTR),y
00.000E8Dr 2  A5 7F                lda     STREND+1
00.000E8Fr 2  C8                   iny
00.000E90r 2  E5 AD                sbc     LOWTR+1
00.000E92r 2  91 AC                sta     (LOWTR),y
00.000E94r 2  A5 0D                lda     DIMFLG
00.000E96r 2  D0 62                bne     RTS9
00.000E98r 2  C8                   iny
00.000E99r 2               
00.000E99r 2               ; ----------------------------------------------------------------------------
00.000E99r 2               ; FIND SPECIFIED ARRAY ELEMENT
00.000E99r 2               ;
00.000E99r 2               ; (LOWTR),Y POINTS AT # OF DIMS IN ARRAY DESCRIPTOR
00.000E99r 2               ; THE SUBSCRIPTS ARE ALL ON THE STACK AS INTEGERS
00.000E99r 2               ; ----------------------------------------------------------------------------
00.000E99r 2               FIND_ARRAY_ELEMENT:
00.000E99r 2  B1 AC                lda     (LOWTR),y
00.000E9Br 2  85 0C                sta     EOLPNTR
00.000E9Dr 2  A9 00                lda     #$00
00.000E9Fr 2  85 BE                sta     STRNG2
00.000EA1r 2               L30F6:
00.000EA1r 2  85 BF                sta     STRNG2+1
00.000EA3r 2  C8                   iny
00.000EA4r 2  68                   pla
00.000EA5r 2  AA                   tax
00.000EA6r 2  85 B1                sta     FAC_LAST-1
00.000EA8r 2  68                   pla
00.000EA9r 2  85 B2                sta     FAC_LAST
00.000EABr 2  D1 AC                cmp     (LOWTR),y
00.000EADr 2  90 0E                bcc     FAE2
00.000EAFr 2  D0 06                bne     GSE
00.000EB1r 2  C8                   iny
00.000EB2r 2  8A                   txa
00.000EB3r 2  D1 AC                cmp     (LOWTR),y
00.000EB5r 2  90 07                bcc     FAE3
00.000EB7r 2               ; ----------------------------------------------------------------------------
00.000EB7r 2               GSE:
00.000EB7r 2  4C rr rr             jmp     SUBERR
00.000EBAr 2               GME:
00.000EBAr 2  4C rr rr             jmp     MEMERR
00.000EBDr 2               ; ----------------------------------------------------------------------------
00.000EBDr 2               FAE2:
00.000EBDr 2  C8                   iny
00.000EBEr 2               FAE3:
00.000EBEr 2  A5 BF                lda     STRNG2+1
00.000EC0r 2  05 BE                ora     STRNG2
00.000EC2r 2  18                   clc
00.000EC3r 2  F0 0A                beq     L3124
00.000EC5r 2  20 rr rr             jsr     MULTIPLY_SUBSCRIPT
00.000EC8r 2  8A                   txa
00.000EC9r 2  65 B1                adc     FAC_LAST-1
00.000ECBr 2  AA                   tax
00.000ECCr 2  98                   tya
00.000ECDr 2  A4 6F                ldy     INDEX
00.000ECFr 2               L3124:
00.000ECFr 2  65 B2                adc     FAC_LAST
00.000ED1r 2  86 BE                stx     STRNG2
00.000ED3r 2  C6 0C                dec     EOLPNTR
00.000ED5r 2  D0 CA                bne     L30F6
00.000ED7r 2               .if .def(CONFIG_SMALL) && (!.def(CONFIG_2))
00.000ED7r 2                       asl     STRNG2
00.000ED7r 2                       rol     a
00.000ED7r 2                       bcs     GSE
00.000ED7r 2                       asl     STRNG2
00.000ED7r 2                       rol     a
00.000ED7r 2                       bcs     GSE
00.000ED7r 2                       tay
00.000ED7r 2                       lda     STRNG2
00.000ED7r 2               .else
00.000ED7r 2                 .ifdef CONFIG_11A
00.000ED7r 2  85 BF                sta     STRNG2+1
00.000ED9r 2                 .endif
00.000ED9r 2  A2 05                ldx     #BYTES_FP
00.000EDBr 2                 .ifdef CONFIG_SMALL
00.000EDBr 2                       lda     VARNAM+1
00.000EDBr 2                 .else
00.000EDBr 2  A5 92                lda     VARNAM
00.000EDDr 2                 .endif
00.000EDDr 2  10 01                bpl     L3135
00.000EDFr 2  CA                   dex
00.000EE0r 2               L3135:
00.000EE0r 2                 .ifdef CONFIG_SMALL
00.000EE0r 2                       stx     RESULT+1
00.000EE0r 2                 .else
00.000EE0r 2  A5 93                lda     VARNAM+1
00.000EE2r 2  10 02                bpl     L313B
00.000EE4r 2  CA                   dex
00.000EE5r 2  CA                   dex
00.000EE6r 2               L313B:
00.000EE6r 2  86 75                stx     RESULT+2
00.000EE8r 2                 .endif
00.000EE8r 2  A9 00                lda     #$00
00.000EEAr 2  20 rr rr             jsr     MULTIPLY_SUBS1
00.000EEDr 2  8A                   txa
00.000EEEr 2               .endif
00.000EEEr 2  65 A5                adc     HIGHDS
00.000EF0r 2  85 94                sta     VARPNT
00.000EF2r 2  98                   tya
00.000EF3r 2  65 A6                adc     HIGHDS+1
00.000EF5r 2  85 95                sta     VARPNT+1
00.000EF7r 2  A8                   tay
00.000EF8r 2  A5 94                lda     VARPNT
00.000EFAr 2               RTS9:
00.000EFAr 2  60                   rts
00.000EFBr 2               
00.000EFBr 2               ; ----------------------------------------------------------------------------
00.000EFBr 2               ; MULTIPLY (STRNG2) BY ((LOWTR),Y)
00.000EFBr 2               ; LEAVING PRODUCT IN A,X.  (HI-BYTE ALSO IN Y.)
00.000EFBr 2               ; USED ONLY BY ARRAY SUBSCRIPT ROUTINES
00.000EFBr 2               ; ----------------------------------------------------------------------------
00.000EFBr 2               MULTIPLY_SUBSCRIPT:
00.000EFBr 2  84 6F                sty     INDEX
00.000EFDr 2  B1 AC                lda     (LOWTR),y
00.000EFFr 2  85 75                sta     RESULT_LAST-2
00.000F01r 2  88                   dey
00.000F02r 2  B1 AC                lda     (LOWTR),y
00.000F04r 2               MULTIPLY_SUBS1:
00.000F04r 2  85 76                sta     RESULT_LAST-1
00.000F06r 2  A9 10                lda     #$10
00.000F08r 2  85 AA                sta     INDX
00.000F0Ar 2  A2 00                ldx     #$00
00.000F0Cr 2  A0 00                ldy     #$00
00.000F0Er 2               L3163:
00.000F0Er 2  8A                   txa
00.000F0Fr 2  0A                   asl     a
00.000F10r 2  AA                   tax
00.000F11r 2  98                   tya
00.000F12r 2  2A                   rol     a
00.000F13r 2  A8                   tay
00.000F14r 2  B0 A4                bcs     GME
00.000F16r 2  06 BE                asl     STRNG2
00.000F18r 2  26 BF                rol     STRNG2+1
00.000F1Ar 2  90 0B                bcc     L317C
00.000F1Cr 2  18                   clc
00.000F1Dr 2  8A                   txa
00.000F1Er 2  65 75                adc     RESULT_LAST-2
00.000F20r 2  AA                   tax
00.000F21r 2  98                   tya
00.000F22r 2  65 76                adc     RESULT_LAST-1
00.000F24r 2  A8                   tay
00.000F25r 2  B0 93                bcs     GME
00.000F27r 2               L317C:
00.000F27r 2  C6 AA                dec     INDX
00.000F29r 2  D0 E3                bne     L3163
00.000F2Br 2  60                   rts
00.000F2Cr 2               
00.000F2Cr 2               
00.000F2Cr 1               .include "misc2.s"
00.000F2Cr 2               .segment "CODE"
00.000F2Cr 2               
00.000F2Cr 2               ; ----------------------------------------------------------------------------
00.000F2Cr 2               ; "FRE" FUNCTION
00.000F2Cr 2               ;
00.000F2Cr 2               ; COLLECTS GARBAGE AND RETURNS # BYTES OF MEMORY LEFT
00.000F2Cr 2               ; ----------------------------------------------------------------------------
00.000F2Cr 2               FRE:
00.000F2Cr 2  A5 0E                lda     VALTYP
00.000F2Er 2  F0 03                beq     L3188
00.000F30r 2  20 rr rr             jsr     FREFAC
00.000F33r 2               L3188:
00.000F33r 2  20 rr rr             jsr     GARBAG
00.000F36r 2  38                   sec
00.000F37r 2  A5 80                lda     FRETOP
00.000F39r 2  E5 7E                sbc     STREND
00.000F3Br 2  A8                   tay
00.000F3Cr 2  A5 81                lda     FRETOP+1
00.000F3Er 2  E5 7F                sbc     STREND+1
00.000F40r 2               ; FALL INTO GIVAYF TO FLOAT THE VALUE
00.000F40r 2               ; NOTE THAT VALUES OVER 32767 WILL RETURN AS NEGATIVE
00.000F40r 2               
00.000F40r 2               ; ----------------------------------------------------------------------------
00.000F40r 2               ; FLOAT THE SIGNED INTEGER IN A,Y
00.000F40r 2               ; ----------------------------------------------------------------------------
00.000F40r 2               GIVAYF:
00.000F40r 2  A2 00                ldx     #$00
00.000F42r 2  86 0E                stx     VALTYP
00.000F44r 2  85 AF                sta     FAC+1
00.000F46r 2  84 B0                sty     FAC+2
00.000F48r 2  A2 90                ldx     #$90
00.000F4Ar 2  4C rr rr             jmp     FLOAT1
00.000F4Dr 2               POS:
00.000F4Dr 2  A4 16                ldy     POSX
00.000F4Fr 2               
00.000F4Fr 2               ; ----------------------------------------------------------------------------
00.000F4Fr 2               ; FLOAT (Y) INTO FAC, GIVING VALUE 0-255
00.000F4Fr 2               ; ----------------------------------------------------------------------------
00.000F4Fr 2               SNGFLT:
00.000F4Fr 2  A9 00                lda     #$00
00.000F51r 2  F0 ED                beq     GIVAYF
00.000F53r 2               
00.000F53r 2               ; ----------------------------------------------------------------------------
00.000F53r 2               ; CHECK FOR DIRECT OR RUNNING MODE
00.000F53r 2               ; GIVING ERROR IF DIRECT MODE
00.000F53r 2               ; ----------------------------------------------------------------------------
00.000F53r 2               ERRDIR:
00.000F53r 2  A6 87                ldx     CURLIN+1
00.000F55r 2  E8                   inx
00.000F56r 2  D0 A2                bne     RTS9
00.000F58r 2  A2 95                ldx     #ERR_ILLDIR
00.000F5Ar 2               .ifdef CONFIG_2
00.000F5Ar 2                       .byte   $2C
00.000F5Ar 2               LD288:
00.000F5Ar 2                       ldx     #ERR_UNDEFFN
00.000F5Ar 2               .endif
00.000F5Ar 2               L31AF:
00.000F5Ar 2  4C rr rr             jmp     ERROR
00.000F5Dr 2               DEF:
00.000F5Dr 2  20 rr rr             jsr     FNC
00.000F60r 2  20 rr rr             jsr     ERRDIR
00.000F63r 2  20 rr rr             jsr     CHKOPN
00.000F66r 2  A9 80                lda     #$80
00.000F68r 2  85 11                sta     SUBFLG
00.000F6Ar 2  20 rr rr             jsr     PTRGET
00.000F6Dr 2  20 rr rr             jsr     CHKNUM
00.000F70r 2  20 rr rr             jsr     CHKCLS
00.000F73r 2  A9 AC                lda     #TOKEN_EQUAL
00.000F75r 2  20 rr rr             jsr     SYNCHR
00.000F78r 2               .ifndef CONFIG_SMALL
00.000F78r 2  48                   pha
00.000F79r 2               .endif
00.000F79r 2  A5 95                lda     VARPNT+1
00.000F7Br 2  48                   pha
00.000F7Cr 2  A5 94                lda     VARPNT
00.000F7Er 2  48                   pha
00.000F7Fr 2  A5 C8                lda     TXTPTR+1
00.000F81r 2  48                   pha
00.000F82r 2  A5 C7                lda     TXTPTR
00.000F84r 2  48                   pha
00.000F85r 2  20 rr rr             jsr     DATA
00.000F88r 2  4C rr rr             jmp     L3250
00.000F8Br 2               FNC:
00.000F8Br 2  A9 9F                lda     #TOKEN_FN
00.000F8Dr 2  20 rr rr             jsr     SYNCHR
00.000F90r 2  09 80                ora     #$80
00.000F92r 2  85 11                sta     SUBFLG
00.000F94r 2  20 rr rr             jsr     PTRGET3
00.000F97r 2  85 9B                sta     FNCNAM
00.000F99r 2  84 9C                sty     FNCNAM+1
00.000F9Br 2  4C rr rr             jmp     CHKNUM
00.000F9Er 2               L31F3:
00.000F9Er 2  20 rr rr             jsr     FNC
00.000FA1r 2  A5 9C                lda     FNCNAM+1
00.000FA3r 2  48                   pha
00.000FA4r 2  A5 9B                lda     FNCNAM
00.000FA6r 2  48                   pha
00.000FA7r 2  20 rr rr             jsr     PARCHK
00.000FAAr 2  20 rr rr             jsr     CHKNUM
00.000FADr 2  68                   pla
00.000FAEr 2  85 9B                sta     FNCNAM
00.000FB0r 2  68                   pla
00.000FB1r 2  85 9C                sta     FNCNAM+1
00.000FB3r 2  A0 02                ldy     #$02
00.000FB5r 2               .ifndef CONFIG_2
00.000FB5r 2  A2 E0                ldx     #ERR_UNDEFFN
00.000FB7r 2               .endif
00.000FB7r 2  B1 9B                lda     (FNCNAM),y
00.000FB9r 2               .ifndef CONFIG_2
00.000FB9r 2  F0 9F                beq     L31AF
00.000FBBr 2               .endif
00.000FBBr 2  85 94                sta     VARPNT
00.000FBDr 2  AA                   tax
00.000FBEr 2  C8                   iny
00.000FBFr 2  B1 9B                lda     (FNCNAM),y
00.000FC1r 2               .ifdef CONFIG_2
00.000FC1r 2                       beq     LD288
00.000FC1r 2               .endif
00.000FC1r 2  85 95                sta     VARPNT+1
00.000FC3r 2               .ifndef CONFIG_SMALL
00.000FC3r 2  C8                   iny
00.000FC4r 2               .endif
00.000FC4r 2               L3219:
00.000FC4r 2  B1 94                lda     (VARPNT),y
00.000FC6r 2  48                   pha
00.000FC7r 2  88                   dey
00.000FC8r 2  10 FA                bpl     L3219
00.000FCAr 2  A4 95                ldy     VARPNT+1
00.000FCCr 2  20 rr rr             jsr     STORE_FAC_AT_YX_ROUNDED
00.000FCFr 2  A5 C8                lda     TXTPTR+1
00.000FD1r 2  48                   pha
00.000FD2r 2  A5 C7                lda     TXTPTR
00.000FD4r 2  48                   pha
00.000FD5r 2  B1 9B                lda     (FNCNAM),y
00.000FD7r 2  85 C7                sta     TXTPTR
00.000FD9r 2  C8                   iny
00.000FDAr 2  B1 9B                lda     (FNCNAM),y
00.000FDCr 2  85 C8                sta     TXTPTR+1
00.000FDEr 2  A5 95                lda     VARPNT+1
00.000FE0r 2  48                   pha
00.000FE1r 2  A5 94                lda     VARPNT
00.000FE3r 2  48                   pha
00.000FE4r 2  20 rr rr             jsr     FRMNUM
00.000FE7r 2  68                   pla
00.000FE8r 2  85 9B                sta     FNCNAM
00.000FEAr 2  68                   pla
00.000FEBr 2  85 9C                sta     FNCNAM+1
00.000FEDr 2  20 C6 00             jsr     CHRGOT
00.000FF0r 2  F0 03                beq     L324A
00.000FF2r 2  4C rr rr             jmp     SYNERR
00.000FF5r 2               L324A:
00.000FF5r 2  68                   pla
00.000FF6r 2  85 C7                sta     TXTPTR
00.000FF8r 2  68                   pla
00.000FF9r 2  85 C8                sta     TXTPTR+1
00.000FFBr 2               L3250:
00.000FFBr 2  A0 00                ldy     #$00
00.000FFDr 2  68                   pla
00.000FFEr 2  91 9B                sta     (FNCNAM),y
00.001000r 2  68                   pla
00.001001r 2  C8                   iny
00.001002r 2  91 9B                sta     (FNCNAM),y
00.001004r 2  68                   pla
00.001005r 2  C8                   iny
00.001006r 2  91 9B                sta     (FNCNAM),y
00.001008r 2  68                   pla
00.001009r 2  C8                   iny
00.00100Ar 2  91 9B                sta     (FNCNAM),y
00.00100Cr 2               .ifndef CONFIG_SMALL
00.00100Cr 2  68                   pla
00.00100Dr 2  C8                   iny
00.00100Er 2  91 9B                sta     (FNCNAM),y
00.001010r 2               .endif
00.001010r 2  60                   rts
00.001011r 2               
00.001011r 1               .include "string.s"
00.001011r 2               .segment "CODE"
00.001011r 2               ; ----------------------------------------------------------------------------
00.001011r 2               ; "STR$" FUNCTION
00.001011r 2               ; ----------------------------------------------------------------------------
00.001011r 2               STR:
00.001011r 2  20 rr rr             jsr     CHKNUM
00.001014r 2  A0 00                ldy     #$00
00.001016r 2  20 rr rr             jsr     FOUT1
00.001019r 2  68                   pla
00.00101Ar 2  68                   pla
00.00101Br 2               LD353:
00.00101Br 2  A9 FF                lda     #$FF
00.00101Dr 2  A0 00                ldy     #$00
00.00101Fr 2  F0 12                beq     STRLIT
00.001021r 2               
00.001021r 2               ; ----------------------------------------------------------------------------
00.001021r 2               ; GET SPACE AND MAKE DESCRIPTOR FOR STRING WHOSE
00.001021r 2               ; ADDRESS IS IN FAC+3,4 AND WHOSE LENGTH IS IN A-REG
00.001021r 2               ; ----------------------------------------------------------------------------
00.001021r 2               STRINI:
00.001021r 2  A6 B1                ldx     FAC_LAST-1
00.001023r 2  A4 B2                ldy     FAC_LAST
00.001025r 2  86 9D                stx     DSCPTR
00.001027r 2  84 9E                sty     DSCPTR+1
00.001029r 2               
00.001029r 2               ; ----------------------------------------------------------------------------
00.001029r 2               ; GET SPACE AND MAKE DESCRIPTOR FOR STRING WHOSE
00.001029r 2               ; ADDRESS IS IN Y,X AND WHOSE LENGTH IS IN A-REG
00.001029r 2               ; ----------------------------------------------------------------------------
00.001029r 2               STRSPA:
00.001029r 2  20 rr rr             jsr     GETSPA
00.00102Cr 2  86 AF                stx     FAC+1
00.00102Er 2  84 B0                sty     FAC+2
00.001030r 2  85 AE                sta     FAC
00.001032r 2  60                   rts
00.001033r 2               
00.001033r 2               ; ----------------------------------------------------------------------------
00.001033r 2               ; BUILD A DESCRIPTOR FOR STRING STARTING AT Y,A
00.001033r 2               ; AND TERMINATED BY $00 OR QUOTATION MARK
00.001033r 2               ; RETURN WITH DESCRIPTOR IN A TEMPORARY
00.001033r 2               ; AND ADDRESS OF DESCRIPTOR IN FAC+3,4
00.001033r 2               ; ----------------------------------------------------------------------------
00.001033r 2               STRLIT:
00.001033r 2  A2 22                ldx     #$22
00.001035r 2  86 0A                stx     CHARAC
00.001037r 2  86 0B                stx     ENDCHR
00.001039r 2               
00.001039r 2               ; ----------------------------------------------------------------------------
00.001039r 2               ; BUILD A DESCRIPTOR FOR STRING STARTING AT Y,A
00.001039r 2               ; AND TERMINATED BY $00, (CHARAC), OR (ENDCHR)
00.001039r 2               ;
00.001039r 2               ; RETURN WITH DESCRIPTOR IN A TEMPORARY
00.001039r 2               ; AND ADDRESS OF DESCRIPTOR IN FAC+3,4
00.001039r 2               ; ----------------------------------------------------------------------------
00.001039r 2               STRLT2:
00.001039r 2  85 BC                sta     STRNG1
00.00103Br 2  84 BD                sty     STRNG1+1
00.00103Dr 2  85 AF                sta     FAC+1
00.00103Fr 2  84 B0                sty     FAC+2
00.001041r 2  A0 FF                ldy     #$FF
00.001043r 2               L3298:
00.001043r 2  C8                   iny
00.001044r 2  B1 BC                lda     (STRNG1),y
00.001046r 2  F0 0C                beq     L32A9
00.001048r 2  C5 0A                cmp     CHARAC
00.00104Ar 2  F0 04                beq     L32A5
00.00104Cr 2  C5 0B                cmp     ENDCHR
00.00104Er 2  D0 F3                bne     L3298
00.001050r 2               L32A5:
00.001050r 2  C9 22                cmp     #$22
00.001052r 2  F0 01                beq     L32AA
00.001054r 2               L32A9:
00.001054r 2  18                   clc
00.001055r 2               L32AA:
00.001055r 2  84 AE                sty     FAC
00.001057r 2  98                   tya
00.001058r 2  65 BC                adc     STRNG1
00.00105Ar 2  85 BE                sta     STRNG2
00.00105Cr 2  A6 BD                ldx     STRNG1+1
00.00105Er 2  90 01                bcc     L32B6
00.001060r 2  E8                   inx
00.001061r 2               L32B6:
00.001061r 2  86 BF                stx     STRNG2+1
00.001063r 2  A5 BD                lda     STRNG1+1
00.001065r 2               .ifdef CONFIG_NO_INPUTBUFFER_ZP
00.001065r 2                       beq     LD399
00.001065r 2                       cmp     #>INPUTBUFFER
00.001065r 2               .endif
00.001065r 2  D0 0B                bne     PUTNEW
00.001067r 2               LD399:
00.001067r 2  98                   tya
00.001068r 2  20 rr rr             jsr     STRINI
00.00106Br 2  A6 BC                ldx     STRNG1
00.00106Dr 2  A4 BD                ldy     STRNG1+1
00.00106Fr 2  20 rr rr             jsr     MOVSTR
00.001072r 2               
00.001072r 2               ; ----------------------------------------------------------------------------
00.001072r 2               ; STORE DESCRIPTOR IN TEMPORARY DESCRIPTOR STACK
00.001072r 2               ;
00.001072r 2               ; THE DESCRIPTOR IS NOW IN FAC, FAC+1, FAC+2
00.001072r 2               ; PUT ADDRESS OF TEMP DESCRIPTOR IN FAC+3,4
00.001072r 2               ; ----------------------------------------------------------------------------
00.001072r 2               PUTNEW:
00.001072r 2  A6 63                ldx     TEMPPT
00.001074r 2  E0 6F                cpx     #TEMPST+9
00.001076r 2  D0 05                bne     PUTEMP
00.001078r 2  A2 BF                ldx     #ERR_FRMCPX
00.00107Ar 2               JERR:
00.00107Ar 2  4C rr rr             jmp     ERROR
00.00107Dr 2               PUTEMP:
00.00107Dr 2  A5 AE                lda     FAC
00.00107Fr 2  95 00                sta     0,x
00.001081r 2  A5 AF                lda     FAC+1
00.001083r 2  95 01                sta     1,x
00.001085r 2  A5 B0                lda     FAC+2
00.001087r 2  95 02                sta     2,x
00.001089r 2  A0 00                ldy     #$00
00.00108Br 2  86 B1                stx     FAC_LAST-1
00.00108Dr 2  84 B2                sty     FAC_LAST
00.00108Fr 2               .ifdef CONFIG_2
00.00108Fr 2                       sty     FACEXTENSION
00.00108Fr 2               .endif
00.00108Fr 2  88                   dey
00.001090r 2  84 0E                sty     VALTYP
00.001092r 2  86 64                stx     LASTPT
00.001094r 2  E8                   inx
00.001095r 2  E8                   inx
00.001096r 2  E8                   inx
00.001097r 2  86 63                stx     TEMPPT
00.001099r 2  60                   rts
00.00109Ar 2               
00.00109Ar 2               ; ----------------------------------------------------------------------------
00.00109Ar 2               ; MAKE SPACE FOR STRING AT BOTTOM OF STRING SPACE
00.00109Ar 2               ; (A)=# BYTES SPACE TO MAKE
00.00109Ar 2               ;
00.00109Ar 2               ; RETURN WITH (A) SAME,
00.00109Ar 2               ;	AND Y,X = ADDRESS OF SPACE ALLOCATED
00.00109Ar 2               ; ----------------------------------------------------------------------------
00.00109Ar 2               GETSPA:
00.00109Ar 2  46 10                lsr     DATAFLG
00.00109Cr 2               L32F1:
00.00109Cr 2  48                   pha
00.00109Dr 2  49 FF                eor     #$FF
00.00109Fr 2  38                   sec
00.0010A0r 2  65 80                adc     FRETOP
00.0010A2r 2  A4 81                ldy     FRETOP+1
00.0010A4r 2  B0 01                bcs     L32FC
00.0010A6r 2  88                   dey
00.0010A7r 2               L32FC:
00.0010A7r 2  C4 7F                cpy     STREND+1
00.0010A9r 2  90 11                bcc     L3311
00.0010ABr 2  D0 04                bne     L3306
00.0010ADr 2  C5 7E                cmp     STREND
00.0010AFr 2  90 0B                bcc     L3311
00.0010B1r 2               L3306:
00.0010B1r 2  85 80                sta     FRETOP
00.0010B3r 2  84 81                sty     FRETOP+1
00.0010B5r 2  85 82                sta     FRESPC
00.0010B7r 2  84 83                sty     FRESPC+1
00.0010B9r 2  AA                   tax
00.0010BAr 2  68                   pla
00.0010BBr 2  60                   rts
00.0010BCr 2               L3311:
00.0010BCr 2  A2 4D                ldx     #ERR_MEMFULL
00.0010BEr 2  A5 10                lda     DATAFLG
00.0010C0r 2  30 B8                bmi     JERR
00.0010C2r 2  20 rr rr             jsr     GARBAG
00.0010C5r 2  A9 80                lda     #$80
00.0010C7r 2  85 10                sta     DATAFLG
00.0010C9r 2  68                   pla
00.0010CAr 2  D0 D0                bne     L32F1
00.0010CCr 2               
00.0010CCr 2               ; ----------------------------------------------------------------------------
00.0010CCr 2               ; SHOVE ALL REFERENCED STRINGS AS HIGH AS POSSIBLE
00.0010CCr 2               ; IN MEMORY (AGAINST HIMEM), FREEING UP SPACE
00.0010CCr 2               ; BELOW STRING AREA DOWN TO STREND.
00.0010CCr 2               ; ----------------------------------------------------------------------------
00.0010CCr 2               GARBAG:
00.0010CCr 2               
00.0010CCr 2               .ifdef CONST_MEMSIZ
00.0010CCr 2                       ldx     #<CONST_MEMSIZ
00.0010CCr 2                       lda     #>CONST_MEMSIZ
00.0010CCr 2               .else
00.0010CCr 2  A6 84                ldx     MEMSIZ
00.0010CEr 2  A5 85                lda     MEMSIZ+1
00.0010D0r 2               .endif
00.0010D0r 2               FINDHIGHESTSTRING:
00.0010D0r 2  86 80                stx     FRETOP
00.0010D2r 2  85 81                sta     FRETOP+1
00.0010D4r 2  A0 00                ldy     #$00
00.0010D6r 2  84 9C                sty     FNCNAM+1
00.0010D8r 2               .ifdef CONFIG_2
00.0010D8r 2                       sty     FNCNAM	; GC bugfix!
00.0010D8r 2               .endif
00.0010D8r 2  A5 7E                lda     STREND
00.0010DAr 2  A6 7F                ldx     STREND+1
00.0010DCr 2  85 AC                sta     LOWTR
00.0010DEr 2  86 AD                stx     LOWTR+1
00.0010E0r 2  A9 66                lda     #TEMPST
00.0010E2r 2  A2 00                ldx     #$00
00.0010E4r 2  85 6F                sta     INDEX
00.0010E6r 2  86 70                stx     INDEX+1
00.0010E8r 2               L333D:
00.0010E8r 2  C5 63                cmp     TEMPPT
00.0010EAr 2  F0 05                beq     L3346
00.0010ECr 2  20 rr rr             jsr     CHECK_VARIABLE
00.0010EFr 2  F0 F7                beq     L333D
00.0010F1r 2               L3346:
00.0010F1r 2  A9 07                lda     #BYTES_PER_VARIABLE
00.0010F3r 2  85 A0                sta     DSCLEN
00.0010F5r 2  A5 7A                lda     VARTAB
00.0010F7r 2  A6 7B                ldx     VARTAB+1
00.0010F9r 2  85 6F                sta     INDEX
00.0010FBr 2  86 70                stx     INDEX+1
00.0010FDr 2               L3352:
00.0010FDr 2  E4 7D                cpx     ARYTAB+1
00.0010FFr 2  D0 04                bne     L335A
00.001101r 2  C5 7C                cmp     ARYTAB
00.001103r 2  F0 05                beq     L335F
00.001105r 2               L335A:
00.001105r 2  20 rr rr             jsr     CHECK_SIMPLE_VARIABLE
00.001108r 2  F0 F3                beq     L3352
00.00110Ar 2               L335F:
00.00110Ar 2  85 A5                sta     HIGHDS
00.00110Cr 2  86 A6                stx     HIGHDS+1
00.00110Er 2  A9 03                lda     #$03	; OSI GC bugfix -> $04 ???
00.001110r 2  85 A0                sta     DSCLEN
00.001112r 2               L3367:
00.001112r 2  A5 A5                lda     HIGHDS
00.001114r 2  A6 A6                ldx     HIGHDS+1
00.001116r 2               L336B:
00.001116r 2  E4 7F                cpx     STREND+1
00.001118r 2  D0 07                bne     L3376
00.00111Ar 2  C5 7E                cmp     STREND
00.00111Cr 2  D0 03                bne     L3376
00.00111Er 2  4C rr rr             jmp     MOVE_HIGHEST_STRING_TO_TOP
00.001121r 2               L3376:
00.001121r 2  85 6F                sta     INDEX
00.001123r 2  86 70                stx     INDEX+1
00.001125r 2               .ifdef CONFIG_SMALL
00.001125r 2                       ldy     #$01
00.001125r 2               .else
00.001125r 2  A0 00                ldy     #$00
00.001127r 2  B1 6F                lda     (INDEX),y
00.001129r 2  AA                   tax
00.00112Ar 2  C8                   iny
00.00112Br 2               .endif
00.00112Br 2  B1 6F                lda     (INDEX),y
00.00112Dr 2  08                   php
00.00112Er 2  C8                   iny
00.00112Fr 2  B1 6F                lda     (INDEX),y
00.001131r 2  65 A5                adc     HIGHDS
00.001133r 2  85 A5                sta     HIGHDS
00.001135r 2  C8                   iny
00.001136r 2  B1 6F                lda     (INDEX),y
00.001138r 2  65 A6                adc     HIGHDS+1
00.00113Ar 2  85 A6                sta     HIGHDS+1
00.00113Cr 2  28                   plp
00.00113Dr 2  10 D3                bpl     L3367
00.00113Fr 2               .ifndef CONFIG_SMALL
00.00113Fr 2  8A                   txa
00.001140r 2  30 D0                bmi     L3367
00.001142r 2               .endif
00.001142r 2  C8                   iny
00.001143r 2  B1 6F                lda     (INDEX),y
00.001145r 2               .ifdef CONFIG_CBM1_PATCHES
00.001145r 2                       jsr     LE7F3 ; XXX patch, call into screen editor
00.001145r 2               .else
00.001145r 2                 .ifdef CONFIG_11
00.001145r 2  A0 00                ldy     #$00	; GC bugfix
00.001147r 2                 .endif
00.001147r 2  0A                   asl     a
00.001148r 2  69 05                adc     #$05
00.00114Ar 2               .endif
00.00114Ar 2  65 6F                adc     INDEX
00.00114Cr 2  85 6F                sta     INDEX
00.00114Er 2  90 02                bcc     L33A7
00.001150r 2  E6 70                inc     INDEX+1
00.001152r 2               L33A7:
00.001152r 2  A6 70                ldx     INDEX+1
00.001154r 2               L33A9:
00.001154r 2  E4 A6                cpx     HIGHDS+1
00.001156r 2  D0 04                bne     L33B1
00.001158r 2  C5 A5                cmp     HIGHDS
00.00115Ar 2  F0 BA                beq     L336B
00.00115Cr 2               L33B1:
00.00115Cr 2  20 rr rr             jsr     CHECK_VARIABLE
00.00115Fr 2  F0 F3                beq     L33A9
00.001161r 2               
00.001161r 2               ; ----------------------------------------------------------------------------
00.001161r 2               ; PROCESS A SIMPLE VARIABLE
00.001161r 2               ; ----------------------------------------------------------------------------
00.001161r 2               CHECK_SIMPLE_VARIABLE:
00.001161r 2               .ifndef CONFIG_SMALL
00.001161r 2  B1 6F                lda     (INDEX),y
00.001163r 2  30 35                bmi     CHECK_BUMP
00.001165r 2               .endif
00.001165r 2  C8                   iny
00.001166r 2  B1 6F                lda     (INDEX),y
00.001168r 2  10 30                bpl     CHECK_BUMP
00.00116Ar 2  C8                   iny
00.00116Br 2               
00.00116Br 2               ; ----------------------------------------------------------------------------
00.00116Br 2               ; IF STRING IS NOT EMPTY, CHECK IF IT IS HIGHEST
00.00116Br 2               ; ----------------------------------------------------------------------------
00.00116Br 2               CHECK_VARIABLE:
00.00116Br 2  B1 6F                lda     (INDEX),y
00.00116Dr 2  F0 2B                beq     CHECK_BUMP
00.00116Fr 2  C8                   iny
00.001170r 2  B1 6F                lda     (INDEX),y
00.001172r 2  AA                   tax
00.001173r 2  C8                   iny
00.001174r 2  B1 6F                lda     (INDEX),y
00.001176r 2  C5 81                cmp     FRETOP+1
00.001178r 2  90 06                bcc     L33D5
00.00117Ar 2  D0 1E                bne     CHECK_BUMP
00.00117Cr 2  E4 80                cpx     FRETOP
00.00117Er 2  B0 1A                bcs     CHECK_BUMP
00.001180r 2               L33D5:
00.001180r 2  C5 AD                cmp     LOWTR+1
00.001182r 2  90 16                bcc     CHECK_BUMP
00.001184r 2  D0 04                bne     L33DF
00.001186r 2  E4 AC                cpx     LOWTR
00.001188r 2  90 10                bcc     CHECK_BUMP
00.00118Ar 2               L33DF:
00.00118Ar 2  86 AC                stx     LOWTR
00.00118Cr 2  85 AD                sta     LOWTR+1
00.00118Er 2  A5 6F                lda     INDEX
00.001190r 2  A6 70                ldx     INDEX+1
00.001192r 2  85 9B                sta     FNCNAM
00.001194r 2  86 9C                stx     FNCNAM+1
00.001196r 2  A5 A0                lda     DSCLEN
00.001198r 2  85 A2                sta     Z52
00.00119Ar 2               
00.00119Ar 2               ; ----------------------------------------------------------------------------
00.00119Ar 2               ; ADD (DSCLEN) TO PNTR IN INDEX
00.00119Ar 2               ; RETURN WITH Y=0, PNTR ALSO IN X,A
00.00119Ar 2               ; ----------------------------------------------------------------------------
00.00119Ar 2               CHECK_BUMP:
00.00119Ar 2  A5 A0                lda     DSCLEN
00.00119Cr 2  18                   clc
00.00119Dr 2  65 6F                adc     INDEX
00.00119Fr 2  85 6F                sta     INDEX
00.0011A1r 2  90 02                bcc     L33FA
00.0011A3r 2  E6 70                inc     INDEX+1
00.0011A5r 2               L33FA:
00.0011A5r 2  A6 70                ldx     INDEX+1
00.0011A7r 2  A0 00                ldy     #$00
00.0011A9r 2  60                   rts
00.0011AAr 2               
00.0011AAr 2               ; ----------------------------------------------------------------------------
00.0011AAr 2               ; FOUND HIGHEST NON-EMPTY STRING, SO MOVE IT
00.0011AAr 2               ; TO TOP AND GO BACK FOR ANOTHER
00.0011AAr 2               ; ----------------------------------------------------------------------------
00.0011AAr 2               MOVE_HIGHEST_STRING_TO_TOP:
00.0011AAr 2               .ifdef CONFIG_2
00.0011AAr 2                       lda     FNCNAM+1	; GC bugfix
00.0011AAr 2                       ora     FNCNAM
00.0011AAr 2               .else
00.0011AAr 2  A6 9C                ldx     FNCNAM+1
00.0011ACr 2               .endif
00.0011ACr 2  F0 F7                beq     L33FA
00.0011AEr 2  A5 A2                lda     Z52
00.0011B0r 2               .ifndef CONFIG_10A
00.0011B0r 2                       sbc     #$03
00.0011B0r 2               .else
00.0011B0r 2  29 04                and     #$04
00.0011B2r 2               .endif
00.0011B2r 2  4A                   lsr     a
00.0011B3r 2  A8                   tay
00.0011B4r 2  85 A2                sta     Z52
00.0011B6r 2  B1 9B                lda     (FNCNAM),y
00.0011B8r 2  65 AC                adc     LOWTR
00.0011BAr 2  85 A7                sta     HIGHTR
00.0011BCr 2  A5 AD                lda     LOWTR+1
00.0011BEr 2  69 00                adc     #$00
00.0011C0r 2  85 A8                sta     HIGHTR+1
00.0011C2r 2  A5 80                lda     FRETOP
00.0011C4r 2  A6 81                ldx     FRETOP+1
00.0011C6r 2  85 A5                sta     HIGHDS
00.0011C8r 2  86 A6                stx     HIGHDS+1
00.0011CAr 2  20 rr rr             jsr     BLTU2
00.0011CDr 2  A4 A2                ldy     Z52
00.0011CFr 2  C8                   iny
00.0011D0r 2  A5 A5                lda     HIGHDS
00.0011D2r 2  91 9B                sta     (FNCNAM),y
00.0011D4r 2  AA                   tax
00.0011D5r 2  E6 A6                inc     HIGHDS+1
00.0011D7r 2  A5 A6                lda     HIGHDS+1
00.0011D9r 2  C8                   iny
00.0011DAr 2  91 9B                sta     (FNCNAM),y
00.0011DCr 2  4C rr rr             jmp     FINDHIGHESTSTRING
00.0011DFr 2               
00.0011DFr 2               ; ----------------------------------------------------------------------------
00.0011DFr 2               ; CONCATENATE TWO STRINGS
00.0011DFr 2               ; ----------------------------------------------------------------------------
00.0011DFr 2               CAT:
00.0011DFr 2  A5 B2                lda     FAC_LAST
00.0011E1r 2  48                   pha
00.0011E2r 2  A5 B1                lda     FAC_LAST-1
00.0011E4r 2  48                   pha
00.0011E5r 2  20 rr rr             jsr     FRM_ELEMENT
00.0011E8r 2  20 rr rr             jsr     CHKSTR
00.0011EBr 2  68                   pla
00.0011ECr 2  85 BC                sta     STRNG1
00.0011EEr 2  68                   pla
00.0011EFr 2  85 BD                sta     STRNG1+1
00.0011F1r 2  A0 00                ldy     #$00
00.0011F3r 2  B1 BC                lda     (STRNG1),y
00.0011F5r 2  18                   clc
00.0011F6r 2  71 B1                adc     (FAC_LAST-1),y
00.0011F8r 2  90 05                bcc     L3454
00.0011FAr 2  A2 B0                ldx     #ERR_STRLONG
00.0011FCr 2  4C rr rr             jmp     ERROR
00.0011FFr 2               L3454:
00.0011FFr 2  20 rr rr             jsr     STRINI
00.001202r 2  20 rr rr             jsr     MOVINS
00.001205r 2  A5 9D                lda     DSCPTR
00.001207r 2  A4 9E                ldy     DSCPTR+1
00.001209r 2  20 rr rr             jsr     FRETMP
00.00120Cr 2  20 rr rr             jsr     MOVSTR1
00.00120Fr 2  A5 BC                lda     STRNG1
00.001211r 2  A4 BD                ldy     STRNG1+1
00.001213r 2  20 rr rr             jsr     FRETMP
00.001216r 2  20 rr rr             jsr     PUTNEW
00.001219r 2  4C rr rr             jmp     FRMEVL2
00.00121Cr 2               
00.00121Cr 2               ; ----------------------------------------------------------------------------
00.00121Cr 2               ; GET STRING DESCRIPTOR POINTED AT BY (STRNG1)
00.00121Cr 2               ; AND MOVE DESCRIBED STRING TO (FRESPC)
00.00121Cr 2               ; ----------------------------------------------------------------------------
00.00121Cr 2               MOVINS:
00.00121Cr 2  A0 00                ldy     #$00
00.00121Er 2  B1 BC                lda     (STRNG1),y
00.001220r 2  48                   pha
00.001221r 2  C8                   iny
00.001222r 2  B1 BC                lda     (STRNG1),y
00.001224r 2  AA                   tax
00.001225r 2  C8                   iny
00.001226r 2  B1 BC                lda     (STRNG1),y
00.001228r 2  A8                   tay
00.001229r 2  68                   pla
00.00122Ar 2               
00.00122Ar 2               ; ----------------------------------------------------------------------------
00.00122Ar 2               ; MOVE STRING AT (Y,X) WITH LENGTH (A)
00.00122Ar 2               ; TO DESTINATION WHOSE ADDRESS IS IN FRESPC,FRESPC+1
00.00122Ar 2               ; ----------------------------------------------------------------------------
00.00122Ar 2               MOVSTR:
00.00122Ar 2  86 6F                stx     INDEX
00.00122Cr 2  84 70                sty     INDEX+1
00.00122Er 2               MOVSTR1:
00.00122Er 2  A8                   tay
00.00122Fr 2  F0 0A                beq     L3490
00.001231r 2  48                   pha
00.001232r 2               L3487:
00.001232r 2  88                   dey
00.001233r 2  B1 6F                lda     (INDEX),y
00.001235r 2  91 82                sta     (FRESPC),y
00.001237r 2  98                   tya
00.001238r 2  D0 F8                bne     L3487
00.00123Ar 2  68                   pla
00.00123Br 2               L3490:
00.00123Br 2  18                   clc
00.00123Cr 2  65 82                adc     FRESPC
00.00123Er 2  85 82                sta     FRESPC
00.001240r 2  90 02                bcc     L3499
00.001242r 2  E6 83                inc     FRESPC+1
00.001244r 2               L3499:
00.001244r 2  60                   rts
00.001245r 2               
00.001245r 2               ; ----------------------------------------------------------------------------
00.001245r 2               ; IF (FAC) IS A TEMPORARY STRING, RELEASE DESCRIPTOR
00.001245r 2               ; ----------------------------------------------------------------------------
00.001245r 2               FRESTR:
00.001245r 2  20 rr rr             jsr     CHKSTR
00.001248r 2               
00.001248r 2               ; ----------------------------------------------------------------------------
00.001248r 2               ; IF STRING DESCRIPTOR POINTED TO BY FAC+3,4 IS
00.001248r 2               ; A TEMPORARY STRING, RELEASE IT.
00.001248r 2               ; ----------------------------------------------------------------------------
00.001248r 2               FREFAC:
00.001248r 2  A5 B1                lda     FAC_LAST-1
00.00124Ar 2  A4 B2                ldy     FAC_LAST
00.00124Cr 2               
00.00124Cr 2               ; ----------------------------------------------------------------------------
00.00124Cr 2               ; IF STRING DESCRIPTOR WHOSE ADDRESS IS IN Y,A IS
00.00124Cr 2               ; A TEMPORARY STRING, RELEASE IT.
00.00124Cr 2               ; ----------------------------------------------------------------------------
00.00124Cr 2               FRETMP:
00.00124Cr 2  85 6F                sta     INDEX
00.00124Er 2  84 70                sty     INDEX+1
00.001250r 2  20 rr rr             jsr     FRETMS
00.001253r 2  08                   php
00.001254r 2  A0 00                ldy     #$00
00.001256r 2  B1 6F                lda     (INDEX),y
00.001258r 2  48                   pha
00.001259r 2  C8                   iny
00.00125Ar 2  B1 6F                lda     (INDEX),y
00.00125Cr 2  AA                   tax
00.00125Dr 2  C8                   iny
00.00125Er 2  B1 6F                lda     (INDEX),y
00.001260r 2  A8                   tay
00.001261r 2  68                   pla
00.001262r 2  28                   plp
00.001263r 2  D0 13                bne     L34CD
00.001265r 2  C4 81                cpy     FRETOP+1
00.001267r 2  D0 0F                bne     L34CD
00.001269r 2  E4 80                cpx     FRETOP
00.00126Br 2  D0 0B                bne     L34CD
00.00126Dr 2  48                   pha
00.00126Er 2  18                   clc
00.00126Fr 2  65 80                adc     FRETOP
00.001271r 2  85 80                sta     FRETOP
00.001273r 2  90 02                bcc     L34CC
00.001275r 2  E6 81                inc     FRETOP+1
00.001277r 2               L34CC:
00.001277r 2  68                   pla
00.001278r 2               L34CD:
00.001278r 2  86 6F                stx     INDEX
00.00127Ar 2  84 70                sty     INDEX+1
00.00127Cr 2  60                   rts
00.00127Dr 2               
00.00127Dr 2               ; ----------------------------------------------------------------------------
00.00127Dr 2               ; RELEASE TEMPORARY DESCRIPTOR IF Y,A = LASTPT
00.00127Dr 2               ; ----------------------------------------------------------------------------
00.00127Dr 2               FRETMS:
00.00127Dr 2               .ifdef KBD
00.00127Dr 2                       cpy     #$00
00.00127Dr 2               .else
00.00127Dr 2  C4 65                cpy     LASTPT+1
00.00127Fr 2               .endif
00.00127Fr 2  D0 0C                bne     L34E2
00.001281r 2  C5 64                cmp     LASTPT
00.001283r 2  D0 08                bne     L34E2
00.001285r 2  85 63                sta     TEMPPT
00.001287r 2  E9 03                sbc     #$03
00.001289r 2  85 64                sta     LASTPT
00.00128Br 2  A0 00                ldy     #$00
00.00128Dr 2               L34E2:
00.00128Dr 2  60                   rts
00.00128Er 2               
00.00128Er 2               ; ----------------------------------------------------------------------------
00.00128Er 2               ; "CHR$" FUNCTION
00.00128Er 2               ; ----------------------------------------------------------------------------
00.00128Er 2               CHRSTR:
00.00128Er 2  20 rr rr             jsr     CONINT
00.001291r 2  8A                   txa
00.001292r 2  48                   pha
00.001293r 2  A9 01                lda     #$01
00.001295r 2  20 rr rr             jsr     STRSPA
00.001298r 2  68                   pla
00.001299r 2  A0 00                ldy     #$00
00.00129Br 2  91 AF                sta     (FAC+1),y
00.00129Dr 2  68                   pla
00.00129Er 2  68                   pla
00.00129Fr 2  4C rr rr             jmp     PUTNEW
00.0012A2r 2               
00.0012A2r 2               ; ----------------------------------------------------------------------------
00.0012A2r 2               ; "LEFT$" FUNCTION
00.0012A2r 2               ; ----------------------------------------------------------------------------
00.0012A2r 2               LEFTSTR:
00.0012A2r 2  20 rr rr             jsr     SUBSTRING_SETUP
00.0012A5r 2  D1 9D                cmp     (DSCPTR),y
00.0012A7r 2  98                   tya
00.0012A8r 2               SUBSTRING1:
00.0012A8r 2  90 04                bcc     L3503
00.0012AAr 2  B1 9D                lda     (DSCPTR),y
00.0012ACr 2  AA                   tax
00.0012ADr 2  98                   tya
00.0012AEr 2               L3503:
00.0012AEr 2  48                   pha
00.0012AFr 2               SUBSTRING2:
00.0012AFr 2  8A                   txa
00.0012B0r 2               SUBSTRING3:
00.0012B0r 2  48                   pha
00.0012B1r 2  20 rr rr             jsr     STRSPA
00.0012B4r 2  A5 9D                lda     DSCPTR
00.0012B6r 2  A4 9E                ldy     DSCPTR+1
00.0012B8r 2  20 rr rr             jsr     FRETMP
00.0012BBr 2  68                   pla
00.0012BCr 2  A8                   tay
00.0012BDr 2  68                   pla
00.0012BEr 2  18                   clc
00.0012BFr 2  65 6F                adc     INDEX
00.0012C1r 2  85 6F                sta     INDEX
00.0012C3r 2  90 02                bcc     L351C
00.0012C5r 2  E6 70                inc     INDEX+1
00.0012C7r 2               L351C:
00.0012C7r 2  98                   tya
00.0012C8r 2  20 rr rr             jsr     MOVSTR1
00.0012CBr 2  4C rr rr             jmp     PUTNEW
00.0012CEr 2               
00.0012CEr 2               ; ----------------------------------------------------------------------------
00.0012CEr 2               ; "RIGHT$" FUNCTION
00.0012CEr 2               ; ----------------------------------------------------------------------------
00.0012CEr 2               RIGHTSTR:
00.0012CEr 2  20 rr rr             jsr     SUBSTRING_SETUP
00.0012D1r 2  18                   clc
00.0012D2r 2  F1 9D                sbc     (DSCPTR),y
00.0012D4r 2  49 FF                eor     #$FF
00.0012D6r 2  4C rr rr             jmp     SUBSTRING1
00.0012D9r 2               
00.0012D9r 2               ; ----------------------------------------------------------------------------
00.0012D9r 2               ; "MID$" FUNCTION
00.0012D9r 2               ; ----------------------------------------------------------------------------
00.0012D9r 2               MIDSTR:
00.0012D9r 2  A9 FF                lda     #$FF
00.0012DBr 2  85 B2                sta     FAC_LAST
00.0012DDr 2  20 C6 00             jsr     CHRGOT
00.0012E0r 2  C9 29                cmp     #$29
00.0012E2r 2  F0 06                beq     L353F
00.0012E4r 2  20 rr rr             jsr     CHKCOM
00.0012E7r 2  20 rr rr             jsr     GETBYT
00.0012EAr 2               L353F:
00.0012EAr 2  20 rr rr             jsr     SUBSTRING_SETUP
00.0012EDr 2               .ifdef CONFIG_2
00.0012EDr 2                       beq     GOIQ
00.0012EDr 2               .endif
00.0012EDr 2  CA                   dex
00.0012EEr 2  8A                   txa
00.0012EFr 2  48                   pha
00.0012F0r 2  18                   clc
00.0012F1r 2  A2 00                ldx     #$00
00.0012F3r 2  F1 9D                sbc     (DSCPTR),y
00.0012F5r 2  B0 B8                bcs     SUBSTRING2
00.0012F7r 2  49 FF                eor     #$FF
00.0012F9r 2  C5 B2                cmp     FAC_LAST
00.0012FBr 2  90 B3                bcc     SUBSTRING3
00.0012FDr 2  A5 B2                lda     FAC_LAST
00.0012FFr 2  B0 AF                bcs     SUBSTRING3
00.001301r 2               
00.001301r 2               ; ----------------------------------------------------------------------------
00.001301r 2               ; COMMON SETUP ROUTINE FOR LEFT$, RIGHT$, MID$:
00.001301r 2               ; REQUIRE ")"; POP RETURN ADRS, GET DESCRIPTOR
00.001301r 2               ; ADDRESS, GET 1ST PARAMETER OF COMMAND
00.001301r 2               ; ----------------------------------------------------------------------------
00.001301r 2               SUBSTRING_SETUP:
00.001301r 2  20 rr rr             jsr     CHKCLS
00.001304r 2  68                   pla
00.001305r 2               .ifndef CONFIG_11
00.001305r 2                       sta     JMPADRS+1
00.001305r 2                       pla
00.001305r 2                       sta     JMPADRS+2
00.001305r 2               .else
00.001305r 2  A8                   tay
00.001306r 2  68                   pla
00.001307r 2  85 A2                sta     Z52
00.001309r 2               .endif
00.001309r 2  68                   pla
00.00130Ar 2  68                   pla
00.00130Br 2  68                   pla
00.00130Cr 2  AA                   tax
00.00130Dr 2  68                   pla
00.00130Er 2  85 9D                sta     DSCPTR
00.001310r 2  68                   pla
00.001311r 2  85 9E                sta     DSCPTR+1
00.001313r 2               .ifdef CONFIG_11
00.001313r 2  A5 A2                lda     Z52
00.001315r 2  48                   pha
00.001316r 2  98                   tya
00.001317r 2  48                   pha
00.001318r 2               .endif
00.001318r 2  A0 00                ldy     #$00
00.00131Ar 2  8A                   txa
00.00131Br 2               .ifndef CONFIG_2
00.00131Br 2  F0 1D                beq     GOIQ
00.00131Dr 2               .endif
00.00131Dr 2               .ifndef CONFIG_11
00.00131Dr 2                       inc     JMPADRS+1
00.00131Dr 2                       jmp     (JMPADRS+1)
00.00131Dr 2               .else
00.00131Dr 2  60                   rts
00.00131Er 2               .endif
00.00131Er 2               
00.00131Er 2               ; ----------------------------------------------------------------------------
00.00131Er 2               ; "LEN" FUNCTION
00.00131Er 2               ; ----------------------------------------------------------------------------
00.00131Er 2               LEN:
00.00131Er 2  20 rr rr             jsr     GETSTR
00.001321r 2               SNGFLT1:
00.001321r 2  4C rr rr             jmp     SNGFLT
00.001324r 2               
00.001324r 2               ; ----------------------------------------------------------------------------
00.001324r 2               ; IF LAST RESULT IS A TEMPORARY STRING, FREE IT
00.001324r 2               ; MAKE VALTYP NUMERIC, RETURN LENGTH IN Y-REG
00.001324r 2               ; ----------------------------------------------------------------------------
00.001324r 2               GETSTR:
00.001324r 2  20 rr rr             jsr     FRESTR
00.001327r 2  A2 00                ldx     #$00
00.001329r 2  86 0E                stx     VALTYP
00.00132Br 2  A8                   tay
00.00132Cr 2  60                   rts
00.00132Dr 2               
00.00132Dr 2               ; ----------------------------------------------------------------------------
00.00132Dr 2               ; "ASC" FUNCTION
00.00132Dr 2               ; ----------------------------------------------------------------------------
00.00132Dr 2               ASC:
00.00132Dr 2  20 rr rr             jsr     GETSTR
00.001330r 2  F0 08                beq     GOIQ
00.001332r 2  A0 00                ldy     #$00
00.001334r 2  B1 6F                lda     (INDEX),y
00.001336r 2  A8                   tay
00.001337r 2               .ifndef CONFIG_11A
00.001337r 2                       jmp     SNGFLT1
00.001337r 2               .else
00.001337r 2  4C rr rr             jmp     SNGFLT
00.00133Ar 2               .endif
00.00133Ar 2               ; ----------------------------------------------------------------------------
00.00133Ar 2               GOIQ:
00.00133Ar 2  4C rr rr             jmp     IQERR
00.00133Dr 2               
00.00133Dr 2               ; ----------------------------------------------------------------------------
00.00133Dr 2               ; SCAN TO NEXT CHARACTER AND CONVERT EXPRESSION
00.00133Dr 2               ; TO SINGLE BYTE IN X-REG
00.00133Dr 2               ; ----------------------------------------------------------------------------
00.00133Dr 2               GTBYTC:
00.00133Dr 2  20 C0 00             jsr     CHRGET
00.001340r 2               
00.001340r 2               ; ----------------------------------------------------------------------------
00.001340r 2               ; EVALUATE EXPRESSION AT TXTPTR, AND
00.001340r 2               ; CONVERT IT TO SINGLE BYTE IN X-REG
00.001340r 2               ; ----------------------------------------------------------------------------
00.001340r 2               GETBYT:
00.001340r 2  20 rr rr             jsr     FRMNUM
00.001343r 2               
00.001343r 2               ; ----------------------------------------------------------------------------
00.001343r 2               ; CONVERT (FAC) TO SINGLE BYTE INTEGER IN X-REG
00.001343r 2               ; ----------------------------------------------------------------------------
00.001343r 2               CONINT:
00.001343r 2  20 rr rr             jsr     MKINT
00.001346r 2  A6 B1                ldx     FAC_LAST-1
00.001348r 2  D0 F0                bne     GOIQ
00.00134Ar 2  A6 B2                ldx     FAC_LAST
00.00134Cr 2  4C C6 00             jmp     CHRGOT
00.00134Fr 2               
00.00134Fr 2               ; ----------------------------------------------------------------------------
00.00134Fr 2               ; "VAL" FUNCTION
00.00134Fr 2               ; ----------------------------------------------------------------------------
00.00134Fr 2               VAL:
00.00134Fr 2  20 rr rr             jsr     GETSTR
00.001352r 2  D0 03                bne     L35AC
00.001354r 2  4C rr rr             jmp     ZERO_FAC
00.001357r 2               L35AC:
00.001357r 2  A6 C7                ldx     TXTPTR
00.001359r 2  A4 C8                ldy     TXTPTR+1
00.00135Br 2  86 BE                stx     STRNG2
00.00135Dr 2  84 BF                sty     STRNG2+1
00.00135Fr 2  A6 6F                ldx     INDEX
00.001361r 2  86 C7                stx     TXTPTR
00.001363r 2  18                   clc
00.001364r 2  65 6F                adc     INDEX
00.001366r 2  85 71                sta     DEST
00.001368r 2  A6 70                ldx     INDEX+1
00.00136Ar 2  86 C8                stx     TXTPTR+1
00.00136Cr 2  90 01                bcc     L35C4
00.00136Er 2  E8                   inx
00.00136Fr 2               L35C4:
00.00136Fr 2  86 72                stx     DEST+1
00.001371r 2  A0 00                ldy     #$00
00.001373r 2  B1 71                lda     (DEST),y
00.001375r 2  48                   pha
00.001376r 2  A9 00                lda     #$00
00.001378r 2  91 71                sta     (DEST),y
00.00137Ar 2  20 C6 00             jsr     CHRGOT
00.00137Dr 2  20 rr rr             jsr     FIN
00.001380r 2  68                   pla
00.001381r 2  A0 00                ldy     #$00
00.001383r 2  91 71                sta     (DEST),y
00.001385r 2               
00.001385r 2               ; ----------------------------------------------------------------------------
00.001385r 2               ; COPY STRNG2 INTO TXTPTR
00.001385r 2               ; ----------------------------------------------------------------------------
00.001385r 2               POINT:
00.001385r 2  A6 BE                ldx     STRNG2
00.001387r 2  A4 BF                ldy     STRNG2+1
00.001389r 2  86 C7                stx     TXTPTR
00.00138Br 2  84 C8                sty     TXTPTR+1
00.00138Dr 2  60                   rts
00.00138Er 2               
00.00138Er 2               
00.00138Er 1               .include "misc3.s"
00.00138Er 2               ; KBD specific patches
00.00138Er 2               
00.00138Er 2               .segment "CODE"
00.00138Er 2               
00.00138Er 2               .ifdef KBD
00.00138Er 2               VARTAB_MINUS_2_TO_AY:
00.00138Er 2                       lda     VARTAB
00.00138Er 2                       sec
00.00138Er 2                       sbc     #$02
00.00138Er 2                       ldy     VARTAB+1
00.00138Er 2                       bcs     LF42C
00.00138Er 2                       dey
00.00138Er 2               LF42C:
00.00138Er 2                       rts
00.00138Er 2               
00.00138Er 2               ; ----------------------------------------------------------------------------
00.00138Er 2               GET_UPPER:
00.00138Er 2                       lda     INPUTBUFFERX,x
00.00138Er 2               LF430:
00.00138Er 2                       cmp     #'a'
00.00138Er 2                       bcc     LF43A
00.00138Er 2                       cmp     #'z'+1
00.00138Er 2                       bcs     LF43A
00.00138Er 2               LF438:
00.00138Er 2                       sbc     #$1F
00.00138Er 2               LF43A:
00.00138Er 2                       rts
00.00138Er 2               
00.00138Er 2               ; ----------------------------------------------------------------------------
00.00138Er 2               GETLN:
00.00138Er 2                       ldx     #$5D
00.00138Er 2               LF43D:
00.00138Er 2                       txa
00.00138Er 2                       and     #$7F
00.00138Er 2                       cmp     $0340
00.00138Er 2                       beq     LF44D
00.00138Er 2                       sta     $0340
00.00138Er 2                       lda     #$03
00.00138Er 2                       jsr     LDE48
00.00138Er 2               LF44D:
00.00138Er 2                       jsr     LDE7F
00.00138Er 2                       bne     RTS4
00.00138Er 2                       cpx     #$80
00.00138Er 2                       bcc     LF44D
00.00138Er 2               RTS4:
00.00138Er 2                       rts
00.00138Er 2               
00.00138Er 2               ; ----------------------------------------------------------------------------
00.00138Er 2               LF457:
00.00138Er 2                       lda     TXTTAB
00.00138Er 2                       ldx     TXTTAB+1
00.00138Er 2               LF45B:
00.00138Er 2                       sta     JMPADRS+1
00.00138Er 2                       stx     JMPADRS+2
00.00138Er 2                       ldy     #$01
00.00138Er 2                       lda     (JMPADRS+1),y
00.00138Er 2                       beq     LF438
00.00138Er 2                       iny
00.00138Er 2                       iny
00.00138Er 2                       lda     (JMPADRS+1),y
00.00138Er 2                       dey
00.00138Er 2                       cmp     LINNUM+1
00.00138Er 2                       bne     LF472
00.00138Er 2                       lda     (JMPADRS+1),y
00.00138Er 2                       cmp     LINNUM
00.00138Er 2               LF472:
00.00138Er 2                       bcs     LF43A
00.00138Er 2                       dey
00.00138Er 2                       lda     (JMPADRS+1),y
00.00138Er 2                       tax
00.00138Er 2                       dey
00.00138Er 2                       lda     (JMPADRS+1),y
00.00138Er 2                       bcc     LF45B
00.00138Er 2               LF47D:
00.00138Er 2                       jmp     (JMPADRS+1)
00.00138Er 2               .endif
00.00138Er 2               
00.00138Er 1               .include "poke.s"
00.00138Er 2               .segment "CODE"
00.00138Er 2               
00.00138Er 2               .ifndef CONFIG_NO_POKE
00.00138Er 2               ; ----------------------------------------------------------------------------
00.00138Er 2               ; EVALUATE "EXP1,EXP2"
00.00138Er 2               ;
00.00138Er 2               ; CONVERT EXP1 TO 16-BIT NUMBER IN LINNUM
00.00138Er 2               ; CONVERT EXP2 TO 8-BIT NUMBER IN X-REG
00.00138Er 2               ; ----------------------------------------------------------------------------
00.00138Er 2               GTNUM:
00.00138Er 2  20 rr rr             jsr     FRMNUM
00.001391r 2  20 rr rr             jsr     GETADR
00.001394r 2               
00.001394r 2               ; ----------------------------------------------------------------------------
00.001394r 2               ; EVALUATE ",EXPRESSION"
00.001394r 2               ; CONVERT EXPRESSION TO SINGLE BYTE IN X-REG
00.001394r 2               ; ----------------------------------------------------------------------------
00.001394r 2               COMBYTE:
00.001394r 2  20 rr rr             jsr     CHKCOM
00.001397r 2  4C rr rr             jmp     GETBYT
00.00139Ar 2               
00.00139Ar 2               ; ----------------------------------------------------------------------------
00.00139Ar 2               ; CONVERT (FAC) TO A 16-BIT VALUE IN LINNUM
00.00139Ar 2               ; ----------------------------------------------------------------------------
00.00139Ar 2               GETADR:
00.00139Ar 2  A5 B3                lda     FACSIGN
00.00139Cr 2                 .ifdef APPLE
00.00139Cr 2                       nop ; PATCH
00.00139Cr 2                       nop
00.00139Cr 2                 .else
00.00139Cr 2  30 9C                bmi     GOIQ
00.00139Er 2                 .endif
00.00139Er 2  A5 AE                lda     FAC
00.0013A0r 2  C9 91                cmp     #$91
00.0013A2r 2  B0 96                bcs     GOIQ
00.0013A4r 2  20 rr rr             jsr     QINT
00.0013A7r 2  A5 B1                lda     FAC_LAST-1
00.0013A9r 2  A4 B2                ldy     FAC_LAST
00.0013ABr 2  84 19                sty     LINNUM
00.0013ADr 2  85 1A                sta     LINNUM+1
00.0013AFr 2  60                   rts
00.0013B0r 2               
00.0013B0r 2               ; ----------------------------------------------------------------------------
00.0013B0r 2               ; "PEEK" FUNCTION
00.0013B0r 2               ; ----------------------------------------------------------------------------
00.0013B0r 2               PEEK:
00.0013B0r 2               .ifdef CONFIG_PEEK_SAVE_LINNUM
00.0013B0r 2                       lda     LINNUM+1
00.0013B0r 2                       pha
00.0013B0r 2                       lda     LINNUM
00.0013B0r 2                       pha
00.0013B0r 2               .endif
00.0013B0r 2  20 rr rr             jsr     GETADR
00.0013B3r 2  A0 00                ldy     #$00
00.0013B5r 2               .ifdef CBM1
00.0013B5r 2               ; disallow PEEK between $C000 and $DFFF
00.0013B5r 2                       cmp     #$C0
00.0013B5r 2                       bcc     LD6F3
00.0013B5r 2                       cmp     #$E1
00.0013B5r 2                       bcc     LD6F6
00.0013B5r 2               LD6F3:
00.0013B5r 2               .endif
00.0013B5r 2               .ifdef CBM2
00.0013B5r 2               		nop ; patch that disables the compares above
00.0013B5r 2               		nop
00.0013B5r 2               		nop
00.0013B5r 2               		nop
00.0013B5r 2               		nop
00.0013B5r 2               		nop
00.0013B5r 2               		nop
00.0013B5r 2               		nop
00.0013B5r 2               .endif
00.0013B5r 2  B1 19                lda     (LINNUM),y
00.0013B7r 2  A8                   tay
00.0013B8r 2               .ifdef CONFIG_PEEK_SAVE_LINNUM
00.0013B8r 2                       pla
00.0013B8r 2                       sta     LINNUM
00.0013B8r 2                       pla
00.0013B8r 2                       sta     LINNUM+1
00.0013B8r 2               .endif
00.0013B8r 2               LD6F6:
00.0013B8r 2  4C rr rr             jmp     SNGFLT
00.0013BBr 2               
00.0013BBr 2               ; ----------------------------------------------------------------------------
00.0013BBr 2               ; "POKE" STATEMENT
00.0013BBr 2               ; ----------------------------------------------------------------------------
00.0013BBr 2               POKE:
00.0013BBr 2  20 rr rr             jsr     GTNUM
00.0013BEr 2  8A                   txa
00.0013BFr 2  A0 00                ldy     #$00
00.0013C1r 2  91 19                sta     (LINNUM),y
00.0013C3r 2  60                   rts
00.0013C4r 2               
00.0013C4r 2               ; ----------------------------------------------------------------------------
00.0013C4r 2               ; "WAIT" STATEMENT
00.0013C4r 2               ; ----------------------------------------------------------------------------
00.0013C4r 2               WAIT:
00.0013C4r 2  20 rr rr             jsr     GTNUM
00.0013C7r 2  86 96                stx     FORPNT
00.0013C9r 2  A2 00                ldx     #$00
00.0013CBr 2  20 C6 00             jsr     CHRGOT
00.0013CEr 2               .ifdef CONFIG_EASTER_EGG
00.0013CEr 2                       beq     EASTER_EGG
00.0013CEr 2               .else
00.0013CEr 2  F0 03                beq     L3628
00.0013D0r 2               .endif
00.0013D0r 2  20 rr rr             jsr     COMBYTE
00.0013D3r 2               L3628:
00.0013D3r 2  86 97                stx     FORPNT+1
00.0013D5r 2  A0 00                ldy     #$00
00.0013D7r 2               L362C:
00.0013D7r 2  B1 19                lda     (LINNUM),y
00.0013D9r 2  45 97                eor     FORPNT+1
00.0013DBr 2  25 96                and     FORPNT
00.0013DDr 2  F0 F8                beq     L362C
00.0013DFr 2               RTS3:
00.0013DFr 2  60                   rts
00.0013E0r 2               .endif ; KBD
00.0013E0r 2               
00.0013E0r 1               .include "float.s"
00.0013E0r 2               .segment "CODE"
00.0013E0r 2               
00.0013E0r 2               TEMP1X = TEMP1+(5-BYTES_FP)
00.0013E0r 2               
00.0013E0r 2               ; ----------------------------------------------------------------------------
00.0013E0r 2               ; ADD 0.5 TO FAC
00.0013E0r 2               ; ----------------------------------------------------------------------------
00.0013E0r 2               FADDH:
00.0013E0r 2  A9 rr                lda     #<CON_HALF
00.0013E2r 2  A0 rr                ldy     #>CON_HALF
00.0013E4r 2  4C rr rr             jmp     FADD
00.0013E7r 2               
00.0013E7r 2               ; ----------------------------------------------------------------------------
00.0013E7r 2               ; FAC = (Y,A) - FAC
00.0013E7r 2               ; ----------------------------------------------------------------------------
00.0013E7r 2               FSUB:
00.0013E7r 2  20 rr rr             jsr     LOAD_ARG_FROM_YA
00.0013EAr 2               
00.0013EAr 2               ; ----------------------------------------------------------------------------
00.0013EAr 2               ; FAC = ARG - FAC
00.0013EAr 2               ; ----------------------------------------------------------------------------
00.0013EAr 2               FSUBT:
00.0013EAr 2  A5 B3                lda     FACSIGN
00.0013ECr 2  49 FF                eor     #$FF
00.0013EEr 2  85 B3                sta     FACSIGN
00.0013F0r 2  45 BB                eor     ARGSIGN
00.0013F2r 2  85 BC                sta     SGNCPR
00.0013F4r 2  A5 AE                lda     FAC
00.0013F6r 2  4C rr rr             jmp     FADDT
00.0013F9r 2               
00.0013F9r 2               ; ----------------------------------------------------------------------------
00.0013F9r 2               ; Commodore BASIC V2 Easter Egg
00.0013F9r 2               ; ----------------------------------------------------------------------------
00.0013F9r 2               .ifdef CONFIG_EASTER_EGG
00.0013F9r 2               EASTER_EGG:
00.0013F9r 2                       lda     LINNUM
00.0013F9r 2                       cmp     #<6502
00.0013F9r 2                       bne     L3628
00.0013F9r 2                       lda     LINNUM+1
00.0013F9r 2                       sbc     #>6502
00.0013F9r 2                       bne     L3628
00.0013F9r 2                       sta     LINNUM
00.0013F9r 2                       tay
00.0013F9r 2                       lda     #$80
00.0013F9r 2                       sta     LINNUM+1
00.0013F9r 2               LD758:
00.0013F9r 2                       ldx     #$0A
00.0013F9r 2               LD75A:
00.0013F9r 2                       lda     MICROSOFT-1,x
00.0013F9r 2                       and     #$3F
00.0013F9r 2                       sta     (LINNUM),y
00.0013F9r 2                       iny
00.0013F9r 2                       bne     LD766
00.0013F9r 2                       inc     LINNUM+1
00.0013F9r 2               LD766:
00.0013F9r 2                       dex
00.0013F9r 2                       bne     LD75A
00.0013F9r 2                       dec     FORPNT
00.0013F9r 2                       bne     LD758
00.0013F9r 2                       rts
00.0013F9r 2               .endif
00.0013F9r 2               
00.0013F9r 2               ; ----------------------------------------------------------------------------
00.0013F9r 2               ; SHIFT SMALLER ARGUMENT MORE THAN 7 BITS
00.0013F9r 2               ; ----------------------------------------------------------------------------
00.0013F9r 2               FADD1:
00.0013F9r 2  20 rr rr             jsr     SHIFT_RIGHT
00.0013FCr 2  90 3C                bcc     FADD3
00.0013FEr 2               
00.0013FEr 2               ; ----------------------------------------------------------------------------
00.0013FEr 2               ; FAC = (Y,A) + FAC
00.0013FEr 2               ; ----------------------------------------------------------------------------
00.0013FEr 2               FADD:
00.0013FEr 2  20 rr rr             jsr     LOAD_ARG_FROM_YA
00.001401r 2               
00.001401r 2               ; ----------------------------------------------------------------------------
00.001401r 2               ; FAC = ARG + FAC
00.001401r 2               ; ----------------------------------------------------------------------------
00.001401r 2               FADDT:
00.001401r 2  D0 03                bne     L365B
00.001403r 2  4C rr rr             jmp     COPY_ARG_TO_FAC
00.001406r 2               L365B:
00.001406r 2  A6 BD                ldx     FACEXTENSION
00.001408r 2  86 A3                stx     ARGEXTENSION
00.00140Ar 2  A2 B6                ldx     #ARG
00.00140Cr 2  A5 B6                lda     ARG
00.00140Er 2               FADD2:
00.00140Er 2  A8                   tay
00.00140Fr 2               .ifdef KBD
00.00140Fr 2                       beq     RTS4
00.00140Fr 2               .else
00.00140Fr 2  F0 CE                beq     RTS3
00.001411r 2               .endif
00.001411r 2  38                   sec
00.001412r 2  E5 AE                sbc     FAC
00.001414r 2  F0 24                beq     FADD3
00.001416r 2  90 12                bcc     L367F
00.001418r 2  84 AE                sty     FAC
00.00141Ar 2  A4 BB                ldy     ARGSIGN
00.00141Cr 2  84 B3                sty     FACSIGN
00.00141Er 2  49 FF                eor     #$FF
00.001420r 2  69 00                adc     #$00
00.001422r 2  A0 00                ldy     #$00
00.001424r 2  84 A3                sty     ARGEXTENSION
00.001426r 2  A2 AE                ldx     #FAC
00.001428r 2  D0 04                bne     L3683
00.00142Ar 2               L367F:
00.00142Ar 2  A0 00                ldy     #$00
00.00142Cr 2  84 BD                sty     FACEXTENSION
00.00142Er 2               L3683:
00.00142Er 2  C9 F9                cmp     #$F9
00.001430r 2  30 C7                bmi     FADD1
00.001432r 2  A8                   tay
00.001433r 2  A5 BD                lda     FACEXTENSION
00.001435r 2  56 01                lsr     1,x
00.001437r 2  20 rr rr             jsr     SHIFT_RIGHT4
00.00143Ar 2               FADD3:
00.00143Ar 2  24 BC                bit     SGNCPR
00.00143Cr 2  10 57                bpl     FADD4
00.00143Er 2  A0 AE                ldy     #FAC
00.001440r 2  E0 B6                cpx     #ARG
00.001442r 2  F0 02                beq     L369B
00.001444r 2  A0 B6                ldy     #ARG
00.001446r 2               L369B:
00.001446r 2  38                   sec
00.001447r 2  49 FF                eor     #$FF
00.001449r 2  65 A3                adc     ARGEXTENSION
00.00144Br 2  85 BD                sta     FACEXTENSION
00.00144Dr 2               .ifndef CONFIG_SMALL
00.00144Dr 2  B9 04 00             lda     4,y
00.001450r 2  F5 04                sbc     4,x
00.001452r 2  85 B2                sta     FAC+4
00.001454r 2               .endif
00.001454r 2  B9 03 00             lda     3,y
00.001457r 2  F5 03                sbc     3,x
00.001459r 2  85 B1                sta     FAC+3
00.00145Br 2  B9 02 00             lda     2,y
00.00145Er 2  F5 02                sbc     2,x
00.001460r 2  85 B0                sta     FAC+2
00.001462r 2  B9 01 00             lda     1,y
00.001465r 2  F5 01                sbc     1,x
00.001467r 2  85 AF                sta     FAC+1
00.001469r 2               
00.001469r 2               ; ----------------------------------------------------------------------------
00.001469r 2               ; NORMALIZE VALUE IN FAC
00.001469r 2               ; ----------------------------------------------------------------------------
00.001469r 2               NORMALIZE_FAC1:
00.001469r 2  B0 03                bcs     NORMALIZE_FAC2
00.00146Br 2  20 rr rr             jsr     COMPLEMENT_FAC
00.00146Er 2               NORMALIZE_FAC2:
00.00146Er 2  A0 00                ldy     #$00
00.001470r 2  98                   tya
00.001471r 2  18                   clc
00.001472r 2               L36C7:
00.001472r 2  A6 AF                ldx     FAC+1
00.001474r 2  D0 4A                bne     NORMALIZE_FAC4
00.001476r 2  A6 B0                ldx     FAC+2
00.001478r 2  86 AF                stx     FAC+1
00.00147Ar 2  A6 B1                ldx     FAC+3
00.00147Cr 2  86 B0                stx     FAC+2
00.00147Er 2               .ifdef CONFIG_SMALL
00.00147Er 2                       ldx     FACEXTENSION
00.00147Er 2                       stx     FAC+3
00.00147Er 2               .else
00.00147Er 2  A6 B2                ldx     FAC+4
00.001480r 2  86 B1                stx     FAC+3
00.001482r 2  A6 BD                ldx     FACEXTENSION
00.001484r 2  86 B2                stx     FAC+4
00.001486r 2               .endif
00.001486r 2  84 BD                sty     FACEXTENSION
00.001488r 2  69 08                adc     #$08
00.00148Ar 2               .ifdef CONFIG_2B
00.00148Ar 2               ; bugfix?
00.00148Ar 2               ; fix does not exist on AppleSoft 2
00.00148Ar 2                       cmp     #(MANTISSA_BYTES+1)*8
00.00148Ar 2               .else
00.00148Ar 2  C9 20                cmp     #MANTISSA_BYTES*8
00.00148Cr 2               .endif
00.00148Cr 2  D0 E4                bne     L36C7
00.00148Er 2               
00.00148Er 2               ; ----------------------------------------------------------------------------
00.00148Er 2               ; SET FAC = 0
00.00148Er 2               ; (ONLY NECESSARY TO ZERO EXPONENT AND SIGN CELLS)
00.00148Er 2               ; ----------------------------------------------------------------------------
00.00148Er 2               ZERO_FAC:
00.00148Er 2  A9 00                lda     #$00
00.001490r 2               STA_IN_FAC_SIGN_AND_EXP:
00.001490r 2  85 AE                sta     FAC
00.001492r 2               STA_IN_FAC_SIGN:
00.001492r 2  85 B3                sta     FACSIGN
00.001494r 2  60                   rts
00.001495r 2               
00.001495r 2               ; ----------------------------------------------------------------------------
00.001495r 2               ; ADD MANTISSAS OF FAC AND ARG INTO FAC
00.001495r 2               ; ----------------------------------------------------------------------------
00.001495r 2               FADD4:
00.001495r 2  65 A3                adc     ARGEXTENSION
00.001497r 2  85 BD                sta     FACEXTENSION
00.001499r 2               .ifndef CONFIG_SMALL
00.001499r 2  A5 B2                lda     FAC+4
00.00149Br 2  65 BA                adc     ARG+4
00.00149Dr 2  85 B2                sta     FAC+4
00.00149Fr 2               .endif
00.00149Fr 2  A5 B1                lda     FAC+3
00.0014A1r 2  65 B9                adc     ARG+3
00.0014A3r 2  85 B1                sta     FAC+3
00.0014A5r 2  A5 B0                lda     FAC+2
00.0014A7r 2  65 B8                adc     ARG+2
00.0014A9r 2  85 B0                sta     FAC+2
00.0014ABr 2  A5 AF                lda     FAC+1
00.0014ADr 2  65 B7                adc     ARG+1
00.0014AFr 2  85 AF                sta     FAC+1
00.0014B1r 2  4C rr rr             jmp     NORMALIZE_FAC5
00.0014B4r 2               
00.0014B4r 2               ; ----------------------------------------------------------------------------
00.0014B4r 2               ; FINISH NORMALIZING FAC
00.0014B4r 2               ; ----------------------------------------------------------------------------
00.0014B4r 2               NORMALIZE_FAC3:
00.0014B4r 2  69 01                adc     #$01
00.0014B6r 2  06 BD                asl     FACEXTENSION
00.0014B8r 2               .ifndef CONFIG_SMALL
00.0014B8r 2  26 B2                rol     FAC+4
00.0014BAr 2               .endif
00.0014BAr 2  26 B1                rol     FAC+3
00.0014BCr 2  26 B0                rol     FAC+2
00.0014BEr 2  26 AF                rol     FAC+1
00.0014C0r 2               NORMALIZE_FAC4:
00.0014C0r 2  10 F2                bpl     NORMALIZE_FAC3
00.0014C2r 2  38                   sec
00.0014C3r 2  E5 AE                sbc     FAC
00.0014C5r 2  B0 C7                bcs     ZERO_FAC
00.0014C7r 2  49 FF                eor     #$FF
00.0014C9r 2  69 01                adc     #$01
00.0014CBr 2  85 AE                sta     FAC
00.0014CDr 2               NORMALIZE_FAC5:
00.0014CDr 2  90 40                bcc     L3764
00.0014CFr 2               NORMALIZE_FAC6:
00.0014CFr 2  E6 AE                inc     FAC
00.0014D1r 2  F0 74                beq     OVERFLOW
00.0014D3r 2               .ifndef CONFIG_ROR_WORKAROUND
00.0014D3r 2                       ror     FAC+1
00.0014D3r 2                       ror     FAC+2
00.0014D3r 2                       ror     FAC+3
00.0014D3r 2                 .ifndef CONFIG_SMALL
00.0014D3r 2                       ror     FAC+4
00.0014D3r 2                 .endif
00.0014D3r 2                       ror     FACEXTENSION
00.0014D3r 2               .else
00.0014D3r 2  A9 00                lda     #$00
00.0014D5r 2  90 02                bcc     L372E
00.0014D7r 2  A9 80                lda     #$80
00.0014D9r 2               L372E:
00.0014D9r 2  46 AF                lsr     FAC+1
00.0014DBr 2  05 AF                ora     FAC+1
00.0014DDr 2  85 AF                sta     FAC+1
00.0014DFr 2  A9 00                lda     #$00
00.0014E1r 2  90 02                bcc     L373A
00.0014E3r 2  A9 80                lda     #$80
00.0014E5r 2               L373A:
00.0014E5r 2  46 B0                lsr     FAC+2
00.0014E7r 2  05 B0                ora     FAC+2
00.0014E9r 2  85 B0                sta     FAC+2
00.0014EBr 2  A9 00                lda     #$00
00.0014EDr 2  90 02                bcc     L3746
00.0014EFr 2  A9 80                lda     #$80
00.0014F1r 2               L3746:
00.0014F1r 2  46 B1                lsr     FAC+3
00.0014F3r 2  05 B1                ora     FAC+3
00.0014F5r 2  85 B1                sta     FAC+3
00.0014F7r 2  A9 00                lda     #$00
00.0014F9r 2  90 02                bcc     L3752
00.0014FBr 2  A9 80                lda     #$80
00.0014FDr 2               L3752:
00.0014FDr 2  46 B2                lsr     FAC+4
00.0014FFr 2  05 B2                ora     FAC+4
00.001501r 2  85 B2                sta     FAC+4
00.001503r 2  A9 00                lda     #$00
00.001505r 2  90 02                bcc     L375E
00.001507r 2  A9 80                lda     #$80
00.001509r 2               L375E:
00.001509r 2  46 BD                lsr     FACEXTENSION
00.00150Br 2  05 BD                ora     FACEXTENSION
00.00150Dr 2  85 BD                sta     FACEXTENSION
00.00150Fr 2               .endif
00.00150Fr 2               L3764:
00.00150Fr 2  60                   rts
00.001510r 2               
00.001510r 2               ; ----------------------------------------------------------------------------
00.001510r 2               ; 2'S COMPLEMENT OF FAC
00.001510r 2               ; ----------------------------------------------------------------------------
00.001510r 2               COMPLEMENT_FAC:
00.001510r 2  A5 B3                lda     FACSIGN
00.001512r 2  49 FF                eor     #$FF
00.001514r 2  85 B3                sta     FACSIGN
00.001516r 2               
00.001516r 2               ; ----------------------------------------------------------------------------
00.001516r 2               ; 2'S COMPLEMENT OF FAC MANTISSA ONLY
00.001516r 2               ; ----------------------------------------------------------------------------
00.001516r 2               COMPLEMENT_FAC_MANTISSA:
00.001516r 2  A5 AF                lda     FAC+1
00.001518r 2  49 FF                eor     #$FF
00.00151Ar 2  85 AF                sta     FAC+1
00.00151Cr 2  A5 B0                lda     FAC+2
00.00151Er 2  49 FF                eor     #$FF
00.001520r 2  85 B0                sta     FAC+2
00.001522r 2  A5 B1                lda     FAC+3
00.001524r 2  49 FF                eor     #$FF
00.001526r 2  85 B1                sta     FAC+3
00.001528r 2               .ifndef CONFIG_SMALL
00.001528r 2  A5 B2                lda     FAC+4
00.00152Ar 2  49 FF                eor     #$FF
00.00152Cr 2  85 B2                sta     FAC+4
00.00152Er 2               .endif
00.00152Er 2  A5 BD                lda     FACEXTENSION
00.001530r 2  49 FF                eor     #$FF
00.001532r 2  85 BD                sta     FACEXTENSION
00.001534r 2  E6 BD                inc     FACEXTENSION
00.001536r 2  D0 0E                bne     RTS12
00.001538r 2               
00.001538r 2               ; ----------------------------------------------------------------------------
00.001538r 2               ; INCREMENT FAC MANTISSA
00.001538r 2               ; ----------------------------------------------------------------------------
00.001538r 2               INCREMENT_FAC_MANTISSA:
00.001538r 2               .ifndef CONFIG_SMALL
00.001538r 2  E6 B2                inc     FAC+4
00.00153Ar 2  D0 0A                bne     RTS12
00.00153Cr 2               .endif
00.00153Cr 2  E6 B1                inc     FAC+3
00.00153Er 2  D0 06                bne     RTS12
00.001540r 2  E6 B0                inc     FAC+2
00.001542r 2  D0 02                bne     RTS12
00.001544r 2  E6 AF                inc     FAC+1
00.001546r 2               RTS12:
00.001546r 2  60                   rts
00.001547r 2               OVERFLOW:
00.001547r 2  A2 45                ldx     #ERR_OVERFLOW
00.001549r 2  4C rr rr             jmp     ERROR
00.00154Cr 2               
00.00154Cr 2               ; ----------------------------------------------------------------------------
00.00154Cr 2               ; SHIFT 1,X THRU 5,X RIGHT
00.00154Cr 2               ; (A) = NEGATIVE OF SHIFT COUNT
00.00154Cr 2               ; (X) = POINTER TO BYTES TO BE SHIFTED
00.00154Cr 2               ;
00.00154Cr 2               ; RETURN WITH (Y)=0, CARRY=0, EXTENSION BITS IN A-REG
00.00154Cr 2               ; ----------------------------------------------------------------------------
00.00154Cr 2               SHIFT_RIGHT1:
00.00154Cr 2  A2 72                ldx     #RESULT-1
00.00154Er 2               SHIFT_RIGHT2:
00.00154Er 2               .ifdef CONFIG_SMALL
00.00154Er 2                       ldy     3,x
00.00154Er 2               .else
00.00154Er 2  B4 04                ldy     4,x
00.001550r 2               .endif
00.001550r 2  84 BD                sty     FACEXTENSION
00.001552r 2               .ifndef CONFIG_SMALL
00.001552r 2  B4 03                ldy     3,x
00.001554r 2  94 04                sty     4,x
00.001556r 2               .endif
00.001556r 2  B4 02                ldy     2,x
00.001558r 2  94 03                sty     3,x
00.00155Ar 2  B4 01                ldy     1,x
00.00155Cr 2  94 02                sty     2,x
00.00155Er 2  A4 B5                ldy     SHIFTSIGNEXT
00.001560r 2  94 01                sty     1,x
00.001562r 2               
00.001562r 2               ; ----------------------------------------------------------------------------
00.001562r 2               ; MAIN ENTRY TO RIGHT SHIFT SUBROUTINE
00.001562r 2               ; ----------------------------------------------------------------------------
00.001562r 2               SHIFT_RIGHT:
00.001562r 2  69 08                adc     #$08
00.001564r 2  30 E8                bmi     SHIFT_RIGHT2
00.001566r 2  F0 E6                beq     SHIFT_RIGHT2
00.001568r 2  E9 08                sbc     #$08
00.00156Ar 2  A8                   tay
00.00156Br 2  A5 BD                lda     FACEXTENSION
00.00156Dr 2  B0 3C                bcs     SHIFT_RIGHT5
00.00156Fr 2               .ifndef CONFIG_ROR_WORKAROUND
00.00156Fr 2               LB588:
00.00156Fr 2                       asl     1,x
00.00156Fr 2                       bcc     LB58E
00.00156Fr 2                       inc     1,x
00.00156Fr 2               LB58E:
00.00156Fr 2                       ror     1,x
00.00156Fr 2                       ror     1,x
00.00156Fr 2               
00.00156Fr 2               ; ----------------------------------------------------------------------------
00.00156Fr 2               ; ENTER HERE FOR SHORT SHIFTS WITH NO SIGN EXTENSION
00.00156Fr 2               ; ----------------------------------------------------------------------------
00.00156Fr 2               SHIFT_RIGHT4:
00.00156Fr 2                       ror     2,x
00.00156Fr 2                       ror     3,x
00.00156Fr 2                 .ifndef CONFIG_SMALL
00.00156Fr 2                       ror     4,x
00.00156Fr 2                 .endif
00.00156Fr 2                       ror     a
00.00156Fr 2                       iny
00.00156Fr 2                       bne     LB588
00.00156Fr 2               .else
00.00156Fr 2               L37C4:
00.00156Fr 2  48                   pha
00.001570r 2  B5 01                lda     1,x
00.001572r 2  29 80                and     #$80
00.001574r 2  56 01                lsr     1,x
00.001576r 2  15 01                ora     1,x
00.001578r 2  95 01                sta     1,x
00.00157Ar 2  24                   .byte   $24
00.00157Br 2               SHIFT_RIGHT4:
00.00157Br 2  48                   pha
00.00157Cr 2  A9 00                lda     #$00
00.00157Er 2  90 02                bcc     L37D7
00.001580r 2  A9 80                lda     #$80
00.001582r 2               L37D7:
00.001582r 2  56 02                lsr     2,x
00.001584r 2  15 02                ora     2,x
00.001586r 2  95 02                sta     2,x
00.001588r 2  A9 00                lda     #$00
00.00158Ar 2  90 02                bcc     L37E3
00.00158Cr 2  A9 80                lda     #$80
00.00158Er 2               L37E3:
00.00158Er 2  56 03                lsr     3,x
00.001590r 2  15 03                ora     3,x
00.001592r 2  95 03                sta     3,x
00.001594r 2  A9 00                lda     #$00
00.001596r 2  90 02                bcc     L37EF
00.001598r 2  A9 80                lda     #$80
00.00159Ar 2               L37EF:
00.00159Ar 2  56 04                lsr     4,x
00.00159Cr 2  15 04                ora     4,x
00.00159Er 2  95 04                sta     4,x
00.0015A0r 2  68                   pla
00.0015A1r 2  08                   php
00.0015A2r 2  4A                   lsr     a
00.0015A3r 2  28                   plp
00.0015A4r 2  90 02                bcc     L37FD
00.0015A6r 2  09 80                ora     #$80
00.0015A8r 2               L37FD:
00.0015A8r 2  C8                   iny
00.0015A9r 2  D0 C4                bne     L37C4
00.0015ABr 2               .endif
00.0015ABr 2               SHIFT_RIGHT5:
00.0015ABr 2  18                   clc
00.0015ACr 2  60                   rts
00.0015ADr 2               
00.0015ADr 2               ; ----------------------------------------------------------------------------
00.0015ADr 2               .ifdef CONFIG_SMALL
00.0015ADr 2               CON_ONE:
00.0015ADr 2                       .byte   $81,$00,$00,$00
00.0015ADr 2               POLY_LOG:
00.0015ADr 2               		.byte	$02
00.0015ADr 2               		.byte   $80,$19,$56,$62
00.0015ADr 2               		.byte   $80,$76,$22,$F3
00.0015ADr 2               		.byte   $82,$38,$AA,$40
00.0015ADr 2               CON_SQR_HALF:
00.0015ADr 2               		.byte   $80,$35,$04,$F3
00.0015ADr 2               CON_SQR_TWO:
00.0015ADr 2               		.byte   $81,$35,$04,$F3
00.0015ADr 2               CON_NEG_HALF:
00.0015ADr 2               		.byte   $80,$80,$00,$00
00.0015ADr 2               CON_LOG_TWO:
00.0015ADr 2               		.byte   $80,$31,$72,$18
00.0015ADr 2               .else
00.0015ADr 2               CON_ONE:
00.0015ADr 2  81 00 00 00          .byte   $81,$00,$00,$00,$00
00.0015B1r 2  00           
00.0015B2r 2               POLY_LOG:
00.0015B2r 2  03                   .byte   $03
00.0015B3r 2  7F 5E 56 CB  		.byte   $7F,$5E,$56,$CB,$79
00.0015B7r 2  79           
00.0015B8r 2  80 13 9B 0B  		.byte   $80,$13,$9B,$0B,$64
00.0015BCr 2  64           
00.0015BDr 2  80 76 38 93  		.byte   $80,$76,$38,$93,$16
00.0015C1r 2  16           
00.0015C2r 2  82 38 AA 3B          .byte   $82,$38,$AA,$3B,$20
00.0015C6r 2  20           
00.0015C7r 2               CON_SQR_HALF:
00.0015C7r 2  80 35 04 F3          .byte   $80,$35,$04,$F3,$34
00.0015CBr 2  34           
00.0015CCr 2               CON_SQR_TWO:
00.0015CCr 2  81 35 04 F3          .byte   $81,$35,$04,$F3,$34
00.0015D0r 2  34           
00.0015D1r 2               CON_NEG_HALF:
00.0015D1r 2  80 80 00 00          .byte   $80,$80,$00,$00,$00
00.0015D5r 2  00           
00.0015D6r 2               CON_LOG_TWO:
00.0015D6r 2  80 31 72 17          .byte   $80,$31,$72,$17,$F8
00.0015DAr 2  F8           
00.0015DBr 2               .endif
00.0015DBr 2               
00.0015DBr 2               ; ----------------------------------------------------------------------------
00.0015DBr 2               ; "LOG" FUNCTION
00.0015DBr 2               ; ----------------------------------------------------------------------------
00.0015DBr 2               LOG:
00.0015DBr 2  20 rr rr             jsr     SIGN
00.0015DEr 2  F0 02                beq     GIQ
00.0015E0r 2  10 03                bpl     LOG2
00.0015E2r 2               GIQ:
00.0015E2r 2  4C rr rr             jmp     IQERR
00.0015E5r 2               LOG2:
00.0015E5r 2  A5 AE                lda     FAC
00.0015E7r 2  E9 7F                sbc     #$7F
00.0015E9r 2  48                   pha
00.0015EAr 2  A9 80                lda     #$80
00.0015ECr 2  85 AE                sta     FAC
00.0015EEr 2  A9 rr                lda     #<CON_SQR_HALF
00.0015F0r 2  A0 rr                ldy     #>CON_SQR_HALF
00.0015F2r 2  20 rr rr             jsr     FADD
00.0015F5r 2  A9 rr                lda     #<CON_SQR_TWO
00.0015F7r 2  A0 rr                ldy     #>CON_SQR_TWO
00.0015F9r 2  20 rr rr             jsr     FDIV
00.0015FCr 2  A9 rr                lda     #<CON_ONE
00.0015FEr 2  A0 rr                ldy     #>CON_ONE
00.001600r 2  20 rr rr             jsr     FSUB
00.001603r 2  A9 rr                lda     #<POLY_LOG
00.001605r 2  A0 rr                ldy     #>POLY_LOG
00.001607r 2  20 rr rr             jsr     POLYNOMIAL_ODD
00.00160Ar 2  A9 rr                lda     #<CON_NEG_HALF
00.00160Cr 2  A0 rr                ldy     #>CON_NEG_HALF
00.00160Er 2  20 rr rr             jsr     FADD
00.001611r 2  68                   pla
00.001612r 2  20 rr rr             jsr     ADDACC
00.001615r 2  A9 rr                lda     #<CON_LOG_TWO
00.001617r 2  A0 rr                ldy     #>CON_LOG_TWO
00.001619r 2               
00.001619r 2               ; ----------------------------------------------------------------------------
00.001619r 2               ; FAC = (Y,A) * FAC
00.001619r 2               ; ----------------------------------------------------------------------------
00.001619r 2               FMULT:
00.001619r 2  20 rr rr             jsr     LOAD_ARG_FROM_YA
00.00161Cr 2               
00.00161Cr 2               ; ----------------------------------------------------------------------------
00.00161Cr 2               ; FAC = ARG * FAC
00.00161Cr 2               ; ----------------------------------------------------------------------------
00.00161Cr 2               FMULTT:
00.00161Cr 2               .ifndef CONFIG_11
00.00161Cr 2                       beq     L3903
00.00161Cr 2               .else
00.00161Cr 2  D0 03 4C rr          jeq     L3903
00.001620r 2  rr           
00.001621r 2               .endif
00.001621r 2  20 rr rr             jsr     ADD_EXPONENTS
00.001624r 2  A9 00                lda     #$00
00.001626r 2  85 73                sta     RESULT
00.001628r 2  85 74                sta     RESULT+1
00.00162Ar 2  85 75                sta     RESULT+2
00.00162Cr 2               .ifndef CONFIG_SMALL
00.00162Cr 2  85 76                sta     RESULT+3
00.00162Er 2               .endif
00.00162Er 2  A5 BD                lda     FACEXTENSION
00.001630r 2  20 rr rr             jsr     MULTIPLY1
00.001633r 2               .ifndef CONFIG_SMALL
00.001633r 2  A5 B2                lda     FAC+4
00.001635r 2  20 rr rr             jsr     MULTIPLY1
00.001638r 2               .endif
00.001638r 2  A5 B1                lda     FAC+3
00.00163Ar 2  20 rr rr             jsr     MULTIPLY1
00.00163Dr 2  A5 B0                lda     FAC+2
00.00163Fr 2  20 rr rr             jsr     MULTIPLY1
00.001642r 2  A5 AF                lda     FAC+1
00.001644r 2  20 rr rr             jsr     MULTIPLY2
00.001647r 2  4C rr rr             jmp     COPY_RESULT_INTO_FAC
00.00164Ar 2               
00.00164Ar 2               ; ----------------------------------------------------------------------------
00.00164Ar 2               ; MULTIPLY ARG BY (A) INTO RESULT
00.00164Ar 2               ; ----------------------------------------------------------------------------
00.00164Ar 2               MULTIPLY1:
00.00164Ar 2  D0 03                bne     MULTIPLY2
00.00164Cr 2  4C rr rr             jmp     SHIFT_RIGHT1
00.00164Fr 2               MULTIPLY2:
00.00164Fr 2  4A                   lsr     a
00.001650r 2  09 80                ora     #$80
00.001652r 2               L38A7:
00.001652r 2  A8                   tay
00.001653r 2  90 19                bcc     L38C3
00.001655r 2  18                   clc
00.001656r 2               .ifndef CONFIG_SMALL
00.001656r 2  A5 76                lda     RESULT+3
00.001658r 2  65 BA                adc     ARG+4
00.00165Ar 2  85 76                sta     RESULT+3
00.00165Cr 2               .endif
00.00165Cr 2  A5 75                lda     RESULT+2
00.00165Er 2  65 B9                adc     ARG+3
00.001660r 2  85 75                sta     RESULT+2
00.001662r 2  A5 74                lda     RESULT+1
00.001664r 2  65 B8                adc     ARG+2
00.001666r 2  85 74                sta     RESULT+1
00.001668r 2  A5 73                lda     RESULT
00.00166Ar 2  65 B7                adc     ARG+1
00.00166Cr 2  85 73                sta     RESULT
00.00166Er 2               L38C3:
00.00166Er 2               .ifndef CONFIG_ROR_WORKAROUND
00.00166Er 2                       ror     RESULT
00.00166Er 2                       ror     RESULT+1
00.00166Er 2               .ifdef APPLE_BAD_BYTE
00.00166Er 2               ; this seems to be a bad byte in the dump
00.00166Er 2               		.byte	RESULT+2,RESULT+2 ; XXX BUG!
00.00166Er 2               .else
00.00166Er 2                       ror     RESULT+2
00.00166Er 2               .endif
00.00166Er 2               .ifndef CONFIG_SMALL
00.00166Er 2                       ror     RESULT+3
00.00166Er 2               .endif
00.00166Er 2                       ror     FACEXTENSION
00.00166Er 2               .else
00.00166Er 2  A9 00                lda     #$00
00.001670r 2  90 02                bcc     L38C9
00.001672r 2  A9 80                lda     #$80
00.001674r 2               L38C9:
00.001674r 2  46 73                lsr     RESULT
00.001676r 2  05 73                ora     RESULT
00.001678r 2  85 73                sta     RESULT
00.00167Ar 2  A9 00                lda     #$00
00.00167Cr 2  90 02                bcc     L38D5
00.00167Er 2  A9 80                lda     #$80
00.001680r 2               L38D5:
00.001680r 2  46 74                lsr     RESULT+1
00.001682r 2  05 74                ora     RESULT+1
00.001684r 2  85 74                sta     RESULT+1
00.001686r 2  A9 00                lda     #$00
00.001688r 2  90 02                bcc     L38E1
00.00168Ar 2  A9 80                lda     #$80
00.00168Cr 2               L38E1:
00.00168Cr 2  46 75                lsr     RESULT+2
00.00168Er 2  05 75                ora     RESULT+2
00.001690r 2  85 75                sta     RESULT+2
00.001692r 2  A9 00                lda     #$00
00.001694r 2  90 02                bcc     L38ED
00.001696r 2  A9 80                lda     #$80
00.001698r 2               L38ED:
00.001698r 2  46 76                lsr     RESULT+3
00.00169Ar 2  05 76                ora     RESULT+3
00.00169Cr 2  85 76                sta     RESULT+3
00.00169Er 2  A9 00                lda     #$00
00.0016A0r 2  90 02                bcc     L38F9
00.0016A2r 2  A9 80                lda     #$80
00.0016A4r 2               L38F9:
00.0016A4r 2  46 BD                lsr     FACEXTENSION
00.0016A6r 2  05 BD                ora     FACEXTENSION
00.0016A8r 2  85 BD                sta     FACEXTENSION
00.0016AAr 2               .endif
00.0016AAr 2  98                   tya
00.0016ABr 2  4A                   lsr     a
00.0016ACr 2  D0 A4                bne     L38A7
00.0016AEr 2               L3903:
00.0016AEr 2  60                   rts
00.0016AFr 2               
00.0016AFr 2               ; ----------------------------------------------------------------------------
00.0016AFr 2               ; UNPACK NUMBER AT (Y,A) INTO ARG
00.0016AFr 2               ; ----------------------------------------------------------------------------
00.0016AFr 2               LOAD_ARG_FROM_YA:
00.0016AFr 2  85 6F                sta     INDEX
00.0016B1r 2  84 70                sty     INDEX+1
00.0016B3r 2  A0 04                ldy     #BYTES_FP-1
00.0016B5r 2               .ifndef CONFIG_SMALL
00.0016B5r 2  B1 6F                lda     (INDEX),y
00.0016B7r 2  85 BA                sta     ARG+4
00.0016B9r 2  88                   dey
00.0016BAr 2               .endif
00.0016BAr 2  B1 6F                lda     (INDEX),y
00.0016BCr 2  85 B9                sta     ARG+3
00.0016BEr 2  88                   dey
00.0016BFr 2  B1 6F                lda     (INDEX),y
00.0016C1r 2  85 B8                sta     ARG+2
00.0016C3r 2  88                   dey
00.0016C4r 2  B1 6F                lda     (INDEX),y
00.0016C6r 2  85 BB                sta     ARGSIGN
00.0016C8r 2  45 B3                eor     FACSIGN
00.0016CAr 2  85 BC                sta     SGNCPR
00.0016CCr 2  A5 BB                lda     ARGSIGN
00.0016CEr 2  09 80                ora     #$80
00.0016D0r 2  85 B7                sta     ARG+1
00.0016D2r 2  88                   dey
00.0016D3r 2  B1 6F                lda     (INDEX),y
00.0016D5r 2  85 B6                sta     ARG
00.0016D7r 2  A5 AE                lda     FAC
00.0016D9r 2  60                   rts
00.0016DAr 2               
00.0016DAr 2               ; ----------------------------------------------------------------------------
00.0016DAr 2               ; ADD EXPONENTS OF ARG AND FAC
00.0016DAr 2               ; (CALLED BY FMULT AND FDIV)
00.0016DAr 2               ;
00.0016DAr 2               ; ALSO CHECK FOR OVERFLOW, AND SET RESULT SIGN
00.0016DAr 2               ; ----------------------------------------------------------------------------
00.0016DAr 2               ADD_EXPONENTS:
00.0016DAr 2  A5 B6                lda     ARG
00.0016DCr 2               ADD_EXPONENTS1:
00.0016DCr 2  F0 1F                beq     ZERO
00.0016DEr 2  18                   clc
00.0016DFr 2  65 AE                adc     FAC
00.0016E1r 2  90 04                bcc     L393C
00.0016E3r 2  30 1D                bmi     JOV
00.0016E5r 2  18                   clc
00.0016E6r 2  2C                   .byte   $2C
00.0016E7r 2               L393C:
00.0016E7r 2  10 14                bpl     ZERO
00.0016E9r 2  69 80                adc     #$80
00.0016EBr 2  85 AE                sta     FAC
00.0016EDr 2  D0 03                bne     L3947
00.0016EFr 2  4C rr rr             jmp     STA_IN_FAC_SIGN
00.0016F2r 2               L3947:
00.0016F2r 2  A5 BC                lda     SGNCPR
00.0016F4r 2  85 B3                sta     FACSIGN
00.0016F6r 2  60                   rts
00.0016F7r 2               
00.0016F7r 2               ; ----------------------------------------------------------------------------
00.0016F7r 2               ; IF (FAC) IS POSITIVE, GIVE "OVERFLOW" ERROR
00.0016F7r 2               ; IF (FAC) IS NEGATIVE, SET FAC=0, POP ONE RETURN, AND RTS
00.0016F7r 2               ; CALLED FROM "EXP" FUNCTION
00.0016F7r 2               ; ----------------------------------------------------------------------------
00.0016F7r 2               OUTOFRNG:
00.0016F7r 2  A5 B3                lda     FACSIGN
00.0016F9r 2  49 FF                eor     #$FF
00.0016FBr 2  30 05                bmi     JOV
00.0016FDr 2               
00.0016FDr 2               ; ----------------------------------------------------------------------------
00.0016FDr 2               ; POP RETURN ADDRESS AND SET FAC=0
00.0016FDr 2               ; ----------------------------------------------------------------------------
00.0016FDr 2               ZERO:
00.0016FDr 2  68                   pla
00.0016FEr 2  68                   pla
00.0016FFr 2  4C rr rr             jmp     ZERO_FAC
00.001702r 2               JOV:
00.001702r 2  4C rr rr             jmp     OVERFLOW
00.001705r 2               
00.001705r 2               ; ----------------------------------------------------------------------------
00.001705r 2               ; MULTIPLY FAC BY 10
00.001705r 2               ; ----------------------------------------------------------------------------
00.001705r 2               MUL10:
00.001705r 2  20 rr rr             jsr     COPY_FAC_TO_ARG_ROUNDED
00.001708r 2  AA                   tax
00.001709r 2  F0 10                beq     L3970
00.00170Br 2  18                   clc
00.00170Cr 2  69 02                adc     #$02
00.00170Er 2  B0 F2                bcs     JOV
00.001710r 2               LD9BF:
00.001710r 2  A2 00                ldx     #$00
00.001712r 2  86 BC                stx     SGNCPR
00.001714r 2  20 rr rr             jsr     FADD2
00.001717r 2  E6 AE                inc     FAC
00.001719r 2  F0 E7                beq     JOV
00.00171Br 2               L3970:
00.00171Br 2  60                   rts
00.00171Cr 2               
00.00171Cr 2               ; ----------------------------------------------------------------------------
00.00171Cr 2               CONTEN:
00.00171Cr 2               .ifdef CONFIG_SMALL
00.00171Cr 2                       .byte   $84,$20,$00,$00
00.00171Cr 2               .else
00.00171Cr 2  84 20 00 00          .byte   $84,$20,$00,$00,$00
00.001720r 2  00           
00.001721r 2               .endif
00.001721r 2               
00.001721r 2               ; ----------------------------------------------------------------------------
00.001721r 2               ; DIVIDE FAC BY 10
00.001721r 2               ; ----------------------------------------------------------------------------
00.001721r 2               DIV10:
00.001721r 2  20 rr rr             jsr     COPY_FAC_TO_ARG_ROUNDED
00.001724r 2  A9 rr                lda     #<CONTEN
00.001726r 2  A0 rr                ldy     #>CONTEN
00.001728r 2  A2 00                ldx     #$00
00.00172Ar 2               
00.00172Ar 2               ; ----------------------------------------------------------------------------
00.00172Ar 2               ; FAC = ARG / (Y,A)
00.00172Ar 2               ; ----------------------------------------------------------------------------
00.00172Ar 2               DIV:
00.00172Ar 2  86 BC                stx     SGNCPR
00.00172Cr 2  20 rr rr             jsr     LOAD_FAC_FROM_YA
00.00172Fr 2  4C rr rr             jmp     FDIVT
00.001732r 2               
00.001732r 2               ; ----------------------------------------------------------------------------
00.001732r 2               ; FAC = (Y,A) / FAC
00.001732r 2               ; ----------------------------------------------------------------------------
00.001732r 2               FDIV:
00.001732r 2  20 rr rr             jsr     LOAD_ARG_FROM_YA
00.001735r 2               
00.001735r 2               ; ----------------------------------------------------------------------------
00.001735r 2               ; FAC = ARG / FAC
00.001735r 2               ; ----------------------------------------------------------------------------
00.001735r 2               FDIVT:
00.001735r 2  F0 76                beq     L3A02
00.001737r 2  20 rr rr             jsr     ROUND_FAC
00.00173Ar 2  A9 00                lda     #$00
00.00173Cr 2  38                   sec
00.00173Dr 2  E5 AE                sbc     FAC
00.00173Fr 2  85 AE                sta     FAC
00.001741r 2  20 rr rr             jsr     ADD_EXPONENTS
00.001744r 2  E6 AE                inc     FAC
00.001746r 2  F0 BA                beq     JOV
00.001748r 2  A2 FC                ldx     #<-MANTISSA_BYTES
00.00174Ar 2  A9 01                lda     #$01
00.00174Cr 2               L39A1:
00.00174Cr 2  A4 B7                ldy     ARG+1
00.00174Er 2  C4 AF                cpy     FAC+1
00.001750r 2  D0 10                bne     L39B7
00.001752r 2  A4 B8                ldy     ARG+2
00.001754r 2  C4 B0                cpy     FAC+2
00.001756r 2  D0 0A                bne     L39B7
00.001758r 2  A4 B9                ldy     ARG+3
00.00175Ar 2  C4 B1                cpy     FAC+3
00.00175Cr 2               .ifndef CONFIG_SMALL
00.00175Cr 2  D0 04                bne     L39B7
00.00175Er 2  A4 BA                ldy     ARG+4
00.001760r 2  C4 B2                cpy     FAC+4
00.001762r 2               .endif
00.001762r 2               L39B7:
00.001762r 2  08                   php
00.001763r 2  2A                   rol     a
00.001764r 2  90 09                bcc     L39C4
00.001766r 2  E8                   inx
00.001767r 2  95 76                sta     RESULT_LAST-1,x
00.001769r 2  F0 32                beq     L39F2
00.00176Br 2  10 34                bpl     L39F6
00.00176Dr 2  A9 01                lda     #$01
00.00176Fr 2               L39C4:
00.00176Fr 2  28                   plp
00.001770r 2  B0 0E                bcs     L39D5
00.001772r 2               L39C7:
00.001772r 2  06 BA                asl     ARG_LAST
00.001774r 2               .ifndef CONFIG_SMALL
00.001774r 2  26 B9                rol     ARG+3
00.001776r 2               .endif
00.001776r 2  26 B8                rol     ARG+2
00.001778r 2  26 B7                rol     ARG+1
00.00177Ar 2  B0 E6                bcs     L39B7
00.00177Cr 2  30 CE                bmi     L39A1
00.00177Er 2  10 E2                bpl     L39B7
00.001780r 2               L39D5:
00.001780r 2  A8                   tay
00.001781r 2               .ifndef CONFIG_SMALL
00.001781r 2  A5 BA                lda     ARG+4
00.001783r 2  E5 B2                sbc     FAC+4
00.001785r 2  85 BA                sta     ARG+4
00.001787r 2               .endif
00.001787r 2  A5 B9                lda     ARG+3
00.001789r 2  E5 B1                sbc     FAC+3
00.00178Br 2  85 B9                sta     ARG+3
00.00178Dr 2  A5 B8                lda     ARG+2
00.00178Fr 2  E5 B0                sbc     FAC+2
00.001791r 2  85 B8                sta     ARG+2
00.001793r 2  A5 B7                lda     ARG+1
00.001795r 2  E5 AF                sbc     FAC+1
00.001797r 2  85 B7                sta     ARG+1
00.001799r 2  98                   tya
00.00179Ar 2  4C rr rr             jmp     L39C7
00.00179Dr 2               L39F2:
00.00179Dr 2  A9 40                lda     #$40
00.00179Fr 2  D0 CE                bne     L39C4
00.0017A1r 2               L39F6:
00.0017A1r 2  0A                   asl     a
00.0017A2r 2  0A                   asl     a
00.0017A3r 2  0A                   asl     a
00.0017A4r 2  0A                   asl     a
00.0017A5r 2  0A                   asl     a
00.0017A6r 2  0A                   asl     a
00.0017A7r 2  85 BD                sta     FACEXTENSION
00.0017A9r 2  28                   plp
00.0017AAr 2  4C rr rr             jmp     COPY_RESULT_INTO_FAC
00.0017ADr 2               L3A02:
00.0017ADr 2  A2 85                ldx     #ERR_ZERODIV
00.0017AFr 2  4C rr rr             jmp     ERROR
00.0017B2r 2               
00.0017B2r 2               ; ----------------------------------------------------------------------------
00.0017B2r 2               ; COPY RESULT INTO FAC MANTISSA, AND NORMALIZE
00.0017B2r 2               ; ----------------------------------------------------------------------------
00.0017B2r 2               COPY_RESULT_INTO_FAC:
00.0017B2r 2  A5 73                lda     RESULT
00.0017B4r 2  85 AF                sta     FAC+1
00.0017B6r 2  A5 74                lda     RESULT+1
00.0017B8r 2  85 B0                sta     FAC+2
00.0017BAr 2  A5 75                lda     RESULT+2
00.0017BCr 2  85 B1                sta     FAC+3
00.0017BEr 2               .ifndef CONFIG_SMALL
00.0017BEr 2  A5 76                lda     RESULT+3
00.0017C0r 2  85 B2                sta     FAC+4
00.0017C2r 2               .endif
00.0017C2r 2  4C rr rr             jmp     NORMALIZE_FAC2
00.0017C5r 2               
00.0017C5r 2               ; ----------------------------------------------------------------------------
00.0017C5r 2               ; UNPACK (Y,A) INTO FAC
00.0017C5r 2               ; ----------------------------------------------------------------------------
00.0017C5r 2               LOAD_FAC_FROM_YA:
00.0017C5r 2  85 6F                sta     INDEX
00.0017C7r 2  84 70                sty     INDEX+1
00.0017C9r 2  A0 04                ldy     #MANTISSA_BYTES
00.0017CBr 2               .ifndef CONFIG_SMALL
00.0017CBr 2  B1 6F                lda     (INDEX),y
00.0017CDr 2  85 B2                sta     FAC+4
00.0017CFr 2  88                   dey
00.0017D0r 2               .endif
00.0017D0r 2  B1 6F                lda     (INDEX),y
00.0017D2r 2  85 B1                sta     FAC+3
00.0017D4r 2  88                   dey
00.0017D5r 2  B1 6F                lda     (INDEX),y
00.0017D7r 2  85 B0                sta     FAC+2
00.0017D9r 2  88                   dey
00.0017DAr 2  B1 6F                lda     (INDEX),y
00.0017DCr 2  85 B3                sta     FACSIGN
00.0017DEr 2  09 80                ora     #$80
00.0017E0r 2  85 AF                sta     FAC+1
00.0017E2r 2  88                   dey
00.0017E3r 2  B1 6F                lda     (INDEX),y
00.0017E5r 2  85 AE                sta     FAC
00.0017E7r 2  84 BD                sty     FACEXTENSION
00.0017E9r 2  60                   rts
00.0017EAr 2               
00.0017EAr 2               ; ----------------------------------------------------------------------------
00.0017EAr 2               ; ROUND FAC, STORE IN TEMP2
00.0017EAr 2               ; ----------------------------------------------------------------------------
00.0017EAr 2               STORE_FAC_IN_TEMP2_ROUNDED:
00.0017EAr 2  A2 A9                ldx     #TEMP2
00.0017ECr 2  2C                   .byte   $2C
00.0017EDr 2               
00.0017EDr 2               ; ----------------------------------------------------------------------------
00.0017EDr 2               ; ROUND FAC, STORE IN TEMP1
00.0017EDr 2               ; ----------------------------------------------------------------------------
00.0017EDr 2               STORE_FAC_IN_TEMP1_ROUNDED:
00.0017EDr 2  A2 A4                ldx     #TEMP1X
00.0017EFr 2  A0 00                ldy     #$00
00.0017F1r 2  F0 04                beq     STORE_FAC_AT_YX_ROUNDED
00.0017F3r 2               
00.0017F3r 2               ; ----------------------------------------------------------------------------
00.0017F3r 2               ; ROUND FAC, AND STORE WHERE FORPNT POINTS
00.0017F3r 2               ; ----------------------------------------------------------------------------
00.0017F3r 2               SETFOR:
00.0017F3r 2  A6 96                ldx     FORPNT
00.0017F5r 2  A4 97                ldy     FORPNT+1
00.0017F7r 2               
00.0017F7r 2               ; ----------------------------------------------------------------------------
00.0017F7r 2               ; ROUND FAC, AND STORE AT (Y,X)
00.0017F7r 2               ; ----------------------------------------------------------------------------
00.0017F7r 2               STORE_FAC_AT_YX_ROUNDED:
00.0017F7r 2  20 rr rr             jsr     ROUND_FAC
00.0017FAr 2  86 6F                stx     INDEX
00.0017FCr 2  84 70                sty     INDEX+1
00.0017FEr 2  A0 04                ldy     #MANTISSA_BYTES
00.001800r 2               .ifndef CONFIG_SMALL
00.001800r 2  A5 B2                lda     FAC+4
00.001802r 2  91 6F                sta     (INDEX),y
00.001804r 2  88                   dey
00.001805r 2               .endif
00.001805r 2  A5 B1                lda     FAC+3
00.001807r 2  91 6F                sta     (INDEX),y
00.001809r 2  88                   dey
00.00180Ar 2  A5 B0                lda     FAC+2
00.00180Cr 2  91 6F                sta     (INDEX),y
00.00180Er 2  88                   dey
00.00180Fr 2  A5 B3                lda     FACSIGN
00.001811r 2  09 7F                ora     #$7F
00.001813r 2  25 AF                and     FAC+1
00.001815r 2  91 6F                sta     (INDEX),y
00.001817r 2  88                   dey
00.001818r 2  A5 AE                lda     FAC
00.00181Ar 2  91 6F                sta     (INDEX),y
00.00181Cr 2  84 BD                sty     FACEXTENSION
00.00181Er 2  60                   rts
00.00181Fr 2               
00.00181Fr 2               ; ----------------------------------------------------------------------------
00.00181Fr 2               ; COPY ARG INTO FAC
00.00181Fr 2               ; ----------------------------------------------------------------------------
00.00181Fr 2               COPY_ARG_TO_FAC:
00.00181Fr 2  A5 BB                lda     ARGSIGN
00.001821r 2               MFA:
00.001821r 2  85 B3                sta     FACSIGN
00.001823r 2  A2 05                ldx     #BYTES_FP
00.001825r 2               L3A7A:
00.001825r 2  B5 B5                lda     SHIFTSIGNEXT,x
00.001827r 2  95 AD                sta     EXPSGN,x
00.001829r 2  CA                   dex
00.00182Ar 2  D0 F9                bne     L3A7A
00.00182Cr 2  86 BD                stx     FACEXTENSION
00.00182Er 2  60                   rts
00.00182Fr 2               
00.00182Fr 2               ; ----------------------------------------------------------------------------
00.00182Fr 2               ; ROUND FAC AND COPY TO ARG
00.00182Fr 2               ; ----------------------------------------------------------------------------
00.00182Fr 2               COPY_FAC_TO_ARG_ROUNDED:
00.00182Fr 2  20 rr rr             jsr     ROUND_FAC
00.001832r 2               MAF:
00.001832r 2  A2 06                ldx     #BYTES_FP+1
00.001834r 2               L3A89:
00.001834r 2  B5 AD                lda     EXPSGN,x
00.001836r 2  95 B5                sta     SHIFTSIGNEXT,x
00.001838r 2  CA                   dex
00.001839r 2  D0 F9                bne     L3A89
00.00183Br 2  86 BD                stx     FACEXTENSION
00.00183Dr 2               RTS14:
00.00183Dr 2  60                   rts
00.00183Er 2               
00.00183Er 2               ; ----------------------------------------------------------------------------
00.00183Er 2               ; ROUND FAC USING EXTENSION BYTE
00.00183Er 2               ; ----------------------------------------------------------------------------
00.00183Er 2               ROUND_FAC:
00.00183Er 2  A5 AE                lda     FAC
00.001840r 2  F0 FB                beq     RTS14
00.001842r 2  06 BD                asl     FACEXTENSION
00.001844r 2  90 F7                bcc     RTS14
00.001846r 2               
00.001846r 2               ; ----------------------------------------------------------------------------
00.001846r 2               ; INCREMENT MANTISSA AND RE-NORMALIZE IF CARRY
00.001846r 2               ; ----------------------------------------------------------------------------
00.001846r 2               INCREMENT_MANTISSA:
00.001846r 2  20 rr rr             jsr     INCREMENT_FAC_MANTISSA
00.001849r 2  D0 F2                bne     RTS14
00.00184Br 2  4C rr rr             jmp     NORMALIZE_FAC6
00.00184Er 2               
00.00184Er 2               ; ----------------------------------------------------------------------------
00.00184Er 2               ; TEST FAC FOR ZERO AND SIGN
00.00184Er 2               ;
00.00184Er 2               ; FAC > 0, RETURN +1
00.00184Er 2               ; FAC = 0, RETURN  0
00.00184Er 2               ; FAC < 0, RETURN -1
00.00184Er 2               ; ----------------------------------------------------------------------------
00.00184Er 2               SIGN:
00.00184Er 2  A5 AE                lda     FAC
00.001850r 2  F0 09                beq     RTS15
00.001852r 2               L3AA7:
00.001852r 2  A5 B3                lda     FACSIGN
00.001854r 2               SIGN2:
00.001854r 2  2A                   rol     a
00.001855r 2  A9 FF                lda     #$FF
00.001857r 2  B0 02                bcs     RTS15
00.001859r 2  A9 01                lda     #$01
00.00185Br 2               RTS15:
00.00185Br 2  60                   rts
00.00185Cr 2               
00.00185Cr 2               ; ----------------------------------------------------------------------------
00.00185Cr 2               ; "SGN" FUNCTION
00.00185Cr 2               ; ----------------------------------------------------------------------------
00.00185Cr 2               SGN:
00.00185Cr 2  20 rr rr             jsr     SIGN
00.00185Fr 2               
00.00185Fr 2               ; ----------------------------------------------------------------------------
00.00185Fr 2               ; CONVERT (A) INTO FAC, AS SIGNED VALUE -128 TO +127
00.00185Fr 2               ; ----------------------------------------------------------------------------
00.00185Fr 2               FLOAT:
00.00185Fr 2  85 AF                sta     FAC+1
00.001861r 2  A9 00                lda     #$00
00.001863r 2  85 B0                sta     FAC+2
00.001865r 2  A2 88                ldx     #$88
00.001867r 2               
00.001867r 2               ; ----------------------------------------------------------------------------
00.001867r 2               ; FLOAT UNSIGNED VALUE IN FAC+1,2
00.001867r 2               ; (X) = EXPONENT
00.001867r 2               ; ----------------------------------------------------------------------------
00.001867r 2               FLOAT1:
00.001867r 2  A5 AF                lda     FAC+1
00.001869r 2  49 FF                eor     #$FF
00.00186Br 2  2A                   rol     a
00.00186Cr 2               
00.00186Cr 2               ; ----------------------------------------------------------------------------
00.00186Cr 2               ; FLOAT UNSIGNED VALUE IN FAC+1,2
00.00186Cr 2               ; (X) = EXPONENT
00.00186Cr 2               ; C=0 TO MAKE VALUE NEGATIVE
00.00186Cr 2               ; C=1 TO MAKE VALUE POSITIVE
00.00186Cr 2               ; ----------------------------------------------------------------------------
00.00186Cr 2               FLOAT2:
00.00186Cr 2  A9 00                lda     #$00
00.00186Er 2               .ifndef CONFIG_SMALL
00.00186Er 2  85 B2                sta     FAC+4
00.001870r 2               .endif
00.001870r 2  85 B1                sta     FAC+3
00.001872r 2               LDB21:
00.001872r 2  86 AE                stx     FAC
00.001874r 2  85 BD                sta     FACEXTENSION
00.001876r 2  85 B3                sta     FACSIGN
00.001878r 2  4C rr rr             jmp     NORMALIZE_FAC1
00.00187Br 2               
00.00187Br 2               ; ----------------------------------------------------------------------------
00.00187Br 2               ; "ABS" FUNCTION
00.00187Br 2               ; ----------------------------------------------------------------------------
00.00187Br 2               ABS:
00.00187Br 2  46 B3                lsr     FACSIGN
00.00187Dr 2  60                   rts
00.00187Er 2               
00.00187Er 2               ; ----------------------------------------------------------------------------
00.00187Er 2               ; COMPARE FAC WITH PACKED # AT (Y,A)
00.00187Er 2               ; RETURN A=1,0,-1 AS (Y,A) IS <,=,> FAC
00.00187Er 2               ; ----------------------------------------------------------------------------
00.00187Er 2               FCOMP:
00.00187Er 2  85 71                sta     DEST
00.001880r 2               
00.001880r 2               ; ----------------------------------------------------------------------------
00.001880r 2               ; SPECIAL ENTRY FROM "NEXT" PROCESSOR
00.001880r 2               ; "DEST" ALREADY SET UP
00.001880r 2               ; ----------------------------------------------------------------------------
00.001880r 2               FCOMP2:
00.001880r 2  84 72                sty     DEST+1
00.001882r 2  A0 00                ldy     #$00
00.001884r 2  B1 71                lda     (DEST),y
00.001886r 2  C8                   iny
00.001887r 2  AA                   tax
00.001888r 2  F0 C4                beq     SIGN
00.00188Ar 2  B1 71                lda     (DEST),y
00.00188Cr 2  45 B3                eor     FACSIGN
00.00188Er 2  30 C2                bmi     L3AA7
00.001890r 2  E4 AE                cpx     FAC
00.001892r 2  D0 21                bne     L3B0A
00.001894r 2  B1 71                lda     (DEST),y
00.001896r 2  09 80                ora     #$80
00.001898r 2  C5 AF                cmp     FAC+1
00.00189Ar 2  D0 19                bne     L3B0A
00.00189Cr 2  C8                   iny
00.00189Dr 2  B1 71                lda     (DEST),y
00.00189Fr 2  C5 B0                cmp     FAC+2
00.0018A1r 2  D0 12                bne     L3B0A
00.0018A3r 2  C8                   iny
00.0018A4r 2               .ifndef CONFIG_SMALL
00.0018A4r 2  B1 71                lda     (DEST),y
00.0018A6r 2  C5 B1                cmp     FAC+3
00.0018A8r 2  D0 0B                bne     L3B0A
00.0018AAr 2  C8                   iny
00.0018ABr 2               .endif
00.0018ABr 2  A9 7F                lda     #$7F
00.0018ADr 2  C5 BD                cmp     FACEXTENSION
00.0018AFr 2  B1 71                lda     (DEST),y
00.0018B1r 2  E5 B2                sbc     FAC_LAST
00.0018B3r 2  F0 28                beq     L3B32
00.0018B5r 2               L3B0A:
00.0018B5r 2  A5 B3                lda     FACSIGN
00.0018B7r 2  90 02                bcc     L3B10
00.0018B9r 2  49 FF                eor     #$FF
00.0018BBr 2               L3B10:
00.0018BBr 2  4C rr rr             jmp     SIGN2
00.0018BEr 2               
00.0018BEr 2               ; ----------------------------------------------------------------------------
00.0018BEr 2               ; QUICK INTEGER FUNCTION
00.0018BEr 2               ;
00.0018BEr 2               ; CONVERTS FP VALUE IN FAC TO INTEGER VALUE
00.0018BEr 2               ; IN FAC+1...FAC+4, BY SHIFTING RIGHT WITH SIGN
00.0018BEr 2               ; EXTENSION UNTIL FRACTIONAL BITS ARE OUT.
00.0018BEr 2               ;
00.0018BEr 2               ; THIS SUBROUTINE ASSUMES THE EXPONENT < 32.
00.0018BEr 2               ; ----------------------------------------------------------------------------
00.0018BEr 2               QINT:
00.0018BEr 2  A5 AE                lda     FAC
00.0018C0r 2  F0 4A                beq     QINT3
00.0018C2r 2  38                   sec
00.0018C3r 2  E9 A0                sbc     #120+8*BYTES_FP
00.0018C5r 2  24 B3                bit     FACSIGN
00.0018C7r 2  10 09                bpl     L3B27
00.0018C9r 2  AA                   tax
00.0018CAr 2  A9 FF                lda     #$FF
00.0018CCr 2  85 B5                sta     SHIFTSIGNEXT
00.0018CEr 2  20 rr rr             jsr     COMPLEMENT_FAC_MANTISSA
00.0018D1r 2  8A                   txa
00.0018D2r 2               L3B27:
00.0018D2r 2  A2 AE                ldx     #FAC
00.0018D4r 2  C9 F9                cmp     #$F9
00.0018D6r 2  10 06                bpl     QINT2
00.0018D8r 2  20 rr rr             jsr     SHIFT_RIGHT
00.0018DBr 2  84 B5                sty     SHIFTSIGNEXT
00.0018DDr 2               L3B32:
00.0018DDr 2  60                   rts
00.0018DEr 2               QINT2:
00.0018DEr 2  A8                   tay
00.0018DFr 2  A5 B3                lda     FACSIGN
00.0018E1r 2  29 80                and     #$80
00.0018E3r 2  46 AF                lsr     FAC+1
00.0018E5r 2  05 AF                ora     FAC+1
00.0018E7r 2  85 AF                sta     FAC+1
00.0018E9r 2  20 rr rr             jsr     SHIFT_RIGHT4
00.0018ECr 2  84 B5                sty     SHIFTSIGNEXT
00.0018EEr 2  60                   rts
00.0018EFr 2               
00.0018EFr 2               ; ----------------------------------------------------------------------------
00.0018EFr 2               ; "INT" FUNCTION
00.0018EFr 2               ;
00.0018EFr 2               ; USES QINT TO CONVERT (FAC) TO INTEGER FORM,
00.0018EFr 2               ; AND THEN REFLOATS THE INTEGER.
00.0018EFr 2               ; ----------------------------------------------------------------------------
00.0018EFr 2               INT:
00.0018EFr 2  A5 AE                lda     FAC
00.0018F1r 2  C9 A0                cmp     #120+8*BYTES_FP
00.0018F3r 2  B0 20                bcs     RTS17
00.0018F5r 2  20 rr rr             jsr     QINT
00.0018F8r 2  84 BD                sty     FACEXTENSION
00.0018FAr 2  A5 B3                lda     FACSIGN
00.0018FCr 2  84 B3                sty     FACSIGN
00.0018FEr 2  49 80                eor     #$80
00.001900r 2  2A                   rol     a
00.001901r 2  A9 A0                lda     #120+8*BYTES_FP
00.001903r 2  85 AE                sta     FAC
00.001905r 2  A5 B2                lda     FAC_LAST
00.001907r 2  85 0A                sta     CHARAC
00.001909r 2  4C rr rr             jmp     NORMALIZE_FAC1
00.00190Cr 2               QINT3:
00.00190Cr 2  85 AF                sta     FAC+1
00.00190Er 2  85 B0                sta     FAC+2
00.001910r 2  85 B1                sta     FAC+3
00.001912r 2               .ifndef CONFIG_SMALL
00.001912r 2  85 B2                sta     FAC+4
00.001914r 2               .endif
00.001914r 2  A8                   tay
00.001915r 2               RTS17:
00.001915r 2  60                   rts
00.001916r 2               
00.001916r 2               ; ----------------------------------------------------------------------------
00.001916r 2               ; CONVERT STRING TO FP VALUE IN FAC
00.001916r 2               ;
00.001916r 2               ; STRING POINTED TO BY TXTPTR
00.001916r 2               ; FIRST CHAR ALREADY SCANNED BY CHRGET
00.001916r 2               ; (A) = FIRST CHAR, C=0 IF DIGIT.
00.001916r 2               ; ----------------------------------------------------------------------------
00.001916r 2               FIN:
00.001916r 2  A0 00                ldy     #$00
00.001918r 2  A2 0A                ldx     #SERLEN-TMPEXP
00.00191Ar 2               L3B6F:
00.00191Ar 2  94 AA                sty     TMPEXP,x
00.00191Cr 2  CA                   dex
00.00191Dr 2  10 FB                bpl     L3B6F
00.00191Fr 2  90 0F                bcc     FIN2
00.001921r 2  C9 2D                cmp     #$2D
00.001923r 2  D0 04                bne     L3B7E
00.001925r 2  86 B4                stx     SERLEN
00.001927r 2  F0 04                beq     FIN1
00.001929r 2               L3B7E:
00.001929r 2  C9 2B                cmp     #$2B
00.00192Br 2  D0 05                bne     FIN3
00.00192Dr 2               FIN1:
00.00192Dr 2  20 C0 00             jsr     CHRGET
00.001930r 2               FIN2:
00.001930r 2  90 6F                bcc     FIN9
00.001932r 2               FIN3:
00.001932r 2  C9 2E                cmp     #$2E
00.001934r 2  F0 38                beq     FIN10
00.001936r 2  C9 45                cmp     #$45
00.001938r 2  D0 44                bne     FIN7
00.00193Ar 2  20 C0 00             jsr     CHRGET
00.00193Dr 2  90 21                bcc     FIN5
00.00193Fr 2  C9 A5                cmp     #TOKEN_MINUS
00.001941r 2  F0 0E                beq     L3BA6
00.001943r 2  C9 2D                cmp     #$2D
00.001945r 2  F0 0A                beq     L3BA6
00.001947r 2  C9 A4                cmp     #TOKEN_PLUS
00.001949r 2  F0 12                beq     FIN4
00.00194Br 2  C9 2B                cmp     #$2B
00.00194Dr 2  F0 0E                beq     FIN4
00.00194Fr 2  D0 11                bne     FIN6
00.001951r 2               L3BA6:
00.001951r 2               .ifndef CONFIG_ROR_WORKAROUND
00.001951r 2                       ror     EXPSGN
00.001951r 2               .else
00.001951r 2  A9 00                lda     #$00
00.001953r 2  90 02                bcc     L3BAC
00.001955r 2  A9 80                lda     #$80
00.001957r 2               L3BAC:
00.001957r 2  46 AD                lsr     EXPSGN
00.001959r 2  05 AD                ora     EXPSGN
00.00195Br 2  85 AD                sta     EXPSGN
00.00195Dr 2               .endif
00.00195Dr 2               FIN4:
00.00195Dr 2  20 C0 00             jsr     CHRGET
00.001960r 2               FIN5:
00.001960r 2  90 66                bcc     GETEXP
00.001962r 2               FIN6:
00.001962r 2  24 AD                bit     EXPSGN
00.001964r 2  10 18                bpl     FIN7
00.001966r 2  A9 00                lda     #$00
00.001968r 2  38                   sec
00.001969r 2  E5 AB                sbc     EXPON
00.00196Br 2  4C rr rr             jmp     FIN8
00.00196Er 2               
00.00196Er 2               ; ----------------------------------------------------------------------------
00.00196Er 2               ; FOUND A DECIMAL POINT
00.00196Er 2               ; ----------------------------------------------------------------------------
00.00196Er 2               FIN10:
00.00196Er 2               .ifndef CONFIG_ROR_WORKAROUND
00.00196Er 2                       ror     LOWTR
00.00196Er 2               .else
00.00196Er 2  A9 00                lda     #$00
00.001970r 2  90 02                bcc     L3BC9
00.001972r 2  A9 80                lda     #$80
00.001974r 2               L3BC9:
00.001974r 2  46 AC                lsr     LOWTR
00.001976r 2  05 AC                ora     LOWTR
00.001978r 2  85 AC                sta     LOWTR
00.00197Ar 2               .endif
00.00197Ar 2  24 AC                bit     LOWTR
00.00197Cr 2  50 AF                bvc     FIN1
00.00197Er 2               
00.00197Er 2               ; ----------------------------------------------------------------------------
00.00197Er 2               ; NUMBER TERMINATED, ADJUST EXPONENT NOW
00.00197Er 2               ; ----------------------------------------------------------------------------
00.00197Er 2               FIN7:
00.00197Er 2  A5 AB                lda     EXPON
00.001980r 2               FIN8:
00.001980r 2  38                   sec
00.001981r 2  E5 AA                sbc     INDX
00.001983r 2  85 AB                sta     EXPON
00.001985r 2  F0 12                beq     L3BEE
00.001987r 2  10 09                bpl     L3BE7
00.001989r 2               L3BDE:
00.001989r 2  20 rr rr             jsr     DIV10
00.00198Cr 2  E6 AB                inc     EXPON
00.00198Er 2  D0 F9                bne     L3BDE
00.001990r 2  F0 07                beq     L3BEE
00.001992r 2               L3BE7:
00.001992r 2  20 rr rr             jsr     MUL10
00.001995r 2  C6 AB                dec     EXPON
00.001997r 2  D0 F9                bne     L3BE7
00.001999r 2               L3BEE:
00.001999r 2  A5 B4                lda     SERLEN
00.00199Br 2  30 01                bmi     L3BF3
00.00199Dr 2  60                   rts
00.00199Er 2               L3BF3:
00.00199Er 2  4C rr rr             jmp     NEGOP
00.0019A1r 2               
00.0019A1r 2               ; ----------------------------------------------------------------------------
00.0019A1r 2               ; ACCUMULATE A DIGIT INTO FAC
00.0019A1r 2               ; ----------------------------------------------------------------------------
00.0019A1r 2               FIN9:
00.0019A1r 2  48                   pha
00.0019A2r 2  24 AC                bit     LOWTR
00.0019A4r 2  10 02                bpl     L3BFD
00.0019A6r 2  E6 AA                inc     INDX
00.0019A8r 2               L3BFD:
00.0019A8r 2  20 rr rr             jsr     MUL10
00.0019ABr 2  68                   pla
00.0019ACr 2  38                   sec
00.0019ADr 2  E9 30                sbc     #$30
00.0019AFr 2  20 rr rr             jsr     ADDACC
00.0019B2r 2  4C rr rr             jmp     FIN1
00.0019B5r 2               
00.0019B5r 2               ; ----------------------------------------------------------------------------
00.0019B5r 2               ; ADD (A) TO FAC
00.0019B5r 2               ; ----------------------------------------------------------------------------
00.0019B5r 2               ADDACC:
00.0019B5r 2  48                   pha
00.0019B6r 2  20 rr rr             jsr     COPY_FAC_TO_ARG_ROUNDED
00.0019B9r 2  68                   pla
00.0019BAr 2  20 rr rr             jsr     FLOAT
00.0019BDr 2  A5 BB                lda     ARGSIGN
00.0019BFr 2  45 B3                eor     FACSIGN
00.0019C1r 2  85 BC                sta     SGNCPR
00.0019C3r 2  A6 AE                ldx     FAC
00.0019C5r 2  4C rr rr             jmp     FADDT
00.0019C8r 2               
00.0019C8r 2               ; ----------------------------------------------------------------------------
00.0019C8r 2               ; ACCUMULATE DIGIT OF EXPONENT
00.0019C8r 2               ; ----------------------------------------------------------------------------
00.0019C8r 2               GETEXP:
00.0019C8r 2  A5 AB                lda     EXPON
00.0019CAr 2  C9 0A                cmp     #MAX_EXPON
00.0019CCr 2  90 09                bcc     L3C2C
00.0019CEr 2               .ifdef CONFIG_10A
00.0019CEr 2  A9 64                lda     #$64
00.0019D0r 2               .endif
00.0019D0r 2  24 AD                bit     EXPSGN
00.0019D2r 2               .ifdef CONFIG_10A
00.0019D2r 2  30 11                bmi     L3C3A
00.0019D4r 2               .else
00.0019D4r 2                       bmi     LDC70
00.0019D4r 2               .endif
00.0019D4r 2  4C rr rr             jmp     OVERFLOW
00.0019D7r 2               LDC70:
00.0019D7r 2               .ifndef CONFIG_10A
00.0019D7r 2                       lda     #$0B
00.0019D7r 2               .endif
00.0019D7r 2               L3C2C:
00.0019D7r 2  0A                   asl     a
00.0019D8r 2  0A                   asl     a
00.0019D9r 2  18                   clc
00.0019DAr 2  65 AB                adc     EXPON
00.0019DCr 2  0A                   asl     a
00.0019DDr 2  18                   clc
00.0019DEr 2  A0 00                ldy     #$00
00.0019E0r 2  71 C7                adc     (TXTPTR),y
00.0019E2r 2  38                   sec
00.0019E3r 2  E9 30                sbc     #$30
00.0019E5r 2               L3C3A:
00.0019E5r 2  85 AB                sta     EXPON
00.0019E7r 2  4C rr rr             jmp     FIN4
00.0019EAr 2               
00.0019EAr 2               ; ----------------------------------------------------------------------------
00.0019EAr 2               .ifdef CONFIG_SMALL
00.0019EAr 2               ; these values are /1000 of what the labels say
00.0019EAr 2               CON_99999999_9:
00.0019EAr 2                       .byte   $91,$43,$4F,$F8
00.0019EAr 2               CON_999999999:
00.0019EAr 2               		.byte   $94,$74,$23,$F7
00.0019EAr 2               CON_BILLION:
00.0019EAr 2                       .byte   $94,$74,$24,$00
00.0019EAr 2               .else
00.0019EAr 2               CON_99999999_9:
00.0019EAr 2  9B 3E BC 1F          .byte   $9B,$3E,$BC,$1F,$FD
00.0019EEr 2  FD           
00.0019EFr 2               CON_999999999:
00.0019EFr 2               .ifndef CONFIG_10A
00.0019EFr 2                       .byte   $9E,$6E,$6B,$27,$FE
00.0019EFr 2               .else
00.0019EFr 2  9E 6E 6B 27          .byte   $9E,$6E,$6B,$27,$FD
00.0019F3r 2  FD           
00.0019F4r 2               .endif
00.0019F4r 2               CON_BILLION:
00.0019F4r 2  9E 6E 6B 28          .byte   $9E,$6E,$6B,$28,$00
00.0019F8r 2  00           
00.0019F9r 2               .endif
00.0019F9r 2               
00.0019F9r 2               ; ----------------------------------------------------------------------------
00.0019F9r 2               ; PRINT "IN <LINE #>"
00.0019F9r 2               ; ----------------------------------------------------------------------------
00.0019F9r 2               INPRT:
00.0019F9r 2               .ifdef KBD
00.0019F9r 2                       jsr     LFE0B
00.0019F9r 2                       .byte	" in"
00.0019F9r 2                       .byte	0
00.0019F9r 2               .else
00.0019F9r 2  A9 rr                lda     #<QT_IN
00.0019FBr 2  A0 rr                ldy     #>QT_IN
00.0019FDr 2  20 rr rr             jsr     GOSTROUT2
00.001A00r 2               .endif
00.001A00r 2  A5 87                lda     CURLIN+1
00.001A02r 2  A6 86                ldx     CURLIN
00.001A04r 2               
00.001A04r 2               ; ----------------------------------------------------------------------------
00.001A04r 2               ; PRINT A,X AS DECIMAL INTEGER
00.001A04r 2               ; ----------------------------------------------------------------------------
00.001A04r 2               LINPRT:
00.001A04r 2  85 AF                sta     FAC+1
00.001A06r 2  86 B0                stx     FAC+2
00.001A08r 2  A2 90                ldx     #$90
00.001A0Ar 2  38                   sec
00.001A0Br 2  20 rr rr             jsr     FLOAT2
00.001A0Er 2  20 rr rr             jsr     FOUT
00.001A11r 2               GOSTROUT2:
00.001A11r 2  4C rr rr             jmp     STROUT
00.001A14r 2               
00.001A14r 2               ; ----------------------------------------------------------------------------
00.001A14r 2               ; CONVERT (FAC) TO STRING STARTING AT STACK
00.001A14r 2               ; RETURN WITH (Y,A) POINTING AT STRING
00.001A14r 2               ; ----------------------------------------------------------------------------
00.001A14r 2               FOUT:
00.001A14r 2  A0 01                ldy     #$01
00.001A16r 2               
00.001A16r 2               ; ----------------------------------------------------------------------------
00.001A16r 2               ; "STR$" FUNCTION ENTERS HERE, WITH (Y)=0
00.001A16r 2               ; SO THAT RESULT STRING STARTS AT STACK-1
00.001A16r 2               ; (THIS IS USED AS A FLAG)
00.001A16r 2               ; ----------------------------------------------------------------------------
00.001A16r 2               FOUT1:
00.001A16r 2  A9 20                lda     #$20
00.001A18r 2  24 B3                bit     FACSIGN
00.001A1Ar 2  10 02                bpl     L3C73
00.001A1Cr 2  A9 2D                lda     #$2D
00.001A1Er 2               L3C73:
00.001A1Er 2  99 FF 00             sta     $FF,y
00.001A21r 2  85 B3                sta     FACSIGN
00.001A23r 2  84 BE                sty     STRNG2
00.001A25r 2  C8                   iny
00.001A26r 2  A9 30                lda     #$30
00.001A28r 2  A6 AE                ldx     FAC
00.001A2Ar 2  D0 03                bne     L3C84
00.001A2Cr 2  4C rr rr             jmp     FOUT4
00.001A2Fr 2               L3C84:
00.001A2Fr 2  A9 00                lda     #$00
00.001A31r 2  E0 80                cpx     #$80
00.001A33r 2  F0 02                beq     L3C8C
00.001A35r 2  B0 09                bcs     L3C95
00.001A37r 2               L3C8C:
00.001A37r 2  A9 rr                lda     #<CON_BILLION
00.001A39r 2  A0 rr                ldy     #>CON_BILLION
00.001A3Br 2  20 rr rr             jsr     FMULT
00.001A3Er 2               .ifdef CONFIG_SMALL
00.001A3Er 2                       lda     #<-6 ; exponent adjustment
00.001A3Er 2               .else
00.001A3Er 2  A9 F7                lda     #<-9
00.001A40r 2               .endif
00.001A40r 2               L3C95:
00.001A40r 2  85 AA                sta     INDX
00.001A42r 2               ; ----------------------------------------------------------------------------
00.001A42r 2               ; ADJUST UNTIL 1E8 <= (FAC) <1E9
00.001A42r 2               ; ----------------------------------------------------------------------------
00.001A42r 2               L3C97:
00.001A42r 2  A9 rr                lda     #<CON_999999999
00.001A44r 2  A0 rr                ldy     #>CON_999999999
00.001A46r 2  20 rr rr             jsr     FCOMP
00.001A49r 2  F0 1E                beq     L3CBE
00.001A4Br 2  10 12                bpl     L3CB4
00.001A4Dr 2               L3CA2:
00.001A4Dr 2  A9 rr                lda     #<CON_99999999_9
00.001A4Fr 2  A0 rr                ldy     #>CON_99999999_9
00.001A51r 2  20 rr rr             jsr     FCOMP
00.001A54r 2  F0 02                beq     L3CAD
00.001A56r 2  10 0E                bpl     L3CBB
00.001A58r 2               L3CAD:
00.001A58r 2  20 rr rr             jsr     MUL10
00.001A5Br 2  C6 AA                dec     INDX
00.001A5Dr 2  D0 EE                bne     L3CA2
00.001A5Fr 2               L3CB4:
00.001A5Fr 2  20 rr rr             jsr     DIV10
00.001A62r 2  E6 AA                inc     INDX
00.001A64r 2  D0 DC                bne     L3C97
00.001A66r 2               L3CBB:
00.001A66r 2  20 rr rr             jsr     FADDH
00.001A69r 2               L3CBE:
00.001A69r 2  20 rr rr             jsr     QINT
00.001A6Cr 2               ; ----------------------------------------------------------------------------
00.001A6Cr 2               ; FAC+1...FAC+4 IS NOW IN INTEGER FORM
00.001A6Cr 2               ; WITH POWER OF TEN ADJUSTMENT IN TMPEXP
00.001A6Cr 2               ;
00.001A6Cr 2               ; IF -10 < TMPEXP > 1, PRINT IN DECIMAL FORM
00.001A6Cr 2               ; OTHERWISE, PRINT IN EXPONENTIAL FORM
00.001A6Cr 2               ; ----------------------------------------------------------------------------
00.001A6Cr 2  A2 01                ldx     #$01
00.001A6Er 2  A5 AA                lda     INDX
00.001A70r 2  18                   clc
00.001A71r 2  69 0A                adc     #3*BYTES_FP-5
00.001A73r 2  30 09                bmi     L3CD3
00.001A75r 2  C9 0B                cmp     #3*BYTES_FP-4
00.001A77r 2  B0 06                bcs     L3CD4
00.001A79r 2  69 FF                adc     #$FF
00.001A7Br 2  AA                   tax
00.001A7Cr 2  A9 02                lda     #$02
00.001A7Er 2               L3CD3:
00.001A7Er 2  38                   sec
00.001A7Fr 2               L3CD4:
00.001A7Fr 2  E9 02                sbc     #$02
00.001A81r 2  85 AB                sta     EXPON
00.001A83r 2  86 AA                stx     INDX
00.001A85r 2  8A                   txa
00.001A86r 2  F0 02                beq     L3CDF
00.001A88r 2  10 13                bpl     L3CF2
00.001A8Ar 2               L3CDF:
00.001A8Ar 2  A4 BE                ldy     STRNG2
00.001A8Cr 2  A9 2E                lda     #$2E
00.001A8Er 2  C8                   iny
00.001A8Fr 2  99 FF 00             sta     $FF,y
00.001A92r 2  8A                   txa
00.001A93r 2  F0 06                beq     L3CF0
00.001A95r 2  A9 30                lda     #$30
00.001A97r 2  C8                   iny
00.001A98r 2  99 FF 00             sta     $FF,y
00.001A9Br 2               L3CF0:
00.001A9Br 2  84 BE                sty     STRNG2
00.001A9Dr 2               ; ----------------------------------------------------------------------------
00.001A9Dr 2               ; NOW DIVIDE BY POWERS OF TEN TO GET SUCCESSIVE DIGITS
00.001A9Dr 2               ; ----------------------------------------------------------------------------
00.001A9Dr 2               L3CF2:
00.001A9Dr 2  A0 00                ldy     #$00
00.001A9Fr 2               LDD3A:
00.001A9Fr 2  A2 80                ldx     #$80
00.001AA1r 2               L3CF6:
00.001AA1r 2  A5 B2                lda     FAC_LAST
00.001AA3r 2  18                   clc
00.001AA4r 2               .ifndef CONFIG_SMALL
00.001AA4r 2  79 rr rr             adc     DECTBL+3,y
00.001AA7r 2  85 B2                sta     FAC+4
00.001AA9r 2  A5 B1                lda     FAC+3
00.001AABr 2               .endif
00.001AABr 2  79 rr rr             adc     DECTBL+2,y
00.001AAEr 2  85 B1                sta     FAC+3
00.001AB0r 2  A5 B0                lda     FAC+2
00.001AB2r 2  79 rr rr             adc     DECTBL+1,y
00.001AB5r 2  85 B0                sta     FAC+2
00.001AB7r 2  A5 AF                lda     FAC+1
00.001AB9r 2  79 rr rr             adc     DECTBL,y
00.001ABCr 2  85 AF                sta     FAC+1
00.001ABEr 2  E8                   inx
00.001ABFr 2  B0 04                bcs     L3D1A
00.001AC1r 2  10 DE                bpl     L3CF6
00.001AC3r 2  30 02                bmi     L3D1C
00.001AC5r 2               L3D1A:
00.001AC5r 2  30 DA                bmi     L3CF6
00.001AC7r 2               L3D1C:
00.001AC7r 2  8A                   txa
00.001AC8r 2  90 04                bcc     L3D23
00.001ACAr 2  49 FF                eor     #$FF
00.001ACCr 2  69 0A                adc     #$0A
00.001ACEr 2               L3D23:
00.001ACEr 2  69 2F                adc     #$2F
00.001AD0r 2  C8                   iny
00.001AD1r 2  C8                   iny
00.001AD2r 2  C8                   iny
00.001AD3r 2               .ifndef CONFIG_SMALL
00.001AD3r 2  C8                   iny
00.001AD4r 2               .endif
00.001AD4r 2  84 94                sty     VARPNT
00.001AD6r 2  A4 BE                ldy     STRNG2
00.001AD8r 2  C8                   iny
00.001AD9r 2  AA                   tax
00.001ADAr 2  29 7F                and     #$7F
00.001ADCr 2  99 FF 00             sta     $FF,y
00.001ADFr 2  C6 AA                dec     INDX
00.001AE1r 2  D0 06                bne     L3D3E
00.001AE3r 2  A9 2E                lda     #$2E
00.001AE5r 2  C8                   iny
00.001AE6r 2  99 FF 00             sta     $FF,y
00.001AE9r 2               L3D3E:
00.001AE9r 2  84 BE                sty     STRNG2
00.001AEBr 2  A4 94                ldy     VARPNT
00.001AEDr 2  8A                   txa
00.001AEEr 2  49 FF                eor     #$FF
00.001AF0r 2  29 80                and     #$80
00.001AF2r 2  AA                   tax
00.001AF3r 2  C0 24                cpy     #DECTBL_END-DECTBL
00.001AF5r 2               .ifdef CONFIG_CBM_ALL
00.001AF5r 2                       beq     LDD96
00.001AF5r 2                       cpy     #$3C ; XXX
00.001AF5r 2               .endif
00.001AF5r 2  D0 AA                bne     L3CF6
00.001AF7r 2               ; ----------------------------------------------------------------------------
00.001AF7r 2               ; NINE DIGITS HAVE BEEN STORED IN STRING.  NOW LOOK
00.001AF7r 2               ; BACK AND LOP OFF TRAILING ZEROES AND A TRAILING
00.001AF7r 2               ; DECIMAL POINT.
00.001AF7r 2               ; ----------------------------------------------------------------------------
00.001AF7r 2               LDD96:
00.001AF7r 2  A4 BE                ldy     STRNG2
00.001AF9r 2               L3D4E:
00.001AF9r 2  B9 FF 00             lda     $FF,y
00.001AFCr 2  88                   dey
00.001AFDr 2  C9 30                cmp     #$30
00.001AFFr 2  F0 F8                beq     L3D4E
00.001B01r 2  C9 2E                cmp     #$2E
00.001B03r 2  F0 01                beq     L3D5B
00.001B05r 2  C8                   iny
00.001B06r 2               L3D5B:
00.001B06r 2  A9 2B                lda     #$2B
00.001B08r 2  A6 AB                ldx     EXPON
00.001B0Ar 2  F0 2E                beq     L3D8F
00.001B0Cr 2  10 08                bpl     L3D6B
00.001B0Er 2  A9 00                lda     #$00
00.001B10r 2  38                   sec
00.001B11r 2  E5 AB                sbc     EXPON
00.001B13r 2  AA                   tax
00.001B14r 2  A9 2D                lda     #$2D
00.001B16r 2               L3D6B:
00.001B16r 2  99 01 01             sta     STACK+1,y
00.001B19r 2  A9 45                lda     #$45
00.001B1Br 2  99 00 01             sta     STACK,y
00.001B1Er 2  8A                   txa
00.001B1Fr 2  A2 2F                ldx     #$2F
00.001B21r 2  38                   sec
00.001B22r 2               L3D77:
00.001B22r 2  E8                   inx
00.001B23r 2  E9 0A                sbc     #$0A
00.001B25r 2  B0 FB                bcs     L3D77
00.001B27r 2  69 3A                adc     #$3A
00.001B29r 2  99 03 01             sta     STACK+3,y
00.001B2Cr 2  8A                   txa
00.001B2Dr 2  99 02 01             sta     STACK+2,y
00.001B30r 2  A9 00                lda     #$00
00.001B32r 2  99 04 01             sta     STACK+4,y
00.001B35r 2  F0 08                beq     L3D94
00.001B37r 2               FOUT4:
00.001B37r 2  99 FF 00             sta     $FF,y
00.001B3Ar 2               L3D8F:
00.001B3Ar 2  A9 00                lda     #$00
00.001B3Cr 2  99 00 01             sta     STACK,y
00.001B3Fr 2               L3D94:
00.001B3Fr 2  A9 00                lda     #$00
00.001B41r 2  A0 01                ldy     #$01
00.001B43r 2  60                   rts
00.001B44r 2               
00.001B44r 2               ; ----------------------------------------------------------------------------
00.001B44r 2               CON_HALF:
00.001B44r 2               .ifdef CONFIG_SMALL
00.001B44r 2                       .byte   $80,$00,$00,$00
00.001B44r 2               .else
00.001B44r 2  80 00 00 00          .byte   $80,$00,$00,$00,$00
00.001B48r 2  00           
00.001B49r 2               .endif
00.001B49r 2               
00.001B49r 2               ; ----------------------------------------------------------------------------
00.001B49r 2               ; POWERS OF 10 FROM 1E8 DOWN TO 1,
00.001B49r 2               ; AS 32-BIT INTEGERS, WITH ALTERNATING SIGNS
00.001B49r 2               ; ----------------------------------------------------------------------------
00.001B49r 2               DECTBL:
00.001B49r 2               .ifdef CONFIG_SMALL
00.001B49r 2                       .byte   $FE,$79,$60 ; -100000
00.001B49r 2               		.byte	$00,$27,$10 ; 10000
00.001B49r 2               		.byte	$FF,$FC,$18 ; -1000
00.001B49r 2               		.byte	$00,$00,$64 ; 100
00.001B49r 2               		.byte	$FF,$FF,$F6 ; -10
00.001B49r 2               		.byte	$00,$00,$01 ; 1
00.001B49r 2               .else
00.001B49r 2  FA 0A 1F 00  		.byte	$FA,$0A,$1F,$00	; -100000000
00.001B4Dr 2  00 98 96 80  		.byte	$00,$98,$96,$80	; 10000000
00.001B51r 2  FF F0 BD C0  		.byte	$FF,$F0,$BD,$C0	; -1000000
00.001B55r 2  00 01 86 A0  		.byte	$00,$01,$86,$A0	; 100000
00.001B59r 2  FF FF D8 F0  		.byte	$FF,$FF,$D8,$F0	; -10000
00.001B5Dr 2  00 00 03 E8  		.byte   $00,$00,$03,$E8	; 1000
00.001B61r 2  FF FF FF 9C  		.byte	$FF,$FF,$FF,$9C	; -100
00.001B65r 2  00 00 00 0A  		.byte   $00,$00,$00,$0A	; 10
00.001B69r 2  FF FF FF FF  		.byte	$FF,$FF,$FF,$FF	; -1
00.001B6Dr 2               .endif
00.001B6Dr 2               DECTBL_END:
00.001B6Dr 2               .ifdef CONFIG_CBM_ALL
00.001B6Dr 2               		.byte	$FF,$DF,$0A,$80 ; TI$
00.001B6Dr 2               		.byte	$00,$03,$4B,$C0
00.001B6Dr 2               		.byte	$FF,$FF,$73,$60
00.001B6Dr 2               		.byte	$00,$00,$0E,$10
00.001B6Dr 2               		.byte	$FF,$FF,$FD,$A8
00.001B6Dr 2               		.byte	$00,$00,$00,$3C
00.001B6Dr 2               .endif
00.001B6Dr 2               .ifdef CONFIG_2
00.001B6Dr 2               C_ZERO = CON_HALF + 2
00.001B6Dr 2               .endif
00.001B6Dr 2               
00.001B6Dr 2               ; ----------------------------------------------------------------------------
00.001B6Dr 2               ; "SQR" FUNCTION
00.001B6Dr 2               ; ----------------------------------------------------------------------------
00.001B6Dr 2               SQR:
00.001B6Dr 2  20 rr rr             jsr     COPY_FAC_TO_ARG_ROUNDED
00.001B70r 2  A9 rr                lda     #<CON_HALF
00.001B72r 2  A0 rr                ldy     #>CON_HALF
00.001B74r 2  20 rr rr             jsr     LOAD_FAC_FROM_YA
00.001B77r 2               
00.001B77r 2               ; ----------------------------------------------------------------------------
00.001B77r 2               ; EXPONENTIATION OPERATION
00.001B77r 2               ;
00.001B77r 2               ; ARG ^ FAC  =  EXP( LOG(ARG) * FAC )
00.001B77r 2               ; ----------------------------------------------------------------------------
00.001B77r 2               FPWRT:
00.001B77r 2  F0 70                beq     EXP
00.001B79r 2  A5 B6                lda     ARG
00.001B7Br 2  D0 03                bne     L3DD5
00.001B7Dr 2  4C rr rr             jmp     STA_IN_FAC_SIGN_AND_EXP
00.001B80r 2               L3DD5:
00.001B80r 2  A2 9B                ldx     #TEMP3
00.001B82r 2  A0 00                ldy     #$00
00.001B84r 2  20 rr rr             jsr     STORE_FAC_AT_YX_ROUNDED
00.001B87r 2  A5 BB                lda     ARGSIGN
00.001B89r 2  10 0F                bpl     L3DEF
00.001B8Br 2  20 rr rr             jsr     INT
00.001B8Er 2  A9 9B                lda     #TEMP3
00.001B90r 2  A0 00                ldy     #$00
00.001B92r 2  20 rr rr             jsr     FCOMP
00.001B95r 2  D0 03                bne     L3DEF
00.001B97r 2  98                   tya
00.001B98r 2  A4 0A                ldy     CHARAC
00.001B9Ar 2               L3DEF:
00.001B9Ar 2  20 rr rr             jsr     MFA
00.001B9Dr 2  98                   tya
00.001B9Er 2  48                   pha
00.001B9Fr 2  20 rr rr             jsr     LOG
00.001BA2r 2  A9 9B                lda     #TEMP3
00.001BA4r 2  A0 00                ldy     #$00
00.001BA6r 2  20 rr rr             jsr     FMULT
00.001BA9r 2  20 rr rr             jsr     EXP
00.001BACr 2  68                   pla
00.001BADr 2  4A                   lsr     a
00.001BAEr 2  90 0A                bcc     L3E0F
00.001BB0r 2               
00.001BB0r 2               ; ----------------------------------------------------------------------------
00.001BB0r 2               ; NEGATE VALUE IN FAC
00.001BB0r 2               ; ----------------------------------------------------------------------------
00.001BB0r 2               NEGOP:
00.001BB0r 2  A5 AE                lda     FAC
00.001BB2r 2  F0 06                beq     L3E0F
00.001BB4r 2  A5 B3                lda     FACSIGN
00.001BB6r 2  49 FF                eor     #$FF
00.001BB8r 2  85 B3                sta     FACSIGN
00.001BBAr 2               L3E0F:
00.001BBAr 2  60                   rts
00.001BBBr 2               
00.001BBBr 2               ; ----------------------------------------------------------------------------
00.001BBBr 2               .ifdef CONFIG_SMALL
00.001BBBr 2               CON_LOG_E:
00.001BBBr 2                       .byte   $81,$38,$AA,$3B
00.001BBBr 2               POLY_EXP:
00.001BBBr 2               		.byte	$06
00.001BBBr 2               		.byte	$74,$63,$90,$8C
00.001BBBr 2               		.byte	$77,$23,$0C,$AB
00.001BBBr 2               		.byte	$7A,$1E,$94,$00
00.001BBBr 2               		.byte	$7C,$63,$42,$80
00.001BBBr 2               		.byte	$7E,$75,$FE,$D0
00.001BBBr 2               		.byte	$80,$31,$72,$15
00.001BBBr 2               		.byte	$81,$00,$00,$00
00.001BBBr 2               .else
00.001BBBr 2               CON_LOG_E:
00.001BBBr 2  81 38 AA 3B          .byte   $81,$38,$AA,$3B,$29
00.001BBFr 2  29           
00.001BC0r 2               POLY_EXP:
00.001BC0r 2  07                   .byte   $07
00.001BC1r 2  71 34 58 3E  		.byte	$71,$34,$58,$3E,$56
00.001BC5r 2  56           
00.001BC6r 2  74 16 7E B3  		.byte	$74,$16,$7E,$B3,$1B
00.001BCAr 2  1B           
00.001BCBr 2  77 2F EE E3  		.byte	$77,$2F,$EE,$E3,$85
00.001BCFr 2  85           
00.001BD0r 2  7A 1D 84 1C          .byte   $7A,$1D,$84,$1C,$2A
00.001BD4r 2  2A           
00.001BD5r 2  7C 63 59 58  		.byte	$7C,$63,$59,$58,$0A
00.001BD9r 2  0A           
00.001BDAr 2  7E 75 FD E7  		.byte	$7E,$75,$FD,$E7,$C6
00.001BDEr 2  C6           
00.001BDFr 2  80 31 72 18  		.byte	$80,$31,$72,$18,$10
00.001BE3r 2  10           
00.001BE4r 2  81 00 00 00  		.byte	$81,$00,$00,$00,$00
00.001BE8r 2  00           
00.001BE9r 2               .endif
00.001BE9r 2               
00.001BE9r 2               ; ----------------------------------------------------------------------------
00.001BE9r 2               ; "EXP" FUNCTION
00.001BE9r 2               ;
00.001BE9r 2               ; FAC = E ^ FAC
00.001BE9r 2               ; ----------------------------------------------------------------------------
00.001BE9r 2               EXP:
00.001BE9r 2  A9 rr                lda     #<CON_LOG_E
00.001BEBr 2  A0 rr                ldy     #>CON_LOG_E
00.001BEDr 2  20 rr rr             jsr     FMULT
00.001BF0r 2  A5 BD                lda     FACEXTENSION
00.001BF2r 2  69 50                adc     #$50
00.001BF4r 2  90 03                bcc     L3E4E
00.001BF6r 2  20 rr rr             jsr     INCREMENT_MANTISSA
00.001BF9r 2               L3E4E:
00.001BF9r 2  85 A3                sta     ARGEXTENSION
00.001BFBr 2  20 rr rr             jsr     MAF
00.001BFEr 2  A5 AE                lda     FAC
00.001C00r 2  C9 88                cmp     #$88
00.001C02r 2  90 03                bcc     L3E5C
00.001C04r 2               L3E59:
00.001C04r 2  20 rr rr             jsr     OUTOFRNG
00.001C07r 2               L3E5C:
00.001C07r 2  20 rr rr             jsr     INT
00.001C0Ar 2  A5 0A                lda     CHARAC
00.001C0Cr 2  18                   clc
00.001C0Dr 2  69 81                adc     #$81
00.001C0Fr 2  F0 F3                beq     L3E59
00.001C11r 2  38                   sec
00.001C12r 2  E9 01                sbc     #$01
00.001C14r 2  48                   pha
00.001C15r 2  A2 05                ldx     #BYTES_FP
00.001C17r 2               L3E6C:
00.001C17r 2  B5 B6                lda     ARG,x
00.001C19r 2  B4 AE                ldy     FAC,x
00.001C1Br 2  95 AE                sta     FAC,x
00.001C1Dr 2  94 B6                sty     ARG,x
00.001C1Fr 2  CA                   dex
00.001C20r 2  10 F5                bpl     L3E6C
00.001C22r 2  A5 A3                lda     ARGEXTENSION
00.001C24r 2  85 BD                sta     FACEXTENSION
00.001C26r 2  20 rr rr             jsr     FSUBT
00.001C29r 2  20 rr rr             jsr     NEGOP
00.001C2Cr 2  A9 rr                lda     #<POLY_EXP
00.001C2Er 2  A0 rr                ldy     #>POLY_EXP
00.001C30r 2  20 rr rr             jsr     POLYNOMIAL
00.001C33r 2  A9 00                lda     #$00
00.001C35r 2  85 BC                sta     SGNCPR
00.001C37r 2  68                   pla
00.001C38r 2  20 rr rr             jsr     ADD_EXPONENTS1
00.001C3Br 2  60                   rts
00.001C3Cr 2               
00.001C3Cr 2               ; ----------------------------------------------------------------------------
00.001C3Cr 2               ; ODD POLYNOMIAL SUBROUTINE
00.001C3Cr 2               ;
00.001C3Cr 2               ; F(X) = X * P(X^2)
00.001C3Cr 2               ;
00.001C3Cr 2               ; WHERE:  X IS VALUE IN FAC
00.001C3Cr 2               ;	Y,A POINTS AT COEFFICIENT TABLE
00.001C3Cr 2               ;	FIRST BYTE OF COEFF. TABLE IS N
00.001C3Cr 2               ;	COEFFICIENTS FOLLOW, HIGHEST POWER FIRST
00.001C3Cr 2               ;
00.001C3Cr 2               ; P(X^2) COMPUTED USING NORMAL POLYNOMIAL SUBROUTINE
00.001C3Cr 2               ; ----------------------------------------------------------------------------
00.001C3Cr 2               POLYNOMIAL_ODD:
00.001C3Cr 2  85 BE                sta     STRNG2
00.001C3Er 2  84 BF                sty     STRNG2+1
00.001C40r 2  20 rr rr             jsr     STORE_FAC_IN_TEMP1_ROUNDED
00.001C43r 2  A9 A4                lda     #TEMP1X
00.001C45r 2  20 rr rr             jsr     FMULT
00.001C48r 2  20 rr rr             jsr     SERMAIN
00.001C4Br 2  A9 A4                lda     #TEMP1X
00.001C4Dr 2  A0 00                ldy     #$00
00.001C4Fr 2  4C rr rr             jmp     FMULT
00.001C52r 2               
00.001C52r 2               ; ----------------------------------------------------------------------------
00.001C52r 2               ; NORMAL POLYNOMIAL SUBROUTINE
00.001C52r 2               ;
00.001C52r 2               ; P(X) = C(0)*X^N + C(1)*X^(N-1) + ... + C(N)
00.001C52r 2               ;
00.001C52r 2               ; WHERE:  X IS VALUE IN FAC
00.001C52r 2               ;	Y,A POINTS AT COEFFICIENT TABLE
00.001C52r 2               ;	FIRST BYTE OF COEFF. TABLE IS N
00.001C52r 2               ;	COEFFICIENTS FOLLOW, HIGHEST POWER FIRST
00.001C52r 2               ; ----------------------------------------------------------------------------
00.001C52r 2               POLYNOMIAL:
00.001C52r 2  85 BE                sta     STRNG2
00.001C54r 2  84 BF                sty     STRNG2+1
00.001C56r 2               SERMAIN:
00.001C56r 2  20 rr rr             jsr     STORE_FAC_IN_TEMP2_ROUNDED
00.001C59r 2  B1 BE                lda     (STRNG2),y
00.001C5Br 2  85 B4                sta     SERLEN
00.001C5Dr 2  A4 BE                ldy     STRNG2
00.001C5Fr 2  C8                   iny
00.001C60r 2  98                   tya
00.001C61r 2  D0 02                bne     L3EBA
00.001C63r 2  E6 BF                inc     STRNG2+1
00.001C65r 2               L3EBA:
00.001C65r 2  85 BE                sta     STRNG2
00.001C67r 2  A4 BF                ldy     STRNG2+1
00.001C69r 2               L3EBE:
00.001C69r 2  20 rr rr             jsr     FMULT
00.001C6Cr 2  A5 BE                lda     STRNG2
00.001C6Er 2  A4 BF                ldy     STRNG2+1
00.001C70r 2  18                   clc
00.001C71r 2  69 05                adc     #BYTES_FP
00.001C73r 2  90 01                bcc     L3ECB
00.001C75r 2  C8                   iny
00.001C76r 2               L3ECB:
00.001C76r 2  85 BE                sta     STRNG2
00.001C78r 2  84 BF                sty     STRNG2+1
00.001C7Ar 2  20 rr rr             jsr     FADD
00.001C7Dr 2  A9 A9                lda     #TEMP2
00.001C7Fr 2  A0 00                ldy     #$00
00.001C81r 2  C6 B4                dec     SERLEN
00.001C83r 2  D0 E4                bne     L3EBE
00.001C85r 2               RTS19:
00.001C85r 2  60                   rts
00.001C86r 2               
00.001C86r 1               .include "chrget.s"
00.001C86r 2               .segment "CHRGET"
0B.000000r 2               RAMSTART1:
0B.000000r 2               GENERIC_CHRGET:
0B.000000r 2  E6 C7                inc     TXTPTR
0B.000002r 2  D0 02                bne     GENERIC_CHRGOT
0B.000004r 2  E6 C8                inc     TXTPTR+1
0B.000006r 2               GENERIC_CHRGOT:
0B.000006r 2               GENERIC_TXTPTR = GENERIC_CHRGOT + 1
0B.000006r 2  AD 60 EA             lda     $EA60
0B.000009r 2               .ifdef KBD
0B.000009r 2                       jsr     LF430
0B.000009r 2               .endif
0B.000009r 2  C9 3A                cmp     #$3A
0B.00000Br 2  B0 0A                bcs     L4058
0B.00000Dr 2               GENERIC_CHRGOT2:
0B.00000Dr 2  C9 20                cmp     #$20
0B.00000Fr 2  F0 EF                beq     GENERIC_CHRGET
0B.000011r 2  38                   sec
0B.000012r 2  E9 30                sbc     #$30
0B.000014r 2  38                   sec
0B.000015r 2  E9 D0                sbc     #$D0
0B.000017r 2               L4058:
0B.000017r 2  60                   rts
0B.000018r 2               
0B.000018r 1               .include "rnd.s"
0B.000018r 2               .segment "CODE"
00.001C86r 2               
00.001C86r 2               ; ----------------------------------------------------------------------------
00.001C86r 2               ; "RND" FUNCTION
00.001C86r 2               ; ----------------------------------------------------------------------------
00.001C86r 2               
00.001C86r 2               .ifdef KBD
00.001C86r 2               RND:
00.001C86r 2                       ldx     #$10
00.001C86r 2                       jsr     SIGN
00.001C86r 2                       beq     LFC26
00.001C86r 2                       bmi     LFC10
00.001C86r 2                       lda     RNDSEED
00.001C86r 2                       ldy     RNDSEED+1
00.001C86r 2               LFBFA:
00.001C86r 2                       sta     FAC+2
00.001C86r 2                       sty     FAC+1
00.001C86r 2               LFBFE:
00.001C86r 2                       asl     a
00.001C86r 2                       asl     a
00.001C86r 2                       eor     FAC+2
00.001C86r 2                       asl     a
00.001C86r 2                       eor     FAC+1
00.001C86r 2                       asl     a
00.001C86r 2                       asl     a
00.001C86r 2                       asl     a
00.001C86r 2                       asl     a
00.001C86r 2                       eor     FAC+1
00.001C86r 2                       asl     a
00.001C86r 2                       rol     FAC+2
00.001C86r 2                       rol     FAC+1
00.001C86r 2               LFC10:
00.001C86r 2                       lda     FAC+2
00.001C86r 2                       dex
00.001C86r 2                       bne     LFBFE
00.001C86r 2                       sta     RNDSEED
00.001C86r 2                       sta     FAC+3
00.001C86r 2                       lda     FAC+1
00.001C86r 2                       sta     RNDSEED+1
00.001C86r 2                       lda     #$80
00.001C86r 2                       sta     FAC
00.001C86r 2                       stx     FACSIGN
00.001C86r 2                       jmp     NORMALIZE_FAC2
00.001C86r 2               LFC26:
00.001C86r 2                       ldy     $03CA
00.001C86r 2                       lda     $03C7
00.001C86r 2                       ora     #$01
00.001C86r 2               GOMOVMF:
00.001C86r 2                       bne     LFBFA
00.001C86r 2                       .byte   $F0
00.001C86r 2               .else
00.001C86r 2               ; <<< THESE ARE MISSING ONE BYTE FOR FP VALUES >>>
00.001C86r 2               ; (non CONFIG_SMALL)
00.001C86r 2               CONRND1:
00.001C86r 2  98 35 44 7A          .byte   $98,$35,$44,$7A
00.001C8Ar 2               CONRND2:
00.001C8Ar 2  68 28 B1 46          .byte   $68,$28,$B1,$46
00.001C8Er 2               RND:
00.001C8Er 2  20 rr rr             jsr     SIGN
00.001C91r 2               .ifdef CONFIG_CBM_ALL
00.001C91r 2                       bmi     L3F01
00.001C91r 2                       bne     LDF63
00.001C91r 2                       lda     ENTROPY
00.001C91r 2                       sta     FAC+1
00.001C91r 2                       lda     ENTROPY+4
00.001C91r 2                       sta     FAC+2
00.001C91r 2                       lda     ENTROPY+1
00.001C91r 2                       sta     FAC+3
00.001C91r 2                       lda     ENTROPY+5
00.001C91r 2                       sta     FAC+4
00.001C91r 2                       jmp     LDF88
00.001C91r 2               LDF63:
00.001C91r 2               .else
00.001C91r 2  AA                   tax
00.001C92r 2  30 18                bmi     L3F01
00.001C94r 2               .endif
00.001C94r 2  A9 D8                lda     #<RNDSEED
00.001C96r 2  A0 00                ldy     #>RNDSEED
00.001C98r 2  20 rr rr             jsr     LOAD_FAC_FROM_YA
00.001C9Br 2               .ifndef CONFIG_CBM_ALL
00.001C9Br 2  8A                   txa
00.001C9Cr 2  F0 E7                beq     RTS19
00.001C9Er 2               .endif
00.001C9Er 2  A9 rr                lda     #<CONRND1
00.001CA0r 2  A0 rr                ldy     #>CONRND1
00.001CA2r 2  20 rr rr             jsr     FMULT
00.001CA5r 2  A9 rr                lda     #<CONRND2
00.001CA7r 2  A0 rr                ldy     #>CONRND2
00.001CA9r 2  20 rr rr             jsr     FADD
00.001CACr 2               L3F01:
00.001CACr 2  A6 B2                ldx     FAC_LAST
00.001CAEr 2  A5 AF                lda     FAC+1
00.001CB0r 2  85 B2                sta     FAC_LAST
00.001CB2r 2  86 AF                stx     FAC+1
00.001CB4r 2               .ifdef CONFIG_CBM_ALL
00.001CB4r 2                       ldx     FAC+2
00.001CB4r 2                       lda     FAC+3
00.001CB4r 2                       sta     FAC+2
00.001CB4r 2                       stx     FAC+3
00.001CB4r 2               LDF88:
00.001CB4r 2               .endif
00.001CB4r 2  A9 00                lda     #$00
00.001CB6r 2  85 B3                sta     FACSIGN
00.001CB8r 2  A5 AE                lda     FAC
00.001CBAr 2  85 BD                sta     FACEXTENSION
00.001CBCr 2  A9 80                lda     #$80
00.001CBEr 2  85 AE                sta     FAC
00.001CC0r 2  20 rr rr             jsr     NORMALIZE_FAC2
00.001CC3r 2  A2 D8                ldx     #<RNDSEED
00.001CC5r 2  A0 00                ldy     #>RNDSEED
00.001CC7r 2               GOMOVMF:
00.001CC7r 2  4C rr rr             jmp     STORE_FAC_AT_YX_ROUNDED
00.001CCAr 2               .endif
00.001CCAr 2               
00.001CCAr 2               .segment "CHRGET"
0B.000018r 2               ; ----------------------------------------------------------------------------
0B.000018r 2               ; INITIAL VALUE FOR RANDOM NUMBER, ALSO COPIED
0B.000018r 2               ; IN ALONG WITH CHRGET, BUT ERRONEOUSLY:
0B.000018r 2               ; <<< THE LAST BYTE IS NOT COPIED >>>
0B.000018r 2               ; (on all non-CONFIG_SMALL)
0B.000018r 2               ; ----------------------------------------------------------------------------
0B.000018r 2               GENERIC_RNDSEED:
0B.000018r 2               .ifndef KBD
0B.000018r 2               ; random number seed
0B.000018r 2                 .ifdef CONFIG_SMALL
0B.000018r 2                       .byte   $80,$4F,$C7,$52
0B.000018r 2                 .else
0B.000018r 2                   .ifdef CONFIG_11
0B.000018r 2  80 4F C7 52          .byte   $80,$4F,$C7,$52,$58
0B.00001Cr 2  58           
0B.00001Dr 2                   .else
0B.00001Dr 2                       .byte   $80,$4F,$C7,$52,$59
0B.00001Dr 2                   .endif
0B.00001Dr 2                 .endif
0B.00001Dr 2               .endif
0B.00001Dr 2               GENERIC_CHRGET_END:
0B.00001Dr 2               
0B.00001Dr 1               .include "trig.s"
0B.00001Dr 2               .segment "CODE"
00.001CCAr 2               
00.001CCAr 2               SIN_COS_TAN_ATN:
00.001CCAr 2               ; ----------------------------------------------------------------------------
00.001CCAr 2               ; "COS" FUNCTION
00.001CCAr 2               ; ----------------------------------------------------------------------------
00.001CCAr 2               COS:
00.001CCAr 2  A9 rr                lda     #<CON_PI_HALF
00.001CCCr 2  A0 rr                ldy     #>CON_PI_HALF
00.001CCEr 2  20 rr rr             jsr     FADD
00.001CD1r 2               
00.001CD1r 2               ; ----------------------------------------------------------------------------
00.001CD1r 2               ; "SIN" FUNCTION
00.001CD1r 2               ; ----------------------------------------------------------------------------
00.001CD1r 2               SIN:
00.001CD1r 2  20 rr rr             jsr     COPY_FAC_TO_ARG_ROUNDED
00.001CD4r 2  A9 rr                lda     #<CON_PI_DOUB
00.001CD6r 2  A0 rr                ldy     #>CON_PI_DOUB
00.001CD8r 2  A6 BB                ldx     ARGSIGN
00.001CDAr 2  20 rr rr             jsr     DIV
00.001CDDr 2  20 rr rr             jsr     COPY_FAC_TO_ARG_ROUNDED
00.001CE0r 2  20 rr rr             jsr     INT
00.001CE3r 2  A9 00                lda     #$00
00.001CE5r 2  85 BC                sta     STRNG1
00.001CE7r 2  20 rr rr             jsr     FSUBT
00.001CEAr 2               ; ----------------------------------------------------------------------------
00.001CEAr 2               ; (FAC) = ANGLE AS A FRACTION OF A FULL CIRCLE
00.001CEAr 2               ;
00.001CEAr 2               ; NOW FOLD THE RANGE INTO A QUARTER CIRCLE
00.001CEAr 2               ;
00.001CEAr 2               ; <<< THERE ARE MUCH SIMPLER WAYS TO DO THIS >>>
00.001CEAr 2               ; ----------------------------------------------------------------------------
00.001CEAr 2  A9 rr                lda     #<QUARTER
00.001CECr 2  A0 rr                ldy     #>QUARTER
00.001CEEr 2  20 rr rr             jsr     FSUB
00.001CF1r 2  A5 B3                lda     FACSIGN
00.001CF3r 2  48                   pha
00.001CF4r 2  10 0D                bpl     SIN1
00.001CF6r 2  20 rr rr             jsr     FADDH
00.001CF9r 2  A5 B3                lda     FACSIGN
00.001CFBr 2  30 09                bmi     L3F5B
00.001CFDr 2  A5 13                lda     CPRMASK
00.001CFFr 2  49 FF                eor     #$FF
00.001D01r 2  85 13                sta     CPRMASK
00.001D03r 2               ; ----------------------------------------------------------------------------
00.001D03r 2               ; IF FALL THRU, RANGE IS 0...1/2
00.001D03r 2               ; IF BRANCH HERE, RANGE IS 0...1/4
00.001D03r 2               ; ----------------------------------------------------------------------------
00.001D03r 2               SIN1:
00.001D03r 2  20 rr rr             jsr     NEGOP
00.001D06r 2               ; ----------------------------------------------------------------------------
00.001D06r 2               ; IF FALL THRU, RANGE IS -1/2...0
00.001D06r 2               ; IF BRANCH HERE, RANGE IS -1/4...0
00.001D06r 2               ; ----------------------------------------------------------------------------
00.001D06r 2               L3F5B:
00.001D06r 2  A9 rr                lda     #<QUARTER
00.001D08r 2  A0 rr                ldy     #>QUARTER
00.001D0Ar 2  20 rr rr             jsr     FADD
00.001D0Dr 2  68                   pla
00.001D0Er 2  10 03                bpl     L3F68
00.001D10r 2  20 rr rr             jsr     NEGOP
00.001D13r 2               L3F68:
00.001D13r 2  A9 rr                lda     #<POLY_SIN
00.001D15r 2  A0 rr                ldy     #>POLY_SIN
00.001D17r 2  4C rr rr             jmp     POLYNOMIAL_ODD
00.001D1Ar 2               
00.001D1Ar 2               ; ----------------------------------------------------------------------------
00.001D1Ar 2               ; "TAN" FUNCTION
00.001D1Ar 2               ;
00.001D1Ar 2               ; COMPUTE TAN(X) = SIN(X) / COS(X)
00.001D1Ar 2               ; ----------------------------------------------------------------------------
00.001D1Ar 2               TAN:
00.001D1Ar 2  20 rr rr             jsr     STORE_FAC_IN_TEMP1_ROUNDED
00.001D1Dr 2  A9 00                lda     #$00
00.001D1Fr 2  85 13                sta     CPRMASK
00.001D21r 2  20 rr rr             jsr     SIN
00.001D24r 2  A2 9B                ldx     #TEMP3
00.001D26r 2  A0 00                ldy     #$00
00.001D28r 2  20 rr rr             jsr     GOMOVMF
00.001D2Br 2  A9 A4                lda     #TEMP1+(5-BYTES_FP)
00.001D2Dr 2  A0 00                ldy     #$00
00.001D2Fr 2  20 rr rr             jsr     LOAD_FAC_FROM_YA
00.001D32r 2  A9 00                lda     #$00
00.001D34r 2  85 B3                sta     FACSIGN
00.001D36r 2  A5 13                lda     CPRMASK
00.001D38r 2  20 rr rr             jsr     TAN1
00.001D3Br 2  A9 9B                lda     #TEMP3
00.001D3Dr 2  A0 00                ldy     #$00
00.001D3Fr 2  4C rr rr             jmp     FDIV
00.001D42r 2               TAN1:
00.001D42r 2  48                   pha
00.001D43r 2  4C rr rr             jmp     SIN1
00.001D46r 2               
00.001D46r 2               ; ----------------------------------------------------------------------------
00.001D46r 2               .ifdef CONFIG_SMALL
00.001D46r 2               CON_PI_HALF:
00.001D46r 2                       .byte   $81,$49,$0F,$DB
00.001D46r 2               CON_PI_DOUB:
00.001D46r 2                       .byte   $83,$49,$0F,$DB
00.001D46r 2               QUARTER:
00.001D46r 2                       .byte   $7F,$00,$00,$00
00.001D46r 2               POLY_SIN:
00.001D46r 2                       .byte   $04,$86,$1E,$D7,$FB,$87,$99,$26
00.001D46r 2                       .byte   $65,$87,$23,$34,$58,$86,$A5,$5D
00.001D46r 2                       .byte   $E1,$83,$49,$0F,$DB
00.001D46r 2               .else
00.001D46r 2               CON_PI_HALF:
00.001D46r 2  81 49 0F DA          .byte   $81,$49,$0F,$DA,$A2
00.001D4Ar 2  A2           
00.001D4Br 2               CON_PI_DOUB:
00.001D4Br 2  83 49 0F DA          .byte   $83,$49,$0F,$DA,$A2
00.001D4Fr 2  A2           
00.001D50r 2               QUARTER:
00.001D50r 2  7F 00 00 00          .byte   $7F,$00,$00,$00,$00
00.001D54r 2  00           
00.001D55r 2               POLY_SIN:
00.001D55r 2  05 84 E6 1A          .byte   $05,$84,$E6,$1A,$2D,$1B,$86,$28
00.001D59r 2  2D 1B 86 28  
00.001D5Dr 2  07 FB F8 87          .byte   $07,$FB,$F8,$87,$99,$68,$89,$01
00.001D61r 2  99 68 89 01  
00.001D65r 2  87 23 35 DF          .byte   $87,$23,$35,$DF,$E1,$86,$A5,$5D
00.001D69r 2  E1 86 A5 5D  
00.001D6Dr 2  E7 28 83 49          .byte   $E7,$28,$83,$49,$0F,$DA,$A2
00.001D71r 2  0F DA A2     
00.001D74r 2                 .ifndef CONFIG_11
00.001D74r 2               ; no easter egg text before BASIC 1.1
00.001D74r 2                 .elseif !.def(CONFIG_2A)
00.001D74r 2               ; ASCII encoded easter egg
00.001D74r 2               MICROSOFT:
00.001D74r 2  A6 D3 C1 C8          .byte   $A6,$D3,$C1,$C8,$D4,$C8,$D5,$C4
00.001D78r 2  D4 C8 D5 C4  
00.001D7Cr 2  CE CA                .byte   $CE,$CA
00.001D7Er 2                 .else
00.001D7Er 2               ; PET encoded easter egg text since CBM2
00.001D7Er 2               MICROSOFT:
00.001D7Er 2                       .byte   $A1,$54,$46,$8F,$13,$8F,$52,$43
00.001D7Er 2                       .byte   $89,$CD
00.001D7Er 2                 .endif
00.001D7Er 2               .endif
00.001D7Er 2               
00.001D7Er 2               ; ----------------------------------------------------------------------------
00.001D7Er 2               ; "ATN" FUNCTION
00.001D7Er 2               ; ----------------------------------------------------------------------------
00.001D7Er 2               ATN:
00.001D7Er 2  A5 B3                lda     FACSIGN
00.001D80r 2  48                   pha
00.001D81r 2  10 03                bpl     L3FDB
00.001D83r 2  20 rr rr             jsr     NEGOP
00.001D86r 2               L3FDB:
00.001D86r 2  A5 AE                lda     FAC
00.001D88r 2  48                   pha
00.001D89r 2  C9 81                cmp     #$81
00.001D8Br 2  90 07                bcc     L3FE9
00.001D8Dr 2  A9 rr                lda     #<CON_ONE
00.001D8Fr 2  A0 rr                ldy     #>CON_ONE
00.001D91r 2  20 rr rr             jsr     FDIV
00.001D94r 2               ; ----------------------------------------------------------------------------
00.001D94r 2               ; 0 <= X <= 1
00.001D94r 2               ; 0 <= ATN(X) <= PI/8
00.001D94r 2               ; ----------------------------------------------------------------------------
00.001D94r 2               L3FE9:
00.001D94r 2  A9 rr                lda     #<POLY_ATN
00.001D96r 2  A0 rr                ldy     #>POLY_ATN
00.001D98r 2  20 rr rr             jsr     POLYNOMIAL_ODD
00.001D9Br 2  68                   pla
00.001D9Cr 2  C9 81                cmp     #$81
00.001D9Er 2  90 07                bcc     L3FFC
00.001DA0r 2  A9 rr                lda     #<CON_PI_HALF
00.001DA2r 2  A0 rr                ldy     #>CON_PI_HALF
00.001DA4r 2  20 rr rr             jsr     FSUB
00.001DA7r 2               L3FFC:
00.001DA7r 2  68                   pla
00.001DA8r 2  10 03                bpl     L4002
00.001DAAr 2  4C rr rr             jmp     NEGOP
00.001DADr 2               L4002:
00.001DADr 2  60                   rts
00.001DAEr 2               
00.001DAEr 2               ; ----------------------------------------------------------------------------
00.001DAEr 2               POLY_ATN:
00.001DAEr 2               .ifdef CONFIG_SMALL
00.001DAEr 2                       .byte   $08
00.001DAEr 2               		.byte	$78,$3A,$C5,$37
00.001DAEr 2               		.byte	$7B,$83,$A2,$5C
00.001DAEr 2               		.byte	$7C,$2E,$DD,$4D
00.001DAEr 2               		.byte	$7D,$99,$B0,$1E
00.001DAEr 2               		.byte	$7D,$59,$ED,$24
00.001DAEr 2               		.byte	$7E,$91,$72,$00
00.001DAEr 2               		.byte	$7E,$4C,$B9,$73
00.001DAEr 2               		.byte	$7F,$AA,$AA,$53
00.001DAEr 2               		.byte	$81,$00,$00,$00
00.001DAEr 2               .else
00.001DAEr 2  0B                   .byte   $0B
00.001DAFr 2  76 B3 83 BD  		.byte	$76,$B3,$83,$BD,$D3
00.001DB3r 2  D3           
00.001DB4r 2  79 1E F4 A6  		.byte	$79,$1E,$F4,$A6,$F5
00.001DB8r 2  F5           
00.001DB9r 2  7B 83 FC B0  		.byte	$7B,$83,$FC,$B0,$10
00.001DBDr 2  10           
00.001DBEr 2  7C 0C 1F 67          .byte   $7C,$0C,$1F,$67,$CA
00.001DC2r 2  CA           
00.001DC3r 2  7C DE 53 CB  		.byte	$7C,$DE,$53,$CB,$C1
00.001DC7r 2  C1           
00.001DC8r 2  7D 14 64 70  		.byte	$7D,$14,$64,$70,$4C
00.001DCCr 2  4C           
00.001DCDr 2  7D B7 EA 51  		.byte	$7D,$B7,$EA,$51,$7A
00.001DD1r 2  7A           
00.001DD2r 2  7D 63 30 88  		.byte	$7D,$63,$30,$88,$7E
00.001DD6r 2  7E           
00.001DD7r 2  7E 92 44 99  		.byte	$7E,$92,$44,$99,$3A
00.001DDBr 2  3A           
00.001DDCr 2  7E 4C CC 91  		.byte	$7E,$4C,$CC,$91,$C7
00.001DE0r 2  C7           
00.001DE1r 2  7F AA AA AA  		.byte	$7F,$AA,$AA,$AA,$13
00.001DE5r 2  13           
00.001DE6r 2  81 00 00 00          .byte   $81,$00,$00,$00,$00
00.001DEAr 2  00           
00.001DEBr 2               .endif
00.001DEBr 2               
00.001DEBr 2               .if .def(CONFIG_11A) && (!.def(CONFIG_2))
00.001DEBr 2  00           		.byte	$00 ; XXX
00.001DECr 2               .endif
00.001DECr 2               
00.001DECr 1               .include "init.s"
00.001DECr 2               .segment "INIT"
0C.000000r 2               
0C.000000r 2               .ifdef KBD
0C.000000r 2               FNDLIN2:
0C.000000r 2                       php
0C.000000r 2                       jmp     FNDLIN
0C.000000r 2               .endif
0C.000000r 2               
0C.000000r 2               ; ----------------------------------------------------------------------------
0C.000000r 2               PR_WRITTEN_BY:
0C.000000r 2               .ifndef KBD
0C.000000r 2                 .ifndef CONFIG_CBM_ALL
0C.000000r 2  A9 rr                lda     #<QT_WRITTEN_BY
0C.000002r 2  A0 rr                ldy     #>QT_WRITTEN_BY
0C.000004r 2  20 rr rr             jsr     STROUT
0C.000007r 2                 .endif
0C.000007r 2               .endif
0C.000007r 2               COLD_START:
0C.000007r 2               .ifdef KBD
0C.000007r 2                       lda     #<LFD81
0C.000007r 2                       sta     $03A0
0C.000007r 2                       lda     #>LFD81
0C.000007r 2                       sta     $03A1
0C.000007r 2                       lda     #$20
0C.000007r 2                       sta     $0480
0C.000007r 2                       lda     $0352
0C.000007r 2                       sta     $04
0C.000007r 2                       lda     $0353
0C.000007r 2                       sta     $05
0C.000007r 2               .else
0C.000007r 2                 .ifndef CBM2
0C.000007r 2  A2 FF                ldx     #$FF
0C.000009r 2  86 87                stx     CURLIN+1
0C.00000Br 2                 .endif
0C.00000Br 2                 .ifdef CONFIG_NO_INPUTBUFFER_ZP
0C.00000Br 2                       ldx     #$FB
0C.00000Br 2                 .endif
0C.00000Br 2  9A                   txs
0C.00000Cr 2                 .ifndef CONFIG_CBM_ALL
0C.00000Cr 2  A9 rr                lda     #<COLD_START
0C.00000Er 2  A0 rr                ldy     #>COLD_START
0C.000010r 2  85 01                sta     GORESTART+1
0C.000012r 2  84 02                sty     GORESTART+2
0C.000014r 2  85 04                sta     GOSTROUT+1
0C.000016r 2  84 05                sty     GOSTROUT+2
0C.000018r 2  A9 rr                lda     #<AYINT
0C.00001Ar 2  A0 rr                ldy     #>AYINT
0C.00001Cr 2  85 06                sta     GOAYINT
0C.00001Er 2  84 07                sty     GOAYINT+1
0C.000020r 2  A9 rr                lda     #<GIVAYF
0C.000022r 2  A0 rr                ldy     #>GIVAYF
0C.000024r 2  85 08                sta     GOGIVEAYF
0C.000026r 2  84 09                sty     GOGIVEAYF+1
0C.000028r 2                 .endif
0C.000028r 2  A9 4C                lda     #$4C
0C.00002Ar 2                 .ifdef CONFIG_CBM_ALL
0C.00002Ar 2                       sta     JMPADRS
0C.00002Ar 2                 .endif
0C.00002Ar 2  85 00                sta     GORESTART
0C.00002Cr 2                 .ifndef CONFIG_CBM_ALL
0C.00002Cr 2  85 03                sta     GOSTROUT
0C.00002Er 2  85 A1                sta     JMPADRS
0C.000030r 2                 .endif
0C.000030r 2                 .if (!.def(CONFIG_RAM)) && (!.def(CONFIG_CBM_ALL))
0C.000030r 2                       sta     USR
0C.000030r 2                 .endif
0C.000030r 2               
0C.000030r 2                 .ifndef CONFIG_RAM
0C.000030r 2                   .ifdef APPLE
0C.000030r 2                         lda     #<USR_FUNC
0C.000030r 2                         ldy     #>USR_FUNC
0C.000030r 2                   .else
0C.000030r 2                         lda     #<IQERR
0C.000030r 2                         ldy     #>IQERR
0C.000030r 2                   .endif
0C.000030r 2                         sta     USR+1
0C.000030r 2                         sty     USR+2
0C.000030r 2                 .endif
0C.000030r 2                 .ifndef CBM1
0C.000030r 2  A9 48                lda     #WIDTH
0C.000032r 2  85 17                sta     Z17
0C.000034r 2  A9 38                lda     #WIDTH2
0C.000036r 2  85 18                sta     Z18
0C.000038r 2                 .endif
0C.000038r 2               .endif ; KBD
0C.000038r 2               
0C.000038r 2               ; All non-CONFIG_SMALL versions of BASIC have
0C.000038r 2               ; the same bug here: While the number of bytes
0C.000038r 2               ; to be copied is correct for CONFIG_SMALL,
0C.000038r 2               ; it is one byte short on non-CONFIG_SMALL:
0C.000038r 2               ; It seems the "ldx" value below has been
0C.000038r 2               ; hardcoded. So on these configurations,
0C.000038r 2               ; the last byte of GENERIC_RNDSEED, which
0C.000038r 2               ; is 5 bytes instead of 4, does not get copied -
0C.000038r 2               ; which is nothing major, because it is just
0C.000038r 2               ; the least significant 8 bits of the mantissa
0C.000038r 2               ; of the random number seed.
0C.000038r 2               ; KBD added three bytes to CHRGET and removed
0C.000038r 2               ; the random number seed, but only adjusted
0C.000038r 2               ; the number of bytes by adding 3 - this
0C.000038r 2               ; copies four bytes too many, which is no
0C.000038r 2               ; problem.
0C.000038r 2               .ifdef CONFIG_SMALL
0C.000038r 2                 .ifdef KBD
0C.000038r 2                       ldx     #GENERIC_CHRGET_END-GENERIC_CHRGET+4
0C.000038r 2                 .else
0C.000038r 2                       ldx     #GENERIC_CHRGET_END-GENERIC_CHRGET
0C.000038r 2                 .endif
0C.000038r 2               .else
0C.000038r 2  A2 1C                ldx     #GENERIC_CHRGET_END-GENERIC_CHRGET-1 ; XXX
0C.00003Ar 2               .endif
0C.00003Ar 2               L4098:
0C.00003Ar 2  BD rr rr             lda     GENERIC_CHRGET-1,x
0C.00003Dr 2  95 BF                sta     CHRGET-1,x
0C.00003Fr 2  CA                   dex
0C.000040r 2  D0 F8                bne     L4098
0C.000042r 2               .ifdef CONFIG_2
0C.000042r 2                       lda     #$03
0C.000042r 2                       sta     DSCLEN
0C.000042r 2               .endif
0C.000042r 2               .ifndef KBD
0C.000042r 2  8A                   txa
0C.000043r 2  85 B5                sta     SHIFTSIGNEXT
0C.000045r 2                 .ifdef CONFIG_CBM_ALL
0C.000045r 2                       sta     CURDVC
0C.000045r 2                 .endif
0C.000045r 2  85 65                sta     LASTPT+1
0C.000047r 2                 .if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS)
0C.000047r 2  85 15                sta     Z15
0C.000049r 2                 .endif
0C.000049r 2                 .ifndef CONFIG_11
0C.000049r 2                       sta     POSX
0C.000049r 2                 .endif
0C.000049r 2  48                   pha
0C.00004Ar 2  85 14                sta     Z14
0C.00004Cr 2                 .ifndef CBM2
0C.00004Cr 2                   .ifndef MICROTAN
0C.00004Cr 2  A9 03                lda     #$03
0C.00004Er 2  85 A0                sta     DSCLEN
0C.000050r 2                   .endif
0C.000050r 2                   .ifndef CONFIG_11
0C.000050r 2                       lda     #$2C
0C.000050r 2                       sta     LINNUM+1
0C.000050r 2                   .endif
0C.000050r 2  20 rr rr             jsr     CRDO
0C.000053r 2                 .endif
0C.000053r 2                 .ifdef CBM2
0C.000053r 2                       inx
0C.000053r 2                       stx     INPUTBUFFER-3
0C.000053r 2                       stx     INPUTBUFFER-4
0C.000053r 2                 .endif
0C.000053r 2                 .ifdef APPLE
0C.000053r 2                       lda     #$01
0C.000053r 2                       sta     INPUTBUFFER-3
0C.000053r 2                       sta     INPUTBUFFER-4
0C.000053r 2                 .endif
0C.000053r 2  A2 66                ldx     #TEMPST
0C.000055r 2  86 63                stx     TEMPPT
0C.000057r 2               .ifndef CONFIG_CBM_ALL
0C.000057r 2  A9 rr                lda     #<QT_MEMORY_SIZE
0C.000059r 2  A0 rr                ldy     #>QT_MEMORY_SIZE
0C.00005Br 2  20 rr rr             jsr     STROUT
0C.00005Er 2                 .ifdef APPLE
0C.00005Er 2                       jsr     INLINX
0C.00005Er 2                 .else
0C.00005Er 2  20 rr rr             jsr     NXIN
0C.000061r 2                 .endif
0C.000061r 2  86 C7                stx     TXTPTR
0C.000063r 2  84 C8                sty     TXTPTR+1
0C.000065r 2  20 C0 00             jsr     CHRGET
0C.000068r 2  C9 41                cmp     #$41
0C.00006Ar 2  F0 94                beq     PR_WRITTEN_BY
0C.00006Cr 2  A8                   tay
0C.00006Dr 2  D0 21                bne     L40EE
0C.00006Fr 2               .endif
0C.00006Fr 2               .ifndef CBM2
0C.00006Fr 2  A9 rr                lda     #<RAMSTART2
0C.000071r 2               .endif
0C.000071r 2  A0 rr                ldy     #>RAMSTART2
0C.000073r 2               .ifdef CONFIG_2
0C.000073r 2                       sta     TXTTAB
0C.000073r 2                       sty     TXTTAB+1
0C.000073r 2               .endif
0C.000073r 2  85 19                sta     LINNUM
0C.000075r 2  84 1A                sty     LINNUM+1
0C.000077r 2               .ifdef CBM2
0C.000077r 2               		tay
0C.000077r 2               .else
0C.000077r 2  A0 00                ldy     #$00
0C.000079r 2               .endif
0C.000079r 2               L40D7:
0C.000079r 2  E6 19                inc     LINNUM
0C.00007Br 2  D0 02                bne     L40DD
0C.00007Dr 2  E6 1A                inc     LINNUM+1
0C.00007Fr 2               .ifdef CBM1
0C.00007Fr 2               ; CBM: hard RAM top limit is $8000
0C.00007Fr 2                       lda     LINNUM+1
0C.00007Fr 2                       cmp     #$80
0C.00007Fr 2                       beq     L40FA
0C.00007Fr 2               .endif
0C.00007Fr 2               .ifdef CBM2
0C.00007Fr 2               ; optimized version of the CBM1 code
0C.00007Fr 2                       bmi     L40FA
0C.00007Fr 2               .endif
0C.00007Fr 2               L40DD:
0C.00007Fr 2               .ifdef CONFIG_2
0C.00007Fr 2                       lda     #$55 ; 01010101 / 10101010
0C.00007Fr 2               .else
0C.00007Fr 2  A9 92                lda     #$92 ; 10010010 / 00100100
0C.000081r 2               .endif
0C.000081r 2  91 19                sta     (LINNUM),y
0C.000083r 2  D1 19                cmp     (LINNUM),y
0C.000085r 2  D0 15                bne     L40FA
0C.000087r 2  0A                   asl     a
0C.000088r 2  91 19                sta     (LINNUM),y
0C.00008Ar 2  D1 19                cmp     (LINNUM),y
0C.00008Cr 2               .ifdef CONFIG_CBM_ALL
0C.00008Cr 2                       beq     L40D7
0C.00008Cr 2               .else
0C.00008Cr 2                 .ifndef CONFIG_11
0C.00008Cr 2                       beq     L40D7; old: faster
0C.00008Cr 2                       bne     L40FA
0C.00008Cr 2                 .else
0C.00008Cr 2  D0 0E                bne     L40FA; new: slower
0C.00008Er 2  F0 E9                beq     L40D7
0C.000090r 2                 .endif
0C.000090r 2               L40EE:
0C.000090r 2  20 C6 00             jsr     CHRGOT
0C.000093r 2  20 rr rr             jsr     LINGET
0C.000096r 2  A8                   tay
0C.000097r 2  F0 03                beq     L40FA
0C.000099r 2  4C rr rr             jmp     SYNERR
0C.00009Cr 2               .endif
0C.00009Cr 2               L40FA:
0C.00009Cr 2  A5 19                lda     LINNUM
0C.00009Er 2  A4 1A                ldy     LINNUM+1
0C.0000A0r 2  85 84                sta     MEMSIZ
0C.0000A2r 2  84 85                sty     MEMSIZ+1
0C.0000A4r 2               .ifndef MICROTAN
0C.0000A4r 2  85 80                sta     FRETOP
0C.0000A6r 2  84 81                sty     FRETOP+1
0C.0000A8r 2               .endif
0C.0000A8r 2               L4106:
0C.0000A8r 2               .ifndef CONFIG_CBM_ALL
0C.0000A8r 2                 .ifdef APPLE
0C.0000A8r 2                       lda     #$FF
0C.0000A8r 2                       jmp     L2829
0C.0000A8r 2                       .word	STROUT ; PATCH!
0C.0000A8r 2                       jsr     NXIN
0C.0000A8r 2                 .else
0C.0000A8r 2  A9 rr                lda     #<QT_TERMINAL_WIDTH
0C.0000AAr 2  A0 rr                ldy     #>QT_TERMINAL_WIDTH
0C.0000ACr 2  20 rr rr             jsr     STROUT
0C.0000AFr 2  20 rr rr             jsr     NXIN
0C.0000B2r 2                 .endif
0C.0000B2r 2  86 C7                stx     TXTPTR
0C.0000B4r 2  84 C8                sty     TXTPTR+1
0C.0000B6r 2  20 C0 00             jsr     CHRGET
0C.0000B9r 2  A8                   tay
0C.0000BAr 2  F0 1C                beq     L4136
0C.0000BCr 2  20 rr rr             jsr     LINGET
0C.0000BFr 2  A5 1A                lda     LINNUM+1
0C.0000C1r 2  D0 E5                bne     L4106
0C.0000C3r 2  A5 19                lda     LINNUM
0C.0000C5r 2  C9 10                cmp     #$10
0C.0000C7r 2  90 DF                bcc     L4106
0C.0000C9r 2               L2829:
0C.0000C9r 2  85 17                sta     Z17
0C.0000CBr 2               L4129:
0C.0000CBr 2  E9 0E                sbc     #$0E
0C.0000CDr 2  B0 FC                bcs     L4129
0C.0000CFr 2  49 FF                eor     #$FF
0C.0000D1r 2  E9 0C                sbc     #$0C
0C.0000D3r 2  18                   clc
0C.0000D4r 2  65 17                adc     Z17
0C.0000D6r 2  85 18                sta     Z18
0C.0000D8r 2               .endif
0C.0000D8r 2               L4136:
0C.0000D8r 2               .ifdef CONFIG_RAM
0C.0000D8r 2  A9 rr                lda     #<QT_WANT
0C.0000DAr 2  A0 rr                ldy     #>QT_WANT
0C.0000DCr 2  20 rr rr             jsr     STROUT
0C.0000DFr 2  20 rr rr             jsr     NXIN
0C.0000E2r 2  86 C7                stx     TXTPTR
0C.0000E4r 2  84 C8                sty     TXTPTR+1
0C.0000E6r 2  20 C0 00             jsr     CHRGET
0C.0000E9r 2  A2 rr                ldx     #<RAMSTART1
0C.0000EBr 2  A0 rr                ldy     #>RAMSTART1
0C.0000EDr 2  C9 59                cmp     #'Y'
0C.0000EFr 2  F0 34                beq     L4183
0C.0000F1r 2  C9 41                cmp     #'A'
0C.0000F3r 2  F0 04                beq     L4157
0C.0000F5r 2  C9 4E                cmp     #'N'
0C.0000F7r 2  D0 DF                bne     L4136
0C.0000F9r 2               L4157:
0C.0000F9r 2  A2 rr                ldx     #<IQERR
0C.0000FBr 2  A0 rr                ldy     #>IQERR
0C.0000FDr 2  8E rr rr             stx     UNFNC_ATN
0C.000100r 2  8C rr rr             sty     UNFNC_ATN+1
0C.000103r 2  A2 rr                ldx     #<ATN	; overwrite starting
0C.000105r 2  A0 rr                ldy     #>ATN	; with ATN
0C.000107r 2  C9 41                cmp     #'A'
0C.000109r 2  F0 1A                beq     L4183
0C.00010Br 2  A2 rr                ldx     #<IQERR
0C.00010Dr 2  A0 rr                ldy     #>IQERR
0C.00010Fr 2  8E rr rr             stx     UNFNC_COS
0C.000112r 2  8C rr rr             sty     UNFNC_COS+1
0C.000115r 2  8E rr rr             stx     UNFNC_TAN
0C.000118r 2  8C rr rr             sty     UNFNC_TAN+1
0C.00011Br 2  8E rr rr             stx     UNFNC_SIN
0C.00011Er 2  8C rr rr             sty     UNFNC_SIN+1
0C.000121r 2  A2 rr                ldx     #<SIN_COS_TAN_ATN	; overwrite
0C.000123r 2  A0 rr                ldy     #>SIN_COS_TAN_ATN	; all of trig.s
0C.000125r 2               L4183:
0C.000125r 2               .else
0C.000125r 2                       ldx     #<RAMSTART2
0C.000125r 2                       ldy     #>RAMSTART2
0C.000125r 2               .endif
0C.000125r 2  86 78                stx     TXTTAB
0C.000127r 2  84 79                sty     TXTTAB+1
0C.000129r 2  A0 00                ldy     #$00
0C.00012Br 2  98                   tya
0C.00012Cr 2  91 78                sta     (TXTTAB),y
0C.00012Er 2  E6 78                inc     TXTTAB
0C.000130r 2               .ifndef CBM2
0C.000130r 2  D0 02                bne     L4192
0C.000132r 2  E6 79                inc     TXTTAB+1
0C.000134r 2               L4192:
0C.000134r 2               .endif
0C.000134r 2               .if CONFIG_SCRTCH_ORDER = 1
0C.000134r 2                       jsr     SCRTCH
0C.000134r 2               .endif
0C.000134r 2  A5 78                lda     TXTTAB
0C.000136r 2  A4 79                ldy     TXTTAB+1
0C.000138r 2  20 rr rr             jsr     REASON
0C.00013Br 2               .ifdef CBM2
0C.00013Br 2                       lda     #<QT_BASIC
0C.00013Br 2                       ldy     #>QT_BASIC
0C.00013Br 2                       jsr     STROUT
0C.00013Br 2               .else
0C.00013Br 2  20 rr rr             jsr     CRDO
0C.00013Er 2               .endif
0C.00013Er 2  A5 84                lda     MEMSIZ
0C.000140r 2  38                   sec
0C.000141r 2  E5 78                sbc     TXTTAB
0C.000143r 2  AA                   tax
0C.000144r 2  A5 85                lda     MEMSIZ+1
0C.000146r 2  E5 79                sbc     TXTTAB+1
0C.000148r 2  20 rr rr             jsr     LINPRT
0C.00014Br 2  A9 rr                lda     #<QT_BYTES_FREE
0C.00014Dr 2  A0 rr                ldy     #>QT_BYTES_FREE
0C.00014Fr 2  20 rr rr             jsr     STROUT
0C.000152r 2               .if CONFIG_SCRTCH_ORDER = 2
0C.000152r 2  20 rr rr             jsr     SCRTCH
0C.000155r 2               .endif
0C.000155r 2               .ifdef CONFIG_CBM_ALL
0C.000155r 2                       jmp     RESTART
0C.000155r 2               .else
0C.000155r 2  A9 rr                lda     #<STROUT
0C.000157r 2  A0 rr                ldy     #>STROUT
0C.000159r 2  85 04                sta     GOSTROUT+1
0C.00015Br 2  84 05                sty     GOSTROUT+2
0C.00015Dr 2                 .if CONFIG_SCRTCH_ORDER = 3
0C.00015Dr 2                        jsr     SCRTCH
0C.00015Dr 2                 .endif
0C.00015Dr 2  A9 rr                lda     #<RESTART
0C.00015Fr 2  A0 rr                ldy     #>RESTART
0C.000161r 2  85 01                sta     GORESTART+1
0C.000163r 2  84 02                sty     GORESTART+2
0C.000165r 2  6C 01 00             jmp     (GORESTART+1)
0C.000168r 2               .endif
0C.000168r 2               
0C.000168r 2                 .if .def(CONFIG_RAM) || .def(OSI)
0C.000168r 2               ; OSI is compiled for ROM, but includes
0C.000168r 2               ; this unused string
0C.000168r 2               QT_WANT:
0C.000168r 2  57 41 4E 54          .byte   "WANT SIN-COS-TAN-ATN"
0C.00016Cr 2  20 53 49 4E  
0C.000170r 2  2D 43 4F 53  
0C.00017Cr 2  00                   .byte   0
0C.00017Dr 2                 .endif
0C.00017Dr 2               QT_WRITTEN_BY:
0C.00017Dr 2                 .ifndef CONFIG_CBM_ALL
0C.00017Dr 2                   .ifdef APPLE
0C.00017Dr 2               		asc80 "COPYRIGHT 1977 BY MICROSOFT CO"
0C.00017Dr 2               		.byte	CR,0
0C.00017Dr 2                   .else
0C.00017Dr 2  0D 0A 0C             .byte   CR,LF,$0C ; FORM FEED
0C.000180r 2                     .ifndef CONFIG_11
0C.000180r 2                       .byte   "WRITTEN BY RICHARD W. WEILAND."
0C.000180r 2                     .else
0C.000180r 2  57 52 49 54          .byte   "WRITTEN BY WEILAND & GATES"
0C.000184r 2  54 45 4E 20  
0C.000188r 2  42 59 20 57  
0C.00019Ar 2                     .endif
0C.00019Ar 2  0D 0A 00             .byte   CR,LF,0
0C.00019Dr 2                   .endif
0C.00019Dr 2               QT_MEMORY_SIZE:
0C.00019Dr 2  4D 45 4D 4F          .byte   "MEMORY SIZE"
0C.0001A1r 2  52 59 20 53  
0C.0001A5r 2  49 5A 45     
0C.0001A8r 2  00                   .byte   0
0C.0001A9r 2               QT_TERMINAL_WIDTH:
0C.0001A9r 2  54 45 52 4D          .byte   "TERMINAL WIDTH"
0C.0001ADr 2  49 4E 41 4C  
0C.0001B1r 2  20 57 49 44  
0C.0001B7r 2  00                   .byte   0
0C.0001B8r 2                 .endif
0C.0001B8r 2               QT_BYTES_FREE:
0C.0001B8r 2  20 42 59 54          .byte   " BYTES FREE"
0C.0001BCr 2  45 53 20 46  
0C.0001C0r 2  52 45 45     
0C.0001C3r 2                 .ifdef CBM1
0C.0001C3r 2                 .elseif .def(CBM2)
0C.0001C3r 2                       .byte   CR,0
0C.0001C3r 2                 .elseif .def(APPLE)
0C.0001C3r 2                       .byte   0
0C.0001C3r 2                 .else
0C.0001C3r 2  0D 0A 0D 0A          .byte   CR,LF,CR,LF
0C.0001C7r 2                 .endif
0C.0001C7r 2               QT_BASIC:
0C.0001C7r 2                 .ifdef OSI
0C.0001C7r 2                       .byte   "OSI 6502 BASIC VERSION 1.0 REV 3.2"
0C.0001C7r 2                 .endif
0C.0001C7r 2                 .ifdef KIM
0C.0001C7r 2  4D 4F 53 20          .byte   "MOS TECH 6502 BASIC V1.1"
0C.0001CBr 2  54 45 43 48  
0C.0001CFr 2  20 36 35 30  
0C.0001DFr 2                 .endif
0C.0001DFr 2                 .ifdef MICROTAN
0C.0001DFr 2                       .byte   "MICROTAN BASIC"
0C.0001DFr 2                 .endif
0C.0001DFr 2                 .ifdef CBM1
0C.0001DFr 2                       .byte   $13 ; HOME
0C.0001DFr 2                       .byte   "*** COMMODORE BASIC ***"
0C.0001DFr 2                       .byte   $11,$11,$11,0 ; DOWN/DOWN/DOWN
0C.0001DFr 2                 .endif
0C.0001DFr 2                 .ifdef CBM2
0C.0001DFr 2                       .byte   "### COMMODORE BASIC ###"
0C.0001DFr 2                       .byte   CR,CR,0
0C.0001DFr 2                 .endif
0C.0001DFr 2                 .ifdef APPLE
0C.0001DFr 2                       .byte   LF,CR,LF
0C.0001DFr 2               		.byte	"APPLE BASIC V1.1"
0C.0001DFr 2                 .endif
0C.0001DFr 2                 .ifndef CONFIG_CBM_ALL
0C.0001DFr 2  0D 0A                .byte   CR,LF
0C.0001E1r 2                   .ifdef MICROTAN
0C.0001E1r 2                       .byte   "(C) 1980 MICROSOFT"
0C.0001E1r 2                   .else
0C.0001E1r 2  43 4F 50 59          .byte   "COPYRIGHT 1977 BY MICROSOFT CO."
0C.0001E5r 2  52 49 47 48  
0C.0001E9r 2  54 20 31 39  
0C.000200r 2                   .endif
0C.000200r 2  0D 0A 00             .byte   CR,LF,0
0C.000203r 2                 .endif
0C.000203r 2               .endif ; KBD
0C.000203r 2               
0C.000203r 1               .include "extra.s"
0C.000203r 2               .segment "EXTRA"
0D.000000r 2               
0D.000000r 2               .ifdef KIM
0D.000000r 2               .include "kim_extra.s"
0D.000000r 3               .segment "EXTRA"
0D.000000r 3               
0D.000000r 3               RAMSTART2:
0D.000000r 3  08 29 25 20          .byte   $08,$29,$25,$20,$60,$2A,$E5,$E4
0D.000004r 3  60 2A E5 E4  
0D.000008r 3  20 66 24 65          .byte   $20,$66,$24,$65,$AC,$04,$A4
0D.00000Cr 3  AC 04 A4     
0D.00000Fr 3               
0D.00000Fr 2               .endif
0D.00000Fr 2               
0D.00000Fr 2               .ifdef CONFIG_CBM1_PATCHES
0D.00000Fr 2               .include "cbm1_patches.s"
0D.00000Fr 2               .endif
0D.00000Fr 2               
0D.00000Fr 2               .ifdef KBD
0D.00000Fr 2               .include "kbd_extra.s"
0D.00000Fr 2               .endif
0D.00000Fr 2               
0D.00000Fr 2               .ifdef APPLE
0D.00000Fr 2               .include "apple_extra.s"
0D.00000Fr 2               .endif
0D.00000Fr 2               
0D.00000Fr 2               .ifdef MICROTAN
0D.00000Fr 2               .include "microtan_extra.s"
0D.00000Fr 2               .endif
0D.00000Fr 2               
0D.00000Fr 1               

Segment summary

Segment: 00 = CODE
Segment: 04 = ZEROPAGE
Segment: 07 = VECTORS
Segment: 08 = KEYWORDS
Segment: 09 = DUMMY
Segment: 0A = ERROR
Segment: 0B = CHRGET
Segment: 0C = INIT
Segment: 0D = EXTRA
