Brain-Board-II/Source and Serial Driver/a2a1emulv5_1/a1basic-universal.asm
2023-02-08 17:47:18 -05:00

2250 lines
45 KiB
NASM
Executable File

PROCESSOR 6502
LIST ON
;
;------------------------------------------------------------------------
; Apple 1 Basic by Steve Wozniak
;
; This source was derived from BASIC disassembly done by Eric Smith.
; This derivation is reproduced and distributed with permission of
; Eric Smith
;
; Eric Smith's disassembly can be found at
; http://www.brouhaha.com/~eric/retrocomputing/apple/apple1/basic/
;
; Do not reproduce or distribute without permission
;
; copyright 2010, Mike Willegal
; copyright 2003, Eric Smith
;
;------------------------------------------------------------------------
; Disassembly of Apple 1 BASIC
; 17-Sep-2003
; Apple 1 BASIC was written by Steve Wozniak
; This disassembly is copyright 2003 Eric Smith <eric@brouhaha.com>
; http://www.brouhaha.com/~eric/retrocomputing/apple/apple1/basic/
;------------------------------------------------------------------------
;------------------------------------------------------------------------
; build with 6502 assembler called DASM using the following command line
;
; Huston's version of Basic (may be latest version available)
; http://www.apple1notes.com/Home/Programs.html
;./dasm a1basic.asm -DHUSTNBASIC=0 -oa1hbas.o -la1hbas.lst
;
; Sander's version of Basic (same as Eric Smith's original disassembly)
; http://www.apple1notes.com/Home/Programs.html
;./dasm a1basic.asm -DSNDERBASIC=0 -oa1sbas.o -la1sbas.lst
;
; Vince Briel's version of Basic
; (can't find the link right now)
;./dasm a1basic.asm -DBRIELBASIC=0 -oa1bbas.o -la1bbas.lst
;
; Pagetable version of Basic (only PIA address different from Briel's version)
; http://www.pagetable.com/?p=32
;./dasm a1basic.asm -DPAGETBASIC=0 -oa1pbas.o -la1pbas.lst
;
;------------------------------------------------------------------------
;-------------------------------------------------------------------------
; Defines - this code can be built one of four ways
; 1. clone/real Apple 1 HW
; 2. runs in ram of real or virtual Apple 2
; 3. runs in virtual apple 2 as ROM
; 4. runs in plug in board of real Apple 2
;
; select one of these three options
;-------------------------------------------------------------------------
;BLD4APPLE1 EQU 0 ;ACTUAL APPLE 1 or CLONE
;BLD4RAM EQU 0 ;RAM of virtual or real A2
;BLD4EMULROM EQU 0 ;ROM of virtual A2
;BLD4ROMBD EQU 0 ;ROM board in Real A2
;------------------------------------------------------------------------
; BASIC source taken from http://www.brouhaha.com
; IFCONST added to allow building Apple 1 basic version found
; on Vince Briels site
;------------------------------------------------------------------------
; up to four versions of Apple 1 Basic Known
; use defines to control which one we build
;SNDERBASIC EQU 0 ;from Wendell Sander's site (DEFAULT)
;SMITHBASIC EQU 0 ;original source from brouhaha.com
;BRIELBASIC EQU 0 ;version used in Replica 1
;HUSTNBASIC EQU 0 ;huston version from Wendell's site
;------------------------------------------------------------------------
; Disassembly of Apple 1 BASIC
; 17-Sep-2003
; Apple 1 BASIC was written by Steve Wozniak
; This disassembly is copyright 2003 Eric Smith <eric@brouhaha.com>
; http://www.brouhaha.com/~eric/retrocomputing/apple/apple1/basic/
;------------------------------------------------------------------------
LOCZERO EQU $00
Z1d EQU $1d
ch EQU $24
cv EQU $25
zp48 EQU $48
zp49 EQU $49
lomem EQU $4a
zp4b EQU $4b
himem EQU $4c
zp4d EQU $4d
rnd EQU $4e
noun_stk_l EQU $50
syn_stk_h EQU $58
zp60 EQU $60
noun_stk_h_str EQU $78
syn_stk_l EQU $80
zp85 EQU $85
noun_stk_h_int EQU $a0
txtndxstk EQU $a8
text_index EQU $c8
leadbl EQU $c9
pp EQU $ca
zpcb EQU $cb
pv EQU $cc
acc EQU $ce
zpcf EQU $cf
srch EQU $d0
tokndxstk EQU $d1
srch2 EQU $d2
if_flag EQU $d4
cr_flag EQU $d5
current_verb EQU $d6
precedence EQU $d7
x_save EQU $d8
run_flag EQU $d9
aux EQU $da
pline EQU $dc
pverb EQU $e0
p1 EQU $e2
p2 EQU $e4
p3 EQU $e6
token_index EQU $f1
pcon EQU $f2
auto_inc EQU $f4
auto_ln EQU $f6
auto_flag EQU $f8
char EQU $f9
leadzr EQU $fa
for_nest_count EQU $fb
gosub_nest_count EQU $fc
synstkdx EQU $fd
synpag EQU $fe
gstk_pverbl EQU $0100
gstk_pverbh EQU $0108
gstk_plinel EQU $0110
gstk_plineh EQU $0118
fstk_varl EQU $0120
fstk_varh EQU $0128
fstk_stepl EQU $0130
fstk_steph EQU $0138
fstk_plinel EQU $0140
fstk_plineh EQU $0148
fstk_pverbl EQU $0150
fstk_pverbh EQU $0158
fstk_tol EQU $0160
fstk_toh EQU $0168
buffer EQU $0200
IFCONST BLD4APPLE1
IFCONST SMITHBASIC
DSP EQU $D0F2 ;DISPLAY port in PIA
KBDCR EQU $D0F1 ;Keyboard control port
KBD EQU $D0F0 ;KEYBOARD data port
ENDIF
IFCONST BRIELBASIC
DSP EQU $D012 ;DISPLAY port in PIA
KBDCR EQU $D011 ;Keyboard control port (WS BASIC)
KBD EQU $D010 ;KEYBOARD data port
ENDIF
IFCONST SNDERBASIC
DSP EQU $D0F2 ;DISPLAY port in PIA
KBDCR EQU $D011 ;Keyboard control port (WS BASIC)
KBD EQU $D010 ;KEYBOARD data port
ENDIF
IFCONST HUSTNBASIC
DSP EQU $D0F2 ;DISPLAY port in PIA
KBDCR EQU $D011 ;Keyboard control port (WS BASIC)
KBD EQU $D010 ;KEYBOARD data port
ENDIF
ENDIF
IFCONST BLD4RAM
ORG $7000
ELSE
ORG $E000
ENDIF
Pe000: JMP cold
rdkey:
IFCONST BLD4APPLE1
LDA KBDCR ;Wait for key press
BPL rdkey ;No key yet!
LDA KBD ;Clear strobe
ELSE
JSR A2GETCHAR
NOP
NOP
NOP
NOP
NOP
ENDIF
RTS
Se00c: TXA
AND #$20 ; 32
BEQ Le034
Se011: LDA #$a0 ; 160
STA p2
JMP cout
Se018: LDA #$20 ; 32
Se01a: CMP ch
BCS nextbyte
LDA #$8d ; 141 .
LDY #$07 ; 7 .
Le022: JSR cout
LDA #$a0 ; 160
DEY
BNE Le022
nextbyte: LDY #$00 ; 0 .
LDA (p1),Y
INC p1
BNE Le034
INC p1+1
Le034: RTS
list_comman: JSR get16bit
JSR find_line2
Le03b: LDA p1
CMP p3
LDA p1+1
SBC p3+1
BCS Le034
JSR list_line
JMP Le03b
list_all: LDA pp
STA p1
LDA pp+1
STA p1+1
LDA himem
STA p3
LDA himem+1
STA p3+1
BNE Le03b
list_cmd: JSR get16bit
JSR find_line
LDA p2
STA p1
LDA p2+1
STA p1+1
BCS Le034
list_line: STX x_save
LDA #$a0 ; 160
STA leadzr
JSR nextbyte
TYA
list_int: STA p2
JSR nextbyte
TAX
JSR nextbyte
JSR prdec
Le083: JSR Se018
STY leadzr
TAX
BPL list_token
ASL
BPL list_int
LDA p2
BNE Le095
JSR Se011
Le095: TXA
Le096: JSR cout
Le099: LDA #$25 ; 37 %
JSR Se01a
TAX
BMI Le096
STA p2
list_token: CMP #$01 ; 1 .
BNE Le0ac
LDX x_save
JMP crout
Le0ac: PHA
STY acc
LDX #[syntabl2>>8] ; $ED, when from ROM, $AD from RAM
STX acc+1
CMP #$51 ; 81 Q
BCC Le0bb
DEC acc+1
SBC #$50 ; 80 P
Le0bb: PHA
LDA (acc),Y
Le0be: TAX
DEY
LDA (acc),Y
BPL Le0be
CPX #$c0 ; 192 @
BCS Le0cc
CPX #$00 ; 0 .
BMI Le0be
Le0cc: TAX
PLA
SBC #$01 ; 1 .
BNE Le0bb
BIT p2
BMI Le0d9
JSR Seff8
Le0d9: LDA (acc),Y
BPL Le0ed
TAX
AND #$3f ; 63 ?
STA p2
CLC
ADC #$a0 ; 160
JSR cout
DEY
CPX #$c0 ; 192 @
BCC Le0d9
Le0ed: JSR Se00c
PLA
CMP #$5d ; 93 ]
BEQ Le099
CMP #$28 ; 40 (
BNE Le083
BEQ Le099
paren_substr: JSR Se118
STA noun_stk_l,X
CMP noun_stk_h_str,X
Le102: BCC Le115
string_err: LDY #$2b ; 43 +
go_errmess_1: JMP print_err_msg
comma_substr: JSR getbyte
CMP noun_stk_l,X
BCC string_err
JSR Sefe4
STA noun_stk_h_str,X
Le115: JMP left_paren
Se118: JSR getbyte
BEQ string_err
SEC
SBC #$01 ; 1 .
RTS
str_arr_dest: JSR Se118
STA noun_stk_l,X
CLC
SBC noun_stk_h_str,X
JMP Le102
Le12c: LDY #$14 ; 20 .
BNE go_errmess_1
dim_str: JSR Se118
INX
Le134: LDA noun_stk_l,X
STA aux
ADC acc
PHA
TAY
LDA noun_stk_h_str,X
STA aux+1
ADC acc+1
PHA
CPY pp
SBC pp+1
BCS Le12c
LDA aux
ADC #$fe ; 254 ~
STA aux
LDA #$ff ; 255 .
TAY
ADC aux+1
STA aux+1
Le156: INY
LDA (aux),Y
CMP pv,Y
BNE Le16d
TYA
BEQ Le156
Le161: PLA
STA (aux),Y
STA pv,Y
DEY
BPL Le161
INX
RTS
NOP ; "j"
Le16d: LDY #$80 ; 128 .
Le16f: BNE go_errmess_1
input_str: LDA #$00 ; 0 .
JSR push_a_noun_stk
LDY #$02 ; 2 .
STY noun_stk_h_str,X
JSR push_a_noun_stk
LDA #$bf ; 191 ?
JSR cout
LDY #$00 ; 0 .
JSR read_line
STY noun_stk_h_str,X
NOP
NOP
NOP
string_lit: LDA noun_stk_l+1,X
STA acc
LDA noun_stk_h_str+1,X
STA acc+1
INX
INX
JSR Se1bc
Le199: LDA rnd,X
CMP syn_stk_h+30,X
BCS Le1b4
INC rnd,X
TAY
LDA (acc),Y
LDY noun_stk_l,X
CPY p2
BCC Le1ae
LDY #$83 ; 131 .
BNE Le16f
Le1ae: STA (aux),Y
INC noun_stk_l,X
BCC Le199
Le1b4: LDY noun_stk_l,X
TXA
STA (aux),Y
INX
INX
RTS
Se1bc: LDA noun_stk_l+1,X
STA aux
SEC
SBC #$02 ; 2 .
STA p2
LDA noun_stk_h_str+1,X
STA aux+1
SBC #$00 ; 0 .
STA p2+1
LDY #$00 ; 0 .
LDA (p2),Y
CLC
SBC aux
STA p2
RTS
string_eq: LDA noun_stk_l+3,X
STA acc
LDA noun_stk_h_str+3,X
STA acc+1
LDA noun_stk_l+1,X
STA aux
LDA noun_stk_h_str+1,X
STA aux+1
INX
INX
INX
LDY #$00 ; 0 .
STY noun_stk_h_str,X
STY noun_stk_h_int,X
INY
STY noun_stk_l,X
Le1f3: LDA himem+1,X
CMP syn_stk_h+29,X
PHP
PHA
LDA rnd+1,X
CMP syn_stk_h+31,X
BCC Le206
PLA
PLP
BCS Le205
Le203: LSR noun_stk_l,X
Le205: RTS
Le206: TAY
LDA (acc),Y
STA p2
PLA
TAY
PLP
BCS Le203
LDA (aux),Y
CMP p2
BNE Le203
INC rnd+1,X
INC himem+1,X
BCS Le1f3
string_neq: JSR string_eq
JMP not_op
mult_op: JSR Se254
Le225: ASL acc
ROL acc+1
BCC Le238
CLC
LDA p3
ADC aux
STA p3
LDA p3+1
ADC aux+1
STA p3+1
Le238: DEY
BEQ Le244
ASL p3
ROL p3+1
BPL Le225
JMP Le77e
Le244: LDA p3
JSR push_ya_noun_stk
LDA p3+1
STA noun_stk_h_int,X
ASL p2+1
BCC Le279
JMP negate
Se254: LDA #$55 ; 85 U
STA p2+1
JSR Se25b
Se25b: LDA acc
STA aux
LDA acc+1
STA aux+1
JSR get16bit
STY p3
STY p3+1
LDA acc+1
BPL Le277
DEX
ASL p2+1
JSR negate
JSR get16bit
Le277: LDY #$10 ; 16 .
Le279: RTS
mod_op: JSR See6c
BEQ Le244
DC.B $ff ; "."
Le280: CMP #$84 ; 132 .
BNE Le286
LSR auto_flag
Le286: CMP #$df ; 223 _
BEQ Le29b
CMP #$9b ; 155 .
BEQ Le294
STA buffer,Y
INY
BPL read_line
Le294: LDY #$8b ; 139 .
JSR Se3c4
Se299: LDY #$01 ; 1 .
Le29b: DEY
BMI Le294
read_line: JSR rdkey
NOP
NOP
JSR cout
CMP #$8d ; 141 .
BNE Le280
LDA #$df ; 223 _
STA buffer,Y
RTS
cold: JSR mem_init_4k
warm: JSR crout
Le2b6: LSR run_flag
LDA #$be ; 190 >
JSR cout
LDY #$00 ; 0 .
STY leadzr
BIT auto_flag
BPL Le2d1
LDX auto_ln
LDA auto_ln+1
JSR prdec
LDA #$a0 ; 160
JSR cout
Le2d1: LDX #$ff ; 255 .
TXS
JSR read_line
STY token_index
TXA
STA text_index
LDX #$20 ; 32
JSR Se491
LDA text_index
ADC #$00 ; 0 .
STA pverb
LDA #$00 ; 0 .
TAX
ADC #$02 ; 2 .
STA pverb+1
LDA (pverb,X)
AND #$f0 ; 240 p
CMP #$b0 ; 176 0
BEQ Le2f9
JMP Le883
Le2f9: LDY #$02 ; 2 .
Le2fb: LDA (pverb),Y
STA pv+1,Y
DEY
BNE Le2fb
JSR Se38a
LDA token_index
SBC text_index
CMP #$04 ; 4 .
BEQ Le2b6
STA (pverb),Y
LDA pp
SBC (pverb),Y
STA p2
LDA pp+1
SBC #$00 ; 0 .
STA p2+1
LDA p2
CMP pv
LDA p2+1
SBC pv+1
BCC Le36b
Le326: LDA pp
SBC (pverb),Y
STA p3
LDA pp+1
SBC #$00 ; 0 .
STA p3+1
LDA (pp),Y
STA (p3),Y
INC pp
BNE Le33c
INC pp+1
Le33c: LDA p1
CMP pp
LDA p1+1
SBC pp+1
BCS Le326
Le346: LDA p2,X
STA pp,X
DEX
BPL Le346
LDA (pverb),Y
TAY
Le350: DEY
LDA (pverb),Y
STA (p3),Y
TYA
BNE Le350
BIT auto_flag
BPL Le365
Le35c: LDA auto_ln+1,X
ADC auto_inc+1,X
STA auto_ln+1,X
INX
BEQ Le35c
Le365: BPL Le3e5
BRK
BRK
BRK
BRK ; "..."
Le36b: LDY #$14 ; 20 .
BNE print_err_msg
del_comma: JSR get16bit
LDA p1
STA p3
LDA p1+1
STA p3+1
JSR find_line1
LDA p1
STA p2
LDA p1+1
STA p2+1
BNE Le395
del_cmd: JSR get16bit
Se38a: JSR find_line
LDA p3
STA p1
LDA p3+1
STA p1+1
Le395: LDY #$00 ; 0 .
Le397: LDA pp
CMP p2
LDA pp+1
SBC p2+1
BCS Le3b7
LDA p2
BNE Le3a7
DEC p2+1
Le3a7: DEC p2
LDA p3
BNE Le3af
DEC p3+1
Le3af: DEC p3
LDA (p2),Y
STA (p3),Y
BCC Le397
Le3b7: LDA p3
STA pp
LDA p3+1
STA pp+1
RTS
Le3c0: JSR cout
INY
Se3c4: LDA error_msg_tbl,Y
BMI Le3c0
cout: CMP #$8d ; 141 .
BNE Le3d3
crout: LDA #$00 ; 0 .
STA ch
LDA #$8d ; 141 .
Le3d3: INC ch
Le3d5:
IFCONST BLD4APPLE1
BIT DSP
BMI Le3d5
STA DSP
ELSE
JSR ECHO ; use monitor function to output
nop
nop
nop
nop
nop
ENDIF
RTS
too_long_err: LDY #$06 ; 6
print_err_msg: JSR print_err_msg2
BIT run_flag
Le3e5: BMI Le3ea
JMP Le2b6
Le3ea: JMP Leb9a
Le3ed: ROL
ADC #$a0 ; 160
CMP buffer,X
BNE Le448
LDA (synpag),Y
ASL
BMI Le400
DEY
LDA (synpag),Y
BMI Le428
INY
Le400: STX text_index
TYA
PHA
LDX #$00 ; 0 .
LDA (synpag,X)
TAX
Le409: LSR
EOR #$48 ; 72 H
ORA (synpag),Y
CMP #$c0 ; 192 @
BCC Le413
INX
Le413: INY
BNE Le409
PLA
TAY
TXA
JMP Le4c0
put_token: INC token_index
LDX token_index
BEQ too_long_err
STA buffer,X
Le425: RTS
Le426: LDX text_index
Le428: LDA #$a0 ; 160
Le42a: INX
CMP buffer,X
BCS Le42a
LDA (synpag),Y
AND #$3f ; 63 ?
LSR
BNE Le3ed
LDA buffer,X
BCS Le442
ADC #$3f ; 63 ?
CMP #$1a ; 26 .
BCC Le4b1
Le442: ADC #$4f ; 79 O
CMP #$0a ; 10 .
BCC Le4b1
Le448: LDX synstkdx
Le44a: INY
LDA (synpag),Y
AND #$e0 ; 224 `
CMP #$20 ; 32
BEQ Le4cd
LDA txtndxstk,X
STA text_index
LDA tokndxstk,X
STA token_index
Le45b: DEY
LDA (synpag),Y
ASL
BPL Le45b
DEY
BCS Le49c
ASL
BMI Le49c
LDY syn_stk_h,X
STY synpag+1
LDY syn_stk_l,X
INX
BPL Le44a
Le470: BEQ Le425
CMP #$7e ; 126 ~
BCS Le498
DEX
BPL Le47d
LDY #$06 ; 6 .
BPL go_errmess_2
Le47d: STY syn_stk_l,X
LDY synpag+1
STY syn_stk_h,X
LDY text_index
STY txtndxstk,X
LDY token_index
STY tokndxstk,X
AND #$1f ; 31 .
TAY
LDA syntabl_index,Y
Se491: ASL
TAY
; when running from a000, shifts to AC or AD
; when running from e000 shifts to EC or ED
LDA #[syntabl_index>>9]
ROL
STA synpag+1
Le498: BNE Le49b
INY
Le49b: INY
Le49c: STX synstkdx
LDA (synpag),Y
BMI Le426
BNE Le4a9
LDY #$0e ; 14 .
go_errmess_2: JMP print_err_msg
Le4a9: CMP #$03 ; 3 .
BCS Le470
LSR
LDX text_index
INX
Le4b1: LDA buffer,X
BCC Le4ba
CMP #$a2 ; 162 "
BEQ Le4c4
Le4ba: CMP #$df ; 223 _
BEQ Le4c4
STX text_index
Le4c0: JSR put_token
INY
Le4c4: DEY
LDX synstkdx
Le4c7: LDA (synpag),Y
DEY
ASL
BPL Le49c
Le4cd: LDY syn_stk_h,X
STY synpag+1
LDY syn_stk_l,X
INX
LDA (synpag),Y
AND #$9f ; 159 .
BNE Le4c7
STA pcon
STA pcon+1
TYA
PHA
STX synstkdx
LDY srch,X
STY leadbl
CLC
Le4e7: LDA #$0a ; 10 .
STA char
LDX #$00 ; 0 .
INY
LDA buffer,Y
AND #$0f ; 15 .
Le4f3: ADC pcon
PHA
TXA
ADC pcon+1
BMI Le517
TAX
PLA
DEC char
BNE Le4f3
STA pcon
STX pcon+1
CPY token_index
BNE Le4e7
LDY leadbl
INY
STY token_index
JSR put_token
PLA
TAY
LDA pcon+1
BCS Le4c0
Le517: LDY #$00 ; 0 .
BPL go_errmess_2
prdec: STA pcon+1
STX pcon
LDX #$04 ; 4 .
STX leadbl
Le523: LDA #$b0 ; 176 0
STA char
Le527: LDA pcon
CMP dectabl,X
LDA pcon+1
SBC dectabh,X
BCC Le540
STA pcon+1
LDA pcon
SBC dectabl,X
STA pcon
INC char
BNE Le527
Le540: LDA char
INX
DEX
BEQ Le554
CMP #$b0 ; 176 0
BEQ Le54c
STA leadbl
Le54c: BIT leadbl
BMI Le554
LDA leadzr
BEQ Le55f
Le554: JSR cout
BIT auto_flag
BPL Le55f
STA buffer,Y
INY
Le55f: DEX
BPL Le523
RTS
dectabl: DC.B $01,$0a,$64,$e8,$10 ; "..dh."
dectabh: DC.B $00,$00,$00,$03,$27 ; "....'"
find_line: LDA pp
STA p3
LDA pp+1
STA p3+1
find_line1: INX
find_line2: LDA p3+1
STA p2+1
LDA p3
STA p2
CMP himem
LDA p2+1
SBC himem+1
BCS Le5ac
LDY #$01 ; 1 .
LDA (p2),Y
SBC acc
INY
LDA (p2),Y
SBC acc+1
BCS Le5ac
LDY #$00 ; 0 .
LDA p3
ADC (p2),Y
STA p3
BCC Le5a0
INC p3+1
CLC
Le5a0: INY
LDA acc
SBC (p2),Y
INY
LDA acc+1
SBC (p2),Y
BCS find_line2
Le5ac: RTS
new_cmd: LSR auto_flag
LDA himem
STA pp
LDA himem+1
STA pp+1
clr: LDA lomem
STA pv
LDA lomem+1
STA pv+1
LDA #$00 ; 0 .
STA for_nest_count
STA gosub_nest_count
STA synpag
LDA #$00 ; 0 .
STA Z1d
RTS
Le5cc: LDA srch
ADC #$05 ; 5 .
STA srch2
LDA tokndxstk
ADC #$00 ; 0 .
STA srch2+1
LDA srch2
CMP pp
LDA srch2+1
SBC pp+1
BCC Le5e5
JMP Le36b
Le5e5: LDA acc
STA (srch),Y
LDA acc+1
INY
STA (srch),Y
LDA srch2
INY
STA (srch),Y
LDA srch2+1
INY
STA (srch),Y
LDA #$00 ; 0 .
INY
STA (srch),Y
INY
STA (srch),Y
LDA srch2
STA pv
LDA srch2+1
STA pv+1
LDA srch
BCC Le64f
execute_var: STA acc
STY acc+1
JSR get_next_prog_byte
BMI Le623
CMP #$40 ; 64 @
BEQ Le623
JMP Le628
DC.B $06,$c9,$49,$d0,$07,$a9,$49 ; ".IIP.)I"
Le623: STA acc+1
JSR get_next_prog_byte
Le628: LDA lomem+1
STA tokndxstk
LDA lomem
Le62e: STA srch
CMP pv
LDA tokndxstk
SBC pv+1
BCS Le5cc
LDA (srch),Y
INY
CMP acc
BNE Le645
LDA (srch),Y
CMP acc+1
BEQ Le653
Le645: INY
LDA (srch),Y
PHA
INY
LDA (srch),Y
STA tokndxstk
PLA
Le64f: LDY #$00 ; 0 .
BEQ Le62e
Le653: LDA srch
ADC #$03 ; 3 .
JSR push_a_noun_stk
LDA tokndxstk
ADC #$00 ; 0 .
STA noun_stk_h_str,X
LDA acc+1
CMP #$40 ; 64 @
BNE fetch_prog_byte
DEY
TYA
JSR push_a_noun_stk
DEY
STY noun_stk_h_str,X
LDY #$03 ; 3 .
Le670: INC noun_stk_h_str,X
INY
LDA (srch),Y
BMI Le670
BPL fetch_prog_byte
execute_stmt: LDA #$00 ; 0 .
STA if_flag
STA cr_flag
LDX #$20 ; 32
push_old_verb: PHA
fetch_prog_byte: LDY #$00 ; 0 .
LDA (pverb),Y
Le686: BPL execute_token
ASL
BMI execute_var
JSR get_next_prog_byte
JSR push_ya_noun_stk
JSR get_next_prog_byte
STA noun_stk_h_int,X
Le696: BIT if_flag
BPL Le69b
DEX
Le69b: JSR get_next_prog_byte
BCS Le686
execute_token: CMP #$28 ; 40 (
BNE execute_verb
LDA pverb
JSR push_a_noun_stk
LDA pverb+1
STA noun_stk_h_str,X
BIT if_flag
BMI Le6bc
LDA #$01 ; 1 .
JSR push_a_noun_stk
LDA #$00 ; 0 .
STA noun_stk_h_str,X
Le6ba: INC noun_stk_h_str,X
Le6bc: JSR get_next_prog_byte
BMI Le6ba
BCS Le696
execute_verb: BIT if_flag
BPL Le6cd
CMP #$04 ; 4 .
BCS Le69b
LSR if_flag
Le6cd: TAY
STA current_verb
LDA verb_prec_tbl,Y
AND #$55 ; 85 U
ASL
STA precedence
Le6d8: PLA
TAY
LDA verb_prec_tbl,Y
AND #$aa ; 170 *
CMP precedence
BCS do_verb
TYA
PHA
JSR get_next_prog_byte
LDA current_verb
BCC push_old_verb
do_verb: LDA verb_adr_l,Y
STA acc
LDA verb_adr_h,Y
STA acc+1
JSR Se6fc
JMP Le6d8
Se6fc: JMP (acc)
get_next_prog_byte: INC pverb
BNE Le705
INC pverb+1
Le705: LDA (pverb),Y
RTS
push_ya_noun_stk: STY syn_stk_h+31,X
push_a_noun_stk: DEX
BMI Le710
STA noun_stk_l,X
RTS
Le710: LDY #$66 ; 102 f
go_errmess_3: JMP print_err_msg
get16bit: LDY #$00 ; 0 .
LDA noun_stk_l,X
STA acc
LDA noun_stk_h_int,X
STA acc+1
LDA noun_stk_h_str,X
BEQ Le731
STA acc+1
LDA (acc),Y
PHA
INY
LDA (acc),Y
STA acc+1
PLA
STA acc
DEY
Le731: INX
RTS
eq_op: JSR neq_op
not_op: JSR get16bit
TYA
JSR push_ya_noun_stk
STA noun_stk_h_int,X
CMP acc
BNE Le749
CMP acc+1
BNE Le749
INC noun_stk_l,X
Le749: RTS
neq_op: JSR subtract
JSR sgn_fn
abs_fn: JSR get16bit
BIT acc+1
BMI Se772
Le757: DEX
Le758: RTS
sgn_fn: JSR get16bit
LDA acc+1
BNE Le764
LDA acc
BEQ Le757
Le764: LDA #$ff ; 255 .
JSR push_ya_noun_stk
STA noun_stk_h_int,X
BIT acc+1
BMI Le758
negate: JSR get16bit
Se772: TYA
SEC
SBC acc
JSR push_ya_noun_stk
TYA
SBC acc+1
BVC Le7a1
Le77e: LDY #$00 ; 0 .
BPL go_errmess_3
subtract: JSR negate
add: JSR get16bit
LDA acc
STA aux
LDA acc+1
STA aux+1
JSR get16bit
Se793: CLC
LDA acc
ADC aux
JSR push_ya_noun_stk
LDA acc+1
ADC aux+1
BVS Le77e
Le7a1: STA noun_stk_h_int,X
unary_pos: RTS
tab_fn: JSR get16bit
LDY acc
BEQ Le7b0
DEY
LDA acc+1
BEQ Le7bc
Le7b0: RTS
tabout: LDA ch
ORA #$07 ; 7 .
TAY
INY
Le7b7: LDA #$a0 ; 160
JSR cout
Le7bc: CPY ch
BCS Le7b7
RTS
print_com_num: JSR tabout
print_num: JSR get16bit
LDA acc+1
BPL Le7d5
LDA #$ad ; 173 -
JSR cout
JSR Se772
BVC print_num
Le7d5: DEY
STY cr_flag
STX acc+1
LDX acc
JSR prdec
LDX acc+1
RTS
auto_cmd: JSR get16bit
LDA acc
STA auto_ln
LDA acc+1
STA auto_ln+1
DEY
STY auto_flag
INY
LDA #$0a ; 10 .
Le7f3: STA auto_inc
STY auto_inc+1
RTS
auto_com: JSR get16bit
LDA acc
LDY acc+1
BPL Le7f3
var_assign: JSR get16bit
LDA noun_stk_l,X
STA aux
LDA noun_stk_h_str,X
STA aux+1
LDA acc
STA (aux),Y
INY
LDA acc+1
STA (aux),Y
INX
Te816: RTS
begin_line: PLA
PLA
colon: BIT cr_flag
BPL Le822
print_cr: JSR crout
print_semi: LSR cr_flag
Le822: RTS
left_paren: LDY #$ff ; 255 .
STY precedence
right_paren: RTS
if_stmt: JSR Sefcd
BEQ Le834
LDA #$25 ; 37 %
STA current_verb
DEY
STY if_flag
Le834: INX
RTS
run_warm: LDA pp
LDY pp+1
BNE Le896
gosub_stmt: LDY #$41 ; 65 A
LDA gosub_nest_count
CMP #$08 ; 8 .
BCS go_errmess_4
TAY
INC gosub_nest_count
LDA pverb
STA gstk_pverbl,Y
LDA pverb+1
STA gstk_pverbh,Y
LDA pline
STA gstk_plinel,Y
LDA pline+1
STA gstk_plineh,Y
goto_stmt: JSR get16bit
JSR find_line
BCC Le867
LDY #$37 ; 55 7
BNE go_errmess_4
Le867: LDA p2
LDY p2+1
run_loop: STA pline
STY pline+1
IFCONST BLD4APPLE1
BIT KBDCR
ELSE
BIT KBD
ENDIF
BMI Le8c3
CLC
ADC #$03 ; 3 .
BCC Le87a
INY
Le87a: LDX #$ff ; 255 .
STX run_flag
TXS
STA pverb
STY pverb+1
Le883: JSR execute_stmt
BIT run_flag
BPL end_stmt
CLC
LDY #$00 ; 0 .
LDA pline
ADC (pline),Y
LDY pline+1
BCC Le896
INY
Le896: CMP himem
BNE run_loop
CPY himem+1
BNE run_loop
LDY #$34 ; 52 4
LSR run_flag
go_errmess_4: JMP print_err_msg
return_stmt: LDY #$4a ; 74 J
LDA gosub_nest_count
BEQ go_errmess_4
DEC gosub_nest_count
TAY
LDA gstk_plinel-1,Y
STA pline
LDA gstk_plineh-1,Y
STA pline+1
DC.B $be,$ff,$00
; LDX synpag+1,Y
LDA gstk_pverbh-1,Y
Le8be: TAY
TXA
JMP Le87a
Le8c3: LDY #$63 ; 99 c
JSR Se3c4
LDY #$01 ; 1 .
LDA (pline),Y
TAX
INY
LDA (pline),Y
JSR prdec
end_stmt: JMP warm
Le8d6: DEC for_nest_count
next_stmt: LDY #$5b ; 91 [
LDA for_nest_count
Le8dc: BEQ go_errmess_4
TAY
LDA noun_stk_l,X
CMP fstk_varl-1,Y
BNE Le8d6
LDA noun_stk_h_str,X
CMP fstk_varh-1,Y
BNE Le8d6
LDA fstk_stepl-1,Y
STA aux
LDA fstk_steph-1,Y
STA aux+1
JSR get16bit
DEX
JSR Se793
JSR var_assign
DEX
LDY for_nest_count
LDA fstk_toh-1,Y
STA syn_stk_l+31,X
LDA fstk_tol-1,Y
LDY #$00 ; 0 .
JSR push_ya_noun_stk
JSR subtract
JSR sgn_fn
JSR get16bit
LDY for_nest_count
LDA acc
BEQ Le925
EOR fstk_steph-1,Y
BPL Le937
Le925: LDA fstk_plinel-1,Y
STA pline
LDA fstk_plineh-1,Y
STA pline+1
LDX fstk_pverbl-1,Y
LDA fstk_pverbh-1,Y
BNE Le8be
Le937: DEC for_nest_count
RTS
for_stmt: LDY #$54 ; 84 T
LDA for_nest_count
CMP #$08 ; 8 .
BEQ Le8dc
INC for_nest_count
TAY
LDA noun_stk_l,X
STA fstk_varl,Y
LDA noun_stk_h_str,X
STA fstk_varh,Y
RTS
to_clause: JSR get16bit
LDY for_nest_count
LDA acc
STA fstk_tol-1,Y
LDA acc+1
STA fstk_toh-1,Y
LDA #$01 ; 1 .
STA fstk_stepl-1,Y
LDA #$00 ; 0 .
Le966: STA fstk_steph-1,Y
LDA pline
STA fstk_plinel-1,Y
LDA pline+1
STA fstk_plineh-1,Y
LDA pverb
STA fstk_pverbl-1,Y
LDA pverb+1
STA fstk_pverbh-1,Y
RTS
Te97e: JSR get16bit
LDY for_nest_count
LDA acc
STA fstk_stepl-1,Y
LDA acc+1
JMP Le966
DC.B $00,$00,$00,$00,$00,$00,$00,$00 ; "........"
DC.B $00,$00,$00 ; "..."
verb_prec_tbl: DC.B $00,$00,$00,$ab,$03,$03,$03,$03 ; "...+...."
DC.B $03,$03,$03,$03,$03,$03,$03,$03 ; "........"
DC.B $03,$03,$3f,$3f,$c0,$c0,$3c,$3c ; "..??@@<<"
DC.B $3c,$3c,$3c,$3c,$3c,$30,$0f,$c0 ; "<<<<<0.@"
IFCONST HUSTNBASIC
DC.B $c3,$ff,$55,$00,$ab,$ab,$03,$03 ; "L.U.++.."
ELSE
DC.B $cc,$ff,$55,$00,$ab,$ab,$03,$03 ; "L.U.++.."
ENDIF
DC.B $ff,$ff,$55,$ff,$ff,$55,$cf,$cf ; "..U..UOO"
DC.B $cf,$cf,$cf,$ff,$55,$c3,$c3,$c3 ; "OOO.UCCC"
DC.B $55,$f0,$f0,$cf,$56,$56,$56,$55 ; "UppOVVVU"
DC.B $ff,$ff,$55,$03,$03,$03,$03,$03 ; "..U....."
DC.B $03,$03,$ff,$ff,$ff,$03,$03,$03 ; "........"
DC.B $03,$03,$03,$03,$03,$03,$03,$03 ; "........"
DC.B $03,$03,$03,$03,$03,$00,$ab,$03 ; "......+."
DC.B $57,$03,$03,$03,$03,$07,$03,$03 ; "W......."
DC.B $03,$03,$03,$03,$03,$03,$03,$03 ; "........"
DC.B $03,$03,$aa,$ff,$ff,$ff,$ff,$ff ; "..*....."
verb_adr_l:
DC.B <begin_line,$ff,$ff,<colon,<list_cmd,<list_comman,<list_all,<Teff2
DC.B <Tefec,<del_cmd,<del_comma,<new_cmd,<clr,<auto_cmd,<auto_com,<man_cmd
DC.B <Tef80,<Tef96,<add,< subtract,<mult_op,<divide,<eq_op,<neq_op
DC.B <Tec13,< Tec06,< Tec0b,<neq_op,<Tec01,< Tec40,< Tec47,<mod_op
IFCONST HUSTNBASIC
DC.B <bogus_eea6,$ff,<left_paren,<comma_substr,<goto_stmt,<Te816,<string_input,<input_num_comma
ELSE
DC.B $00,$ff,<left_paren,<comma_substr,<goto_stmt,<Te816,<string_input,<input_num_comma
ENDIF
DC.B $ff,$ff,<paren_substr,$ff,$ff,<num_array_subs,<peek_fn,<rnd_fn
DC.B <sgn_fn,<abs_fn,$00,$ff,<left_paren,<unary_pos,<negate,<not_op
DC.B <left_paren,<string_eq,<string_neq,<len_fn,<bogus_eec2,<Teeae,<Teeba,<left_paren
DC.B $ff,$ff,<str_arr_dest,<dim_str,<dim_num,<print_str,<print_num,<print_semi
DC.B <print_str_comma,<print_com_num,$ff,$ff,$ff,<call_stmt,<dim_str,<dim_num
DC.B <tab_fn,<end_stmt,<string_input,<input_prompt,<input_num_stmt,<for_stmt,<var_assign,<to_clause
DC.B <Te97e,<next_stmt,<next_stmt,<return_stmt,<gosub_stmt,$ff,<Te816,<goto_stmt
DC.B <if_stmt,<print_str,<print_num,<print_cr,<poke_stmt,<Tef0c,<Tee4e,<poke_stmt
DC.B <plot_comma,<poke_stmt,<bogus_eea6,<Teeb0,<poke_stmt,<Teebc,<Teec6,<vtab_stmt
DC.B <string_lit,<var_assign,<right_paren,$ff,$ff,$ff,$ff,$ff
verb_adr_h:
DC.B >begin_line,$ff,$ff,>colon,>list_cmd,>list_comman,>list_all,>Teff2
DC.B >Tefec,>del_cmd,>del_comma,>new_cmd,>clr,>auto_cmd,>auto_com,>man_cmd
DC.B >Tef80,>Tef96,>add,> subtract,>mult_op,>divide,>eq_op,>neq_op
DC.B >Tec13,> Tec06,> Tec0b,>neq_op,>Tec01,> Tec40,> Tec47,>mod_op
IFCONST HUSTNBASIC
DC.B >bogus_eea6,$ff,>left_paren,>comma_substr,>goto_stmt,>Te816,>string_input,>input_num_comma
ELSE
DC.B $0,$ff,>left_paren,>comma_substr,>goto_stmt,>Te816,>string_input,>input_num_comma
ENDIF
DC.B $ff,$ff,>paren_substr,$ff,$ff,>num_array_subs,>peek_fn,>rnd_fn
DC.B >sgn_fn,>abs_fn,$00,$ff,>left_paren,>unary_pos,>negate,>not_op
DC.B >left_paren,>string_eq,>string_neq,>len_fn,>bogus_eec2,>Teeae,>Teeba,>left_paren
DC.B $ff,$ff,>str_arr_dest,>dim_str,>dim_num,>print_str,>print_num,>print_semi
DC.B >print_str_comma,>print_com_num,$ff,$ff,$ff,>call_stmt,>dim_str,>dim_num
DC.B >tab_fn,>end_stmt,>string_input,>input_prompt,>input_num_stmt,>for_stmt,>var_assign,>to_clause
DC.B >Te97e,>next_stmt,>next_stmt,>return_stmt,>gosub_stmt,$ff,>Te816,>goto_stmt
DC.B >if_stmt,>print_str,>print_num,>print_cr,>poke_stmt,>Tef0c,>Tee4e,>poke_stmt
DC.B >plot_comma,>poke_stmt,>bogus_eea6,>Teeb0,>poke_stmt,>Teebc,>Teec6,>vtab_stmt
DC.B >string_lit,>var_assign,>right_paren,$ff,$ff,$ff,$ff,$ff
error_msg_tbl: DC.B $be,$b3,$b2,$b7,$b6,$37,$d4,$cf ; ">32767TO"
DC.B $cf,$a0,$cc,$cf,$ce,$47,$d3,$d9 ; "O LONGSY"
DC.B $ce,$d4,$c1,$58,$cd,$c5,$cd,$a0 ; "NTAXMEM "
DC.B $c6,$d5,$cc,$4c,$d4,$cf,$cf,$a0 ; "FULLTOO "
DC.B $cd,$c1,$ce,$d9,$a0,$d0,$c1,$d2 ; "MANY PAR"
DC.B $c5,$ce,$53,$d3,$d4,$d2,$c9,$ce ; "ENSSTRIN"
DC.B $47,$ce,$cf,$a0,$c5,$ce,$44,$c2 ; "GNO ENDB"
DC.B $c1,$c4,$a0,$c2,$d2,$c1,$ce,$c3 ; "AD BRANC"
DC.B $48,$be,$b8,$a0,$c7,$cf,$d3,$d5 ; "H>8 GOSU"
DC.B $c2,$53,$c2,$c1,$c4,$a0,$d2,$c5 ; "BSBAD RE"
DC.B $d4,$d5,$d2,$4e,$be,$b8,$a0,$c6 ; "TURN>8 F"
DC.B $cf,$d2,$53,$c2,$c1,$c4,$a0,$ce ; "ORSBAD N"
DC.B $c5,$d8,$54,$d3,$d4,$cf,$d0,$d0 ; "EXTSTOPP"
DC.B $c5,$c4,$a0,$c1,$d4,$20,$aa,$aa ; "ED AT **"
DC.B $aa,$20,$a0,$c5,$d2,$d2,$0d,$be ; "* ERR.>"
DC.B $b2,$b5,$35,$d2,$c1,$ce,$c7,$45 ; "255RANGE"
DC.B $c4,$c9,$4d,$d3,$d4,$d2,$a0,$cf ; "DIMSTR O"
DC.B $d6,$c6,$4c,$dc,$0d,$d2,$c5,$d4 ; "VFL\.RET"
DC.B $d9,$d0,$c5,$a0,$cc,$c9,$ce,$c5 ; "YPE LINE"
DC.B $8d,$3f ; ".?"
Leb9a: LSR run_flag
BCC Leba1
JMP Le8c3
Leba1: LDX acc+1
TXS
LDX acc
LDY #$8d ; 141 .
BNE Lebac
input_num_stmt: LDY #$99 ; 153 .
Lebac: JSR Se3c4
STX acc
TSX
STX acc+1
LDY #$fe ; 254 ~
STY run_flag
INY
STY text_index
JSR Se299
STY token_index
LDX #$20 ; 32
LDA #$30 ; 48 0
JSR Se491
INC run_flag
LDX acc
input_num_comma: LDY text_index
ASL
Lebce: STA acc
INY
LDA buffer,Y
CMP #$74 ; 116 t
BEQ input_num_stmt
EOR #$b0 ; 176 0
CMP #$0a ; 10 .
BCS Lebce
INY
INY
STY text_index
LDA buffer,Y
PHA
LDA buffer-1,Y
LDY #$00 ; 0 .
JSR push_ya_noun_stk
PLA
STA noun_stk_h_int,X
LDA acc
CMP #$c7 ; 199 G
BNE Lebfa
JSR negate
Lebfa: JMP var_assign
DC.B $ff,$ff,$ff,$50 ; "...P"
Tec01: JSR Tec13
BNE Lec1b
Tec06: JSR Tec0b
BNE Lec1b
Tec0b: JSR subtract
JSR negate
BVC Lec16
Tec13: JSR subtract
Lec16: JSR sgn_fn
LSR noun_stk_l,X
Lec1b: JMP not_op
DC.B $ff,$ff ; ".."
syntabl_index: DC.B $c1,$ff,$7f,$d1,$cc,$c7,$cf,$ce ; "A..QLGON"
DC.B $c5,$9a,$98,$8b,$96,$95,$93,$bf ; "E......?"
DC.B $b2,$32,$2d,$2b,$bc,$b0,$ac,$be ; "22-+<0,>"
DC.B $35,$8e,$61,$ff,$ff,$ff,$dd,$fb ; "5.a...]{"
Tec40: JSR Sefc9
ORA rnd+1,X
BPL Lec4c
Tec47: JSR Sefc9
AND rnd+1,X
Lec4c: STA noun_stk_l,X
BPL Lec1b
JMP Sefc9
DC.B $40,$60,$8d,$60,$8b,$00,$7e,$8c ; "@`.`..~."
DC.B $33,$00,$00,$60,$03,$bf,$12,$00 ; "3..`.?.."
DC.B $40,$89,$c9,$47,$9d,$17,$68,$9d ; "@.IG..h."
DC.B $0a,$00,$40,$60,$8d,$60,$8b,$00 ; "..@`.`.."
DC.B $7e,$8c,$3c,$00,$00,$60,$03,$bf ; "~.<..`.?"
DC.B $1b,$4b,$67,$b4,$a1,$07,$8c,$07 ; ".Kg4!..."
DC.B $ae,$a9,$ac,$a8,$67,$8c,$07,$b4 ; ".),(g..4"
DC.B $af,$ac,$b0,$67,$9d,$b2,$af,$ac ; "/,0g.2/,"
DC.B $af,$a3,$67,$8c,$07,$a5,$ab,$af ; "/#g..%+/"
DC.B $b0,$f4,$ae,$a9,$b2,$b0,$7f,$0e ; "0t.)20.."
DC.B $27,$b4,$ae,$a9,$b2,$b0,$7f,$0e ; "'4.)20.."
DC.B $28,$b4,$ae,$a9,$b2,$b0,$64,$07 ; "(4.)20d."
DC.B $a6,$a9,$67,$af,$b4,$af,$a7,$78 ; "&)g/4/'x"
DC.B $b4,$a5,$ac,$78,$7f,$02,$ad,$a5 ; "4%,x..-%"
DC.B $b2,$67,$a2,$b5,$b3,$af,$a7,$ee ; "2g"53/'n"
DC.B $b2,$b5,$b4,$a5,$b2,$7e,$8c,$39 ; "254%2~.9"
DC.B $b4,$b8,$a5,$ae,$67,$b0,$a5,$b4 ; "48%.g0%4"
DC.B $b3,$27,$af,$b4,$07,$9d,$19,$b2 ; "3'/4...2"
DC.B $af,$a6,$7f,$05,$37,$b4,$b5,$b0 ; "/&..7450"
DC.B $ae,$a9,$7f,$05,$28,$b4,$b5,$b0 ; ".)..(450"
DC.B $ae,$a9,$7f,$05,$2a,$b4,$b5,$b0 ; ".)..*450"
DC.B $ae,$a9,$e4,$ae,$a5,$00,$ff,$ff ; ".)d.%..."
syntabl2: DC.B $47,$a2,$a1,$b4,$7f,$0d,$30,$ad ; "G"!4..0-"
DC.B $a9,$a4,$7f,$0d,$23,$ad,$a9,$a4 ; ")$..#-)$"
DC.B $67,$ac,$ac,$a1,$a3,$00,$40,$80 ; "g,,!#.@."
DC.B $c0,$c1,$80,$00,$47,$8c,$68,$8c ; "@A..G.h."
DC.B $db,$67,$9b,$68,$9b,$50,$8c,$63 ; "[g.h.P.c"
DC.B $8c,$7f,$01,$51,$07,$88,$29,$84 ; "...Q..)."
DC.B $80,$c4,$80,$57,$71,$07,$88,$14 ; ".D.Wq..."
DC.B $ed,$a5,$ad,$af,$ac,$ed,$a5,$ad ; "m%-/,m%-"
DC.B $a9,$a8,$f2,$af,$ac,$af,$a3,$71 ; ")(r/,/#q"
DC.B $08,$88,$ae,$a5,$ac,$68,$83,$08 ; "...%,h.."
DC.B $68,$9d,$08,$71,$07,$88,$60,$76 ; "h..q..`v"
DC.B $b4,$af,$ae,$76,$8d,$76,$8b,$51 ; "4/.v.v.Q"
DC.B $07,$88,$19,$b8,$a4,$ae,$b2,$f2 ; "...8$.2r"
DC.B $b3,$b5,$f3,$a2,$a1,$ee,$a7,$b3 ; "35s"!n'3"
DC.B $e4,$ae,$b2,$eb,$a5,$a5,$b0,$51 ; "d.2k%%0Q"
DC.B $07,$88,$39,$81,$c1,$4f,$7f,$0f ; "..9.AO.."
DC.B $2f,$00,$51,$06,$88,$29,$c2,$0c ; "/.Q..)B."
DC.B $82,$57,$8c,$6a,$8c,$42,$ae,$a5 ; ".W.j.B.%"
DC.B $a8,$b4,$60,$ae,$a5,$a8,$b4,$4f ; "(4`.%(4O"
DC.B $7e,$1e,$35,$8c,$27,$51,$07,$88 ; "~.5.'Q.."
DC.B $09,$8b,$fe,$e4,$af,$ad,$f2,$af ; "..~d/-r/"
DC.B $e4,$ae,$a1,$dc,$de,$9c,$dd,$9c ; "d.!\^.]."
DC.B $de,$dd,$9e,$c3,$dd,$cf,$ca,$cd ; "^].C]OJM"
DC.B $cb,$00,$47,$9d,$ad,$a5,$ad,$af ; "K.G.-%-/"
DC.B $ac,$76,$9d,$ad,$a5,$ad,$a9,$a8 ; ",v.-%-)("
DC.B $e6,$a6,$af,$60,$8c,$20,$af,$b4 ; "f&/`. /4"
DC.B $b5,$a1,$f2,$ac,$a3,$f2,$a3,$b3 ; "5!r,#r#3"
DC.B $60,$8c,$20,$ac,$a5,$a4,$ee,$b5 ; "`. ,%$n5"
DC.B $b2,$60,$ae,$b5,$b2,$f4,$b3,$a9 ; "2`.52t3)"
DC.B $ac,$60,$8c,$20,$b4,$b3,$a9,$ac ; ",`. 43),"
DC.B $7a,$7e,$9a,$22,$20,$00,$60,$03 ; "z~." .`."
DC.B $bf,$60,$03,$bf,$1f ; "?`.?."
print_str_comma: JSR tabout
print_str: INX
INX
LDA rnd+1,X
STA aux
LDA syn_stk_h+31,X
STA aux+1
LDY rnd,X
Lee0f: TYA
CMP syn_stk_h+30,X
BCS Lee1d
LDA (aux),Y
JSR cout
INY
JMP Lee0f
Lee1d: LDA #$ff ; 255 .
STA cr_flag
RTS
len_fn: INX
LDA #$00 ; 0 .
STA noun_stk_h_str,X
STA noun_stk_h_int,X
LDA syn_stk_h+31,X
SEC
SBC rnd+1,X
STA noun_stk_l,X
JMP left_paren
DC.B $ff ; "."
getbyte: JSR get16bit
LDA acc+1
BNE gr_255_err
LDA acc
Tee3d
RTS
plot_comma:
IFCONST HUSTNBASIC
JSR push_ya_noun_stk
STY $a0,X
Tee43
LDA $D0
BNE Tee4b
DEC $D1
BMI Tee3d
Tee4b
DEC $D0
; LDA $D2
DC.b $a5
Tee4e: ;MJW wrong address, so we have to break this instruction
DC.b $d2
LDY #$00
JSR push_ya_noun_stk
man_cmd
LDA $D3
; STA $A0,X
DC.b $95
vtab_stmt:
DC.b $a0
JSR mult_op
JMP Tee43
ELSE
JSR getbyte
LDY text_index
CMP #$30 ; 48 0
BCS range_err
CPY #$28 ; 40 (
BCS range_err
RTS
NOP
NOP
Tee4e: JSR getbyte
RTS
ENDIF
;
IFCONST SNDERBASIC ;WSANDER BASIC HERE
NOP
NOP
man_cmd: LSR auto_flag
RTS
vtab_stmt: JSR getbyte
CMP #$18 ; 24 .
BCS range_err
STA cv
RTS
NOP
NOP
ELSE ;OTHER BASIC
IFNCONST HUSTNBASIC ; omit next 12 bytes if Hustn basic
nop
Lee53
txa
man_cmd:
ldx #$1
Lee56
; ldy acc,x
DC.b $B4
vtab_stmt: ;wrong address MJW
DC.b acc
sty himem,x
ldy zp48,x
sty pp,x
dex
IFCONST BRIELBASIC ;BRIEL BASIC HERE
beq Lee56
ELSE
beq man_cmd
ENDIF
tax
rts
ELSE ;HUSTNBASIC
STA cv
RTS
NOP
NOP
ENDIF
ENDIF
gr_255_err: LDY #$77 ; 119 w
go_errmess_5: JMP print_err_msg
range_err: LDY #$7b ; 123 {
BNE go_errmess_5
See6c: JSR Se254
LDA aux
BNE Lee7a
LDA aux+1
BNE Lee7a
JMP Le77e
Lee7a: ASL acc
ROL acc+1
ROL p3
ROL p3+1
LDA p3
CMP aux
LDA p3+1
SBC aux+1
BCC Lee96
STA p3+1
LDA p3
SBC aux
STA p3
INC acc
Lee96: DEY
BNE Lee7a
RTS
DC.B $ff,$ff,$ff,$ff,$ff,$ff ; "......"
call_stmt: JSR get16bit
JMP (acc)
IFCONST BRIELBASIC ;BRIEL BASIC
bogus_eea6:
LDA himem
BNE Leeac
dec zp4d
Leeac:
dec himem
Teeae:
lda zp48
Teeb0:
bne Leeb4
dec zp49
Leeb4:
dec zp48
Leeb6:
ldy #$00
lda (himem),y
Teeba:
sta (zp48),y
Teebc:
lda pp
cmp himem
lda zpcb
bogus_eec2:
sbc zp4d
bcc bogus_eea6
Teec6: jmp Lee53
ELSE ;SANDER/HUSTON (NOT BREIL) BASIC HERE
bogus_eea6: ;DC.B $20,$34,$ee,$c5,$c8,$90,$bb,$85 ; " 4nEH.;."
IFCONST SNDERBASIC ;WSANDER BASIC HERE
JSR getbyte
CMP text_index
BCC range_err
; sta LOCZERO
DC.b $85
Teeae: LDA himem+1
Teeb0: PHA
LDA himem
JSR push_ya_noun_stk
Leeb6
PLA
STA noun_stk_h_int,X
RTS
Teeba: LDA lomem+1
Teebc: PHA
LDA lomem
JMP Lefb3
bogus_eec2:
LDA zp85
DC.b $2D,$60
Teec6: JSR getbyte
ELSE ;HUSTON BASIC HERE
JSR get16bit
LDA zpcf
BPL Leeb5
TYA
Teeae
DEX
; JSR push_ya_noun_stk
DC.b $20
Teeb0
DC.b $08,$e7
STY noun_stk_h_int,x
rts
Leeb5
; STA tokndxstk
DC.b $85
Leeb6
DC.b $d1
LDA acc
; STA srch
DC.b $85
Teeba
DC.b $d0
; JSR get16bit
DC.b $20
Teebc
DC.b $15, $e7
LDA acc
STA srch2
bogus_eec2:
LDA zpcf
STA $d3
Teec6
LDA #$01
JMP plot_comma
ENDIF
ENDIF
IFNCONST HUSTNBASIC ; omit next 2 bytes if Hustn basic
CMP #$28 ; 40 (
ENDIF
Leecb: BCS range_err
TAY
LDA text_index
RTS
NOP
NOP
print_err_msg2: TYA
TAX
LDY #$6e ; 110 n
JSR Se3c4
TXA
TAY
JSR Se3c4
LDY #$72 ; 114 r
JMP Se3c4
Seee4: JSR get16bit
Leee7: ASL acc
ROL acc+1
BMI Leee7
BCS Leecb
BNE Leef5
CMP acc
BCS Leecb
Leef5: RTS
peek_fn:
IFCONST BLD4APPLE1
JSR get16bit
ELSE
JMP A2PEEK
ENDIF
LDA (acc),Y
STY syn_stk_l+31,X
JMP push_ya_noun_stk
poke_stmt:
IFCONST BLD4APPLE1
JSR getbyte
ELSE
JMP A2POKE
ENDIF
LDA acc
PHA
JSR get16bit
PLA
STA (acc),Y
Tef0c: RTS
DC.B $ff,$ff,$ff ; "..."
divide: JSR See6c
LDA acc
STA p3
LDA acc+1
STA p3+1
JMP Le244
dim_num: JSR Seee4
JMP Le134
num_array_subs: JSR Seee4
LDY noun_stk_h_str,X
LDA noun_stk_l,X
ADC #$fe ; 254 ~
BCS Lef30
DEY
Lef30: STA aux
STY aux+1
CLC
ADC acc
STA noun_stk_l,X
TYA
ADC acc+1
STA noun_stk_h_str,X
LDY #$00 ; 0 .
LDA noun_stk_l,X
CMP (aux),Y
INY
LDA noun_stk_h_str,X
SBC (aux),Y
BCS Leecb
JMP left_paren
rnd_fn: JSR get16bit
LDA rnd
JSR push_ya_noun_stk
LDA rnd+1
BNE Lef5e
CMP rnd
ADC #$00 ; 0 .
Lef5e: AND #$7f ; 127 .
STA rnd+1
STA noun_stk_h_int,X
LDY #$11 ; 17 .
Lef66: LDA rnd+1
ASL
CLC
ADC #$40 ; 64 @
ASL
ROL rnd
ROL rnd+1
DEY
BNE Lef66
LDA acc
JSR push_ya_noun_stk
LDA acc+1
STA noun_stk_h_int,X
JMP mod_op
Tef80: JSR get16bit
LDY acc
IFCONST SNDERBASIC ;SANDER BASIC HERE
CPY lomem
LDA acc+1
SBC lomem+1
BCC Lefab_efad
STY himem
LDA acc+1
STA himem+1
Lef93: JMP new_cmd
Tef96: JSR get16bit
LDY acc
CPY himem
LDA acc+1
SBC himem+1
BCS Lefab_efad
STY lomem
LDA acc+1
STA lomem+1
BCC Lef93
Lefab_efad: JMP Leecb
;DC.B ;$a5,$4d,$48,$a5,$4c ; "%MH%L"
lda zp4d
pha
lda himem
ELSE
IFCONST HUSTNBASIC
CPY lomem
LDA zpcf
SBC zp4b
BCC Lefab
STY himem
LDA zpcf
STA zp4d
Lef93
JMP new_cmd
Tef96
JSR get16bit
LDY acc
CPY himem
LDA zpcf
SBC zp4d
BCS Lefab
STY lomem
LDA zpcf
sta zp4b
bcc Lef93
Lefab
JMP Leecb
LDA zp4d
PHA
LDA himem
ELSE
cpy himem
lda zpcf
sbc zp4d
bcc Lefac
sty zp48
lda zpcf
sta zp49
jmp Leeb6
Tef96:
jsr get16bit
ldy acc
cpy pp
lda zpcf
sbc zpcb
bcs Lefac
sty lomem
lda zpcf
sta zp4b
jmp clr
Lefac
jmp Leecb
Lefab_efad:
nop
nop
nop
nop
ENDIF
ENDIF
Lefb3: JSR Sefc9
string_input: JSR input_str
JMP Lefbf
input_prompt: JSR print_str
Lefbf: LDA #$ff ; 255 .
STA text_index
LDA #$74 ; 116 t
STA buffer
RTS
Sefc9: JSR not_op
INX
Sefcd: JSR not_op
LDA noun_stk_l,X
RTS
mem_init_4k: LDA #$00 ; 0 .
STA lomem
STA himem
LDA #$08 ; 8 .
STA lomem+1
LDA #$10 ; 16 .
STA himem+1
JMP new_cmd
Sefe4: CMP noun_stk_h_str,X
BNE Lefe9
CLC
Lefe9: JMP Le102
Tefec: JSR clr
JMP run_warm
Teff2: JSR clr
JMP goto_stmt
Seff8: CPX #$80 ; 128 .
BNE Leffd
DEY
Leffd: JMP Se00c