msbasic/msbasic.s

7874 lines
145 KiB
ArmAsm
Raw Normal View History

2008-10-09 07:24:49 +00:00
; Microsoft BASIC for 6502
2008-10-06 05:21:05 +00:00
2008-10-12 01:32:09 +00:00
.ifdef CBM1
.include "defines_cbm.s" ; 6
CONFIG_CBM_ALL := 1
CONFIG_CBM1_PATCHES := 1 ; ** don't turn off! **
CBM1_APPLE := 1
CBM_APPLE := 1
CONFIG_DATAFLAG := 1
.endif
.ifdef OSI
.include "defines_osi.s"; 2
CONFIG_SMALL := 1
CONFIG_SCRTCH_ORDER := 1
CONFIG_NULL := 1
CONFIG_PRINT_CR := 1 ; print CR when line end reached
CONFIG_DATAFLAG := 1
.endif
.ifdef APPLE
.include "defines_apple.s"; 10
CONFIG_11 := 1
CBM2_APPLE := 1
CONFIG_SAFE_NAMENOTFOUND := 1
CBM2_KIM_APPLE := 1 ; OUTDO difference
CBM1_APPLE := 1
CBM_APPLE := 1
KIM_APPLE := 1
CONFIG_SCRTCH_ORDER := 1
CONFIG_PRINT_CR := 1 ; print CR when line end reached
; INPUTBUFFER > $0100
.endif
.ifdef KIM
.include "defines_kim.s" ; 7
KIM_KBD := 1
CONFIG_11 := 1
CONFIG_11_NOAPPLE := 1
CONFIG_SAFE_NAMENOTFOUND := 1
CBM2_KIM_APPLE := 1 ; OUTDO difference
KIM_APPLE := 1
CONFIG_NULL := 1
CONFIG_PRINT_CR := 1 ; print CR when line end reached
.endif
2008-10-11 23:57:13 +00:00
.ifdef CBM2
2008-10-12 01:32:09 +00:00
.include "defines_cbm.s" ; 11
CONFIG_CBM_ALL := 1
CONFIG_11 := 1
CONFIG_11_NOAPPLE := 1
CBM2_KBD := 1
CBM2_KIM := 1
CBM2_APPLE := 1
CBM2_KIM_APPLE := 1 ; OUTDO difference
CBM_APPLE := 1
CONFIG_DATAFLAG := 1
; INPUTBUFFER > $0100
.endif
.ifdef KBD
.include "defines_kbd.s" ; 10
CONFIG_SCRTCH_ORDER := 1
CONFIG_SMALL := 1
CBM2_KBD := 1
KIM_KBD := 1
CONFIG_11 := 1
CONFIG_11_NOAPPLE := 1
CONFIG_SAFE_NAMENOTFOUND := 1
; INPUTBUFFER > $0100
.endif
.include "macros.s"
.zeropage
.ifdef CONFIG_CBM_ALL
2008-10-11 23:57:13 +00:00
USR: .res 1
Z00 = USR
L0001: .res 1
L0002: .res 1
GOWARM: .res 1
2008-10-12 01:32:09 +00:00
Z15: .res 1
.ifdef CBM1
CHARAC = $5A
ENDCHR = $5B
.else
CHARAC = GOWARM
ENDCHR = Z15
.endif
.endif
.ifdef CBM2
EOLPNTR: .res 1
2008-10-11 23:57:13 +00:00
Z17: .res 1
GOSTROUT = Z17
2008-10-12 01:32:09 +00:00
DIMFLG = Z17
2008-10-11 23:57:13 +00:00
Z18: .res 1
2008-10-12 01:32:09 +00:00
VALTYP = Z18
GOGIVEAYF: .res 1
DATAFLG: .res 1
SUBFLG: .res 1
INPUTFLG: .res 1
CPRMASK: .res 1
Z14: .res 1
2008-10-11 23:57:13 +00:00
Z03: .res 3
LINNUM: .res 2
2008-10-12 01:32:09 +00:00
TEMPPT: .res 1; := $0065-82
LASTPT: .res 2; := $0066-82
2008-10-11 23:57:13 +00:00
TEMPST: .res 9; := $0068-82
INDEX: .res 2; := $0071-82
DEST: .res 2; := $0073-82
RESULT: .res 4; := $0075-82
RESULT_LAST:.res 1; := $0079-82
TXTTAB: .res 2; := $007A-82
VARTAB: .res 2; := $007C-82
ARYTAB: .res 2; := $007E-82
STREND: .res 2; := $0080-82
FRETOP: .res 2; := $0082-82
FRESPC: .res 2; := $0084-82
MEMSIZ: .res 2; := $0086-82
CURLIN: .res 2; := $0088-82
OLDLIN: .res 2; := $008A-82
OLDTEXT: .res 2; := $008C-82
Z8C: .res 2; := $008E-82
DATPTR: .res 2; := $0090-82
INPTR: .res 2; := $0092-82
VARNAM: .res 2; := $0094-82
VARPNT: .res 2; := $0096-82
FORPNT: .res 2; := $0098-82
LASTOP: .res 2; := $009A-82
TXPSV = LASTOP
CPRTYP: .res 1; := $009C-82
FNCNAM: .res 2; := $009D-82
TEMP3 = FNCNAM
DSCPTR: .res 3; := $009F-82
DSCLEN: .res 1; := $00A2-82
JMPADRS: .res 1; := $00A3-82
Z52: .res 1; := $00A4-82;
LENGTH = Z52
ARGEXTENSION:.res 1; := $00A5-82 ; overlap with JMPADRS! (same on c64)
TEMP1: .res 1; := $00A6-82
HIGHDS: .res 2; := $00A7-82
HIGHTR: .res 2; := $00A9-82
TEMP2: .res 1; := $00AB-82
INDX: .res 1; := $00AC-82
TMPEXP = INDX
EXPON: .res 1; := $00AD-82
LOWTR: .res 1; := $00AE-82 ; $9D also EXPSGN
LOWTRX = LOWTR
EXPSGN: .res 1; := $00AF-82
FAC: .res 4; := $00B0-82
FAC_LAST: .res 1; := $00B4-82
FACSIGN: .res 1; := $00B5-82
SERLEN: .res 1; := $00B6-82
SHIFTSIGNEXT:.res 1; := $00B7-82
ARG: .res 4; := $00B8-82
ARG_LAST: .res 1; := $00BC-82
ARGSIGN: .res 1; := $00BD-82
STRNG1: .res 1; := $00BE-82 ; TODO: also SGNCPR
FACEXTENSION:.res 1; := $00BF-82
STRNG2: .res 2; := $00C0-82
CHRGET: .res 6; := $00C2-82
CHRGOT: .res 1; := $00C8-82
TXTPTR: .res 6; := $00C9-82
L00CF: .res 11; := $00CF-82
RNDSEED: .res 14; := $00DA-82
Z96: .res 48; := $00E8-82
Z16: .res 1; := $0118-82
.endif
2008-10-06 05:21:05 +00:00
.setcpu "6502"
2008-10-09 09:18:45 +00:00
.macpack longbranch
2008-10-06 05:21:05 +00:00
STACK := $0100
2008-10-11 17:10:12 +00:00
.segment "HEADER"
2008-10-08 05:07:59 +00:00
.ifdef KBD
jmp LE68C
.byte $00,$13,$56
.endif
2008-10-11 17:10:12 +00:00
.segment "VECTORS"
2008-10-06 05:21:05 +00:00
TOKEN_ADDRESS_TABLE:
2008-10-11 17:10:12 +00:00
.segment "KEYWORDS"
TOKEN_NAME_TABLE:
.macro keyvec key, vec
2008-10-11 23:57:13 +00:00
;.local label
2008-10-11 17:10:12 +00:00
.segment "VECTORS"
2008-10-11 23:57:13 +00:00
;label:
;.out label
2008-10-11 17:10:12 +00:00
.addr vec
.segment "KEYWORDS"
htasc key
.endmacro
.macro keyrts key, vec
.segment "VECTORS"
.word vec-1
.segment "KEYWORDS"
htasc key
.endmacro
keyrts "END", END
keyrts "FOR", FOR
keyrts "NEXT", NEXT
keyrts "DATA", DATA
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-11 17:10:12 +00:00
keyrts "INPUT#", INPUTH
2008-10-06 10:32:35 +00:00
.endif
2008-10-11 17:10:12 +00:00
keyrts "INPUT", INPUT
keyrts "DIM", DIM
keyrts "READ", READ
2008-10-11 07:15:19 +00:00
.ifdef APPLE
2008-10-11 17:10:12 +00:00
keyrts "PLT", PLT
2008-10-11 07:15:19 +00:00
.else
2008-10-11 17:10:12 +00:00
keyrts "LET", LET
.endif
keyrts "GOTO", GOTO
keyrts "RUN", RUN
keyrts "IF", IF
keyrts "RESTORE", RESTORE
keyrts "GOSUB", GOSUB
keyrts "RETURN", POP
2008-10-11 07:15:19 +00:00
.ifdef APPLE
2008-10-11 17:10:12 +00:00
keyrts "TEX", TEX
2008-10-11 07:15:19 +00:00
.else
2008-10-11 17:10:12 +00:00
keyrts "REM", REM
2008-10-11 07:15:19 +00:00
.endif
2008-10-11 17:10:12 +00:00
keyrts "STOP", STOP
keyrts "ON", ON
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_NULL
2008-10-11 17:10:12 +00:00
keyrts "NULL", NULL
2008-10-06 10:32:35 +00:00
.endif
2008-10-08 05:07:59 +00:00
.ifdef KBD
2008-10-11 17:10:12 +00:00
keyrts "PLOD", PLOD
keyrts "PSAV", PSAV
keyrts "VLOD", VLOD
keyrts "VSAV", VSAV
2008-10-08 05:07:59 +00:00
.else
2008-10-11 17:10:12 +00:00
keyrts "WAIT", WAIT
keyrts "LOAD", LOAD
keyrts "SAVE", SAVE
2008-10-09 07:24:49 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-11 17:10:12 +00:00
keyrts "VERIFY", VERIFY
2008-10-06 10:32:35 +00:00
.endif
2008-10-11 17:10:12 +00:00
keyrts "DEF", DEF
2008-10-08 05:07:59 +00:00
.ifdef KBD
2008-10-11 17:10:12 +00:00
keyrts "SLOD", SLOD
2008-10-08 05:07:59 +00:00
.else
2008-10-11 17:10:12 +00:00
keyrts "POKE", POKE
.endif
.ifdef CONFIG_CBM_ALL
keyrts "PRINT#", PRINTH
2008-10-08 05:07:59 +00:00
.endif
2008-10-11 17:10:12 +00:00
keyrts "PRINT", PRINT
keyrts "CONT", CONT
keyrts "LIST", LIST
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-11 17:10:12 +00:00
keyrts "CLR", CLEAR
.else
keyrts "CLEAR", CLEAR
2008-10-06 10:32:35 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-11 17:10:12 +00:00
keyrts "CMD", CMD
keyrts "SYS", SYS
keyrts "OPEN", OPEN
keyrts "CLOSE", CLOSE
2008-10-06 10:32:35 +00:00
.endif
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-11 17:10:12 +00:00
keyrts "GET", GET
2008-10-08 05:07:59 +00:00
.endif
.ifdef KBD
2008-10-11 17:10:12 +00:00
keyrts "PRT", PRT
2008-10-07 05:52:42 +00:00
.endif
2008-10-11 17:10:12 +00:00
keyrts "NEW", NEW
2008-10-11 22:37:02 +00:00
.segment "KEYWORDS"
htasc "TAB("
htasc "TO"
htasc "FN"
htasc "SPC("
htasc "THEN"
htasc "NOT"
htasc "STEP"
htasc "+"
htasc "-"
htasc "*"
htasc "/"
.ifdef KBD
htasc "#"
.else
htasc "^"
.endif
htasc "AND"
htasc "OR"
htasc ">"
htasc "="
htasc "<"
2008-10-11 17:10:12 +00:00
.segment "VECTORS"
2008-10-06 05:21:05 +00:00
UNFNC:
2008-10-11 22:37:02 +00:00
keyvec "SGN", SGN
keyvec "INT", INT
keyvec "ABS", ABS
2008-10-08 05:07:59 +00:00
.ifdef KBD
2008-10-11 22:37:02 +00:00
keyvec "VER", VER
.else
.ifdef KIM
keyvec "USR", IQERR
2008-10-07 10:36:34 +00:00
.else
2008-10-11 22:37:02 +00:00
keyvec "USR", USR
2008-10-08 05:07:59 +00:00
.endif
2008-10-07 04:44:27 +00:00
.endif
2008-10-11 22:37:02 +00:00
keyvec "FRE", FRE
keyvec "POS", POS
keyvec "SQR", SQR
keyvec "RND", RND
keyvec "LOG", LOG
keyvec "EXP", EXP
keyvec "COS", COS
keyvec "SIN", SIN
keyvec "TAN", TAN
keyvec "ATN", ATN
2008-10-08 05:07:59 +00:00
.ifdef KBD
2008-10-11 22:37:02 +00:00
keyvec "GETC", GETC
2008-10-08 05:07:59 +00:00
.else
2008-10-11 22:37:02 +00:00
keyvec "PEEK", PEEK
.endif
keyvec "LEN", LEN
keyvec "STR$", STR
keyvec "VAL", VAL
keyvec "ASC", ASC
keyvec "CHR$", CHRSTR
keyvec "LEFT$", LEFTSTR
keyvec "RIGHT$", RIGHTSTR
keyvec "MID$", MIDSTR
.ifdef CBM2_KBD
htasc "GO"
2008-10-08 05:07:59 +00:00
.endif
2008-10-11 22:37:02 +00:00
.byte 0
.segment "VECTORS"
2008-10-06 05:21:05 +00:00
MATHTBL:
.byte $79
.word FADDT-1
.byte $79
.word FSUBT-1
.byte $7B
.word FMULTT-1
.byte $7B
.word FDIVT-1
.byte $7F
.word FPWRT-1
.byte $50
2008-10-09 07:24:49 +00:00
.word TAND-1
2008-10-06 05:21:05 +00:00
.byte $46
2008-10-09 07:24:49 +00:00
.word OR-1
2008-10-06 05:21:05 +00:00
.byte $7D
.word NEGOP-1
.byte $5A
2008-10-09 07:24:49 +00:00
.word EQUOP-1
2008-10-06 05:21:05 +00:00
.byte $64
.word RELOPS-1
2008-10-11 17:10:12 +00:00
.segment "CODE"
2008-10-06 05:21:05 +00:00
ERROR_MESSAGES:
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
.define ERRSTR_NOFOR "NF"
.define ERRSTR_SYNTAX "SN"
.define ERRSTR_NOGOSUB "RG"
.define ERRSTR_NODATA "OD"
.define ERRSTR_ILLQTY "FC"
.define ERRSTR_OVERFLOW "OV"
.define ERRSTR_MEMFULL "OM"
.define ERRSTR_UNDEFSTAT "US"
.define ERRSTR_BADSUBS "BS"
.define ERRSTR_REDIMD "DD"
.define ERRSTR_ZERODIV "/0"
.define ERRSTR_ILLDIR "ID"
.define ERRSTR_BADTYPE "TM"
.define ERRSTR_STRLONG "LS"
.define ERRSTR_FRMCPX "ST"
.define ERRSTR_CANTCONT "CN"
.define ERRSTR_UNDEFFN "UF"
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
.define ERRSTR_NOFOR "NEXT WITHOUT FOR"
.define ERRSTR_SYNTAX "SYNTAX"
.define ERRSTR_NOGOSUB "RETURN WITHOUT GOSUB"
.define ERRSTR_NODATA "OUT OF DATA"
.define ERRSTR_ILLQTY "ILLEGAL QUANTITY"
.define ERRSTR_OVERFLOW "OVERFLOW"
.define ERRSTR_MEMFULL "OUT OF MEMORY"
.define ERRSTR_UNDEFSTAT "UNDEF'D STATEMENT"
.define ERRSTR_BADSUBS "BAD SUBSCRIPT"
.define ERRSTR_REDIMD "REDIM'D ARRAY"
.define ERRSTR_ZERODIV "DIVISION BY ZERO"
.define ERRSTR_ILLDIR "ILLEGAL DIRECT"
.define ERRSTR_BADTYPE "TYPE MISMATCH"
.define ERRSTR_STRLONG "STRING TOO LONG"
2008-10-07 05:51:08 +00:00
.ifdef CBM1
2008-10-06 10:32:35 +00:00
.define ERRSTR_BADDATA "BAD DATA"
.endif
2008-10-07 05:51:08 +00:00
.ifdef CBM2
.define ERRSTR_BADDATA "FILE DATA"
.endif
2008-10-06 05:21:05 +00:00
.define ERRSTR_FRMCPX "FORMULA TOO COMPLEX"
.define ERRSTR_CANTCONT "CAN'T CONTINUE"
.define ERRSTR_UNDEFFN "UNDEF'D FUNCTION"
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
ERR_NOFOR := <(*-ERROR_MESSAGES)
htasc ERRSTR_NOFOR
ERR_SYNTAX := <(*-ERROR_MESSAGES)
htasc ERRSTR_SYNTAX
ERR_NOGOSUB := <(*-ERROR_MESSAGES)
htasc ERRSTR_NOGOSUB
ERR_NODATA := <(*-ERROR_MESSAGES)
htasc ERRSTR_NODATA
ERR_ILLQTY := <(*-ERROR_MESSAGES)
htasc ERRSTR_ILLQTY
2008-10-07 05:51:08 +00:00
.ifdef CBM1
2008-10-06 10:32:35 +00:00
.byte 0,0,0,0,0
.endif
2008-10-06 05:21:05 +00:00
ERR_OVERFLOW := <(*-ERROR_MESSAGES)
htasc ERRSTR_OVERFLOW
ERR_MEMFULL := <(*-ERROR_MESSAGES)
htasc ERRSTR_MEMFULL
ERR_UNDEFSTAT := <(*-ERROR_MESSAGES)
htasc ERRSTR_UNDEFSTAT
ERR_BADSUBS := <(*-ERROR_MESSAGES)
htasc ERRSTR_BADSUBS
ERR_REDIMD := <(*-ERROR_MESSAGES)
htasc ERRSTR_REDIMD
ERR_ZERODIV := <(*-ERROR_MESSAGES)
htasc ERRSTR_ZERODIV
ERR_ILLDIR := <(*-ERROR_MESSAGES)
htasc ERRSTR_ILLDIR
ERR_BADTYPE := <(*-ERROR_MESSAGES)
htasc ERRSTR_BADTYPE
ERR_STRLONG := <(*-ERROR_MESSAGES)
htasc ERRSTR_STRLONG
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
ERR_BADDATA := <(*-ERROR_MESSAGES)
htasc ERRSTR_BADDATA
.endif
2008-10-06 05:21:05 +00:00
ERR_FRMCPX := <(*-ERROR_MESSAGES)
htasc ERRSTR_FRMCPX
ERR_CANTCONT := <(*-ERROR_MESSAGES)
htasc ERRSTR_CANTCONT
ERR_UNDEFFN := <(*-ERROR_MESSAGES)
htasc ERRSTR_UNDEFFN
QT_ERROR:
2008-10-08 05:07:59 +00:00
.ifdef KBD
.byte " err"
2008-10-11 06:23:53 +00:00
.else
.ifdef APPLE
.byte " ERR"
.byte $07,$07
2008-10-08 05:07:59 +00:00
.else
2008-10-06 05:21:05 +00:00
.byte " ERROR"
2008-10-11 06:23:53 +00:00
.endif
2008-10-08 05:07:59 +00:00
.endif
2008-10-06 05:21:05 +00:00
.byte $00
2008-10-09 07:24:49 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
QT_IN:
.byte " IN "
.byte $00
QT_OK:
2008-10-11 06:23:53 +00:00
.ifdef APPLE
.byte $0D,$00,$00
.byte "K"
.else
2008-10-06 05:21:05 +00:00
.byte $0D,$0A
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
.byte "READY."
.else
2008-10-06 05:21:05 +00:00
.byte "OK"
2008-10-11 06:23:53 +00:00
.endif
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
.byte $0D,$0A,$00
2008-10-09 07:24:49 +00:00
.else
.byte $54,$D2 ; ???
OKPRT:
jsr LDE42
.byte $0D,$0D
.byte ">>"
.byte $0D,$0A,$00
rts
nop
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
QT_BREAK:
2008-10-08 05:07:59 +00:00
.ifdef KBD
2008-10-08 06:08:08 +00:00
.byte $0D,$0A
2008-10-08 05:07:59 +00:00
.byte " Brk"
.byte $00
2008-10-09 07:24:49 +00:00
.byte $54,$D0 ; ???
2008-10-08 05:07:59 +00:00
.else
2008-10-06 05:21:05 +00:00
.byte $0D,$0A
.byte "BREAK"
.byte $00
2008-10-08 05:07:59 +00:00
.endif
2008-10-06 05:21:05 +00:00
GTFORPNT:
tsx
inx
inx
inx
inx
L2279:
lda STACK+1,x
cmp #$81
bne L22A1
lda FORPNT+1
bne L228E
lda STACK+2,x
sta FORPNT
lda STACK+3,x
sta FORPNT+1
L228E:
cmp STACK+3,x
bne L229A
lda FORPNT
cmp STACK+2,x
beq L22A1
L229A:
txa
clc
adc #BYTES_PER_FRAME
tax
bne L2279
L22A1:
rts
BLTU:
jsr REASON
sta STREND
sty STREND+1
BLTU2:
sec
lda HIGHTR
sbc LOWTR
sta INDEX
tay
lda HIGHTR+1
sbc LOWTR+1
tax
inx
tya
beq L22DD
lda HIGHTR
sec
sbc INDEX
sta HIGHTR
bcs L22C6
dec HIGHTR+1
sec
L22C6:
lda HIGHDS
sbc INDEX
sta HIGHDS
bcs L22D6
dec HIGHDS+1
bcc L22D6
L22D2:
lda (HIGHTR),y
sta (HIGHDS),y
L22D6:
dey
bne L22D2
lda (HIGHTR),y
sta (HIGHDS),y
L22DD:
dec HIGHTR+1
dec HIGHDS+1
dex
bne L22D6
rts
CHKMEM:
asl a
adc #SPACE_FOR_GOSUB
bcs MEMERR
sta INDEX
tsx
cpx INDEX
bcc MEMERR
rts
REASON:
cpy FRETOP+1
bcc L231E
bne L22FC
cmp FRETOP
bcc L231E
L22FC:
pha
ldx #FAC-TEMP1-1
tya
L2300:
pha
lda TEMP1,x
dex
bpl L2300
jsr GARBAG
ldx #TEMP1-FAC+1
L230B:
pla
sta FAC,x
inx
bmi L230B
pla
tay
pla
cpy FRETOP+1
bcc L231E
bne MEMERR
cmp FRETOP
bcs MEMERR
L231E:
rts
MEMERR:
ldx #ERR_MEMFULL
ERROR:
lsr Z14
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-09 07:24:49 +00:00
lda Z03 ; output
beq LC366 ; is screen
jsr CLRCH ; otherwise redirect output back to screen
2008-10-06 10:32:35 +00:00
lda #$00
2008-10-07 04:44:27 +00:00
sta Z03
2008-10-06 10:32:35 +00:00
LC366:
2008-10-09 07:24:49 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr CRDO
jsr OUTQUES
L2329:
lda ERROR_MESSAGES,x
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
pha
and #$7F
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr OUTDO
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda ERROR_MESSAGES+1,x
2008-10-08 05:07:59 +00:00
.ifdef KBD
and #$7F
.endif
2008-10-06 05:21:05 +00:00
jsr OUTDO
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
inx
pla
bpl L2329
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr STKINI
lda #<QT_ERROR
ldy #>QT_ERROR
PRINT_ERROR_LINNUM:
jsr STROUT
ldy CURLIN+1
iny
beq RESTART
jsr INPRT
RESTART:
2008-10-08 05:07:59 +00:00
.ifdef KBD
jsr CRDO
nop
2008-10-08 11:42:15 +00:00
L2351X:
2008-10-09 07:24:49 +00:00
jsr OKPRT
2008-10-08 11:42:15 +00:00
L2351:
2008-10-08 05:07:59 +00:00
jsr LFDDA
LE28E:
bpl RESTART
.else
2008-10-06 05:21:05 +00:00
lsr Z14
lda #<QT_OK
ldy #>QT_OK
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
jsr STROUT
.else
2008-10-11 09:24:32 +00:00
jsr GOWARM
2008-10-07 04:44:27 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2351:
jsr INLIN
2008-10-08 05:07:59 +00:00
.endif
2008-10-06 05:21:05 +00:00
stx TXTPTR
sty TXTPTR+1
jsr CHRGET
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-06 05:21:05 +00:00
tax
2008-10-07 05:52:42 +00:00
.endif
2008-10-08 11:42:15 +00:00
.ifdef KBD
beq L2351X
.else
2008-10-06 05:21:05 +00:00
beq L2351
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldx #$FF
stx CURLIN+1
bcc NUMBERED_LINE
jsr PARSE_INPUT_LINE
jmp NEWSTT2
NUMBERED_LINE:
jsr LINGET
jsr PARSE_INPUT_LINE
sty EOLPNTR
2008-10-08 05:07:59 +00:00
.ifdef KBD
2008-10-08 11:42:15 +00:00
jsr LFD3E
2008-10-08 05:07:59 +00:00
lda JMPADRS+1
sta LOWTR
sta $96
lda JMPADRS+2
sta LOWTR+1
sta $97
lda $13
sta $06FE
lda $14
sta $06FF
inc $13
bne LE2D2
inc $14
bne LE2D2
jmp SYNERR
LE2D2:
jsr LF457
ldx #$96
jsr LE4D4
bcs LE2FD
LE2DC:
ldx #$00
lda (JMPADRS+1,x)
sta ($96,x)
inc JMPADRS+1
bne LE2E8
inc JMPADRS+2
LE2E8:
inc $96
bne LE2EE
inc $97
LE2EE:
ldx #$2B
jsr LE4D4
bne LE2DC
lda $96
sta VARTAB
lda $97
sta VARTAB+1
LE2FD:
jsr SETPTRS
jsr LE33D
lda Z00
LE306:
beq LE28E
cmp #$A5
beq LE306
clc
.else
2008-10-08 11:42:15 +00:00
jsr FNDLIN
2008-10-06 05:21:05 +00:00
bcc PUT_NEW_LINE
ldy #$01
lda (LOWTR),y
sta INDEX+1
lda VARTAB
sta INDEX
lda LOWTR+1
sta DEST+1
lda LOWTR
dey
sbc (LOWTR),y
clc
adc VARTAB
sta VARTAB
sta DEST
lda VARTAB+1
adc #$FF
sta VARTAB+1
sbc LOWTR+1
tax
sec
lda LOWTR
sbc VARTAB
tay
bcs L23A5
inx
dec DEST+1
L23A5:
clc
adc INDEX
bcc L23AD
dec INDEX+1
clc
L23AD:
lda (INDEX),y
sta (DEST),y
iny
bne L23AD
inc INDEX+1
inc DEST+1
dex
bne L23AD
PUT_NEW_LINE:
2008-10-07 08:03:36 +00:00
.ifdef CBM2
jsr SETPTRS
2008-10-08 11:42:15 +00:00
jsr LE33D
2008-10-09 07:24:49 +00:00
lda INPUTBUFFER
2008-10-07 08:03:36 +00:00
beq L2351
clc
.else
2008-10-06 05:21:05 +00:00
lda INPUTBUFFER
beq FIX_LINKS
lda MEMSIZ
ldy MEMSIZ+1
sta FRETOP
sty FRETOP+1
2008-10-08 05:07:59 +00:00
.endif
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda VARTAB
sta HIGHTR
adc EOLPNTR
sta HIGHDS
ldy VARTAB+1
sty HIGHTR+1
bcc L23D6
iny
L23D6:
sty HIGHDS+1
jsr BLTU
2008-10-11 06:23:53 +00:00
.ifdef CBM2_APPLE
2008-10-08 05:07:59 +00:00
lda LINNUM
ldy LINNUM+1
2008-10-11 06:23:53 +00:00
sta INPUTBUFFER-2
2008-10-08 05:07:59 +00:00
sty INPUTBUFFER-1
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda STREND
ldy STREND+1
sta VARTAB
sty VARTAB+1
ldy EOLPNTR
dey
L23E6:
2008-10-07 08:03:36 +00:00
lda INPUTBUFFER-4,y
2008-10-06 05:21:05 +00:00
sta (LOWTR),y
dey
bpl L23E6
FIX_LINKS:
jsr SETPTRS
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-08 11:42:15 +00:00
jsr LE33D
2008-10-07 09:18:22 +00:00
jmp L2351
2008-10-08 11:42:15 +00:00
LE33D:
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda TXTTAB
ldy TXTTAB+1
sta INDEX
sty INDEX+1
clc
L23FA:
ldy #$01
lda (INDEX),y
2008-10-09 07:24:49 +00:00
.ifdef CBM2_KBD
beq RET3
.else
2008-10-06 05:21:05 +00:00
bne L2403
jmp L2351
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2403:
ldy #$04
L2405:
iny
lda (INDEX),y
bne L2405
iny
tya
adc INDEX
tax
ldy #$00
sta (INDEX),y
lda INDEX+1
adc #$00
iny
sta (INDEX),y
stx INDEX
sta INDEX+1
bcc L23FA
2008-10-08 05:07:59 +00:00
.ifdef KBD
SLOD:
ldx #$01
.byte $2C
PLOD:
ldx #$00
ldy CURLIN+1
iny
sty JMPADRS
jsr LFFD3
jsr LF422
ldx #$02
jsr LFF64
ldx #$6F
ldy #$00
jsr LE39A
jsr LE33D
jmp CLEARC
.byte $FF
.byte $FF
.byte $FF
VER:
lda #$13
ldx FAC
beq LE397
lda $DFF9
LE397:
jmp FLOAT
LE39A:
lda VARTAB,x
clc
adc $051B,y
sta VARTAB,y
lda VARTAB+1,x
adc $051C,y
sta VARTAB+1,y
2008-10-09 07:24:49 +00:00
RET3:
2008-10-08 05:07:59 +00:00
rts
.else
2008-10-11 06:23:53 +00:00
.ifdef APPLE
2008-10-11 07:15:19 +00:00
INLIN:
2008-10-11 06:23:53 +00:00
ldx #$DD
2008-10-11 07:15:19 +00:00
INLIN1:
2008-10-11 06:23:53 +00:00
stx $33
jsr L2900
cpx #$EF
bcs L0C32
ldx #$EF
L0C32:
lda #$00
sta $0200,x
ldx #$FF
ldy #$01
rts
2008-10-11 10:14:29 +00:00
RDKEY:
2008-10-11 06:23:53 +00:00
jsr LFD0C
and #$7F
.else
2008-10-07 08:03:36 +00:00
.ifdef CBM2
2008-10-09 07:32:26 +00:00
RET3:
2008-10-07 08:03:36 +00:00
rts
.else
2008-10-09 07:32:26 +00:00
L2420:
2008-10-09 07:24:49 +00:00
.ifdef OSI
jsr OUTDO
.endif
2008-10-06 05:21:05 +00:00
dex
bpl INLIN2
L2423:
2008-10-07 05:52:42 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
jsr OUTDO
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr CRDO
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
INLIN:
ldx #$00
INLIN2:
jsr GETLN
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
cmp #$07
beq L2443
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
cmp #$0D
beq L2453
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-11 16:21:06 +00:00
cmp #$20 ; line editing
2008-10-06 05:21:05 +00:00
bcc INLIN2
cmp #$7D
bcs INLIN2
2008-10-11 16:21:06 +00:00
cmp #$40 ; @
2008-10-06 05:21:05 +00:00
beq L2423
2008-10-11 16:21:06 +00:00
cmp #$5F ; _
2008-10-09 07:32:26 +00:00
beq L2420
2008-10-06 05:21:05 +00:00
L2443:
cpx #$47
bcs L244C
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta INPUTBUFFER,x
inx
2008-10-07 05:52:42 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
.byte $2C
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
bne INLIN2
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L244C:
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
lda #$07
jsr OUTDO
bne INLIN2
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2453:
jmp L29B9
2008-10-07 04:44:27 +00:00
GETLN:
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
jsr CHRIN
ldy Z03
2008-10-06 10:32:35 +00:00
bne L2465
.else
2008-10-06 05:21:05 +00:00
jsr MONRDKEY
2008-10-06 10:32:35 +00:00
.endif
2008-10-07 05:52:42 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
and #$7F
2008-10-11 06:23:53 +00:00
.endif
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
cmp #$0F
bne L2465
pha
lda Z14
eor #$FF
sta Z14
pla
L2465:
rts
2008-10-08 05:07:59 +00:00
.endif /* KBD */
2008-10-06 05:21:05 +00:00
PARSE_INPUT_LINE:
ldx TXTPTR
ldy #$04
sty DATAFLG
L246C:
2008-10-09 07:32:26 +00:00
lda INPUTBUFFERX,x
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
bpl LC49E
cmp #$FF
beq L24AC
inx
bne L246C
LC49E:
.endif
2008-10-06 05:21:05 +00:00
cmp #$20
beq L24AC
sta ENDCHR
cmp #$22
beq L24D0
bit DATAFLG
bvs L24AC
cmp #$3F
bne L2484
2008-10-09 08:23:42 +00:00
lda #TOKEN_PRINT
2008-10-06 05:21:05 +00:00
bne L24AC
L2484:
cmp #$30
bcc L248C
cmp #$3C
bcc L24AC
L248C:
sty STRNG2
ldy #$00
sty EOLPNTR
dey
stx TXTPTR
dex
L2496:
iny
L2497:
inx
L2498:
2008-10-08 11:42:15 +00:00
.ifdef KBD
jsr LF42D
.else
2008-10-09 08:23:42 +00:00
lda INPUTBUFFERX,x
.ifndef CBM2
2008-10-06 05:21:05 +00:00
cmp #$20
beq L2497
2008-10-08 11:42:15 +00:00
.endif
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
sec
sbc TOKEN_NAME_TABLE,y
beq L2496
cmp #$80
bne L24D7
ora EOLPNTR
L24AA:
ldy STRNG2
L24AC:
inx
iny
2008-10-07 08:03:36 +00:00
sta INPUTBUFFER-5,y
lda INPUTBUFFER-5,y
2008-10-06 05:21:05 +00:00
beq L24EA
sec
sbc #$3A
beq L24BF
cmp #$49
bne L24C1
L24BF:
sta DATAFLG
L24C1:
sec
2008-10-09 08:23:42 +00:00
sbc #TOKEN_REM-':'
2008-10-06 05:21:05 +00:00
bne L246C
sta ENDCHR
L24C8:
2008-10-09 08:23:42 +00:00
lda INPUTBUFFERX,x
2008-10-06 05:21:05 +00:00
beq L24AC
cmp ENDCHR
beq L24AC
L24D0:
iny
2008-10-07 08:03:36 +00:00
sta INPUTBUFFER-5,y
2008-10-06 05:21:05 +00:00
inx
bne L24C8
L24D7:
ldx TXTPTR
inc EOLPNTR
L24DB:
iny
lda MATHTBL+28+1,y
bpl L24DB
lda TOKEN_NAME_TABLE,y
bne L2498
2008-10-09 08:23:42 +00:00
lda INPUTBUFFERX,x
2008-10-06 05:21:05 +00:00
bpl L24AA
L24EA:
2008-10-07 08:03:36 +00:00
sta INPUTBUFFER-3,y
2008-10-11 10:36:02 +00:00
.if INPUTBUFFER >= $0100
2008-10-07 08:03:36 +00:00
dec TXTPTR+1
.endif
2008-10-09 08:23:42 +00:00
lda #<INPUTBUFFER-1
2008-10-06 05:21:05 +00:00
sta TXTPTR
rts
FNDLIN:
2008-10-08 05:07:59 +00:00
.ifdef KBD
jsr CHRGET
jmp LE444
LE440:
php
jsr LINGET
LE444:
jsr LF457
ldx #$FF
plp
beq LE464
jsr CHRGOT
beq L2520
cmp #$A5
bne L2520
jsr CHRGET
beq LE464
bcs LE461
jsr LINGET
beq L2520
LE461:
jmp SYNERR
LE464:
stx $13
stx $14
.else
2008-10-06 05:21:05 +00:00
lda TXTTAB
ldx TXTTAB+1
FL1:
ldy #$01
sta LOWTR
stx LOWTR+1
lda (LOWTR),y
beq L251F
iny
iny
lda LINNUM+1
cmp (LOWTR),y
bcc L2520
beq L250D
dey
bne L2516
L250D:
lda LINNUM
dey
cmp (LOWTR),y
bcc L2520
beq L2520
L2516:
dey
lda (LOWTR),y
tax
dey
lda (LOWTR),y
bcs FL1
L251F:
clc
2008-10-08 05:07:59 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2520:
rts
NEW:
bne L2520
SCRTCH:
lda #$00
tay
sta (TXTTAB),y
iny
sta (TXTTAB),y
lda TXTTAB
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
clc
.endif
2008-10-06 05:21:05 +00:00
adc #$02
sta VARTAB
lda TXTTAB+1
adc #$00
sta VARTAB+1
SETPTRS:
jsr STXTPT
2008-10-11 06:23:53 +00:00
.ifndef APPLE
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-06 05:21:05 +00:00
lda #$00
CLEAR:
bne L256A
2008-10-07 05:52:42 +00:00
.endif
2008-10-11 06:23:53 +00:00
.endif
2008-10-06 05:21:05 +00:00
CLEARC:
2008-10-08 06:08:08 +00:00
.ifdef KBD
lda #<CONST_MEMSIZ
ldy #>CONST_MEMSIZ
.else
2008-10-06 05:21:05 +00:00
lda MEMSIZ
ldy MEMSIZ+1
2008-10-08 06:08:08 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta FRETOP
sty FRETOP+1
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
jsr CLALL
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda VARTAB
ldy VARTAB+1
sta ARYTAB
sty ARYTAB+1
sta STREND
sty STREND+1
jsr RESTORE
STKINI:
ldx #TEMPST
stx TEMPPT
pla
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
tay
2008-10-11 07:15:19 +00:00
.else
.ifdef APPLE
sta STACK+249
2008-10-07 08:03:36 +00:00
.else
2008-10-06 05:21:05 +00:00
sta STACK+253
2008-10-11 07:15:19 +00:00
.endif
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
pla
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-11 07:15:19 +00:00
.ifdef APPLE
sta STACK+250
.else
2008-10-06 05:21:05 +00:00
sta STACK+254
2008-10-11 07:15:19 +00:00
.endif
2008-10-07 08:03:36 +00:00
.endif
2008-10-09 08:23:42 +00:00
ldx #STACK_TOP
2008-10-06 05:21:05 +00:00
txs
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
pha
tya
pha
.endif
2008-10-06 05:21:05 +00:00
lda #$00
sta OLDTEXT+1
sta SUBFLG
L256A:
rts
STXTPT:
clc
lda TXTTAB
adc #$FF
sta TXTPTR
lda TXTTAB+1
adc #$FF
sta TXTPTR+1
rts
2008-10-08 05:07:59 +00:00
.ifdef KBD
2008-10-08 11:42:15 +00:00
LE4C0:
2008-10-09 09:18:45 +00:00
ldy #<LE444
ldx #>LE444
2008-10-08 05:07:59 +00:00
LE4C4:
jsr LFFD6
jsr LFFED
lda $0504
clc
adc #$08
sta $0504
rts
LE4D4:
lda $01,x
cmp JMPADRS+2
bne LE4DE
lda $00,x
cmp JMPADRS+1
LE4DE:
rts
LIST:
jsr LE440
bne LE4DE
pla
pla
L25A6:
jsr CRDO
.else
2008-10-06 05:21:05 +00:00
LIST:
bcc L2581
beq L2581
cmp #TOKEN_MINUS
bne L256A
L2581:
jsr LINGET
jsr FNDLIN
jsr CHRGOT
beq L2598
cmp #TOKEN_MINUS
bne L2520
jsr CHRGET
jsr LINGET
bne L2520
L2598:
pla
pla
lda LINNUM
ora LINNUM+1
bne L25A6
lda #$FF
sta LINNUM
sta LINNUM+1
L25A6:
2008-10-08 05:07:59 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldy #$01
2008-10-11 10:44:10 +00:00
.ifdef CONFIG_DATAFLAG
2008-10-06 05:21:05 +00:00
sty DATAFLG
2008-10-07 08:03:36 +00:00
.endif
2008-10-08 11:42:15 +00:00
lda (LOWTRX),y
2008-10-06 05:21:05 +00:00
beq L25E5
jsr ISCNTC
2008-10-08 05:07:59 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
jsr CRDO
2008-10-08 05:07:59 +00:00
.endif
2008-10-06 05:21:05 +00:00
iny
2008-10-08 11:42:15 +00:00
lda (LOWTRX),y
2008-10-06 05:21:05 +00:00
tax
iny
2008-10-08 11:42:15 +00:00
lda (LOWTRX),y
2008-10-06 05:21:05 +00:00
cmp LINNUM+1
bne L25C1
cpx LINNUM
beq L25C3
L25C1:
bcs L25E5
L25C3:
sty FORPNT
jsr LINPRT
lda #$20
L25CA:
ldy FORPNT
and #$7F
L25CE:
jsr OUTDO
2008-10-11 10:44:10 +00:00
.ifdef CONFIG_DATAFLAG
2008-10-06 05:21:05 +00:00
cmp #$22
bne LA519
lda DATAFLG
eor #$FF
sta DATAFLG
LA519:
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
iny
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-06 05:21:05 +00:00
beq L25E5
2008-10-07 05:52:42 +00:00
.endif
2008-10-08 11:42:15 +00:00
lda (LOWTRX),y
2008-10-06 05:21:05 +00:00
bne L25E8
tay
2008-10-08 11:42:15 +00:00
lda (LOWTRX),y
2008-10-06 05:21:05 +00:00
tax
iny
2008-10-08 11:42:15 +00:00
lda (LOWTRX),y
stx LOWTRX
sta LOWTRX+1
2008-10-06 05:21:05 +00:00
bne L25A6
L25E5:
jmp RESTART
L25E8:
bpl L25CE
2008-10-11 10:44:10 +00:00
.ifdef CONFIG_DATAFLAG
2008-10-06 05:21:05 +00:00
cmp #$FF
beq L25CE
bit DATAFLG
bmi L25CE
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
sec
sbc #$7F
tax
sty FORPNT
ldy #$FF
L25F2:
dex
beq L25FD
L25F5:
iny
lda TOKEN_NAME_TABLE,y
bpl L25F5
bmi L25F2
L25FD:
iny
lda TOKEN_NAME_TABLE,y
bmi L25CA
jsr OUTDO
bne L25FD
FOR:
lda #$80
sta SUBFLG
jsr LET
jsr GTFORPNT
bne L2619
txa
adc #FOR_STACK1
tax
txs
L2619:
pla
pla
lda #FOR_STACK2
jsr CHKMEM
jsr DATAN
clc
tya
adc TXTPTR
pha
lda TXTPTR+1
adc #$00
pha
lda CURLIN+1
pha
lda CURLIN
pha
lda #TOKEN_TO
jsr SYNCHR
jsr CHKNUM
jsr FRMNUM
lda FACSIGN
ora #$7F
and FAC+1
sta FAC+1
lda #<STEP
ldy #>STEP
sta INDEX
sty INDEX+1
jmp L2CED
STEP:
lda #<CON_ONE
ldy #>CON_ONE
jsr LOAD_FAC_FROM_YA
jsr CHRGOT
cmp #TOKEN_STEP
bne L2665
jsr CHRGET
jsr FRMNUM
L2665:
jsr SIGN
jsr FRM_STACK2
lda FORPNT+1
pha
lda FORPNT
pha
lda #$81
pha
NEWSTT:
jsr ISCNTC
lda TXTPTR
ldy TXTPTR+1
2008-10-09 09:18:45 +00:00
.ifdef CBM2_KBD
cpy #>INPUTBUFFER
.endif
2008-10-08 06:08:08 +00:00
.ifdef CBM2
2008-10-07 08:03:36 +00:00
nop
2008-10-09 09:18:45 +00:00
.endif
.ifdef CBM2_KBD
2008-10-08 11:42:15 +00:00
beq LC6D4
.else
2008-10-06 05:21:05 +00:00
beq L2683
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta OLDTEXT
sty OLDTEXT+1
2008-10-07 08:03:36 +00:00
LC6D4:
2008-10-06 05:21:05 +00:00
ldy #$00
L2683:
lda (TXTPTR),y
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
beq LA5DC
cmp #$3A
beq NEWSTT2
SYNERR1:
jmp SYNERR
LA5DC:
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
bne COLON
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldy #$02
lda (TXTPTR),y
clc
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-09 09:18:45 +00:00
jeq L2701
2008-10-07 08:03:36 +00:00
.else
2008-10-06 05:21:05 +00:00
beq L2701
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
iny
lda (TXTPTR),y
sta CURLIN
iny
lda (TXTPTR),y
sta CURLIN+1
tya
adc TXTPTR
sta TXTPTR
bcc NEWSTT2
inc TXTPTR+1
NEWSTT2:
jsr CHRGET
jsr EXECUTE_STATEMENT
jmp NEWSTT
EXECUTE_STATEMENT:
2008-10-11 07:15:19 +00:00
.ifndef CONFIG_11_NOAPPLE
2008-10-06 05:21:05 +00:00
beq RET1
2008-10-11 07:15:19 +00:00
.ifndef APPLE
2008-10-06 05:21:05 +00:00
sec
2008-10-11 07:15:19 +00:00
.endif
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
beq RET2
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
EXECUTE_STATEMENT1:
sbc #$80
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-09 09:18:45 +00:00
jcc LET
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
bcc LET1
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
cmp #NUM_TOKENS
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
bcs LC721
.else
2008-10-06 05:21:05 +00:00
bcs SYNERR1
.endif
2008-10-06 05:21:05 +00:00
asl a
tay
lda TOKEN_ADDRESS_TABLE+1,y
pha
lda TOKEN_ADDRESS_TABLE,y
pha
jmp CHRGET
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-06 05:21:05 +00:00
LET1:
jmp LET
COLON:
cmp #$3A
beq NEWSTT2
SYNERR1:
jmp SYNERR
2008-10-07 05:52:42 +00:00
.endif
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
LC721:
2008-10-08 06:08:08 +00:00
.ifdef KBD
cmp #$45
.else
2008-10-07 08:03:36 +00:00
cmp #$4B
2008-10-08 06:08:08 +00:00
.endif
2008-10-07 08:03:36 +00:00
bne SYNERR1
jsr CHRGET
2008-10-09 10:35:37 +00:00
lda #TOKEN_TO
2008-10-07 08:03:36 +00:00
jsr SYNCHR
jmp GOTO
.endif
2008-10-06 05:21:05 +00:00
RESTORE:
sec
lda TXTTAB
sbc #$01
ldy TXTTAB+1
bcs SETDA
dey
SETDA:
sta DATPTR
sty DATPTR+1
RET2:
rts
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
ISCNTC:
2008-10-07 04:44:27 +00:00
.endif
2008-10-11 10:14:29 +00:00
.ifdef KBD
jsr LE8F3
bcc RET1
LE633:
jsr LDE7F
beq STOP
cmp #$03
bne LE633
2008-10-11 06:23:53 +00:00
.endif
2008-10-08 06:08:08 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
jmp MONISCNTC
nop
nop
nop
nop
lsr a
bcc RET2
jsr GETLN
2008-10-11 10:14:29 +00:00
cmp #$03
.endif
.ifdef APPLE
lda $C000
cmp #$83
beq L0ECC
rts
L0ECC:
jsr RDKEY
cmp #$03
2008-10-06 10:32:35 +00:00
.endif
.ifdef KIM
2008-10-06 05:21:05 +00:00
lda #$01
bit $1740
bmi RET2
ldx #$08
lda #$03
clc
cmp #$03
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
STOP:
bcs END2
END:
clc
END2:
bne RET1
lda TXTPTR
ldy TXTPTR+1
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-08 06:08:08 +00:00
ldx CURLIN+1
2008-10-07 08:03:36 +00:00
inx
.endif
2008-10-06 05:21:05 +00:00
beq END4
sta OLDTEXT
sty OLDTEXT+1
CONTROL_C_TYPED:
lda CURLIN
ldy CURLIN+1
sta OLDLIN
sty OLDLIN+1
END4:
pla
pla
L2701:
lda #<QT_BREAK
ldy #>QT_BREAK
2008-10-08 06:08:08 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
ldx #$00
stx Z14
2008-10-08 06:08:08 +00:00
.endif
2008-10-06 05:21:05 +00:00
bcc L270E
jmp PRINT_ERROR_LINNUM
L270E:
jmp RESTART
2008-10-08 06:08:08 +00:00
.ifdef KBD
LE664:
tay
2008-10-08 11:42:15 +00:00
jmp SNGFLT
2008-10-08 06:08:08 +00:00
.endif
2008-10-06 05:21:05 +00:00
CONT:
bne RET1
ldx #ERR_CANTCONT
ldy OLDTEXT+1
bne L271C
jmp ERROR
L271C:
lda OLDTEXT
sta TXTPTR
sty TXTPTR+1
lda OLDLIN
ldy OLDLIN+1
sta CURLIN
sty CURLIN+1
RET1:
rts
2008-10-08 06:08:08 +00:00
.ifdef KBD
2008-10-08 11:42:15 +00:00
PRT:
2008-10-08 06:08:08 +00:00
jsr GETBYT
txa
ror a
ror a
ror a
sta $8F
rts
LE68C:
ldy #$12
LE68E:
lda LEA30,y
sta $03A2,y
dey
bpl LE68E
rts
.endif
2008-10-11 10:36:02 +00:00
.if .def(CONFIG_NULL) || .def(CBM1)
; CBM1 has the keyword removed,
; but the code is, still here
2008-10-06 05:21:05 +00:00
NULL:
jsr GETBYT
bne RET1
inx
cpx #NULL_MAX
bcs L2739
dex
stx Z15
rts
L2739:
jmp IQERR
2008-10-07 08:03:36 +00:00
.endif
2008-10-11 07:15:19 +00:00
.ifndef CONFIG_11_NOAPPLE
2008-10-06 05:21:05 +00:00
CLEAR:
bne RET1
jmp CLEARC
2008-10-07 08:03:36 +00:00
.endif
2008-10-11 07:15:19 +00:00
.ifdef APPLE
SAVE:
jsr L0F42
jsr LFECD
jsr L0F51
jmp LFECD
LOAD:
jsr L0F42
jsr LFEFD
jsr L0F51
jsr LFEFD
lda #<QT_LOADED
ldy #>QT_LOADED
jsr STROUT
jmp FIX_LINKS
QT_LOADED:
.byte 0 ; XXX PATCHED
.byte "OADED"
.byte 0
L0F42:
lda #$6C
ldy #$00
sta $3C
sty $3D
lda #$6E
sta $3E
sty $3F
rts
L0F51:
lda $6A
ldy $6B
sta $3C
sty $3D
lda $6C
ldy $6D
sta $3E
sty $3F
rts
.endif
2008-10-07 08:03:36 +00:00
.ifdef KIM
2008-10-06 05:21:05 +00:00
SAVE:
tsx
stx INPUTFLG
lda #$37
sta $F2
lda #$FE
sta $17F9
lda TXTTAB
ldy TXTTAB+1
sta $17F5
sty $17F6
lda VARTAB
ldy VARTAB+1
sta $17F7
sty $17F8
jmp L1800
ldx INPUTFLG
txs
2008-10-07 04:44:27 +00:00
lda #<QT_SAVED
ldy #>QT_SAVED
2008-10-06 05:21:05 +00:00
jmp STROUT
2008-10-07 04:44:27 +00:00
QT_LOADED:
2008-10-06 05:21:05 +00:00
.byte "LOADED"
.byte $00
2008-10-07 04:44:27 +00:00
QT_SAVED:
2008-10-06 05:21:05 +00:00
.byte "SAVED"
.byte $0D,$0A,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00
LOAD:
lda TXTTAB
ldy TXTTAB+1
sta $17F5
sty $17F6
lda #$FF
sta $17F9
lda #$A6
2008-10-09 09:18:45 +00:00
ldy #$27 ; XXX
2008-10-06 05:21:05 +00:00
sta L0001
2008-10-11 09:24:32 +00:00
sty L0001+1
2008-10-06 05:21:05 +00:00
jmp L1873
ldx #$FF
txs
lda #$48
2008-10-09 09:18:45 +00:00
ldy #$23 ; XXX
2008-10-06 05:21:05 +00:00
sta L0001
2008-10-11 09:24:32 +00:00
sty L0001+1
2008-10-07 04:44:27 +00:00
lda #<QT_LOADED
ldy #>QT_LOADED
2008-10-06 05:21:05 +00:00
jsr STROUT
ldx $17ED
ldy $17EE
txa
bne L27C2
nop
L27C2:
nop
stx VARTAB
sty VARTAB+1
jmp FIX_LINKS
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
RUN:
bne L27CF
jmp SETPTRS
L27CF:
jsr CLEARC
jmp L27E9
GOSUB:
lda #$03
jsr CHKMEM
lda TXTPTR+1
pha
lda TXTPTR
pha
lda CURLIN+1
pha
lda CURLIN
pha
2008-10-09 09:18:45 +00:00
lda #TOKEN_GOSUB
2008-10-06 05:21:05 +00:00
pha
L27E9:
jsr CHRGOT
jsr GOTO
jmp NEWSTT
GOTO:
jsr LINGET
jsr REMN
lda CURLIN+1
cmp LINNUM+1
bcs L2809
tya
sec
adc TXTPTR
ldx TXTPTR+1
bcc L280D
inx
bcs L280D
L2809:
lda TXTTAB
ldx TXTTAB+1
L280D:
2008-10-08 06:08:08 +00:00
.ifdef KBD
2008-10-08 11:42:15 +00:00
jsr LF457
2008-10-08 06:08:08 +00:00
bne UNDERR
.else
2008-10-08 11:42:15 +00:00
jsr FL1
2008-10-06 05:21:05 +00:00
bcc UNDERR
2008-10-08 06:08:08 +00:00
.endif
2008-10-08 11:42:15 +00:00
lda LOWTRX
2008-10-06 05:21:05 +00:00
sbc #$01
sta TXTPTR
2008-10-08 11:42:15 +00:00
lda LOWTRX+1
2008-10-06 05:21:05 +00:00
sbc #$00
sta TXTPTR+1
L281E:
rts
POP:
bne L281E
lda #$FF
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-11 06:23:53 +00:00
sta FORPNT+1 ; bugfix, wrong in AppleSoft
.else
2008-10-06 05:21:05 +00:00
sta FORPNT
.endif
2008-10-06 05:21:05 +00:00
jsr GTFORPNT
txs
2008-10-09 09:18:45 +00:00
cmp #TOKEN_GOSUB
2008-10-06 05:21:05 +00:00
beq RETURN
ldx #ERR_NOGOSUB
.byte $2C
UNDERR:
ldx #ERR_UNDEFSTAT
jmp ERROR
SYNERR2:
jmp SYNERR
RETURN:
pla
pla
sta CURLIN
pla
sta CURLIN+1
pla
sta TXTPTR
pla
sta TXTPTR+1
DATA:
jsr DATAN
ADDON:
tya
clc
adc TXTPTR
sta TXTPTR
bcc L2852
inc TXTPTR+1
L2852:
rts
DATAN:
ldx #$3A
.byte $2C
REMN:
ldx #$00
stx CHARAC
ldy #$00
sty ENDCHR
L285E:
lda ENDCHR
ldx CHARAC
sta CHARAC
stx ENDCHR
L2866:
lda (TXTPTR),y
beq L2852
cmp ENDCHR
beq L2852
iny
cmp #$22
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
beq L285E
bne L2866
2008-10-06 10:32:35 +00:00
.else
2008-10-06 05:21:05 +00:00
bne L2866
beq L285E
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
IF:
jsr FRMEVL
jsr CHRGOT
2008-10-09 09:18:45 +00:00
cmp #TOKEN_GOTO
2008-10-06 05:21:05 +00:00
beq L2884
lda #TOKEN_THEN
jsr SYNCHR
L2884:
lda FAC
bne L288D
REM:
jsr REMN
beq ADDON
L288D:
jsr CHRGOT
bcs L2895
jmp GOTO
L2895:
jmp EXECUTE_STATEMENT
ON:
jsr GETBYT
pha
cmp #TOKEN_GOSUB
beq L28A4
L28A0:
cmp #TOKEN_GOTO
bne SYNERR2
L28A4:
dec FAC_LAST
bne L28AC
pla
jmp EXECUTE_STATEMENT1
L28AC:
jsr CHRGET
jsr LINGET
cmp #$2C
beq L28A4
pla
L28B7:
rts
LINGET:
ldx #$00
stx LINNUM
stx LINNUM+1
L28BE:
bcs L28B7
sbc #$2F
sta CHARAC
lda LINNUM+1
sta INDEX
cmp #$19
bcs L28A0
lda LINNUM
asl a
rol INDEX
asl a
rol INDEX
adc LINNUM
sta LINNUM
lda INDEX
adc LINNUM+1
sta LINNUM+1
asl LINNUM
rol LINNUM+1
lda LINNUM
adc CHARAC
sta LINNUM
bcc L28EC
inc LINNUM+1
L28EC:
jsr CHRGET
jmp L28BE
LET:
jsr PTRGET
sta FORPNT
sty FORPNT+1
lda #TOKEN_EQUAL
jsr SYNCHR
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda VALTYP+1
pha
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda VALTYP
pha
jsr FRMEVL
pla
rol a
jsr CHKVAL
bne LETSTRING
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
pla
LET2:
bpl L2923
jsr ROUND_FAC
jsr AYINT
ldy #$00
lda FAC+3
sta (FORPNT),y
iny
lda FAC+4
sta (FORPNT),y
rts
L2923:
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jmp SETFOR
LETSTRING:
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
pla
PUTSTR:
2008-10-07 05:52:42 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
ldy FORPNT+1
.ifdef CBM1
2008-10-06 10:32:35 +00:00
cpy #$D0
.else
cpy #$DE
.endif
2008-10-06 10:32:35 +00:00
bne LC92B
2008-10-07 04:44:27 +00:00
jsr FREFAC
2008-10-06 10:32:35 +00:00
cmp #$06
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
bne IQERR1
.else
2008-10-06 10:32:35 +00:00
beq LC8E2
2008-10-07 04:44:27 +00:00
jmp IQERR
2008-10-06 10:32:35 +00:00
LC8E2:
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 10:32:35 +00:00
ldy #$00
sty FAC
sty FACSIGN
2008-10-06 10:32:35 +00:00
LC8E8:
sty STRNG2
2008-10-06 10:32:35 +00:00
jsr LC91C
2008-10-07 04:44:27 +00:00
jsr MUL10
inc STRNG2
ldy STRNG2
2008-10-06 10:32:35 +00:00
jsr LC91C
2008-10-07 04:44:27 +00:00
jsr COPY_FAC_TO_ARG_ROUNDED
2008-10-06 10:32:35 +00:00
tax
beq LC902
inx
txa
jsr LD9BF
LC902:
ldy STRNG2
2008-10-06 10:32:35 +00:00
iny
cpy #$06
bne LC8E8
2008-10-07 04:44:27 +00:00
jsr MUL10
jsr QINT
2008-10-06 10:32:35 +00:00
ldx #$02
sei
LC912:
2008-10-09 09:18:45 +00:00
lda FAC+2,x
.ifdef CBM2
2008-10-07 08:03:36 +00:00
sta $8D,x
.else
2008-10-06 10:32:35 +00:00
sta $0200,x
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 10:32:35 +00:00
dex
bpl LC912
cli
rts
LC91C:
2008-10-07 04:44:27 +00:00
lda (INDEX),y
2008-10-06 10:32:35 +00:00
jsr L00CF
bcc LC926
2008-10-07 08:03:36 +00:00
IQERR1:
2008-10-07 04:44:27 +00:00
jmp IQERR
2008-10-06 10:32:35 +00:00
LC926:
sbc #$2F
2008-10-07 04:44:27 +00:00
jmp ADDACC
2008-10-06 10:32:35 +00:00
LC92B:
.endif
2008-10-06 05:21:05 +00:00
ldy #$02
lda (FAC_LAST-1),y
cmp FRETOP+1
bcc L2946
bne L2938
dey
lda (FAC_LAST-1),y
cmp FRETOP
bcc L2946
L2938:
ldy FAC_LAST
cpy VARTAB+1
bcc L2946
bne L294D
lda FAC_LAST-1
cmp VARTAB
bcs L294D
L2946:
lda FAC_LAST-1
ldy FAC_LAST
jmp L2963
L294D:
ldy #$00
lda (FAC_LAST-1),y
jsr STRINI
lda DSCPTR
ldy DSCPTR+1
sta STRNG1
sty STRNG1+1
jsr MOVINS
2008-10-07 10:36:34 +00:00
lda #FAC
2008-10-06 05:21:05 +00:00
ldy #$00
L2963:
sta DSCPTR
sty DSCPTR+1
jsr FRETMS
ldy #$00
lda (DSCPTR),y
sta (FORPNT),y
iny
lda (DSCPTR),y
sta (FORPNT),y
iny
lda (DSCPTR),y
sta (FORPNT),y
rts
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
PRINTH:
jsr CMD
2008-10-06 10:32:35 +00:00
jmp LCAD6
2008-10-07 04:44:27 +00:00
CMD:
jsr GETBYT
2008-10-06 10:32:35 +00:00
beq LC98F
lda #$2C
2008-10-07 04:44:27 +00:00
jsr SYNCHR
2008-10-06 10:32:35 +00:00
LC98F:
php
2008-10-07 04:44:27 +00:00
jsr CHKOUT
stx Z03
2008-10-06 10:32:35 +00:00
plp
2008-10-07 04:44:27 +00:00
jmp PRINT
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
PRSTRING:
jsr STRPRT
L297E:
jsr CHRGOT
PRINT:
beq CRDO
PRINT2:
beq L29DD
cmp #TOKEN_TAB
beq L29F5
cmp #TOKEN_SPC
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
clc
.endif
2008-10-06 05:21:05 +00:00
beq L29F5
cmp #','
.ifdef KIM
clc
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
beq L29DE
cmp #$3B
beq L2A0D
jsr FRMEVL
bit VALTYP
bmi PRSTRING
jsr FOUT
jsr STRLIT
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
ldy #$00
lda (FAC_LAST-1),y
clc
adc Z16
2008-10-08 06:08:08 +00:00
.ifdef KBD
cmp #$28
.else
2008-10-06 05:21:05 +00:00
cmp Z17
2008-10-08 06:08:08 +00:00
.endif
2008-10-06 05:21:05 +00:00
bcc L29B1
jsr CRDO
L29B1:
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr STRPRT
2008-10-08 06:08:08 +00:00
.ifdef KBD
2008-10-08 11:42:15 +00:00
jmp L297E
LE86C:
pla
jmp CONTROL_C_TYPED
LE870:
jsr GETBYT
2008-10-08 06:08:08 +00:00
txa
2008-10-08 11:42:15 +00:00
LE874:
beq LE878
2008-10-08 06:08:08 +00:00
bpl LE8F2
2008-10-08 11:42:15 +00:00
LE878:
jmp IQERR
CRDO:
lda #$0A
2008-10-08 06:08:08 +00:00
sta $10
2008-10-08 11:42:15 +00:00
jsr OUTDO
LE882:
lda #$0D
jsr OUTDO
2008-10-09 10:10:09 +00:00
PRINTNULLS:
2008-10-08 11:42:15 +00:00
lda #$00
2008-10-08 06:08:08 +00:00
sta $10
eor #$FF
.else
2008-10-06 05:21:05 +00:00
jsr OUTSP
bne L297E
L29B9:
2008-10-09 10:10:09 +00:00
.ifdef CBM2
2008-10-07 08:03:36 +00:00
lda #$00
2008-10-09 09:18:45 +00:00
sta INPUTBUFFER,x
ldx #<(INPUTBUFFER-1)
ldy #>(INPUTBUFFER-1)
2008-10-07 08:03:36 +00:00
.else
2008-10-11 06:23:53 +00:00
.ifndef APPLE
2008-10-06 05:21:05 +00:00
ldy #$00
sty INPUTBUFFER,x
2008-10-07 10:36:34 +00:00
ldx #LINNUM+1
2008-10-07 08:03:36 +00:00
.endif
2008-10-11 06:23:53 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
bne L29DD
LC9D2:
2008-10-07 04:44:27 +00:00
.endif
CRDO:
2008-10-07 08:03:36 +00:00
.ifdef CBM1
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
bne LC9D8
sta $05
LC9D8:
.endif
2008-10-06 05:21:05 +00:00
lda #$0D
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
sta Z16
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr OUTDO
2008-10-11 07:15:19 +00:00
.ifdef APPLE
lda #$80
.else
2008-10-06 05:21:05 +00:00
lda #$0A
2008-10-11 07:15:19 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr OUTDO
PRINTNULLS:
2008-10-09 10:10:09 +00:00
.ifdef CBM1
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
bne L29DD
.endif
2008-10-11 10:36:02 +00:00
.if .def(CONFIG_NULL) || .def(CBM1)
2008-10-06 05:21:05 +00:00
txa
pha
ldx Z15
beq L29D9
lda #$00
L29D3:
jsr OUTDO
dex
bne L29D3
L29D9:
stx Z16
pla
tax
2008-10-07 08:03:36 +00:00
.else
2008-10-11 06:23:53 +00:00
.ifdef APPLE
lda #$00
sta $50
.endif
2008-10-07 08:03:36 +00:00
eor #$FF
.endif
2008-10-08 06:08:08 +00:00
.endif
2008-10-06 05:21:05 +00:00
L29DD:
rts
L29DE:
lda Z16
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-08 06:08:08 +00:00
.ifdef KBD
cmp #$1A
.else
2008-10-06 05:21:05 +00:00
cmp Z18
2008-10-08 06:08:08 +00:00
.endif
2008-10-06 05:21:05 +00:00
bcc L29EA
jsr CRDO
jmp L2A0D
L29EA:
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
sec
L29EB:
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
sbc #$0A
2008-10-08 11:42:15 +00:00
.else
.ifdef KBD
sbc #$0D
2008-10-06 10:32:35 +00:00
.else
2008-10-06 05:21:05 +00:00
sbc #$0E
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
bcs L29EB
eor #$FF
adc #$01
bne L2A08
L29F5:
2008-10-11 06:23:53 +00:00
.ifdef CONFIG_11_NOAPPLE
2008-10-06 05:21:05 +00:00
php
2008-10-11 06:23:53 +00:00
.else
pha
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr GTBYTC
cmp #$29
2008-10-11 06:23:53 +00:00
.ifndef CONFIG_11_NOAPPLE
.ifdef APPLE
beq L1185
2008-10-11 07:15:19 +00:00
jmp SYNERR
2008-10-11 06:23:53 +00:00
L1185:
.else
2008-10-07 08:03:36 +00:00
bne SYNERR4
2008-10-11 06:23:53 +00:00
.endif
2008-10-06 05:21:05 +00:00
pla
2008-10-06 10:32:35 +00:00
cmp #TOKEN_TAB
2008-10-11 07:15:19 +00:00
.ifdef APPLE
bne L2A09
.else
2008-10-06 05:21:05 +00:00
bne L2A0A
2008-10-11 07:15:19 +00:00
.endif
2008-10-07 08:03:36 +00:00
.else
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
bne SYNERR4
2008-10-07 05:52:42 +00:00
.else
2008-10-06 06:02:37 +00:00
beq @1
2008-10-06 05:21:05 +00:00
jmp SYNERR
2008-10-06 06:02:37 +00:00
@1:
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 10:32:35 +00:00
plp ;; XXX c64 has this
2008-10-06 05:21:05 +00:00
bcc L2A09
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
txa
sbc Z16
bcc L2A0D
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
beq L2A0D
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2A08:
tax
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-06 05:21:05 +00:00
L2A09:
inx
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2A0A:
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
jsr OUTSP
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
dex
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
bne L2A0A
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
bne L2A13
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2A0D:
jsr CHRGET
jmp PRINT2
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-06 05:21:05 +00:00
L2A13:
jsr OUTSP
bne L2A0A
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
STROUT:
jsr STRLIT
STRPRT:
jsr FREFAC
tax
ldy #$00
inx
L2A22:
dex
beq L29DD
lda (INDEX),y
jsr OUTDO
iny
cmp #$0D
bne L2A22
jsr PRINTNULLS
jmp L2A22
OUTSP:
2008-10-07 08:03:36 +00:00
.ifdef CBM2
lda $0E
beq LCA40
lda #$20
.byte $2C
LCA40:
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
lda #$1D
.else
2008-10-06 05:21:05 +00:00
lda #$20
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
.byte $2C
OUTQUES:
lda #$3F
OUTDO:
2008-10-08 06:08:08 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
bit Z14
bmi L2A56
2008-10-08 06:08:08 +00:00
.endif
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
pha
2008-10-08 06:08:08 +00:00
.endif
.ifdef CBM1
2008-10-06 10:32:35 +00:00
cmp #$1D
beq LCA6A
cmp #$9D
beq LCA5A
cmp #$14
bne LCA64
LCA5A:
lda $05
beq L2A4E
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
bne L2A4E
dec $05
LCA64:
and #$7F
.endif
2008-10-08 06:08:08 +00:00
.ifndef CBM2
2008-10-06 05:21:05 +00:00
cmp #$20
bcc L2A4E
2008-10-08 06:08:08 +00:00
.endif
2008-10-06 10:32:35 +00:00
LCA6A:
2008-10-09 10:37:43 +00:00
.ifdef CONFIG_CBM1_PATCHES
2008-10-07 04:44:27 +00:00
lda Z03
jsr PATCH6
2008-10-06 10:32:35 +00:00
nop
2008-10-08 06:08:08 +00:00
.endif
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_PRINT_CR
2008-10-06 05:21:05 +00:00
lda Z16
cmp Z17
bne L2A4C
2008-10-11 06:23:53 +00:00
.ifdef APPLE
2008-10-11 09:56:31 +00:00
nop ; PATCH!
2008-10-11 10:14:29 +00:00
nop ; don't print CR
2008-10-11 06:23:53 +00:00
nop
.else
2008-10-06 05:21:05 +00:00
jsr CRDO
2008-10-11 06:23:53 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2A4C:
2008-10-08 06:08:08 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
inc Z16
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2A4E:
2008-10-08 06:08:08 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
pla
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 10:32:35 +00:00
.ifdef KIM
2008-10-06 05:21:05 +00:00
sty DIMFLG
2008-10-11 06:23:53 +00:00
.endif
.ifdef APPLE
ora #$80
2008-10-07 04:44:27 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr MONCOUT
2008-10-11 06:23:53 +00:00
.ifdef APPLE
and #$7F
.endif
2008-10-07 04:44:27 +00:00
.ifdef KIM
2008-10-06 05:21:05 +00:00
ldy DIMFLG
2008-10-06 10:32:35 +00:00
.endif
2008-10-08 07:04:03 +00:00
.ifdef OSI
2008-10-07 04:44:27 +00:00
nop
nop
nop
nop
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2A56:
and #$FF
2008-10-08 11:42:15 +00:00
LE8F2:
2008-10-06 05:21:05 +00:00
rts
2008-10-08 07:04:03 +00:00
.ifdef KBD
LE8F3:
pha
lda $047F
clc
beq LE900
lda #$00
sta $047F
sec
LE900:
pla
rts
.endif
2008-10-06 05:21:05 +00:00
L2A59:
lda INPUTFLG
beq L2A6E
2008-10-11 06:23:53 +00:00
.ifdef CBM2_KIM_APPLE
2008-10-06 05:21:05 +00:00
bmi L2A63
ldy #$FF
bne L2A67
L2A63:
2008-10-07 05:52:42 +00:00
.endif
2008-10-09 10:37:43 +00:00
.ifdef CONFIG_CBM1_PATCHES
2008-10-07 04:44:27 +00:00
jsr PATCH5
2008-10-06 10:32:35 +00:00
nop
.else
2008-10-06 05:21:05 +00:00
lda Z8C
ldy Z8C+1
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2A67:
sta CURLIN
sty CURLIN+1
2008-10-07 08:03:36 +00:00
SYNERR4:
2008-10-06 05:21:05 +00:00
jmp SYNERR
L2A6E:
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
beq LCA8F
ldx #ERR_BADDATA
2008-10-06 10:32:35 +00:00
jmp ERROR
LCA8F:
.endif
2008-10-06 05:21:05 +00:00
lda #<ERRREENTRY
ldy #>ERRREENTRY
jsr STROUT
lda OLDTEXT
ldy OLDTEXT+1
sta TXTPTR
sty TXTPTR+1
2008-10-08 07:04:03 +00:00
LE920:
2008-10-06 05:21:05 +00:00
rts
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
GET:
jsr ERRDIR
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
cmp #$23
bne LCAB6
2008-10-07 04:44:27 +00:00
jsr CHRGET
jsr GETBYT
2008-10-06 10:32:35 +00:00
lda #$2C
2008-10-07 04:44:27 +00:00
jsr SYNCHR
jsr CHKIN
stx Z03
2008-10-06 10:32:35 +00:00
LCAB6:
.endif
2008-10-07 04:44:27 +00:00
ldx #<(INPUTBUFFER+1)
2008-10-07 08:03:36 +00:00
ldy #>(INPUTBUFFER+1)
2008-10-11 10:44:10 +00:00
.if INPUTBUFFER >= $0100
2008-10-07 08:03:36 +00:00
lda #$00
sta INPUTBUFFER+1
.else
2008-10-07 04:44:27 +00:00
sty INPUTBUFFER+1
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #$40
jsr PROCESS_INPUT_LIST
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
ldx Z03
2008-10-06 10:32:35 +00:00
bne LCAD8
.endif
rts
2008-10-08 07:04:03 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
INPUTH:
jsr GETBYT
2008-10-06 10:32:35 +00:00
lda #$2C
2008-10-07 04:44:27 +00:00
jsr SYNCHR
jsr CHKIN
stx Z03
jsr L2A9E
2008-10-06 10:32:35 +00:00
LCAD6:
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
LCAD8:
2008-10-07 04:44:27 +00:00
jsr CLRCH
2008-10-06 10:32:35 +00:00
ldx #$00
2008-10-07 04:44:27 +00:00
stx Z03
2008-10-06 05:21:05 +00:00
rts
2008-10-06 10:32:35 +00:00
LCAE0:
.endif
2008-10-06 05:21:05 +00:00
INPUT:
2008-10-08 07:04:03 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
lsr Z14
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
cmp #$22
bne L2A9E
jsr STRTXT
lda #$3B
jsr SYNCHR
jsr STRPRT
L2A9E:
jsr ERRDIR
lda #$2C
2008-10-07 08:03:36 +00:00
sta INPUTBUFFER-1
2008-10-06 10:32:35 +00:00
LCAF8:
2008-10-11 07:15:19 +00:00
.ifdef APPLE
jsr INLINX
.else
2008-10-06 05:21:05 +00:00
jsr NXIN
2008-10-11 07:15:19 +00:00
.endif
2008-10-08 07:04:03 +00:00
.ifdef KBD
bmi L2ABE
NXIN:
jsr LFDDA
bmi LE920
pla
jmp LE86C
.else
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
beq LCB0C
2008-10-09 10:10:09 +00:00
lda Z96
2008-10-06 10:32:35 +00:00
and #$02
beq LCB0C
jsr LCAD6
2008-10-07 04:44:27 +00:00
jmp DATA
2008-10-06 10:32:35 +00:00
LCB0C:
.endif
2008-10-06 05:21:05 +00:00
lda INPUTBUFFER
bne L2ABE
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
bne LCAF8
2008-10-09 10:37:43 +00:00
.ifdef CONFIG_CBM1_PATCHES
jmp PATCH1
.else
2008-10-07 08:03:36 +00:00
clc
jmp CONTROL_C_TYPED
.endif
2008-10-07 04:44:27 +00:00
NXIN:
lda Z03
2008-10-06 10:32:35 +00:00
bne LCB21
.else
2008-10-06 05:21:05 +00:00
clc
jmp CONTROL_C_TYPED
NXIN:
2008-10-07 04:44:27 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr OUTQUES
jsr OUTSP
2008-10-06 10:32:35 +00:00
LCB21:
2008-10-06 05:21:05 +00:00
jmp INLIN
2008-10-08 11:42:15 +00:00
.endif /* KBD */
.ifdef KBD
GETC:
jsr CONINT
jsr LF43D
jmp LE664
.endif
2008-10-06 05:21:05 +00:00
READ:
ldx DATPTR
ldy DATPTR+1
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-09 10:10:09 +00:00
lda #$98 ; AppleSoft, too
2008-10-07 08:03:36 +00:00
.byte $2C
L2ABE:
lda #$00
.else
2008-10-06 05:21:05 +00:00
.byte $A9
L2ABE:
tya
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
PROCESS_INPUT_LIST:
sta INPUTFLG
stx INPTR
sty INPTR+1
PROCESS_INPUT_ITEM:
jsr PTRGET
sta FORPNT
sty FORPNT+1
lda TXTPTR
ldy TXTPTR+1
sta TXPSV
sty TXPSV+1
2008-10-06 05:21:05 +00:00
ldx INPTR
ldy INPTR+1
stx TXTPTR
sty TXTPTR+1
jsr CHRGOT
bne INSTART
bit INPUTFLG
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
bvc L2AF0
jsr MONRDKEY
2008-10-11 06:23:53 +00:00
.ifdef APPLE
and #$7F
.endif
2008-10-06 05:21:05 +00:00
sta INPUTBUFFER
2008-10-07 08:03:36 +00:00
.ifdef CBM1
ldy #>(INPUTBUFFER-1)
ldx #<(INPUTBUFFER-1)
2008-10-07 04:44:27 +00:00
.else
2008-10-07 08:03:36 +00:00
ldx #<(INPUTBUFFER-1)
ldy #>(INPUTBUFFER-1)
2008-10-07 04:44:27 +00:00
.endif
2008-10-06 05:21:05 +00:00
bne L2AF8
L2AF0:
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
bmi FINDATA
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
lda Z03
2008-10-06 10:32:35 +00:00
bne LCB64
.endif
2008-10-08 11:42:15 +00:00
.ifdef KBD
jsr OUTQUESSP
.else
2008-10-06 05:21:05 +00:00
jsr OUTQUES
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 10:32:35 +00:00
LCB64:
2008-10-06 05:21:05 +00:00
jsr NXIN
L2AF8:
stx TXTPTR
sty TXTPTR+1
INSTART:
jsr CHRGET
bit VALTYP
bpl L2B34
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
bit INPUTFLG
bvc L2B10
2008-10-09 10:37:43 +00:00
.ifdef CONFIG_CBM1_PATCHES
2008-10-06 10:32:35 +00:00
lda #$00
2008-10-07 04:44:27 +00:00
jsr PATCH4
2008-10-06 10:32:35 +00:00
nop
.else
2008-10-06 05:21:05 +00:00
inx
stx TXTPTR
lda #$00
sta CHARAC
beq L2B1C
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
L2B10:
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta CHARAC
cmp #$22
beq L2B1D
lda #$3A
sta CHARAC
lda #$2C
L2B1C:
clc
L2B1D:
sta ENDCHR
lda TXTPTR
ldy TXTPTR+1
adc #$00
bcc L2B28
iny
L2B28:
jsr STRLT2
jsr POINT
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
jsr LETSTRING
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
jsr PUTSTR
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jmp INPUT_MORE
L2B34:
jsr FIN
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
jsr SETFOR
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
lda VALTYP+1
jsr LET2
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
INPUT_MORE:
jsr CHRGOT
beq L2B48
cmp #$2C
beq L2B48
jmp L2A59
L2B48:
lda TXTPTR
ldy TXTPTR+1
sta INPTR
sty INPTR+1
lda TXPSV
ldy TXPSV+1
2008-10-06 05:21:05 +00:00
sta TXTPTR
sty TXTPTR+1
jsr CHRGOT
beq INPDONE
jsr CHKCOM
jmp PROCESS_INPUT_ITEM
FINDATA:
jsr DATAN
iny
tax
bne L2B7C
2008-10-06 06:02:37 +00:00
ldx #ERR_NODATA
2008-10-06 05:21:05 +00:00
iny
lda (TXTPTR),y
beq GERR
iny
lda (TXTPTR),y
sta Z8C
iny
lda (TXTPTR),y
iny
sta Z8C+1
L2B7C:
lda (TXTPTR),y
tax
jsr ADDON
cpx #$83
bne FINDATA
jmp INSTART
INPDONE:
lda INPTR
ldy INPTR+1
ldx INPUTFLG
2008-10-08 11:42:15 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
beq L2B94
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
bpl L2B94
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jmp SETDA
L2B94:
ldy #$00
lda (INPTR),y
2008-10-06 10:32:35 +00:00
beq L2BA1
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
lda Z03
bne L2BA1
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #<ERREXTRA
ldy #>ERREXTRA
jmp STROUT
L2BA1:
rts
ERREXTRA:
2008-10-08 07:04:03 +00:00
.ifdef KBD
.byte "?Extra"
.else
2008-10-06 05:21:05 +00:00
.byte "?EXTRA IGNORED"
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
.byte $0D,$0A,$00
ERRREENTRY:
2008-10-08 07:04:03 +00:00
.ifdef KBD
.byte "What?"
.else
2008-10-06 05:21:05 +00:00
.byte "?REDO FROM START"
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
.byte $0D,$0A,$00
2008-10-08 07:04:03 +00:00
.ifdef KBD
LEA30:
.byte "B"
.byte $FD
.byte "GsBASIC"
.byte $00,$1B,$0D,$13
.byte " BASIC"
.endif
2008-10-06 05:21:05 +00:00
NEXT:
bne NEXT1
ldy #$00
beq NEXT2
NEXT1:
jsr PTRGET
NEXT2:
sta FORPNT
sty FORPNT+1
jsr GTFORPNT
beq NEXT3
ldx #$00
GERR:
beq JERROR
NEXT3:
txs
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
inx
inx
inx
inx
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
txa
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
clc
adc #$04
pha
2008-10-09 10:10:09 +00:00
adc #BYTES_FP+1
2008-10-08 11:42:15 +00:00
sta DEST
2008-10-07 08:03:36 +00:00
pla
.else
2008-10-06 05:21:05 +00:00
inx
inx
inx
inx
inx
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
inx
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
stx DEST
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 06:02:37 +00:00
ldy #>STACK
2008-10-06 05:21:05 +00:00
jsr LOAD_FAC_FROM_YA
tsx
2008-10-06 06:02:37 +00:00
lda STACK+BYTES_FP+4,x
2008-10-06 05:21:05 +00:00
sta FACSIGN
lda FORPNT
ldy FORPNT+1
jsr FADD
jsr SETFOR
2008-10-06 06:02:37 +00:00
ldy #>STACK
2008-10-06 05:21:05 +00:00
jsr FCOMP2
tsx
sec
2008-10-06 06:02:37 +00:00
sbc STACK+BYTES_FP+4,x
2008-10-06 05:21:05 +00:00
beq L2C22
2008-10-06 06:02:37 +00:00
lda STACK+2*BYTES_FP+5,x
2008-10-06 05:21:05 +00:00
sta CURLIN
2008-10-06 06:02:37 +00:00
lda STACK+2*BYTES_FP+6,x
2008-10-06 05:21:05 +00:00
sta CURLIN+1
2008-10-06 06:02:37 +00:00
lda STACK+2*BYTES_FP+8,x
2008-10-06 05:21:05 +00:00
sta TXTPTR
2008-10-06 06:02:37 +00:00
lda STACK+2*BYTES_FP+7,x
2008-10-06 05:21:05 +00:00
sta TXTPTR+1
L2C1F:
jmp NEWSTT
L2C22:
txa
2008-10-06 06:02:37 +00:00
adc #2*BYTES_FP+7
2008-10-06 05:21:05 +00:00
tax
txs
jsr CHRGOT
cmp #$2C
bne L2C1F
jsr CHRGET
jsr NEXT1
FRMNUM:
jsr FRMEVL
CHKNUM:
clc
.byte $24
CHKSTR:
sec
CHKVAL:
bit VALTYP
bmi L2C41
bcs L2C43
L2C40:
rts
L2C41:
bcs L2C40
L2C43:
2008-10-06 06:02:37 +00:00
ldx #ERR_BADTYPE
2008-10-06 05:21:05 +00:00
JERROR:
jmp ERROR
FRMEVL:
ldx TXTPTR
bne L2C4E
dec TXTPTR+1
L2C4E:
dec TXTPTR
ldx #$00
.byte $24
FRMEVL1:
pha
txa
pha
lda #$01
jsr CHKMEM
jsr FRM_ELEMENT
lda #$00
sta CPRTYP
FRMEVL2:
jsr CHRGOT
L2C65:
sec
2008-10-06 06:02:37 +00:00
sbc #TOKEN_GREATER
2008-10-06 05:21:05 +00:00
bcc L2C81
cmp #$03
bcs L2C81
cmp #$01
rol a
eor #$01
eor CPRTYP
cmp CPRTYP
bcc SNTXERR
sta CPRTYP
jsr CHRGET
jmp L2C65
L2C81:
ldx CPRTYP
bne FRM_RELATIONAL
bcs L2D02
adc #$07
bcc L2D02
adc VALTYP
bne L2C92
jmp CAT
L2C92:
adc #$FF
sta INDEX
asl a
adc INDEX
tay
FRM_PRECEDENCE_TEST:
pla
cmp MATHTBL,y
bcs FRM_PERFORM1
jsr CHKNUM
L2CA3:
pha
L2CA4:
jsr FRM_RECURSE
pla
ldy LASTOP
bpl PREFNC
tax
beq GOEX
bne FRM_PERFORM2
FRM_RELATIONAL:
lsr VALTYP
txa
rol a
ldx TXTPTR
bne L2CBB
dec TXTPTR+1
L2CBB:
dec TXTPTR
ldy #$1B
sta CPRTYP
bne FRM_PRECEDENCE_TEST
PREFNC:
cmp MATHTBL,y
bcs FRM_PERFORM2
bcc L2CA3
FRM_RECURSE:
lda MATHTBL+2,y
pha
lda MATHTBL+1,y
pha
jsr FRM_STACK1
lda CPRTYP
jmp FRMEVL1
SNTXERR:
jmp SYNERR
FRM_STACK1:
lda FACSIGN
ldx MATHTBL,y
FRM_STACK2:
tay
pla
sta INDEX
2008-10-08 07:04:03 +00:00
.ifndef KBD
2008-10-09 10:10:09 +00:00
inc INDEX ; bug: assumes not on page boundary
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
pla
sta INDEX+1
2008-10-08 07:04:03 +00:00
.ifdef KBD
inc INDEX
bne LEB69
inc INDEX+1
LEB69:
.endif
2008-10-06 05:21:05 +00:00
tya
pha
L2CED:
jsr ROUND_FAC
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda FAC+4
pha
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda FAC+3
pha
lda FAC+2
pha
lda FAC+1
pha
lda FAC
pha
jmp (INDEX)
L2D02:
ldy #$FF
pla
GOEX:
beq EXIT
FRM_PERFORM1:
cmp #$64
beq L2D0E
jsr CHKNUM
L2D0E:
sty LASTOP
FRM_PERFORM2:
pla
lsr a
sta CPRMASK
pla
sta ARG
pla
sta ARG+1
pla
sta ARG+2
pla
sta ARG+3
pla
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
sta ARG+4
pla
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta ARGSIGN
eor FACSIGN
sta STRNG1
EXIT:
lda FAC
rts
FRM_ELEMENT:
lda #$00
sta VALTYP
L2D31:
jsr CHRGET
bcs L2D39
L2D36:
jmp FIN
L2D39:
jsr ISLETC
bcs FRM_VARIABLE
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
cmp #$FF
bne LCDC1
lda #<CON_PI
ldy #>CON_PI
2008-10-07 04:44:27 +00:00
jsr LOAD_FAC_FROM_YA
jmp CHRGET
2008-10-06 10:32:35 +00:00
CON_PI:
.byte $82,$49,$0f,$DA,$A1
LCDC1:
.endif
2008-10-06 05:21:05 +00:00
cmp #$2E
beq L2D36
2008-10-06 06:02:37 +00:00
cmp #TOKEN_MINUS
2008-10-06 05:21:05 +00:00
beq MIN
2008-10-06 06:02:37 +00:00
cmp #TOKEN_PLUS
2008-10-06 05:21:05 +00:00
beq L2D31
cmp #$22
bne NOT_
STRTXT:
lda TXTPTR
ldy TXTPTR+1
adc #$00
bcc L2D57
iny
L2D57:
jsr STRLIT
jmp POINT
NOT_:
2008-10-06 06:02:37 +00:00
cmp #TOKEN_NOT
2008-10-06 05:21:05 +00:00
bne L2D74
ldy #$18
bne EQUL
2008-10-09 07:24:49 +00:00
EQUOP:
2008-10-06 05:21:05 +00:00
jsr AYINT
lda FAC_LAST
eor #$FF
tay
lda FAC_LAST-1
eor #$FF
jmp GIVAYF
L2D74:
2008-10-06 06:02:37 +00:00
cmp #TOKEN_FN
2008-10-06 05:21:05 +00:00
bne L2D7B
jmp L31F3
L2D7B:
2008-10-06 06:02:37 +00:00
cmp #TOKEN_SGN
2008-10-06 05:21:05 +00:00
bcc PARCHK
jmp UNARY
PARCHK:
jsr CHKOPN
jsr FRMEVL
CHKCLS:
lda #$29
.byte $2C
CHKOPN:
lda #$28
.byte $2C
CHKCOM:
lda #$2C
2008-10-07 04:44:27 +00:00
SYNCHR: ; XXX all CBM code calls SYNCHR instead of CHKCOM
2008-10-06 05:21:05 +00:00
ldy #$00
cmp (TXTPTR),y
bne SYNERR
jmp CHRGET
SYNERR:
2008-10-06 06:02:37 +00:00
ldx #ERR_SYNTAX
2008-10-06 05:21:05 +00:00
jmp ERROR
MIN:
ldy #$15
EQUL:
pla
pla
jmp L2CA4
FRM_VARIABLE:
jsr PTRGET
FRM_VARIABLE_CALL = *-1
sta FAC_LAST-1
sty FAC_LAST
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
lda VARNAM
ldy VARNAM+1
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldx VALTYP
beq L2DB1
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-09 10:37:43 +00:00
.ifdef CONFIG_CBM1_PATCHES
2008-10-07 04:44:27 +00:00
jmp PATCH2
2008-10-06 10:32:35 +00:00
clc
LCE3B:
2008-10-07 08:03:36 +00:00
.else
ldx #$00
stx $6D
bit $62
bpl LCE53
cmp #$54
bne LCE53
.endif
2008-10-06 10:32:35 +00:00
cpy #$C9
bne LCE53
jsr LCE76
sty EXPON
2008-10-06 10:32:35 +00:00
dey
sty STRNG2
2008-10-06 10:32:35 +00:00
ldy #$06
sty INDX
2008-10-06 10:32:35 +00:00
ldy #$24
jsr LDD3A
jmp LD353
LCE53:
2008-10-08 07:04:03 +00:00
.endif
.ifdef KBD
ldx #$00
stx STRNG1+1
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
rts
L2DB1:
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
ldx VALTYP+1
bpl L2DC2
ldy #$00
lda (FAC+3),y
tax
iny
lda (FAC+3),y
tay
txa
jmp GIVAYF
L2DC2:
2008-10-07 05:52:42 +00:00
.endif
2008-10-09 10:37:43 +00:00
.ifdef CONFIG_CBM1_PATCHES
2008-10-07 04:44:27 +00:00
jmp PATCH3
2008-10-07 08:03:36 +00:00
.endif
.ifdef CBM2
bit $62
bpl LCE90
2008-10-07 08:03:36 +00:00
cmp #$54
bne LCE82
.endif
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-09 10:10:09 +00:00
jmp LOAD_FAC_FROM_YA
.endif
2008-10-07 08:03:36 +00:00
.ifdef CBM1
2008-10-06 10:32:35 +00:00
.byte $19
2008-10-07 08:03:36 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:32:35 +00:00
LCE69:
cpy #$49
.ifdef CBM1
2008-10-06 10:32:35 +00:00
bne LCE82
.else
bne LCE90
.endif
2008-10-06 10:32:35 +00:00
jsr LCE76
tya
ldx #$A0
jmp LDB21
LCE76:
.ifdef CBM1
2008-10-06 10:32:35 +00:00
lda #$FE
ldy #$01
.else
lda #$8B
ldy #$00
.endif
2008-10-06 10:32:35 +00:00
sei
2008-10-07 04:44:27 +00:00
jsr LOAD_FAC_FROM_YA
2008-10-06 10:32:35 +00:00
cli
sty FAC+1
2008-10-06 10:32:35 +00:00
rts
LCE82:
cmp #$53
bne LCE90
cpy #$54
bne LCE90
2008-10-09 10:10:09 +00:00
lda Z96
2008-10-07 04:44:27 +00:00
jmp FLOAT
2008-10-06 10:32:35 +00:00
LCE90:
lda FAC+3
ldy FAC+4
2008-10-07 04:44:27 +00:00
jmp LOAD_FAC_FROM_YA
2008-10-06 10:32:35 +00:00
.endif
2008-10-06 05:21:05 +00:00
UNARY:
asl a
pha
tax
jsr CHRGET
2008-10-06 06:02:37 +00:00
cpx #<(TOKEN_LEFTSTR*2-1)
2008-10-06 05:21:05 +00:00
bcc L2DEF
jsr CHKOPN
jsr FRMEVL
jsr CHKCOM
jsr CHKSTR
pla
tax
lda FAC_LAST
pha
lda FAC_LAST-1
pha
txa
pha
jsr GETBYT
pla
tay
txa
pha
jmp L2DF4
L2DEF:
jsr PARCHK
pla
tay
L2DF4:
2008-10-06 06:02:37 +00:00
lda UNFNC-TOKEN_SGN-TOKEN_SGN+$100,y
2008-10-06 05:21:05 +00:00
sta JMPADRS+1
2008-10-06 06:02:37 +00:00
lda UNFNC-TOKEN_SGN-TOKEN_SGN+$101,y
2008-10-08 11:42:15 +00:00
sta JMPADRS+2
.ifdef KBD
jsr LF47D
.else
2008-10-06 05:21:05 +00:00
jsr JMPADRS
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
jmp CHKNUM
2008-10-09 07:24:49 +00:00
OR:
2008-10-06 05:21:05 +00:00
ldy #$FF
.byte $2C
2008-10-09 07:24:49 +00:00
TAND:
2008-10-06 05:21:05 +00:00
ldy #$00
sty EOLPNTR
jsr AYINT
lda FAC_LAST-1
eor EOLPNTR
sta CHARAC
lda FAC_LAST
eor EOLPNTR
sta ENDCHR
jsr COPY_ARG_TO_FAC
jsr AYINT
lda FAC_LAST
eor EOLPNTR
and ENDCHR
eor EOLPNTR
tay
lda FAC_LAST-1
eor EOLPNTR
and CHARAC
eor EOLPNTR
jmp GIVAYF
RELOPS:
jsr CHKVAL
bcs STRCMP
lda ARGSIGN
ora #$7F
and ARG+1
sta ARG+1
lda #<ARG
ldy #$00
jsr FCOMP
tax
jmp NUMCMP
STRCMP:
lda #$00
sta VALTYP
dec CPRTYP
jsr FREFAC
sta FAC
stx FAC+1
sty FAC+2
lda ARG_LAST-1
ldy ARG_LAST
jsr FRETMP
stx ARG_LAST-1
sty ARG_LAST
tax
sec
sbc FAC
beq L2E74
lda #$01
bcc L2E74
ldx FAC
lda #$FF
L2E74:
sta FACSIGN
ldy #$FF
inx
STRCMP1:
iny
dex
bne L2E84
ldx FACSIGN
NUMCMP:
bmi CMPDONE
clc
bcc CMPDONE
L2E84:
lda (ARG_LAST-1),y
cmp (FAC+1),y
beq STRCMP1
ldx #$FF
bcs CMPDONE
ldx #$01
CMPDONE:
inx
txa
rol a
and CPRMASK
beq L2E99
lda #$FF
L2E99:
jmp FLOAT
NXDIM:
jsr CHKCOM
DIM:
tax
jsr PTRGET2
jsr CHRGOT
bne NXDIM
rts
PTRGET:
ldx #$00
jsr CHRGOT
PTRGET2:
stx DIMFLG
PTRGET3:
sta VARNAM
jsr CHRGOT
jsr ISLETC
bcs NAMOK
SYNERR3:
jmp SYNERR
NAMOK:
ldx #$00
stx VALTYP
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
stx VALTYP+1
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr CHRGET
bcc L2ECD
jsr ISLETC
bcc L2ED8
L2ECD:
tax
L2ECE:
jsr CHRGET
bcc L2ECE
jsr ISLETC
bcs L2ECE
L2ED8:
cmp #$24
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
bne L2EF9
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
bne L2EE2
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #$FF
sta VALTYP
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
bne L2EF2
L2EE2:
cmp #$25
bne L2EF9
lda SUBFLG
bne SYNERR3
lda #$80
sta VALTYP+1
ora VARNAM
sta VARNAM
L2EF2:
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
txa
ora #$80
tax
jsr CHRGET
L2EF9:
stx VARNAM+1
sec
ora SUBFLG
sbc #$28
bne L2F05
jmp ARRAY
L2F05:
lda #$00
sta SUBFLG
lda VARTAB
ldx VARTAB+1
ldy #$00
L2F0F:
stx LOWTR+1
L2F11:
sta LOWTR
cpx ARYTAB+1
bne L2F1B
cmp ARYTAB
beq NAMENOTFOUND
L2F1B:
lda VARNAM
cmp (LOWTR),y
bne L2F29
lda VARNAM+1
iny
cmp (LOWTR),y
beq SET_VARPNT_AND_YA
dey
L2F29:
clc
lda LOWTR
adc #BYTES_PER_VARIABLE
bcc L2F11
inx
bne L2F0F
ISLETC:
cmp #$41
bcc L2F3C
sbc #$5B
sec
sbc #$A5
L2F3C:
rts
NAMENOTFOUND:
pla
pha
cmp #<FRM_VARIABLE_CALL
bne MAKENEWVARIABLE
2008-10-11 10:44:10 +00:00
.ifdef CONFIG_SAFE_NAMENOTFOUND
2008-10-06 05:21:05 +00:00
tsx
lda STACK+2,x
cmp #>FRM_VARIABLE_CALL
bne MAKENEWVARIABLE
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 10:32:35 +00:00
LD015:
2008-10-06 05:21:05 +00:00
lda #<C_ZERO
ldy #>C_ZERO
rts
2008-10-08 07:04:03 +00:00
.ifndef CBM2_KBD
C_ZERO:
2008-10-06 05:21:05 +00:00
.byte $00,$00
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
MAKENEWVARIABLE:
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
lda VARNAM
ldy VARNAM+1
2008-10-06 10:32:35 +00:00
cmp #$54
bne LD02F
cpy #$C9
beq LD015
cpy #$49
bne LD02F
LD02C:
jmp SYNERR
LD02F:
cmp #$53
bne LD037
cpy #$54
beq LD02C
LD037:
.endif
2008-10-06 05:21:05 +00:00
lda ARYTAB
ldy ARYTAB+1
sta LOWTR
sty LOWTR+1
lda STREND
ldy STREND+1
sta HIGHTR
sty HIGHTR+1
clc
adc #BYTES_PER_VARIABLE
bcc L2F68
iny
L2F68:
sta HIGHDS
sty HIGHDS+1
jsr BLTU
lda HIGHDS
ldy HIGHDS+1
iny
sta ARYTAB
sty ARYTAB+1
ldy #$00
lda VARNAM
sta (LOWTR),y
iny
lda VARNAM+1
sta (LOWTR),y
lda #$00
iny
sta (LOWTR),y
iny
sta (LOWTR),y
iny
sta (LOWTR),y
iny
sta (LOWTR),y
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
iny
sta (LOWTR),y
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
SET_VARPNT_AND_YA:
lda LOWTR
clc
adc #$02
ldy LOWTR+1
bcc L2F9E
iny
L2F9E:
sta VARPNT
sty VARPNT+1
rts
GETARY:
lda EOLPNTR
asl a
adc #$05
adc LOWTR
ldy LOWTR+1
bcc L2FAF
iny
L2FAF:
sta HIGHDS
sty HIGHDS+1
rts
NEG32768:
.byte $90,$80,$00,$00
MAKINT:
jsr CHRGET
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
jsr FRMEVL
.else
2008-10-06 05:21:05 +00:00
jsr FRMNUM
.endif
2008-10-06 05:21:05 +00:00
MKINT:
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:03:36 +00:00
jsr CHKNUM
.endif
lda FACSIGN
bmi MI1
AYINT:
2008-10-06 05:21:05 +00:00
lda FAC
cmp #$90
bcc MI2
lda #<NEG32768
ldy #>NEG32768
jsr FCOMP
MI1:
bne IQERR
MI2:
jmp QINT
ARRAY:
lda DIMFLG
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
ora VALTYP+1
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
pha
lda VALTYP
pha
ldy #$00
L2FDE:
tya
pha
lda VARNAM+1
pha
lda VARNAM
pha
jsr MAKINT
pla
sta VARNAM
pla
sta VARNAM+1
pla
tay
tsx
lda STACK+2,x
pha
lda STACK+1,x
pha
lda FAC_LAST-1
sta STACK+2,x
lda FAC_LAST
sta STACK+1,x
iny
jsr CHRGOT
cmp #$2C
beq L2FDE
sty EOLPNTR
jsr CHKCLS
pla
sta VALTYP
pla
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
sta VALTYP+1
and #$7F
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta DIMFLG
ldx ARYTAB
lda ARYTAB+1
L301F:
stx LOWTR
sta LOWTR+1
cmp STREND+1
bne L302B
cpx STREND
beq MAKE_NEW_ARRAY
L302B:
ldy #$00
lda (LOWTR),y
iny
cmp VARNAM
bne L303A
lda VARNAM+1
cmp (LOWTR),y
beq USE_OLD_ARRAY
L303A:
iny
lda (LOWTR),y
clc
adc LOWTR
tax
iny
lda (LOWTR),y
adc LOWTR+1
bcc L301F
SUBERR:
ldx #ERR_BADSUBS
.byte $2C
IQERR:
ldx #ERR_ILLQTY
JER:
jmp ERROR
USE_OLD_ARRAY:
ldx #ERR_REDIMD
lda DIMFLG
bne JER
jsr GETARY
lda EOLPNTR
ldy #$04
cmp (LOWTR),y
bne SUBERR
jmp FIND_ARRAY_ELEMENT
MAKE_NEW_ARRAY:
jsr GETARY
jsr REASON
lda #$00
tay
sta STRNG2+1
ldx #BYTES_PER_ELEMENT
2008-10-08 07:04:03 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
stx STRNG2
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda VARNAM
sta (LOWTR),y
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
bpl L3078
dex
L3078:
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
iny
lda VARNAM+1
sta (LOWTR),y
2008-10-08 07:04:03 +00:00
.ifndef OSI
2008-10-06 05:21:05 +00:00
bpl L3081
dex
2008-10-08 07:04:03 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
dex
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
L3081:
stx STRNG2
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda EOLPNTR
iny
iny
iny
sta (LOWTR),y
L308A:
ldx #$0B
lda #$00
bit DIMFLG
bvc L309A
pla
clc
adc #$01
tax
pla
adc #$00
L309A:
iny
sta (LOWTR),y
iny
txa
sta (LOWTR),y
jsr MULTIPLY_SUBSCRIPT
stx STRNG2
sta STRNG2+1
ldy INDEX
dec EOLPNTR
bne L308A
adc HIGHDS+1
bcs GME
sta HIGHDS+1
tay
txa
adc HIGHDS
bcc L30BD
iny
beq GME
L30BD:
jsr REASON
sta STREND
sty STREND+1
lda #$00
inc STRNG2+1
ldy STRNG2
beq L30D1
L30CC:
dey
sta (HIGHDS),y
bne L30CC
L30D1:
dec HIGHDS+1
dec STRNG2+1
bne L30CC
inc HIGHDS+1
sec
lda STREND
sbc LOWTR
ldy #$02
sta (LOWTR),y
lda STREND+1
iny
sbc LOWTR+1
sta (LOWTR),y
lda DIMFLG
bne RTS9
iny
FIND_ARRAY_ELEMENT:
lda (LOWTR),y
sta EOLPNTR
lda #$00
sta STRNG2
L30F6:
sta STRNG2+1
iny
pla
tax
sta FAC_LAST-1
pla
sta FAC_LAST
cmp (LOWTR),y
bcc FAE2
bne GSE
iny
txa
cmp (LOWTR),y
bcc FAE3
GSE:
jmp SUBERR
GME:
jmp MEMERR
FAE2:
iny
FAE3:
lda STRNG2+1
ora STRNG2
clc
beq L3124
jsr MULTIPLY_SUBSCRIPT
txa
adc FAC_LAST-1
tax
tya
ldy INDEX
L3124:
adc FAC_LAST
stx STRNG2
dec EOLPNTR
bne L30F6
2008-10-08 07:04:03 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
asl STRNG2
rol a
bcs GSE
asl STRNG2
rol a
bcs GSE
tay
lda STRNG2
2008-10-07 05:52:42 +00:00
.else
2008-10-11 06:23:53 +00:00
.ifndef CBM1_APPLE
2008-10-06 05:21:05 +00:00
sta STRNG2+1
2008-10-06 10:32:35 +00:00
.endif
2008-10-09 10:10:09 +00:00
ldx #BYTES_FP
2008-10-08 11:42:15 +00:00
.ifdef KBD
lda VARNAM+1
.else
2008-10-06 05:21:05 +00:00
lda VARNAM
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
bpl L3135
dex
L3135:
2008-10-08 07:04:03 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
lda VARNAM+1
bpl L313B
dex
dex
L313B:
2008-10-08 07:04:03 +00:00
.endif
2008-10-08 11:42:15 +00:00
.ifdef KBD
stx RESULT+1
.else
2008-10-06 05:21:05 +00:00
stx RESULT+2
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #$00
jsr MULTIPLY_SUBS1
txa
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
adc HIGHDS
sta VARPNT
tya
adc HIGHDS+1
sta VARPNT+1
tay
lda VARPNT
RTS9:
rts
MULTIPLY_SUBSCRIPT:
sty INDEX
lda (LOWTR),y
sta RESULT_LAST-2
dey
lda (LOWTR),y
MULTIPLY_SUBS1:
sta RESULT_LAST-1
lda #$10
sta INDX
ldx #$00
ldy #$00
L3163:
txa
asl a
tax
tya
rol a
tay
bcs GME
asl STRNG2
rol STRNG2+1
bcc L317C
clc
txa
adc RESULT_LAST-2
tax
tya
adc RESULT_LAST-1
tay
bcs GME
L317C:
dec INDX
bne L3163
rts
FRE:
lda VALTYP
beq L3188
jsr FREFAC
L3188:
jsr GARBAG
sec
lda FRETOP
sbc STREND
tay
lda FRETOP+1
sbc STREND+1
GIVAYF:
ldx #$00
stx VALTYP
sta FAC+1
sty FAC+2
ldx #$90
jmp FLOAT1
POS:
ldy Z16
SNGFLT:
lda #$00
beq GIVAYF
ERRDIR:
ldx CURLIN+1
inx
bne RTS9
ldx #ERR_ILLDIR
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:47:13 +00:00
.byte $2C
LD288:
ldx #ERR_UNDEFFN
.endif
2008-10-06 05:21:05 +00:00
L31AF:
jmp ERROR
DEF:
jsr FNC
jsr ERRDIR
jsr CHKOPN
lda #$80
sta SUBFLG
jsr PTRGET
jsr CHKNUM
jsr CHKCLS
lda #TOKEN_EQUAL
jsr SYNCHR
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
pha
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda VARPNT+1
pha
lda VARPNT
pha
lda TXTPTR+1
pha
lda TXTPTR
pha
jsr DATA
jmp L3250
FNC:
lda #TOKEN_FN
jsr SYNCHR
ora #$80
sta SUBFLG
jsr PTRGET3
sta FNCNAM
sty FNCNAM+1
jmp CHKNUM
L31F3:
jsr FNC
lda FNCNAM+1
pha
lda FNCNAM
pha
jsr PARCHK
jsr CHKNUM
pla
sta FNCNAM
pla
sta FNCNAM+1
ldy #$02
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
ldx #ERR_UNDEFFN
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda (FNCNAM),y
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
beq L31AF
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta VARPNT
tax
iny
lda (FNCNAM),y
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:47:13 +00:00
beq LD288
.endif
2008-10-06 05:21:05 +00:00
sta VARPNT+1
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
iny
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L3219:
lda (VARPNT),y
pha
dey
bpl L3219
ldy VARPNT+1
jsr STORE_FAC_AT_YX_ROUNDED
lda TXTPTR+1
pha
lda TXTPTR
pha
lda (FNCNAM),y
sta TXTPTR
iny
lda (FNCNAM),y
sta TXTPTR+1
lda VARPNT+1
pha
lda VARPNT
pha
jsr FRMNUM
pla
sta FNCNAM
pla
sta FNCNAM+1
jsr CHRGOT
beq L324A
jmp SYNERR
L324A:
pla
sta TXTPTR
pla
sta TXTPTR+1
L3250:
ldy #$00
pla
sta (FNCNAM),y
pla
iny
sta (FNCNAM),y
pla
iny
sta (FNCNAM),y
pla
iny
sta (FNCNAM),y
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
pla
iny
sta (FNCNAM),y
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
rts
STR:
jsr CHKNUM
ldy #$00
jsr FOUT1
pla
pla
2008-10-07 04:44:27 +00:00
LD353:
2008-10-06 05:21:05 +00:00
lda #$FF
ldy #$00
beq STRLIT
STRINI:
ldx FAC_LAST-1
ldy FAC_LAST
stx DSCPTR
sty DSCPTR+1
STRSPA:
jsr GETSPA
stx FAC+1
sty FAC+2
sta FAC
rts
STRLIT:
ldx #$22
stx CHARAC
stx ENDCHR
STRLT2:
sta STRNG1
sty STRNG1+1
sta FAC+1
sty FAC+2
ldy #$FF
L3298:
iny
lda (STRNG1),y
beq L32A9
cmp CHARAC
beq L32A5
cmp ENDCHR
bne L3298
L32A5:
cmp #$22
beq L32AA
L32A9:
clc
L32AA:
sty FAC
tya
adc STRNG1
sta STRNG2
ldx STRNG1+1
bcc L32B6
inx
L32B6:
stx STRNG2+1
lda STRNG1+1
2008-10-11 10:36:02 +00:00
.if INPUTBUFFER >= $0100
2008-10-07 08:47:13 +00:00
beq LD399
2008-10-09 10:10:09 +00:00
cmp #>INPUTBUFFER
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
bne PUTNEW
2008-10-07 08:47:13 +00:00
LD399:
2008-10-06 05:21:05 +00:00
tya
jsr STRINI
ldx STRNG1
ldy STRNG1+1
jsr MOVSTR
PUTNEW:
ldx TEMPPT
cpx #TEMPST+9
bne PUTEMP
ldx #ERR_FRMCPX
JERR:
jmp ERROR
PUTEMP:
lda FAC
sta 0,x
lda FAC+1
sta 1,x
lda FAC+2
sta 2,x
ldy #$00
stx FAC_LAST-1
sty FAC_LAST
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-08 11:42:15 +00:00
sty FACEXTENSION
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
dey
sty VALTYP
stx LASTPT
inx
inx
inx
stx TEMPPT
rts
GETSPA:
lsr DATAFLG
L32F1:
pha
eor #$FF
sec
adc FRETOP
ldy FRETOP+1
bcs L32FC
dey
L32FC:
cpy STREND+1
bcc L3311
bne L3306
cmp STREND
bcc L3311
L3306:
sta FRETOP
sty FRETOP+1
sta FRESPC
sty FRESPC+1
tax
pla
rts
L3311:
ldx #ERR_MEMFULL
lda DATAFLG
bmi JERR
jsr GARBAG
lda #$80
sta DATAFLG
pla
bne L32F1
GARBAG:
2008-10-08 11:42:15 +00:00
.ifdef KBD
ldx #<CONST_MEMSIZ
lda #>CONST_MEMSIZ
.else
2008-10-06 05:21:05 +00:00
ldx MEMSIZ
lda MEMSIZ+1
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
FINDHIGHESTSTRING:
stx FRETOP
sta FRETOP+1
ldy #$00
sty FNCNAM+1
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-08 11:42:15 +00:00
sty FNCNAM
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda STREND
ldx STREND+1
sta LOWTR
stx LOWTR+1
lda #TEMPST
ldx #$00
sta INDEX
stx INDEX+1
L333D:
cmp TEMPPT
beq L3346
jsr CHECK_VARIABLE
beq L333D
L3346:
lda #BYTES_PER_VARIABLE
sta DSCLEN
lda VARTAB
ldx VARTAB+1
sta INDEX
stx INDEX+1
L3352:
cpx ARYTAB+1
bne L335A
cmp ARYTAB
beq L335F
L335A:
jsr CHECK_SIMPLE_VARIABLE
beq L3352
L335F:
sta HIGHDS
stx HIGHDS+1
lda #$03
sta DSCLEN
L3367:
lda HIGHDS
ldx HIGHDS+1
L336B:
cpx STREND+1
bne L3376
cmp STREND
bne L3376
jmp MOVE_HIGHEST_STRING_TO_TOP
L3376:
sta INDEX
stx INDEX+1
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
ldy #$01
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
ldy #$00
lda (INDEX),y
tax
iny
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda (INDEX),y
php
iny
lda (INDEX),y
adc HIGHDS
sta HIGHDS
iny
lda (INDEX),y
adc HIGHDS+1
sta HIGHDS+1
plp
bpl L3367
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
txa
bmi L3367
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
iny
lda (INDEX),y
2008-10-08 07:04:03 +00:00
.ifdef KBD
ldy #$00
.endif
2008-10-07 08:47:13 +00:00
.ifdef CBM1
2008-10-06 10:58:56 +00:00
jsr LE7F3
.else
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
ldy #$00
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
asl a
adc #$05
2008-10-06 10:58:56 +00:00
.endif
2008-10-06 05:21:05 +00:00
adc INDEX
sta INDEX
bcc L33A7
inc INDEX+1
L33A7:
ldx INDEX+1
L33A9:
cpx HIGHDS+1
bne L33B1
cmp HIGHDS
beq L336B
L33B1:
jsr CHECK_VARIABLE
beq L33A9
CHECK_SIMPLE_VARIABLE:
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda (INDEX),y
bmi CHECK_BUMP
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
iny
lda (INDEX),y
bpl CHECK_BUMP
iny
CHECK_VARIABLE:
lda (INDEX),y
beq CHECK_BUMP
iny
lda (INDEX),y
tax
iny
lda (INDEX),y
cmp FRETOP+1
bcc L33D5
bne CHECK_BUMP
cpx FRETOP
bcs CHECK_BUMP
L33D5:
cmp LOWTR+1
bcc CHECK_BUMP
bne L33DF
cpx LOWTR
bcc CHECK_BUMP
L33DF:
stx LOWTR
sta LOWTR+1
lda INDEX
ldx INDEX+1
sta FNCNAM
stx FNCNAM+1
lda DSCLEN
2008-10-08 11:42:15 +00:00
sta Z52
2008-10-06 05:21:05 +00:00
CHECK_BUMP:
lda DSCLEN
clc
adc INDEX
sta INDEX
bcc L33FA
inc INDEX+1
L33FA:
ldx INDEX+1
ldy #$00
rts
MOVE_HIGHEST_STRING_TO_TOP:
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:47:13 +00:00
lda FNCNAM+1
2008-10-08 11:42:15 +00:00
ora FNCNAM
2008-10-07 08:47:13 +00:00
.else
2008-10-06 05:21:05 +00:00
ldx FNCNAM+1
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
beq L33FA
2008-10-08 11:42:15 +00:00
lda Z52
2008-10-07 08:47:13 +00:00
.ifdef CBM1
2008-10-07 04:44:27 +00:00
sbc #$03
.else
2008-10-06 05:21:05 +00:00
and #$04
2008-10-07 04:44:27 +00:00
.endif
2008-10-06 05:21:05 +00:00
lsr a
tay
2008-10-08 11:42:15 +00:00
sta Z52
2008-10-06 05:21:05 +00:00
lda (FNCNAM),y
adc LOWTR
sta HIGHTR
lda LOWTR+1
adc #$00
sta HIGHTR+1
lda FRETOP
ldx FRETOP+1
sta HIGHDS
stx HIGHDS+1
jsr BLTU2
2008-10-08 11:42:15 +00:00
ldy Z52
2008-10-06 05:21:05 +00:00
iny
lda HIGHDS
sta (FNCNAM),y
tax
inc HIGHDS+1
lda HIGHDS+1
iny
sta (FNCNAM),y
jmp FINDHIGHESTSTRING
CAT:
lda FAC_LAST
pha
lda FAC_LAST-1
pha
jsr FRM_ELEMENT
jsr CHKSTR
pla
sta STRNG1
pla
sta STRNG1+1
ldy #$00
lda (STRNG1),y
clc
adc (FAC_LAST-1),y
bcc L3454
ldx #ERR_STRLONG
jmp ERROR
L3454:
jsr STRINI
jsr MOVINS
lda DSCPTR
ldy DSCPTR+1
jsr FRETMP
jsr MOVSTR1
lda STRNG1
ldy STRNG1+1
jsr FRETMP
jsr PUTNEW
jmp FRMEVL2
MOVINS:
ldy #$00
lda (STRNG1),y
pha
iny
lda (STRNG1),y
tax
iny
lda (STRNG1),y
tay
pla
MOVSTR:
stx INDEX
sty INDEX+1
MOVSTR1:
tay
beq L3490
pha
L3487:
dey
lda (INDEX),y
sta (FRESPC),y
tya
bne L3487
pla
L3490:
clc
adc FRESPC
sta FRESPC
bcc L3499
inc FRESPC+1
L3499:
rts
FRESTR:
jsr CHKSTR
FREFAC:
lda FAC_LAST-1
ldy FAC_LAST
FRETMP:
sta INDEX
sty INDEX+1
jsr FRETMS
php
ldy #$00
lda (INDEX),y
pha
iny
lda (INDEX),y
tax
iny
lda (INDEX),y
tay
pla
plp
bne L34CD
cpy FRETOP+1
bne L34CD
cpx FRETOP
bne L34CD
pha
clc
adc FRETOP
sta FRETOP
bcc L34CC
inc FRETOP+1
L34CC:
pla
L34CD:
stx INDEX
sty INDEX+1
rts
FRETMS:
2008-10-08 11:42:15 +00:00
.ifdef KBD
cpy #$00
.else
2008-10-06 05:21:05 +00:00
cpy LASTPT+1
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
bne L34E2
cmp LASTPT
bne L34E2
sta TEMPPT
sbc #$03
sta LASTPT
ldy #$00
L34E2:
rts
CHRSTR:
jsr CONINT
txa
pha
lda #$01
jsr STRSPA
pla
ldy #$00
sta (FAC+1),y
pla
pla
jmp PUTNEW
LEFTSTR:
jsr SUBSTRING_SETUP
cmp (DSCPTR),y
tya
SUBSTRING1:
bcc L3503
lda (DSCPTR),y
tax
tya
L3503:
pha
SUBSTRING2:
txa
SUBSTRING3:
pha
jsr STRSPA
lda DSCPTR
ldy DSCPTR+1
jsr FRETMP
pla
tay
pla
clc
adc INDEX
sta INDEX
bcc L351C
inc INDEX+1
L351C:
tya
jsr MOVSTR1
jmp PUTNEW
RIGHTSTR:
jsr SUBSTRING_SETUP
clc
sbc (DSCPTR),y
eor #$FF
jmp SUBSTRING1
MIDSTR:
lda #$FF
sta FAC_LAST
jsr CHRGOT
cmp #$29
beq L353F
jsr CHKCOM
jsr GETBYT
L353F:
jsr SUBSTRING_SETUP
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:47:13 +00:00
beq GOIQ
.endif
2008-10-06 05:21:05 +00:00
dex
txa
pha
clc
ldx #$00
sbc (DSCPTR),y
bcs SUBSTRING2
eor #$FF
cmp FAC_LAST
bcc SUBSTRING3
lda FAC_LAST
bcs SUBSTRING3
SUBSTRING_SETUP:
jsr CHKCLS
pla
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
sta JMPADRS+1
pla
sta JMPADRS+2
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
tay
pla
2008-10-08 11:42:15 +00:00
sta Z52
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
pla
pla
pla
tax
pla
sta DSCPTR
pla
sta DSCPTR+1
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-08 11:42:15 +00:00
lda Z52
2008-10-06 05:21:05 +00:00
pha
tya
pha
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldy #$00
txa
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
beq GOIQ
2008-10-07 08:47:13 +00:00
.endif
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
inc JMPADRS+1
jmp (JMPADRS+1)
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
rts
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
LEN:
jsr GETSTR
SNGFLT1:
jmp SNGFLT
GETSTR:
jsr FRESTR
ldx #$00
stx VALTYP
tay
rts
ASC:
jsr GETSTR
beq GOIQ
ldy #$00
lda (INDEX),y
tay
2008-10-11 07:15:19 +00:00
.ifndef CONFIG_11_NOAPPLE
2008-10-06 05:21:05 +00:00
jmp SNGFLT1
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
jmp SNGFLT
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
GOIQ:
jmp IQERR
GTBYTC:
jsr CHRGET
GETBYT:
jsr FRMNUM
CONINT:
jsr MKINT
ldx FAC_LAST-1
bne GOIQ
ldx FAC_LAST
jmp CHRGOT
VAL:
jsr GETSTR
bne L35AC
jmp ZERO_FAC
L35AC:
ldx TXTPTR
ldy TXTPTR+1
stx STRNG2
sty STRNG2+1
ldx INDEX
stx TXTPTR
clc
adc INDEX
sta DEST
ldx INDEX+1
stx TXTPTR+1
bcc L35C4
inx
L35C4:
stx DEST+1
ldy #$00
lda (DEST),y
pha
lda #$00
sta (DEST),y
jsr CHRGOT
jsr FIN
pla
ldy #$00
sta (DEST),y
POINT:
ldx STRNG2
ldy STRNG2+1
stx TXTPTR
sty TXTPTR+1
rts
2008-10-08 07:04:03 +00:00
.ifdef KBD
LF422:
lda VARTAB
sec
sbc #$02
ldy VARTAB+1
bcs LF42C
dey
LF42C:
rts
LF42D:
lda Z00,x
LF430:
cmp #$61
bcc LF43A
cmp #$7B
bcs LF43A
LF438:
sbc #$1F
LF43A:
rts
LF43B:
ldx #$5D
LF43D:
txa
and #$7F
cmp $0340
beq LF44D
sta $0340
lda #$03
jsr LDE48
LF44D:
jsr LDE7F
2008-10-09 10:10:09 +00:00
bne RTS4
2008-10-08 07:04:03 +00:00
cpx #$80
bcc LF44D
2008-10-09 10:10:09 +00:00
RTS4:
2008-10-08 07:04:03 +00:00
rts
LF457:
lda TXTTAB
ldx TXTTAB+1
LF45B:
sta JMPADRS+1
stx JMPADRS+2
ldy #$01
lda (JMPADRS+1),y
beq LF438
iny
iny
lda (JMPADRS+1),y
dey
cmp $14
bne LF472
lda (JMPADRS+1),y
cmp $13
LF472:
bcs LF43A
dey
lda (JMPADRS+1),y
tax
dey
lda (JMPADRS+1),y
bcc LF45B
LF47D:
jmp (JMPADRS+1)
.else
2008-10-06 05:21:05 +00:00
GTNUM:
jsr FRMNUM
jsr GETADR
COMBYTE:
jsr CHKCOM
jmp GETBYT
GETADR:
lda FACSIGN
2008-10-11 06:23:53 +00:00
.ifdef APPLE
nop
nop
.else
2008-10-06 05:21:05 +00:00
bmi GOIQ
2008-10-11 06:23:53 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda FAC
cmp #$91
bcs GOIQ
jsr QINT
lda FAC_LAST-1
ldy FAC_LAST
sty LINNUM
sta LINNUM+1
rts
PEEK:
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:47:13 +00:00
lda $12
pha
lda $11
pha
.endif
2008-10-06 05:21:05 +00:00
jsr GETADR
ldy #$00
2008-10-07 08:47:13 +00:00
.ifdef CBM1
2008-10-06 10:58:56 +00:00
cmp #$C0
bcc LD6F3
cmp #$E1
bcc LD6F6
LD6F3:
2008-10-07 08:47:13 +00:00
.endif
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:47:13 +00:00
nop
nop
nop
nop
nop
nop
nop
nop
2008-10-06 10:58:56 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda (LINNUM),y
tay
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 08:47:13 +00:00
pla
sta $11
pla
sta $12
.endif
2008-10-06 10:58:56 +00:00
LD6F6:
2008-10-06 05:21:05 +00:00
jmp SNGFLT
POKE:
jsr GTNUM
txa
ldy #$00
sta (LINNUM),y
rts
WAIT:
jsr GTNUM
stx FORPNT
ldx #$00
jsr CHRGOT
.ifdef CBM2
beq LD745
.else
2008-10-06 05:21:05 +00:00
beq L3628
.endif
2008-10-06 05:21:05 +00:00
jsr COMBYTE
L3628:
stx FORPNT+1
ldy #$00
L362C:
lda (LINNUM),y
eor FORPNT+1
and FORPNT
beq L362C
2008-10-09 10:10:09 +00:00
RTS3:
2008-10-06 05:21:05 +00:00
rts
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
FADDH:
lda #<CON_HALF
ldy #>CON_HALF
jmp FADD
FSUB:
jsr LOAD_ARG_FROM_YA
FSUBT:
lda FACSIGN
eor #$FF
sta FACSIGN
eor ARGSIGN
sta STRNG1
lda FAC
jmp FADDT
2008-10-07 08:47:13 +00:00
.ifdef CBM2
LD745:
lda $11
2008-10-09 10:10:09 +00:00
cmp #<6502
2008-10-07 08:47:13 +00:00
bne L3628
lda $12
2008-10-09 10:10:09 +00:00
sbc #>6502
2008-10-07 08:47:13 +00:00
bne L3628
sta $11
tay
lda #$80
sta $12
LD758:
ldx #$0A
LD75A:
lda MICROSOFT-1,x
and #$3F
sta ($11),y
iny
bne LD766
inc $12
LD766:
dex
bne LD75A
dec $46
bne LD758
rts
.endif
2008-10-06 05:21:05 +00:00
FADD1:
jsr SHIFT_RIGHT
bcc FADD3
FADD:
jsr LOAD_ARG_FROM_YA
FADDT:
bne L365B
jmp COPY_ARG_TO_FAC
L365B:
ldx FACEXTENSION
stx ARGEXTENSION
ldx #ARG
lda ARG
FADD2:
tay
2008-10-08 07:04:03 +00:00
.ifdef KBD
2008-10-09 10:10:09 +00:00
beq RTS4
2008-10-08 07:04:03 +00:00
.else
2008-10-09 10:10:09 +00:00
beq RTS3
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
sec
sbc FAC
beq FADD3
bcc L367F
sty FAC
ldy ARGSIGN
sty FACSIGN
eor #$FF
adc #$00
ldy #$00
sty ARGEXTENSION
ldx #FAC
bne L3683
L367F:
ldy #$00
sty FACEXTENSION
L3683:
cmp #$F9
bmi FADD1
tay
lda FACEXTENSION
lsr 1,x
jsr SHIFT_RIGHT4
FADD3:
bit STRNG1
bpl FADD4
ldy #FAC
cpx #ARG
beq L369B
ldy #ARG
L369B:
sec
eor #$FF
adc ARGEXTENSION
sta FACEXTENSION
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda 4,y
sbc 4,x
sta FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda GOWARM,y
sbc GOWARM,x
sta FAC+3
lda 2,y
sbc 2,x
sta FAC+2
lda 1,y
sbc 1,x
sta FAC+1
NORMALIZE_FAC1:
bcs NORMALIZE_FAC2
jsr COMPLEMENT_FAC
NORMALIZE_FAC2:
ldy #$00
tya
clc
L36C7:
ldx FAC+1
bne NORMALIZE_FAC4
ldx FAC+2
stx FAC+1
ldx FAC+3
stx FAC+2
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
ldx FACEXTENSION
stx FAC+3
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
ldx FAC+4
stx FAC+3
ldx FACEXTENSION
stx FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
sty FACEXTENSION
adc #$08
2008-10-08 11:42:15 +00:00
.ifdef KBD
cmp #$20
.else
2008-10-06 05:21:05 +00:00
cmp #MANTISSA_BYTES*8
2008-10-08 11:42:15 +00:00
.endif
2008-10-06 05:21:05 +00:00
bne L36C7
ZERO_FAC:
lda #$00
STA_IN_FAC_SIGN_AND_EXP:
sta FAC
STA_IN_FAC_SIGN:
sta FACSIGN
rts
FADD4:
adc ARGEXTENSION
sta FACEXTENSION
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda FAC+4
adc ARG+4
sta FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda FAC+3
adc ARG+3
sta FAC+3
lda FAC+2
adc ARG+2
sta FAC+2
lda FAC+1
adc ARG+1
sta FAC+1
jmp NORMALIZE_FAC5
NORMALIZE_FAC3:
adc #$01
asl FACEXTENSION
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
rol FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
rol FAC+3
rol FAC+2
rol FAC+1
NORMALIZE_FAC4:
bpl NORMALIZE_FAC3
sec
sbc FAC
bcs ZERO_FAC
eor #$FF
adc #$01
sta FAC
NORMALIZE_FAC5:
bcc L3764
NORMALIZE_FAC6:
inc FAC
beq OVERFLOW
2008-10-07 08:47:13 +00:00
.ifndef KIM
2008-10-06 05:21:05 +00:00
ror FAC+1
ror FAC+2
ror FAC+3
2008-10-11 16:21:06 +00:00
.ifndef CONFIG_SMALL
2008-10-06 10:58:56 +00:00
ror FAC+4
.endif
2008-10-06 05:21:05 +00:00
ror FACEXTENSION
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #$00
bcc L372E
lda #$80
L372E:
lsr FAC+1
ora FAC+1
sta FAC+1
lda #$00
bcc L373A
lda #$80
L373A:
lsr FAC+2
ora FAC+2
sta FAC+2
lda #$00
bcc L3746
lda #$80
L3746:
lsr FAC+3
ora FAC+3
sta FAC+3
lda #$00
bcc L3752
lda #$80
L3752:
lsr FAC+4
ora FAC+4
sta FAC+4
lda #$00
bcc L375E
lda #$80
L375E:
lsr FACEXTENSION
ora FACEXTENSION
sta FACEXTENSION
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L3764:
rts
COMPLEMENT_FAC:
lda FACSIGN
eor #$FF
sta FACSIGN
COMPLEMENT_FAC_MANTISSA:
lda FAC+1
eor #$FF
sta FAC+1
lda FAC+2
eor #$FF
sta FAC+2
lda FAC+3
eor #$FF
sta FAC+3
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda FAC+4
eor #$FF
sta FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda FACEXTENSION
eor #$FF
sta FACEXTENSION
inc FACEXTENSION
bne RTS12
INCREMENT_FAC_MANTISSA:
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
inc FAC+4
bne RTS12
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
inc FAC+3
bne RTS12
inc FAC+2
bne RTS12
inc FAC+1
RTS12:
rts
OVERFLOW:
ldx #ERR_OVERFLOW
jmp ERROR
SHIFT_RIGHT1:
ldx #RESULT-1
SHIFT_RIGHT2:
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
ldy 3,x
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
ldy 4,x
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
sty FACEXTENSION
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
ldy 3,x
sty 4,x
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldy 2,x
sty 3,x
ldy 1,x
sty 2,x
ldy SHIFTSIGNEXT
sty 1,x
SHIFT_RIGHT:
adc #$08
bmi SHIFT_RIGHT2
beq SHIFT_RIGHT2
sbc #$08
tay
lda FACEXTENSION
bcs SHIFT_RIGHT5
2008-10-07 08:47:13 +00:00
.ifndef KIM
2008-10-06 05:21:05 +00:00
LB588:
asl 1,x
bcc LB58E
inc 1,x
LB58E:
ror 1,x
ror 1,x
SHIFT_RIGHT4:
ror 2,x
ror 3,x
2008-10-11 16:21:06 +00:00
.ifndef CONFIG_SMALL
2008-10-11 06:23:53 +00:00
ror 4,x
2008-10-06 10:58:56 +00:00
.endif
2008-10-06 05:21:05 +00:00
ror a
iny
bne LB588
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
L37C4:
pha
lda 1,x
and #$80
lsr 1,x
ora 1,x
sta 1,x
.byte $24
SHIFT_RIGHT4:
pha
lda #$00
bcc L37D7
lda #$80
L37D7:
lsr 2,x
ora 2,x
sta 2,x
lda #$00
bcc L37E3
lda #$80
L37E3:
lsr 3,x
ora 3,x
sta 3,x
lda #$00
bcc L37EF
lda #$80
L37EF:
lsr 4,x
ora 4,x
sta 4,x
pla
php
lsr a
plp
bcc L37FD
ora #$80
L37FD:
iny
bne L37C4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
SHIFT_RIGHT5:
clc
rts
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
CON_ONE:
.byte $81,$00,$00,$00
POLY_LOG:
.byte $02
.byte $80,$19,$56,$62
.byte $80,$76,$22,$F3
.byte $82,$38,$AA,$40
CON_SQR_HALF:
.byte $80,$35,$04,$F3
CON_SQR_TWO:
.byte $81,$35,$04,$F3
CON_NEG_HALF:
.byte $80,$80,$00,$00
CON_LOG_TWO:
.byte $80,$31,$72,$18
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
CON_ONE:
.byte $81,$00,$00,$00,$00
POLY_LOG:
.byte $03
.byte $7F,$5E,$56,$CB,$79
.byte $80,$13,$9B,$0B,$64
.byte $80,$76,$38,$93,$16
.byte $82,$38,$AA,$3B,$20
CON_SQR_HALF:
.byte $80,$35,$04,$F3,$34
CON_SQR_TWO:
.byte $81,$35,$04,$F3,$34
CON_NEG_HALF:
.byte $80,$80,$00,$00,$00
CON_LOG_TWO:
.byte $80,$31,$72,$17,$F8
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
LOG:
jsr SIGN
beq GIQ
bpl LOG2
GIQ:
jmp IQERR
LOG2:
lda FAC
sbc #$7F
pha
lda #$80
sta FAC
lda #<CON_SQR_HALF
ldy #>CON_SQR_HALF
jsr FADD
lda #<CON_SQR_TWO
ldy #>CON_SQR_TWO
jsr FDIV
lda #<CON_ONE
ldy #>CON_ONE
jsr FSUB
lda #<POLY_LOG
ldy #>POLY_LOG
jsr POLYNOMIAL_ODD
lda #<CON_NEG_HALF
ldy #>CON_NEG_HALF
jsr FADD
pla
jsr ADDACC
lda #<CON_LOG_TWO
ldy #>CON_LOG_TWO
FMULT:
jsr LOAD_ARG_FROM_YA
FMULTT:
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
beq L3903
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
bne L3876
jmp L3903
L3876:
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr ADD_EXPONENTS
lda #$00
sta RESULT
sta RESULT+1
sta RESULT+2
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
sta RESULT+3
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda FACEXTENSION
jsr MULTIPLY1
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda FAC+4
jsr MULTIPLY1
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda FAC+3
jsr MULTIPLY1
lda FAC+2
jsr MULTIPLY1
lda FAC+1
jsr MULTIPLY2
jmp COPY_RESULT_INTO_FAC
MULTIPLY1:
bne MULTIPLY2
jmp SHIFT_RIGHT1
MULTIPLY2:
lsr a
ora #$80
L38A7:
tay
bcc L38C3
clc
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda RESULT+3
adc ARG+4
sta RESULT+3
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda RESULT+2
adc ARG+3
sta RESULT+2
lda RESULT+1
adc ARG+2
sta RESULT+1
lda RESULT
adc ARG+1
sta RESULT
L38C3:
2008-10-07 08:47:13 +00:00
.ifndef KIM
2008-10-06 05:21:05 +00:00
ror RESULT
ror RESULT+1
2008-10-11 06:23:53 +00:00
.ifdef APPLE
.byte RESULT+2,RESULT+2 ; XXX BUG!
.else
2008-10-06 05:21:05 +00:00
ror RESULT+2
2008-10-11 06:23:53 +00:00
.endif
2008-10-11 16:21:06 +00:00
.ifndef CONFIG_SMALL
2008-10-06 10:58:56 +00:00
ror RESULT+3
.endif
2008-10-06 05:21:05 +00:00
ror FACEXTENSION
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #$00
bcc L38C9
lda #$80
L38C9:
lsr RESULT
ora RESULT
sta RESULT
lda #$00
bcc L38D5
lda #$80
L38D5:
lsr RESULT+1
ora RESULT+1
sta RESULT+1
lda #$00
bcc L38E1
lda #$80
L38E1:
lsr RESULT+2
ora RESULT+2
sta RESULT+2
lda #$00
bcc L38ED
lda #$80
L38ED:
lsr RESULT+3
ora RESULT+3
sta RESULT+3
lda #$00
bcc L38F9
lda #$80
L38F9:
lsr FACEXTENSION
ora FACEXTENSION
sta FACEXTENSION
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
tya
lsr a
bne L38A7
L3903:
rts
LOAD_ARG_FROM_YA:
sta INDEX
sty INDEX+1
ldy #BYTES_FP-1
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda (INDEX),y
sta ARG+4
dey
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda (INDEX),y
sta ARG+3
dey
lda (INDEX),y
sta ARG+2
dey
lda (INDEX),y
sta ARGSIGN
eor FACSIGN
sta STRNG1
lda ARGSIGN
ora #$80
sta ARG+1
dey
lda (INDEX),y
sta ARG
lda FAC
rts
ADD_EXPONENTS:
lda ARG
ADD_EXPONENTS1:
beq ZERO
clc
adc FAC
bcc L393C
bmi JOV
clc
.byte $2C
L393C:
bpl ZERO
adc #$80
sta FAC
bne L3947
jmp STA_IN_FAC_SIGN
L3947:
lda STRNG1
sta FACSIGN
rts
OUTOFRNG:
lda FACSIGN
eor #$FF
bmi JOV
ZERO:
pla
pla
jmp ZERO_FAC
JOV:
jmp OVERFLOW
MUL10:
jsr COPY_FAC_TO_ARG_ROUNDED
tax
beq L3970
clc
adc #$02
bcs JOV
2008-10-07 04:44:27 +00:00
LD9BF:
2008-10-06 05:21:05 +00:00
ldx #$00
stx STRNG1
jsr FADD2
inc FAC
beq JOV
L3970:
rts
CONTEN:
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
.byte $84,$20,$00,$00
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
.byte $84,$20,$00,$00,$00
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
DIV10:
jsr COPY_FAC_TO_ARG_ROUNDED
lda #<CONTEN
ldy #>CONTEN
ldx #$00
DIV:
stx STRNG1
jsr LOAD_FAC_FROM_YA
jmp FDIVT
FDIV:
jsr LOAD_ARG_FROM_YA
FDIVT:
beq L3A02
jsr ROUND_FAC
lda #$00
sec
sbc FAC
sta FAC
jsr ADD_EXPONENTS
inc FAC
beq JOV
ldx #-MANTISSA_BYTES
lda #$01
L39A1:
ldy ARG+1
cpy FAC+1
bne L39B7
ldy ARG+2
cpy FAC+2
bne L39B7
ldy ARG+3
cpy FAC+3
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
bne L39B7
ldy ARG+4
cpy FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L39B7:
php
rol a
bcc L39C4
inx
sta RESULT_LAST-1,x
beq L39F2
bpl L39F6
lda #$01
L39C4:
plp
bcs L39D5
L39C7:
asl ARG_LAST
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
rol ARG+3
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
rol ARG+2
rol ARG+1
bcs L39B7
bmi L39A1
bpl L39B7
L39D5:
tay
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda ARG+4
sbc FAC+4
sta ARG+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda ARG+3
sbc FAC+3
sta ARG+3
lda ARG+2
sbc FAC+2
sta ARG+2
lda ARG+1
sbc FAC+1
sta ARG+1
tya
jmp L39C7
L39F2:
lda #$40
bne L39C4
L39F6:
asl a
asl a
asl a
asl a
asl a
asl a
sta FACEXTENSION
plp
jmp COPY_RESULT_INTO_FAC
L3A02:
ldx #ERR_ZERODIV
jmp ERROR
COPY_RESULT_INTO_FAC:
lda RESULT
sta FAC+1
lda RESULT+1
sta FAC+2
lda RESULT+2
sta FAC+3
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda RESULT+3
sta FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
jmp NORMALIZE_FAC2
LOAD_FAC_FROM_YA:
sta INDEX
sty INDEX+1
ldy #MANTISSA_BYTES
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda (INDEX),y
sta FAC+4
dey
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda (INDEX),y
sta FAC+3
dey
lda (INDEX),y
sta FAC+2
dey
lda (INDEX),y
sta FACSIGN
ora #$80
sta FAC+1
dey
lda (INDEX),y
sta FAC
sty FACEXTENSION
rts
STORE_FAC_IN_TEMP2_ROUNDED:
ldx #TEMP2
.byte $2C
STORE_FAC_IN_TEMP1_ROUNDED:
2008-10-09 10:35:37 +00:00
ldx #TEMP1+(5-BYTES_FP)
2008-10-06 05:21:05 +00:00
ldy #$00
beq STORE_FAC_AT_YX_ROUNDED
SETFOR:
ldx FORPNT
ldy FORPNT+1
STORE_FAC_AT_YX_ROUNDED:
jsr ROUND_FAC
stx INDEX
sty INDEX+1
ldy #MANTISSA_BYTES
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda FAC+4
sta (INDEX),y
dey
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda FAC+3
sta (INDEX),y
dey
lda FAC+2
sta (INDEX),y
dey
lda FACSIGN
ora #$7F
and FAC+1
sta (INDEX),y
dey
lda FAC
sta (INDEX),y
sty FACEXTENSION
rts
COPY_ARG_TO_FAC:
lda ARGSIGN
MFA:
sta FACSIGN
ldx #BYTES_FP
L3A7A:
lda SHIFTSIGNEXT,x
sta EXPSGN,x
dex
bne L3A7A
stx FACEXTENSION
rts
COPY_FAC_TO_ARG_ROUNDED:
jsr ROUND_FAC
MAF:
ldx #BYTES_FP+1
L3A89:
lda EXPSGN,x
sta SHIFTSIGNEXT,x
dex
bne L3A89
stx FACEXTENSION
RTS14:
rts
ROUND_FAC:
lda FAC
beq RTS14
asl FACEXTENSION
bcc RTS14
INCREMENT_MANTISSA:
jsr INCREMENT_FAC_MANTISSA
bne RTS14
jmp NORMALIZE_FAC6
SIGN:
lda FAC
beq RTS15
L3AA7:
lda FACSIGN
SIGN2:
rol a
lda #$FF
bcs RTS15
lda #$01
RTS15:
rts
SGN:
jsr SIGN
FLOAT:
sta FAC+1
lda #$00
sta FAC+2
ldx #$88
FLOAT1:
lda FAC+1
eor #$FF
rol a
FLOAT2:
lda #$00
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
sta FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta FAC+3
2008-10-07 04:44:27 +00:00
LDB21:
2008-10-06 05:21:05 +00:00
stx FAC
sta FACEXTENSION
sta FACSIGN
jmp NORMALIZE_FAC1
ABS:
lsr FACSIGN
rts
FCOMP:
sta DEST
FCOMP2:
sty DEST+1
ldy #$00
lda (DEST),y
iny
tax
beq SIGN
lda (DEST),y
eor FACSIGN
bmi L3AA7
cpx FAC
bne L3B0A
lda (DEST),y
ora #$80
cmp FAC+1
bne L3B0A
iny
lda (DEST),y
cmp FAC+2
bne L3B0A
iny
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
lda (DEST),y
cmp FAC+3
bne L3B0A
iny
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #$7F
cmp FACEXTENSION
lda (DEST),y
sbc FAC_LAST
beq L3B32
L3B0A:
lda FACSIGN
bcc L3B10
eor #$FF
L3B10:
jmp SIGN2
QINT:
lda FAC
beq QINT3
sec
sbc #120+8*BYTES_FP
bit FACSIGN
bpl L3B27
tax
lda #$FF
sta SHIFTSIGNEXT
jsr COMPLEMENT_FAC_MANTISSA
txa
L3B27:
ldx #FAC
cmp #$F9
bpl QINT2
jsr SHIFT_RIGHT
sty SHIFTSIGNEXT
L3B32:
rts
QINT2:
tay
lda FACSIGN
and #$80
lsr FAC+1
ora FAC+1
sta FAC+1
jsr SHIFT_RIGHT4
sty SHIFTSIGNEXT
rts
INT:
lda FAC
cmp #120+8*BYTES_FP
bcs RTS17
jsr QINT
sty FACEXTENSION
lda FACSIGN
sty FACSIGN
eor #$80
rol a
lda #120+8*BYTES_FP
sta FAC
lda FAC_LAST
sta CHARAC
jmp NORMALIZE_FAC1
QINT3:
sta FAC+1
sta FAC+2
sta FAC+3
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
sta FAC+4
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
tay
RTS17:
rts
FIN:
ldy #$00
ldx #SERLEN-TMPEXP
L3B6F:
sty TMPEXP,x
dex
bpl L3B6F
bcc FIN2
cmp #$2D
bne L3B7E
stx SERLEN
beq FIN1
L3B7E:
cmp #$2B
bne FIN3
FIN1:
jsr CHRGET
FIN2:
bcc FIN9
FIN3:
cmp #$2E
beq FIN10
cmp #$45
bne FIN7
jsr CHRGET
bcc FIN5
cmp #TOKEN_MINUS
beq L3BA6
cmp #$2D
beq L3BA6
cmp #TOKEN_PLUS
beq FIN4
cmp #$2B
beq FIN4
bne FIN6
L3BA6:
2008-10-07 08:47:13 +00:00
.ifndef KIM
2008-10-06 05:21:05 +00:00
ror EXPSGN
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #$00
bcc L3BAC
lda #$80
L3BAC:
lsr EXPSGN
ora EXPSGN
sta EXPSGN
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
FIN4:
jsr CHRGET
FIN5:
bcc GETEXP
FIN6:
bit EXPSGN
bpl FIN7
lda #$00
sec
sbc EXPON
jmp FIN8
FIN10:
2008-10-07 08:47:13 +00:00
.ifndef KIM
2008-10-06 05:21:05 +00:00
ror LOWTR
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #$00
bcc L3BC9
lda #$80
L3BC9:
lsr LOWTR
ora LOWTR
sta LOWTR
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
bit LOWTR
bvc FIN1
FIN7:
lda EXPON
FIN8:
sec
sbc INDX
sta EXPON
beq L3BEE
bpl L3BE7
L3BDE:
jsr DIV10
inc EXPON
bne L3BDE
beq L3BEE
L3BE7:
jsr MUL10
dec EXPON
bne L3BE7
L3BEE:
lda SERLEN
bmi L3BF3
rts
L3BF3:
jmp NEGOP
FIN9:
pha
bit LOWTR
bpl L3BFD
inc INDX
L3BFD:
jsr MUL10
pla
sec
sbc #$30
jsr ADDACC
jmp FIN1
ADDACC:
pha
jsr COPY_FAC_TO_ARG_ROUNDED
pla
jsr FLOAT
lda ARGSIGN
eor FACSIGN
sta STRNG1
ldx FAC
jmp FADDT
GETEXP:
lda EXPON
2008-10-09 10:35:37 +00:00
cmp #MAX_EXPON
2008-10-06 10:58:56 +00:00
bcc L3C2C
2008-10-09 10:35:37 +00:00
.ifndef CBM1
2008-10-07 08:47:13 +00:00
lda #$64
.endif
2008-10-06 10:58:56 +00:00
bit EXPSGN
2008-10-09 10:35:37 +00:00
.ifndef CBM1
bmi L3C3A
.else
2008-10-06 10:58:56 +00:00
bmi LDC70
.endif
2008-10-06 10:58:56 +00:00
jmp OVERFLOW
LDC70:
2008-10-07 08:47:13 +00:00
.ifdef CBM1
2008-10-06 10:58:56 +00:00
lda #$0B
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
L3C2C:
asl a
asl a
clc
adc EXPON
asl a
clc
ldy #$00
adc (TXTPTR),y
sec
sbc #$30
L3C3A:
sta EXPON
jmp FIN4
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
; these values are /1000 of what the labels say
CON_99999999_9:
.byte $91,$43,$4F,$F8
CON_999999999:
.byte $94,$74,$23,$F7
CON_BILLION:
.byte $94,$74,$24,$00
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
CON_99999999_9:
.byte $9B,$3E,$BC,$1F,$FD
CON_999999999:
2008-10-07 08:47:13 +00:00
.ifdef CBM1
2008-10-07 04:44:27 +00:00
.byte $9E,$6E,$6B,$27,$FE
.else
2008-10-06 05:21:05 +00:00
.byte $9E,$6E,$6B,$27,$FD
2008-10-07 04:44:27 +00:00
.endif
2008-10-06 05:21:05 +00:00
CON_BILLION:
.byte $9E,$6E,$6B,$28,$00
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
INPRT:
2008-10-08 07:04:03 +00:00
.ifdef KBD
jsr LFE0B
.byte " in"
.byte 0
.else
2008-10-06 05:21:05 +00:00
lda #<QT_IN
ldy #>QT_IN
jsr GOSTROUT2
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda CURLIN+1
ldx CURLIN
LINPRT:
sta FAC+1
stx FAC+2
ldx #$90
sec
jsr FLOAT2
jsr FOUT
GOSTROUT2:
jmp STROUT
FOUT:
ldy #$01
FOUT1:
lda #$20
bit FACSIGN
bpl L3C73
lda #$2D
L3C73:
sta $FF,y
sta FACSIGN
sty STRNG2
iny
lda #$30
ldx FAC
bne L3C84
jmp FOUT4
L3C84:
lda #$00
cpx #$80
beq L3C8C
bcs L3C95
L3C8C:
lda #<CON_BILLION
ldy #>CON_BILLION
jsr FMULT
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-09 10:35:37 +00:00
lda #-6 ; exponent adjustment
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #-9
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L3C95:
sta INDX
L3C97:
lda #<CON_999999999
ldy #>CON_999999999
jsr FCOMP
beq L3CBE
bpl L3CB4
L3CA2:
lda #<CON_99999999_9
ldy #>CON_99999999_9
jsr FCOMP
beq L3CAD
bpl L3CBB
L3CAD:
jsr MUL10
dec INDX
bne L3CA2
L3CB4:
jsr DIV10
inc INDX
bne L3C97
L3CBB:
jsr FADDH
L3CBE:
jsr QINT
ldx #$01
lda INDX
clc
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
adc #$07
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
adc #$0A
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
bmi L3CD3
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
cmp #$08
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
cmp #$0B
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
bcs L3CD4
adc #$FF
tax
lda #$02
L3CD3:
sec
L3CD4:
sbc #$02
sta EXPON
stx INDX
txa
beq L3CDF
bpl L3CF2
L3CDF:
ldy STRNG2
lda #$2E
iny
sta $FF,y
txa
beq L3CF0
lda #$30
iny
sta $FF,y
L3CF0:
sty STRNG2
L3CF2:
ldy #$00
2008-10-07 04:44:27 +00:00
LDD3A:
2008-10-06 05:21:05 +00:00
ldx #$80
L3CF6:
lda FAC_LAST
clc
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
adc DECTBL+3,y
sta FAC+4
lda FAC+3
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
adc DECTBL+2,y
sta FAC+3
lda FAC+2
adc DECTBL+1,y
sta FAC+2
lda FAC+1
adc DECTBL,y
sta FAC+1
inx
bcs L3D1A
bpl L3CF6
bmi L3D1C
L3D1A:
bmi L3CF6
L3D1C:
txa
bcc L3D23
eor #$FF
adc #$0A
L3D23:
adc #$2F
iny
iny
iny
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
iny
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
sty VARPNT
ldy STRNG2
iny
tax
and #$7F
sta $FF,y
dec INDX
bne L3D3E
lda #$2E
iny
sta $FF,y
L3D3E:
sty STRNG2
ldy VARPNT
txa
eor #$FF
and #$80
tax
cpy #DECTBL_END-DECTBL
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:58:56 +00:00
beq LDD96
cpy #$3C
.endif
2008-10-06 05:21:05 +00:00
bne L3CF6
2008-10-06 10:58:56 +00:00
LDD96:
2008-10-06 05:21:05 +00:00
ldy STRNG2
L3D4E:
lda $FF,y
dey
cmp #$30
beq L3D4E
cmp #$2E
beq L3D5B
iny
L3D5B:
lda #$2B
ldx EXPON
beq L3D8F
bpl L3D6B
lda #$00
sec
sbc EXPON
tax
lda #$2D
L3D6B:
sta STACK+1,y
lda #$45
sta STACK,y
txa
ldx #$2F
sec
L3D77:
inx
sbc #$0A
bcs L3D77
adc #$3A
sta STACK+3,y
txa
sta STACK+2,y
lda #$00
sta STACK+4,y
beq L3D94
FOUT4:
sta $FF,y
L3D8F:
lda #$00
sta STACK,y
L3D94:
lda #$00
ldy #$01
rts
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
CON_HALF:
.byte $80,$00,$00,$00
DECTBL:
.byte $FE,$79,$60 ; -100000
.byte $00,$27,$10 ; 10000
.byte $FF,$FC,$18 ; -1000
.byte $00,$00,$64 ; 100
.byte $FF,$FF,$F6 ; -10
.byte $00,$00,$01 ; 1
DECTBL_END:
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
CON_HALF:
.byte $80,$00,$00,$00,$00
DECTBL:
.byte $FA,$0A,$1F,$00,$00,$98,$96,$80
.byte $FF,$F0,$BD,$C0,$00,$01,$86,$A0
.byte $FF,$FF,$D8,$F0,$00,$00,$03,$E8
.byte $FF,$FF,$FF,$9C,$00,$00,$00,$0A
.byte $FF,$FF,$FF,$FF
2008-10-07 04:44:27 +00:00
DECTBL_END:
2008-10-09 10:35:37 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:58:56 +00:00
.byte $FF,$DF,$0A,$80 ; TI$
.byte $00,$03,$4B,$C0
.byte $FF,$FF,$73,$60
.byte $00,$00,$0E,$10
.byte $FF,$FF,$FD,$A8
.byte $00,$00,$00,$3C
.endif
2008-10-08 11:42:15 +00:00
.ifdef CBM2_KBD
C_ZERO = CON_HALF + 2
.endif
2008-10-06 05:21:05 +00:00
SQR:
jsr COPY_FAC_TO_ARG_ROUNDED
lda #<CON_HALF
ldy #>CON_HALF
jsr LOAD_FAC_FROM_YA
FPWRT:
beq EXP
lda ARG
bne L3DD5
jmp STA_IN_FAC_SIGN_AND_EXP
L3DD5:
ldx #TEMP3
ldy #$00
jsr STORE_FAC_AT_YX_ROUNDED
lda ARGSIGN
bpl L3DEF
jsr INT
lda #TEMP3
ldy #$00
jsr FCOMP
bne L3DEF
tya
ldy CHARAC
L3DEF:
jsr MFA
tya
pha
jsr LOG
lda #TEMP3
ldy #$00
jsr FMULT
jsr EXP
pla
lsr a
bcc L3E0F
NEGOP:
lda FAC
beq L3E0F
lda FACSIGN
eor #$FF
sta FACSIGN
L3E0F:
rts
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
CON_LOG_E:
.byte $81,$38,$AA,$3B
POLY_EXP:
.byte $06
.byte $74,$63,$90,$8C
.byte $77,$23,$0C,$AB
.byte $7A,$1E,$94,$00
.byte $7C,$63,$42,$80
.byte $7E,$75,$FE,$D0
.byte $80,$31,$72,$15
.byte $81,$00,$00,$00
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
CON_LOG_E:
.byte $81,$38,$AA,$3B,$29
POLY_EXP:
.byte $07
.byte $71,$34,$58,$3E,$56
.byte $74,$16,$7E,$B3,$1B
.byte $77,$2F,$EE,$E3,$85
.byte $7A,$1D,$84,$1C,$2A
.byte $7C,$63,$59,$58,$0A
.byte $7E,$75,$FD,$E7,$C6
.byte $80,$31,$72,$18,$10
.byte $81,$00,$00,$00,$00
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
EXP:
lda #<CON_LOG_E
ldy #>CON_LOG_E
jsr FMULT
lda FACEXTENSION
adc #$50
bcc L3E4E
jsr INCREMENT_MANTISSA
L3E4E:
sta ARGEXTENSION
jsr MAF
lda FAC
cmp #$88
bcc L3E5C
L3E59:
jsr OUTOFRNG
L3E5C:
jsr INT
lda CHARAC
clc
adc #$81
beq L3E59
sec
sbc #$01
pha
ldx #BYTES_FP
L3E6C:
lda ARG,x
ldy FAC,x
sta FAC,x
sty ARG,x
dex
bpl L3E6C
lda ARGEXTENSION
sta FACEXTENSION
jsr FSUBT
jsr NEGOP
lda #<POLY_EXP
ldy #>POLY_EXP
jsr POLYNOMIAL
lda #$00
sta STRNG1
pla
jsr ADD_EXPONENTS1
rts
POLYNOMIAL_ODD:
sta STRNG2
sty STRNG2+1
jsr STORE_FAC_IN_TEMP1_ROUNDED
2008-10-09 10:35:37 +00:00
lda #TEMP1+(5-BYTES_FP)
2008-10-06 05:21:05 +00:00
jsr FMULT
jsr SERMAIN
2008-10-09 10:35:37 +00:00
lda #TEMP1+(5-BYTES_FP)
2008-10-06 05:21:05 +00:00
ldy #$00
jmp FMULT
POLYNOMIAL:
sta STRNG2
sty STRNG2+1
SERMAIN:
jsr STORE_FAC_IN_TEMP2_ROUNDED
lda (STRNG2),y
sta SERLEN
ldy STRNG2
iny
tya
bne L3EBA
inc STRNG2+1
L3EBA:
sta STRNG2
ldy STRNG2+1
L3EBE:
jsr FMULT
lda STRNG2
ldy STRNG2+1
clc
adc #BYTES_FP
bcc L3ECB
iny
L3ECB:
sta STRNG2
sty STRNG2+1
jsr FADD
lda #TEMP2
ldy #$00
dec SERLEN
bne L3EBE
L3EDA:
rts
2008-10-08 07:04:03 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
CONRND1:
.byte $98,$35,$44,$7A
CONRND2:
.byte $68,$28,$B1,$46
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
RND:
2008-10-08 07:04:03 +00:00
.ifdef KBD
ldx #$10
jsr SIGN
beq LFC26
bmi LFC10
lda $87
ldy $88
LFBFA:
sta FAC+2
sty FAC+1
LFBFE:
asl a
asl a
eor FAC+2
asl a
eor FAC+1
asl a
asl a
asl a
asl a
eor FAC+1
asl a
rol FAC+2
rol FAC+1
LFC10:
lda FAC+2
dex
bne LFBFE
sta $87
sta FAC+3
lda FAC+1
sta $88
lda #$80
sta FAC
stx FACSIGN
jmp NORMALIZE_FAC2
LFC26:
ldy $03CA
lda $03C7
ora #$01
2008-10-08 11:42:15 +00:00
GOMOVMF:
2008-10-08 07:04:03 +00:00
bne LFBFA
.byte $F0
.else
2008-10-06 05:21:05 +00:00
jsr SIGN
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 10:58:56 +00:00
bmi L3F01
bne LDF63
lda ENTROPY
sta FAC+1
lda ENTROPY+4
sta FAC+2
lda ENTROPY+1
sta FAC+3
lda ENTROPY+5
sta FAC+4
2008-10-06 10:58:56 +00:00
jmp LDF88
LDF63:
.else
2008-10-06 05:21:05 +00:00
tax
bmi L3F01
2008-10-06 10:58:56 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #<RNDSEED
ldy #$00
jsr LOAD_FAC_FROM_YA
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
txa
beq L3EDA
2008-10-06 10:58:56 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #<CONRND1
ldy #>CONRND1
jsr FMULT
lda #<CONRND2
ldy #>CONRND2
jsr FADD
L3F01:
ldx FAC_LAST
lda FAC+1
sta FAC_LAST
stx FAC+1
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
ldx FAC+2
lda FAC+3
sta FAC+2
stx FAC+3
2008-10-06 10:58:56 +00:00
LDF88:
.endif
2008-10-06 05:21:05 +00:00
lda #$00
sta FACSIGN
lda FAC
sta FACEXTENSION
lda #$80
sta FAC
jsr NORMALIZE_FAC2
2008-10-07 04:44:27 +00:00
ldx #RNDSEED
2008-10-06 05:21:05 +00:00
ldy #$00
GOMOVMF:
jmp STORE_FAC_AT_YX_ROUNDED
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
SIN_COS_TAN_ATN:
COS:
lda #<CON_PI_HALF
ldy #>CON_PI_HALF
jsr FADD
SIN:
jsr COPY_FAC_TO_ARG_ROUNDED
lda #<CON_PI_DOUB
ldy #>CON_PI_DOUB
ldx ARGSIGN
jsr DIV
jsr COPY_FAC_TO_ARG_ROUNDED
jsr INT
lda #$00
sta STRNG1
jsr FSUBT
lda #<QUARTER
ldy #>QUARTER
jsr FSUB
lda FACSIGN
pha
bpl SIN1
jsr FADDH
lda FACSIGN
bmi L3F5B
lda CPRMASK
eor #$FF
sta CPRMASK
SIN1:
jsr NEGOP
L3F5B:
lda #<QUARTER
ldy #>QUARTER
jsr FADD
pla
bpl L3F68
jsr NEGOP
L3F68:
lda #<POLY_SIN
ldy #>POLY_SIN
jmp POLYNOMIAL_ODD
TAN:
jsr STORE_FAC_IN_TEMP1_ROUNDED
lda #$00
sta CPRMASK
jsr SIN
ldx #TEMP3
ldy #$00
jsr GOMOVMF
2008-10-09 10:35:37 +00:00
lda #TEMP1+(5-BYTES_FP)
2008-10-06 05:21:05 +00:00
ldy #$00
jsr LOAD_FAC_FROM_YA
lda #$00
sta FACSIGN
lda CPRMASK
jsr TAN1
lda #TEMP3
ldy #$00
jmp FDIV
TAN1:
pha
jmp SIN1
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
CON_PI_HALF:
.byte $81,$49,$0F,$DB
CON_PI_DOUB:
.byte $83,$49,$0F,$DB
QUARTER:
.byte $7F,$00,$00,$00
POLY_SIN:
.byte $04,$86,$1E,$D7,$FB,$87,$99,$26
.byte $65,$87,$23,$34,$58,$86,$A5,$5D
.byte $E1,$83,$49,$0F,$DB
.else
CON_PI_HALF:
.byte $81,$49,$0F,$DA,$A2
CON_PI_DOUB:
.byte $83,$49,$0F,$DA,$A2
QUARTER:
.byte $7F,$00,$00,$00,$00
POLY_SIN:
.byte $05,$84,$E6,$1A,$2D,$1B,$86,$28
.byte $07,$FB,$F8,$87,$99,$68,$89,$01
.byte $87,$23,$35,$DF,$E1,$86,$A5,$5D
.byte $E7,$28,$83,$49,$0F,$DA,$A2
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
MICROSOFT:
.byte $A6,$D3,$C1,$C8,$D4,$C8,$D5,$C4
.byte $CE,$CA
2008-10-06 10:58:56 +00:00
.endif
2008-10-07 08:47:13 +00:00
.ifdef CBM2
MICROSOFT:
.byte $A1,$54,$46,$8F,$13,$8F,$52
.byte $43,$89,$CD
.endif
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
ATN:
lda FACSIGN
pha
bpl L3FDB
jsr NEGOP
L3FDB:
lda FAC
pha
cmp #$81
bcc L3FE9
lda #<CON_ONE
ldy #>CON_ONE
jsr FDIV
L3FE9:
lda #<POLY_ATN
ldy #>POLY_ATN
jsr POLYNOMIAL_ODD
pla
cmp #$81
bcc L3FFC
lda #<CON_PI_HALF
ldy #>CON_PI_HALF
jsr FSUB
L3FFC:
pla
bpl L4002
jmp NEGOP
L4002:
rts
POLY_ATN:
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
.byte $08
.byte $78,$3A,$C5,$37
.byte $7B,$83,$A2,$5C
.byte $7C,$2E,$DD,$4D
.byte $7D,$99,$B0,$1E
.byte $7D,$59,$ED,$24
.byte $7E,$91,$72,$00
.byte $7E,$4C,$B9,$73
.byte $7F,$AA,$AA,$53
.byte $81,$00,$00,$00
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
.byte $0B
.byte $76,$B3,$83,$BD,$D3
.byte $79,$1E,$F4,$A6,$F5
.byte $7B,$83,$FC,$B0,$10
.byte $7C,$0C,$1F,$67,$CA
.byte $7C,$DE,$53,$CB,$C1
.byte $7D,$14,$64,$70,$4C
.byte $7D,$B7,$EA,$51,$7A
.byte $7D,$63,$30,$88,$7E
.byte $7E,$92,$44,$99,$3A
.byte $7E,$4C,$CC,$91,$C7
.byte $7F,$AA,$AA,$AA,$13
.byte $81,$00,$00,$00,$00
2008-10-11 16:21:06 +00:00
.ifdef KIM
2008-10-06 05:21:05 +00:00
.byte $00 ; XXX
2008-10-06 11:21:24 +00:00
.endif
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
RAMSTART1:
GENERIC_CHRGET:
inc TXTPTR
bne L4047
inc TXTPTR+1
L4047:
lda $EA60
2008-10-08 07:04:03 +00:00
.ifdef KBD
jsr LF430
.endif
2008-10-06 05:21:05 +00:00
cmp #$3A
bcs L4058
cmp #$20
beq GENERIC_CHRGET
sec
sbc #$30
sec
sbc #$D0
L4058:
rts
2008-10-08 07:04:03 +00:00
.ifndef KBD
2008-10-07 08:47:13 +00:00
; random number seed
2008-10-08 07:04:03 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
.byte $80,$4F,$C7,$52
2008-10-06 11:21:24 +00:00
.endif
2008-10-07 10:36:34 +00:00
.ifdef CONFIG_11
2008-10-06 05:21:05 +00:00
.byte $80,$4F,$C7,$52,$58
2008-10-06 11:21:24 +00:00
.endif
2008-10-07 08:47:13 +00:00
.ifdef CBM1
2008-10-06 11:21:24 +00:00
.byte $80,$4F,$C7,$52,$59
.endif
2008-10-08 07:04:03 +00:00
.endif
2008-10-06 05:21:05 +00:00
GENERIC_CHRGET_END:
2008-10-08 07:04:03 +00:00
.ifdef KBD
2008-10-08 11:42:15 +00:00
LFD3E:
2008-10-08 07:04:03 +00:00
php
2008-10-08 11:42:15 +00:00
jmp FNDLIN
.endif
COLD_START:
.ifdef KBD
2008-10-08 07:04:03 +00:00
lda #$81
sta $03A0
lda #$FD
sta $03A1
lda #$20
sta $0480
lda $0352
sta $04
lda $0353
sta $05
.else
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 11:21:24 +00:00
lda #<QT_WRITTEN_BY
ldy #>QT_WRITTEN_BY
2008-10-06 05:21:05 +00:00
jsr STROUT
2008-10-06 11:21:24 +00:00
.endif
COLD_START2:
2008-10-11 06:23:53 +00:00
.ifndef CBM2
2008-10-06 05:21:05 +00:00
ldx #$FF
stx CURLIN+1
2008-10-11 06:23:53 +00:00
.endif
2008-10-11 10:44:10 +00:00
.if INPUTBUFFER >= $0100
2008-10-11 06:23:53 +00:00
ldx #$FB
2008-10-07 08:47:13 +00:00
.endif
2008-10-06 05:21:05 +00:00
txs
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 11:21:24 +00:00
lda #<COLD_START2
ldy #>COLD_START2
2008-10-11 09:24:32 +00:00
sta Z00+1
sty Z00+2
2008-10-06 05:21:05 +00:00
sta GOWARM+1
sty GOWARM+2
2008-10-06 11:21:24 +00:00
lda #<AYINT
ldy #>AYINT
2008-10-06 05:21:05 +00:00
sta GOSTROUT
sty GOSTROUT+1
2008-10-06 11:21:24 +00:00
lda #<GIVAYF
ldy #>GIVAYF
2008-10-06 05:21:05 +00:00
sta GOGIVEAYF
sty GOGIVEAYF+1
2008-10-06 11:21:24 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #$4C
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 11:21:24 +00:00
sta JMPADRS
sta Z00
.else
2008-10-06 05:21:05 +00:00
sta Z00
sta GOWARM
sta JMPADRS
2008-10-06 11:21:24 +00:00
.endif
2008-10-11 06:23:53 +00:00
.ifdef APPLE
sta L000A
.endif
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
sta USR
lda #$88
ldy #$AE
sta $0B
sty $0C
2008-10-07 08:03:36 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
lda #<IQERR
ldy #>IQERR
2008-10-11 09:24:32 +00:00
.endif
.ifdef APPLE
lda #<L29D0
ldy #>L29D0
.endif
.ifdef CBM_APPLE
2008-10-07 04:44:27 +00:00
sta L0001
2008-10-11 09:24:32 +00:00
sty L0001+1
2008-10-11 06:23:53 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-11 09:24:32 +00:00
.ifdef APPLE
lda #$28
.else
2008-10-06 05:21:05 +00:00
lda #$48
2008-10-11 09:24:32 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta Z17
2008-10-11 09:24:32 +00:00
.ifdef APPLE
lda #$0E
.else
2008-10-06 05:21:05 +00:00
lda #$38
2008-10-11 09:24:32 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta Z18
2008-10-07 04:44:27 +00:00
.endif
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
lda #$28
sta $0F
lda #$1E
sta $10
.endif
2008-10-08 07:04:03 +00:00
.endif
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-08 11:42:15 +00:00
.ifdef KBD
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET+4
.else
2008-10-06 05:21:05 +00:00
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET
2008-10-08 11:42:15 +00:00
.endif
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET-1 ; XXX
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
L4098:
lda GENERIC_CHRGET-1,x
sta STRNG2+1,x
dex
bne L4098
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
lda #$03
sta DSCLEN
.endif
2008-10-08 07:04:03 +00:00
.ifndef KBD
2008-10-06 05:21:05 +00:00
txa
sta SHIFTSIGNEXT
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
sta Z03
2008-10-06 11:21:24 +00:00
.endif
2008-10-06 05:21:05 +00:00
sta LASTPT+1
2008-10-11 10:36:02 +00:00
.if .defined(CONFIG_NULL) || .defined(CBM1)
2008-10-06 05:21:05 +00:00
sta Z15
2008-10-07 09:18:22 +00:00
.endif
2008-10-07 10:36:34 +00:00
.ifndef CONFIG_11
2008-10-06 05:21:05 +00:00
sta Z16
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
pha
sta Z14
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
inx
stx $01FD
stx $01FC
.else
2008-10-06 05:21:05 +00:00
lda #$03
sta DSCLEN
2008-10-11 06:23:53 +00:00
.ifndef KIM_APPLE
2008-10-06 05:21:05 +00:00
lda #$2C
sta LINNUM+1
2008-10-07 08:03:36 +00:00
.endif
2008-10-06 05:21:05 +00:00
jsr CRDO
2008-10-11 06:23:53 +00:00
.endif
.ifdef APPLE
lda #$01
sta $01FD
sta $01FC
2008-10-07 09:18:22 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldx #TEMPST
stx TEMPPT
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
lda #<QT_MEMORY_SIZE
ldy #>QT_MEMORY_SIZE
jsr STROUT
2008-10-11 09:24:32 +00:00
.ifdef APPLE
jsr INLINX
.else
2008-10-06 05:21:05 +00:00
jsr NXIN
2008-10-11 09:24:32 +00:00
.endif
2008-10-06 05:21:05 +00:00
stx TXTPTR
sty TXTPTR+1
jsr CHRGET
cmp #$41
beq COLD_START
tay
bne L40EE
2008-10-06 11:21:24 +00:00
.endif
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
lda #<RAMSTART2
2008-10-07 09:18:22 +00:00
.endif
2008-10-06 05:21:05 +00:00
ldy #>RAMSTART2
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
sta $28
sty $29
.endif
2008-10-06 05:21:05 +00:00
sta LINNUM
sty LINNUM+1
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
tay
.else
2008-10-06 05:21:05 +00:00
ldy #$00
2008-10-07 09:18:22 +00:00
.endif
2008-10-06 05:21:05 +00:00
L40D7:
inc LINNUM
bne L40DD
inc LINNUM+1
2008-10-07 09:18:22 +00:00
.ifdef CBM1
2008-10-06 11:21:24 +00:00
lda $09
cmp #$80
beq L40FA
.endif
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
bmi L40FA
.endif
2008-10-06 05:21:05 +00:00
L40DD:
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
lda #$55
.else
2008-10-06 05:21:05 +00:00
lda #$92
.endif
2008-10-06 05:21:05 +00:00
sta (LINNUM),y
cmp (LINNUM),y
bne L40FA
asl a
sta (LINNUM),y
cmp (LINNUM),y
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-06 11:21:24 +00:00
beq L40D7
.endif
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
beq L40D7
bne L40FA
2008-10-06 11:21:24 +00:00
.endif
2008-10-11 06:23:53 +00:00
.ifdef KIM_APPLE
2008-10-06 05:21:05 +00:00
bne L40FA
beq L40D7
2008-10-06 11:21:24 +00:00
.endif
2008-10-06 05:21:05 +00:00
L40EE:
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
jsr CHRGOT
jsr LINGET
tay
beq L40FA
jmp SYNERR
2008-10-06 11:21:24 +00:00
.endif
2008-10-06 05:21:05 +00:00
L40FA:
lda LINNUM
ldy LINNUM+1
sta MEMSIZ
sty MEMSIZ+1
sta FRETOP
sty FRETOP+1
L4106:
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-11 06:23:53 +00:00
.ifdef APPLE
lda #$FF
jmp L2829
2008-10-11 09:24:32 +00:00
.word STROUT ; PATCH!
jsr NXIN
2008-10-11 06:23:53 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #<QT_TERMINAL_WIDTH
ldy #>QT_TERMINAL_WIDTH
jsr STROUT
jsr NXIN
2008-10-11 06:23:53 +00:00
.endif
2008-10-06 05:21:05 +00:00
stx TXTPTR
sty TXTPTR+1
jsr CHRGET
tay
beq L4136
jsr LINGET
lda LINNUM+1
bne L4106
lda LINNUM
cmp #$10
bcc L4106
2008-10-11 09:24:32 +00:00
L2829:
2008-10-06 05:21:05 +00:00
sta Z17
L4129:
sbc #$0E
bcs L4129
eor #$FF
sbc #$0C
clc
adc Z17
sta Z18
L4136:
2008-10-06 11:21:24 +00:00
.endif
.ifndef KIM
ldx #<RAMSTART3
ldy #>RAMSTART3
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #<QT_WANT
ldy #>QT_WANT
jsr STROUT
jsr NXIN
stx TXTPTR
sty TXTPTR+1
jsr CHRGET
ldx #<RAMSTART1
ldy #>RAMSTART1
cmp #'Y'
beq L4183
cmp #'A'
beq L4157
cmp #'N'
bne L4136
L4157:
ldx #<IQERR
ldy #>IQERR
stx UNFNC+26
sty UNFNC+26+1
ldx #<ATN
ldy #>ATN
cmp #'A'
beq L4183
ldx #<IQERR
ldy #>IQERR
stx UNFNC+20
sty UNFNC+20+1
stx UNFNC+20+1+3
sty UNFNC+20+1+3+1
stx UNFNC+20+1+1
sty UNFNC+20+1+1+1
ldx #<SIN_COS_TAN_ATN
ldy #>SIN_COS_TAN_ATN
L4183:
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
stx TXTTAB
sty TXTTAB+1
ldy #$00
tya
sta (TXTTAB),y
inc TXTTAB
2008-10-08 05:07:59 +00:00
.ifndef CBM2_KBD
2008-10-06 05:21:05 +00:00
bne L4192
inc TXTTAB+1
L4192:
2008-10-07 09:18:22 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda TXTTAB
ldy TXTTAB+1
jsr REASON
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
lda #<QT_BASIC
ldy #>QT_BASIC
jsr STROUT
.else
2008-10-06 05:21:05 +00:00
jsr CRDO
2008-10-07 09:18:22 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda MEMSIZ
sec
sbc TXTTAB
tax
lda MEMSIZ+1
sbc TXTTAB+1
jsr LINPRT
lda #<QT_BYTES_FREE
ldy #>QT_BYTES_FREE
jsr STROUT
2008-10-11 10:14:29 +00:00
.ifndef CONFIG_SCRTCH_ORDER
2008-10-06 05:21:05 +00:00
jsr SCRTCH
2008-10-07 05:52:42 +00:00
.endif
2008-10-11 09:56:31 +00:00
.ifdef CONFIG_CBM_ALL
2008-10-07 04:44:27 +00:00
jmp RESTART
2008-10-06 11:21:24 +00:00
.else
2008-10-06 05:21:05 +00:00
lda #<STROUT
ldy #>STROUT
sta GOWARM+1
sty GOWARM+2
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SCRTCH_ORDER
2008-10-06 05:21:05 +00:00
jsr SCRTCH
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
lda #<RESTART
ldy #>RESTART
2008-10-11 09:24:32 +00:00
sta Z00+1
sty Z00+2
jmp (Z00+1)
2008-10-06 11:21:24 +00:00
.endif
2008-10-11 06:23:53 +00:00
.ifndef CBM_APPLE
2008-10-06 05:21:05 +00:00
QT_WANT:
.byte "WANT SIN-COS-TAN-ATN"
.byte $00
2008-10-11 07:15:19 +00:00
.endif
2008-10-06 05:21:05 +00:00
QT_WRITTEN_BY:
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-11 07:15:19 +00:00
.ifdef APPLE
; set the MSB of every byte of a string
.macro asc80 str
.repeat .strlen(str),I
.byte .strat(str,I)+$80
.endrep
.endmacro
asc80 "COPYRIGHT 1977 BY MICROSOFT CO"
.byte $0D,$00
.else
2008-10-06 05:21:05 +00:00
.byte $0D,$0A,$0C
2008-10-11 10:14:29 +00:00
.ifdef CONFIG_SMALL
2008-10-06 05:21:05 +00:00
.byte "WRITTEN BY RICHARD W. WEILAND."
2008-10-07 05:52:42 +00:00
.else
2008-10-06 05:21:05 +00:00
.byte "WRITTEN BY WEILAND & GATES"
2008-10-07 05:52:42 +00:00
.endif
2008-10-06 05:21:05 +00:00
.byte $0D,$0A,$00
2008-10-11 06:23:53 +00:00
.endif
2008-10-06 05:21:05 +00:00
QT_MEMORY_SIZE:
.byte "MEMORY SIZE"
.byte $00
QT_TERMINAL_WIDTH:
.byte "TERMINAL WIDTH"
.byte $00
2008-10-07 04:44:27 +00:00
.endif
2008-10-06 05:21:05 +00:00
QT_BYTES_FREE:
.byte " BYTES FREE"
2008-10-11 06:23:53 +00:00
.ifndef CBM_APPLE
2008-10-06 05:21:05 +00:00
.byte $0D,$0A,$0D,$0A
2008-10-07 04:44:27 +00:00
.endif
2008-10-08 05:07:59 +00:00
.ifdef CBM2_KBD
2008-10-07 09:18:22 +00:00
.byte $0D,$00
.endif
2008-10-11 06:23:53 +00:00
.ifdef APPLE
.byte $00
.endif
2008-10-07 09:18:22 +00:00
QT_BASIC:
2008-10-11 06:23:53 +00:00
.ifdef OSI
2008-10-07 10:36:34 +00:00
.byte "OSI 6502 BASIC VERSION 1.0 REV 3.2"
2008-10-07 04:44:27 +00:00
.endif
.ifdef KIM
2008-10-06 05:21:05 +00:00
.byte "MOS TECH 6502 BASIC V1.1"
2008-10-07 04:44:27 +00:00
.endif
2008-10-07 09:18:22 +00:00
.ifdef CBM1
2008-10-07 04:44:27 +00:00
.byte $13
.byte "*** COMMODORE BASIC ***"
.byte $11,$11,$11,$00
2008-10-07 09:18:22 +00:00
.endif
2008-10-11 06:23:53 +00:00
.ifdef CBM2
2008-10-07 09:18:22 +00:00
.byte "### COMMODORE BASIC ###"
.byte $0D,$0D,$00
.endif
2008-10-11 06:23:53 +00:00
.ifdef APPLE
.byte $0A,$0D,$0A
.byte "APPLE BASIC V1.1"
.endif
2008-10-11 09:56:31 +00:00
.ifndef CONFIG_CBM_ALL
2008-10-06 05:21:05 +00:00
.byte $0D,$0A
.byte "COPYRIGHT 1977 BY MICROSOFT CO."
.byte $0D,$0A,$00
2008-10-07 04:44:27 +00:00
.endif
2008-10-08 07:04:03 +00:00
.endif /* KBD */
2008-10-06 11:21:24 +00:00
.ifdef OSI
2008-10-06 05:21:05 +00:00
.byte $00,$00
LBEE4:
lda LBF05
lsr a
bcc LBEE4
lda $FB03
sta $FB07
and #$7F
rts
pha
LBEF4:
lda $FB05
bpl LBEF4
pla
sta $FB04
rts
lda $FB06
lda #$FF
.byte $8D
.byte $05
LBF05:
.byte $FB
rts
LBF07:
lda $FC00
lsr a
bcc LBF07
lda $FC01
beq LBF07
and #$7F
rts
pha
LBF16:
lda $FC00
lsr a
lsr a
bcc LBF16
pla
sta $FC01
rts
lda #$03
sta $FC00
lda #$B1
sta $FC00
rts
sta $0202
pha
txa
pha
tya
pha
lda $0202
beq LBF6D
ldy $0206
beq LBF47
LBF3F:
ldx #$40
LBF41:
dex
bne LBF41
dey
bne LBF3F
LBF47:
cmp #$0A
beq LBF76
cmp #$0D
bne LBF55
jsr LBFD5
jmp LBF6D
LBF55:
sta $0201
jsr LBFC2
inc $0200
lda $FFE1
clc
adc $FFE0
cmp $0200
bmi LBF73
LBF6A:
jsr LBFDE
LBF6D:
pla
tay
pla
tax
pla
rts
LBF73:
jsr LBFD8
LBF76:
jsr LBFC2
lda $FFE0
and #$E0
sta $0202
ldx #$07
LBF83:
lda LBFF3,x
sta L0207,x
dex
bpl LBF83
ldx LBFFB,y
lda #$20
ldy $FFE1
cpy #$20
bmi LBF99
asl a
LBF99:
sta $0208
ldy #$00
LBF9E:
jsr L0207
bne LBF9E
inc $0209
inc $020C
cpx $0209
bne LBF9E
LBFAE:
jsr L0207
cpy $0202
bne LBFAE
lda #$20
LBFB8:
jsr L020A
dec $0208
bne LBFB8
beq LBF6A
LBFC2:
ldx $0200
lda $0201
LBFC8:
ldy $FFE2
bne LBFD1
sta $D300,x
rts
LBFD1:
sta $D700,x
rts
LBFD5:
jsr LBFC2
LBFD8:
lda $FFE0
sta $0200
LBFDE:
ldx $0200
lda $D300,x
ldy $FFE2
beq LBFEC
lda $D700,x
LBFEC:
sta $0201
lda #$5F
bne LBFC8
LBFF3:
lda $D000,y
sta $D000,y
iny
rts
LBFFB:
.byte $D3
.byte $D7
brk
brk
brk
2008-10-11 10:14:29 +00:00
.endif /* CONFIG_SMALL */
2008-10-06 11:21:24 +00:00
.ifdef KIM
2008-10-06 05:21:05 +00:00
RAMSTART2:
.byte $08,$29,$25,$20,$60,$2A,$E5,$E4
.byte $20,$66,$24,$65,$AC,$04,$A4
2008-10-06 11:21:24 +00:00
.endif /* KIM */
2008-10-09 10:37:43 +00:00
.ifdef CONFIG_CBM1_PATCHES
2008-10-07 04:44:27 +00:00
PATCH1:
clc
jmp CONTROL_C_TYPED
PATCH2:
bit $B4
bpl LE1AA
cmp #$54
bne LE1AA
jmp LCE3B
LE1AA:
rts
PATCH3:
bit $B4
bmi LE1B2
jmp LCE90
LE1B2:
cmp #$54
beq LE1B9
jmp LCE82
LE1B9:
jmp LCE69
PATCH4:
sta CHARAC
inx
jmp LE1D9
PATCH5:
bpl LE1C9
lda $8E
ldy $8F
rts
LE1C9:
ldy #$FF
rts
PATCH6:
bne LE1D8
LE1CE:
inc $05
bne LE1D8
lda $E2
sta $05
bne LE1CE
LE1D8:
rts
LE1D9:
stx $C9
pla
pla
tya
jmp L2B1C
2008-10-08 07:04:03 +00:00
.endif
.ifdef KBD
stx SHIFTSIGNEXT
stx $0800
inx
stx Z17
stx Z18
stx TXTTAB
lda #$08
sta TXTTAB+1
jsr SCRTCH
sta STACK+255
jsr LDE42
.byte $1B,$06,$01,$0C
.byte "INTELLIVISION BASIC"
.byte $0D,$0A,$0A
.byte "Copyright Microsoft, Mattel 1980"
.byte $0D,$0A,$00
sta $0435
sta $8F
ldy #$0F
lda #$FF
sta ($04),y
jsr LDE8C
.byte $0C
jmp RESTART
2008-10-08 11:42:15 +00:00
OUTQUESSP:
2008-10-08 07:04:03 +00:00
jsr OUTQUES
jmp OUTSP
LFDDA:
ldy #$FF
LFDDC:
iny
LFDDD:
jsr LF43B
cmp #$03
beq LFDF7
cmp #$20
bcs LFDEC
sbc #$09
bne LFDDD
LFDEC:
sta Z00,y
tax
bne LFDDC
jsr LE882
ldy #$06
LFDF7:
tax
clc
rts
LFDFA:
bit $8F
bmi LFE01
jsr LDE48
LFE01:
bit $8F
bvc LFE10
jmp LDE53
LFE08:
jsr LFDFA
LFE0B:
jsr LDE24
bne LFE08
LFE10:
rts
VSAV:
jsr GARBAG
lda FRETOP
sta $00
lda FRETOP+1
.byte $85
LFE1B:
ora ($A5,x)
.byte $2F
sta $02
lda STREND+1
sta $03
ldy #$00
LFE26:
lda ($00),y
sta ($02),y
inc $02
bne LFE30
inc $03
LFE30:
inc $00
bne LFE26
inc $01
bit $01
bvc LFE26
ldx VARTAB
ldy VARTAB+1
lda #$01
bne LFE50
PSAV:
lda VARTAB
sta $02
lda VARTAB+1
sta $03
ldx #$01
ldy #$08
lda #$02
LFE50:
sta $0513
stx $0503
stx $00
sty $0504
sty $01
ldy #$0D
lda #$00
LFE61:
sta $0504,y
dey
bne LFE61
sty $0500
lda #$40
sta $0505
lda $02
sec
sbc $00
sta $00
lda $03
sbc $01
sta $01
lsr a
lsr a
lsr a
sta $03
jsr LE870
sta $02
jsr CHRGOT
beq LFEA6
cmp #$2C
beq L40FA
jmp SYNERR
L40FA:
jsr CHRGET
jsr LE870
sec
sbc $02
cmp $03
bpl LFEBF
lda #$27
sta JMPADRS
jmp LFFBD
LFEA6:
lda $02
clc
adc $03
jsr LE874
pha
jsr LFE0B
jsr L6874
.byte $72
adc $00,x
pla
tax
lda #$00
jsr LINPRT
LFEBF:
ldx #$07
LBF83:
dex
lda VARTAB,x
sec
sbc TXTTAB,x
sta $051B,x
lda VARTAB+1,x
sbc TXTTAB+1,x
sta $051C,x
dex
bpl LBF83
txa
sbc FRETOP
sta $0521
lda #$3F
sbc FRETOP+1
sta $0522
lda FRETOP
sta $0523
lda FRETOP+1
sta $0524
ldx $02
jsr LFFDD
jsr LFFD1
lda $01
ldx #$05
LFEF7:
stx $0511
ldy #$E4
sec
sbc #$08
sta $01
bpl LFF15
adc #$08
asl $00
rol a
asl $00
rol a
asl $00
rol a
adc #$01
sta $0505
ldy #$00
LFF15:
sty $0512
jsr LE4C0
ldx #$00
lda $01
bpl LFEF7
LFF21:
rts
VLOD:
jsr LFFD1
stx JMPADRS
lda VARTAB
ldy VARTAB+1
ldx #$01
jsr LFF64
ldx #$00
ldy #$02
LFF34:
jsr LE39A
iny
iny
inx
inx
cpx #$05
bmi LFF34
lda STREND
sta LOWTR
lda STREND+1
sta LOWTR+1
lda FRETOP
sta HIGHTR
lda FRETOP+1
sta HIGHTR+1
lda #$FF
sta HIGHDS
lda #$3F
sta HIGHDS+1
lda $0523
sta FRETOP
lda $0524
sta FRETOP+1
jmp BLTU2
LFF64:
sta $9A
sty $9B
stx $00
jsr LE870
jsr LFFDD
lda JMPADRS
beq LFF7F
lda #$01
sta $9A
lda #$08
sta $9B
jsr STXTPT
LFF7F:
lda $9A
sta $0503
lda $9B
sta $0504
lda #$ED
sta $0512
lda #$05
sta $01
LFF92:
ldx $0512
beq LFF21
ldy #$04
jsr LE4C4
lda $01
cmp $0511
bne LFFB2
lda #$00
sta $01
lda $00
cmp $0513
beq LFF92
lda #$18
bne LFFB8
LFFB2:
lda #$27
bne LFFB8
LFFB6:
lda #$3C
LFFB8:
sta JMPADRS
jsr CLEARC
LFFBD:
jsr LF422
sta $9A
sty $9B
lda #$00
tay
sta ($9A),y
iny
sta ($9A),y
ldx JMPADRS
jmp ERROR
LFFD1:
ldx #$00
LFFD3:
lda #$02
.byte $2C
LFFD6:
lda #$03
jsr LDE8C
asl FACSIGN
LFFDD:
jsr CHRGOT
beq LFFE5
jmp SYNERR
LFFE5:
lda #$0D
ldy #$00
jsr LDE8C
.byte $06
LFFED:
lda $034C
bmi LFFED
ldy #$01
lda ($04),y
bne LFFB6
rts
.byte $FF
.addr LC000
.addr LC000
.addr LC009
2008-10-11 06:23:53 +00:00
.endif
.ifdef APPLE
2008-10-11 09:24:32 +00:00
.byte 0,0,0
2008-10-11 06:23:53 +00:00
L2900:
jsr LFD6A
stx $33
ldx #$00
L2907:
lda $0200,x
and #$7F
cmp #$0D
bne L2912
lda #$00
L2912:
sta $0200,x
inx
bne L2907
ldx $33
rts
2008-10-11 07:15:19 +00:00
PLT:
2008-10-11 09:24:32 +00:00
jmp L29F0
2008-10-11 06:23:53 +00:00
L291E:
cmp #$47
bne L2925
jmp L29E0
L2925:
cmp #$43
bne L292B
beq L2988
L292B:
cmp #$50
beq L2930
inx
L2930:
stx $33
2008-10-11 09:24:32 +00:00
L2932:
jsr FRMEVL
jsr ROUND_FAC
jsr AYINT
lda FAC+4
2008-10-11 06:23:53 +00:00
ldx $33
sta $0300,x
dec $33
bmi L294Dx
2008-10-11 09:24:32 +00:00
lda #$2C
jsr SYNCHR
bpl L2932
2008-10-11 06:23:53 +00:00
L294Dx:
tay
pla
cmp #$43
bne L2957
tya
jmp LF864
L2957:
cmp #$50
bne L2962
tya
ldy $0301
jmp LF800
L2962:
pha
lda $0301
sta $2C
sta $2D
pla
cmp #$48
bne L2978
lda $0300
ldy $0302
jmp LF819
L2978:
cmp #$56
beq L297F
2008-10-11 07:15:19 +00:00
jmp SYNERR
2008-10-11 06:23:53 +00:00
L297F:
ldy $0300
lda $0302
jmp LF828
L2988:
dex
beq L2930
2008-10-11 07:15:19 +00:00
INLINX:
2008-10-11 06:23:53 +00:00
jsr OUTQUES
jsr OUTSP
ldx #$80
2008-10-11 09:24:32 +00:00
jmp INLIN1
2008-10-11 09:35:34 +00:00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
2008-10-11 09:24:32 +00:00
L29D0:
2008-10-11 06:23:53 +00:00
jsr L29DA
2008-10-11 09:24:32 +00:00
lda FAC+3
sta FAC+5
jmp (FAC+4)
2008-10-11 06:23:53 +00:00
L29DA:
2008-10-11 09:24:32 +00:00
jmp (GOSTROUT)
2008-10-11 06:23:53 +00:00
brk
brk
brk
L29E0:
pla
jmp LFB40
2008-10-11 09:35:34 +00:00
.byte 0,0,0,0,0,0,0,0,0,0,0,0
2008-10-11 09:24:32 +00:00
L29F0:
pha ; 29F0 48 H
ldx #$01 ; 29F1 A2 01 ..
inc $B9 ; 29F3 E6 B9 ..
bne L29F9 ; 29F5 D0 02 ..
inc $BA ; 29F7 E6 BA ..
L29F9:
jmp L291E ; 29F9 4C 1E 29 L.)
2008-10-11 09:35:34 +00:00
.byte $00,$00,$00,$00,$41,$53,$21,$D2
.byte $02,$FA,$00
lda $12
beq L2A0E
jmp (L0008)
2008-10-11 09:24:32 +00:00
L2A0E:
jsr LF689
.byte $15,$BC,$08,$10,$52,$45,$75,$10
.byte $CD,$00,$55,$15,$9E,$08,$10,$4C
.byte $45,$75,$10,$D4,$00,$55,$15,$0E
.byte $08,$10,$89,$10,$75,$15,$1C,$08
.byte $10,$1F,$10,$75,$00
jmp (L0008)
; ----------------------------------------------------------------------------
.byte 0,0,0,0,0,0
2008-10-07 04:44:27 +00:00
.endif