Files
cc65/l.txt
2023-12-03 13:58:04 -08:00

9047 lines
434 KiB
Plaintext

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