From 54117e62a6ac883d29037e402f7e0e2dd538c9ff Mon Sep 17 00:00:00 2001 From: Klaus2m5 Date: Sat, 26 Oct 2013 17:04:12 +0200 Subject: [PATCH] redistribution The original EhBASIC website is unavailable at this time. This repository restores the availability of the original EhBASIC source and documentation. --- .gitattributes | 22 + .gitignore | 215 + Enhanced_6502_BASIC_reference_manual.pdf | Bin 0 -> 545025 bytes basic.asm | 8691 ++++++++++++++++++++++ min_mon.asm | 134 + readme.txt | 15 + 6 files changed, 9077 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Enhanced_6502_BASIC_reference_manual.pdf create mode 100644 basic.asm create mode 100644 min_mon.asm create mode 100644 readme.txt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/Enhanced_6502_BASIC_reference_manual.pdf b/Enhanced_6502_BASIC_reference_manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1907cbdf5d7a7d57aacc5ae3bbbad8f156906ec7 GIT binary patch literal 545025 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

cFXb|5BQt3h=@hbCipoB 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%0DML?bAGSR_Q}Kzc$*3`zblb{ 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

3e5xq~P$8*NM!+O_Ykc~iX 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 z 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⪼U&|4ry)?`W%LLowdQh*jN^x;B@ixkC$kdKh3J9p@X2eK&L=L;VDo?3Y3w838tWZimauV_0EDckOCu0LH}3R(aF{pQ05iA2yQQM zdLh>fZF-?@FK|x*nQS4-D?#f(2YqD;(wGyZaVDUz1W20+%$KQPphZb&<$l3!&@USl zTrdE79|b}ozZ=@T8+yB2SO^!JI1?rLz8dR5J3%_79U&DV1)�)h>}ihvbV;<0+` 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%0A`6BeeQ%Fswe2 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 to cause error +; 2.21 fixed IF .. THEN RETURN to not cause error +; 2.22 fixed RND() breaking the get byte routine + +; zero page use .. + +LAB_WARM = $00 ; BASIC warm start entry point +Wrmjpl = LAB_WARM+1; BASIC warm start vector jump low byte +Wrmjph = LAB_WARM+2; BASIC warm start vector jump high byte + +Usrjmp = $0A ; USR function JMP address +Usrjpl = Usrjmp+1 ; USR function JMP vector low byte +Usrjph = Usrjmp+2 ; USR function JMP vector high byte +Nullct = $0D ; nulls output after each line +TPos = $0E ; BASIC terminal position byte +TWidth = $0F ; BASIC terminal width byte +Iclim = $10 ; input column limit +Itempl = $11 ; temporary integer low byte +Itemph = Itempl+1 ; temporary integer high byte + +nums_1 = Itempl ; number to bin/hex string convert MSB +nums_2 = nums_1+1 ; number to bin/hex string convert +nums_3 = nums_1+2 ; number to bin/hex string convert LSB + +Srchc = $5B ; search character +Temp3 = Srchc ; temp byte used in number routines +Scnquo = $5C ; scan-between-quotes flag +Asrch = Scnquo ; alt search character + +XOAw_l = Srchc ; eXclusive OR, OR and AND word low byte +XOAw_h = Scnquo ; eXclusive OR, OR and AND word high byte + +Ibptr = $5D ; input buffer pointer +Dimcnt = Ibptr ; # of dimensions +Tindx = Ibptr ; token index + +Defdim = $5E ; default DIM flag +Dtypef = $5F ; data type flag, $FF=string, $00=numeric +Oquote = $60 ; open quote flag (b7) (Flag: DATA scan; LIST quote; memory) +Gclctd = $60 ; garbage collected flag +Sufnxf = $61 ; subscript/FNX flag, 1xxx xxx = FN(0xxx xxx) +Imode = $62 ; input mode flag, $00=INPUT, $80=READ + +Cflag = $63 ; comparison evaluation flag + +TabSiz = $64 ; TAB step size (was input flag) + +next_s = $65 ; next descriptor stack address + + ; these two bytes form a word pointer to the item + ; currently on top of the descriptor stack +last_sl = $66 ; last descriptor stack address low byte +last_sh = $67 ; last descriptor stack address high byte (always $00) + +des_sk = $68 ; descriptor stack start address (temp strings) + +; = $70 ; End of descriptor stack + +ut1_pl = $71 ; utility pointer 1 low byte +ut1_ph = ut1_pl+1 ; utility pointer 1 high byte +ut2_pl = $73 ; utility pointer 2 low byte +ut2_ph = ut2_pl+1 ; utility pointer 2 high byte + +Temp_2 = ut1_pl ; temp byte for block move + +FACt_1 = $75 ; FAC temp mantissa1 +FACt_2 = FACt_1+1 ; FAC temp mantissa2 +FACt_3 = FACt_2+1 ; FAC temp mantissa3 + +dims_l = FACt_2 ; array dimension size low byte +dims_h = FACt_3 ; array dimension size high byte + +TempB = $78 ; temp page 0 byte + +Smeml = $79 ; start of mem low byte (Start-of-Basic) +Smemh = Smeml+1 ; start of mem high byte (Start-of-Basic) +Svarl = $7B ; start of vars low byte (Start-of-Variables) +Svarh = Svarl+1 ; start of vars high byte (Start-of-Variables) +Sarryl = $7D ; var mem end low byte (Start-of-Arrays) +Sarryh = Sarryl+1 ; var mem end high byte (Start-of-Arrays) +Earryl = $7F ; array mem end low byte (End-of-Arrays) +Earryh = Earryl+1 ; array mem end high byte (End-of-Arrays) +Sstorl = $81 ; string storage low byte (String storage (moving down)) +Sstorh = Sstorl+1 ; string storage high byte (String storage (moving down)) +Sutill = $83 ; string utility ptr low byte +Sutilh = Sutill+1 ; string utility ptr high byte +Ememl = $85 ; end of mem low byte (Limit-of-memory) +Ememh = Ememl+1 ; end of mem high byte (Limit-of-memory) +Clinel = $87 ; current line low byte (Basic line number) +Clineh = Clinel+1 ; current line high byte (Basic line number) +Blinel = $89 ; break line low byte (Previous Basic line number) +Blineh = Blinel+1 ; break line high byte (Previous Basic line number) + +Cpntrl = $8B ; continue pointer low byte +Cpntrh = Cpntrl+1 ; continue pointer high byte + +Dlinel = $8D ; current DATA line low byte +Dlineh = Dlinel+1 ; current DATA line high byte + +Dptrl = $8F ; DATA pointer low byte +Dptrh = Dptrl+1 ; DATA pointer high byte + +Rdptrl = $91 ; read pointer low byte +Rdptrh = Rdptrl+1 ; read pointer high byte + +Varnm1 = $93 ; current var name 1st byte +Varnm2 = Varnm1+1 ; current var name 2nd byte + +Cvaral = $95 ; current var address low byte +Cvarah = Cvaral+1 ; current var address high byte + +Frnxtl = $97 ; var pointer for FOR/NEXT low byte +Frnxth = Frnxtl+1 ; var pointer for FOR/NEXT high byte + +Tidx1 = Frnxtl ; temp line index + +Lvarpl = Frnxtl ; let var pointer low byte +Lvarph = Frnxth ; let var pointer high byte + +prstk = $99 ; precedence stacked flag + +comp_f = $9B ; compare function flag, bits 0,1 and 2 used + ; bit 2 set if > + ; bit 1 set if = + ; bit 0 set if < + +func_l = $9C ; function pointer low byte +func_h = func_l+1 ; function pointer high byte + +garb_l = func_l ; garbage collection working pointer low byte +garb_h = func_h ; garbage collection working pointer high byte + +des_2l = $9E ; string descriptor_2 pointer low byte +des_2h = des_2l+1 ; string descriptor_2 pointer high byte + +g_step = $A0 ; garbage collect step size + +Fnxjmp = $A1 ; jump vector for functions +Fnxjpl = Fnxjmp+1 ; functions jump vector low byte +Fnxjph = Fnxjmp+2 ; functions jump vector high byte + +g_indx = Fnxjpl ; garbage collect temp index + +FAC2_r = $A3 ; FAC2 rounding byte + +Adatal = $A4 ; array data pointer low byte +Adatah = Adatal+1 ; array data pointer high byte + +Nbendl = Adatal ; new block end pointer low byte +Nbendh = Adatah ; new block end pointer high byte + +Obendl = $A6 ; old block end pointer low byte +Obendh = Obendl+1 ; old block end pointer high byte + +numexp = $A8 ; string to float number exponent count +expcnt = $A9 ; string to float exponent count + +numbit = numexp ; bit count for array element calculations + +numdpf = $AA ; string to float decimal point flag +expneg = $AB ; string to float eval exponent -ve flag + +Astrtl = numdpf ; array start pointer low byte +Astrth = expneg ; array start pointer high byte + +Histrl = numdpf ; highest string low byte +Histrh = expneg ; highest string high byte + +Baslnl = numdpf ; BASIC search line pointer low byte +Baslnh = expneg ; BASIC search line pointer high byte + +Fvar_l = numdpf ; find/found variable pointer low byte +Fvar_h = expneg ; find/found variable pointer high byte + +Ostrtl = numdpf ; old block start pointer low byte +Ostrth = expneg ; old block start pointer high byte + +Vrschl = numdpf ; variable search pointer low byte +Vrschh = expneg ; variable search pointer high byte + +FAC1_e = $AC ; FAC1 exponent +FAC1_1 = FAC1_e+1 ; FAC1 mantissa1 +FAC1_2 = FAC1_e+2 ; FAC1 mantissa2 +FAC1_3 = FAC1_e+3 ; FAC1 mantissa3 +FAC1_s = FAC1_e+4 ; FAC1 sign (b7) + +str_ln = FAC1_e ; string length +str_pl = FAC1_1 ; string pointer low byte +str_ph = FAC1_2 ; string pointer high byte + +des_pl = FAC1_2 ; string descriptor pointer low byte +des_ph = FAC1_3 ; string descriptor pointer high byte + +mids_l = FAC1_3 ; MID$ string temp length byte + +negnum = $B1 ; string to float eval -ve flag +numcon = $B1 ; series evaluation constant count + +FAC1_o = $B2 ; FAC1 overflow byte + +FAC2_e = $B3 ; FAC2 exponent +FAC2_1 = FAC2_e+1 ; FAC2 mantissa1 +FAC2_2 = FAC2_e+2 ; FAC2 mantissa2 +FAC2_3 = FAC2_e+3 ; FAC2 mantissa3 +FAC2_s = FAC2_e+4 ; FAC2 sign (b7) + +FAC_sc = $B8 ; FAC sign comparison, Acc#1 vs #2 +FAC1_r = $B9 ; FAC1 rounding byte + +ssptr_l = FAC_sc ; string start pointer low byte +ssptr_h = FAC1_r ; string start pointer high byte + +sdescr = FAC_sc ; string descriptor pointer + +csidx = $BA ; line crunch save index +Asptl = csidx ; array size/pointer low byte +Aspth = $BB ; array size/pointer high byte + +Btmpl = Asptl ; BASIC pointer temp low byte +Btmph = Aspth ; BASIC pointer temp low byte + +Cptrl = Asptl ; BASIC pointer temp low byte +Cptrh = Aspth ; BASIC pointer temp low byte + +Sendl = Asptl ; BASIC pointer temp low byte +Sendh = Aspth ; BASIC pointer temp low byte + +LAB_IGBY = $BC ; get next BASIC byte subroutine + +LAB_GBYT = $C2 ; get current BASIC byte subroutine +Bpntrl = $C3 ; BASIC execute (get byte) pointer low byte +Bpntrh = Bpntrl+1 ; BASIC execute (get byte) pointer high byte + +; = $D7 ; end of get BASIC char subroutine + +Rbyte4 = $D8 ; extra PRNG byte +Rbyte1 = Rbyte4+1 ; most significant PRNG byte +Rbyte2 = Rbyte4+2 ; middle PRNG byte +Rbyte3 = Rbyte4+3 ; least significant PRNG byte + +NmiBase = $DC ; NMI handler enabled/setup/triggered flags + ; bit function + ; === ======== + ; 7 interrupt enabled + ; 6 interrupt setup + ; 5 interrupt happened +; = $DD ; NMI handler addr low byte +; = $DE ; NMI handler addr high byte +IrqBase = $DF ; IRQ handler enabled/setup/triggered flags +; = $E0 ; IRQ handler addr low byte +; = $E1 ; IRQ handler addr high byte + +; = $DE ; unused +; = $DF ; unused +; = $E0 ; unused +; = $E1 ; unused +; = $E2 ; unused +; = $E3 ; unused +; = $E4 ; unused +; = $E5 ; unused +; = $E6 ; unused +; = $E7 ; unused +; = $E8 ; unused +; = $E9 ; unused +; = $EA ; unused +; = $EB ; unused +; = $EC ; unused +; = $ED ; unused +; = $EE ; unused + +Decss = $EF ; number to decimal string start +Decssp1 = Decss+1 ; number to decimal string start + +; = $FF ; decimal string end + +; token values needed for BASIC + +; primary command tokens (can start a statement) + +TK_END = $80 ; END token +TK_FOR = TK_END+1 ; FOR token +TK_NEXT = TK_FOR+1 ; NEXT token +TK_DATA = TK_NEXT+1 ; DATA token +TK_INPUT = TK_DATA+1 ; INPUT token +TK_DIM = TK_INPUT+1 ; DIM token +TK_READ = TK_DIM+1 ; READ token +TK_LET = TK_READ+1 ; LET token +TK_DEC = TK_LET+1 ; DEC token +TK_GOTO = TK_DEC+1 ; GOTO token +TK_RUN = TK_GOTO+1 ; RUN token +TK_IF = TK_RUN+1 ; IF token +TK_RESTORE = TK_IF+1 ; RESTORE token +TK_GOSUB = TK_RESTORE+1 ; GOSUB token +TK_RETIRQ = TK_GOSUB+1 ; RETIRQ token +TK_RETNMI = TK_RETIRQ+1 ; RETNMI token +TK_RETURN = TK_RETNMI+1 ; RETURN token +TK_REM = TK_RETURN+1 ; REM token +TK_STOP = TK_REM+1 ; STOP token +TK_ON = TK_STOP+1 ; ON token +TK_NULL = TK_ON+1 ; NULL token +TK_INC = TK_NULL+1 ; INC token +TK_WAIT = TK_INC+1 ; WAIT token +TK_LOAD = TK_WAIT+1 ; LOAD token +TK_SAVE = TK_LOAD+1 ; SAVE token +TK_DEF = TK_SAVE+1 ; DEF token +TK_POKE = TK_DEF+1 ; POKE token +TK_DOKE = TK_POKE+1 ; DOKE token +TK_CALL = TK_DOKE+1 ; CALL token +TK_DO = TK_CALL+1 ; DO token +TK_LOOP = TK_DO+1 ; LOOP token +TK_PRINT = TK_LOOP+1 ; PRINT token +TK_CONT = TK_PRINT+1 ; CONT token +TK_LIST = TK_CONT+1 ; LIST token +TK_CLEAR = TK_LIST+1 ; CLEAR token +TK_NEW = TK_CLEAR+1 ; NEW token +TK_WIDTH = TK_NEW+1 ; WIDTH token +TK_GET = TK_WIDTH+1 ; GET token +TK_SWAP = TK_GET+1 ; SWAP token +TK_BITSET = TK_SWAP+1 ; BITSET token +TK_BITCLR = TK_BITSET+1 ; BITCLR token +TK_IRQ = TK_BITCLR+1 ; IRQ token +TK_NMI = TK_IRQ+1 ; NMI token + +; secondary command tokens, can't start a statement + +TK_TAB = TK_NMI+1 ; TAB token +TK_ELSE = TK_TAB+1 ; ELSE token +TK_TO = TK_ELSE+1 ; TO token +TK_FN = TK_TO+1 ; FN token +TK_SPC = TK_FN+1 ; SPC token +TK_THEN = TK_SPC+1 ; THEN token +TK_NOT = TK_THEN+1 ; NOT token +TK_STEP = TK_NOT+1 ; STEP token +TK_UNTIL = TK_STEP+1 ; UNTIL token +TK_WHILE = TK_UNTIL+1 ; WHILE token +TK_OFF = TK_WHILE+1 ; OFF token + +; opperator tokens + +TK_PLUS = TK_OFF+1 ; + token +TK_MINUS = TK_PLUS+1 ; - token +TK_MUL = TK_MINUS+1 ; * token +TK_DIV = TK_MUL+1 ; / token +TK_POWER = TK_DIV+1 ; ^ token +TK_AND = TK_POWER+1 ; AND token +TK_EOR = TK_AND+1 ; EOR token +TK_OR = TK_EOR+1 ; OR token +TK_RSHIFT = TK_OR+1 ; RSHIFT token +TK_LSHIFT = TK_RSHIFT+1 ; LSHIFT token +TK_GT = TK_LSHIFT+1 ; > token +TK_EQUAL = TK_GT+1 ; = token +TK_LT = TK_EQUAL+1 ; < token + +; functions tokens + +TK_SGN = TK_LT+1 ; SGN token +TK_INT = TK_SGN+1 ; INT token +TK_ABS = TK_INT+1 ; ABS token +TK_USR = TK_ABS+1 ; USR token +TK_FRE = TK_USR+1 ; FRE token +TK_POS = TK_FRE+1 ; POS token +TK_SQR = TK_POS+1 ; SQR token +TK_RND = TK_SQR+1 ; RND token +TK_LOG = TK_RND+1 ; LOG token +TK_EXP = TK_LOG+1 ; EXP token +TK_COS = TK_EXP+1 ; COS token +TK_SIN = TK_COS+1 ; SIN token +TK_TAN = TK_SIN+1 ; TAN token +TK_ATN = TK_TAN+1 ; ATN token +TK_PEEK = TK_ATN+1 ; PEEK token +TK_DEEK = TK_PEEK+1 ; DEEK token +TK_SADD = TK_DEEK+1 ; SADD token +TK_LEN = TK_SADD+1 ; LEN token +TK_STRS = TK_LEN+1 ; STR$ token +TK_VAL = TK_STRS+1 ; VAL token +TK_ASC = TK_VAL+1 ; ASC token +TK_UCASES = TK_ASC+1 ; UCASE$ token +TK_LCASES = TK_UCASES+1 ; LCASE$ token +TK_CHRS = TK_LCASES+1 ; CHR$ token +TK_HEXS = TK_CHRS+1 ; HEX$ token +TK_BINS = TK_HEXS+1 ; BIN$ token +TK_BITTST = TK_BINS+1 ; BITTST token +TK_MAX = TK_BITTST+1 ; MAX token +TK_MIN = TK_MAX+1 ; MIN token +TK_PI = TK_MIN+1 ; PI token +TK_TWOPI = TK_PI+1 ; TWOPI token +TK_VPTR = TK_TWOPI+1 ; VARPTR token +TK_LEFTS = TK_VPTR+1 ; LEFT$ token +TK_RIGHTS = TK_LEFTS+1 ; RIGHT$ token +TK_MIDS = TK_RIGHTS+1 ; MID$ token + +; offsets from a base of X or Y + +PLUS_0 = $00 ; X or Y plus 0 +PLUS_1 = $01 ; X or Y plus 1 +PLUS_2 = $02 ; X or Y plus 2 +PLUS_3 = $03 ; X or Y plus 3 + +LAB_STAK = $0100 ; stack bottom, no offset + +LAB_SKFE = LAB_STAK+$FE + ; flushed stack address +LAB_SKFF = LAB_STAK+$FF + ; flushed stack address + +ccflag = $0200 ; BASIC CTRL-C flag, 00 = enabled, 01 = dis +ccbyte = ccflag+1 ; BASIC CTRL-C byte +ccnull = ccbyte+1 ; BASIC CTRL-C byte timeout + +VEC_CC = ccnull+1 ; ctrl c check vector + +VEC_IN = VEC_CC+2 ; input vector +VEC_OUT = VEC_IN+2 ; output vector +VEC_LD = VEC_OUT+2 ; load vector +VEC_SV = VEC_LD+2 ; save vector + +; Ibuffs can now be anywhere in RAM, ensure that the max length is < $80 + +Ibuffs = IRQ_vec+$14 + ; start of input buffer after IRQ/NMI code +Ibuffe = Ibuffs+$47; end of input buffer + +Ram_base = $0300 ; start of user RAM (set as needed, should be page aligned) +Ram_top = $C000 ; end of user RAM+1 (set as needed, should be page aligned) + +; This start can be changed to suit your system + + *= $C000 + +; BASIC cold start entry point + +; new page 2 initialisation, copy block to ccflag on + +LAB_COLD + LDY #PG2_TABE-PG2_TABS-1 + ; byte count-1 +LAB_2D13 + LDA PG2_TABS,Y ; get byte + STA ccflag,Y ; store in page 2 + DEY ; decrement count + BPL LAB_2D13 ; loop if not done + + LDX #$FF ; set byte + STX Clineh ; set current line high byte (set immediate mode) + TXS ; reset stack pointer + + LDA #$4C ; code for JMP + STA Fnxjmp ; save for jump vector for functions + +; copy block from LAB_2CEE to $00BC - $00D3 + + LDX #StrTab-LAB_2CEE ; set byte count +LAB_2D4E + LDA LAB_2CEE-1,X ; get byte from table + STA LAB_IGBY-1,X ; save byte in page zero + DEX ; decrement count + BNE LAB_2D4E ; loop if not all done + +; copy block from StrTab to $0000 - $0012 + +LAB_GMEM + LDX #EndTab-StrTab-1 ; set byte count-1 +TabLoop + LDA StrTab,X ; get byte from table + STA PLUS_0,X ; save byte in page zero + DEX ; decrement count + BPL TabLoop ; loop if not all done + +; set-up start values + + LDA #$00 ; clear A + STA NmiBase ; clear NMI handler enabled flag + STA IrqBase ; clear IRQ handler enabled flag + STA FAC1_o ; clear FAC1 overflow byte + STA last_sh ; clear descriptor stack top item pointer high byte + + LDA #$0E ; set default tab size + STA TabSiz ; save it + LDA #$03 ; set garbage collect step size for descriptor stack + STA g_step ; save it + LDX #des_sk ; descriptor stack start + STX next_s ; set descriptor stack pointer + JSR LAB_CRLF ; print CR/LF + LDA #LAB_MSZM ; point to memory size message (high addr) + JSR LAB_18C3 ; print null terminated string from memory + JSR LAB_INLN ; print "? " and get BASIC input + STX Bpntrl ; set BASIC execute pointer low byte + STY Bpntrh ; set BASIC execute pointer high byte + JSR LAB_GBYT ; get last byte back + + BNE LAB_2DAA ; branch if not null (user typed something) + + LDY #$00 ; else clear Y + ; character was null so get memory size the hard way + ; we get here with Y=0 and Itempl/h = Ram_base +LAB_2D93 + INC Itempl ; increment temporary integer low byte + BNE LAB_2D99 ; branch if no overflow + + INC Itemph ; increment temporary integer high byte + LDA Itemph ; get high byte + CMP #>Ram_top ; compare with top of RAM+1 + BEQ LAB_2DB6 ; branch if match (end of user RAM) + +LAB_2D99 + LDA #$55 ; set test byte + STA (Itempl),Y ; save via temporary integer + CMP (Itempl),Y ; compare via temporary integer + BNE LAB_2DB6 ; branch if fail + + ASL ; shift test byte left (now $AA) + STA (Itempl),Y ; save via temporary integer + CMP (Itempl),Y ; compare via temporary integer + BEQ LAB_2D93 ; if ok go do next byte + + BNE LAB_2DB6 ; branch if fail + +LAB_2DAA + JSR LAB_2887 ; get FAC1 from string + LDA FAC1_e ; get FAC1 exponent + CMP #$98 ; compare with exponent = 2^24 + BCS LAB_GMEM ; if too large go try again + + JSR LAB_F2FU ; save integer part of FAC1 in temporary integer + ; (no range check) + +LAB_2DB6 + LDA Itempl ; get temporary integer low byte + LDY Itemph ; get temporary integer high byte + CPY #Ram_top ; compare with top of RAM high byte +; BCC MEM_OK ; branch if < RAM top + +; BNE LAB_GMEM ; if too large go try again + ; else was = so compare low bytes +; CMP #Ram_base ; set start addr high byte + STY Smeml ; save start of mem low byte + STX Smemh ; save start of mem high byte + +; this line is only needed if Ram_base is not $xx00 + +; LDY #$00 ; clear Y + TYA ; clear A + STA (Smeml),Y ; clear first byte + INC Smeml ; increment start of mem low byte + +; these two lines are only needed if Ram_base is $xxFF + +; BNE LAB_2E05 ; branch if no rollover + +; INC Smemh ; increment start of mem high byte +LAB_2E05 + JSR LAB_CRLF ; print CR/LF + JSR LAB_1463 ; do "NEW" and "CLEAR" + LDA Ememl ; get end of mem low byte + SEC ; set carry for subtract + SBC Smeml ; subtract start of mem low byte + TAX ; copy to X + LDA Ememh ; get end of mem high byte + SBC Smemh ; subtract start of mem high byte + JSR LAB_295E ; print XA as unsigned integer (bytes free) + LDA #LAB_SMSG ; point to sign-on message (high addr) + JSR LAB_18C3 ; print null terminated string from memory + LDA #LAB_1274 ; warm start vector high byte + STA Wrmjpl ; save warm start vector low byte + STY Wrmjph ; save warm start vector high byte + JMP (Wrmjpl) ; go do warm start + +; open up space in memory +; move (Ostrtl)-(Obendl) to new block ending at (Nbendl) + +; Nbendl,Nbendh - new block end address (A/Y) +; Obendl,Obendh - old block end address +; Ostrtl,Ostrth - old block start address + +; returns with .. + +; Nbendl,Nbendh - new block start address (high byte - $100) +; Obendl,Obendh - old block start address (high byte - $100) +; Ostrtl,Ostrth - old block start address (unchanged) + +LAB_11CF + JSR LAB_121F ; check available memory, "Out of memory" error if no room + ; addr to check is in AY (low/high) + STA Earryl ; save new array mem end low byte + STY Earryh ; save new array mem end high byte + +; open up space in memory +; move (Ostrtl)-(Obendl) to new block ending at (Nbendl) +; don't set array end + +LAB_11D6 + SEC ; set carry for subtract + LDA Obendl ; get block end low byte + SBC Ostrtl ; subtract block start low byte + TAY ; copy MOD(block length/$100) byte to Y + LDA Obendh ; get block end high byte + SBC Ostrth ; subtract block start high byte + TAX ; copy block length high byte to X + INX ; +1 to allow for count=0 exit + TYA ; copy block length low byte to A + BEQ LAB_120A ; branch if length low byte=0 + + ; block is (X-1)*256+Y bytes, do the Y bytes first + + SEC ; set carry for add + 1, two's complement + EOR #$FF ; invert low byte for subtract + ADC Obendl ; add block end low byte + + STA Obendl ; save corrected old block end low byte + BCS LAB_11F3 ; branch if no underflow + + DEC Obendh ; else decrement block end high byte + SEC ; set carry for add + 1, two's complement +LAB_11F3 + TYA ; get MOD(block length/$100) byte + EOR #$FF ; invert low byte for subtract + ADC Nbendl ; add destination end low byte + STA Nbendl ; save modified new block end low byte + BCS LAB_1203 ; branch if no underflow + + DEC Nbendh ; else decrement block end high byte + BCC LAB_1203 ; branch always + +LAB_11FF + LDA (Obendl),Y ; get byte from source + STA (Nbendl),Y ; copy byte to destination +LAB_1203 + DEY ; decrement index + BNE LAB_11FF ; loop until Y=0 + + ; now do Y=0 indexed byte + LDA (Obendl),Y ; get byte from source + STA (Nbendl),Y ; save byte to destination +LAB_120A + DEC Obendh ; decrement source pointer high byte + DEC Nbendh ; decrement destination pointer high byte + DEX ; decrement block count + BNE LAB_1203 ; loop until count = $0 + + RTS + +; check room on stack for A bytes +; stack too deep? do OM error + +LAB_1212 + STA TempB ; save result in temp byte + TSX ; copy stack + CPX TempB ; compare new "limit" with stack + BCC LAB_OMER ; if stack < limit do "Out of memory" error then warm start + + RTS + +; check available memory, "Out of memory" error if no room +; addr to check is in AY (low/high) + +LAB_121F + CPY Sstorh ; compare bottom of string mem high byte + BCC LAB_124B ; if less then exit (is ok) + + BNE LAB_1229 ; skip next test if greater (tested <) + + ; high byte was =, now do low byte + CMP Sstorl ; compare with bottom of string mem low byte + BCC LAB_124B ; if less then exit (is ok) + + ; addr is > string storage ptr (oops!) +LAB_1229 + PHA ; push addr low byte + LDX #$08 ; set index to save Adatal to expneg inclusive + TYA ; copy addr high byte (to push on stack) + + ; save misc numeric work area +LAB_122D + PHA ; push byte + LDA Adatal-1,X ; get byte from Adatal to expneg ( ,$00 not pushed) + DEX ; decrement index + BPL LAB_122D ; loop until all done + + JSR LAB_GARB ; garbage collection routine + + ; restore misc numeric work area + LDX #$00 ; clear the index to restore bytes +LAB_1238 + PLA ; pop byte + STA Adatal,X ; save byte to Adatal to expneg + INX ; increment index + CPX #$08 ; compare with end + 1 + BMI LAB_1238 ; loop if more to do + + PLA ; pop addr high byte + TAY ; copy back to Y + PLA ; pop addr low byte + CPY Sstorh ; compare bottom of string mem high byte + BCC LAB_124B ; if less then exit (is ok) + + BNE LAB_OMER ; if greater do "Out of memory" error then warm start + + ; high byte was =, now do low byte + CMP Sstorl ; compare with bottom of string mem low byte + BCS LAB_OMER ; if >= do "Out of memory" error then warm start + + ; ok exit, carry clear +LAB_124B + RTS + +; do "Out of memory" error then warm start + +LAB_OMER + LDX #$0C ; error code $0C ("Out of memory" error) + +; do error #X, then warm start + +LAB_XERR + JSR LAB_CRLF ; print CR/LF + + LDA LAB_BAER,X ; get error message pointer low byte + LDY LAB_BAER+1,X ; get error message pointer high byte + JSR LAB_18C3 ; print null terminated string from memory + + JSR LAB_1491 ; flush stack and clear continue flag + LDA #LAB_EMSG ; point to " Error" high addr +LAB_1269 + JSR LAB_18C3 ; print null terminated string from memory + LDY Clineh ; get current line high byte + INY ; increment it + BEQ LAB_1274 ; go do warm start (was immediate mode) + + ; else print line number + JSR LAB_2953 ; print " in line [LINE #]" + +; BASIC warm start entry point +; wait for Basic command + +LAB_1274 + ; clear ON IRQ/NMI bytes + LDA #$00 ; clear A + STA IrqBase ; clear enabled byte + STA NmiBase ; clear enabled byte + LDA #LAB_RMSG ; point to "Ready" message high byte + + JSR LAB_18C3 ; go do print string + +; wait for Basic command (no "Ready") + +LAB_127D + JSR LAB_1357 ; call for BASIC input +LAB_1280 + STX Bpntrl ; set BASIC execute pointer low byte + STY Bpntrh ; set BASIC execute pointer high byte + JSR LAB_GBYT ; scan memory + BEQ LAB_127D ; loop while null + +; got to interpret input line now .. + + LDX #$FF ; current line to null value + STX Clineh ; set current line high byte + BCC LAB_1295 ; branch if numeric character (handle new BASIC line) + + ; no line number .. immediate mode + JSR LAB_13A6 ; crunch keywords into Basic tokens + JMP LAB_15F6 ; go scan and interpret code + +; handle new BASIC line + +LAB_1295 + JSR LAB_GFPN ; get fixed-point number into temp integer + JSR LAB_13A6 ; crunch keywords into Basic tokens + STY Ibptr ; save index pointer to end of crunched line + JSR LAB_SSLN ; search BASIC for temp integer line number + BCC LAB_12E6 ; branch if not found + + ; aroooogah! line # already exists! delete it + LDY #$01 ; set index to next line pointer high byte + LDA (Baslnl),Y ; get next line pointer high byte + STA ut1_ph ; save it + LDA Svarl ; get start of vars low byte + STA ut1_pl ; save it + LDA Baslnh ; get found line pointer high byte + STA ut2_ph ; save it + LDA Baslnl ; get found line pointer low byte + DEY ; decrement index + SBC (Baslnl),Y ; subtract next line pointer low byte + CLC ; clear carry for add + ADC Svarl ; add start of vars low byte + STA Svarl ; save new start of vars low byte + STA ut2_pl ; save destination pointer low byte + LDA Svarh ; get start of vars high byte + ADC #$FF ; -1 + carry + STA Svarh ; save start of vars high byte + SBC Baslnh ; subtract found line pointer high byte + TAX ; copy to block count + SEC ; set carry for subtract + LDA Baslnl ; get found line pointer low byte + SBC Svarl ; subtract start of vars low byte + TAY ; copy to bytes in first block count + BCS LAB_12D0 ; branch if overflow + + INX ; increment block count (correct for =0 loop exit) + DEC ut2_ph ; decrement destination high byte +LAB_12D0 + CLC ; clear carry for add + ADC ut1_pl ; add source pointer low byte + BCC LAB_12D8 ; branch if no overflow + + DEC ut1_ph ; else decrement source pointer high byte + CLC ; clear carry + + ; close up memory to delete old line +LAB_12D8 + LDA (ut1_pl),Y ; get byte from source + STA (ut2_pl),Y ; copy to destination + INY ; increment index + BNE LAB_12D8 ; while <> 0 do this block + + INC ut1_ph ; increment source pointer high byte + INC ut2_ph ; increment destination pointer high byte + DEX ; decrement block count + BNE LAB_12D8 ; loop until all done + + ; got new line in buffer and no existing same # +LAB_12E6 + LDA Ibuffs ; get byte from start of input buffer + BEQ LAB_1319 ; if null line just go flush stack/vars and exit + + ; got new line and it isn't empty line + LDA Ememl ; get end of mem low byte + LDY Ememh ; get end of mem high byte + STA Sstorl ; set bottom of string space low byte + STY Sstorh ; set bottom of string space high byte + LDA Svarl ; get start of vars low byte (end of BASIC) + STA Obendl ; save old block end low byte + LDY Svarh ; get start of vars high byte (end of BASIC) + STY Obendh ; save old block end high byte + ADC Ibptr ; add input buffer pointer (also buffer length) + BCC LAB_1301 ; branch if no overflow from add + + INY ; else increment high byte +LAB_1301 + STA Nbendl ; save new block end low byte (move to, low byte) + STY Nbendh ; save new block end high byte + JSR LAB_11CF ; open up space in memory + ; old start pointer Ostrtl,Ostrth set by the find line call + LDA Earryl ; get array mem end low byte + LDY Earryh ; get array mem end high byte + STA Svarl ; save start of vars low byte + STY Svarh ; save start of vars high byte + LDY Ibptr ; get input buffer pointer (also buffer length) + DEY ; adjust for loop type +LAB_1311 + LDA Ibuffs-4,Y ; get byte from crunched line + STA (Baslnl),Y ; save it to program memory + DEY ; decrement count + CPY #$03 ; compare with first byte-1 + BNE LAB_1311 ; continue while count <> 3 + + LDA Itemph ; get line # high byte + STA (Baslnl),Y ; save it to program memory + DEY ; decrement count + LDA Itempl ; get line # low byte + STA (Baslnl),Y ; save it to program memory + DEY ; decrement count + LDA #$FF ; set byte to allow chain rebuild. if you didn't set this + ; byte then a zero already here would stop the chain rebuild + ; as it would think it was the [EOT] marker. + STA (Baslnl),Y ; save it to program memory + +LAB_1319 + JSR LAB_1477 ; reset execution to start, clear vars and flush stack + LDX Smeml ; get start of mem low byte + LDA Smemh ; get start of mem high byte + LDY #$01 ; index to high byte of next line pointer +LAB_1325 + STX ut1_pl ; set line start pointer low byte + STA ut1_ph ; set line start pointer high byte + LDA (ut1_pl),Y ; get it + BEQ LAB_133E ; exit if end of program + +; rebuild chaining of Basic lines + + LDY #$04 ; point to first code byte of line + ; there is always 1 byte + [EOL] as null entries are deleted +LAB_1330 + INY ; next code byte + LDA (ut1_pl),Y ; get byte + BNE LAB_1330 ; loop if not [EOL] + + SEC ; set carry for add + 1 + TYA ; copy end index + ADC ut1_pl ; add to line start pointer low byte + TAX ; copy to X + LDY #$00 ; clear index, point to this line's next line pointer + STA (ut1_pl),Y ; set next line pointer low byte + TYA ; clear A + ADC ut1_ph ; add line start pointer high byte + carry + INY ; increment index to high byte + STA (ut1_pl),Y ; save next line pointer low byte + BCC LAB_1325 ; go do next line, branch always, carry clear + + +LAB_133E + JMP LAB_127D ; else we just wait for Basic command, no "Ready" + +; print "? " and get BASIC input + +LAB_INLN + JSR LAB_18E3 ; print "?" character + JSR LAB_18E0 ; print " " + BNE LAB_1357 ; call for BASIC input and return + +; receive line from keyboard + + ; $08 as delete key (BACKSPACE on standard keyboard) +LAB_134B + JSR LAB_PRNA ; go print the character + DEX ; decrement the buffer counter (delete) + .byte $2C ; make LDX into BIT abs + +; call for BASIC input (main entry point) + +LAB_1357 + LDX #$00 ; clear BASIC line buffer pointer +LAB_1359 + JSR V_INPT ; call scan input device + BCC LAB_1359 ; loop if no byte + + BEQ LAB_1359 ; loop until valid input (ignore NULLs) + + CMP #$07 ; compare with [BELL] + BEQ LAB_1378 ; branch if [BELL] + + CMP #$0D ; compare with [CR] + BEQ LAB_1384 ; do CR/LF exit if [CR] + + CPX #$00 ; compare pointer with $00 + BNE LAB_1374 ; branch if not empty + +; next two lines ignore any non print character and [SPACE] if input buffer empty + + CMP #$21 ; compare with [SP]+1 + BCC LAB_1359 ; if < ignore character + +LAB_1374 + CMP #$08 ; compare with [BACKSPACE] (delete last character) + BEQ LAB_134B ; go delete last character + +LAB_1378 + CPX #Ibuffe-Ibuffs ; compare character count with max + BCS LAB_138E ; skip store and do [BELL] if buffer full + + STA Ibuffs,X ; else store in buffer + INX ; increment pointer +LAB_137F + JSR LAB_PRNA ; go print the character + BNE LAB_1359 ; always loop for next character + +LAB_1384 + JMP LAB_1866 ; do CR/LF exit to BASIC + +; announce buffer full + +LAB_138E + LDA #$07 ; [BELL] character into A + BNE LAB_137F ; go print the [BELL] but ignore input character + ; branch always + +; crunch keywords into Basic tokens +; position independent buffer version .. +; faster, dictionary search version .... + +LAB_13A6 + LDY #$FF ; set save index (makes for easy math later) + + SEC ; set carry for subtract + LDA Bpntrl ; get basic execute pointer low byte + SBC #= go save byte then continue crunching + + CMP #'<' ; compare with "<" + BCS LAB_13CC ; if >= go crunch now + + CMP #'0' ; compare with "0" + BCS LAB_13EC ; if >= go save byte then continue crunching + + STA Scnquo ; save buffer byte as search character + CMP #$22 ; is it quote character? + BEQ LAB_1410 ; branch if so (copy quoted string) + + CMP #'*' ; compare with "*" + BCC LAB_13EC ; if < go save byte then continue crunching + + ; else crunch now +LAB_13CC + BIT Oquote ; get open quote/DATA token flag + BVS LAB_13EC ; branch if b6 of Oquote set (was DATA) + ; go save byte then continue crunching + + STX TempB ; save buffer read index + STY csidx ; copy buffer save index + LDY #TAB_1STC ; get keyword first character table high address + STY ut2_ph ; save pointer high byte + LDY #$00 ; clear table pointer + +LAB_13D0 + CMP (ut2_pl),Y ; compare with keyword first character table byte + BEQ LAB_13D1 ; go do word_table_chr if match + + BCC LAB_13EA ; if < keyword first character table byte go restore + ; Y and save to crunched + + INY ; else increment pointer + BNE LAB_13D0 ; and loop (branch always) + +; have matched first character of some keyword + +LAB_13D1 + TYA ; copy matching index + ASL ; *2 (bytes per pointer) + TAX ; copy to new index + LDA TAB_CHRT,X ; get keyword table pointer low byte + STA ut2_pl ; save pointer low byte + LDA TAB_CHRT+1,X ; get keyword table pointer high byte + STA ut2_ph ; save pointer high byte + + LDY #$FF ; clear table pointer (make -1 for start) + + LDX TempB ; restore buffer read index + +LAB_13D6 + INY ; next table byte + LDA (ut2_pl),Y ; get byte from table +LAB_13D8 + BMI LAB_13EA ; all bytes matched so go save token + + INX ; next buffer byte + CMP Ibuffs,X ; compare with byte from input buffer + BEQ LAB_13D6 ; go compare next if match + + BNE LAB_1417 ; branch if >< (not found keyword) + +LAB_13EA + LDY csidx ; restore save index + + ; save crunched to output +LAB_13EC + INX ; increment buffer index (to next input byte) + INY ; increment save index (to next output byte) + STA Ibuffs,Y ; save byte to output + CMP #$00 ; set the flags, set carry + BEQ LAB_142A ; do exit if was null [EOL] + + ; A holds token or byte here + SBC #':' ; subtract ":" (carry set by CMP #00) + BEQ LAB_13FF ; branch if it was ":" (is now $00) + + ; A now holds token-$3A + CMP #TK_DATA-$3A ; compare with DATA token - $3A + BNE LAB_1401 ; branch if not DATA + + ; token was : or DATA +LAB_13FF + STA Oquote ; save token-$3A (clear for ":", TK_DATA-$3A for DATA) +LAB_1401 + EOR #TK_REM-$3A ; effectively subtract REM token offset + BNE LAB_13AC ; If wasn't REM then go crunch rest of line + + STA Asrch ; else was REM so set search for [EOL] + + ; loop for REM, "..." etc. +LAB_1408 + LDA Ibuffs,X ; get byte from input buffer + BEQ LAB_13EC ; branch if null [EOL] + + CMP Asrch ; compare with stored character + BEQ LAB_13EC ; branch if match (end quote) + + ; entry for copy string in quotes, don't crunch +LAB_1410 + INY ; increment buffer save index + STA Ibuffs,Y ; save byte to output + INX ; increment buffer read index + BNE LAB_1408 ; loop while <> 0 (should never be 0!) + + ; not found keyword this go +LAB_1417 + LDX TempB ; compare has failed, restore buffer index (start byte!) + + ; now find the end of this word in the table +LAB_141B + LDA (ut2_pl),Y ; get table byte + PHP ; save status + INY ; increment table index + PLP ; restore byte status + BPL LAB_141B ; if not end of keyword go do next + + LDA (ut2_pl),Y ; get byte from keyword table + BNE LAB_13D8 ; go test next word if not zero byte (end of table) + + ; reached end of table with no match + LDA Ibuffs,X ; restore byte from input buffer + BPL LAB_13EA ; branch always (all bytes in buffer are $00-$7F) + ; go save byte in output and continue crunching + + ; reached [EOL] +LAB_142A + INY ; increment pointer + INY ; increment pointer (makes it next line pointer high byte) + STA Ibuffs,Y ; save [EOL] (marks [EOT] in immediate mode) + INY ; adjust for line copy + INY ; adjust for line copy + INY ; adjust for line copy + DEC Bpntrl ; allow for increment (change if buffer starts at $xxFF) + RTS + +; search Basic for temp integer line number from start of mem + +LAB_SSLN + LDA Smeml ; get start of mem low byte + LDX Smemh ; get start of mem high byte + +; search Basic for temp integer line number from AX +; returns carry set if found +; returns Baslnl/Baslnh pointer to found or next higher (not found) line + +; old 541 new 507 + +LAB_SHLN + LDY #$01 ; set index + STA Baslnl ; save low byte as current + STX Baslnh ; save high byte as current + LDA (Baslnl),Y ; get pointer high byte from addr + BEQ LAB_145F ; pointer was zero so we're done, do 'not found' exit + + LDY #$03 ; set index to line # high byte + LDA (Baslnl),Y ; get line # high byte + DEY ; decrement index (point to low byte) + CMP Itemph ; compare with temporary integer high byte + BNE LAB_1455 ; if <> skip low byte check + + LDA (Baslnl),Y ; get line # low byte + CMP Itempl ; compare with temporary integer low byte +LAB_1455 + BCS LAB_145E ; else if temp < this line, exit (passed line#) + +LAB_1456 + DEY ; decrement index to next line ptr high byte + LDA (Baslnl),Y ; get next line pointer high byte + TAX ; copy to X + DEY ; decrement index to next line ptr low byte + LDA (Baslnl),Y ; get next line pointer low byte + BCC LAB_SHLN ; go search for line # in temp (Itempl/Itemph) from AX + ; (carry always clear) + +LAB_145E + BEQ LAB_1460 ; exit if temp = found line #, carry is set + +LAB_145F + CLC ; clear found flag +LAB_1460 + RTS + +; perform NEW + +LAB_NEW + BNE LAB_1460 ; exit if not end of statement (to do syntax error) + +LAB_1463 + LDA #$00 ; clear A + TAY ; clear Y + STA (Smeml),Y ; clear first line, next line pointer, low byte + INY ; increment index + STA (Smeml),Y ; clear first line, next line pointer, high byte + CLC ; clear carry + LDA Smeml ; get start of mem low byte + ADC #$02 ; calculate end of BASIC low byte + STA Svarl ; save start of vars low byte + LDA Smemh ; get start of mem high byte + ADC #$00 ; add any carry + STA Svarh ; save start of vars high byte + +; reset execution to start, clear vars and flush stack + +LAB_1477 + CLC ; clear carry + LDA Smeml ; get start of mem low byte + ADC #$FF ; -1 + STA Bpntrl ; save BASIC execute pointer low byte + LDA Smemh ; get start of mem high byte + ADC #$FF ; -1+carry + STA Bpntrh ; save BASIC execute pointer high byte + +; "CLEAR" command gets here + +LAB_147A + LDA Ememl ; get end of mem low byte + LDY Ememh ; get end of mem high byte + STA Sstorl ; set bottom of string space low byte + STY Sstorh ; set bottom of string space high byte + LDA Svarl ; get start of vars low byte + LDY Svarh ; get start of vars high byte + STA Sarryl ; save var mem end low byte + STY Sarryh ; save var mem end high byte + STA Earryl ; save array mem end low byte + STY Earryh ; save array mem end high byte + JSR LAB_161A ; perform RESTORE command + +; flush stack and clear continue flag + +LAB_1491 + LDX #des_sk ; set descriptor stack pointer + STX next_s ; save descriptor stack pointer + PLA ; pull return address low byte + TAX ; copy return address low byte + PLA ; pull return address high byte + STX LAB_SKFE ; save to cleared stack + STA LAB_SKFF ; save to cleared stack + LDX #$FD ; new stack pointer + TXS ; reset stack + LDA #$00 ; clear byte + STA Cpntrh ; clear continue pointer high byte + STA Sufnxf ; clear subscript/FNX flag +LAB_14A6 + RTS + +; perform CLEAR + +LAB_CLEAR + BEQ LAB_147A ; if no following token go do "CLEAR" + + ; else there was a following token (go do syntax error) + RTS + +; perform LIST [n][-m] +; bigger, faster version (a _lot_ faster) + +LAB_LIST + BCC LAB_14BD ; branch if next character numeric (LIST n..) + + BEQ LAB_14BD ; branch if next character [NULL] (LIST) + + CMP #TK_MINUS ; compare with token for - + BNE LAB_14A6 ; exit if not - (LIST -m) + + ; LIST [[n][-m]] + ; this bit sets the n , if present, as the start and end +LAB_14BD + JSR LAB_GFPN ; get fixed-point number into temp integer + JSR LAB_SSLN ; search BASIC for temp integer line number + ; (pointer in Baslnl/Baslnh) + JSR LAB_GBYT ; scan memory + BEQ LAB_14D4 ; branch if no more characters + + ; this bit checks the - is present + CMP #TK_MINUS ; compare with token for - + BNE LAB_1460 ; return if not "-" (will be Syntax error) + + ; LIST [n]-m + ; the - was there so set m as the end value + JSR LAB_IGBY ; increment and scan memory + JSR LAB_GFPN ; get fixed-point number into temp integer + BNE LAB_1460 ; exit if not ok + +LAB_14D4 + LDA Itempl ; get temporary integer low byte + ORA Itemph ; OR temporary integer high byte + BNE LAB_14E2 ; branch if start set + + LDA #$FF ; set for -1 + STA Itempl ; set temporary integer low byte + STA Itemph ; set temporary integer high byte +LAB_14E2 + LDY #$01 ; set index for line + STY Oquote ; clear open quote flag + JSR LAB_CRLF ; print CR/LF + LDA (Baslnl),Y ; get next line pointer high byte + ; pointer initially set by search at LAB_14BD + BEQ LAB_152B ; if null all done so exit + JSR LAB_1629 ; do CRTL-C check vector + + INY ; increment index for line + LDA (Baslnl),Y ; get line # low byte + TAX ; copy to X + INY ; increment index + LDA (Baslnl),Y ; get line # high byte + CMP Itemph ; compare with temporary integer high byte + BNE LAB_14FF ; branch if no high byte match + + CPX Itempl ; compare with temporary integer low byte + BEQ LAB_1501 ; branch if = last line to do (< will pass next branch) + +LAB_14FF ; else .. + BCS LAB_152B ; if greater all done so exit + +LAB_1501 + STY Tidx1 ; save index for line + JSR LAB_295E ; print XA as unsigned integer + LDA #$20 ; space is the next character +LAB_1508 + LDY Tidx1 ; get index for line + AND #$7F ; mask top out bit of character +LAB_150C + JSR LAB_PRNA ; go print the character + CMP #$22 ; was it " character + BNE LAB_1519 ; branch if not + + ; we are either entering or leaving a pair of quotes + LDA Oquote ; get open quote flag + EOR #$FF ; toggle it + STA Oquote ; save it back +LAB_1519 + INY ; increment index + LDA (Baslnl),Y ; get next byte + BNE LAB_152E ; branch if not [EOL] (go print character) + TAY ; else clear index + LDA (Baslnl),Y ; get next line pointer low byte + TAX ; copy to X + INY ; increment index + LDA (Baslnl),Y ; get next line pointer high byte + STX Baslnl ; set pointer to line low byte + STA Baslnh ; set pointer to line high byte + BNE LAB_14E2 ; go do next line if not [EOT] + ; else .. +LAB_152B + RTS + +LAB_152E + BPL LAB_150C ; just go print it if not token byte + + ; else was token byte so uncrunch it (maybe) + BIT Oquote ; test the open quote flag + BMI LAB_150C ; just go print character if open quote set + + LDX #>LAB_KEYT ; get table address high byte + ASL ; *2 + ASL ; *4 + BCC LAB_152F ; branch if no carry + + INX ; else increment high byte + CLC ; clear carry for add +LAB_152F + ADC #LAB_159F ; set return address high byte + STA ut1_pl ; save return address low byte + STY ut1_ph ; save return address high byte + JMP LAB_1B66 ; round FAC1 and put on stack (returns to next instruction) + +LAB_159F + LDA #LAB_259C ; set 1 pointer high addr + JSR LAB_UFAC ; unpack memory (AY) into FAC1 + JSR LAB_GBYT ; scan memory + CMP #TK_STEP ; compare with STEP token + BNE LAB_15B3 ; jump if not "STEP" + + ;.was step so .. + JSR LAB_IGBY ; increment and scan memory + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch +LAB_15B3 + JSR LAB_27CA ; return A=FF,C=1/-ve A=01,C=0/+ve + STA FAC1_s ; set FAC1 sign (b7) + ; this is +1 for +ve step and -1 for -ve step, in NEXT we + ; compare the FOR value and the TO value and return +1 if + ; FOR > TO, 0 if FOR = TO and -1 if FOR < TO. the value + ; here (+/-1) is then compared to that result and if they + ; are the same (+ve and FOR > TO or -ve and FOR < TO) then + ; the loop is done + JSR LAB_1B5B ; push sign, round FAC1 and put on stack + LDA Frnxth ; get var pointer for FOR/NEXT high byte + PHA ; push on stack + LDA Frnxtl ; get var pointer for FOR/NEXT low byte + PHA ; push on stack + LDA #TK_FOR ; get FOR token + PHA ; push on stack + +; interpreter inner loop + +LAB_15C2 + JSR LAB_1629 ; do CRTL-C check vector + LDA Bpntrl ; get BASIC execute pointer low byte + LDY Bpntrh ; get BASIC execute pointer high byte + + LDX Clineh ; continue line is $FFxx for immediate mode + ; ($00xx for RUN from immediate mode) + INX ; increment it (now $00 if immediate mode) + BEQ LAB_15D1 ; branch if null (immediate mode) + + STA Cpntrl ; save continue pointer low byte + STY Cpntrh ; save continue pointer high byte +LAB_15D1 + LDY #$00 ; clear index + LDA (Bpntrl),Y ; get next byte + BEQ LAB_15DC ; branch if null [EOL] + + CMP #':' ; compare with ":" + BEQ LAB_15F6 ; branch if = (statement separator) + +LAB_15D9 + JMP LAB_SNER ; else syntax error then warm start + + ; have reached [EOL] +LAB_15DC + LDY #$02 ; set index + LDA (Bpntrl),Y ; get next line pointer high byte + CLC ; clear carry for no "BREAK" message + BEQ LAB_1651 ; if null go to immediate mode (was immediate or [EOT] + ; marker) + + INY ; increment index + LDA (Bpntrl),Y ; get line # low byte + STA Clinel ; save current line low byte + INY ; increment index + LDA (Bpntrl),Y ; get line # high byte + STA Clineh ; save current line high byte + TYA ; A now = 4 + ADC Bpntrl ; add BASIC execute pointer low byte + STA Bpntrl ; save BASIC execute pointer low byte + BCC LAB_15F6 ; branch if no overflow + + INC Bpntrh ; else increment BASIC execute pointer high byte +LAB_15F6 + JSR LAB_IGBY ; increment and scan memory + +LAB_15F9 + JSR LAB_15FF ; go interpret BASIC code from (Bpntrl) + +LAB_15FC + JMP LAB_15C2 ; loop + +; interpret BASIC code from (Bpntrl) + +LAB_15FF + BEQ LAB_1628 ; exit if zero [EOL] + +LAB_1602 + ASL ; *2 bytes per vector and normalise token + BCS LAB_1609 ; branch if was token + + JMP LAB_LET ; else go do implied LET + +LAB_1609 + CMP #[TK_TAB-$80]*2 ; compare normalised token * 2 with TAB + BCS LAB_15D9 ; branch if A>=TAB (do syntax error then warm start) + ; only tokens before TAB can start a line + TAY ; copy to index + LDA LAB_CTBL+1,Y ; get vector high byte + PHA ; onto stack + LDA LAB_CTBL,Y ; get vector low byte + PHA ; onto stack + JMP LAB_IGBY ; jump to increment and scan memory + ; then "return" to vector + +; CTRL-C check jump. this is called as a subroutine but exits back via a jump if a +; key press is detected. + +LAB_1629 + JMP (VEC_CC) ; ctrl c check vector + +; if there was a key press it gets back here .. + +LAB_1636 + CMP #$03 ; compare with CTRL-C + +; perform STOP + +LAB_STOP + BCS LAB_163B ; branch if token follows STOP + ; else just END +; END + +LAB_END + CLC ; clear the carry, indicate a normal program end +LAB_163B + BNE LAB_167A ; if wasn't CTRL-C or there is a following byte return + + LDA Bpntrh ; get the BASIC execute pointer high byte + EOR #>Ibuffs ; compare with buffer address high byte (Cb unchanged) + BEQ LAB_164F ; branch if the BASIC pointer is in the input buffer + ; (can't continue in immediate mode) + + ; else .. + EOR #>Ibuffs ; correct the bits + LDY Bpntrl ; get BASIC execute pointer low byte + STY Cpntrl ; save continue pointer low byte + STA Cpntrh ; save continue pointer high byte +LAB_1647 + LDA Clinel ; get current line low byte + LDY Clineh ; get current line high byte + STA Blinel ; save break line low byte + STY Blineh ; save break line high byte +LAB_164F + PLA ; pull return address low + PLA ; pull return address high +LAB_1651 + BCC LAB_165E ; if was program end just do warm start + + ; else .. + LDA #LAB_BMSG ; point to "Break" high byte + JMP LAB_1269 ; print "Break" and do warm start + +LAB_165E + JMP LAB_1274 ; go do warm start + +; perform RESTORE + +LAB_RESTORE + BNE LAB_RESTOREn ; branch if next character not null (RESTORE n) + +LAB_161A + SEC ; set carry for subtract + LDA Smeml ; get start of mem low byte + SBC #$01 ; -1 + LDY Smemh ; get start of mem high byte + BCS LAB_1624 ; branch if no underflow + +LAB_uflow + DEY ; else decrement high byte +LAB_1624 + STA Dptrl ; save DATA pointer low byte + STY Dptrh ; save DATA pointer high byte +LAB_1628 + RTS + + ; is RESTORE n +LAB_RESTOREn + JSR LAB_GFPN ; get fixed-point number into temp integer + JSR LAB_SNBL ; scan for next BASIC line + LDA Clineh ; get current line high byte + CMP Itemph ; compare with temporary integer high byte + BCS LAB_reset_search ; branch if >= (start search from beginning) + + TYA ; else copy line index to A + SEC ; set carry (+1) + ADC Bpntrl ; add BASIC execute pointer low byte + LDX Bpntrh ; get BASIC execute pointer high byte + BCC LAB_go_search ; branch if no overflow to high byte + + INX ; increment high byte + BCS LAB_go_search ; branch always (can never be carry clear) + +; search for line # in temp (Itempl/Itemph) from start of mem pointer (Smeml) + +LAB_reset_search + LDA Smeml ; get start of mem low byte + LDX Smemh ; get start of mem high byte + +; search for line # in temp (Itempl/Itemph) from (AX) + +LAB_go_search + + JSR LAB_SHLN ; search Basic for temp integer line number from AX + BCS LAB_line_found ; if carry set go set pointer + + JMP LAB_16F7 ; else go do "Undefined statement" error + +LAB_line_found + ; carry already set for subtract + LDA Baslnl ; get pointer low byte + SBC #$01 ; -1 + LDY Baslnh ; get pointer high byte + BCS LAB_1624 ; branch if no underflow (save DATA pointer and return) + + BCC LAB_uflow ; else decrement high byte then save DATA pointer and + ; return (branch always) + +; perform NULL + +LAB_NULL + JSR LAB_GTBY ; get byte parameter + STX Nullct ; save new NULL count +LAB_167A + RTS + +; perform CONT + +LAB_CONT + BNE LAB_167A ; if following byte exit to do syntax error + + LDY Cpntrh ; get continue pointer high byte + BNE LAB_166C ; go do continue if we can + + LDX #$1E ; error code $1E ("Can't continue" error) + JMP LAB_XERR ; do error #X, then warm start + + ; we can continue so .. +LAB_166C + LDA #TK_ON ; set token for ON + JSR LAB_IRQ ; set IRQ flags + LDA #TK_ON ; set token for ON + JSR LAB_NMI ; set NMI flags + + STY Bpntrh ; save BASIC execute pointer high byte + LDA Cpntrl ; get continue pointer low byte + STA Bpntrl ; save BASIC execute pointer low byte + LDA Blinel ; get break line low byte + LDY Blineh ; get break line high byte + STA Clinel ; set current line low byte + STY Clineh ; set current line high byte + RTS + +; perform RUN + +LAB_RUN + BNE LAB_1696 ; branch if RUN n + JMP LAB_1477 ; reset execution to start, clear variables, flush stack and + ; return + +; does RUN n + +LAB_1696 + JSR LAB_147A ; go do "CLEAR" + BEQ LAB_16B0 ; get n and do GOTO n (branch always as CLEAR sets Z=1) + +; perform DO + +LAB_DO + LDA #$05 ; need 5 bytes for DO + JSR LAB_1212 ; check room on stack for A bytes + LDA Bpntrh ; get BASIC execute pointer high byte + PHA ; push on stack + LDA Bpntrl ; get BASIC execute pointer low byte + PHA ; push on stack + LDA Clineh ; get current line high byte + PHA ; push on stack + LDA Clinel ; get current line low byte + PHA ; push on stack + LDA #TK_DO ; token for DO + PHA ; push on stack + JSR LAB_GBYT ; scan memory + JMP LAB_15C2 ; go do interpreter inner loop + +; perform GOSUB + +LAB_GOSUB + LDA #$05 ; need 5 bytes for GOSUB + JSR LAB_1212 ; check room on stack for A bytes + LDA Bpntrh ; get BASIC execute pointer high byte + PHA ; push on stack + LDA Bpntrl ; get BASIC execute pointer low byte + PHA ; push on stack + LDA Clineh ; get current line high byte + PHA ; push on stack + LDA Clinel ; get current line low byte + PHA ; push on stack + LDA #TK_GOSUB ; token for GOSUB + PHA ; push on stack +LAB_16B0 + JSR LAB_GBYT ; scan memory + JSR LAB_GOTO ; perform GOTO n + JMP LAB_15C2 ; go do interpreter inner loop + ; (can't RTS, we used the stack!) + +; perform GOTO + +LAB_GOTO + JSR LAB_GFPN ; get fixed-point number into temp integer + JSR LAB_SNBL ; scan for next BASIC line + LDA Clineh ; get current line high byte + CMP Itemph ; compare with temporary integer high byte + BCS LAB_16D0 ; branch if >= (start search from beginning) + + TYA ; else copy line index to A + SEC ; set carry (+1) + ADC Bpntrl ; add BASIC execute pointer low byte + LDX Bpntrh ; get BASIC execute pointer high byte + BCC LAB_16D4 ; branch if no overflow to high byte + + INX ; increment high byte + BCS LAB_16D4 ; branch always (can never be carry) + +; search for line # in temp (Itempl/Itemph) from start of mem pointer (Smeml) + +LAB_16D0 + LDA Smeml ; get start of mem low byte + LDX Smemh ; get start of mem high byte + +; search for line # in temp (Itempl/Itemph) from (AX) + +LAB_16D4 + JSR LAB_SHLN ; search Basic for temp integer line number from AX + BCC LAB_16F7 ; if carry clear go do "Undefined statement" error + ; (unspecified statement) + + ; carry already set for subtract + LDA Baslnl ; get pointer low byte + SBC #$01 ; -1 + STA Bpntrl ; save BASIC execute pointer low byte + LDA Baslnh ; get pointer high byte + SBC #$00 ; subtract carry + STA Bpntrh ; save BASIC execute pointer high byte +LAB_16E5 + RTS + +LAB_DONOK + LDX #$22 ; error code $22 ("LOOP without DO" error) + JMP LAB_XERR ; do error #X, then warm start + +; perform LOOP + +LAB_LOOP + TAY ; save following token + TSX ; copy stack pointer + LDA LAB_STAK+3,X ; get token byte from stack + CMP #TK_DO ; compare with DO token + BNE LAB_DONOK ; branch if no matching DO + + INX ; dump calling routine return address + INX ; dump calling routine return address + TXS ; correct stack + TYA ; get saved following token back + BEQ LoopAlways ; if no following token loop forever + ; (stack pointer in X) + + CMP #':' ; could be ':' + BEQ LoopAlways ; if :... loop forever + + SBC #TK_UNTIL ; subtract token for UNTIL, we know carry is set here + TAX ; copy to X (if it was UNTIL then Y will be correct) + BEQ DoRest ; branch if was UNTIL + + DEX ; decrement result + BNE LAB_16FC ; if not WHILE go do syntax error and warm start + ; only if the token was WHILE will this fail + + DEX ; set invert result byte +DoRest + STX Frnxth ; save invert result byte + JSR LAB_IGBY ; increment and scan memory + JSR LAB_EVEX ; evaluate expression + LDA FAC1_e ; get FAC1 exponent + BEQ DoCmp ; if =0 go do straight compare + + LDA #$FF ; else set all bits +DoCmp + TSX ; copy stack pointer + EOR Frnxth ; EOR with invert byte + BNE LoopDone ; if <> 0 clear stack and back to interpreter loop + + ; loop condition wasn't met so do it again +LoopAlways + LDA LAB_STAK+2,X ; get current line low byte + STA Clinel ; save current line low byte + LDA LAB_STAK+3,X ; get current line high byte + STA Clineh ; save current line high byte + LDA LAB_STAK+4,X ; get BASIC execute pointer low byte + STA Bpntrl ; save BASIC execute pointer low byte + LDA LAB_STAK+5,X ; get BASIC execute pointer high byte + STA Bpntrh ; save BASIC execute pointer high byte + JSR LAB_GBYT ; scan memory + JMP LAB_15C2 ; go do interpreter inner loop + + ; clear stack and back to interpreter loop +LoopDone + INX ; dump DO token + INX ; dump current line low byte + INX ; dump current line high byte + INX ; dump BASIC execute pointer low byte + INX ; dump BASIC execute pointer high byte + TXS ; correct stack + JMP LAB_DATA ; go perform DATA (find : or [EOL]) + +; do the return without gosub error + +LAB_16F4 + LDX #$04 ; error code $04 ("RETURN without GOSUB" error) + .byte $2C ; makes next line BIT LAB_0EA2 + +LAB_16F7 ; do undefined statement error + LDX #$0E ; error code $0E ("Undefined statement" error) + JMP LAB_XERR ; do error #X, then warm start + +; perform RETURN + +LAB_RETURN + BNE LAB_16E5 ; exit if following token (to allow syntax error) + +LAB_16E8 + PLA ; dump calling routine return address + PLA ; dump calling routine return address + PLA ; pull token + CMP #TK_GOSUB ; compare with GOSUB token + BNE LAB_16F4 ; branch if no matching GOSUB + +LAB_16FF + PLA ; pull current line low byte + STA Clinel ; save current line low byte + PLA ; pull current line high byte + STA Clineh ; save current line high byte + PLA ; pull BASIC execute pointer low byte + STA Bpntrl ; save BASIC execute pointer low byte + PLA ; pull BASIC execute pointer high byte + STA Bpntrh ; save BASIC execute pointer high byte + + ; now do the DATA statement as we could be returning into + ; the middle of an ON GOSUB n,m,p,q line + ; (the return address used by the DATA statement is the one + ; pushed before the GOSUB was executed!) + +; perform DATA + +LAB_DATA + JSR LAB_SNBS ; scan for next BASIC statement ([:] or [EOL]) + + ; set BASIC execute pointer +LAB_170F + TYA ; copy index to A + CLC ; clear carry for add + ADC Bpntrl ; add BASIC execute pointer low byte + STA Bpntrl ; save BASIC execute pointer low byte + BCC LAB_1719 ; skip next if no carry + + INC Bpntrh ; else increment BASIC execute pointer high byte +LAB_1719 + RTS + +LAB_16FC + JMP LAB_SNER ; do syntax error then warm start + +; scan for next BASIC statement ([:] or [EOL]) +; returns Y as index to [:] or [EOL] + +LAB_SNBS + LDX #':' ; set look for character = ":" + .byte $2C ; makes next line BIT $00A2 + +; scan for next BASIC line +; returns Y as index to [EOL] + +LAB_SNBL + LDX #$00 ; set alt search character = [EOL] + LDY #$00 ; set search character = [EOL] + STY Asrch ; store search character +LAB_1725 + TXA ; get alt search character + EOR Asrch ; toggle search character, effectively swap with $00 + STA Asrch ; save swapped search character +LAB_172D + LDA (Bpntrl),Y ; get next byte + BEQ LAB_1719 ; exit if null [EOL] + + CMP Asrch ; compare with search character + BEQ LAB_1719 ; exit if found + + INY ; increment index + CMP #$22 ; compare current character with open quote + BNE LAB_172D ; if not open quote go get next character + + BEQ LAB_1725 ; if found go swap search character for alt search character + +; perform IF + +LAB_IF + JSR LAB_EVEX ; evaluate the expression + JSR LAB_GBYT ; scan memory + CMP #TK_THEN ; compare with THEN token + BEQ LAB_174B ; if it was THEN go do IF + + ; wasn't IF .. THEN so must be IF .. GOTO + CMP #TK_GOTO ; compare with GOTO token + BNE LAB_16FC ; if it wasn't GOTO go do syntax error + + LDX Bpntrl ; save the basic pointer low byte + LDY Bpntrh ; save the basic pointer high byte + JSR LAB_IGBY ; increment and scan memory + BCS LAB_16FC ; if not numeric go do syntax error + + STX Bpntrl ; restore the basic pointer low byte + STY Bpntrh ; restore the basic pointer high byte +LAB_174B + LDA FAC1_e ; get FAC1 exponent + BEQ LAB_174E ; if the result was zero go look for an ELSE + + JSR LAB_IGBY ; else increment and scan memory + BCS LAB_174D ; if not numeric go do var or keyword + +LAB_174C + JMP LAB_GOTO ; else was numeric so do GOTO n + + ; is var or keyword +LAB_174D + CMP #TK_RETURN ; compare the byte with the token for RETURN + BNE LAB_174G ; if it wasn't RETURN go interpret BASIC code from (Bpntrl) + ; and return to this code to process any following code + + JMP LAB_1602 ; else it was RETURN so interpret BASIC code from (Bpntrl) + ; but don't return here + +LAB_174G + JSR LAB_15FF ; interpret BASIC code from (Bpntrl) + +; the IF was executed and there may be a following ELSE so the code needs to return +; here to check and ignore the ELSE if present + + LDY #$00 ; clear the index + LDA (Bpntrl),Y ; get the next BASIC byte + CMP #TK_ELSE ; compare it with the token for ELSE + BEQ LAB_DATA ; if ELSE ignore the following statement + +; there was no ELSE so continue execution of IF THEN [: ]. any +; following ELSE will, correctly, cause a syntax error + + RTS ; else return to the interpreter inner loop + +; perform ELSE after IF + +LAB_174E + LDY #$00 ; clear the BASIC byte index + LDX #$01 ; clear the nesting depth +LAB_1750 + INY ; increment the BASIC byte index + LDA (Bpntrl),Y ; get the next BASIC byte + BEQ LAB_1753 ; if EOL go add the pointer and return + + CMP #TK_IF ; compare the byte with the token for IF + BNE LAB_1752 ; if not IF token skip the depth increment + + INX ; else increment the nesting depth .. + BNE LAB_1750 ; .. and continue looking + +LAB_1752 + CMP #TK_ELSE ; compare the byte with the token for ELSE + BNE LAB_1750 ; if not ELSE token continue looking + + DEX ; was ELSE so decrement the nesting depth + BNE LAB_1750 ; loop if still nested + + INY ; increment the BASIC byte index past the ELSE + +; found the matching ELSE, now do <{n|statement}> + +LAB_1753 + TYA ; else copy line index to A + CLC ; clear carry for add + ADC Bpntrl ; add the BASIC execute pointer low byte + STA Bpntrl ; save the BASIC execute pointer low byte + BCC LAB_1754 ; branch if no overflow to high byte + + INC Bpntrh ; else increment the BASIC execute pointer high byte +LAB_1754 + JSR LAB_GBYT ; scan memory + BCC LAB_174C ; if numeric do GOTO n + ; the code will return to the interpreter loop at the + ; tail end of the GOTO + + JMP LAB_15FF ; interpret BASIC code from (Bpntrl) + ; the code will return to the interpreter loop at the + ; tail end of the + +; perform REM, skip (rest of) line + +LAB_REM + JSR LAB_SNBL ; scan for next BASIC line + JMP LAB_170F ; go set BASIC execute pointer and return, branch always + +LAB_16FD + JMP LAB_SNER ; do syntax error then warm start + +; perform ON + +LAB_ON + CMP #TK_IRQ ; was it IRQ token ? + BNE LAB_NOIN ; if not go check NMI + + JMP LAB_SIRQ ; else go set-up IRQ + +LAB_NOIN + CMP #TK_NMI ; was it NMI token ? + BNE LAB_NONM ; if not go do normal ON command + + JMP LAB_SNMI ; else go set-up NMI + +LAB_NONM + JSR LAB_GTBY ; get byte parameter + PHA ; push GOTO/GOSUB token + CMP #TK_GOSUB ; compare with GOSUB token + BEQ LAB_176B ; branch if GOSUB + + CMP #TK_GOTO ; compare with GOTO token +LAB_1767 + BNE LAB_16FD ; if not GOTO do syntax error then warm start + + +; next character was GOTO or GOSUB + +LAB_176B + DEC FAC1_3 ; decrement index (byte value) + BNE LAB_1773 ; branch if not zero + + PLA ; pull GOTO/GOSUB token + JMP LAB_1602 ; go execute it + +LAB_1773 + JSR LAB_IGBY ; increment and scan memory + JSR LAB_GFPN ; get fixed-point number into temp integer (skip this n) + ; (we could LDX #',' and JSR LAB_SNBL+2, then we + ; just BNE LAB_176B for the loop. should be quicker .. + ; no we can't, what if we meet a colon or [EOL]?) + CMP #$2C ; compare next character with "," + BEQ LAB_176B ; loop if "," + +LAB_177E + PLA ; else pull keyword token (run out of options) + ; also dump +/-1 pointer low byte and exit +LAB_177F + RTS + +; takes n * 106 + 11 cycles where n is the number of digits + +; get fixed-point number into temp integer + +LAB_GFPN + LDX #$00 ; clear reg + STX Itempl ; clear temporary integer low byte +LAB_1785 + STX Itemph ; save temporary integer high byte + BCS LAB_177F ; return if carry set, end of scan, character was + ; not 0-9 + + CPX #$19 ; compare high byte with $19 + TAY ; ensure Zb = 0 if the branch is taken + BCS LAB_1767 ; branch if >=, makes max line # 63999 because next + ; bit does *$0A, = 64000, compare at target will fail + ; and do syntax error + + SBC #'0'-1 ; subtract "0", $2F + carry, from byte + TAY ; copy binary digit + LDA Itempl ; get temporary integer low byte + ASL ; *2 low byte + ROL Itemph ; *2 high byte + ASL ; *2 low byte + ROL Itemph ; *2 high byte, *4 + ADC Itempl ; + low byte, *5 + STA Itempl ; save it + TXA ; get high byte copy to A + ADC Itemph ; + high byte, *5 + ASL Itempl ; *2 low byte, *10d + ROL ; *2 high byte, *10d + TAX ; copy high byte back to X + TYA ; get binary digit back + ADC Itempl ; add number low byte + STA Itempl ; save number low byte + BCC LAB_17B3 ; if no overflow to high byte get next character + + INX ; else increment high byte +LAB_17B3 + JSR LAB_IGBY ; increment and scan memory + JMP LAB_1785 ; loop for next character + +; perform DEC + +LAB_DEC + LDA #LAB_259C ; set +/-1 pointer high byte (both the same) + JSR LAB_246C ; add (AY) to FAC1 + JSR LAB_PFAC ; pack FAC1 into variable (Lvarpl) + + JSR LAB_GBYT ; scan memory + CMP #',' ; compare with "," + BNE LAB_177E ; exit if not "," (either end or error) + + ; was "," so another INCR variable to do + JSR LAB_IGBY ; increment and scan memory + JMP LAB_17B7 ; go do next var + +IncrErr + JMP LAB_1ABC ; do "Type mismatch" error then warm start + +; perform LET + +LAB_LET + JSR LAB_GVAR ; get var address + STA Lvarpl ; save var address low byte + STY Lvarph ; save var address high byte + LDA #TK_EQUAL ; get = token + JSR LAB_SCCA ; scan for CHR$(A), else do syntax error then warm start + LDA Dtypef ; get data type flag, $FF=string, $00=numeric + PHA ; push data type flag + JSR LAB_EVEX ; evaluate expression + PLA ; pop data type flag + ROL ; set carry if type = string + JSR LAB_CKTM ; type match check, set C for string + BNE LAB_17D5 ; branch if string + + JMP LAB_PFAC ; pack FAC1 into variable (Lvarpl) and return + +; string LET + +LAB_17D5 + LDY #$02 ; set index to pointer high byte + LDA (des_pl),Y ; get string pointer high byte + CMP Sstorh ; compare bottom of string space high byte + BCC LAB_17F4 ; if less assign value and exit (was in program memory) + + BNE LAB_17E6 ; branch if > + ; else was equal so compare low bytes + DEY ; decrement index + LDA (des_pl),Y ; get pointer low byte + CMP Sstorl ; compare bottom of string space low byte + BCC LAB_17F4 ; if less assign value and exit (was in program memory) + + ; pointer was >= to bottom of string space pointer +LAB_17E6 + LDY des_ph ; get descriptor pointer high byte + CPY Svarh ; compare start of vars high byte + BCC LAB_17F4 ; branch if less (descriptor is on stack) + + BNE LAB_17FB ; branch if greater (descriptor is not on stack) + + ; else high bytes were equal so .. + LDA des_pl ; get descriptor pointer low byte + CMP Svarl ; compare start of vars low byte + BCS LAB_17FB ; branch if >= (descriptor is not on stack) + +LAB_17F4 + LDA des_pl ; get descriptor pointer low byte + LDY des_ph ; get descriptor pointer high byte + JMP LAB_1811 ; clean stack, copy descriptor to variable and return + + ; make space and copy string +LAB_17FB + LDY #$00 ; index to length + LDA (des_pl),Y ; get string length + JSR LAB_209C ; copy string + LDA des_2l ; get descriptor pointer low byte + LDY des_2h ; get descriptor pointer high byte + STA ssptr_l ; save descriptor pointer low byte + STY ssptr_h ; save descriptor pointer high byte + JSR LAB_228A ; copy string from descriptor (sdescr) to (Sutill) + LDA #FAC1_e ; get descriptor pointer high byte + + ; clean stack and assign value to string variable +LAB_1811 + STA des_2l ; save descriptor_2 pointer low byte + STY des_2h ; save descriptor_2 pointer high byte + JSR LAB_22EB ; clean descriptor stack, YA = pointer + LDY #$00 ; index to length + LDA (des_2l),Y ; get string length + STA (Lvarpl),Y ; copy to let string variable + INY ; index to string pointer low byte + LDA (des_2l),Y ; get string pointer low byte + STA (Lvarpl),Y ; copy to let string variable + INY ; index to string pointer high byte + LDA (des_2l),Y ; get string pointer high byte + STA (Lvarpl),Y ; copy to let string variable + RTS + +; perform GET + +LAB_GET + JSR LAB_GVAR ; get var address + STA Lvarpl ; save var address low byte + STY Lvarph ; save var address high byte + JSR INGET ; get input byte + LDX Dtypef ; get data type flag, $FF=string, $00=numeric + BMI LAB_GETS ; go get string character + + ; was numeric get + TAY ; copy character to Y + JSR LAB_1FD0 ; convert Y to byte in FAC1 + JMP LAB_PFAC ; pack FAC1 into variable (Lvarpl) and return + +LAB_GETS + PHA ; save character + LDA #$01 ; string is single byte + BCS LAB_IsByte ; branch if byte received + + PLA ; string is null +LAB_IsByte + JSR LAB_MSSP ; make string space A bytes long A=$AC=length, + ; X=$AD=Sutill=ptr low byte, Y=$AE=Sutilh=ptr high byte + BEQ LAB_NoSt ; skip store if null string + + PLA ; get character back + LDY #$00 ; clear index + STA (str_pl),Y ; save byte in string (byte IS string!) +LAB_NoSt + JSR LAB_RTST ; check for space on descriptor stack then put address + ; and length on descriptor stack and update stack pointers + + JMP LAB_17D5 ; do string LET and return + +; perform PRINT + +LAB_1829 + JSR LAB_18C6 ; print string from Sutill/Sutilh +LAB_182C + JSR LAB_GBYT ; scan memory + +; PRINT + +LAB_PRINT + BEQ LAB_CRLF ; if nothing following just print CR/LF + +LAB_1831 + CMP #TK_TAB ; compare with TAB( token + BEQ LAB_18A2 ; go do TAB/SPC + + CMP #TK_SPC ; compare with SPC( token + BEQ LAB_18A2 ; go do TAB/SPC + + CMP #',' ; compare with "," + BEQ LAB_188B ; go do move to next TAB mark + + CMP #';' ; compare with ";" + BEQ LAB_18BD ; if ";" continue with PRINT processing + + JSR LAB_EVEX ; evaluate expression + BIT Dtypef ; test data type flag, $FF=string, $00=numeric + BMI LAB_1829 ; branch if string + + JSR LAB_296E ; convert FAC1 to string + JSR LAB_20AE ; print " terminated string to Sutill/Sutilh + LDY #$00 ; clear index + +; don't check fit if terminal width byte is zero + + LDA TWidth ; get terminal width byte + BEQ LAB_185E ; skip check if zero + + SEC ; set carry for subtract + SBC TPos ; subtract terminal position + SBC (des_pl),Y ; subtract string length + BCS LAB_185E ; branch if less than terminal width + + JSR LAB_CRLF ; else print CR/LF +LAB_185E + JSR LAB_18C6 ; print string from Sutill/Sutilh + BEQ LAB_182C ; always go continue processing line + +; CR/LF return to BASIC from BASIC input handler + +LAB_1866 + LDA #$00 ; clear byte + STA Ibuffs,X ; null terminate input + LDX #Ibuffs ; set Y to buffer start-1 high byte + +; print CR/LF + +LAB_CRLF + LDA #$0D ; load [CR] + JSR LAB_PRNA ; go print the character + LDA #$0A ; load [LF] + BNE LAB_PRNA ; go print the character and return, branch always + +LAB_188B + LDA TPos ; get terminal position + CMP Iclim ; compare with input column limit + BCC LAB_1897 ; branch if less + + JSR LAB_CRLF ; else print CR/LF (next line) + BNE LAB_18BD ; continue with PRINT processing (branch always) + +LAB_1897 + SEC ; set carry for subtract +LAB_1898 + SBC TabSiz ; subtract TAB size + BCS LAB_1898 ; loop if result was +ve + + EOR #$FF ; complement it + ADC #$01 ; +1 (twos complement) + BNE LAB_18B6 ; always print A spaces (result is never $00) + + ; do TAB/SPC +LAB_18A2 + PHA ; save token + JSR LAB_SGBY ; scan and get byte parameter + CMP #$29 ; is next character ) + BNE LAB_1910 ; if not do syntax error then warm start + + PLA ; get token back + CMP #TK_TAB ; was it TAB ? + BNE LAB_18B7 ; if not go do SPC + + ; calculate TAB offset + TXA ; copy integer value to A + SBC TPos ; subtract terminal position + BCC LAB_18BD ; branch if result was < 0 (can't TAB backwards) + + ; print A spaces +LAB_18B6 + TAX ; copy result to X +LAB_18B7 + TXA ; set flags on size for SPC + BEQ LAB_18BD ; branch if result was = $0, already here + + ; print X spaces +LAB_18BA + JSR LAB_18E0 ; print " " + DEX ; decrement count + BNE LAB_18BA ; loop if not all done + + ; continue with PRINT processing +LAB_18BD + JSR LAB_IGBY ; increment and scan memory + BNE LAB_1831 ; if more to print go do it + + RTS + +; print null terminated string from memory + +LAB_18C3 + JSR LAB_20AE ; print " terminated string to Sutill/Sutilh + +; print string from Sutill/Sutilh + +LAB_18C6 + JSR LAB_22B6 ; pop string off descriptor stack, or from top of string + ; space returns with A = length, X=$71=pointer low byte, + ; Y=$72=pointer high byte + LDY #$00 ; reset index + TAX ; copy length to X + BEQ LAB_188C ; exit (RTS) if null string + +LAB_18CD + + LDA (ut1_pl),Y ; get next byte + JSR LAB_PRNA ; go print the character + INY ; increment index + DEX ; decrement count + BNE LAB_18CD ; loop if not done yet + + RTS + + ; Print single format character +; print " " + +LAB_18E0 + LDA #$20 ; load " " + .byte $2C ; change next line to BIT LAB_3FA9 + +; print "?" character + +LAB_18E3 + LDA #$3F ; load "?" character + +; print character in A +; now includes the null handler +; also includes infinite line length code +; note! some routines expect this one to exit with Zb=0 + +LAB_PRNA + CMP #' ' ; compare with " " + BCC LAB_18F9 ; branch if less (non printing) + + ; else printable character + PHA ; save the character + +; don't check fit if terminal width byte is zero + + LDA TWidth ; get terminal width + BNE LAB_18F0 ; branch if not zero (not infinite length) + +; is "infinite line" so check TAB position + + LDA TPos ; get position + SBC TabSiz ; subtract TAB size, carry set by CMP #$20 above + BNE LAB_18F7 ; skip reset if different + + STA TPos ; else reset position + BEQ LAB_18F7 ; go print character + +LAB_18F0 + CMP TPos ; compare with terminal character position + BNE LAB_18F7 ; branch if not at end of line + + JSR LAB_CRLF ; else print CR/LF +LAB_18F7 + INC TPos ; increment terminal position + PLA ; get character back +LAB_18F9 + JSR V_OUTP ; output byte via output vector + CMP #$0D ; compare with [CR] + BNE LAB_188A ; branch if not [CR] + + ; else print nullct nulls after the [CR] + STX TempB ; save buffer index + LDX Nullct ; get null count + BEQ LAB_1886 ; branch if no nulls + + LDA #$00 ; load [NULL] +LAB_1880 + JSR LAB_PRNA ; go print the character + DEX ; decrement count + BNE LAB_1880 ; loop if not all done + + LDA #$0D ; restore the character (and set the flags) +LAB_1886 + STX TPos ; clear terminal position (X always = zero when we get here) + LDX TempB ; restore buffer index +LAB_188A + AND #$FF ; set the flags +LAB_188C + RTS + +; handle bad input data + +LAB_1904 + LDA Imode ; get input mode flag, $00=INPUT, $00=READ + BPL LAB_1913 ; branch if INPUT (go do redo) + + LDA Dlinel ; get current DATA line low byte + LDY Dlineh ; get current DATA line high byte + STA Clinel ; save current line low byte + STY Clineh ; save current line high byte +LAB_1910 + JMP LAB_SNER ; do syntax error then warm start + + ; mode was INPUT +LAB_1913 + LDA #LAB_REDO ; point to redo message (high addr) + JSR LAB_18C3 ; print null terminated string from memory + LDA Cpntrl ; get continue pointer low byte + LDY Cpntrh ; get continue pointer high byte + STA Bpntrl ; save BASIC execute pointer low byte + STY Bpntrh ; save BASIC execute pointer high byte + RTS + +; perform INPUT + +LAB_INPUT + CMP #$22 ; compare next byte with open quote + BNE LAB_1934 ; branch if no prompt string + + JSR LAB_1BC1 ; print "..." string + LDA #$3B ; load A with ";" + JSR LAB_SCCA ; scan for CHR$(A), else do syntax error then warm start + JSR LAB_18C6 ; print string from Sutill/Sutilh + + ; done with prompt, now get data +LAB_1934 + JSR LAB_CKRN ; check not Direct, back here if ok + JSR LAB_INLN ; print "? " and get BASIC input + LDA #$00 ; set mode = INPUT + CMP Ibuffs ; test first byte in buffer + BNE LAB_1953 ; branch if not null input + + CLC ; was null input so clear carry to exit program + JMP LAB_1647 ; go do BREAK exit + +; perform READ + +LAB_READ + LDX Dptrl ; get DATA pointer low byte + LDY Dptrh ; get DATA pointer high byte + LDA #$80 ; set mode = READ + +LAB_1953 + STA Imode ; set input mode flag, $00=INPUT, $80=READ + STX Rdptrl ; save READ pointer low byte + STY Rdptrh ; save READ pointer high byte + + ; READ or INPUT next variable from list +LAB_195B + JSR LAB_GVAR ; get (var) address + STA Lvarpl ; save address low byte + STY Lvarph ; save address high byte + LDA Bpntrl ; get BASIC execute pointer low byte + LDY Bpntrh ; get BASIC execute pointer high byte + STA Itempl ; save as temporary integer low byte + STY Itemph ; save as temporary integer high byte + LDX Rdptrl ; get READ pointer low byte + LDY Rdptrh ; get READ pointer high byte + STX Bpntrl ; set BASIC execute pointer low byte + STY Bpntrh ; set BASIC execute pointer high byte + JSR LAB_GBYT ; scan memory + BNE LAB_1988 ; branch if not null + + ; pointer was to null entry + BIT Imode ; test input mode flag, $00=INPUT, $80=READ + BMI LAB_19DD ; branch if READ + + ; mode was INPUT + JSR LAB_18E3 ; print "?" character (double ? for extended input) + JSR LAB_INLN ; print "? " and get BASIC input + STX Bpntrl ; set BASIC execute pointer low byte + STY Bpntrh ; set BASIC execute pointer high byte +LAB_1985 + JSR LAB_GBYT ; scan memory +LAB_1988 + BIT Dtypef ; test data type flag, $FF=string, $00=numeric + BPL LAB_19B0 ; branch if numeric + + ; else get string + STA Srchc ; save search character + CMP #$22 ; was it " ? + BEQ LAB_1999 ; branch if so + + LDA #':' ; else search character is ":" + STA Srchc ; set new search character + LDA #',' ; other search character is "," + CLC ; clear carry for add +LAB_1999 + STA Asrch ; set second search character + LDA Bpntrl ; get BASIC execute pointer low byte + LDY Bpntrh ; get BASIC execute pointer high byte + + ADC #$00 ; c is =1 if we came via the BEQ LAB_1999, else =0 + BCC LAB_19A4 ; branch if no execute pointer low byte rollover + + INY ; else increment high byte +LAB_19A4 + JSR LAB_20B4 ; print Srchc or Asrch terminated string to Sutill/Sutilh + JSR LAB_23F3 ; restore BASIC execute pointer from temp (Btmpl/Btmph) + JSR LAB_17D5 ; go do string LET + JMP LAB_19B6 ; go check string terminator + + ; get numeric INPUT +LAB_19B0 + JSR LAB_2887 ; get FAC1 from string + JSR LAB_PFAC ; pack FAC1 into (Lvarpl) +LAB_19B6 + JSR LAB_GBYT ; scan memory + BEQ LAB_19C5 ; branch if null (last entry) + + CMP #',' ; else compare with "," + BEQ LAB_19C2 ; branch if "," + + JMP LAB_1904 ; else go handle bad input data + + ; got good input data +LAB_19C2 + JSR LAB_IGBY ; increment and scan memory +LAB_19C5 + LDA Bpntrl ; get BASIC execute pointer low byte (temp READ/INPUT ptr) + LDY Bpntrh ; get BASIC execute pointer high byte (temp READ/INPUT ptr) + STA Rdptrl ; save for now + STY Rdptrh ; save for now + LDA Itempl ; get temporary integer low byte (temp BASIC execute ptr) + LDY Itemph ; get temporary integer high byte (temp BASIC execute ptr) + STA Bpntrl ; set BASIC execute pointer low byte + STY Bpntrh ; set BASIC execute pointer high byte + JSR LAB_GBYT ; scan memory + BEQ LAB_1A03 ; if null go do extra ignored message + + JSR LAB_1C01 ; else scan for "," , else do syntax error then warm start + JMP LAB_195B ; go INPUT next variable from list + + ; find next DATA statement or do "Out of DATA" error +LAB_19DD + JSR LAB_SNBS ; scan for next BASIC statement ([:] or [EOL]) + INY ; increment index + TAX ; copy character ([:] or [EOL]) + BNE LAB_19F6 ; branch if [:] + + LDX #$06 ; set for "Out of DATA" error + INY ; increment index, now points to next line pointer high byte + LDA (Bpntrl),Y ; get next line pointer high byte + BEQ LAB_1A54 ; branch if end (eventually does error X) + + INY ; increment index + LDA (Bpntrl),Y ; get next line # low byte + STA Dlinel ; save current DATA line low byte + INY ; increment index + LDA (Bpntrl),Y ; get next line # high byte + INY ; increment index + STA Dlineh ; save current DATA line high byte +LAB_19F6 + LDA (Bpntrl),Y ; get byte + INY ; increment index + TAX ; copy to X + JSR LAB_170F ; set BASIC execute pointer + CPX #TK_DATA ; compare with "DATA" token + BEQ LAB_1985 ; was "DATA" so go do next READ + + BNE LAB_19DD ; go find next statement if not "DATA" + +; end of INPUT/READ routine + +LAB_1A03 + LDA Rdptrl ; get temp READ pointer low byte + LDY Rdptrh ; get temp READ pointer high byte + LDX Imode ; get input mode flag, $00=INPUT, $80=READ + BPL LAB_1A0E ; branch if INPUT + + JMP LAB_1624 ; save AY as DATA pointer and return + + ; we were getting INPUT +LAB_1A0E + LDY #$00 ; clear index + LDA (Rdptrl),Y ; get next byte + BNE LAB_1A1B ; error if not end of INPUT + + RTS + + ; user typed too much +LAB_1A1B + LDA #LAB_IMSG ; point to extra ignored message (high addr) + JMP LAB_18C3 ; print null terminated string from memory and return + +; search the stack for FOR activity +; exit with z=1 if FOR else exit with z=0 + +LAB_11A1 + TSX ; copy stack pointer + INX ; +1 pass return address + INX ; +2 pass return address + INX ; +3 pass calling routine return address + INX ; +4 pass calling routine return address +LAB_11A6 + LDA LAB_STAK+1,X ; get token byte from stack + CMP #TK_FOR ; is it FOR token + BNE LAB_11CE ; exit if not FOR token + + ; was FOR token + LDA Frnxth ; get var pointer for FOR/NEXT high byte + BNE LAB_11BB ; branch if not null + + LDA LAB_STAK+2,X ; get FOR variable pointer low byte + STA Frnxtl ; save var pointer for FOR/NEXT low byte + LDA LAB_STAK+3,X ; get FOR variable pointer high byte + STA Frnxth ; save var pointer for FOR/NEXT high byte +LAB_11BB + CMP LAB_STAK+3,X ; compare var pointer with stacked var pointer (high byte) + BNE LAB_11C7 ; branch if no match + + LDA Frnxtl ; get var pointer for FOR/NEXT low byte + CMP LAB_STAK+2,X ; compare var pointer with stacked var pointer (low byte) + BEQ LAB_11CE ; exit if match found + +LAB_11C7 + TXA ; copy index + CLC ; clear carry for add + ADC #$10 ; add FOR stack use size + TAX ; copy back to index + BNE LAB_11A6 ; loop if not at start of stack + +LAB_11CE + RTS + +; perform NEXT + +LAB_NEXT + BNE LAB_1A46 ; branch if NEXT var + + LDY #$00 ; else clear Y + BEQ LAB_1A49 ; branch always (no variable to search for) + +; NEXT var + +LAB_1A46 + JSR LAB_GVAR ; get variable address +LAB_1A49 + STA Frnxtl ; store variable pointer low byte + STY Frnxth ; store variable pointer high byte + ; (both cleared if no variable defined) + JSR LAB_11A1 ; search the stack for FOR activity + BEQ LAB_1A56 ; branch if found + + LDX #$00 ; else set error $00 ("NEXT without FOR" error) +LAB_1A54 + BEQ LAB_1ABE ; do error #X, then warm start + +LAB_1A56 + TXS ; set stack pointer, X set by search, dumps return addresses + + TXA ; copy stack pointer + SEC ; set carry for subtract + SBC #$F7 ; point to TO var + STA ut2_pl ; save pointer to TO var for compare + ADC #$FB ; point to STEP var + + LDY #>LAB_STAK ; point to stack page high byte + JSR LAB_UFAC ; unpack memory (STEP value) into FAC1 + TSX ; get stack pointer back + LDA LAB_STAK+8,X ; get step sign + STA FAC1_s ; save FAC1 sign (b7) + LDA Frnxtl ; get FOR variable pointer low byte + LDY Frnxth ; get FOR variable pointer high byte + JSR LAB_246C ; add (FOR variable) to FAC1 + JSR LAB_PFAC ; pack FAC1 into (FOR variable) + LDY #>LAB_STAK ; point to stack page high byte + JSR LAB_27FA ; compare FAC1 with (Y,ut2_pl) (TO value) + TSX ; get stack pointer back + CMP LAB_STAK+8,X ; compare step sign + BEQ LAB_1A9B ; branch if = (loop complete) + + ; loop back and do it all again + LDA LAB_STAK+$0D,X ; get FOR line low byte + STA Clinel ; save current line low byte + LDA LAB_STAK+$0E,X ; get FOR line high byte + STA Clineh ; save current line high byte + LDA LAB_STAK+$10,X ; get BASIC execute pointer low byte + STA Bpntrl ; save BASIC execute pointer low byte + LDA LAB_STAK+$0F,X ; get BASIC execute pointer high byte + STA Bpntrh ; save BASIC execute pointer high byte +LAB_1A98 + JMP LAB_15C2 ; go do interpreter inner loop + + ; loop complete so carry on +LAB_1A9B + TXA ; stack copy to A + ADC #$0F ; add $10 ($0F+carry) to dump FOR structure + TAX ; copy back to index + TXS ; copy to stack pointer + JSR LAB_GBYT ; scan memory + CMP #',' ; compare with "," + BNE LAB_1A98 ; branch if not "," (go do interpreter inner loop) + + ; was "," so another NEXT variable to do + JSR LAB_IGBY ; else increment and scan memory + JSR LAB_1A46 ; do NEXT (var) + +; evaluate expression and check is numeric, else do type mismatch + +LAB_EVNM + JSR LAB_EVEX ; evaluate expression + +; check if source is numeric, else do type mismatch + +LAB_CTNM + CLC ; destination is numeric + .byte $24 ; makes next line BIT $38 + +; check if source is string, else do type mismatch + +LAB_CTST + SEC ; required type is string + +; type match check, set C for string, clear C for numeric + +LAB_CKTM + BIT Dtypef ; test data type flag, $FF=string, $00=numeric + BMI LAB_1ABA ; branch if data type is string + + ; else data type was numeric + BCS LAB_1ABC ; if required type is string do type mismatch error +LAB_1AB9 + RTS + + ; data type was string, now check required type +LAB_1ABA + BCS LAB_1AB9 ; exit if required type is string + + ; else do type mismatch error +LAB_1ABC + LDX #$18 ; error code $18 ("Type mismatch" error) +LAB_1ABE + JMP LAB_XERR ; do error #X, then warm start + +; evaluate expression + +LAB_EVEX + LDX Bpntrl ; get BASIC execute pointer low byte + BNE LAB_1AC7 ; skip next if not zero + + DEC Bpntrh ; else decrement BASIC execute pointer high byte +LAB_1AC7 + DEC Bpntrl ; decrement BASIC execute pointer low byte + +LAB_EVEZ + LDA #$00 ; set null precedence (flag done) +LAB_1ACC + PHA ; push precedence byte + LDA #$02 ; 2 bytes + JSR LAB_1212 ; check room on stack for A bytes + JSR LAB_GVAL ; get value from line + LDA #$00 ; clear A + STA comp_f ; clear compare function flag +LAB_1ADB + JSR LAB_GBYT ; scan memory +LAB_1ADE + SEC ; set carry for subtract + SBC #TK_GT ; subtract token for > (lowest comparison function) + BCC LAB_1AFA ; branch if < TK_GT + + CMP #$03 ; compare with ">" to "<" tokens + BCS LAB_1AFA ; branch if >= TK_SGN (highest evaluation function +1) + + ; was token for > = or < (A = 0, 1 or 2) + CMP #$01 ; compare with token for = + ROL ; *2, b0 = carry (=1 if token was = or <) + ; (A = 0, 3 or 5) + EOR #$01 ; toggle b0 + ; (A = 1, 2 or 4. 1 if >, 2 if =, 4 if <) + EOR comp_f ; EOR with compare function flag bits + CMP comp_f ; compare with compare function flag + BCC LAB_1B53 ; if <(comp_f) do syntax error then warm start + ; was more than one <, = or >) + + STA comp_f ; save new compare function flag + JSR LAB_IGBY ; increment and scan memory + JMP LAB_1ADE ; go do next character + + ; token is < ">" or > "<" tokens +LAB_1AFA + LDX comp_f ; get compare function flag + BNE LAB_1B2A ; branch if compare function + + BCS LAB_1B78 ; go do functions + + ; else was < TK_GT so is operator or lower + ADC #TK_GT-TK_PLUS ; add # of operators (+, -, *, /, ^, AND, OR or EOR) + BCC LAB_1B78 ; branch if < + operator + + ; carry was set so token was +, -, *, /, ^, AND, OR or EOR + BNE LAB_1B0B ; branch if not + token + + BIT Dtypef ; test data type flag, $FF=string, $00=numeric + BPL LAB_1B0B ; branch if not string + + ; will only be $00 if type is string and token was + + JMP LAB_224D ; add strings, string 1 is in descriptor des_pl, string 2 + ; is in line, and return + +LAB_1B0B + STA ut1_pl ; save it + ASL ; *2 + ADC ut1_pl ; *3 + TAY ; copy to index +LAB_1B13 + PLA ; pull previous precedence + CMP LAB_OPPT,Y ; compare with precedence byte + BCS LAB_1B7D ; branch if A >= + + JSR LAB_CTNM ; check if source is numeric, else do type mismatch +LAB_1B1C + PHA ; save precedence +LAB_1B1D + JSR LAB_1B43 ; get vector, execute function then continue evaluation + PLA ; restore precedence + LDY prstk ; get precedence stacked flag + BPL LAB_1B3C ; branch if stacked values + + TAX ; copy precedence (set flags) + BEQ LAB_1B9D ; exit if done + + BNE LAB_1B86 ; else pop FAC2 and return, branch always + +LAB_1B2A + ROL Dtypef ; shift data type flag into Cb + TXA ; copy compare function flag + STA Dtypef ; clear data type flag, X is 0xxx xxxx + ROL ; shift data type into compare function byte b0 + LDX Bpntrl ; get BASIC execute pointer low byte + BNE LAB_1B34 ; branch if no underflow + + DEC Bpntrh ; else decrement BASIC execute pointer high byte +LAB_1B34 + DEC Bpntrl ; decrement BASIC execute pointer low byte +TK_LT_PLUS = TK_LT-TK_PLUS + LDY #TK_LT_PLUS*3 ; set offset to last operator entry + STA comp_f ; save new compare function flag + BNE LAB_1B13 ; branch always + +LAB_1B3C + CMP LAB_OPPT,Y ;.compare with stacked function precedence + BCS LAB_1B86 ; branch if A >=, pop FAC2 and return + + BCC LAB_1B1C ; branch always + +;.get vector, execute function then continue evaluation + +LAB_1B43 + LDA LAB_OPPT+2,Y ; get function vector high byte + PHA ; onto stack + LDA LAB_OPPT+1,Y ; get function vector low byte + PHA ; onto stack + ; now push sign, round FAC1 and put on stack + JSR LAB_1B5B ; function will return here, then the next RTS will call + ; the function + LDA comp_f ; get compare function flag + PHA ; push compare evaluation byte + LDA LAB_OPPT,Y ; get precedence byte + JMP LAB_1ACC ; continue evaluating expression + +LAB_1B53 + JMP LAB_SNER ; do syntax error then warm start + +; push sign, round FAC1 and put on stack + +LAB_1B5B + PLA ; get return addr low byte + STA ut1_pl ; save it + INC ut1_pl ; increment it (was ret-1 pushed? yes!) + ; note! no check is made on the high byte! if the calling + ; routine assembles to a page edge then this all goes + ; horribly wrong !!! + PLA ; get return addr high byte + STA ut1_ph ; save it + LDA FAC1_s ; get FAC1 sign (b7) + PHA ; push sign + +; round FAC1 and put on stack + +LAB_1B66 + JSR LAB_27BA ; round FAC1 + LDA FAC1_3 ; get FAC1 mantissa3 + PHA ; push on stack + LDA FAC1_2 ; get FAC1 mantissa2 + PHA ; push on stack + LDA FAC1_1 ; get FAC1 mantissa1 + PHA ; push on stack + LDA FAC1_e ; get FAC1 exponent + PHA ; push on stack + JMP (ut1_pl) ; return, sort of + +; do functions + +LAB_1B78 + LDY #$FF ; flag function + PLA ; pull precedence byte +LAB_1B7B + BEQ LAB_1B9D ; exit if done + +LAB_1B7D + CMP #$64 ; compare previous precedence with $64 + BEQ LAB_1B84 ; branch if was $64 (< function) + + JSR LAB_CTNM ; check if source is numeric, else do type mismatch +LAB_1B84 + STY prstk ; save precedence stacked flag + + ; pop FAC2 and return +LAB_1B86 + PLA ; pop byte + LSR ; shift out comparison evaluation lowest bit + STA Cflag ; save comparison evaluation flag + PLA ; pop exponent + STA FAC2_e ; save FAC2 exponent + PLA ; pop mantissa1 + STA FAC2_1 ; save FAC2 mantissa1 + PLA ; pop mantissa2 + STA FAC2_2 ; save FAC2 mantissa2 + PLA ; pop mantissa3 + STA FAC2_3 ; save FAC2 mantissa3 + PLA ; pop sign + STA FAC2_s ; save FAC2 sign (b7) + EOR FAC1_s ; EOR FAC1 sign (b7) + STA FAC_sc ; save sign compare (FAC1 EOR FAC2) +LAB_1B9D + LDA FAC1_e ; get FAC1 exponent + RTS + +; print "..." string to string util area + +LAB_1BC1 + LDA Bpntrl ; get BASIC execute pointer low byte + LDY Bpntrh ; get BASIC execute pointer high byte + ADC #$00 ; add carry to low byte + BCC LAB_1BCA ; branch if no overflow + + INY ; increment high byte +LAB_1BCA + JSR LAB_20AE ; print " terminated string to Sutill/Sutilh + JMP LAB_23F3 ; restore BASIC execute pointer from temp and return + +; get value from line + +LAB_GVAL + JSR LAB_IGBY ; increment and scan memory + BCS LAB_1BAC ; branch if not numeric character + + ; else numeric string found (e.g. 123) +LAB_1BA9 + JMP LAB_2887 ; get FAC1 from string and return + +; get value from line .. continued + + ; wasn't a number so .. +LAB_1BAC + TAX ; set the flags + BMI LAB_1BD0 ; if -ve go test token values + + ; else it is either a string, number, variable or () + CMP #'$' ; compare with "$" + BEQ LAB_1BA9 ; branch if "$", hex number + + CMP #'%' ; else compare with "%" + BEQ LAB_1BA9 ; branch if "%", binary number + + CMP #'.' ; compare with "." + BEQ LAB_1BA9 ; if so get FAC1 from string and return (e.g. was .123) + + ; it wasn't any sort of number so .. + CMP #$22 ; compare with " + BEQ LAB_1BC1 ; branch if open quote + + ; wasn't any sort of number so .. + +; evaluate expression within parentheses + + CMP #'(' ; compare with "(" + BNE LAB_1C18 ; if not "(" get (var), return value in FAC1 and $ flag + +LAB_1BF7 + JSR LAB_EVEZ ; evaluate expression, no decrement + +; all the 'scan for' routines return the character after the sought character + +; scan for ")" , else do syntax error then warm start + +LAB_1BFB + LDA #$29 ; load A with ")" + +; scan for CHR$(A) , else do syntax error then warm start + +LAB_SCCA + LDY #$00 ; clear index + CMP (Bpntrl),Y ; check next byte is = A + BNE LAB_SNER ; if not do syntax error then warm start + + JMP LAB_IGBY ; increment and scan memory then return + +; scan for "(" , else do syntax error then warm start + +LAB_1BFE + LDA #$28 ; load A with "(" + BNE LAB_SCCA ; scan for CHR$(A), else do syntax error then warm start + ; (branch always) + +; scan for "," , else do syntax error then warm start + +LAB_1C01 + LDA #$2C ; load A with "," + BNE LAB_SCCA ; scan for CHR$(A), else do syntax error then warm start + ; (branch always) + +; syntax error then warm start + +LAB_SNER + LDX #$02 ; error code $02 ("Syntax" error) + JMP LAB_XERR ; do error #X, then warm start + +; get value from line .. continued +; do tokens + +LAB_1BD0 + CMP #TK_MINUS ; compare with token for - + BEQ LAB_1C11 ; branch if - token (do set-up for functions) + + ; wasn't -n so .. + CMP #TK_PLUS ; compare with token for + + BEQ LAB_GVAL ; branch if + token (+n = n so ignore leading +) + + CMP #TK_NOT ; compare with token for NOT + BNE LAB_1BE7 ; branch if not token for NOT + + ; was NOT token +TK_EQUAL_PLUS = TK_EQUAL-TK_PLUS + LDY #TK_EQUAL_PLUS*3 ; offset to NOT function + BNE LAB_1C13 ; do set-up for function then execute (branch always) + +; do = compare + +LAB_EQUAL + JSR LAB_EVIR ; evaluate integer expression (no sign check) + LDA FAC1_3 ; get FAC1 mantissa3 + EOR #$FF ; invert it + TAY ; copy it + LDA FAC1_2 ; get FAC1 mantissa2 + EOR #$FF ; invert it + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; get value from line .. continued + + ; wasn't +, -, or NOT so .. +LAB_1BE7 + CMP #TK_FN ; compare with token for FN + BNE LAB_1BEE ; branch if not token for FN + + JMP LAB_201E ; go evaluate FNx + +; get value from line .. continued + + ; wasn't +, -, NOT or FN so .. +LAB_1BEE + SBC #TK_SGN ; subtract with token for SGN + BCS LAB_1C27 ; if a function token go do it + + JMP LAB_SNER ; else do syntax error + +; set-up for functions + +LAB_1C11 +TK_GT_PLUS = TK_GT-TK_PLUS + LDY #TK_GT_PLUS*3 ; set offset from base to > operator +LAB_1C13 + PLA ; dump return address low byte + PLA ; dump return address high byte + JMP LAB_1B1D ; execute function then continue evaluation + +; variable name set-up +; get (var), return value in FAC_1 and $ flag + +LAB_1C18 + JSR LAB_GVAR ; get (var) address + STA FAC1_2 ; save address low byte in FAC1 mantissa2 + STY FAC1_3 ; save address high byte in FAC1 mantissa3 + LDX Dtypef ; get data type flag, $FF=string, $00=numeric + BMI LAB_1C25 ; if string then return (does RTS) + +LAB_1C24 + JMP LAB_UFAC ; unpack memory (AY) into FAC1 + +LAB_1C25 + RTS + +; get value from line .. continued +; only functions left so .. + +; set up function references + +; new for V2.0+ this replaces a lot of IF .. THEN .. ELSEIF .. THEN .. that was needed +; to process function calls. now the function vector is computed and pushed on the stack +; and the preprocess offset is read. if the preprocess offset is non zero then the vector +; is calculated and the routine called, if not this routine just does RTS. whichever +; happens the RTS at the end of this routine, or the end of the preprocess routine, calls +; the function code + +; this also removes some less than elegant code that was used to bypass type checking +; for functions that returned strings + +LAB_1C27 + ASL ; *2 (2 bytes per function address) + TAY ; copy to index + + LDA LAB_FTBM,Y ; get function jump vector high byte + PHA ; push functions jump vector high byte + LDA LAB_FTBL,Y ; get function jump vector low byte + PHA ; push functions jump vector low byte + + LDA LAB_FTPM,Y ; get function pre process vector high byte + BEQ LAB_1C56 ; skip pre process if null vector + + PHA ; push functions pre process vector high byte + LDA LAB_FTPL,Y ; get function pre process vector low byte + PHA ; push functions pre process vector low byte + +LAB_1C56 + RTS ; do function, or pre process, call + +; process string expression in parenthesis + +LAB_PPFS + JSR LAB_1BF7 ; process expression in parenthesis + JMP LAB_CTST ; check if source is string then do function, + ; else do type mismatch + +; process numeric expression in parenthesis + +LAB_PPFN + JSR LAB_1BF7 ; process expression in parenthesis + JMP LAB_CTNM ; check if source is numeric then do function, + ; else do type mismatch + +; set numeric data type and increment BASIC execute pointer + +LAB_PPBI + LSR Dtypef ; clear data type flag, $FF=string, $00=numeric + JMP LAB_IGBY ; increment and scan memory then do function + +; process string for LEFT$, RIGHT$ or MID$ + +LAB_LRMS + JSR LAB_EVEZ ; evaluate (should be string) expression + JSR LAB_1C01 ; scan for ",", else do syntax error then warm start + JSR LAB_CTST ; check if source is string, else do type mismatch + + PLA ; get function jump vector low byte + TAX ; save functions jump vector low byte + PLA ; get function jump vector high byte + TAY ; save functions jump vector high byte + LDA des_ph ; get descriptor pointer high byte + PHA ; push string pointer high byte + LDA des_pl ; get descriptor pointer low byte + PHA ; push string pointer low byte + TYA ; get function jump vector high byte back + PHA ; save functions jump vector high byte + TXA ; get function jump vector low byte back + PHA ; save functions jump vector low byte + JSR LAB_GTBY ; get byte parameter + TXA ; copy byte parameter to A + RTS ; go do function + +; process numeric expression(s) for BIN$ or HEX$ + +LAB_BHSS + JSR LAB_EVEZ ; process expression + JSR LAB_CTNM ; check if source is numeric, else do type mismatch + LDA FAC1_e ; get FAC1 exponent + CMP #$98 ; compare with exponent = 2^24 + BCS LAB_BHER ; branch if n>=2^24 (is too big) + + JSR LAB_2831 ; convert FAC1 floating-to-fixed + LDX #$02 ; 3 bytes to do +LAB_CFAC + LDA FAC1_1,X ; get byte from FAC1 + STA nums_1,X ; save byte to temp + DEX ; decrement index + BPL LAB_CFAC ; copy FAC1 mantissa to temp + + JSR LAB_GBYT ; get next BASIC byte + LDX #$00 ; set default to no leading "0"s + CMP #')' ; compare with close bracket + BEQ LAB_1C54 ; if ")" go do rest of function + + JSR LAB_SCGB ; scan for "," and get byte + JSR LAB_GBYT ; get last byte back + CMP #')' ; is next character ) + BNE LAB_BHER ; if not ")" go do error + +LAB_1C54 + RTS ; else do function + +LAB_BHER + JMP LAB_FCER ; do function call error then warm start + +; perform EOR + +; added operator format is the same as AND or OR, precedence is the same as OR + +; this bit worked first time but it took a while to sort out the operator table +; pointers and offsets afterwards! + +LAB_EOR + JSR GetFirst ; get first integer expression (no sign check) + EOR XOAw_l ; EOR with expression 1 low byte + TAY ; save in Y + LDA FAC1_2 ; get FAC1 mantissa2 + EOR XOAw_h ; EOR with expression 1 high byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; perform OR + +LAB_OR + JSR GetFirst ; get first integer expression (no sign check) + ORA XOAw_l ; OR with expression 1 low byte + TAY ; save in Y + LDA FAC1_2 ; get FAC1 mantissa2 + ORA XOAw_h ; OR with expression 1 high byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; perform AND + +LAB_AND + JSR GetFirst ; get first integer expression (no sign check) + AND XOAw_l ; AND with expression 1 low byte + TAY ; save in Y + LDA FAC1_2 ; get FAC1 mantissa2 + AND XOAw_h ; AND with expression 1 high byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; get first value for OR, AND or EOR + +GetFirst + JSR LAB_EVIR ; evaluate integer expression (no sign check) + LDA FAC1_2 ; get FAC1 mantissa2 + STA XOAw_h ; save it + LDA FAC1_3 ; get FAC1 mantissa3 + STA XOAw_l ; save it + JSR LAB_279B ; copy FAC2 to FAC1 (get 2nd value in expression) + JSR LAB_EVIR ; evaluate integer expression (no sign check) + LDA FAC1_3 ; get FAC1 mantissa3 +LAB_1C95 + RTS + +; perform comparisons + +; do < compare + +LAB_LTHAN + JSR LAB_CKTM ; type match check, set C for string + BCS LAB_1CAE ; branch if string + + ; do numeric < compare + LDA FAC2_s ; get FAC2 sign (b7) + ORA #$7F ; set all non sign bits + AND FAC2_1 ; and FAC2 mantissa1 (AND in sign bit) + STA FAC2_1 ; save FAC2 mantissa1 + LDA #FAC2_e ; set pointer high byte to FAC2 + JSR LAB_27F8 ; compare FAC1 with FAC2 (AY) + TAX ; copy result + JMP LAB_1CE1 ; go evaluate result + + ; do string < compare +LAB_1CAE + LSR Dtypef ; clear data type flag, $FF=string, $00=numeric + DEC comp_f ; clear < bit in compare function flag + JSR LAB_22B6 ; pop string off descriptor stack, or from top of string + ; space returns with A = length, X=pointer low byte, + ; Y=pointer high byte + STA str_ln ; save length + STX str_pl ; save string pointer low byte + STY str_ph ; save string pointer high byte + LDA FAC2_2 ; get descriptor pointer low byte + LDY FAC2_3 ; get descriptor pointer high byte + JSR LAB_22BA ; pop (YA) descriptor off stack or from top of string space + ; returns with A = length, X=pointer low byte, + ; Y=pointer high byte + STX FAC2_2 ; save string pointer low byte + STY FAC2_3 ; save string pointer high byte + TAX ; copy length + SEC ; set carry for subtract + SBC str_ln ; subtract string 1 length + BEQ LAB_1CD6 ; branch if str 1 length = string 2 length + + LDA #$01 ; set str 1 length > string 2 length + BCC LAB_1CD6 ; branch if so + + LDX str_ln ; get string 1 length + LDA #$FF ; set str 1 length < string 2 length +LAB_1CD6 + STA FAC1_s ; save length compare + LDY #$FF ; set index + INX ; adjust for loop +LAB_1CDB + INY ; increment index + DEX ; decrement count + BNE LAB_1CE6 ; branch if still bytes to do + + LDX FAC1_s ; get length compare back +LAB_1CE1 + BMI LAB_1CF2 ; branch if str 1 < str 2 + + CLC ; flag str 1 <= str 2 + BCC LAB_1CF2 ; go evaluate result + +LAB_1CE6 + LDA (FAC2_2),Y ; get string 2 byte + CMP (FAC1_1),Y ; compare with string 1 byte + BEQ LAB_1CDB ; loop if bytes = + + LDX #$FF ; set str 1 < string 2 + BCS LAB_1CF2 ; branch if so + + LDX #$01 ; set str 1 > string 2 +LAB_1CF2 + INX ; x = 0, 1 or 2 + TXA ; copy to A + ROL ; *2 (1, 2 or 4) + AND Cflag ; AND with comparison evaluation flag + BEQ LAB_1CFB ; branch if 0 (compare is false) + + LDA #$FF ; else set result true +LAB_1CFB + JMP LAB_27DB ; save A as integer byte and return + +LAB_1CFE + JSR LAB_1C01 ; scan for ",", else do syntax error then warm start + +; perform DIM + +LAB_DIM + TAX ; copy "DIM" flag to X + JSR LAB_1D10 ; search for variable + JSR LAB_GBYT ; scan memory + BNE LAB_1CFE ; scan for "," and loop if not null + + RTS + +; perform << (left shift) + +LAB_LSHIFT + JSR GetPair ; get integer expression and byte (no sign check) + LDA FAC1_2 ; get expression high byte + LDX TempB ; get shift count + BEQ NoShift ; branch if zero + + CPX #$10 ; compare bit count with 16d + BCS TooBig ; branch if >= + +Ls_loop + ASL FAC1_3 ; shift low byte + ROL ; shift high byte + DEX ; decrement bit count + BNE Ls_loop ; loop if shift not complete + + LDY FAC1_3 ; get expression low byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; perform >> (right shift) + +LAB_RSHIFT + JSR GetPair ; get integer expression and byte (no sign check) + LDA FAC1_2 ; get expression high byte + LDX TempB ; get shift count + BEQ NoShift ; branch if zero + + CPX #$10 ; compare bit count with 16d + BCS TooBig ; branch if >= + +Rs_loop + LSR ; shift high byte + ROR FAC1_3 ; shift low byte + DEX ; decrement bit count + BNE Rs_loop ; loop if shift not complete + +NoShift + LDY FAC1_3 ; get expression low byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +TooBig + LDA #$00 ; clear high byte + TAY ; copy to low byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +GetPair + JSR LAB_EVBY ; evaluate byte expression, result in X + STX TempB ; save it + JSR LAB_279B ; copy FAC2 to FAC1 (get 2nd value in expression) + JMP LAB_EVIR ; evaluate integer expression (no sign check) + +; search for variable + +; return pointer to variable in Cvaral/Cvarah + +LAB_GVAR + LDX #$00 ; set DIM flag = $00 + JSR LAB_GBYT ; scan memory (1st character) +LAB_1D10 + STX Defdim ; save DIM flag +LAB_1D12 + STA Varnm1 ; save 1st character + AND #$7F ; clear FN flag bit + JSR LAB_CASC ; check byte, return C=0 if<"A" or >"Z" + BCS LAB_1D1F ; branch if ok + + JMP LAB_SNER ; else syntax error then warm start + + ; was variable name so .. +LAB_1D1F + LDX #$00 ; clear 2nd character temp + STX Dtypef ; clear data type flag, $FF=string, $00=numeric + JSR LAB_IGBY ; increment and scan memory (2nd character) + BCC LAB_1D2D ; branch if character = "0"-"9" (ok) + + ; 2nd character wasn't "0" to "9" so .. + JSR LAB_CASC ; check byte, return C=0 if<"A" or >"Z" + BCC LAB_1D38 ; branch if <"A" or >"Z" (go check if string) + +LAB_1D2D + TAX ; copy 2nd character + + ; ignore further (valid) characters in the variable name +LAB_1D2E + JSR LAB_IGBY ; increment and scan memory (3rd character) + BCC LAB_1D2E ; loop if character = "0"-"9" (ignore) + + JSR LAB_CASC ; check byte, return C=0 if<"A" or >"Z" + BCS LAB_1D2E ; loop if character = "A"-"Z" (ignore) + + ; check if string variable +LAB_1D38 + CMP #'$' ; compare with "$" + BNE LAB_1D47 ; branch if not string + +; to introduce a new variable type (% suffix for integers say) then this branch +; will need to go to that check and then that branch, if it fails, go to LAB_1D47 + + ; type is string + LDA #$FF ; set data type = string + STA Dtypef ; set data type flag, $FF=string, $00=numeric + TXA ; get 2nd character back + ORA #$80 ; set top bit (indicate string var) + TAX ; copy back to 2nd character temp + JSR LAB_IGBY ; increment and scan memory + +; after we have determined the variable type we need to come back here to determine +; if it's an array of type. this would plug in a%(b[,c[,d]])) integer arrays nicely + + +LAB_1D47 ; gets here with character after var name in A + STX Varnm2 ; save 2nd character + ORA Sufnxf ; or with subscript/FNX flag (or FN name) + CMP #'(' ; compare with "(" + BNE LAB_1D53 ; branch if not "(" + + JMP LAB_1E17 ; go find, or make, array + +; either find or create var +; var name (1st two characters only!) is in Varnm1,Varnm2 + + ; variable name wasn't var(... so look for plain var +LAB_1D53 + LDA #$00 ; clear A + STA Sufnxf ; clear subscript/FNX flag + LDA Svarl ; get start of vars low byte + LDX Svarh ; get start of vars high byte + LDY #$00 ; clear index +LAB_1D5D + STX Vrschh ; save search address high byte +LAB_1D5F + STA Vrschl ; save search address low byte + CPX Sarryh ; compare high address with var space end + BNE LAB_1D69 ; skip next compare if <> + + ; high addresses were = so compare low addresses + CMP Sarryl ; compare low address with var space end + BEQ LAB_1D8B ; if not found go make new var + +LAB_1D69 + LDA Varnm1 ; get 1st character of var to find + CMP (Vrschl),Y ; compare with variable name 1st character + BNE LAB_1D77 ; branch if no match + + ; 1st characters match so compare 2nd characters + LDA Varnm2 ; get 2nd character of var to find + INY ; index to point to variable name 2nd character + CMP (Vrschl),Y ; compare with variable name 2nd character + BEQ LAB_1DD7 ; branch if match (found var) + + DEY ; else decrement index (now = $00) +LAB_1D77 + CLC ; clear carry for add + LDA Vrschl ; get search address low byte + ADC #$06 ; +6 (offset to next var name) + BCC LAB_1D5F ; loop if no overflow to high byte + + INX ; else increment high byte + BNE LAB_1D5D ; loop always (RAM doesn't extend to $FFFF !) + +; check byte, return C=0 if<"A" or >"Z" or "a" to "z" + +LAB_CASC + CMP #'a' ; compare with "a" + BCS LAB_1D83 ; go check <"z"+1 + +; check byte, return C=0 if<"A" or >"Z" + +LAB_1D82 + CMP #'A' ; compare with "A" + BCC LAB_1D8A ; exit if less + + ; carry is set + SBC #$5B ; subtract "Z"+1 + SEC ; set carry + SBC #$A5 ; subtract $A5 (restore byte) + ; carry clear if byte>$5A +LAB_1D8A + RTS + +LAB_1D83 + SBC #$7B ; subtract "z"+1 + SEC ; set carry + SBC #$85 ; subtract $85 (restore byte) + ; carry clear if byte>$7A + RTS + + ; reached end of variable mem without match + ; .. so create new variable +LAB_1D8B + PLA ; pop return address low byte + PHA ; push return address low byte +LAB_1C18p2 = LAB_1C18+2 + CMP #LAB_1D96 ; high byte point to $00,$00 + RTS + + ; create new numeric variable +LAB_1D98 + LDA Sarryl ; get var mem end low byte + LDY Sarryh ; get var mem end high byte + STA Ostrtl ; save old block start low byte + STY Ostrth ; save old block start high byte + LDA Earryl ; get array mem end low byte + LDY Earryh ; get array mem end high byte + STA Obendl ; save old block end low byte + STY Obendh ; save old block end high byte + CLC ; clear carry for add + ADC #$06 ; +6 (space for one var) + BCC LAB_1DAE ; branch if no overflow to high byte + + INY ; else increment high byte +LAB_1DAE + STA Nbendl ; set new block end low byte + STY Nbendh ; set new block end high byte + JSR LAB_11CF ; open up space in memory + LDA Nbendl ; get new start low byte + LDY Nbendh ; get new start high byte (-$100) + INY ; correct high byte + STA Sarryl ; save new var mem end low byte + STY Sarryh ; save new var mem end high byte + LDY #$00 ; clear index + LDA Varnm1 ; get var name 1st character + STA (Vrschl),Y ; save var name 1st character + INY ; increment index + LDA Varnm2 ; get var name 2nd character + STA (Vrschl),Y ; save var name 2nd character + LDA #$00 ; clear A + INY ; increment index + STA (Vrschl),Y ; initialise var byte + INY ; increment index + STA (Vrschl),Y ; initialise var byte + INY ; increment index + STA (Vrschl),Y ; initialise var byte + INY ; increment index + STA (Vrschl),Y ; initialise var byte + + ; found a match for var ((Vrschl) = ptr) +LAB_1DD7 + LDA Vrschl ; get var address low byte + CLC ; clear carry for add + ADC #$02 ; +2 (offset past var name bytes) + LDY Vrschh ; get var address high byte + BCC LAB_1DE1 ; branch if no overflow from add + + INY ; else increment high byte +LAB_1DE1 + STA Cvaral ; save current var address low byte + STY Cvarah ; save current var address high byte + RTS + +; set-up array pointer (Adatal/h) to first element in array +; set Adatal,Adatah to Astrtl,Astrth+2*Dimcnt+#$05 + +LAB_1DE6 + LDA Dimcnt ; get # of dimensions (1, 2 or 3) + ASL ; *2 (also clears the carry !) + ADC #$05 ; +5 (result is 7, 9 or 11 here) + ADC Astrtl ; add array start pointer low byte + LDY Astrth ; get array pointer high byte + BCC LAB_1DF2 ; branch if no overflow + + INY ; else increment high byte +LAB_1DF2 + STA Adatal ; save array data pointer low byte + STY Adatah ; save array data pointer high byte + RTS + +; evaluate integer expression + +LAB_EVIN + JSR LAB_IGBY ; increment and scan memory + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + +; evaluate integer expression (no check) + +LAB_EVPI + LDA FAC1_s ; get FAC1 sign (b7) + BMI LAB_1E12 ; do function call error if -ve + +; evaluate integer expression (no sign check) + +LAB_EVIR + LDA FAC1_e ; get FAC1 exponent + CMP #$90 ; compare with exponent = 2^16 (n>2^15) + BCC LAB_1E14 ; branch if n<2^16 (is ok) + + LDA #LAB_1DF7 ; set pointer high byte to -32768 + JSR LAB_27F8 ; compare FAC1 with (AY) +LAB_1E12 + BNE LAB_FCER ; if <> do function call error then warm start + +LAB_1E14 + JMP LAB_2831 ; convert FAC1 floating-to-fixed and return + +; find or make array + +LAB_1E17 + LDA Defdim ; get DIM flag + PHA ; push it + LDA Dtypef ; get data type flag, $FF=string, $00=numeric + PHA ; push it + LDY #$00 ; clear dimensions count + +; now get the array dimension(s) and stack it (them) before the data type and DIM flag + +LAB_1E1F + TYA ; copy dimensions count + PHA ; save it + LDA Varnm2 ; get array name 2nd byte + PHA ; save it + LDA Varnm1 ; get array name 1st byte + PHA ; save it + JSR LAB_EVIN ; evaluate integer expression + PLA ; pull array name 1st byte + STA Varnm1 ; restore array name 1st byte + PLA ; pull array name 2nd byte + STA Varnm2 ; restore array name 2nd byte + PLA ; pull dimensions count + TAY ; restore it + TSX ; copy stack pointer + LDA LAB_STAK+2,X ; get DIM flag + PHA ; push it + LDA LAB_STAK+1,X ; get data type flag + PHA ; push it + LDA FAC1_2 ; get this dimension size high byte + STA LAB_STAK+2,X ; stack before flag bytes + LDA FAC1_3 ; get this dimension size low byte + STA LAB_STAK+1,X ; stack before flag bytes + INY ; increment dimensions count + JSR LAB_GBYT ; scan memory + CMP #',' ; compare with "," + BEQ LAB_1E1F ; if found go do next dimension + + STY Dimcnt ; store dimensions count + JSR LAB_1BFB ; scan for ")" , else do syntax error then warm start + PLA ; pull data type flag + STA Dtypef ; restore data type flag, $FF=string, $00=numeric + PLA ; pull DIM flag + STA Defdim ; restore DIM flag + LDX Sarryl ; get array mem start low byte + LDA Sarryh ; get array mem start high byte + +; now check to see if we are at the end of array memory (we would be if there were +; no arrays). + +LAB_1E5C + STX Astrtl ; save as array start pointer low byte + STA Astrth ; save as array start pointer high byte + CMP Earryh ; compare with array mem end high byte + BNE LAB_1E68 ; branch if not reached array mem end + + CPX Earryl ; else compare with array mem end low byte + BEQ LAB_1EA1 ; go build array if not found + + ; search for array +LAB_1E68 + LDY #$00 ; clear index + LDA (Astrtl),Y ; get array name first byte + INY ; increment index to second name byte + CMP Varnm1 ; compare with this array name first byte + BNE LAB_1E77 ; branch if no match + + LDA Varnm2 ; else get this array name second byte + CMP (Astrtl),Y ; compare with array name second byte + BEQ LAB_1E8D ; array found so branch + + ; no match +LAB_1E77 + INY ; increment index + LDA (Astrtl),Y ; get array size low byte + CLC ; clear carry for add + ADC Astrtl ; add array start pointer low byte + TAX ; copy low byte to X + INY ; increment index + LDA (Astrtl),Y ; get array size high byte + ADC Astrth ; add array mem pointer high byte + BCC LAB_1E5C ; if no overflow go check next array + +; do array bounds error + +LAB_1E85 + LDX #$10 ; error code $10 ("Array bounds" error) + .byte $2C ; makes next bit BIT LAB_08A2 + +; do function call error + +LAB_FCER + LDX #$08 ; error code $08 ("Function call" error) +LAB_1E8A + JMP LAB_XERR ; do error #X, then warm start + + ; found array, are we trying to dimension it? +LAB_1E8D + LDX #$12 ; set error $12 ("Double dimension" error) + LDA Defdim ; get DIM flag + BNE LAB_1E8A ; if we are trying to dimension it do error #X, then warm + ; start + +; found the array and we're not dimensioning it so we must find an element in it + + JSR LAB_1DE6 ; set-up array pointer (Adatal/h) to first element in array + ; (Astrtl,Astrth points to start of array) + LDA Dimcnt ; get dimensions count + LDY #$04 ; set index to array's # of dimensions + CMP (Astrtl),Y ; compare with no of dimensions + BNE LAB_1E85 ; if wrong do array bounds error, could do "Wrong + ; dimensions" error here .. if we want a different + ; error message + + JMP LAB_1F28 ; found array so go get element + ; (could jump to LAB_1F28 as all LAB_1F24 does is take + ; Dimcnt and save it at (Astrtl),Y which is already the + ; same or we would have taken the BNE) + + ; array not found, so build it +LAB_1EA1 + JSR LAB_1DE6 ; set-up array pointer (Adatal/h) to first element in array + ; (Astrtl,Astrth points to start of array) + JSR LAB_121F ; check available memory, "Out of memory" error if no room + ; addr to check is in AY (low/high) + LDY #$00 ; clear Y (don't need to clear A) + STY Aspth ; clear array data size high byte + LDA Varnm1 ; get variable name 1st byte + STA (Astrtl),Y ; save array name 1st byte + INY ; increment index + LDA Varnm2 ; get variable name 2nd byte + STA (Astrtl),Y ; save array name 2nd byte + LDA Dimcnt ; get dimensions count + LDY #$04 ; index to dimension count + STY Asptl ; set array data size low byte (four bytes per element) + STA (Astrtl),Y ; set array's dimensions count + + ; now calculate the size of the data space for the array + CLC ; clear carry for add (clear on subsequent loops) +LAB_1EC0 + LDX #$0B ; set default dimension value low byte + LDA #$00 ; set default dimension value high byte + BIT Defdim ; test default DIM flag + BVC LAB_1ED0 ; branch if b6 of Defdim is clear + + PLA ; else pull dimension value low byte + ADC #$01 ; +1 (allow for zeroeth element) + TAX ; copy low byte to X + PLA ; pull dimension value high byte + ADC #$00 ; add carry from low byte + +LAB_1ED0 + INY ; index to dimension value high byte + STA (Astrtl),Y ; save dimension value high byte + INY ; index to dimension value high byte + TXA ; get dimension value low byte + STA (Astrtl),Y ; save dimension value low byte + JSR LAB_1F7C ; does XY = (Astrtl),Y * (Asptl) + STX Asptl ; save array data size low byte + STA Aspth ; save array data size high byte + LDY ut1_pl ; restore index (saved by subroutine) + DEC Dimcnt ; decrement dimensions count + BNE LAB_1EC0 ; loop while not = 0 + + ADC Adatah ; add size high byte to first element high byte + ; (carry is always clear here) + BCS LAB_1F45 ; if overflow go do "Out of memory" error + + STA Adatah ; save end of array high byte + TAY ; copy end high byte to Y + TXA ; get array size low byte + ADC Adatal ; add array start low byte + BCC LAB_1EF3 ; branch if no carry + + INY ; else increment end of array high byte + BEQ LAB_1F45 ; if overflow go do "Out of memory" error + + ; set-up mostly complete, now zero the array +LAB_1EF3 + JSR LAB_121F ; check available memory, "Out of memory" error if no room + ; addr to check is in AY (low/high) + STA Earryl ; save array mem end low byte + STY Earryh ; save array mem end high byte + LDA #$00 ; clear byte for array clear + INC Aspth ; increment array size high byte (now block count) + LDY Asptl ; get array size low byte (now index to block) + BEQ LAB_1F07 ; branch if low byte = $00 + +LAB_1F02 + DEY ; decrement index (do 0 to n-1) + STA (Adatal),Y ; zero byte + BNE LAB_1F02 ; loop until this block done + +LAB_1F07 + DEC Adatah ; decrement array pointer high byte + DEC Aspth ; decrement block count high byte + BNE LAB_1F02 ; loop until all blocks done + + INC Adatah ; correct for last loop + SEC ; set carry for subtract + LDY #$02 ; index to array size low byte + LDA Earryl ; get array mem end low byte + SBC Astrtl ; subtract array start low byte + STA (Astrtl),Y ; save array size low byte + INY ; index to array size high byte + LDA Earryh ; get array mem end high byte + SBC Astrth ; subtract array start high byte + STA (Astrtl),Y ; save array size high byte + LDA Defdim ; get default DIM flag + BNE LAB_1F7B ; exit (RET) if this was a DIM command + + ; else, find element + INY ; index to # of dimensions + +LAB_1F24 + LDA (Astrtl),Y ; get array's dimension count + STA Dimcnt ; save it + +; we have found, or built, the array. now we need to find the element + +LAB_1F28 + LDA #$00 ; clear byte + STA Asptl ; clear array data pointer low byte +LAB_1F2C + STA Aspth ; save array data pointer high byte + INY ; increment index (point to array bound high byte) + PLA ; pull array index low byte + TAX ; copy to X + STA FAC1_2 ; save index low byte to FAC1 mantissa2 + PLA ; pull array index high byte + STA FAC1_3 ; save index high byte to FAC1 mantissa3 + CMP (Astrtl),Y ; compare with array bound high byte + BCC LAB_1F48 ; branch if within bounds + + BNE LAB_1F42 ; if outside bounds do array bounds error + + ; else high byte was = so test low bytes + INY ; index to array bound low byte + TXA ; get array index low byte + CMP (Astrtl),Y ; compare with array bound low byte + BCC LAB_1F49 ; branch if within bounds + +LAB_1F42 + JMP LAB_1E85 ; else do array bounds error + +LAB_1F45 + JMP LAB_OMER ; do "Out of memory" error then warm start + +LAB_1F48 + INY ; index to array bound low byte +LAB_1F49 + LDA Aspth ; get array data pointer high byte + ORA Asptl ; OR with array data pointer low byte + BEQ LAB_1F5A ; branch if array data pointer = null (skip multiply) + + JSR LAB_1F7C ; does XY = (Astrtl),Y * (Asptl) + TXA ; get result low byte + ADC FAC1_2 ; add index low byte from FAC1 mantissa2 + TAX ; save result low byte + TYA ; get result high byte + LDY ut1_pl ; restore index +LAB_1F5A + ADC FAC1_3 ; add index high byte from FAC1 mantissa3 + STX Asptl ; save array data pointer low byte + DEC Dimcnt ; decrement dimensions count + BNE LAB_1F2C ; loop if dimensions still to do + + ASL Asptl ; array data pointer low byte * 2 + ROL ; array data pointer high byte * 2 + ASL Asptl ; array data pointer low byte * 4 + ROL ; array data pointer high byte * 4 + TAY ; copy high byte + LDA Asptl ; get low byte + ADC Adatal ; add array data start pointer low byte + STA Cvaral ; save as current var address low byte + TYA ; get high byte back + ADC Adatah ; add array data start pointer high byte + STA Cvarah ; save as current var address high byte + TAY ; copy high byte to Y + LDA Cvaral ; get current var address low byte +LAB_1F7B + RTS + +; does XY = (Astrtl),Y * (Asptl) + +LAB_1F7C + STY ut1_pl ; save index + LDA (Astrtl),Y ; get dimension size low byte + STA dims_l ; save dimension size low byte + DEY ; decrement index + LDA (Astrtl),Y ; get dimension size high byte + STA dims_h ; save dimension size high byte + + LDA #$10 ; count = $10 (16 bit multiply) + STA numbit ; save bit count + LDX #$00 ; clear result low byte + LDY #$00 ; clear result high byte +LAB_1F8F + TXA ; get result low byte + ASL ; *2 + TAX ; save result low byte + TYA ; get result high byte + ROL ; *2 + TAY ; save result high byte + BCS LAB_1F45 ; if overflow go do "Out of memory" error + + ASL Asptl ; shift multiplier low byte + ROL Aspth ; shift multiplier high byte + BCC LAB_1FA8 ; skip add if no carry + + CLC ; else clear carry for add + TXA ; get result low byte + ADC dims_l ; add dimension size low byte + TAX ; save result low byte + TYA ; get result high byte + ADC dims_h ; add dimension size high byte + TAY ; save result high byte + BCS LAB_1F45 ; if overflow go do "Out of memory" error + +LAB_1FA8 + DEC numbit ; decrement bit count + BNE LAB_1F8F ; loop until all done + + RTS + +; perform FRE() + +LAB_FRE + LDA Dtypef ; get data type flag, $FF=string, $00=numeric + BPL LAB_1FB4 ; branch if numeric + + JSR LAB_22B6 ; pop string off descriptor stack, or from top of string + ; space returns with A = length, X=$71=pointer low byte, + ; Y=$72=pointer high byte + + ; FRE(n) was numeric so do this +LAB_1FB4 + JSR LAB_GARB ; go do garbage collection + SEC ; set carry for subtract + LDA Sstorl ; get bottom of string space low byte + SBC Earryl ; subtract array mem end low byte + TAY ; copy result to Y + LDA Sstorh ; get bottom of string space high byte + SBC Earryh ; subtract array mem end high byte + +; save and convert integer AY to FAC1 + +LAB_AYFC + LSR Dtypef ; clear data type flag, $FF=string, $00=numeric + STA FAC1_1 ; save FAC1 mantissa1 + STY FAC1_2 ; save FAC1 mantissa2 + LDX #$90 ; set exponent=2^16 (integer) + JMP LAB_27E3 ; set exp=X, clear FAC1_3, normalise and return + +; perform POS() + +LAB_POS + LDY TPos ; get terminal position + +; convert Y to byte in FAC1 + +LAB_1FD0 + LDA #$00 ; clear high byte + BEQ LAB_AYFC ; always save and convert integer AY to FAC1 and return + +; check not Direct (used by DEF and INPUT) + +LAB_CKRN + LDX Clineh ; get current line high byte + INX ; increment it + BNE LAB_1F7B ; return if can continue not direct mode + + ; else do illegal direct error +LAB_1FD9 + LDX #$16 ; error code $16 ("Illegal direct" error) +LAB_1FDB + JMP LAB_XERR ; go do error #X, then warm start + +; perform DEF + +LAB_DEF + JSR LAB_200B ; check FNx syntax + STA func_l ; save function pointer low byte + STY func_h ; save function pointer high byte + JSR LAB_CKRN ; check not Direct (back here if ok) + JSR LAB_1BFE ; scan for "(" , else do syntax error then warm start + LDA #$80 ; set flag for FNx + STA Sufnxf ; save subscript/FNx flag + JSR LAB_GVAR ; get (var) address + JSR LAB_CTNM ; check if source is numeric, else do type mismatch + JSR LAB_1BFB ; scan for ")" , else do syntax error then warm start + LDA #TK_EQUAL ; get = token + JSR LAB_SCCA ; scan for CHR$(A), else do syntax error then warm start + LDA Cvarah ; get current var address high byte + PHA ; push it + LDA Cvaral ; get current var address low byte + PHA ; push it + LDA Bpntrh ; get BASIC execute pointer high byte + PHA ; push it + LDA Bpntrl ; get BASIC execute pointer low byte + PHA ; push it + JSR LAB_DATA ; go perform DATA + JMP LAB_207A ; put execute pointer and variable pointer into function + ; and return + +; check FNx syntax + +LAB_200B + LDA #TK_FN ; get FN" token + JSR LAB_SCCA ; scan for CHR$(A) , else do syntax error then warm start + ; return character after A + ORA #$80 ; set FN flag bit + STA Sufnxf ; save FN flag so array variable test fails + JSR LAB_1D12 ; search for FN variable + JMP LAB_CTNM ; check if source is numeric and return, else do type + ; mismatch + + ; Evaluate FNx +LAB_201E + JSR LAB_200B ; check FNx syntax + PHA ; push function pointer low byte + TYA ; copy function pointer high byte + PHA ; push function pointer high byte + JSR LAB_1BFE ; scan for "(", else do syntax error then warm start + JSR LAB_EVEX ; evaluate expression + JSR LAB_1BFB ; scan for ")", else do syntax error then warm start + JSR LAB_CTNM ; check if source is numeric, else do type mismatch + PLA ; pop function pointer high byte + STA func_h ; restore it + PLA ; pop function pointer low byte + STA func_l ; restore it + LDX #$20 ; error code $20 ("Undefined function" error) + LDY #$03 ; index to variable pointer high byte + LDA (func_l),Y ; get variable pointer high byte + BEQ LAB_1FDB ; if zero go do undefined function error + + STA Cvarah ; save variable address high byte + DEY ; index to variable address low byte + LDA (func_l),Y ; get variable address low byte + STA Cvaral ; save variable address low byte + TAX ; copy address low byte + + ; now stack the function variable value before use + INY ; index to mantissa_3 +LAB_2043 + LDA (Cvaral),Y ; get byte from variable + PHA ; stack it + DEY ; decrement index + BPL LAB_2043 ; loop until variable stacked + + LDY Cvarah ; get variable address high byte + JSR LAB_2778 ; pack FAC1 (function expression value) into (XY) + ; (function variable), return Y=0, always + LDA Bpntrh ; get BASIC execute pointer high byte + PHA ; push it + LDA Bpntrl ; get BASIC execute pointer low byte + PHA ; push it + LDA (func_l),Y ; get function execute pointer low byte + STA Bpntrl ; save as BASIC execute pointer low byte + INY ; index to high byte + LDA (func_l),Y ; get function execute pointer high byte + STA Bpntrh ; save as BASIC execute pointer high byte + LDA Cvarah ; get variable address high byte + PHA ; push it + LDA Cvaral ; get variable address low byte + PHA ; push it + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + PLA ; pull variable address low byte + STA func_l ; save variable address low byte + PLA ; pull variable address high byte + STA func_h ; save variable address high byte + JSR LAB_GBYT ; scan memory + BEQ LAB_2074 ; branch if null (should be [EOL] marker) + + JMP LAB_SNER ; else syntax error then warm start + +; restore Bpntrl,Bpntrh and function variable from stack + +LAB_2074 + PLA ; pull BASIC execute pointer low byte + STA Bpntrl ; restore BASIC execute pointer low byte + PLA ; pull BASIC execute pointer high byte + STA Bpntrh ; restore BASIC execute pointer high byte + +; put execute pointer and variable pointer into function + +LAB_207A + LDY #$00 ; clear index + PLA ; pull BASIC execute pointer low byte + STA (func_l),Y ; save to function + INY ; increment index + PLA ; pull BASIC execute pointer high byte + STA (func_l),Y ; save to function + INY ; increment index + PLA ; pull current var address low byte + STA (func_l),Y ; save to function + INY ; increment index + PLA ; pull current var address high byte + STA (func_l),Y ; save to function + RTS + +; perform STR$() + +LAB_STRS + JSR LAB_CTNM ; check if source is numeric, else do type mismatch + JSR LAB_296E ; convert FAC1 to string + LDA #Decssp1 ; set result string high pointer + BEQ LAB_20AE ; print null terminated string to Sutill/Sutilh + +; Do string vector +; copy des_pl/h to des_2l/h and make string space A bytes long + +LAB_209C + LDX des_pl ; get descriptor pointer low byte + LDY des_ph ; get descriptor pointer high byte + STX des_2l ; save descriptor pointer low byte + STY des_2h ; save descriptor pointer high byte + +; make string space A bytes long +; A=length, X=Sutill=ptr low byte, Y=Sutilh=ptr high byte + +LAB_MSSP + JSR LAB_2115 ; make space in string memory for string A long + ; return X=Sutill=ptr low byte, Y=Sutilh=ptr high byte + STX str_pl ; save string pointer low byte + STY str_ph ; save string pointer high byte + STA str_ln ; save length + RTS + +; Scan, set up string +; print " terminated string to Sutill/Sutilh + +LAB_20AE + LDX #$22 ; set terminator to " + STX Srchc ; set search character (terminator 1) + STX Asrch ; set terminator 2 + +; print [Srchc] or [Asrch] terminated string to Sutill/Sutilh +; source is AY + +LAB_20B4 + STA ssptr_l ; store string start low byte + STY ssptr_h ; store string start high byte + STA str_pl ; save string pointer low byte + STY str_ph ; save string pointer high byte + LDY #$FF ; set length to -1 +LAB_20BE + INY ; increment length + LDA (ssptr_l),Y ; get byte from string + BEQ LAB_20CF ; exit loop if null byte [EOS] + + CMP Srchc ; compare with search character (terminator 1) + BEQ LAB_20CB ; branch if terminator + + CMP Asrch ; compare with terminator 2 + BNE LAB_20BE ; loop if not terminator 2 + +LAB_20CB + CMP #$22 ; compare with " + BEQ LAB_20D0 ; branch if " (carry set if = !) + +LAB_20CF + CLC ; clear carry for add (only if [EOL] terminated string) +LAB_20D0 + STY str_ln ; save length in FAC1 exponent + TYA ; copy length to A + ADC ssptr_l ; add string start low byte + STA Sendl ; save string end low byte + LDX ssptr_h ; get string start high byte + BCC LAB_20DC ; branch if no low byte overflow + + INX ; else increment high byte +LAB_20DC + STX Sendh ; save string end high byte + LDA ssptr_h ; get string start high byte + CMP #>Ram_base ; compare with start of program memory + BCS LAB_RTST ; branch if not in utility area + + ; string in utility area, move to string memory + TYA ; copy length to A + JSR LAB_209C ; copy des_pl/h to des_2l/h and make string space A bytes + ; long + LDX ssptr_l ; get string start low byte + LDY ssptr_h ; get string start high byte + JSR LAB_2298 ; store string A bytes long from XY to (Sutill) + +; check for space on descriptor stack then .. +; put string address and length on descriptor stack and update stack pointers + +LAB_RTST + LDX next_s ; get string stack pointer + CPX #des_sk+$09 ; compare with max+1 + BNE LAB_20F8 ; branch if space on string stack + + ; else do string too complex error + LDX #$1C ; error code $1C ("String too complex" error) +LAB_20F5 + JMP LAB_XERR ; do error #X, then warm start + +; put string address and length on descriptor stack and update stack pointers + +LAB_20F8 + LDA str_ln ; get string length + STA PLUS_0,X ; put on string stack + LDA str_pl ; get string pointer low byte + STA PLUS_1,X ; put on string stack + LDA str_ph ; get string pointer high byte + STA PLUS_2,X ; put on string stack + LDY #$00 ; clear Y + STX des_pl ; save string descriptor pointer low byte + STY des_ph ; save string descriptor pointer high byte (always $00) + DEY ; Y = $FF + STY Dtypef ; save data type flag, $FF=string + STX last_sl ; save old stack pointer (current top item) + INX ; update stack pointer + INX ; update stack pointer + INX ; update stack pointer + STX next_s ; save new top item value + RTS + +; Build descriptor +; make space in string memory for string A long +; return X=Sutill=ptr low byte, Y=Sutill=ptr high byte + +LAB_2115 + LSR Gclctd ; clear garbage collected flag (b7) + + ; make space for string A long +LAB_2117 + PHA ; save string length + EOR #$FF ; complement it + SEC ; set carry for subtract (twos comp add) + ADC Sstorl ; add bottom of string space low byte (subtract length) + LDY Sstorh ; get bottom of string space high byte + BCS LAB_2122 ; skip decrement if no underflow + + DEY ; decrement bottom of string space high byte +LAB_2122 + CPY Earryh ; compare with array mem end high byte + BCC LAB_2137 ; do out of memory error if less + + BNE LAB_212C ; if not = skip next test + + CMP Earryl ; compare with array mem end low byte + BCC LAB_2137 ; do out of memory error if less + +LAB_212C + STA Sstorl ; save bottom of string space low byte + STY Sstorh ; save bottom of string space high byte + STA Sutill ; save string utility ptr low byte + STY Sutilh ; save string utility ptr high byte + TAX ; copy low byte to X + PLA ; get string length back + RTS + +LAB_2137 + LDX #$0C ; error code $0C ("Out of memory" error) + LDA Gclctd ; get garbage collected flag + BMI LAB_20F5 ; if set then do error code X + + JSR LAB_GARB ; else go do garbage collection + LDA #$80 ; flag for garbage collected + STA Gclctd ; set garbage collected flag + PLA ; pull length + BNE LAB_2117 ; go try again (loop always, length should never be = $00) + +; garbage collection routine + +LAB_GARB + LDX Ememl ; get end of mem low byte + LDA Ememh ; get end of mem high byte + +; re-run routine from last ending + +LAB_214B + STX Sstorl ; set string storage low byte + STA Sstorh ; set string storage high byte + LDY #$00 ; clear index + STY garb_h ; clear working pointer high byte (flag no strings to move) + LDA Earryl ; get array mem end low byte + LDX Earryh ; get array mem end high byte + STA Histrl ; save as highest string low byte + STX Histrh ; save as highest string high byte + LDA #des_sk ; set descriptor stack pointer + STA ut1_pl ; save descriptor stack pointer low byte + STY ut1_ph ; save descriptor stack pointer high byte ($00) +LAB_2161 + CMP next_s ; compare with descriptor stack pointer + BEQ LAB_216A ; branch if = + + JSR LAB_21D7 ; go garbage collect descriptor stack + BEQ LAB_2161 ; loop always + + ; done stacked strings, now do string vars +LAB_216A + ASL g_step ; set step size = $06 + LDA Svarl ; get start of vars low byte + LDX Svarh ; get start of vars high byte + STA ut1_pl ; save as pointer low byte + STX ut1_ph ; save as pointer high byte +LAB_2176 + CPX Sarryh ; compare start of arrays high byte + BNE LAB_217E ; branch if no high byte match + + CMP Sarryl ; else compare start of arrays low byte + BEQ LAB_2183 ; branch if = var mem end + +LAB_217E + JSR LAB_21D1 ; go garbage collect strings + BEQ LAB_2176 ; loop always + + ; done string vars, now do string arrays +LAB_2183 + STA Nbendl ; save start of arrays low byte as working pointer + STX Nbendh ; save start of arrays high byte as working pointer + LDA #$04 ; set step size + STA g_step ; save step size +LAB_218B + LDA Nbendl ; get pointer low byte + LDX Nbendh ; get pointer high byte +LAB_218F + CPX Earryh ; compare with array mem end high byte + BNE LAB_219A ; branch if not at end + + CMP Earryl ; else compare with array mem end low byte + BEQ LAB_2216 ; tidy up and exit if at end + +LAB_219A + STA ut1_pl ; save pointer low byte + STX ut1_ph ; save pointer high byte + LDY #$02 ; set index + LDA (ut1_pl),Y ; get array size low byte + ADC Nbendl ; add start of this array low byte + STA Nbendl ; save start of next array low byte + INY ; increment index + LDA (ut1_pl),Y ; get array size high byte + ADC Nbendh ; add start of this array high byte + STA Nbendh ; save start of next array high byte + LDY #$01 ; set index + LDA (ut1_pl),Y ; get name second byte + BPL LAB_218B ; skip if not string array + +; was string array so .. + + LDY #$04 ; set index + LDA (ut1_pl),Y ; get # of dimensions + ASL ; *2 + ADC #$05 ; +5 (array header size) + JSR LAB_2208 ; go set up for first element +LAB_21C4 + CPX Nbendh ; compare with start of next array high byte + BNE LAB_21CC ; branch if <> (go do this array) + + CMP Nbendl ; else compare element pointer low byte with next array + ; low byte + BEQ LAB_218F ; if equal then go do next array + +LAB_21CC + JSR LAB_21D7 ; go defrag array strings + BEQ LAB_21C4 ; go do next array string (loop always) + +; defrag string variables +; enter with XA = variable pointer +; return with XA = next variable pointer + +LAB_21D1 + INY ; increment index (Y was $00) + LDA (ut1_pl),Y ; get var name byte 2 + BPL LAB_2206 ; if not string, step pointer to next var and return + + INY ; else increment index +LAB_21D7 + LDA (ut1_pl),Y ; get string length + BEQ LAB_2206 ; if null, step pointer to next string and return + + INY ; else increment index + LDA (ut1_pl),Y ; get string pointer low byte + TAX ; copy to X + INY ; increment index + LDA (ut1_pl),Y ; get string pointer high byte + CMP Sstorh ; compare bottom of string space high byte + BCC LAB_21EC ; branch if less + + BNE LAB_2206 ; if greater, step pointer to next string and return + + ; high bytes were = so compare low bytes + CPX Sstorl ; compare bottom of string space low byte + BCS LAB_2206 ; if >=, step pointer to next string and return + + ; string pointer is < string storage pointer (pos in mem) +LAB_21EC + CMP Histrh ; compare to highest string high byte + BCC LAB_2207 ; if <, step pointer to next string and return + + BNE LAB_21F6 ; if > update pointers, step to next and return + + ; high bytes were = so compare low bytes + CPX Histrl ; compare to highest string low byte + BCC LAB_2207 ; if <, step pointer to next string and return + + ; string is in string memory space +LAB_21F6 + STX Histrl ; save as new highest string low byte + STA Histrh ; save as new highest string high byte + LDA ut1_pl ; get start of vars(descriptors) low byte + LDX ut1_ph ; get start of vars(descriptors) high byte + STA garb_l ; save as working pointer low byte + STX garb_h ; save as working pointer high byte + DEY ; decrement index DIFFERS + DEY ; decrement index (should point to descriptor start) + STY g_indx ; save index pointer + + ; step pointer to next string +LAB_2206 + CLC ; clear carry for add +LAB_2207 + LDA g_step ; get step size +LAB_2208 + ADC ut1_pl ; add pointer low byte + STA ut1_pl ; save pointer low byte + BCC LAB_2211 ; branch if no overflow + + INC ut1_ph ; else increment high byte +LAB_2211 + LDX ut1_ph ; get pointer high byte + LDY #$00 ; clear Y + RTS + +; search complete, now either exit or set-up and move string + +LAB_2216 + DEC g_step ; decrement step size (now $03 for descriptor stack) + LDX garb_h ; get string to move high byte + BEQ LAB_2211 ; exit if nothing to move + + LDY g_indx ; get index byte back (points to descriptor) + CLC ; clear carry for add + LDA (garb_l),Y ; get string length + ADC Histrl ; add highest string low byte + STA Obendl ; save old block end low pointer + LDA Histrh ; get highest string high byte + ADC #$00 ; add any carry + STA Obendh ; save old block end high byte + LDA Sstorl ; get bottom of string space low byte + LDX Sstorh ; get bottom of string space high byte + STA Nbendl ; save new block end low byte + STX Nbendh ; save new block end high byte + JSR LAB_11D6 ; open up space in memory, don't set array end + LDY g_indx ; get index byte + INY ; point to descriptor low byte + LDA Nbendl ; get string pointer low byte + STA (garb_l),Y ; save new string pointer low byte + TAX ; copy string pointer low byte + INC Nbendh ; correct high byte (move sets high byte -1) + LDA Nbendh ; get new string pointer high byte + INY ; point to descriptor high byte + STA (garb_l),Y ; save new string pointer high byte + JMP LAB_214B ; re-run routine from last ending + ; (but don't collect this string) + +; concatenate +; add strings, string 1 is in descriptor des_pl, string 2 is in line + +LAB_224D + LDA des_ph ; get descriptor pointer high byte + PHA ; put on stack + LDA des_pl ; get descriptor pointer low byte + PHA ; put on stack + JSR LAB_GVAL ; get value from line + JSR LAB_CTST ; check if source is string, else do type mismatch + PLA ; get descriptor pointer low byte back + STA ssptr_l ; set pointer low byte + PLA ; get descriptor pointer high byte back + STA ssptr_h ; set pointer high byte + LDY #$00 ; clear index + LDA (ssptr_l),Y ; get length_1 from descriptor + CLC ; clear carry for add + ADC (des_pl),Y ; add length_2 + BCC LAB_226D ; branch if no overflow + + LDX #$1A ; else set error code $1A ("String too long" error) + JMP LAB_XERR ; do error #X, then warm start + +LAB_226D + JSR LAB_209C ; copy des_pl/h to des_2l/h and make string space A bytes + ; long + JSR LAB_228A ; copy string from descriptor (sdescr) to (Sutill) + LDA des_2l ; get descriptor pointer low byte + LDY des_2h ; get descriptor pointer high byte + JSR LAB_22BA ; pop (YA) descriptor off stack or from top of string space + ; returns with A = length, ut1_pl = pointer low byte, + ; ut1_ph = pointer high byte + JSR LAB_229C ; store string A bytes long from (ut1_pl) to (Sutill) + LDA ssptr_l ;.set descriptor pointer low byte + LDY ssptr_h ;.set descriptor pointer high byte + JSR LAB_22BA ; pop (YA) descriptor off stack or from top of string space + ; returns with A = length, X=ut1_pl=pointer low byte, + ; Y=ut1_ph=pointer high byte + JSR LAB_RTST ; check for space on descriptor stack then put string + ; address and length on descriptor stack and update stack + ; pointers + JMP LAB_1ADB ;.continue evaluation + +; copy string from descriptor (sdescr) to (Sutill) + +LAB_228A + LDY #$00 ; clear index + LDA (sdescr),Y ; get string length + PHA ; save on stack + INY ; increment index + LDA (sdescr),Y ; get source string pointer low byte + TAX ; copy to X + INY ; increment index + LDA (sdescr),Y ; get source string pointer high byte + TAY ; copy to Y + PLA ; get length back + +; store string A bytes long from YX to (Sutill) + +LAB_2298 + STX ut1_pl ; save source string pointer low byte + STY ut1_ph ; save source string pointer high byte + +; store string A bytes long from (ut1_pl) to (Sutill) + +LAB_229C + TAX ; copy length to index (don't count with Y) + BEQ LAB_22B2 ; branch if = $0 (null string) no need to add zero length + + LDY #$00 ; zero pointer (copy forward) +LAB_22A0 + LDA (ut1_pl),Y ; get source byte + STA (Sutill),Y ; save destination byte + + INY ; increment index + DEX ; decrement counter + BNE LAB_22A0 ; loop while <> 0 + + TYA ; restore length from Y +LAB_22A9 + CLC ; clear carry for add + ADC Sutill ; add string utility ptr low byte + STA Sutill ; save string utility ptr low byte + BCC LAB_22B2 ; branch if no carry + + INC Sutilh ; else increment string utility ptr high byte +LAB_22B2 + RTS + +; evaluate string + +LAB_EVST + JSR LAB_CTST ; check if source is string, else do type mismatch + +; pop string off descriptor stack, or from top of string space +; returns with A = length, X=pointer low byte, Y=pointer high byte + +LAB_22B6 + LDA des_pl ; get descriptor pointer low byte + LDY des_ph ; get descriptor pointer high byte + +; pop (YA) descriptor off stack or from top of string space +; returns with A = length, X=ut1_pl=pointer low byte, Y=ut1_ph=pointer high byte + +LAB_22BA + STA ut1_pl ; save descriptor pointer low byte + STY ut1_ph ; save descriptor pointer high byte + JSR LAB_22EB ; clean descriptor stack, YA = pointer + PHP ; save status flags + LDY #$00 ; clear index + LDA (ut1_pl),Y ; get length from string descriptor + PHA ; put on stack + INY ; increment index + LDA (ut1_pl),Y ; get string pointer low byte from descriptor + TAX ; copy to X + INY ; increment index + LDA (ut1_pl),Y ; get string pointer high byte from descriptor + TAY ; copy to Y + PLA ; get string length back + PLP ; restore status + BNE LAB_22E6 ; branch if pointer <> last_sl,last_sh + + CPY Sstorh ; compare bottom of string space high byte + BNE LAB_22E6 ; branch if <> + + CPX Sstorl ; else compare bottom of string space low byte + BNE LAB_22E6 ; branch if <> + + PHA ; save string length + CLC ; clear carry for add + ADC Sstorl ; add bottom of string space low byte + STA Sstorl ; save bottom of string space low byte + BCC LAB_22E5 ; skip increment if no overflow + + INC Sstorh ; increment bottom of string space high byte +LAB_22E5 + PLA ; restore string length +LAB_22E6 + STX ut1_pl ; save string pointer low byte + STY ut1_ph ; save string pointer high byte + RTS + +; clean descriptor stack, YA = pointer +; checks if AY is on the descriptor stack, if so does a stack discard + +LAB_22EB + CPY last_sh ; compare pointer high byte + BNE LAB_22FB ; exit if <> + + CMP last_sl ; compare pointer low byte + BNE LAB_22FB ; exit if <> + + STA next_s ; save descriptor stack pointer + SBC #$03 ; -3 + STA last_sl ; save low byte -3 + LDY #$00 ; clear high byte +LAB_22FB + RTS + +; perform CHR$() + +LAB_CHRS + JSR LAB_EVBY ; evaluate byte expression, result in X + TXA ; copy to A + PHA ; save character + LDA #$01 ; string is single byte + JSR LAB_MSSP ; make string space A bytes long A=$AC=length, + ; X=$AD=Sutill=ptr low byte, Y=$AE=Sutilh=ptr high byte + PLA ; get character back + LDY #$00 ; clear index + STA (str_pl),Y ; save byte in string (byte IS string!) + JMP LAB_RTST ; check for space on descriptor stack then put string + ; address and length on descriptor stack and update stack + ; pointers + +; perform LEFT$() + +LAB_LEFT + PHA ; push byte parameter + JSR LAB_236F ; pull string data and byte parameter from stack + ; return pointer in des_2l/h, byte in A (and X), Y=0 + CMP (des_2l),Y ; compare byte parameter with string length + TYA ; clear A + BEQ LAB_2316 ; go do string copy (branch always) + +; perform RIGHT$() + +LAB_RIGHT + PHA ; push byte parameter + JSR LAB_236F ; pull string data and byte parameter from stack + ; return pointer in des_2l/h, byte in A (and X), Y=0 + CLC ; clear carry for add-1 + SBC (des_2l),Y ; subtract string length + EOR #$FF ; invert it (A=LEN(expression$)-l) + +LAB_2316 + BCC LAB_231C ; branch if string length > byte parameter + + LDA (des_2l),Y ; else make parameter = length + TAX ; copy to byte parameter copy + TYA ; clear string start offset +LAB_231C + PHA ; save string start offset +LAB_231D + TXA ; copy byte parameter (or string length if <) +LAB_231E + PHA ; save string length + JSR LAB_MSSP ; make string space A bytes long A=$AC=length, + ; X=$AD=Sutill=ptr low byte, Y=$AE=Sutilh=ptr high byte + LDA des_2l ; get descriptor pointer low byte + LDY des_2h ; get descriptor pointer high byte + JSR LAB_22BA ; pop (YA) descriptor off stack or from top of string space + ; returns with A = length, X=ut1_pl=pointer low byte, + ; Y=ut1_ph=pointer high byte + PLA ; get string length back + TAY ; copy length to Y + PLA ; get string start offset back + CLC ; clear carry for add + ADC ut1_pl ; add start offset to string start pointer low byte + STA ut1_pl ; save string start pointer low byte + BCC LAB_2335 ; branch if no overflow + + INC ut1_ph ; else increment string start pointer high byte +LAB_2335 + TYA ; copy length to A + JSR LAB_229C ; store string A bytes long from (ut1_pl) to (Sutill) + JMP LAB_RTST ; check for space on descriptor stack then put string + ; address and length on descriptor stack and update stack + ; pointers + +; perform MID$() + +LAB_MIDS + PHA ; push byte parameter + LDA #$FF ; set default length = 255 + STA mids_l ; save default length + JSR LAB_GBYT ; scan memory + CMP #')' ; compare with ")" + BEQ LAB_2358 ; branch if = ")" (skip second byte get) + + JSR LAB_1C01 ; scan for "," , else do syntax error then warm start + JSR LAB_GTBY ; get byte parameter (use copy in mids_l) +LAB_2358 + JSR LAB_236F ; pull string data and byte parameter from stack + ; return pointer in des_2l/h, byte in A (and X), Y=0 + DEX ; decrement start index + TXA ; copy to A + PHA ; save string start offset + CLC ; clear carry for sub-1 + LDX #$00 ; clear output string length + SBC (des_2l),Y ; subtract string length + BCS LAB_231D ; if start>string length go do null string + + EOR #$FF ; complement -length + CMP mids_l ; compare byte parameter + BCC LAB_231E ; if length>remaining string go do RIGHT$ + + LDA mids_l ; get length byte + BCS LAB_231E ; go do string copy (branch always) + +; pull string data and byte parameter from stack +; return pointer in des_2l/h, byte in A (and X), Y=0 + +LAB_236F + JSR LAB_1BFB ; scan for ")" , else do syntax error then warm start + PLA ; pull return address low byte (return address) + STA Fnxjpl ; save functions jump vector low byte + PLA ; pull return address high byte (return address) + STA Fnxjph ; save functions jump vector high byte + PLA ; pull byte parameter + TAX ; copy byte parameter to X + PLA ; pull string pointer low byte + STA des_2l ; save it + PLA ; pull string pointer high byte + STA des_2h ; save it + LDY #$00 ; clear index + TXA ; copy byte parameter + BEQ LAB_23A8 ; if null do function call error then warm start + + INC Fnxjpl ; increment function jump vector low byte + ; (JSR pushes return addr-1. this is all very nice + ; but will go tits up if either call is on a page + ; boundary!) + JMP (Fnxjpl) ; in effect, RTS + +; perform LCASE$() + +LAB_LCASE + JSR LAB_EVST ; evaluate string + STA str_ln ; set string length + TAY ; copy length to Y + BEQ NoString ; branch if null string + + JSR LAB_MSSP ; make string space A bytes long A=length, + ; X=Sutill=ptr low byte, Y=Sutilh=ptr high byte + STX str_pl ; save string pointer low byte + STY str_ph ; save string pointer high byte + TAY ; get string length back + +LC_loop + DEY ; decrement index + LDA (ut1_pl),Y ; get byte from string + JSR LAB_1D82 ; is character "A" to "Z" + BCC NoUcase ; branch if not upper case alpha + + ORA #$20 ; convert upper to lower case +NoUcase + STA (Sutill),Y ; save byte back to string + TYA ; test index + BNE LC_loop ; loop if not all done + + BEQ NoString ; tidy up and exit, branch always + +; perform UCASE$() + +LAB_UCASE + JSR LAB_EVST ; evaluate string + STA str_ln ; set string length + TAY ; copy length to Y + BEQ NoString ; branch if null string + + JSR LAB_MSSP ; make string space A bytes long A=length, + ; X=Sutill=ptr low byte, Y=Sutilh=ptr high byte + STX str_pl ; save string pointer low byte + STY str_ph ; save string pointer high byte + TAY ; get string length back + +UC_loop + DEY ; decrement index + LDA (ut1_pl),Y ; get byte from string + JSR LAB_CASC ; is character "a" to "z" (or "A" to "Z") + BCC NoLcase ; branch if not alpha + + AND #$DF ; convert lower to upper case +NoLcase + STA (Sutill),Y ; save byte back to string + TYA ; test index + BNE UC_loop ; loop if not all done + +NoString + JMP LAB_RTST ; check for space on descriptor stack then put string + ; address and length on descriptor stack and update stack + ; pointers + +; perform SADD() + +LAB_SADD + JSR LAB_IGBY ; increment and scan memory + JSR LAB_GVAR ; get var address + + JSR LAB_1BFB ; scan for ")", else do syntax error then warm start + JSR LAB_CTST ; check if source is string, else do type mismatch + + LDY #$02 ; index to string pointer high byte + LDA (Cvaral),Y ; get string pointer high byte + TAX ; copy string pointer high byte to X + DEY ; index to string pointer low byte + LDA (Cvaral),Y ; get string pointer low byte + TAY ; copy string pointer low byte to Y + TXA ; copy string pointer high byte to A + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; perform LEN() + +LAB_LENS + JSR LAB_ESGL ; evaluate string, get length in A (and Y) + JMP LAB_1FD0 ; convert Y to byte in FAC1 and return + +; evaluate string, get length in Y + +LAB_ESGL + JSR LAB_EVST ; evaluate string + TAY ; copy length to Y + RTS + +; perform ASC() + +LAB_ASC + JSR LAB_ESGL ; evaluate string, get length in A (and Y) + BEQ LAB_23A8 ; if null do function call error then warm start + + LDY #$00 ; set index to first character + LDA (ut1_pl),Y ; get byte + TAY ; copy to Y + JMP LAB_1FD0 ; convert Y to byte in FAC1 and return + +; do function call error then warm start + +LAB_23A8 + JMP LAB_FCER ; do function call error then warm start + +; scan and get byte parameter + +LAB_SGBY + JSR LAB_IGBY ; increment and scan memory + +; get byte parameter + +LAB_GTBY + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + +; evaluate byte expression, result in X + +LAB_EVBY + JSR LAB_EVPI ; evaluate integer expression (no check) + + LDY FAC1_2 ; get FAC1 mantissa2 + BNE LAB_23A8 ; if top byte <> 0 do function call error then warm start + + LDX FAC1_3 ; get FAC1 mantissa3 + JMP LAB_GBYT ; scan memory and return + +; perform VAL() + +LAB_VAL + JSR LAB_ESGL ; evaluate string, get length in A (and Y) + BNE LAB_23C5 ; branch if not null string + + ; string was null so set result = $00 + JMP LAB_24F1 ; clear FAC1 exponent and sign and return + +LAB_23C5 + LDX Bpntrl ; get BASIC execute pointer low byte + LDY Bpntrh ; get BASIC execute pointer high byte + STX Btmpl ; save BASIC execute pointer low byte + STY Btmph ; save BASIC execute pointer high byte + LDX ut1_pl ; get string pointer low byte + STX Bpntrl ; save as BASIC execute pointer low byte + CLC ; clear carry + ADC ut1_pl ; add string length + STA ut2_pl ; save string end low byte + LDA ut1_ph ; get string pointer high byte + STA Bpntrh ; save as BASIC execute pointer high byte + ADC #$00 ; add carry to high byte + STA ut2_ph ; save string end high byte + LDY #$00 ; set index to $00 + LDA (ut2_pl),Y ; get string end +1 byte + PHA ; push it + TYA ; clear A + STA (ut2_pl),Y ; terminate string with $00 + JSR LAB_GBYT ; scan memory + JSR LAB_2887 ; get FAC1 from string + PLA ; restore string end +1 byte + LDY #$00 ; set index to zero + STA (ut2_pl),Y ; put string end byte back + +; restore BASIC execute pointer from temp (Btmpl/Btmph) + +LAB_23F3 + LDX Btmpl ; get BASIC execute pointer low byte back + LDY Btmph ; get BASIC execute pointer high byte back + STX Bpntrl ; save BASIC execute pointer low byte + STY Bpntrh ; save BASIC execute pointer high byte + RTS + +; get two parameters for POKE or WAIT + +LAB_GADB + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + JSR LAB_F2FX ; save integer part of FAC1 in temporary integer + +; scan for "," and get byte, else do Syntax error then warm start + +LAB_SCGB + JSR LAB_1C01 ; scan for "," , else do syntax error then warm start + LDA Itemph ; save temporary integer high byte + PHA ; on stack + LDA Itempl ; save temporary integer low byte + PHA ; on stack + JSR LAB_GTBY ; get byte parameter + PLA ; pull low byte + STA Itempl ; restore temporary integer low byte + PLA ; pull high byte + STA Itemph ; restore temporary integer high byte + RTS + +; convert float to fixed routine. accepts any value that fits in 24 bits, +ve or +; -ve and converts it into a right truncated integer in Itempl and Itemph + +; save unsigned 16 bit integer part of FAC1 in temporary integer + +LAB_F2FX + LDA FAC1_e ; get FAC1 exponent + CMP #$98 ; compare with exponent = 2^24 + BCS LAB_23A8 ; if >= do function call error then warm start + +LAB_F2FU + JSR LAB_2831 ; convert FAC1 floating-to-fixed + LDA FAC1_2 ; get FAC1 mantissa2 + LDY FAC1_3 ; get FAC1 mantissa3 + STY Itempl ; save temporary integer low byte + STA Itemph ; save temporary integer high byte + RTS + +; perform PEEK() + +LAB_PEEK + JSR LAB_F2FX ; save integer part of FAC1 in temporary integer + LDX #$00 ; clear index + LDA (Itempl,X) ; get byte via temporary integer (addr) + TAY ; copy byte to Y + JMP LAB_1FD0 ; convert Y to byte in FAC1 and return + +; perform POKE + +LAB_POKE + JSR LAB_GADB ; get two parameters for POKE or WAIT + TXA ; copy byte argument to A + LDX #$00 ; clear index + STA (Itempl,X) ; save byte via temporary integer (addr) + RTS + +; perform DEEK() + +LAB_DEEK + JSR LAB_F2FX ; save integer part of FAC1 in temporary integer + LDX #$00 ; clear index + LDA (Itempl,X) ; PEEK low byte + TAY ; copy to Y + INC Itempl ; increment pointer low byte + BNE Deekh ; skip high increment if no rollover + + INC Itemph ; increment pointer high byte +Deekh + LDA (Itempl,X) ; PEEK high byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; perform DOKE + +LAB_DOKE + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + JSR LAB_F2FX ; convert floating-to-fixed + + STY Frnxtl ; save pointer low byte (float to fixed returns word in AY) + STA Frnxth ; save pointer high byte + + JSR LAB_1C01 ; scan for "," , else do syntax error then warm start + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + JSR LAB_F2FX ; convert floating-to-fixed + + TYA ; copy value low byte (float to fixed returns word in AY) + LDX #$00 ; clear index + STA (Frnxtl,X) ; POKE low byte + INC Frnxtl ; increment pointer low byte + BNE Dokeh ; skip high increment if no rollover + + INC Frnxth ; increment pointer high byte +Dokeh + LDA Itemph ; get value high byte + STA (Frnxtl,X) ; POKE high byte + JMP LAB_GBYT ; scan memory and return + +; perform SWAP + +LAB_SWAP + JSR LAB_GVAR ; get var1 address + STA Lvarpl ; save var1 address low byte + STY Lvarph ; save var1 address high byte + LDA Dtypef ; get data type flag, $FF=string, $00=numeric + PHA ; save data type flag + + JSR LAB_1C01 ; scan for "," , else do syntax error then warm start + JSR LAB_GVAR ; get var2 address (pointer in Cvaral/h) + PLA ; pull var1 data type flag + EOR Dtypef ; compare with var2 data type + BPL SwapErr ; exit if not both the same type + + LDY #$03 ; four bytes to swap (either value or descriptor+1) +SwapLp + LDA (Lvarpl),Y ; get byte from var1 + TAX ; save var1 byte + LDA (Cvaral),Y ; get byte from var2 + STA (Lvarpl),Y ; save byte to var1 + TXA ; restore var1 byte + STA (Cvaral),Y ; save byte to var2 + DEY ; decrement index + BPL SwapLp ; loop until done + + RTS + +SwapErr + JMP LAB_1ABC ; do "Type mismatch" error then warm start + +; perform CALL + +LAB_CALL + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + JSR LAB_F2FX ; convert floating-to-fixed + LDA #>CallExit ; set return address high byte + PHA ; put on stack + LDA #8 shifts) + BCC LAB_24A8 ;.go subtract mantissas + +; add 0.5 to FAC1 + +LAB_244E + LDA #LAB_2A96 ; set 0.5 pointer high byte + +; add (AY) to FAC1 + +LAB_246C + JSR LAB_264D ; unpack memory (AY) into FAC2 + +; add FAC2 to FAC1 + +LAB_ADD + BNE LAB_2474 ; branch if FAC1 was not zero + +; copy FAC2 to FAC1 + +LAB_279B + LDA FAC2_s ; get FAC2 sign (b7) + +; save FAC1 sign and copy ABS(FAC2) to FAC1 + +LAB_279D + STA FAC1_s ; save FAC1 sign (b7) + LDX #$04 ; 4 bytes to copy +LAB_27A1 + LDA FAC1_o,X ; get byte from FAC2,X + STA FAC1_e-1,X ; save byte at FAC1,X + DEX ; decrement count + BNE LAB_27A1 ; loop if not all done + + STX FAC1_r ; clear FAC1 rounding byte + RTS + + ; FAC1 is non zero +LAB_2474 + LDX FAC1_r ; get FAC1 rounding byte + STX FAC2_r ; save as FAC2 rounding byte + LDX #FAC2_e ; set index to FAC2 exponent addr + LDA FAC2_e ; get FAC2 exponent +LAB_247C + TAY ; copy exponent + BEQ LAB_244D ; exit if zero + + SEC ; set carry for subtract + SBC FAC1_e ; subtract FAC1 exponent + BEQ LAB_24A8 ; branch if = (go add mantissa) + + BCC LAB_2498 ; branch if < + + ; FAC2>FAC1 + STY FAC1_e ; save FAC1 exponent + LDY FAC2_s ; get FAC2 sign (b7) + STY FAC1_s ; save FAC1 sign (b7) + EOR #$FF ; complement A + ADC #$00 ; +1 (twos complement, carry is set) + LDY #$00 ; clear Y + STY FAC2_r ; clear FAC2 rounding byte + LDX #FAC1_e ; set index to FAC1 exponent addr + BNE LAB_249C ; branch always + +LAB_2498 + LDY #$00 ; clear Y + STY FAC1_r ; clear FAC1 rounding byte +LAB_249C + CMP #$F9 ; compare exponent diff with $F9 + BMI LAB_2467 ; branch if range $79-$F8 + + TAY ; copy exponent difference to Y + LDA FAC1_r ; get FAC1 rounding byte + LSR PLUS_1,X ; shift FAC? mantissa1 + JSR LAB_2592 ; shift FACX Y times right + + ; exponents are equal now do mantissa subtract +LAB_24A8 + BIT FAC_sc ; test sign compare (FAC1 EOR FAC2) + BPL LAB_24F8 ; if = add FAC2 mantissa to FAC1 mantissa and return + + LDY #FAC1_e ; set index to FAC1 exponent addr + CPX #FAC2_e ; compare X to FAC2 exponent addr + BEQ LAB_24B4 ; branch if = + + LDY #FAC2_e ; else set index to FAC2 exponent addr + + ; subtract smaller from bigger (take sign of bigger) +LAB_24B4 + SEC ; set carry for subtract + EOR #$FF ; ones complement A + ADC FAC2_r ; add FAC2 rounding byte + STA FAC1_r ; save FAC1 rounding byte + LDA PLUS_3,Y ; get FACY mantissa3 + SBC PLUS_3,X ; subtract FACX mantissa3 + STA FAC1_3 ; save FAC1 mantissa3 + LDA PLUS_2,Y ; get FACY mantissa2 + SBC PLUS_2,X ; subtract FACX mantissa2 + STA FAC1_2 ; save FAC1 mantissa2 + LDA PLUS_1,Y ; get FACY mantissa1 + SBC PLUS_1,X ; subtract FACX mantissa1 + STA FAC1_1 ; save FAC1 mantissa1 + +; do ABS and normalise FAC1 + +LAB_24D0 + BCS LAB_24D5 ; branch if number is +ve + + JSR LAB_2537 ; negate FAC1 + +; normalise FAC1 + +LAB_24D5 + LDY #$00 ; clear Y + TYA ; clear A + CLC ; clear carry for add +LAB_24D9 + LDX FAC1_1 ; get FAC1 mantissa1 + BNE LAB_251B ; if not zero normalise FAC1 + + LDX FAC1_2 ; get FAC1 mantissa2 + STX FAC1_1 ; save FAC1 mantissa1 + LDX FAC1_3 ; get FAC1 mantissa3 + STX FAC1_2 ; save FAC1 mantissa2 + LDX FAC1_r ; get FAC1 rounding byte + STX FAC1_3 ; save FAC1 mantissa3 + STY FAC1_r ; clear FAC1 rounding byte + ADC #$08 ; add x to exponent offset + CMP #$18 ; compare with $18 (max offset, all bits would be =0) + BNE LAB_24D9 ; loop if not max + +; clear FAC1 exponent and sign + +LAB_24F1 + LDA #$00 ; clear A +LAB_24F3 + STA FAC1_e ; set FAC1 exponent + +; save FAC1 sign + +LAB_24F5 + STA FAC1_s ; save FAC1 sign (b7) + RTS + +; add FAC2 mantissa to FAC1 mantissa + +LAB_24F8 + ADC FAC2_r ; add FAC2 rounding byte + STA FAC1_r ; save FAC1 rounding byte + LDA FAC1_3 ; get FAC1 mantissa3 + ADC FAC2_3 ; add FAC2 mantissa3 + STA FAC1_3 ; save FAC1 mantissa3 + LDA FAC1_2 ; get FAC1 mantissa2 + ADC FAC2_2 ; add FAC2 mantissa2 + STA FAC1_2 ; save FAC1 mantissa2 + LDA FAC1_1 ; get FAC1 mantissa1 + ADC FAC2_1 ; add FAC2 mantissa1 + STA FAC1_1 ; save FAC1 mantissa1 + BCS LAB_252A ; if carry then normalise FAC1 for C=1 + + RTS ; else just exit + +LAB_2511 + ADC #$01 ; add 1 to exponent offset + ASL FAC1_r ; shift FAC1 rounding byte + ROL FAC1_3 ; shift FAC1 mantissa3 + ROL FAC1_2 ; shift FAC1 mantissa2 + ROL FAC1_1 ; shift FAC1 mantissa1 + +; normalise FAC1 + +LAB_251B + BPL LAB_2511 ; loop if not normalised + + SEC ; set carry for subtract + SBC FAC1_e ; subtract FAC1 exponent + BCS LAB_24F1 ; branch if underflow (set result = $0) + + EOR #$FF ; complement exponent + ADC #$01 ; +1 (twos complement) + STA FAC1_e ; save FAC1 exponent + +; test and normalise FAC1 for C=0/1 + +LAB_2528 + BCC LAB_2536 ; exit if no overflow + +; normalise FAC1 for C=1 + +LAB_252A + INC FAC1_e ; increment FAC1 exponent + BEQ LAB_2564 ; if zero do overflow error and warm start + + ROR FAC1_1 ; shift FAC1 mantissa1 + ROR FAC1_2 ; shift FAC1 mantissa2 + ROR FAC1_3 ; shift FAC1 mantissa3 + ROR FAC1_r ; shift FAC1 rounding byte +LAB_2536 + RTS + +; negate FAC1 + +LAB_2537 + LDA FAC1_s ; get FAC1 sign (b7) + EOR #$FF ; complement it + STA FAC1_s ; save FAC1 sign (b7) + +; twos complement FAC1 mantissa + +LAB_253D + LDA FAC1_1 ; get FAC1 mantissa1 + EOR #$FF ; complement it + STA FAC1_1 ; save FAC1 mantissa1 + LDA FAC1_2 ; get FAC1 mantissa2 + EOR #$FF ; complement it + STA FAC1_2 ; save FAC1 mantissa2 + LDA FAC1_3 ; get FAC1 mantissa3 + EOR #$FF ; complement it + STA FAC1_3 ; save FAC1 mantissa3 + LDA FAC1_r ; get FAC1 rounding byte + EOR #$FF ; complement it + STA FAC1_r ; save FAC1 rounding byte + INC FAC1_r ; increment FAC1 rounding byte + BNE LAB_2563 ; exit if no overflow + +; increment FAC1 mantissa + +LAB_2559 + INC FAC1_3 ; increment FAC1 mantissa3 + BNE LAB_2563 ; finished if no rollover + + INC FAC1_2 ; increment FAC1 mantissa2 + BNE LAB_2563 ; finished if no rollover + + INC FAC1_1 ; increment FAC1 mantissa1 +LAB_2563 + RTS + +; do overflow error (overflow exit) + +LAB_2564 + LDX #$0A ; error code $0A ("Overflow" error) + JMP LAB_XERR ; do error #X, then warm start + +; shift FCAtemp << A+8 times + +LAB_2569 + LDX #FACt_1-1 ; set offset to FACtemp +LAB_256B + LDY PLUS_3,X ; get FACX mantissa3 + STY FAC1_r ; save as FAC1 rounding byte + LDY PLUS_2,X ; get FACX mantissa2 + STY PLUS_3,X ; save FACX mantissa3 + LDY PLUS_1,X ; get FACX mantissa1 + STY PLUS_2,X ; save FACX mantissa2 + LDY FAC1_o ; get FAC1 overflow byte + STY PLUS_1,X ; save FACX mantissa1 + +; shift FACX -A times right (> 8 shifts) + +LAB_257B + ADC #$08 ; add 8 to shift count + BMI LAB_256B ; go do 8 shift if still -ve + + BEQ LAB_256B ; go do 8 shift if zero + + SBC #$08 ; else subtract 8 again + TAY ; save count to Y + LDA FAC1_r ; get FAC1 rounding byte + BCS LAB_259A ;. + +LAB_2588 + ASL PLUS_1,X ; shift FACX mantissa1 + BCC LAB_258E ; branch if +ve + + INC PLUS_1,X ; this sets b7 eventually +LAB_258E + ROR PLUS_1,X ; shift FACX mantissa1 (correct for ASL) + ROR PLUS_1,X ; shift FACX mantissa1 (put carry in b7) + +; shift FACX Y times right + +LAB_2592 + ROR PLUS_2,X ; shift FACX mantissa2 + ROR PLUS_3,X ; shift FACX mantissa3 + ROR ; shift FACX rounding byte + INY ; increment exponent diff + BNE LAB_2588 ; branch if range adjust not complete + +LAB_259A + CLC ; just clear it + RTS + +; perform LOG() + +LAB_LOG + JSR LAB_27CA ; test sign and zero + BEQ LAB_25C4 ; if zero do function call error then warm start + + BPL LAB_25C7 ; skip error if +ve + +LAB_25C4 + JMP LAB_FCER ; do function call error then warm start (-ve) + +LAB_25C7 + LDA FAC1_e ; get FAC1 exponent + SBC #$7F ; normalise it + PHA ; save it + LDA #$80 ; set exponent to zero + STA FAC1_e ; save FAC1 exponent + LDA #LAB_25AD ; set 1/root2 pointer high byte + JSR LAB_246C ; add (AY) to FAC1 (1/root2) + LDA #LAB_25B1 ; set root2 pointer high byte + JSR LAB_26CA ; convert AY and do (AY)/FAC1 (root2/(x+(1/root2))) + LDA #LAB_259C ; set 1 pointer high byte + JSR LAB_2455 ; subtract (AY) from FAC1 ((root2/(x+(1/root2)))-1) + LDA #LAB_25A0 ; set pointer high byte to counter + JSR LAB_2B6E ; ^2 then series evaluation + LDA #LAB_25B5 ; set -0.5 pointer high byte + JSR LAB_246C ; add (AY) to FAC1 + PLA ; restore FAC1 exponent + JSR LAB_2912 ; evaluate new ASCII digit + LDA #LAB_25B9 ; set LOG(2) pointer high byte + +; do convert AY, FCA1*(AY) + +LAB_25FB + JSR LAB_264D ; unpack memory (AY) into FAC2 +LAB_MULTIPLY + BEQ LAB_264C ; exit if zero + + JSR LAB_2673 ; test and adjust accumulators + LDA #$00 ; clear A + STA FACt_1 ; clear temp mantissa1 + STA FACt_2 ; clear temp mantissa2 + STA FACt_3 ; clear temp mantissa3 + LDA FAC1_r ; get FAC1 rounding byte + JSR LAB_2622 ; go do shift/add FAC2 + LDA FAC1_3 ; get FAC1 mantissa3 + JSR LAB_2622 ; go do shift/add FAC2 + LDA FAC1_2 ; get FAC1 mantissa2 + JSR LAB_2622 ; go do shift/add FAC2 + LDA FAC1_1 ; get FAC1 mantissa1 + JSR LAB_2627 ; go do shift/add FAC2 + JMP LAB_273C ; copy temp to FAC1, normalise and return + +LAB_2622 + BNE LAB_2627 ; branch if byte <> zero + + JMP LAB_2569 ; shift FCAtemp << A+8 times + + ; else do shift and add +LAB_2627 + LSR ; shift byte + ORA #$80 ; set top bit (mark for 8 times) +LAB_262A + TAY ; copy result + BCC LAB_2640 ; skip next if bit was zero + + CLC ; clear carry for add + LDA FACt_3 ; get temp mantissa3 + ADC FAC2_3 ; add FAC2 mantissa3 + STA FACt_3 ; save temp mantissa3 + LDA FACt_2 ; get temp mantissa2 + ADC FAC2_2 ; add FAC2 mantissa2 + STA FACt_2 ; save temp mantissa2 + LDA FACt_1 ; get temp mantissa1 + ADC FAC2_1 ; add FAC2 mantissa1 + STA FACt_1 ; save temp mantissa1 +LAB_2640 + ROR FACt_1 ; shift temp mantissa1 + ROR FACt_2 ; shift temp mantissa2 + ROR FACt_3 ; shift temp mantissa3 + ROR FAC1_r ; shift temp rounding byte + TYA ; get byte back + LSR ; shift byte + BNE LAB_262A ; loop if all bits not done + +LAB_264C + RTS + +; unpack memory (AY) into FAC2 + +LAB_264D + STA ut1_pl ; save pointer low byte + STY ut1_ph ; save pointer high byte + LDY #$03 ; 4 bytes to get (0-3) + LDA (ut1_pl),Y ; get mantissa3 + STA FAC2_3 ; save FAC2 mantissa3 + DEY ; decrement index + LDA (ut1_pl),Y ; get mantissa2 + STA FAC2_2 ; save FAC2 mantissa2 + DEY ; decrement index + LDA (ut1_pl),Y ; get mantissa1+sign + STA FAC2_s ; save FAC2 sign (b7) + EOR FAC1_s ; EOR with FAC1 sign (b7) + STA FAC_sc ; save sign compare (FAC1 EOR FAC2) + LDA FAC2_s ; recover FAC2 sign (b7) + ORA #$80 ; set 1xxx xxx (set normal bit) + STA FAC2_1 ; save FAC2 mantissa1 + DEY ; decrement index + LDA (ut1_pl),Y ; get exponent byte + STA FAC2_e ; save FAC2 exponent + LDA FAC1_e ; get FAC1 exponent + RTS + +; test and adjust accumulators + +LAB_2673 + LDA FAC2_e ; get FAC2 exponent +LAB_2675 + BEQ LAB_2696 ; branch if FAC2 = $00 (handle underflow) + + CLC ; clear carry for add + ADC FAC1_e ; add FAC1 exponent + BCC LAB_2680 ; branch if sum of exponents <$0100 + + BMI LAB_269B ; do overflow error + + CLC ; clear carry for the add + .byte $2C ; makes next line BIT $1410 +LAB_2680 + BPL LAB_2696 ; if +ve go handle underflow + + ADC #$80 ; adjust exponent + STA FAC1_e ; save FAC1 exponent + BNE LAB_268B ; branch if not zero + + JMP LAB_24F5 ; save FAC1 sign and return + +LAB_268B + LDA FAC_sc ; get sign compare (FAC1 EOR FAC2) + STA FAC1_s ; save FAC1 sign (b7) +LAB_268F + RTS + +; handle overflow and underflow + +LAB_2690 + LDA FAC1_s ; get FAC1 sign (b7) + BPL LAB_269B ; do overflow error + + ; handle underflow +LAB_2696 + PLA ; pop return address low byte + PLA ; pop return address high byte + JMP LAB_24F1 ; clear FAC1 exponent and sign and return + +; multiply by 10 + +LAB_269E + JSR LAB_27AB ; round and copy FAC1 to FAC2 + TAX ; copy exponent (set the flags) + BEQ LAB_268F ; exit if zero + + CLC ; clear carry for add + ADC #$02 ; add two to exponent (*4) + BCS LAB_269B ; do overflow error if > $FF + + LDX #$00 ; clear byte + STX FAC_sc ; clear sign compare (FAC1 EOR FAC2) + JSR LAB_247C ; add FAC2 to FAC1 (*5) + INC FAC1_e ; increment FAC1 exponent (*10) + BNE LAB_268F ; if non zero just do RTS + +LAB_269B + JMP LAB_2564 ; do overflow error and warm start + +; divide by 10 + +LAB_26B9 + JSR LAB_27AB ; round and copy FAC1 to FAC2 + LDA #LAB_26B5 ; set pointer to 10d high addr + LDX #$00 ; clear sign + +; divide by (AY) (X=sign) + +LAB_26C2 + STX FAC_sc ; save sign compare (FAC1 EOR FAC2) + JSR LAB_UFAC ; unpack memory (AY) into FAC1 + JMP LAB_DIVIDE ; do FAC2/FAC1 + + ; Perform divide-by +; convert AY and do (AY)/FAC1 + +LAB_26CA + JSR LAB_264D ; unpack memory (AY) into FAC2 + + ; Perform divide-into +LAB_DIVIDE + BEQ LAB_2737 ; if zero go do /0 error + + JSR LAB_27BA ; round FAC1 + LDA #$00 ; clear A + SEC ; set carry for subtract + SBC FAC1_e ; subtract FAC1 exponent (2s complement) + STA FAC1_e ; save FAC1 exponent + JSR LAB_2673 ; test and adjust accumulators + INC FAC1_e ; increment FAC1 exponent + BEQ LAB_269B ; if zero do overflow error + + LDX #$FF ; set index for pre increment + LDA #$01 ; set bit to flag byte save +LAB_26E4 + LDY FAC2_1 ; get FAC2 mantissa1 + CPY FAC1_1 ; compare FAC1 mantissa1 + BNE LAB_26F4 ; branch if <> + + LDY FAC2_2 ; get FAC2 mantissa2 + CPY FAC1_2 ; compare FAC1 mantissa2 + BNE LAB_26F4 ; branch if <> + + LDY FAC2_3 ; get FAC2 mantissa3 + CPY FAC1_3 ; compare FAC1 mantissa3 +LAB_26F4 + PHP ; save FAC2-FAC1 compare status + ROL ; shift the result byte + BCC LAB_2702 ; if no carry skip the byte save + + LDY #$01 ; set bit to flag byte save + INX ; else increment the index to FACt + CPX #$02 ; compare with the index to FACt_3 + BMI LAB_2701 ; if not last byte just go save it + + BNE LAB_272B ; if all done go save FAC1 rounding byte, normalise and + ; return + + LDY #$40 ; set bit to flag byte save for the rounding byte +LAB_2701 + STA FACt_1,X ; write result byte to FACt_1 + index + TYA ; copy the next save byte flag +LAB_2702 + PLP ; restore FAC2-FAC1 compare status + BCC LAB_2704 ; if FAC2 < FAC1 then skip the subtract + + TAY ; save FAC2-FAC1 compare status + LDA FAC2_3 ; get FAC2 mantissa3 + SBC FAC1_3 ; subtract FAC1 mantissa3 + STA FAC2_3 ; save FAC2 mantissa3 + LDA FAC2_2 ; get FAC2 mantissa2 + SBC FAC1_2 ; subtract FAC1 mantissa2 + STA FAC2_2 ; save FAC2 mantissa2 + LDA FAC2_1 ; get FAC2 mantissa1 + SBC FAC1_1 ; subtract FAC1 mantissa1 + STA FAC2_1 ; save FAC2 mantissa1 + TYA ; restore FAC2-FAC1 compare status + + ; FAC2 = FAC2*2 +LAB_2704 + ASL FAC2_3 ; shift FAC2 mantissa3 + ROL FAC2_2 ; shift FAC2 mantissa2 + ROL FAC2_1 ; shift FAC2 mantissa1 + BCS LAB_26F4 ; loop with no compare + + BMI LAB_26E4 ; loop with compare + + BPL LAB_26F4 ; loop always with no compare + +; do A<<6, save as FAC1 rounding byte, normalise and return + +LAB_272B + LSR ; shift b1 - b0 .. + ROR ; .. + ROR ; .. to b7 - b6 + STA FAC1_r ; save FAC1 rounding byte + PLP ; dump FAC2-FAC1 compare status + JMP LAB_273C ; copy temp to FAC1, normalise and return + +; do "Divide by zero" error + +LAB_2737 + LDX #$14 ; error code $14 ("Divide by zero" error) + JMP LAB_XERR ; do error #X, then warm start + +; copy temp to FAC1 and normalise + +LAB_273C + LDA FACt_1 ; get temp mantissa1 + STA FAC1_1 ; save FAC1 mantissa1 + LDA FACt_2 ; get temp mantissa2 + STA FAC1_2 ; save FAC1 mantissa2 + LDA FACt_3 ; get temp mantissa3 + STA FAC1_3 ; save FAC1 mantissa3 + JMP LAB_24D5 ; normalise FAC1 and return + +; unpack memory (AY) into FAC1 + +LAB_UFAC + STA ut1_pl ; save pointer low byte + STY ut1_ph ; save pointer high byte + LDY #$03 ; 4 bytes to do + LDA (ut1_pl),Y ; get last byte + STA FAC1_3 ; save FAC1 mantissa3 + DEY ; decrement index + LDA (ut1_pl),Y ; get last-1 byte + STA FAC1_2 ; save FAC1 mantissa2 + DEY ; decrement index + LDA (ut1_pl),Y ; get second byte + STA FAC1_s ; save FAC1 sign (b7) + ORA #$80 ; set 1xxx xxxx (add normal bit) + STA FAC1_1 ; save FAC1 mantissa1 + DEY ; decrement index + LDA (ut1_pl),Y ; get first byte (exponent) + STA FAC1_e ; save FAC1 exponent + STY FAC1_r ; clear FAC1 rounding byte + RTS + +; pack FAC1 into Adatal + +LAB_276E + LDX #Adatal ; set pointer high byte + BEQ LAB_2778 ; pack FAC1 into (XY) and return + +; pack FAC1 into (Lvarpl) + +LAB_PFAC + LDX Lvarpl ; get destination pointer low byte + LDY Lvarph ; get destination pointer high byte + +; pack FAC1 into (XY) + +LAB_2778 + JSR LAB_27BA ; round FAC1 + STX ut1_pl ; save pointer low byte + STY ut1_ph ; save pointer high byte + LDY #$03 ; set index + LDA FAC1_3 ; get FAC1 mantissa3 + STA (ut1_pl),Y ; store in destination + DEY ; decrement index + LDA FAC1_2 ; get FAC1 mantissa2 + STA (ut1_pl),Y ; store in destination + DEY ; decrement index + LDA FAC1_s ; get FAC1 sign (b7) + ORA #$7F ; set bits x111 1111 + AND FAC1_1 ; AND in FAC1 mantissa1 + STA (ut1_pl),Y ; store in destination + DEY ; decrement index + LDA FAC1_e ; get FAC1 exponent + STA (ut1_pl),Y ; store in destination + STY FAC1_r ; clear FAC1 rounding byte + RTS + +; round and copy FAC1 to FAC2 + +LAB_27AB + JSR LAB_27BA ; round FAC1 + +; copy FAC1 to FAC2 + +LAB_27AE + LDX #$05 ; 5 bytes to copy +LAB_27B0 + LDA FAC1_e-1,X ; get byte from FAC1,X + STA FAC1_o,X ; save byte at FAC2,X + DEX ; decrement count + BNE LAB_27B0 ; loop if not all done + + STX FAC1_r ; clear FAC1 rounding byte +LAB_27B9 + RTS + +; round FAC1 + +LAB_27BA + LDA FAC1_e ; get FAC1 exponent + BEQ LAB_27B9 ; exit if zero + + ASL FAC1_r ; shift FAC1 rounding byte + BCC LAB_27B9 ; exit if no overflow + +; round FAC1 (no check) + +LAB_27C2 + JSR LAB_2559 ; increment FAC1 mantissa + BNE LAB_27B9 ; branch if no overflow + + JMP LAB_252A ; normalise FAC1 for C=1 and return + +; get FAC1 sign +; return A=FF,C=1/-ve A=01,C=0/+ve + +LAB_27CA + LDA FAC1_e ; get FAC1 exponent + BEQ LAB_27D7 ; exit if zero (already correct SGN(0)=0) + +; return A=FF,C=1/-ve A=01,C=0/+ve +; no = 0 check + +LAB_27CE + LDA FAC1_s ; else get FAC1 sign (b7) + +; return A=FF,C=1/-ve A=01,C=0/+ve +; no = 0 check, sign in A + +LAB_27D0 + ROL ; move sign bit to carry + LDA #$FF ; set byte for -ve result + BCS LAB_27D7 ; return if sign was set (-ve) + + LDA #$01 ; else set byte for +ve result +LAB_27D7 + RTS + +; perform SGN() + +LAB_SGN + JSR LAB_27CA ; get FAC1 sign + ; return A=$FF/-ve A=$01/+ve +; save A as integer byte + +LAB_27DB + STA FAC1_1 ; save FAC1 mantissa1 + LDA #$00 ; clear A + STA FAC1_2 ; clear FAC1 mantissa2 + LDX #$88 ; set exponent + +; set exp=X, clearFAC1 mantissa3 and normalise + +LAB_27E3 + LDA FAC1_1 ; get FAC1 mantissa1 + EOR #$FF ; complement it + ROL ; sign bit into carry + +; set exp=X, clearFAC1 mantissa3 and normalise + +LAB_STFA + LDA #$00 ; clear A + STA FAC1_3 ; clear FAC1 mantissa3 + STX FAC1_e ; set FAC1 exponent + STA FAC1_r ; clear FAC1 rounding byte + STA FAC1_s ; clear FAC1 sign (b7) + JMP LAB_24D0 ; do ABS and normalise FAC1 + +; perform ABS() + +LAB_ABS + LSR FAC1_s ; clear FAC1 sign (put zero in b7) + RTS + +; compare FAC1 with (AY) +; returns A=$00 if FAC1 = (AY) +; returns A=$01 if FAC1 > (AY) +; returns A=$FF if FAC1 < (AY) + +LAB_27F8 + STA ut2_pl ; save pointer low byte +LAB_27FA + STY ut2_ph ; save pointer high byte + LDY #$00 ; clear index + LDA (ut2_pl),Y ; get exponent + INY ; increment index + TAX ; copy (AY) exponent to X + BEQ LAB_27CA ; branch if (AY) exponent=0 and get FAC1 sign + ; A=FF,C=1/-ve A=01,C=0/+ve + + LDA (ut2_pl),Y ; get (AY) mantissa1 (with sign) + EOR FAC1_s ; EOR FAC1 sign (b7) + BMI LAB_27CE ; if signs <> do return A=FF,C=1/-ve + ; A=01,C=0/+ve and return + + CPX FAC1_e ; compare (AY) exponent with FAC1 exponent + BNE LAB_2828 ; branch if different + + LDA (ut2_pl),Y ; get (AY) mantissa1 (with sign) + ORA #$80 ; normalise top bit + CMP FAC1_1 ; compare with FAC1 mantissa1 + BNE LAB_2828 ; branch if different + + INY ; increment index + LDA (ut2_pl),Y ; get mantissa2 + CMP FAC1_2 ; compare with FAC1 mantissa2 + BNE LAB_2828 ; branch if different + + INY ; increment index + LDA #$7F ; set for 1/2 value rounding byte + CMP FAC1_r ; compare with FAC1 rounding byte (set carry) + LDA (ut2_pl),Y ; get mantissa3 + SBC FAC1_3 ; subtract FAC1 mantissa3 + BEQ LAB_2850 ; exit if mantissa3 equal + +; gets here if number <> FAC1 + +LAB_2828 + LDA FAC1_s ; get FAC1 sign (b7) + BCC LAB_282E ; branch if FAC1 > (AY) + + EOR #$FF ; else toggle FAC1 sign +LAB_282E + JMP LAB_27D0 ; return A=FF,C=1/-ve A=01,C=0/+ve + +; convert FAC1 floating-to-fixed + +LAB_2831 + LDA FAC1_e ; get FAC1 exponent + BEQ LAB_287F ; if zero go clear FAC1 and return + + SEC ; set carry for subtract + SBC #$98 ; subtract maximum integer range exponent + BIT FAC1_s ; test FAC1 sign (b7) + BPL LAB_2845 ; branch if FAC1 +ve + + ; FAC1 was -ve + TAX ; copy subtracted exponent + LDA #$FF ; overflow for -ve number + STA FAC1_o ; set FAC1 overflow byte + JSR LAB_253D ; twos complement FAC1 mantissa + TXA ; restore subtracted exponent +LAB_2845 + LDX #FAC1_e ; set index to FAC1 + CMP #$F9 ; compare exponent result + BPL LAB_2851 ; if < 8 shifts shift FAC1 A times right and return + + JSR LAB_257B ; shift FAC1 A times right (> 8 shifts) + STY FAC1_o ; clear FAC1 overflow byte +LAB_2850 + RTS + +; shift FAC1 A times right + +LAB_2851 + TAY ; copy shift count + LDA FAC1_s ; get FAC1 sign (b7) + AND #$80 ; mask sign bit only (x000 0000) + LSR FAC1_1 ; shift FAC1 mantissa1 + ORA FAC1_1 ; OR sign in b7 FAC1 mantissa1 + STA FAC1_1 ; save FAC1 mantissa1 + JSR LAB_2592 ; shift FAC1 Y times right + STY FAC1_o ; clear FAC1 overflow byte + RTS + +; perform INT() + +LAB_INT + LDA FAC1_e ; get FAC1 exponent + CMP #$98 ; compare with max int + BCS LAB_2886 ; exit if >= (already int, too big for fractional part!) + + JSR LAB_2831 ; convert FAC1 floating-to-fixed + STY FAC1_r ; save FAC1 rounding byte + LDA FAC1_s ; get FAC1 sign (b7) + STY FAC1_s ; save FAC1 sign (b7) + EOR #$80 ; toggle FAC1 sign + ROL ; shift into carry + LDA #$98 ; set new exponent + STA FAC1_e ; save FAC1 exponent + LDA FAC1_3 ; get FAC1 mantissa3 + STA Temp3 ; save for EXP() function + JMP LAB_24D0 ; do ABS and normalise FAC1 + +; clear FAC1 and return + +LAB_287F + STA FAC1_1 ; clear FAC1 mantissa1 + STA FAC1_2 ; clear FAC1 mantissa2 + STA FAC1_3 ; clear FAC1 mantissa3 + TAY ; clear Y +LAB_2886 + RTS + +; get FAC1 from string +; this routine now handles hex and binary values from strings +; starting with "$" and "%" respectively + +LAB_2887 + LDY #$00 ; clear Y + STY Dtypef ; clear data type flag, $FF=string, $00=numeric + LDX #$09 ; set index +LAB_288B + STY numexp,X ; clear byte + DEX ; decrement index + BPL LAB_288B ; loop until numexp to negnum (and FAC1) = $00 + + BCC LAB_28FE ; branch if 1st character numeric + +; get FAC1 from string .. first character wasn't numeric + + CMP #'-' ; else compare with "-" + BNE LAB_289A ; branch if not "-" + + STX negnum ; set flag for -ve number (X = $FF) + BEQ LAB_289C ; branch always (go scan and check for hex/bin) + +; get FAC1 from string .. first character wasn't numeric or - + +LAB_289A + CMP #'+' ; else compare with "+" + BNE LAB_289D ; branch if not "+" (go check for hex/bin) + +; was "+" or "-" to start, so get next character + +LAB_289C + JSR LAB_IGBY ; increment and scan memory + BCC LAB_28FE ; branch if numeric character + +; code here for hex and binary numbers + +LAB_289D + CMP #'$' ; else compare with "$" + BNE LAB_NHEX ; branch if not "$" + + JMP LAB_CHEX ; branch if "$" + +LAB_NHEX + CMP #'%' ; else compare with "%" + BNE LAB_28A3 ; branch if not "%" (continue original code) + + JMP LAB_CBIN ; branch if "%" + +LAB_289E + JSR LAB_IGBY ; increment and scan memory (ignore + or get next number) +LAB_28A1 + BCC LAB_28FE ; branch if numeric character + +; get FAC1 from string .. character wasn't numeric, -, +, hex or binary + +LAB_28A3 + CMP #'.' ; else compare with "." + BEQ LAB_28D5 ; branch if "." + +; get FAC1 from string .. character wasn't numeric, -, + or . + + CMP #'E' ; else compare with "E" + BNE LAB_28DB ; branch if not "E" + + ; was "E" so evaluate exponential part + JSR LAB_IGBY ; increment and scan memory + BCC LAB_28C7 ; branch if numeric character + + CMP #TK_MINUS ; else compare with token for - + BEQ LAB_28C2 ; branch if token for - + + CMP #'-' ; else compare with "-" + BEQ LAB_28C2 ; branch if "-" + + CMP #TK_PLUS ; else compare with token for + + BEQ LAB_28C4 ; branch if token for + + + CMP #'+' ; else compare with "+" + BEQ LAB_28C4 ; branch if "+" + + BNE LAB_28C9 ; branch always + +LAB_28C2 + ROR expneg ; set exponent -ve flag (C, which=1, into b7) +LAB_28C4 + JSR LAB_IGBY ; increment and scan memory +LAB_28C7 + BCC LAB_2925 ; branch if numeric character + +LAB_28C9 + BIT expneg ; test exponent -ve flag + BPL LAB_28DB ; if +ve go evaluate exponent + + ; else do exponent = -exponent + LDA #$00 ; clear result + SEC ; set carry for subtract + SBC expcnt ; subtract exponent byte + JMP LAB_28DD ; go evaluate exponent + +LAB_28D5 + ROR numdpf ; set decimal point flag + BIT numdpf ; test decimal point flag + BVC LAB_289E ; branch if only one decimal point so far + + ; evaluate exponent +LAB_28DB + LDA expcnt ; get exponent count byte +LAB_28DD + SEC ; set carry for subtract + SBC numexp ; subtract numerator exponent + STA expcnt ; save exponent count byte + BEQ LAB_28F6 ; branch if no adjustment + + BPL LAB_28EF ; else if +ve go do FAC1*10^expcnt + + ; else go do FAC1/10^(0-expcnt) +LAB_28E6 + JSR LAB_26B9 ; divide by 10 + INC expcnt ; increment exponent count byte + BNE LAB_28E6 ; loop until all done + + BEQ LAB_28F6 ; branch always + +LAB_28EF + JSR LAB_269E ; multiply by 10 + DEC expcnt ; decrement exponent count byte + BNE LAB_28EF ; loop until all done + +LAB_28F6 + LDA negnum ; get -ve flag + BMI LAB_28FB ; if -ve do - FAC1 and return + + RTS + +; do - FAC1 and return + +LAB_28FB + JMP LAB_GTHAN ; do - FAC1 and return + +; do unsigned FAC1*10+number + +LAB_28FE + PHA ; save character + BIT numdpf ; test decimal point flag + BPL LAB_2905 ; skip exponent increment if not set + + INC numexp ; else increment number exponent +LAB_2905 + JSR LAB_269E ; multiply FAC1 by 10 + PLA ; restore character + AND #$0F ; convert to binary + JSR LAB_2912 ; evaluate new ASCII digit + JMP LAB_289E ; go do next character + +; evaluate new ASCII digit + +LAB_2912 + PHA ; save digit + JSR LAB_27AB ; round and copy FAC1 to FAC2 + PLA ; restore digit + JSR LAB_27DB ; save A as integer byte + LDA FAC2_s ; get FAC2 sign (b7) + EOR FAC1_s ; toggle with FAC1 sign (b7) + STA FAC_sc ; save sign compare (FAC1 EOR FAC2) + LDX FAC1_e ; get FAC1 exponent + JMP LAB_ADD ; add FAC2 to FAC1 and return + +; evaluate next character of exponential part of number + +LAB_2925 + LDA expcnt ; get exponent count byte + CMP #$0A ; compare with 10 decimal + BCC LAB_2934 ; branch if less + + LDA #$64 ; make all -ve exponents = -100 decimal (causes underflow) + BIT expneg ; test exponent -ve flag + BMI LAB_2942 ; branch if -ve + + JMP LAB_2564 ; else do overflow error + +LAB_2934 + ASL ; * 2 + ASL ; * 4 + ADC expcnt ; * 5 + ASL ; * 10 + LDY #$00 ; set index + ADC (Bpntrl),Y ; add character (will be $30 too much!) + SBC #'0'-1 ; convert character to binary +LAB_2942 + STA expcnt ; save exponent count byte + JMP LAB_28C4 ; go get next character + +; print " in line [LINE #]" + +LAB_2953 + LDA #LAB_LMSG ; point to " in line " message high byte + JSR LAB_18C3 ; print null terminated string from memory + + ; print Basic line # + LDA Clineh ; get current line high byte + LDX Clinel ; get current line low byte + +; print XA as unsigned integer + +LAB_295E + STA FAC1_1 ; save low byte as FAC1 mantissa1 + STX FAC1_2 ; save high byte as FAC1 mantissa2 + LDX #$90 ; set exponent to 16d bits + SEC ; set integer is +ve flag + JSR LAB_STFA ; set exp=X, clearFAC1 mantissa3 and normalise + LDY #$00 ; clear index + TYA ; clear A + JSR LAB_297B ; convert FAC1 to string, skip sign character save + JMP LAB_18C3 ; print null terminated string from memory and return + +; convert FAC1 to ASCII string result in (AY) +; not any more, moved scratchpad to page 0 + +LAB_296E + LDY #$01 ; set index = 1 + LDA #$20 ; character = " " (assume +ve) + BIT FAC1_s ; test FAC1 sign (b7) + BPL LAB_2978 ; branch if +ve + + LDA #$2D ; else character = "-" +LAB_2978 + STA Decss,Y ; save leading character (" " or "-") +LAB_297B + STA FAC1_s ; clear FAC1 sign (b7) + STY Sendl ; save index + INY ; increment index + LDX FAC1_e ; get FAC1 exponent + BNE LAB_2989 ; branch if FAC1<>0 + + ; exponent was $00 so FAC1 is 0 + LDA #'0' ; set character = "0" + JMP LAB_2A89 ; save last character, [EOT] and exit + + ; FAC1 is some non zero value +LAB_2989 + LDA #$00 ; clear (number exponent count) + CPX #$81 ; compare FAC1 exponent with $81 (>1.00000) + + BCS LAB_299A ; branch if FAC1=>1 + + ; FAC1<1 + LDA #LAB_294F ; set pointer high byte to 1,000,000 + JSR LAB_25FB ; do convert AY, FCA1*(AY) + LDA #$FA ; set number exponent count (-6) +LAB_299A + STA numexp ; save number exponent count +LAB_299C + LDA #LAB_294B ; set pointer high byte to 999999.4375 + JSR LAB_27F8 ; compare FAC1 with (AY) + BEQ LAB_29C3 ; exit if FAC1 = (AY) + + BPL LAB_29B9 ; go do /10 if FAC1 > (AY) + + ; FAC1 < (AY) +LAB_29A7 + LDA #LAB_2947 ; set pointer high byte to 99999.9375 + JSR LAB_27F8 ; compare FAC1 with (AY) + BEQ LAB_29B2 ; branch if FAC1 = (AY) (allow decimal places) + + BPL LAB_29C0 ; branch if FAC1 > (AY) (no decimal places) + + ; FAC1 <= (AY) +LAB_29B2 + JSR LAB_269E ; multiply by 10 + DEC numexp ; decrement number exponent count + BNE LAB_29A7 ; go test again (branch always) + +LAB_29B9 + JSR LAB_26B9 ; divide by 10 + INC numexp ; increment number exponent count + BNE LAB_299C ; go test again (branch always) + +; now we have just the digits to do + +LAB_29C0 + JSR LAB_244E ; add 0.5 to FAC1 (round FAC1) +LAB_29C3 + JSR LAB_2831 ; convert FAC1 floating-to-fixed + LDX #$01 ; set default digits before dp = 1 + LDA numexp ; get number exponent count + CLC ; clear carry for add + ADC #$07 ; up to 6 digits before point + BMI LAB_29D8 ; if -ve then 1 digit before dp + + CMP #$08 ; A>=8 if n>=1E6 + BCS LAB_29D9 ; branch if >= $08 + + ; carry is clear + ADC #$FF ; take 1 from digit count + TAX ; copy to A + LDA #$02 ;.set exponent adjust +LAB_29D8 + SEC ; set carry for subtract +LAB_29D9 + SBC #$02 ; -2 + STA expcnt ;.save exponent adjust + STX numexp ; save digits before dp count + TXA ; copy to A + BEQ LAB_29E4 ; branch if no digits before dp + + BPL LAB_29F7 ; branch if digits before dp + +LAB_29E4 + LDY Sendl ; get output string index + LDA #$2E ; character "." + INY ; increment index + STA Decss,Y ; save to output string + TXA ;. + BEQ LAB_29F5 ;. + + LDA #'0' ; character "0" + INY ; increment index + STA Decss,Y ; save to output string +LAB_29F5 + STY Sendl ; save output string index +LAB_29F7 + LDY #$00 ; clear index (point to 100,000) + LDX #$80 ; +LAB_29FB + LDA FAC1_3 ; get FAC1 mantissa3 + CLC ; clear carry for add + ADC LAB_2A9C,Y ; add -ve LSB + STA FAC1_3 ; save FAC1 mantissa3 + LDA FAC1_2 ; get FAC1 mantissa2 + ADC LAB_2A9B,Y ; add -ve NMSB + STA FAC1_2 ; save FAC1 mantissa2 + LDA FAC1_1 ; get FAC1 mantissa1 + ADC LAB_2A9A,Y ; add -ve MSB + STA FAC1_1 ; save FAC1 mantissa1 + INX ; + BCS LAB_2A18 ; + + BPL LAB_29FB ; not -ve so try again + + BMI LAB_2A1A ; + +LAB_2A18 + BMI LAB_29FB ; + +LAB_2A1A + TXA ; + BCC LAB_2A21 ; + + EOR #$FF ; + ADC #$0A ; +LAB_2A21 + ADC #'0'-1 ; add "0"-1 to result + INY ; increment index .. + INY ; .. to next less .. + INY ; .. power of ten + STY Cvaral ; save as current var address low byte + LDY Sendl ; get output string index + INY ; increment output string index + TAX ; copy character to X + AND #$7F ; mask out top bit + STA Decss,Y ; save to output string + DEC numexp ; decrement # of characters before the dp + BNE LAB_2A3B ; branch if still characters to do + + ; else output the point + LDA #$2E ; character "." + INY ; increment output string index + STA Decss,Y ; save to output string +LAB_2A3B + STY Sendl ; save output string index + LDY Cvaral ; get current var address low byte + TXA ; get character back + EOR #$FF ; + AND #$80 ; + TAX ; + CPY #$12 ; compare index with max + BNE LAB_29FB ; loop if not max + + ; now remove trailing zeroes + LDY Sendl ; get output string index +LAB_2A4B + LDA Decss,Y ; get character from output string + DEY ; decrement output string index + CMP #'0' ; compare with "0" + BEQ LAB_2A4B ; loop until non "0" character found + + CMP #'.' ; compare with "." + BEQ LAB_2A58 ; branch if was dp + + ; restore last character + INY ; increment output string index +LAB_2A58 + LDA #$2B ; character "+" + LDX expcnt ; get exponent count + BEQ LAB_2A8C ; if zero go set null terminator and exit + + ; exponent isn't zero so write exponent + BPL LAB_2A68 ; branch if exponent count +ve + + LDA #$00 ; clear A + SEC ; set carry for subtract + SBC expcnt ; subtract exponent count adjust (convert -ve to +ve) + TAX ; copy exponent count to X + LDA #'-' ; character "-" +LAB_2A68 + STA Decss+2,Y ; save to output string + LDA #$45 ; character "E" + STA Decss+1,Y ; save exponent sign to output string + TXA ; get exponent count back + LDX #'0'-1 ; one less than "0" character + SEC ; set carry for subtract +LAB_2A74 + INX ; increment 10's character + SBC #$0A ;.subtract 10 from exponent count + BCS LAB_2A74 ; loop while still >= 0 + + ADC #':' ; add character ":" ($30+$0A, result is 10 less that value) + STA Decss+4,Y ; save to output string + TXA ; copy 10's character + STA Decss+3,Y ; save to output string + LDA #$00 ; set null terminator + STA Decss+5,Y ; save to output string + BEQ LAB_2A91 ; go set string pointer (AY) and exit (branch always) + + ; save last character, [EOT] and exit +LAB_2A89 + STA Decss,Y ; save last character to output string + + ; set null terminator and exit +LAB_2A8C + LDA #$00 ; set null terminator + STA Decss+1,Y ; save after last character + + ; set string pointer (AY) and exit +LAB_2A91 + LDA #Decssp1 ; set result string high pointer + RTS + +; perform power function + +LAB_POWER + BEQ LAB_EXP ; go do EXP() + + LDA FAC2_e ; get FAC2 exponent + BNE LAB_2ABF ; branch if FAC2<>0 + + JMP LAB_24F3 ; clear FAC1 exponent and sign and return + +LAB_2ABF + LDX #func_l ; set destination pointer high byte + JSR LAB_2778 ; pack FAC1 into (XY) + LDA FAC2_s ; get FAC2 sign (b7) + BPL LAB_2AD9 ; branch if FAC2>0 + + ; else FAC2 is -ve and can only be raised to an + ; integer power which gives an x +j0 result + JSR LAB_INT ; perform INT + LDA #func_l ; set source pointer high byte + JSR LAB_27F8 ; compare FAC1 with (AY) + BNE LAB_2AD9 ; branch if FAC1 <> (AY) to allow Function Call error + ; this will leave FAC1 -ve and cause a Function Call + ; error when LOG() is called + + TYA ; clear sign b7 + LDY Temp3 ; save mantissa 3 from INT() function as sign in Y + ; for possible later negation, b0 +LAB_2AD9 + JSR LAB_279D ; save FAC1 sign and copy ABS(FAC2) to FAC1 + TYA ; copy sign back .. + PHA ; .. and save it + JSR LAB_LOG ; do LOG(n) + LDA #garb_l ; set pointer high byte + JSR LAB_25FB ; do convert AY, FCA1*(AY) (square the value) + JSR LAB_EXP ; go do EXP(n) + PLA ; pull sign from stack + LSR ; b0 is to be tested, shift to Cb + BCC LAB_2AF9 ; if no bit then exit + + ; Perform negation +; do - FAC1 + +LAB_GTHAN + LDA FAC1_e ; get FAC1 exponent + BEQ LAB_2AF9 ; exit if FAC1_e = $00 + + LDA FAC1_s ; get FAC1 sign (b7) + EOR #$FF ; complement it + STA FAC1_s ; save FAC1 sign (b7) +LAB_2AF9 + RTS + +; perform EXP() (x^e) + +LAB_EXP + LDA #LAB_2AFA ; set 1.443 pointer high byte + JSR LAB_25FB ; do convert AY, FCA1*(AY) + LDA FAC1_r ; get FAC1 rounding byte + ADC #$50 ; +$50/$100 + BCC LAB_2B2B ; skip rounding if no carry + + JSR LAB_27C2 ; round FAC1 (no check) +LAB_2B2B + STA FAC2_r ; save FAC2 rounding byte + JSR LAB_27AE ; copy FAC1 to FAC2 + LDA FAC1_e ; get FAC1 exponent + CMP #$88 ; compare with EXP limit (256d) + BCC LAB_2B39 ; branch if less + +LAB_2B36 + JSR LAB_2690 ; handle overflow and underflow +LAB_2B39 + JSR LAB_INT ; perform INT + LDA Temp3 ; get mantissa 3 from INT() function + CLC ; clear carry for add + ADC #$81 ; normalise +1 + BEQ LAB_2B36 ; if $00 go handle overflow + + SEC ; set carry for subtract + SBC #$01 ; now correct for exponent + PHA ; save FAC2 exponent + + ; swap FAC1 and FAC2 + LDX #$04 ; 4 bytes to do +LAB_2B49 + LDA FAC2_e,X ; get FAC2,X + LDY FAC1_e,X ; get FAC1,X + STA FAC1_e,X ; save FAC1,X + STY FAC2_e,X ; save FAC2,X + DEX ; decrement count/index + BPL LAB_2B49 ; loop if not all done + + LDA FAC2_r ; get FAC2 rounding byte + STA FAC1_r ; save as FAC1 rounding byte + JSR LAB_SUBTRACT ; perform subtraction, FAC2 from FAC1 + JSR LAB_GTHAN ; do - FAC1 + LDA #LAB_2AFE ; set counter pointer high byte + JSR LAB_2B84 ; go do series evaluation + LDA #$00 ; clear A + STA FAC_sc ; clear sign compare (FAC1 EOR FAC2) + PLA ;.get saved FAC2 exponent + JMP LAB_2675 ; test and adjust accumulators and return + +; ^2 then series evaluation + +LAB_2B6E + STA Cptrl ; save count pointer low byte + STY Cptrh ; save count pointer high byte + JSR LAB_276E ; pack FAC1 into Adatal + LDA #Adatal ; pointer to original # high byte + JMP LAB_25FB ; do convert AY, FCA1*(AY) and return + +; series evaluation + +LAB_2B84 + STA Cptrl ; save count pointer low byte + STY Cptrh ; save count pointer high byte +LAB_2B88 + LDX #numexp ; set pointer high byte to partial @ numexp + DEC numcon ; decrement constants count + BNE LAB_2B9B ; loop until all done + + RTS + +; RND(n), 32 bit Galoise version. make n=0 for 19th next number in sequence or n<>0 +; to get 19th next number in sequence after seed n. This version of the PRNG uses +; the Galois method and a sample of 65536 bytes produced gives the following values. + +; Entropy = 7.997442 bits per byte +; Optimum compression would reduce these 65536 bytes by 0 percent + +; Chi square distribution for 65536 samples is 232.01, and +; randomly would exceed this value 75.00 percent of the time + +; Arithmetic mean value of data bytes is 127.6724, 127.5 would be random +; Monte Carlo value for Pi is 3.122871269, error 0.60 percent +; Serial correlation coefficient is -0.000370, totally uncorrelated would be 0.0 + +LAB_RND + LDA FAC1_e ; get FAC1 exponent + BEQ NextPRN ; do next random # if zero + + ; else get seed into random number store + LDX #Rbyte4 ; set PRNG pointer low byte + LDY #$00 ; set PRNG pointer high byte + JSR LAB_2778 ; pack FAC1 into (XY) +NextPRN + LDX #$AF ; set EOR byte + LDY #$13 ; do this nineteen times +LoopPRN + ASL Rbyte1 ; shift PRNG most significant byte + ROL Rbyte2 ; shift PRNG middle byte + ROL Rbyte3 ; shift PRNG least significant byte + ROL Rbyte4 ; shift PRNG extra byte + BCC Ninc1 ; branch if bit 32 clear + + TXA ; set EOR byte + EOR Rbyte1 ; EOR PRNG extra byte + STA Rbyte1 ; save new PRNG extra byte +Ninc1 + DEY ; decrement loop count + BNE LoopPRN ; loop if not all done + + LDX #$02 ; three bytes to copy +CopyPRNG + LDA Rbyte1,X ; get PRNG byte + STA FAC1_1,X ; save FAC1 byte + DEX + BPL CopyPRNG ; loop if not complete + + LDA #$80 ; set the exponent + STA FAC1_e ; save FAC1 exponent + + ASL ; clear A + STA FAC1_s ; save FAC1 sign + + JMP LAB_24D5 ; normalise FAC1 and return + +; perform COS() + +LAB_COS + LDA #LAB_2C78 ; set (pi/2) pointer high byte + JSR LAB_246C ; add (AY) to FAC1 + +; perform SIN() + +LAB_SIN + JSR LAB_27AB ; round and copy FAC1 to FAC2 + LDA #LAB_2C7C ; set (2*pi) pointer high byte + LDX FAC2_s ; get FAC2 sign (b7) + JSR LAB_26C2 ; divide by (AY) (X=sign) + JSR LAB_27AB ; round and copy FAC1 to FAC2 + JSR LAB_INT ; perform INT + LDA #$00 ; clear byte + STA FAC_sc ; clear sign compare (FAC1 EOR FAC2) + JSR LAB_SUBTRACT ; perform subtraction, FAC2 from FAC1 + LDA #LAB_2C80 ; set 0.25 pointer high byte + JSR LAB_2455 ; perform subtraction, (AY) from FAC1 + LDA FAC1_s ; get FAC1 sign (b7) + PHA ; save FAC1 sign + BPL LAB_2C35 ; branch if +ve + + ; FAC1 sign was -ve + JSR LAB_244E ; add 0.5 to FAC1 + LDA FAC1_s ; get FAC1 sign (b7) + BMI LAB_2C38 ; branch if -ve + + LDA Cflag ; get comparison evaluation flag + EOR #$FF ; toggle flag + STA Cflag ; save comparison evaluation flag +LAB_2C35 + JSR LAB_GTHAN ; do - FAC1 +LAB_2C38 + LDA #LAB_2C80 ; set 0.25 pointer high byte + JSR LAB_246C ; add (AY) to FAC1 + PLA ; restore FAC1 sign + BPL LAB_2C45 ; branch if was +ve + + ; else correct FAC1 + JSR LAB_GTHAN ; do - FAC1 +LAB_2C45 + LDA #LAB_2C84 ; set pointer high byte to counter + JMP LAB_2B6E ; ^2 then series evaluation and return + +; perform TAN() + +LAB_TAN + JSR LAB_276E ; pack FAC1 into Adatal + LDA #$00 ; clear byte + STA Cflag ; clear comparison evaluation flag + JSR LAB_SIN ; go do SIN(n) + LDX #func_l ; set sin(n) pointer high byte + JSR LAB_2778 ; pack FAC1 into (XY) + LDA #Adatal ; set n pointer high addr + JSR LAB_UFAC ; unpack memory (AY) into FAC1 + LDA #$00 ; clear byte + STA FAC1_s ; clear FAC1 sign (b7) + LDA Cflag ; get comparison evaluation flag + JSR LAB_2C74 ; save flag and go do series evaluation + + LDA #func_l ; set sin(n) pointer high byte + JMP LAB_26CA ; convert AY and do (AY)/FAC1 + +LAB_2C74 + PHA ; save comparison evaluation flag + JMP LAB_2C35 ; go do series evaluation + +; perform USR() + +LAB_USR + JSR Usrjmp ; call user code + JMP LAB_1BFB ; scan for ")", else do syntax error then warm start + +; perform ATN() + +LAB_ATN + LDA FAC1_s ; get FAC1 sign (b7) + PHA ; save sign + BPL LAB_2CA1 ; branch if +ve + + JSR LAB_GTHAN ; else do - FAC1 +LAB_2CA1 + LDA FAC1_e ; get FAC1 exponent + PHA ; push exponent + CMP #$81 ; compare with 1 + BCC LAB_2CAF ; branch if FAC1<1 + + LDA #LAB_259C ; set 1 pointer high byte + JSR LAB_26CA ; convert AY and do (AY)/FAC1 +LAB_2CAF + LDA #LAB_2CC9 ; set pointer high byte to counter + JSR LAB_2B6E ; ^2 then series evaluation + PLA ; restore old FAC1 exponent + CMP #$81 ; compare with 1 + BCC LAB_2CC2 ; branch if FAC1<1 + + LDA #LAB_2C78 ; set (pi/2) pointer high byte + JSR LAB_2455 ; perform subtraction, (AY) from FAC1 +LAB_2CC2 + PLA ; restore FAC1 sign + BPL LAB_2D04 ; exit if was +ve + + JMP LAB_GTHAN ; else do - FAC1 and return + +; perform BITSET + +LAB_BITSET + JSR LAB_GADB ; get two parameters for POKE or WAIT + CPX #$08 ; only 0 to 7 are allowed + BCS FCError ; branch if > 7 + + LDA #$00 ; clear A + SEC ; set the carry +S_Bits + ROL ; shift bit + DEX ; decrement bit number + BPL S_Bits ; loop if still +ve + + INX ; make X = $00 + ORA (Itempl,X) ; or with byte via temporary integer (addr) + STA (Itempl,X) ; save byte via temporary integer (addr) +LAB_2D04 + RTS + +; perform BITCLR + +LAB_BITCLR + JSR LAB_GADB ; get two parameters for POKE or WAIT + CPX #$08 ; only 0 to 7 are allowed + BCS FCError ; branch if > 7 + + LDA #$FF ; set A +S_Bitc + ROL ; shift bit + DEX ; decrement bit number + BPL S_Bitc ; loop if still +ve + + INX ; make X = $00 + AND (Itempl,X) ; and with byte via temporary integer (addr) + STA (Itempl,X) ; save byte via temporary integer (addr) + RTS + +FCError + JMP LAB_FCER ; do function call error then warm start + +; perform BITTST() + +LAB_BTST + JSR LAB_IGBY ; increment BASIC pointer + JSR LAB_GADB ; get two parameters for POKE or WAIT + CPX #$08 ; only 0 to 7 are allowed + BCS FCError ; branch if > 7 + + JSR LAB_GBYT ; get next BASIC byte + CMP #')' ; is next character ")" + BEQ TST_OK ; if ")" go do rest of function + + JMP LAB_SNER ; do syntax error then warm start + +TST_OK + JSR LAB_IGBY ; update BASIC execute pointer (to character past ")") + LDA #$00 ; clear A + SEC ; set the carry +T_Bits + ROL ; shift bit + DEX ; decrement bit number + BPL T_Bits ; loop if still +ve + + INX ; make X = $00 + AND (Itempl,X) ; AND with byte via temporary integer (addr) + BEQ LAB_NOTT ; branch if zero (already correct) + + LDA #$FF ; set for -1 result +LAB_NOTT + JMP LAB_27DB ; go do SGN tail + +; perform BIN$() + +LAB_BINS + CPX #$19 ; max + 1 + BCS BinFErr ; exit if too big ( > or = ) + + STX TempB ; save # of characters ($00 = leading zero remove) + LDA #$18 ; need A byte long space + JSR LAB_MSSP ; make string space A bytes long + LDY #$17 ; set index + LDX #$18 ; character count +NextB1 + LSR nums_1 ; shift highest byte + ROR nums_2 ; shift middle byte + ROR nums_3 ; shift lowest byte bit 0 to carry + TXA ; load with "0"/2 + ROL ; shift in carry + STA (str_pl),Y ; save to temp string + index + DEY ; decrement index + BPL NextB1 ; loop if not done + + LDA TempB ; get # of characters + BEQ EndBHS ; branch if truncate + + TAX ; copy length to X + SEC ; set carry for add ! + EOR #$FF ; 1's complement + ADC #$18 ; add 24d + BEQ GoPr2 ; if zero print whole string + + BNE GoPr1 ; else go make output string + +; this is the exit code and is also used by HEX$() +; truncate string to remove leading "0"s + +EndBHS + TAY ; clear index (A=0, X=length here) +NextB2 + LDA (str_pl),Y ; get character from string + CMP #'0' ; compare with "0" + BNE GoPr ; if not "0" then go print string from here + + DEX ; decrement character count + BEQ GoPr3 ; if zero then end of string so go print it + + INY ; else increment index + BPL NextB2 ; loop always + +; make fixed length output string - ignore overflows! + +GoPr3 + INX ; need at least 1 character +GoPr + TYA ; copy result +GoPr1 + CLC ; clear carry for add + ADC str_pl ; add low address + STA str_pl ; save low address + LDA #$00 ; do high byte + ADC str_ph ; add high address + STA str_ph ; save high address +GoPr2 + STX str_ln ; X holds string length + JSR LAB_IGBY ; update BASIC execute pointer (to character past ")") + JMP LAB_RTST ; check for space on descriptor stack then put address + ; and length on descriptor stack and update stack pointers + +BinFErr + JMP LAB_FCER ; do function call error then warm start + +; perform HEX$() + +LAB_HEXS + CPX #$07 ; max + 1 + BCS BinFErr ; exit if too big ( > or = ) + + STX TempB ; save # of characters + + LDA #$06 ; need 6 bytes for string + JSR LAB_MSSP ; make string space A bytes long + LDY #$05 ; set string index + + SED ; need decimal mode for nibble convert + LDA nums_3 ; get lowest byte + JSR LAB_A2HX ; convert A to ASCII hex byte and output + LDA nums_2 ; get middle byte + JSR LAB_A2HX ; convert A to ASCII hex byte and output + LDA nums_1 ; get highest byte + JSR LAB_A2HX ; convert A to ASCII hex byte and output + CLD ; back to binary + + LDX #$06 ; character count + LDA TempB ; get # of characters + BEQ EndBHS ; branch if truncate + + TAX ; copy length to X + SEC ; set carry for add ! + EOR #$FF ; 1's complement + ADC #$06 ; add 6d + BEQ GoPr2 ; if zero print whole string + + BNE GoPr1 ; else go make output string (branch always) + +; convert A to ASCII hex byte and output .. note set decimal mode before calling + +LAB_A2HX + TAX ; save byte + AND #$0F ; mask off top bits + JSR LAB_AL2X ; convert low nibble to ASCII and output + TXA ; get byte back + LSR ; /2 shift high nibble to low nibble + LSR ; /4 + LSR ; /8 + LSR ; /16 +LAB_AL2X + CMP #$0A ; set carry for +1 if >9 + ADC #'0' ; add ASCII "0" + STA (str_pl),Y ; save to temp string + DEY ; decrement counter + RTS + +LAB_NLTO + STA FAC1_e ; save FAC1 exponent + LDA #$00 ; clear sign compare +LAB_MLTE + STA FAC_sc ; save sign compare (FAC1 EOR FAC2) + TXA ; restore character + JSR LAB_2912 ; evaluate new ASCII digit + +; gets here if the first character was "$" for hex +; get hex number + +LAB_CHEX + JSR LAB_IGBY ; increment and scan memory + BCC LAB_ISHN ; branch if numeric character + + ORA #$20 ; case convert, allow "A" to "F" and "a" to "f" + SBC #'a' ; subtract "a" (carry set here) + CMP #$06 ; compare normalised with $06 (max+1) + BCS LAB_EXCH ; exit if >"f" or <"0" + + ADC #$0A ; convert to nibble +LAB_ISHN + AND #$0F ; convert to binary + TAX ; save nibble + LDA FAC1_e ; get FAC1 exponent + BEQ LAB_MLTE ; skip multiply if zero + + ADC #$04 ; add four to exponent (*16 - carry clear here) + BCC LAB_NLTO ; if no overflow do evaluate digit + +LAB_MLTO + JMP LAB_2564 ; do overflow error and warm start + +LAB_NXCH + TAX ; save bit + LDA FAC1_e ; get FAC1 exponent + BEQ LAB_MLBT ; skip multiply if zero + + INC FAC1_e ; increment FAC1 exponent (*2) + BEQ LAB_MLTO ; do overflow error if = $00 + + LDA #$00 ; clear sign compare +LAB_MLBT + STA FAC_sc ; save sign compare (FAC1 EOR FAC2) + TXA ; restore bit + JSR LAB_2912 ; evaluate new ASCII digit + +; gets here if the first character was "%" for binary +; get binary number + +LAB_CBIN + JSR LAB_IGBY ; increment and scan memory + EOR #'0' ; convert "0" to 0 etc. + CMP #$02 ; compare with max+1 + BCC LAB_NXCH ; branch exit if < 2 + +LAB_EXCH + JMP LAB_28F6 ; evaluate -ve flag and return + +; ctrl-c check routine. includes limited "life" byte save for INGET routine +; now also the code that checks to see if an interrupt has occurred + +CTRLC + LDA ccflag ; get [CTRL-C] check flag + BNE LAB_FBA2 ; exit if inhibited + + JSR V_INPT ; scan input device + BCC LAB_FBA0 ; exit if buffer empty + + STA ccbyte ; save received byte + LDX #$20 ; "life" timer for bytes + STX ccnull ; set countdown + JMP LAB_1636 ; return to BASIC + +LAB_FBA0 + LDX ccnull ; get countdown byte + BEQ LAB_FBA2 ; exit if finished + + DEC ccnull ; else decrement countdown +LAB_FBA2 + LDX #NmiBase ; set pointer to NMI values + JSR LAB_CKIN ; go check interrupt + LDX #IrqBase ; set pointer to IRQ values + JSR LAB_CKIN ; go check interrupt +LAB_CRTS + RTS + +; check whichever interrupt is indexed by X + +LAB_CKIN + LDA PLUS_0,X ; get interrupt flag byte + BPL LAB_CRTS ; branch if interrupt not enabled + +; we disable the interrupt here and make two new commands RETIRQ and RETNMI to +; automatically enable the interrupt when we exit + + ASL ; move happened bit to setup bit + AND #$40 ; mask happened bits + BEQ LAB_CRTS ; if no interrupt then exit + + STA PLUS_0,X ; save interrupt flag byte + + TXA ; copy index .. + TAY ; .. to Y + + PLA ; dump return address low byte, call from CTRL-C + PLA ; dump return address high byte + + LDA #$05 ; need 5 bytes for GOSUB + JSR LAB_1212 ; check room on stack for A bytes + LDA Bpntrh ; get BASIC execute pointer high byte + PHA ; push on stack + LDA Bpntrl ; get BASIC execute pointer low byte + PHA ; push on stack + LDA Clineh ; get current line high byte + PHA ; push on stack + LDA Clinel ; get current line low byte + PHA ; push on stack + LDA #TK_GOSUB ; token for GOSUB + PHA ; push on stack + + LDA PLUS_1,Y ; get interrupt code pointer low byte + STA Bpntrl ; save as BASIC execute pointer low byte + LDA PLUS_2,Y ; get interrupt code pointer high byte + STA Bpntrh ; save as BASIC execute pointer high byte + + JMP LAB_15C2 ; go do interpreter inner loop + ; can't RTS, we used the stack! the RTS from the ctrl-c + ; check will be taken when the RETIRQ/RETNMI/RETURN is + ; executed at the end of the subroutine + +; get byte from input device, no waiting +; returns with carry set if byte in A + +INGET + JSR V_INPT ; call scan input device + BCS LAB_FB95 ; if byte go reset timer + + LDA ccnull ; get countdown + BEQ LAB_FB96 ; exit if empty + + LDA ccbyte ; get last received byte + SEC ; flag we got a byte +LAB_FB95 + LDX #$00 ; clear X + STX ccnull ; clear timer because we got a byte +LAB_FB96 + RTS + +; these routines only enable the interrupts if the set-up flag is set +; if not they have no effect + +; perform IRQ {ON|OFF|CLEAR} + +LAB_IRQ + LDX #IrqBase ; set pointer to IRQ values + .byte $2C ; make next line BIT abs. + +; perform NMI {ON|OFF|CLEAR} + +LAB_NMI + LDX #NmiBase ; set pointer to NMI values + CMP #TK_ON ; compare with token for ON + BEQ LAB_INON ; go turn on interrupt + + CMP #TK_OFF ; compare with token for OFF + BEQ LAB_IOFF ; go turn off interrupt + + EOR #TK_CLEAR ; compare with token for CLEAR, A = $00 if = TK_CLEAR + BEQ LAB_INEX ; go clear interrupt flags and return + + JMP LAB_SNER ; do syntax error then warm start + +LAB_IOFF + LDA #$7F ; clear A + AND PLUS_0,X ; AND with interrupt setup flag + BPL LAB_INEX ; go clear interrupt enabled flag and return + +LAB_INON + LDA PLUS_0,X ; get interrupt setup flag + ASL ; Shift bit to enabled flag + ORA PLUS_0,X ; OR with flag byte +LAB_INEX + STA PLUS_0,X ; save interrupt flag byte + JMP LAB_IGBY ; update BASIC execute pointer and return + +; these routines set up the pointers and flags for the interrupt routines +; note that the interrupts are also enabled by these commands + +; perform ON IRQ + +LAB_SIRQ + CLI ; enable interrupts + LDX #IrqBase ; set pointer to IRQ values + .byte $2C ; make next line BIT abs. + +; perform ON NMI + +LAB_SNMI + LDX #NmiBase ; set pointer to NMI values + + STX TempB ; save interrupt pointer + JSR LAB_IGBY ; increment and scan memory (past token) + JSR LAB_GFPN ; get fixed-point number into temp integer + LDA Smeml ; get start of mem low byte + LDX Smemh ; get start of mem high byte + JSR LAB_SHLN ; search Basic for temp integer line number from AX + BCS LAB_LFND ; if carry set go set-up interrupt + + JMP LAB_16F7 ; else go do "Undefined statement" error and warm start + +LAB_LFND + LDX TempB ; get interrupt pointer + LDA Baslnl ; get pointer low byte + SBC #$01 ; -1 (carry already set for subtract) + STA PLUS_1,X ; save as interrupt pointer low byte + LDA Baslnh ; get pointer high byte + SBC #$00 ; subtract carry + STA PLUS_2,X ; save as interrupt pointer high byte + + LDA #$C0 ; set interrupt enabled/setup bits + STA PLUS_0,X ; set interrupt flags +LAB_IRTS + RTS + +; return from IRQ service, restores the enabled flag. + +; perform RETIRQ + +LAB_RETIRQ + BNE LAB_IRTS ; exit if following token (to allow syntax error) + + LDA IrqBase ; get interrupt flags + ASL ; copy setup to enabled (b7) + ORA IrqBase ; OR in setup flag + STA IrqBase ; save enabled flag + JMP LAB_16E8 ; go do rest of RETURN + +; return from NMI service, restores the enabled flag. + +; perform RETNMI + +LAB_RETNMI + BNE LAB_IRTS ; exit if following token (to allow syntax error) + + LDA NmiBase ; get set-up flag + ASL ; copy setup to enabled (b7) + ORA NmiBase ; OR in setup flag + STA NmiBase ; save enabled flag + JMP LAB_16E8 ; go do rest of RETURN + +; MAX() MIN() pre process + +LAB_MMPP + JSR LAB_EVEZ ; process expression + JMP LAB_CTNM ; check if source is numeric, else do type mismatch + +; perform MAX() + +LAB_MAX + JSR LAB_PHFA ; push FAC1, evaluate expression, + ; pull FAC2 and compare with FAC1 + BPL LAB_MAX ; branch if no swap to do + + LDA FAC2_1 ; get FAC2 mantissa1 + ORA #$80 ; set top bit (clear sign from compare) + STA FAC2_1 ; save FAC2 mantissa1 + JSR LAB_279B ; copy FAC2 to FAC1 + BEQ LAB_MAX ; go do next (branch always) + +; perform MIN() + +LAB_MIN + JSR LAB_PHFA ; push FAC1, evaluate expression, + ; pull FAC2 and compare with FAC1 + BMI LAB_MIN ; branch if no swap to do + + BEQ LAB_MIN ; branch if no swap to do + + LDA FAC2_1 ; get FAC2 mantissa1 + ORA #$80 ; set top bit (clear sign from compare) + STA FAC2_1 ; save FAC2 mantissa1 + JSR LAB_279B ; copy FAC2 to FAC1 + BEQ LAB_MIN ; go do next (branch always) + +; exit routine. don't bother returning to the loop code +; check for correct exit, else so syntax error + +LAB_MMEC + CMP #')' ; is it end of function? + BNE LAB_MMSE ; if not do MAX MIN syntax error + + PLA ; dump return address low byte + PLA ; dump return address high byte + JMP LAB_IGBY ; update BASIC execute pointer (to chr past ")") + +LAB_MMSE + JMP LAB_SNER ; do syntax error then warm start + +; check for next, evaluate and return or exit +; this is the routine that does most of the work + +LAB_PHFA + JSR LAB_GBYT ; get next BASIC byte + CMP #',' ; is there more ? + BNE LAB_MMEC ; if not go do end check + + ; push FAC1 + JSR LAB_27BA ; round FAC1 + LDA FAC1_s ; get FAC1 sign + ORA #$7F ; set all non sign bits + AND FAC1_1 ; AND FAC1 mantissa1 (AND in sign bit) + PHA ; push on stack + LDA FAC1_2 ; get FAC1 mantissa2 + PHA ; push on stack + LDA FAC1_3 ; get FAC1 mantissa3 + PHA ; push on stack + LDA FAC1_e ; get FAC1 exponent + PHA ; push on stack + + JSR LAB_IGBY ; scan and get next BASIC byte (after ",") + JSR LAB_EVNM ; evaluate expression and check is numeric, + ; else do type mismatch + + ; pop FAC2 (MAX/MIN expression so far) + PLA ; pop exponent + STA FAC2_e ; save FAC2 exponent + PLA ; pop mantissa3 + STA FAC2_3 ; save FAC2 mantissa3 + PLA ; pop mantissa1 + STA FAC2_2 ; save FAC2 mantissa2 + PLA ; pop sign/mantissa1 + STA FAC2_1 ; save FAC2 sign/mantissa1 + STA FAC2_s ; save FAC2 sign + + ; compare FAC1 with (packed) FAC2 + LDA #FAC2_e ; set pointer high byte to FAC2 + JMP LAB_27F8 ; compare FAC1 with FAC2 (AY) and return + ; returns A=$00 if FAC1 = (AY) + ; returns A=$01 if FAC1 > (AY) + ; returns A=$FF if FAC1 < (AY) + +; perform WIDTH + +LAB_WDTH + CMP #',' ; is next byte "," + BEQ LAB_TBSZ ; if so do tab size + + JSR LAB_GTBY ; get byte parameter + TXA ; copy width to A + BEQ LAB_NSTT ; branch if set for infinite line + + CPX #$10 ; else make min width = 16d + BCC TabErr ; if less do function call error and exit + +; this next compare ensures that we can't exit WIDTH via an error leaving the +; tab size greater than the line length. + + CPX TabSiz ; compare with tab size + BCS LAB_NSTT ; branch if >= tab size + + STX TabSiz ; else make tab size = terminal width +LAB_NSTT + STX TWidth ; set the terminal width + JSR LAB_GBYT ; get BASIC byte back + BEQ WExit ; exit if no following + + CMP #',' ; else is it "," + BNE LAB_MMSE ; if not do syntax error + +LAB_TBSZ + JSR LAB_SGBY ; scan and get byte parameter + TXA ; copy TAB size + BMI TabErr ; if >127 do function call error and exit + + CPX #$01 ; compare with min-1 + BCC TabErr ; if <=1 do function call error and exit + + LDA TWidth ; set flags for width + BEQ LAB_SVTB ; skip check if infinite line + + CPX TWidth ; compare TAB with width + BEQ LAB_SVTB ; ok if = + + BCS TabErr ; branch if too big + +LAB_SVTB + STX TabSiz ; save TAB size + +; calculate tab column limit from TAB size. The Iclim is set to the last tab +; position on a line that still has at least one whole tab width between it +; and the end of the line. + +WExit + LDA TWidth ; get width + BEQ LAB_SULP ; branch if infinite line + + CMP TabSiz ; compare with tab size + BCS LAB_WDLP ; branch if >= tab size + + STA TabSiz ; else make tab size = terminal width +LAB_SULP + SEC ; set carry for subtract +LAB_WDLP + SBC TabSiz ; subtract tab size + BCS LAB_WDLP ; loop while no borrow + + ADC TabSiz ; add tab size back + CLC ; clear carry for add + ADC TabSiz ; add tab size back again + STA Iclim ; save for now + LDA TWidth ; get width back + SEC ; set carry for subtract + SBC Iclim ; subtract remainder + STA Iclim ; save tab column limit +LAB_NOSQ + RTS + +TabErr + JMP LAB_FCER ; do function call error then warm start + +; perform SQR() + +LAB_SQR + LDA FAC1_s ; get FAC1 sign + BMI TabErr ; if -ve do function call error + + LDA FAC1_e ; get exponent + BEQ LAB_NOSQ ; if zero just return + + ; else do root + JSR LAB_27AB ; round and copy FAC1 to FAC2 + LDA #$00 ; clear A + + STA FACt_3 ; clear remainder + STA FACt_2 ; .. + STA FACt_1 ; .. + STA TempB ; .. + + STA FAC1_3 ; clear root + STA FAC1_2 ; .. + STA FAC1_1 ; .. + + LDX #$18 ; 24 pairs of bits to do + LDA FAC2_e ; get exponent + LSR ; check odd/even + BCS LAB_SQE2 ; if odd only 1 shift first time + +LAB_SQE1 + ASL FAC2_3 ; shift highest bit of number .. + ROL FAC2_2 ; .. + ROL FAC2_1 ; .. + ROL FACt_3 ; .. into remainder + ROL FACt_2 ; .. + ROL FACt_1 ; .. + ROL TempB ; .. never overflows +LAB_SQE2 + ASL FAC2_3 ; shift highest bit of number .. + ROL FAC2_2 ; .. + ROL FAC2_1 ; .. + ROL FACt_3 ; .. into remainder + ROL FACt_2 ; .. + ROL FACt_1 ; .. + ROL TempB ; .. never overflows + + ASL FAC1_3 ; root = root * 2 + ROL FAC1_2 ; .. + ROL FAC1_1 ; .. never overflows + + LDA FAC1_3 ; get root low byte + ROL ; *2 + STA Temp3 ; save partial low byte + LDA FAC1_2 ; get root low mid byte + ROL ; *2 + STA Temp3+1 ; save partial low mid byte + LDA FAC1_1 ; get root high mid byte + ROL ; *2 + STA Temp3+2 ; save partial high mid byte + LDA #$00 ; get root high byte (always $00) + ROL ; *2 + STA Temp3+3 ; save partial high byte + + ; carry clear for subtract +1 + LDA FACt_3 ; get remainder low byte + SBC Temp3 ; subtract partial low byte + STA Temp3 ; save partial low byte + + LDA FACt_2 ; get remainder low mid byte + SBC Temp3+1 ; subtract partial low mid byte + STA Temp3+1 ; save partial low mid byte + + LDA FACt_1 ; get remainder high mid byte + SBC Temp3+2 ; subtract partial high mid byte + TAY ; copy partial high mid byte + + LDA TempB ; get remainder high byte + SBC Temp3+3 ; subtract partial high byte + BCC LAB_SQNS ; skip sub if remainder smaller + + STA TempB ; save remainder high byte + + STY FACt_1 ; save remainder high mid byte + + LDA Temp3+1 ; get remainder low mid byte + STA FACt_2 ; save remainder low mid byte + + LDA Temp3 ; get partial low byte + STA FACt_3 ; save remainder low byte + + INC FAC1_3 ; increment root low byte (never any rollover) +LAB_SQNS + DEX ; decrement bit pair count + BNE LAB_SQE1 ; loop if not all done + + SEC ; set carry for subtract + LDA FAC2_e ; get exponent + SBC #$80 ; normalise + ROR ; /2 and re-bias to $80 + ADC #$00 ; add bit zero back in (allow for half shift) + STA FAC1_e ; save it + JMP LAB_24D5 ; normalise FAC1 and return + +; perform VARPTR() + +LAB_VARPTR + JSR LAB_IGBY ; increment and scan memory + JSR LAB_GVAR ; get var address + JSR LAB_1BFB ; scan for ")" , else do syntax error then warm start + LDY Cvaral ; get var address low byte + LDA Cvarah ; get var address high byte + JMP LAB_AYFC ; save and convert integer AY to FAC1 and return + +; perform PI + +LAB_PI + LDA #LAB_2C7C ; set (2*pi) pointer high byte + JSR LAB_UFAC ; unpack memory (AY) into FAC1 + DEC FAC1_e ; make result = PI + RTS + +; perform TWOPI + +LAB_TWOPI + LDA #LAB_2C7C ; set (2*pi) pointer high byte + JMP LAB_UFAC ; unpack memory (AY) into FAC1 and return + +; system dependant i/o vectors +; these are in RAM and are set by the monitor at start-up + +V_INPT + JMP (VEC_IN) ; non halting scan input device +V_OUTP + JMP (VEC_OUT) ; send byte to output device +V_LOAD + JMP (VEC_LD) ; load BASIC program +V_SAVE + JMP (VEC_SV) ; save BASIC program + +; The rest are tables messages and code for RAM + +; the rest of the code is tables and BASIC start-up code + +PG2_TABS + .byte $00 ; ctrl-c flag - $00 = enabled + .byte $00 ; ctrl-c byte - GET needs this + .byte $00 ; ctrl-c byte timeout - GET needs this + .word CTRLC ; ctrl c check vector +; .word xxxx ; non halting key input - monitor to set this +; .word xxxx ; output vector - monitor to set this +; .word xxxx ; load vector - monitor to set this +; .word xxxx ; save vector - monitor to set this +PG2_TABE + +; character get subroutine for zero page + +; For a 1.8432MHz 6502 including the JSR and RTS +; fastest (>=":") = 29 cycles = 15.7uS +; slowest (<":") = 40 cycles = 21.7uS +; space skip = +21 cycles = +11.4uS +; inc across page = +4 cycles = +2.2uS + +; the target address for the LDA at LAB_2CF4 becomes the BASIC execute pointer once the +; block is copied to it's destination, any non zero page address will do at assembly +; time, to assemble a three byte instruction. + +; page 0 initialisation table from $BC +; increment and scan memory + +LAB_2CEE + INC Bpntrl ; increment BASIC execute pointer low byte + BNE LAB_2CF4 ; branch if no carry + ; else + INC Bpntrh ; increment BASIC execute pointer high byte + +; page 0 initialisation table from $C2 +; scan memory + +LAB_2CF4 + LDA $FFFF ; get byte to scan (addr set by call routine) + CMP #TK_ELSE ; compare with the token for ELSE + BEQ LAB_2D05 ; exit if ELSE, not numeric, carry set + + CMP #':' ; compare with ":" + BCS LAB_2D05 ; exit if >= ":", not numeric, carry set + + CMP #' ' ; compare with " " + BEQ LAB_2CEE ; if " " go do next + + SEC ; set carry for SBC + SBC #'0' ; subtract "0" + SEC ; set carry for SBC + SBC #$D0 ; subtract -"0" + ; clear carry if byte = "0"-"9" +LAB_2D05 + RTS + +; page zero initialisation table $00-$12 inclusive + +StrTab + .byte $4C ; JMP opcode + .word LAB_COLD ; initial warm start vector (cold start) + + .byte $00 ; these bytes are not used by BASIC + .word $0000 ; + .word $0000 ; + .word $0000 ; + + .byte $4C ; JMP opcode + .word LAB_FCER ; initial user function vector ("Function call" error) + .byte $00 ; default NULL count + .byte $00 ; clear terminal position + .byte $00 ; default terminal width byte + .byte $F2 ; default limit for TAB = 14 + .word Ram_base ; start of user RAM +EndTab + +LAB_MSZM + .byte $0D,$0A,"Memory size ",$00 + +LAB_SMSG + .byte " Bytes free",$0D,$0A,$0A + .byte "Enhanced BASIC 2.22",$0A,$00 + +; numeric constants and series + + ; constants and series for LOG(n) +LAB_25A0 + .byte $02 ; counter + .byte $80,$19,$56,$62 ; 0.59898 + .byte $80,$76,$22,$F3 ; 0.96147 +;## .byte $80,$76,$22,$F1 ; 0.96147 + .byte $82,$38,$AA,$40 ; 2.88539 +;## .byte $82,$38,$AA,$45 ; 2.88539 + +LAB_25AD + .byte $80,$35,$04,$F3 ; 0.70711 1/root 2 +LAB_25B1 + .byte $81,$35,$04,$F3 ; 1.41421 root 2 +LAB_25B5 + .byte $80,$80,$00,$00 ; -0.5 +LAB_25B9 + .byte $80,$31,$72,$18 ; 0.69315 LOG(2) + + ; numeric PRINT constants +LAB_2947 + .byte $91,$43,$4F,$F8 ; 99999.9375 (max value with at least one decimal) +LAB_294B + .byte $94,$74,$23,$F7 ; 999999.4375 (max value before scientific notation) +LAB_294F + .byte $94,$74,$24,$00 ; 1000000 + + ; EXP(n) constants and series +LAB_2AFA + .byte $81,$38,$AA,$3B ; 1.4427 (1/LOG base 2 e) +LAB_2AFE + .byte $06 ; counter + .byte $74,$63,$90,$8C ; 2.17023e-4 + .byte $77,$23,$0C,$AB ; 0.00124 + .byte $7A,$1E,$94,$00 ; 0.00968 + .byte $7C,$63,$42,$80 ; 0.05548 + .byte $7E,$75,$FE,$D0 ; 0.24023 + .byte $80,$31,$72,$15 ; 0.69315 + .byte $81,$00,$00,$00 ; 1.00000 + +;## .byte $07 ; counter +;## .byte $74,$94,$2E,$40 ; -1/7! (-1/5040) +;## .byte $77,$2E,$4F,$70 ; 1/6! ( 1/720) +;## .byte $7A,$88,$02,$6E ; -1/5! (-1/120) +;## .byte $7C,$2A,$A0,$E6 ; 1/4! ( 1/24) +;## .byte $7E,$AA,$AA,$50 ; -1/3! (-1/6) +;## .byte $7F,$7F,$FF,$FF ; 1/2! ( 1/2) +;## .byte $81,$80,$00,$00 ; -1/1! (-1/1) +;## .byte $81,$00,$00,$00 ; 1/0! ( 1/1) + + ; trigonometric constants and series +LAB_2C78 + .byte $81,$49,$0F,$DB ; 1.570796371 (pi/2) as floating # +LAB_2C84 + .byte $04 ; counter + .byte $86,$1E,$D7,$FB ; 39.7109 +;## .byte $86,$1E,$D7,$BA ; 39.7109 + .byte $87,$99,$26,$65 ;-76.575 +;## .byte $87,$99,$26,$64 ;-76.575 + .byte $87,$23,$34,$58 ; 81.6022 + .byte $86,$A5,$5D,$E1 ;-41.3417 +;## .byte $86,$A5,$5D,$E0 ;-41.3417 +LAB_2C7C + .byte $83,$49,$0F,$DB ; 6.28319 (2*pi) as floating # +;## .byte $83,$49,$0F,$DA ; 6.28319 (2*pi) as floating # + +LAB_2CC9 + .byte $08 ; counter + .byte $78,$3A,$C5,$37 ; 0.00285 + .byte $7B,$83,$A2,$5C ;-0.0160686 + .byte $7C,$2E,$DD,$4D ; 0.0426915 + .byte $7D,$99,$B0,$1E ;-0.0750429 + .byte $7D,$59,$ED,$24 ; 0.106409 + .byte $7E,$91,$72,$00 ;-0.142036 + .byte $7E,$4C,$B9,$73 ; 0.199926 + .byte $7F,$AA,$AA,$53 ;-0.333331 + +;## .byte $08 ; counter +;## .byte $78,$3B,$D7,$4A ; 1/17 +;## .byte $7B,$84,$6E,$02 ;-1/15 +;## .byte $7C,$2F,$C1,$FE ; 1/13 +;## .byte $7D,$9A,$31,$74 ;-1/11 +;## .byte $7D,$5A,$3D,$84 ; 1/9 +;## .byte $7E,$91,$7F,$C8 ;-1/7 +;## .byte $7E,$4C,$BB,$E4 ; 1/5 +;## .byte $7F,$AA,$AA,$6C ;-1/3 + +LAB_1D96 = *+1 ; $00,$00 used for undefined variables +LAB_259C + .byte $81,$00,$00,$00 ; 1.000000, used for INC +LAB_2AFD + .byte $81,$80,$00,$00 ; -1.00000, used for DEC. must be on the same page as +1.00 + + ; misc constants +LAB_1DF7 + .byte $90 ;-32768 (uses first three bytes from 0.5) +LAB_2A96 + .byte $80,$00,$00,$00 ; 0.5 +LAB_2C80 + .byte $7F,$00,$00,$00 ; 0.25 +LAB_26B5 + .byte $84,$20,$00,$00 ; 10.0000 divide by 10 constant + +; This table is used in converting numbers to ASCII. + +LAB_2A9A +LAB_2A9B = LAB_2A9A+1 +LAB_2A9C = LAB_2A9B+1 + .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 + +LAB_CTBL + .word LAB_END-1 ; END + .word LAB_FOR-1 ; FOR + .word LAB_NEXT-1 ; NEXT + .word LAB_DATA-1 ; DATA + .word LAB_INPUT-1 ; INPUT + .word LAB_DIM-1 ; DIM + .word LAB_READ-1 ; READ + .word LAB_LET-1 ; LET + .word LAB_DEC-1 ; DEC new command + .word LAB_GOTO-1 ; GOTO + .word LAB_RUN-1 ; RUN + .word LAB_IF-1 ; IF + .word LAB_RESTORE-1 ; RESTORE modified command + .word LAB_GOSUB-1 ; GOSUB + .word LAB_RETIRQ-1 ; RETIRQ new command + .word LAB_RETNMI-1 ; RETNMI new command + .word LAB_RETURN-1 ; RETURN + .word LAB_REM-1 ; REM + .word LAB_STOP-1 ; STOP + .word LAB_ON-1 ; ON modified command + .word LAB_NULL-1 ; NULL modified command + .word LAB_INC-1 ; INC new command + .word LAB_WAIT-1 ; WAIT + .word V_LOAD-1 ; LOAD + .word V_SAVE-1 ; SAVE + .word LAB_DEF-1 ; DEF + .word LAB_POKE-1 ; POKE + .word LAB_DOKE-1 ; DOKE new command + .word LAB_CALL-1 ; CALL new command + .word LAB_DO-1 ; DO new command + .word LAB_LOOP-1 ; LOOP new command + .word LAB_PRINT-1 ; PRINT + .word LAB_CONT-1 ; CONT + .word LAB_LIST-1 ; LIST + .word LAB_CLEAR-1 ; CLEAR + .word LAB_NEW-1 ; NEW + .word LAB_WDTH-1 ; WIDTH new command + .word LAB_GET-1 ; GET new command + .word LAB_SWAP-1 ; SWAP new command + .word LAB_BITSET-1 ; BITSET new command + .word LAB_BITCLR-1 ; BITCLR new command + .word LAB_IRQ-1 ; IRQ new command + .word LAB_NMI-1 ; NMI new command + +; function pre process routine table + +LAB_FTPL +LAB_FTPM = LAB_FTPL+$01 + .word LAB_PPFN-1 ; SGN(n) process numeric expression in () + .word LAB_PPFN-1 ; INT(n) " + .word LAB_PPFN-1 ; ABS(n) " + .word LAB_EVEZ-1 ; USR(x) process any expression + .word LAB_1BF7-1 ; FRE(x) " + .word LAB_1BF7-1 ; POS(x) " + .word LAB_PPFN-1 ; SQR(n) process numeric expression in () + .word LAB_PPFN-1 ; RND(n) " + .word LAB_PPFN-1 ; LOG(n) " + .word LAB_PPFN-1 ; EXP(n) " + .word LAB_PPFN-1 ; COS(n) " + .word LAB_PPFN-1 ; SIN(n) " + .word LAB_PPFN-1 ; TAN(n) " + .word LAB_PPFN-1 ; ATN(n) " + .word LAB_PPFN-1 ; PEEK(n) " + .word LAB_PPFN-1 ; DEEK(n) " + .word $0000 ; SADD() none + .word LAB_PPFS-1 ; LEN($) process string expression in () + .word LAB_PPFN-1 ; STR$(n) process numeric expression in () + .word LAB_PPFS-1 ; VAL($) process string expression in () + .word LAB_PPFS-1 ; ASC($) " + .word LAB_PPFS-1 ; UCASE$($) " + .word LAB_PPFS-1 ; LCASE$($) " + .word LAB_PPFN-1 ; CHR$(n) process numeric expression in () + .word LAB_BHSS-1 ; HEX$(n) " + .word LAB_BHSS-1 ; BIN$(n) " + .word $0000 ; BITTST() none + .word LAB_MMPP-1 ; MAX() process numeric expression + .word LAB_MMPP-1 ; MIN() " + .word LAB_PPBI-1 ; PI advance pointer + .word LAB_PPBI-1 ; TWOPI " + .word $0000 ; VARPTR() none + .word LAB_LRMS-1 ; LEFT$() process string expression + .word LAB_LRMS-1 ; RIGHT$() " + .word LAB_LRMS-1 ; MID$() " + +; action addresses for functions + +LAB_FTBL +LAB_FTBM = LAB_FTBL+$01 + .word LAB_SGN-1 ; SGN() + .word LAB_INT-1 ; INT() + .word LAB_ABS-1 ; ABS() + .word LAB_USR-1 ; USR() + .word LAB_FRE-1 ; FRE() + .word LAB_POS-1 ; POS() + .word LAB_SQR-1 ; SQR() + .word LAB_RND-1 ; RND() modified function + .word LAB_LOG-1 ; LOG() + .word LAB_EXP-1 ; EXP() + .word LAB_COS-1 ; COS() + .word LAB_SIN-1 ; SIN() + .word LAB_TAN-1 ; TAN() + .word LAB_ATN-1 ; ATN() + .word LAB_PEEK-1 ; PEEK() + .word LAB_DEEK-1 ; DEEK() new function + .word LAB_SADD-1 ; SADD() new function + .word LAB_LENS-1 ; LEN() + .word LAB_STRS-1 ; STR$() + .word LAB_VAL-1 ; VAL() + .word LAB_ASC-1 ; ASC() + .word LAB_UCASE-1 ; UCASE$() new function + .word LAB_LCASE-1 ; LCASE$() new function + .word LAB_CHRS-1 ; CHR$() + .word LAB_HEXS-1 ; HEX$() new function + .word LAB_BINS-1 ; BIN$() new function + .word LAB_BTST-1 ; BITTST() new function + .word LAB_MAX-1 ; MAX() new function + .word LAB_MIN-1 ; MIN() new function + .word LAB_PI-1 ; PI new function + .word LAB_TWOPI-1 ; TWOPI new function + .word LAB_VARPTR-1 ; VARPTR() new function + .word LAB_LEFT-1 ; LEFT$() + .word LAB_RIGHT-1 ; RIGHT$() + .word LAB_MIDS-1 ; MID$() + +; hierarchy and action addresses for operator + +LAB_OPPT + .byte $79 ; + + .word LAB_ADD-1 + .byte $79 ; - + .word LAB_SUBTRACT-1 + .byte $7B ; * + .word LAB_MULTIPLY-1 + .byte $7B ; / + .word LAB_DIVIDE-1 + .byte $7F ; ^ + .word LAB_POWER-1 + .byte $50 ; AND + .word LAB_AND-1 + .byte $46 ; EOR new operator + .word LAB_EOR-1 + .byte $46 ; OR + .word LAB_OR-1 + .byte $56 ; >> new operator + .word LAB_RSHIFT-1 + .byte $56 ; << new operator + .word LAB_LSHIFT-1 + .byte $7D ; > + .word LAB_GTHAN-1 + .byte $5A ; = + .word LAB_EQUAL-1 + .byte $64 ; < + .word LAB_LTHAN-1 + +; keywords start with .. +; this is the first character table and must be in alphabetic order + +TAB_1STC + .byte "*" + .byte "+" + .byte "-" + .byte "/" + .byte "<" + .byte "=" + .byte ">" + .byte "?" + .byte "A" + .byte "B" + .byte "C" + .byte "D" + .byte "E" + .byte "F" + .byte "G" + .byte "H" + .byte "I" + .byte "L" + .byte "M" + .byte "N" + .byte "O" + .byte "P" + .byte "R" + .byte "S" + .byte "T" + .byte "U" + .byte "V" + .byte "W" + .byte "^" + .byte $00 ; table terminator + +; pointers to keyword tables + +TAB_CHRT + .word TAB_STAR ; table for "*" + .word TAB_PLUS ; table for "+" + .word TAB_MNUS ; table for "-" + .word TAB_SLAS ; table for "/" + .word TAB_LESS ; table for "<" + .word TAB_EQUL ; table for "=" + .word TAB_MORE ; table for ">" + .word TAB_QEST ; table for "?" + .word TAB_ASCA ; table for "A" + .word TAB_ASCB ; table for "B" + .word TAB_ASCC ; table for "C" + .word TAB_ASCD ; table for "D" + .word TAB_ASCE ; table for "E" + .word TAB_ASCF ; table for "F" + .word TAB_ASCG ; table for "G" + .word TAB_ASCH ; table for "H" + .word TAB_ASCI ; table for "I" + .word TAB_ASCL ; table for "L" + .word TAB_ASCM ; table for "M" + .word TAB_ASCN ; table for "N" + .word TAB_ASCO ; table for "O" + .word TAB_ASCP ; table for "P" + .word TAB_ASCR ; table for "R" + .word TAB_ASCS ; table for "S" + .word TAB_ASCT ; table for "T" + .word TAB_ASCU ; table for "U" + .word TAB_ASCV ; table for "V" + .word TAB_ASCW ; table for "W" + .word TAB_POWR ; table for "^" + +; tables for each start character, note if a longer keyword with the same start +; letters as a shorter one exists then it must come first, else the list is in +; alphabetical order as follows .. + +; [keyword,token +; [keyword,token]] +; end marker (#$00) + +TAB_STAR + .byte TK_MUL,$00 ; * +TAB_PLUS + .byte TK_PLUS,$00 ; + +TAB_MNUS + .byte TK_MINUS,$00 ; - +TAB_SLAS + .byte TK_DIV,$00 ; / +TAB_LESS +LBB_LSHIFT + .byte "<",TK_LSHIFT ; << note - "<<" must come before "<" + .byte TK_LT ; < + .byte $00 +TAB_EQUL + .byte TK_EQUAL,$00 ; = +TAB_MORE +LBB_RSHIFT + .byte ">",TK_RSHIFT ; >> note - ">>" must come before ">" + .byte TK_GT ; > + .byte $00 +TAB_QEST + .byte TK_PRINT,$00 ; ? +TAB_ASCA +LBB_ABS + .byte "BS(",TK_ABS ; ABS( +LBB_AND + .byte "ND",TK_AND ; AND +LBB_ASC + .byte "SC(",TK_ASC ; ASC( +LBB_ATN + .byte "TN(",TK_ATN ; ATN( + .byte $00 +TAB_ASCB +LBB_BINS + .byte "IN$(",TK_BINS ; BIN$( +LBB_BITCLR + .byte "ITCLR",TK_BITCLR ; BITCLR +LBB_BITSET + .byte "ITSET",TK_BITSET ; BITSET +LBB_BITTST + .byte "ITTST(",TK_BITTST + ; BITTST( + .byte $00 +TAB_ASCC +LBB_CALL + .byte "ALL",TK_CALL ; CALL +LBB_CHRS + .byte "HR$(",TK_CHRS ; CHR$( +LBB_CLEAR + .byte "LEAR",TK_CLEAR ; CLEAR +LBB_CONT + .byte "ONT",TK_CONT ; CONT +LBB_COS + .byte "OS(",TK_COS ; COS( + .byte $00 +TAB_ASCD +LBB_DATA + .byte "ATA",TK_DATA ; DATA +LBB_DEC + .byte "EC",TK_DEC ; DEC +LBB_DEEK + .byte "EEK(",TK_DEEK ; DEEK( +LBB_DEF + .byte "EF",TK_DEF ; DEF +LBB_DIM + .byte "IM",TK_DIM ; DIM +LBB_DOKE + .byte "OKE",TK_DOKE ; DOKE note - "DOKE" must come before "DO" +LBB_DO + .byte "O",TK_DO ; DO + .byte $00 +TAB_ASCE +LBB_ELSE + .byte "LSE",TK_ELSE ; ELSE +LBB_END + .byte "ND",TK_END ; END +LBB_EOR + .byte "OR",TK_EOR ; EOR +LBB_EXP + .byte "XP(",TK_EXP ; EXP( + .byte $00 +TAB_ASCF +LBB_FN + .byte "N",TK_FN ; FN +LBB_FOR + .byte "OR",TK_FOR ; FOR +LBB_FRE + .byte "RE(",TK_FRE ; FRE( + .byte $00 +TAB_ASCG +LBB_GET + .byte "ET",TK_GET ; GET +LBB_GOSUB + .byte "OSUB",TK_GOSUB ; GOSUB +LBB_GOTO + .byte "OTO",TK_GOTO ; GOTO + .byte $00 +TAB_ASCH +LBB_HEXS + .byte "EX$(",TK_HEXS ; HEX$( + .byte $00 +TAB_ASCI +LBB_IF + .byte "F",TK_IF ; IF +LBB_INC + .byte "NC",TK_INC ; INC +LBB_INPUT + .byte "NPUT",TK_INPUT ; INPUT +LBB_INT + .byte "NT(",TK_INT ; INT( +LBB_IRQ + .byte "RQ",TK_IRQ ; IRQ + .byte $00 +TAB_ASCL +LBB_LCASES + .byte "CASE$(",TK_LCASES + ; LCASE$( +LBB_LEFTS + .byte "EFT$(",TK_LEFTS ; LEFT$( +LBB_LEN + .byte "EN(",TK_LEN ; LEN( +LBB_LET + .byte "ET",TK_LET ; LET +LBB_LIST + .byte "IST",TK_LIST ; LIST +LBB_LOAD + .byte "OAD",TK_LOAD ; LOAD +LBB_LOG + .byte "OG(",TK_LOG ; LOG( +LBB_LOOP + .byte "OOP",TK_LOOP ; LOOP + .byte $00 +TAB_ASCM +LBB_MAX + .byte "AX(",TK_MAX ; MAX( +LBB_MIDS + .byte "ID$(",TK_MIDS ; MID$( +LBB_MIN + .byte "IN(",TK_MIN ; MIN( + .byte $00 +TAB_ASCN +LBB_NEW + .byte "EW",TK_NEW ; NEW +LBB_NEXT + .byte "EXT",TK_NEXT ; NEXT +LBB_NMI + .byte "MI",TK_NMI ; NMI +LBB_NOT + .byte "OT",TK_NOT ; NOT +LBB_NULL + .byte "ULL",TK_NULL ; NULL + .byte $00 +TAB_ASCO +LBB_OFF + .byte "FF",TK_OFF ; OFF +LBB_ON + .byte "N",TK_ON ; ON +LBB_OR + .byte "R",TK_OR ; OR + .byte $00 +TAB_ASCP +LBB_PEEK + .byte "EEK(",TK_PEEK ; PEEK( +LBB_PI + .byte "I",TK_PI ; PI +LBB_POKE + .byte "OKE",TK_POKE ; POKE +LBB_POS + .byte "OS(",TK_POS ; POS( +LBB_PRINT + .byte "RINT",TK_PRINT ; PRINT + .byte $00 +TAB_ASCR +LBB_READ + .byte "EAD",TK_READ ; READ +LBB_REM + .byte "EM",TK_REM ; REM +LBB_RESTORE + .byte "ESTORE",TK_RESTORE + ; RESTORE +LBB_RETIRQ + .byte "ETIRQ",TK_RETIRQ ; RETIRQ +LBB_RETNMI + .byte "ETNMI",TK_RETNMI ; RETNMI +LBB_RETURN + .byte "ETURN",TK_RETURN ; RETURN +LBB_RIGHTS + .byte "IGHT$(",TK_RIGHTS + ; RIGHT$( +LBB_RND + .byte "ND(",TK_RND ; RND( +LBB_RUN + .byte "UN",TK_RUN ; RUN + .byte $00 +TAB_ASCS +LBB_SADD + .byte "ADD(",TK_SADD ; SADD( +LBB_SAVE + .byte "AVE",TK_SAVE ; SAVE +LBB_SGN + .byte "GN(",TK_SGN ; SGN( +LBB_SIN + .byte "IN(",TK_SIN ; SIN( +LBB_SPC + .byte "PC(",TK_SPC ; SPC( +LBB_SQR + .byte "QR(",TK_SQR ; SQR( +LBB_STEP + .byte "TEP",TK_STEP ; STEP +LBB_STOP + .byte "TOP",TK_STOP ; STOP +LBB_STRS + .byte "TR$(",TK_STRS ; STR$( +LBB_SWAP + .byte "WAP",TK_SWAP ; SWAP + .byte $00 +TAB_ASCT +LBB_TAB + .byte "AB(",TK_TAB ; TAB( +LBB_TAN + .byte "AN(",TK_TAN ; TAN( +LBB_THEN + .byte "HEN",TK_THEN ; THEN +LBB_TO + .byte "O",TK_TO ; TO +LBB_TWOPI + .byte "WOPI",TK_TWOPI ; TWOPI + .byte $00 +TAB_ASCU +LBB_UCASES + .byte "CASE$(",TK_UCASES + ; UCASE$( +LBB_UNTIL + .byte "NTIL",TK_UNTIL ; UNTIL +LBB_USR + .byte "SR(",TK_USR ; USR( + .byte $00 +TAB_ASCV +LBB_VAL + .byte "AL(",TK_VAL ; VAL( +LBB_VPTR + .byte "ARPTR(",TK_VPTR ; VARPTR( + .byte $00 +TAB_ASCW +LBB_WAIT + .byte "AIT",TK_WAIT ; WAIT +LBB_WHILE + .byte "HILE",TK_WHILE ; WHILE +LBB_WIDTH + .byte "IDTH",TK_WIDTH ; WIDTH + .byte $00 +TAB_POWR + .byte TK_POWER,$00 ; ^ + +; new decode table for LIST +; Table is .. +; byte - keyword length, keyword first character +; word - pointer to rest of keyword from dictionary + +; note if length is 1 then the pointer is ignored + +LAB_KEYT + .byte 3,'E' + .word LBB_END ; END + .byte 3,'F' + .word LBB_FOR ; FOR + .byte 4,'N' + .word LBB_NEXT ; NEXT + .byte 4,'D' + .word LBB_DATA ; DATA + .byte 5,'I' + .word LBB_INPUT ; INPUT + .byte 3,'D' + .word LBB_DIM ; DIM + .byte 4,'R' + .word LBB_READ ; READ + .byte 3,'L' + .word LBB_LET ; LET + .byte 3,'D' + .word LBB_DEC ; DEC + .byte 4,'G' + .word LBB_GOTO ; GOTO + .byte 3,'R' + .word LBB_RUN ; RUN + .byte 2,'I' + .word LBB_IF ; IF + .byte 7,'R' + .word LBB_RESTORE ; RESTORE + .byte 5,'G' + .word LBB_GOSUB ; GOSUB + .byte 6,'R' + .word LBB_RETIRQ ; RETIRQ + .byte 6,'R' + .word LBB_RETNMI ; RETNMI + .byte 6,'R' + .word LBB_RETURN ; RETURN + .byte 3,'R' + .word LBB_REM ; REM + .byte 4,'S' + .word LBB_STOP ; STOP + .byte 2,'O' + .word LBB_ON ; ON + .byte 4,'N' + .word LBB_NULL ; NULL + .byte 3,'I' + .word LBB_INC ; INC + .byte 4,'W' + .word LBB_WAIT ; WAIT + .byte 4,'L' + .word LBB_LOAD ; LOAD + .byte 4,'S' + .word LBB_SAVE ; SAVE + .byte 3,'D' + .word LBB_DEF ; DEF + .byte 4,'P' + .word LBB_POKE ; POKE + .byte 4,'D' + .word LBB_DOKE ; DOKE + .byte 4,'C' + .word LBB_CALL ; CALL + .byte 2,'D' + .word LBB_DO ; DO + .byte 4,'L' + .word LBB_LOOP ; LOOP + .byte 5,'P' + .word LBB_PRINT ; PRINT + .byte 4,'C' + .word LBB_CONT ; CONT + .byte 4,'L' + .word LBB_LIST ; LIST + .byte 5,'C' + .word LBB_CLEAR ; CLEAR + .byte 3,'N' + .word LBB_NEW ; NEW + .byte 5,'W' + .word LBB_WIDTH ; WIDTH + .byte 3,'G' + .word LBB_GET ; GET + .byte 4,'S' + .word LBB_SWAP ; SWAP + .byte 6,'B' + .word LBB_BITSET ; BITSET + .byte 6,'B' + .word LBB_BITCLR ; BITCLR + .byte 3,'I' + .word LBB_IRQ ; IRQ + .byte 3,'N' + .word LBB_NMI ; NMI + +; secondary commands (can't start a statement) + + .byte 4,'T' + .word LBB_TAB ; TAB + .byte 4,'E' + .word LBB_ELSE ; ELSE + .byte 2,'T' + .word LBB_TO ; TO + .byte 2,'F' + .word LBB_FN ; FN + .byte 4,'S' + .word LBB_SPC ; SPC + .byte 4,'T' + .word LBB_THEN ; THEN + .byte 3,'N' + .word LBB_NOT ; NOT + .byte 4,'S' + .word LBB_STEP ; STEP + .byte 5,'U' + .word LBB_UNTIL ; UNTIL + .byte 5,'W' + .word LBB_WHILE ; WHILE + .byte 3,'O' + .word LBB_OFF ; OFF + +; opperators + + .byte 1,'+' + .word $0000 ; + + .byte 1,'-' + .word $0000 ; - + .byte 1,'*' + .word $0000 ; * + .byte 1,'/' + .word $0000 ; / + .byte 1,'^' + .word $0000 ; ^ + .byte 3,'A' + .word LBB_AND ; AND + .byte 3,'E' + .word LBB_EOR ; EOR + .byte 2,'O' + .word LBB_OR ; OR + .byte 2,'>' + .word LBB_RSHIFT ; >> + .byte 2,'<' + .word LBB_LSHIFT ; << + .byte 1,'>' + .word $0000 ; > + .byte 1,'=' + .word $0000 ; = + .byte 1,'<' + .word $0000 ; < + +; functions + + .byte 4,'S' ; + .word LBB_SGN ; SGN + .byte 4,'I' ; + .word LBB_INT ; INT + .byte 4,'A' ; + .word LBB_ABS ; ABS + .byte 4,'U' ; + .word LBB_USR ; USR + .byte 4,'F' ; + .word LBB_FRE ; FRE + .byte 4,'P' ; + .word LBB_POS ; POS + .byte 4,'S' ; + .word LBB_SQR ; SQR + .byte 4,'R' ; + .word LBB_RND ; RND + .byte 4,'L' ; + .word LBB_LOG ; LOG + .byte 4,'E' ; + .word LBB_EXP ; EXP + .byte 4,'C' ; + .word LBB_COS ; COS + .byte 4,'S' ; + .word LBB_SIN ; SIN + .byte 4,'T' ; + .word LBB_TAN ; TAN + .byte 4,'A' ; + .word LBB_ATN ; ATN + .byte 5,'P' ; + .word LBB_PEEK ; PEEK + .byte 5,'D' ; + .word LBB_DEEK ; DEEK + .byte 5,'S' ; + .word LBB_SADD ; SADD + .byte 4,'L' ; + .word LBB_LEN ; LEN + .byte 5,'S' ; + .word LBB_STRS ; STR$ + .byte 4,'V' ; + .word LBB_VAL ; VAL + .byte 4,'A' ; + .word LBB_ASC ; ASC + .byte 7,'U' ; + .word LBB_UCASES ; UCASE$ + .byte 7,'L' ; + .word LBB_LCASES ; LCASE$ + .byte 5,'C' ; + .word LBB_CHRS ; CHR$ + .byte 5,'H' ; + .word LBB_HEXS ; HEX$ + .byte 5,'B' ; + .word LBB_BINS ; BIN$ + .byte 7,'B' ; + .word LBB_BITTST ; BITTST + .byte 4,'M' ; + .word LBB_MAX ; MAX + .byte 4,'M' ; + .word LBB_MIN ; MIN + .byte 2,'P' ; + .word LBB_PI ; PI + .byte 5,'T' ; + .word LBB_TWOPI ; TWOPI + .byte 7,'V' ; + .word LBB_VPTR ; VARPTR + .byte 6,'L' ; + .word LBB_LEFTS ; LEFT$ + .byte 7,'R' ; + .word LBB_RIGHTS ; RIGHT$ + .byte 5,'M' ; + .word LBB_MIDS ; MID$ + +; BASIC messages, mostly error messages + +LAB_BAER + .word ERR_NF ;$00 NEXT without FOR + .word ERR_SN ;$02 syntax + .word ERR_RG ;$04 RETURN without GOSUB + .word ERR_OD ;$06 out of data + .word ERR_FC ;$08 function call + .word ERR_OV ;$0A overflow + .word ERR_OM ;$0C out of memory + .word ERR_US ;$0E undefined statement + .word ERR_BS ;$10 array bounds + .word ERR_DD ;$12 double dimension array + .word ERR_D0 ;$14 divide by 0 + .word ERR_ID ;$16 illegal direct + .word ERR_TM ;$18 type mismatch + .word ERR_LS ;$1A long string + .word ERR_ST ;$1C string too complex + .word ERR_CN ;$1E continue error + .word ERR_UF ;$20 undefined function + .word ERR_LD ;$22 LOOP without DO + +; I may implement these two errors to force definition of variables and +; dimensioning of arrays before use. + +; .word ERR_UV ;$24 undefined variable + +; the above error has been tested and works (see code and comments below LAB_1D8B) + +; .word ERR_UA ;$26 undimensioned array + +ERR_NF .byte "NEXT without FOR",$00 +ERR_SN .byte "Syntax",$00 +ERR_RG .byte "RETURN without GOSUB",$00 +ERR_OD .byte "Out of DATA",$00 +ERR_FC .byte "Function call",$00 +ERR_OV .byte "Overflow",$00 +ERR_OM .byte "Out of memory",$00 +ERR_US .byte "Undefined statement",$00 +ERR_BS .byte "Array bounds",$00 +ERR_DD .byte "Double dimension",$00 +ERR_D0 .byte "Divide by zero",$00 +ERR_ID .byte "Illegal direct",$00 +ERR_TM .byte "Type mismatch",$00 +ERR_LS .byte "String too long",$00 +ERR_ST .byte "String too complex",$00 +ERR_CN .byte "Can't continue",$00 +ERR_UF .byte "Undefined function",$00 +ERR_LD .byte "LOOP without DO",$00 + +;ERR_UV .byte "Undefined variable",$00 + +; the above error has been tested and works (see code and comments below LAB_1D8B) + +;ERR_UA .byte "Undimensioned array",$00 + +LAB_BMSG .byte $0D,$0A,"Break",$00 +LAB_EMSG .byte " Error",$00 +LAB_LMSG .byte " in line ",$00 +LAB_RMSG .byte $0D,$0A,"Ready",$0D,$0A,$00 + +LAB_IMSG .byte " Extra ignored",$0D,$0A,$00 +LAB_REDO .byte " Redo from start",$0D,$0A,$00 + +AA_end_basic diff --git a/min_mon.asm b/min_mon.asm new file mode 100644 index 0000000..7695c01 --- /dev/null +++ b/min_mon.asm @@ -0,0 +1,134 @@ + +; minimal monitor for EhBASIC and 6502 simulator V1.05 + +; To run EhBASIC on the simulator load and assemble [F7] this file, start the simulator +; running [F6] then start the code with the RESET [CTRL][SHIFT]R. Just selecting RUN +; will do nothing, you'll still have to do a reset to run the code. + + .include "basic.asm" + +; put the IRQ and MNI code in RAM so that it can be changed + +IRQ_vec = VEC_SV+2 ; IRQ code vector +NMI_vec = IRQ_vec+$0A ; NMI code vector + +; setup for the 6502 simulator environment + +IO_AREA = $F000 ; set I/O area for this monitor + +ACIAsimwr = IO_AREA+$01 ; simulated ACIA write port +ACIAsimrd = IO_AREA+$04 ; simulated ACIA read port + +; now the code. all this does is set up the vectors and interrupt code +; and wait for the user to select [C]old or [W]arm start. nothing else +; fits in less than 128 bytes + + *= $FF80 ; pretend this is in a 1/8K ROM + +; reset vector points here + +RES_vec + CLD ; clear decimal mode + LDX #$FF ; empty stack + TXS ; set the stack + +; set up vectors and interrupt code, copy them to page 2 + + LDY #END_CODE-LAB_vec ; set index/count +LAB_stlp + LDA LAB_vec-1,Y ; get byte from interrupt code + STA VEC_IN-1,Y ; save to RAM + DEY ; decrement index/count + BNE LAB_stlp ; loop if more to do + +; now do the signon message, Y = $00 here + +LAB_signon + LDA LAB_mess,Y ; get byte from sign on message + BEQ LAB_nokey ; exit loop if done + + JSR V_OUTP ; output character + INY ; increment index + BNE LAB_signon ; loop, branch always + +LAB_nokey + JSR V_INPT ; call scan input device + BCC LAB_nokey ; loop if no key + + AND #$DF ; mask xx0x xxxx, ensure upper case + CMP #'W' ; compare with [W]arm start + BEQ LAB_dowarm ; branch if [W]arm start + + CMP #'C' ; compare with [C]old start + BNE RES_vec ; loop if not [C]old start + + JMP LAB_COLD ; do EhBASIC cold start + +LAB_dowarm + JMP LAB_WARM ; do EhBASIC warm start + +; byte out to simulated ACIA + +ACIAout + STA ACIAsimwr ; save byte to simulated ACIA + RTS + +; byte in from simulated ACIA + +ACIAin + LDA ACIAsimrd ; get byte from simulated ACIA + BEQ LAB_nobyw ; branch if no byte waiting + + SEC ; flag byte received + RTS + +LAB_nobyw + CLC ; flag no byte received +no_load ; empty load vector for EhBASIC +no_save ; empty save vector for EhBASIC + RTS + +; vector tables + +LAB_vec + .word ACIAin ; byte in from simulated ACIA + .word ACIAout ; byte out to simulated ACIA + .word no_load ; null load vector for EhBASIC + .word no_save ; null save vector for EhBASIC + +; EhBASIC IRQ support + +IRQ_CODE + PHA ; save A + LDA IrqBase ; get the IRQ flag byte + LSR ; shift the set b7 to b6, and on down ... + ORA IrqBase ; OR the original back in + STA IrqBase ; save the new IRQ flag byte + PLA ; restore A + RTI + +; EhBASIC NMI support + +NMI_CODE + PHA ; save A + LDA NmiBase ; get the NMI flag byte + LSR ; shift the set b7 to b6, and on down ... + ORA NmiBase ; OR the original back in + STA NmiBase ; save the new NMI flag byte + PLA ; restore A + RTI + +END_CODE + +LAB_mess + .byte $0D,$0A,"6502 EhBASIC [C]old/[W]arm ?",$00 + ; sign on string + +; system vectors + + *= $FFFA + + .word NMI_vec ; NMI vector + .word RES_vec ; RESET vector + .word IRQ_vec ; IRQ vector + diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..68fd373 --- /dev/null +++ b/readme.txt @@ -0,0 +1,15 @@ + + Enhanced BASIC is a BASIC interpreter for the 6502 family microprocessors. It + is constructed to be quick and powerful and easily ported between 6502 systems. + It requires few resources to run and includes instructions to facilitate easy + low level handling of hardware devices. It also retains most of the powerful + high level instructions from similar BASICs. + + EhBASIC is free but not copyright free. For non commercial use there is only one + restriction, any derivative work should include, in any binary image distributed, + the string "Derived from EhBASIC" and in any distribution that includes human + readable files a file that includes the above string in a human readable form + e.g. not as a comment in an HTML file. + + For commercial use please contact Lee Davison at leeedavison@googlemail.com + for conditions.