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 ; 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 ; 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 $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