Created
November 21, 2012 21:40
-
-
Save BigEd/4127984 to your computer and use it in GitHub Desktop.
listing and labels from KB9 BASIC source (see http://www.pagetable.com/?p=46)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
al 004225 .QT_BASIC | |
al 004216 .QT_BYTES_FREE | |
al 004192 .L4192 | |
al 004157 .L4157 | |
al 004183 .L4183 | |
al 0041C6 .QT_WANT | |
al 004129 .L4129 | |
al 004127 .L2829 | |
al 004136 .L4136 | |
al 004207 .QT_TERMINAL_WIDTH | |
al 004106 .L4106 | |
al 0040FA .L40FA | |
al 0040DD .L40DD | |
al 0040D7 .L40D7 | |
al 004261 .RAMSTART2 | |
al 0040EE .L40EE | |
al 0041FB .QT_MEMORY_SIZE | |
al 004098 .L4098 | |
al 004065 .COLD_START | |
al 0041DB .QT_WRITTEN_BY | |
al 00405E .PR_WRITTEN_BY | |
al 004002 .L4002 | |
al 003FFC .L3FFC | |
al 004003 .POLY_ATN | |
al 003FE9 .L3FE9 | |
al 003FDB .L3FDB | |
al 003FC9 .MICROSOFT | |
al 003F97 .TAN1 | |
al 003FAA .POLY_SIN | |
al 003F68 .L3F68 | |
al 003F5B .L3F5B | |
al 003F58 .SIN1 | |
al 003FA5 .QUARTER | |
al 003FA0 .CON_PI_DOUB | |
al 003F9B .CON_PI_HALF | |
al 003F1F .SIN_COS_TAN_ATN | |
al 00405E .GENERIC_CHRGET_END | |
al 003F1C .GOMOVMF | |
al 003F01 .L3F01 | |
al 003EDF .CONRND2 | |
al 003EDB .CONRND1 | |
al 004058 .L4058 | |
al 004041 .RAMSTART1 | |
al 003EDA .RTS19 | |
al 003ECB .L3ECB | |
al 003EBE .L3EBE | |
al 003EBA .L3EBA | |
al 003EAB .SERMAIN | |
al 003EA7 .POLYNOMIAL | |
al 003E6C .L3E6C | |
al 003E59 .L3E59 | |
al 003E5C .L3E5C | |
al 003E4E .L3E4E | |
al 003E15 .POLY_EXP | |
al 003E10 .CON_LOG_E | |
al 003E0F .L3E0F | |
al 003DEF .L3DEF | |
al 003DD5 .L3DD5 | |
al 003D94 .L3D94 | |
al 003D77 .L3D77 | |
al 003D6B .L3D6B | |
al 003D8F .L3D8F | |
al 003D5B .L3D5B | |
al 003D4E .L3D4E | |
al 003D4C .LDD96 | |
al 003DC2 .DECTBL_END | |
al 003D3E .L3D3E | |
al 003D23 .L3D23 | |
al 003D1C .L3D1C | |
al 003D1A .L3D1A | |
al 003D9E .DECTBL | |
al 003CF6 .L3CF6 | |
al 003CF4 .LDD3A | |
al 003CF0 .L3CF0 | |
al 003CF2 .L3CF2 | |
al 003CDF .L3CDF | |
al 003CD4 .L3CD4 | |
al 003CD3 .L3CD3 | |
al 003CBB .L3CBB | |
al 003CAD .L3CAD | |
al 003CA2 .L3CA2 | |
al 003CB4 .L3CB4 | |
al 003CBE .L3CBE | |
al 003C97 .L3C97 | |
al 003C95 .L3C95 | |
al 003C8C .L3C8C | |
al 003D8C .FOUT4 | |
al 003C84 .L3C84 | |
al 003C73 .L3C73 | |
al 003C66 .GOSTROUT2 | |
al 003C49 .CON_BILLION | |
al 003C44 .CON_999999999 | |
al 003C3F .CON_99999999_9 | |
al 003C2C .LDC70 | |
al 003C3A .L3C3A | |
al 003C2C .L3C2C | |
al 003BFD .L3BFD | |
al 003BF3 .L3BF3 | |
al 003BDE .L3BDE | |
al 003BE7 .L3BE7 | |
al 003BEE .L3BEE | |
al 003BC9 .L3BC9 | |
al 003BD5 .FIN8 | |
al 003C1D .GETEXP | |
al 003BAC .L3BAC | |
al 003BB7 .FIN6 | |
al 003BB2 .FIN4 | |
al 003BA6 .L3BA6 | |
al 003BB5 .FIN5 | |
al 003BD3 .FIN7 | |
al 003BC3 .FIN10 | |
al 003BF6 .FIN9 | |
al 003B87 .FIN3 | |
al 003B82 .FIN1 | |
al 003B7E .L3B7E | |
al 003B85 .FIN2 | |
al 003B6F .L3B6F | |
al 003B6A .RTS17 | |
al 003B33 .QINT2 | |
al 003B27 .L3B27 | |
al 003B61 .QINT3 | |
al 003B10 .L3B10 | |
al 003B32 .L3B32 | |
al 003B0A .L3B0A | |
al 003AC7 .LDB21 | |
al 003AC1 .FLOAT2 | |
al 003AA9 .SIGN2 | |
al 003AA7 .L3AA7 | |
al 003AB0 .RTS15 | |
al 003A9B .INCREMENT_MANTISSA | |
al 003A92 .RTS14 | |
al 003A89 .L3A89 | |
al 003A87 .MAF | |
al 003A7A .L3A7A | |
al 003A76 .MFA | |
al 003A42 .STORE_FAC_IN_TEMP1_ROUNDED | |
al 003A3F .STORE_FAC_IN_TEMP2_ROUNDED | |
al 0039C7 .L39C7 | |
al 0039D5 .L39D5 | |
al 0039F6 .L39F6 | |
al 0039F2 .L39F2 | |
al 0039C4 .L39C4 | |
al 0039B7 .L39B7 | |
al 0039A1 .L39A1 | |
al 003A02 .L3A02 | |
al 00397F .DIV | |
al 003976 .DIV10 | |
al 003971 .CONTEN | |
al 003965 .LD9BF | |
al 003970 .L3970 | |
al 003A84 .COPY_FAC_TO_ARG_ROUNDED | |
al 00395A .MUL10 | |
al 00394C .OUTOFRNG | |
al 003947 .L3947 | |
al 003957 .JOV | |
al 00393C .L393C | |
al 003952 .ZERO | |
al 003931 .ADD_EXPONENTS1 | |
al 0038F9 .L38F9 | |
al 0038ED .L38ED | |
al 0038E1 .L38E1 | |
al 0038D5 .L38D5 | |
al 0038C9 .L38C9 | |
al 0038C3 .L38C3 | |
al 0038A7 .L38A7 | |
al 003A07 .COPY_RESULT_INTO_FAC | |
al 0038A4 .MULTIPLY2 | |
al 00389F .MULTIPLY1 | |
al 00392F .ADD_EXPONENTS | |
al 003903 .L3903 | |
al 00386E .FMULT | |
al 003C0A .ADDACC | |
al 003E91 .POLYNOMIAL_ODD | |
al 003987 .FDIV | |
al 00383A .LOG2 | |
al 003837 .GIQ | |
al 00382B .CON_LOG_TWO | |
al 003826 .CON_NEG_HALF | |
al 003821 .CON_SQR_TWO | |
al 00381C .CON_SQR_HALF | |
al 003807 .POLY_LOG | |
al 0037FD .L37FD | |
al 0037EF .L37EF | |
al 0037E3 .L37E3 | |
al 0037D7 .L37D7 | |
al 0037C4 .L37C4 | |
al 003800 .SHIFT_RIGHT5 | |
al 0037A3 .SHIFT_RIGHT2 | |
al 0037A1 .SHIFT_RIGHT1 | |
al 00378D .INCREMENT_FAC_MANTISSA | |
al 00379B .RTS12 | |
al 00376B .COMPLEMENT_FAC_MANTISSA | |
al 00375E .L375E | |
al 003752 .L3752 | |
al 003746 .L3746 | |
al 00373A .L373A | |
al 00372E .L372E | |
al 00379C .OVERFLOW | |
al 003724 .NORMALIZE_FAC6 | |
al 003764 .L3764 | |
al 003709 .NORMALIZE_FAC3 | |
al 003722 .NORMALIZE_FAC5 | |
al 0036E7 .STA_IN_FAC_SIGN | |
al 0036E5 .STA_IN_FAC_SIGN_AND_EXP | |
al 003715 .NORMALIZE_FAC4 | |
al 0036C7 .L36C7 | |
al 003765 .COMPLEMENT_FAC | |
al 0036C3 .NORMALIZE_FAC2 | |
al 0036BE .NORMALIZE_FAC1 | |
al 00369B .L369B | |
al 0036EA .FADD4 | |
al 0037D0 .SHIFT_RIGHT4 | |
al 003683 .L3683 | |
al 00367F .L367F | |
al 003663 .FADD2 | |
al 00365B .L365B | |
al 00368F .FADD3 | |
al 0037B7 .SHIFT_RIGHT | |
al 00364E .FADD1 | |
al 003904 .LOAD_ARG_FROM_YA | |
al 00363C .FSUB | |
al 003D99 .CON_HALF | |
al 003635 .FADDH | |
al 003634 .RTS3 | |
al 00362C .L362C | |
al 003628 .L3628 | |
al 00360D .LD6F6 | |
al 0035E9 .COMBYTE | |
al 0035EF .GETADR | |
al 0035E3 .GTNUM | |
al 0035C4 .L35C4 | |
al 0036E3 .ZERO_FAC | |
al 0035AC .L35AC | |
al 003576 .SNGFLT1 | |
al 003579 .GETSTR | |
al 00358F .GOIQ | |
al 00353F .L353F | |
al 00351C .L351C | |
al 003505 .SUBSTRING3 | |
al 003504 .SUBSTRING2 | |
al 003503 .L3503 | |
al 0034FD .SUBSTRING1 | |
al 003556 .SUBSTRING_SETUP | |
al 003598 .CONINT | |
al 0034E2 .L34E2 | |
al 0034CC .L34CC | |
al 0034CD .L34CD | |
al 00349A .FRESTR | |
al 003499 .L3499 | |
al 003487 .L3487 | |
al 003490 .L3490 | |
al 003483 .MOVSTR1 | |
al 003454 .L3454 | |
al 0033FA .L33FA | |
al 0033DF .L33DF | |
al 0033D5 .L33D5 | |
al 0033EF .CHECK_BUMP | |
al 0033B1 .L33B1 | |
al 0033A9 .L33A9 | |
al 0033A7 .L33A7 | |
al 0033FF .MOVE_HIGHEST_STRING_TO_TOP | |
al 003376 .L3376 | |
al 00336B .L336B | |
al 003367 .L3367 | |
al 0033B6 .CHECK_SIMPLE_VARIABLE | |
al 00335F .L335F | |
al 00335A .L335A | |
al 003352 .L3352 | |
al 0033C0 .CHECK_VARIABLE | |
al 003346 .L3346 | |
al 00333D .L333D | |
al 003325 .FINDHIGHESTSTRING | |
al 003306 .L3306 | |
al 003311 .L3311 | |
al 0032FC .L32FC | |
al 0032F1 .L32F1 | |
al 0032CF .JERR | |
al 0032D2 .PUTEMP | |
al 00347F .MOVSTR | |
al 0032BC .LD399 | |
al 0032C7 .PUTNEW | |
al 0032B6 .L32B6 | |
al 0032AA .L32AA | |
al 0032A5 .L32A5 | |
al 0032A9 .L32A9 | |
al 003298 .L3298 | |
al 0032EF .GETSPA | |
al 00327E .STRSPA | |
al 003270 .LD353 | |
al 003C6B .FOUT1 | |
al 00324A .L324A | |
al 003A4C .STORE_FAC_AT_YX_ROUNDED | |
al 003219 .L3219 | |
al 003250 .L3250 | |
al 0031E0 .FNC | |
al 0031AF .L31AF | |
al 0031A4 .SNGFLT | |
al 003ABC .FLOAT1 | |
al 003188 .L3188 | |
al 00317C .L317C | |
al 003163 .L3163 | |
al 003159 .MULTIPLY_SUBS1 | |
al 00313B .L313B | |
al 003135 .L3135 | |
al 003124 .L3124 | |
al 003113 .FAE3 | |
al 00310C .GSE | |
al 003112 .FAE2 | |
al 0030F6 .L30F6 | |
al 00314F .RTS9 | |
al 0030CC .L30CC | |
al 0030D1 .L30D1 | |
al 0030BD .L30BD | |
al 00310F .GME | |
al 003150 .MULTIPLY_SUBSCRIPT | |
al 00309A .L309A | |
al 00308A .L308A | |
al 003081 .L3081 | |
al 003078 .L3078 | |
al 0030EE .FIND_ARRAY_ELEMENT | |
al 00304D .JER | |
al 003048 .SUBERR | |
al 003050 .USE_OLD_ARRAY | |
al 00303A .L303A | |
al 003064 .MAKE_NEW_ARRAY | |
al 00302B .L302B | |
al 00301F .L301F | |
al 002FDE .L2FDE | |
al 003B13 .QINT | |
al 002FD1 .MI2 | |
al 002FCF .MI1 | |
al 002FBE .MKINT | |
al 002FB8 .MAKINT | |
al 002FB4 .NEG32768 | |
al 002FAF .L2FAF | |
al 002FA3 .GETARY | |
al 002F9E .L2F9E | |
al 002F68 .L2F68 | |
al 002F50 .C_ZERO | |
al 002F4B .LD015 | |
al 002F52 .MAKENEWVARIABLE | |
al 002F3C .L2F3C | |
al 002F94 .SET_VARPNT_AND_YA | |
al 002F29 .L2F29 | |
al 002F3D .NAMENOTFOUND | |
al 002F1B .L2F1B | |
al 002F11 .L2F11 | |
al 002F0F .L2F0F | |
al 002FD4 .ARRAY | |
al 002F05 .L2F05 | |
al 002EF9 .L2EF9 | |
al 002EF2 .L2EF2 | |
al 002EE2 .L2EE2 | |
al 002ECE .L2ECE | |
al 002ED8 .L2ED8 | |
al 002ECD .L2ECD | |
al 002EBA .SYNERR3 | |
al 002EBD .NAMOK | |
al 002EB0 .PTRGET3 | |
al 002EAE .PTRGET2 | |
al 002E9C .NXDIM | |
al 003AB4 .FLOAT | |
al 002E99 .L2E99 | |
al 002E90 .CMPDONE | |
al 002E84 .L2E84 | |
al 002E79 .STRCMP1 | |
al 002E74 .L2E74 | |
al 0034A1 .FRETMP | |
al 002E7F .NUMCMP | |
al 003AD3 .FCOMP | |
al 002E4C .STRCMP | |
al 003A74 .COPY_ARG_TO_FAC | |
al 002DF4 .L2DF4 | |
al 002DEF .L2DEF | |
al 002DC2 .L2DC2 | |
al 002DB1 .L2DB1 | |
al 002D88 .CHKCLS | |
al 002D8B .CHKOPN | |
al 002DC5 .UNARY | |
al 002D82 .PARCHK | |
al 0031F3 .L31F3 | |
al 002D7B .L2D7B | |
al 003195 .GIVAYF | |
al 002DA0 .EQUL | |
al 002D74 .L2D74 | |
al 002D57 .L2D57 | |
al 002D5D .NOT_ | |
al 002D9E .MIN | |
al 002DA5 .FRM_VARIABLE | |
al 002F33 .ISLETC | |
al 002D36 .L2D36 | |
al 002D39 .L2D39 | |
al 002D31 .L2D31 | |
al 002D0E .L2D0E | |
al 002D2A .EXIT | |
al 002CDD .FRM_STACK1 | |
al 002CBB .L2CBB | |
al 002D10 .FRM_PERFORM2 | |
al 002D05 .GOEX | |
al 002CC3 .PREFNC | |
al 002CCA .FRM_RECURSE | |
al 002CA4 .L2CA4 | |
al 002CA3 .L2CA3 | |
al 002D07 .FRM_PERFORM1 | |
al 002C9A .FRM_PRECEDENCE_TEST | |
al 003434 .CAT | |
al 002C92 .L2C92 | |
al 002D02 .L2D02 | |
al 002CB1 .FRM_RELATIONAL | |
al 002CDA .SNTXERR | |
al 002C81 .L2C81 | |
al 002C65 .L2C65 | |
al 002C62 .FRMEVL2 | |
al 002D2D .FRM_ELEMENT | |
al 002C53 .FRMEVL1 | |
al 002C4E .L2C4E | |
al 002C40 .L2C40 | |
al 002C43 .L2C43 | |
al 002C41 .L2C41 | |
al 002C39 .CHKSTR | |
al 002C1F .L2C1F | |
al 002C22 .L2C22 | |
al 003AD5 .FCOMP2 | |
al 003653 .FADD | |
al 002C45 .JERROR | |
al 002BDC .NEXT3 | |
al 002BCF .NEXT2 | |
al 002BCC .NEXT1 | |
al 002BA2 .ERREXTRA | |
al 002BA1 .L2BA1 | |
al 002B94 .L2B94 | |
al 002BDA .GERR | |
al 002B7C .L2B7C | |
al 002D8E .CHKCOM | |
al 002B89 .INPDONE | |
al 002B48 .L2B48 | |
al 003B6B .FIN | |
al 002B3C .INPUT_MORE | |
al 0035DA .POINT | |
al 00328E .STRLT2 | |
al 002B28 .L2B28 | |
al 002B1D .L2B1D | |
al 002B1C .L2B1C | |
al 002B10 .L2B10 | |
al 002B34 .L2B34 | |
al 002AF5 .LCB64 | |
al 002B63 .FINDATA | |
al 002AF8 .L2AF8 | |
al 002AF0 .L2AF0 | |
al 002AFC .INSTART | |
al 002AC5 .PROCESS_INPUT_ITEM | |
al 002AB6 .LCB21 | |
al 002ABE .L2ABE | |
al 002AB0 .NXIN | |
al 002AA5 .LCAF8 | |
al 002D4E .STRTXT | |
al 002A9E .L2A9E | |
al 002ABF .PROCESS_INPUT_LIST | |
al 0031A8 .ERRDIR | |
al 002A7D .RTS20 | |
al 002BB3 .ERRREENTRY | |
al 002A6B .SYNERR4 | |
al 002A67 .L2A67 | |
al 002A63 .L2A63 | |
al 002A6E .RESPERR | |
al 002A59 .INPUTERR | |
al 002A58 .LE8F2 | |
al 002A4C .L2A4C | |
al 002A43 .LCA6A | |
al 002A4E .L2A4E | |
al 002A56 .L2A56 | |
al 002A22 .L2A22 | |
al 00349D .FREFAC | |
al 002A13 .L2A13 | |
al 002A0A .L2A0A | |
al 002A09 .L2A09 | |
al 003592 .GTBYTC | |
al 002A08 .L2A08 | |
al 0029EB .L29EB | |
al 0029EA .L29EA | |
al 0029D3 .L29D3 | |
al 0029D9 .L29D9 | |
al 0029CB .PRINTNULLS | |
al 0029C6 .CRDO2 | |
al 002A35 .OUTSP | |
al 0029B1 .L29B1 | |
al 003288 .STRLIT | |
al 003C69 .FOUT | |
al 002A0D .L2A0D | |
al 0029DE .L29DE | |
al 0029F5 .L29F5 | |
al 0029DD .L29DD | |
al 002983 .PRINT2 | |
al 00297E .L297E | |
al 002A1B .STRPRT | |
al 00297B .PRSTRING | |
al 0034D2 .FRETMS | |
al 003471 .MOVINS | |
al 003276 .STRINI | |
al 002963 .L2963 | |
al 00294D .L294D | |
al 002938 .L2938 | |
al 002946 .L2946 | |
al 002927 .PUTSTR | |
al 003A48 .SETFOR | |
al 002FC2 .AYINT | |
al 003A93 .ROUND_FAC | |
al 002923 .L2923 | |
al 00290F .LET2 | |
al 002926 .LETSTRING | |
al 002C3A .CHKVAL | |
al 002EA9 .PTRGET | |
al 0028EC .L28EC | |
al 0028BE .L28BE | |
al 0028B7 .L28B7 | |
al 0028AC .L28AC | |
al 0028A0 .L28A0 | |
al 0028A4 .L28A4 | |
al 002895 .L2895 | |
al 00288D .L288D | |
al 002884 .L2884 | |
al 002C48 .FRMEVL | |
al 002866 .L2866 | |
al 00285E .L285E | |
al 002852 .L2852 | |
al 002848 .ADDON | |
al 002835 .SYNERR2 | |
al 002838 .RETURN | |
al 00281E .L281E | |
al 002830 .UNDERR | |
al 00280D .L280D | |
al 002809 .L2809 | |
al 002856 .REMN | |
al 0027E9 .L27E9 | |
al 0027CF .L27CF | |
al 0027C2 .L27C2 | |
al 0027A6 .L27A6 | |
al 002769 .QT_LOADED | |
al 002770 .QT_SAVED | |
al 002739 .L2739 | |
al 003595 .GETBYT | |
al 00271C .L271C | |
al 00270E .L270E | |
al 0026F7 .CONTROL_C_TYPED | |
al 0026FF .END4 | |
al 00272A .RET1 | |
al 0026EB .END2 | |
al 0026D5 .SETDA | |
al 002D99 .SYNERR | |
al 0026C8 .SYNERR1 | |
al 0026C1 .LET1 | |
al 0026AC .EXECUTE_STATEMENT1 | |
al 0026D9 .RET2 | |
al 0026AA .EXECUTE_STATEMENT | |
al 002701 .L2701 | |
al 0026C4 .COLON | |
al 002681 .LC6D4 | |
al 002683 .L2683 | |
al 002674 .NEWSTT | |
al 002CE2 .FRM_STACK2 | |
al 003AA3 .SIGN | |
al 002665 .L2665 | |
al 003A1A .LOAD_FAC_FROM_YA | |
al 003802 .CON_ONE | |
al 002CED .FRM_STACK3 | |
al 002651 .STEP | |
al 002C34 .FRMNUM | |
al 002C37 .CHKNUM | |
al 002D90 .SYNCHR | |
al 002853 .DATAN | |
al 002619 .L2619 | |
al 0025F5 .L25F5 | |
al 0025FD .L25FD | |
al 0025F2 .L25F2 | |
al 0025E8 .L25E8 | |
al 0025CE .L25CE | |
al 0025CA .L25CA | |
al 003C59 .LINPRT | |
al 0025C3 .L25C3 | |
al 0025C1 .L25C1 | |
al 0026DA .ISCNTC | |
al 0025E5 .L25E5 | |
al 0025A6 .L25A6X | |
al 0025A6 .L25A6 | |
al 002598 .L2598 | |
al 002581 .L2581 | |
al 00253E .CLEARC | |
al 00256A .L256A | |
al 00256B .STXTPT | |
al 002523 .SCRTCH | |
al 002516 .L2516 | |
al 00250D .L250D | |
al 002520 .L2520 | |
al 00251F .L251F | |
al 0024F6 .FL1 | |
al 0024DB .L24DB | |
al 0024C8 .L24C8 | |
al 0024C1 .L24C1 | |
al 0024BF .L24BF | |
al 0024EA .L24EA | |
al 0024AA .L24AA | |
al 0024D7 .L24D7 | |
al 002498 .L2498 | |
al 002497 .L2497 | |
al 002496 .L2496 | |
al 00248C .L248C | |
al 002484 .L2484 | |
al 0024D0 .L24D0 | |
al 0024AC .L24AC | |
al 00246C .L246C | |
al 002465 .L2465 | |
al 0029B9 .L29B9 | |
al 00244C .L244C | |
al 002453 .L2453 | |
al 002443 .L2443 | |
al 002456 .GETLN | |
al 002423 .L2423 | |
al 002428 .INLIN2 | |
al 002420 .L2420 | |
al 002405 .L2405 | |
al 0023FA .L23FA | |
al 002537 .SETPTRS | |
al 0023E6 .L23E6 | |
al 0023D6 .L23D6 | |
al 0023EE .FIX_LINKS | |
al 0023AD .L23AD | |
al 0023A5 .L23A5 | |
al 0023BB .PUT_NEW_LINE | |
al 0024F2 .FNDLIN | |
al 0028B8 .LINGET | |
al 0026A1 .NEWSTT2 | |
al 002466 .PARSE_INPUT_LINE | |
al 00236A .NUMBERED_LINE | |
al 002426 .INLIN | |
al 002351 .L2351 | |
al 003C4E .INPRT | |
al 002348 .RESTART | |
al 002A18 .STROUT | |
al 00233D .PRINT_ERROR_LINNUM | |
al 002555 .STKINI | |
al 002A3A .OUTDO | |
al 002329 .L2329 | |
al 002A38 .OUTQUES | |
al 0029BF .CRDO | |
al 002321 .ERROR | |
al 00230B .L230B | |
al 003321 .GARBAG | |
al 002300 .L2300 | |
al 0022FC .L22FC | |
al 00231E .L231E | |
al 00231F .MEMERR | |
al 0022E5 .CHKMEM | |
al 0022D2 .L22D2 | |
al 0022D6 .L22D6 | |
al 0022C6 .L22C6 | |
al 0022DD .L22DD | |
al 0022A9 .BLTU2 | |
al 0022F2 .REASON | |
al 0022A2 .BLTU | |
al 00229A .L229A | |
al 00228E .L228E | |
al 0022A1 .L22A1 | |
al 002279 .L2279 | |
al 002274 .GTFORPNT | |
al 00226C .QT_BREAK | |
al 002265 .QT_OK | |
al 002260 .QT_IN | |
al 002259 .QT_ERROR | |
al 0000E0 .ERR_UNDEFFN | |
al 0000D2 .ERR_CANTCONT | |
al 0000BF .ERR_FRMCPX | |
al 0000B0 .ERR_STRLONG | |
al 0000A3 .ERR_BADTYPE | |
al 000095 .ERR_ILLDIR | |
al 000085 .ERR_ZERODIV | |
al 000078 .ERR_REDIMD | |
al 00006B .ERR_BADSUBS | |
al 00005A .ERR_UNDEFSTAT | |
al 00004D .ERR_MEMFULL | |
al 000045 .ERR_OVERFLOW | |
al 000035 .ERR_ILLQTY | |
al 00002A .ERR_NODATA | |
al 000016 .ERR_NOGOSUB | |
al 000010 .ERR_SYNTAX | |
al 000000 .ERR_NOFOR | |
al 002169 .ERROR_MESSAGES | |
al 002E34 .RELOPS | |
al 002D65 .EQUOP | |
al 003E05 .NEGOP | |
al 002E04 .OR | |
al 002E07 .TAND | |
al 003DCC .FPWRT | |
al 00398A .FDIVT | |
al 003871 .FMULTT | |
al 00363F .FSUBT | |
al 003656 .FADDT | |
al 002068 .MATHTBL | |
al 00352E .MIDSTR | |
al 003523 .RIGHTSTR | |
al 0000C2 .TOKEN_LEFTSTR | |
al 0034F7 .LEFTSTR | |
al 0034E3 .CHRSTR | |
al 003582 .ASC | |
al 0035A4 .VAL | |
al 003266 .STR | |
al 003573 .LEN | |
al 003605 .PEEK | |
al 003FD3 .ATN | |
al 002054 .UNFNC_ATN | |
al 003F6F .TAN | |
al 002052 .UNFNC_TAN | |
al 003F26 .SIN | |
al 002050 .UNFNC_SIN | |
al 003F1F .COS | |
al 00204E .UNFNC_COS | |
al 003E3E .EXP | |
al 003830 .LOG | |
al 003EE3 .RND | |
al 003DC2 .SQR | |
al 0031A2 .POS | |
al 003181 .FRE | |
al 00304B .IQERR | |
al 003AD0 .ABS | |
al 003B44 .INT | |
al 0000AE .TOKEN_SGN | |
al 003AB1 .SGN | |
al 00203A .UNFNC | |
al 0000AC .TOKEN_EQUAL | |
al 0000AB .TOKEN_GREATER | |
al 0000A5 .TOKEN_MINUS | |
al 0000A4 .TOKEN_PLUS | |
al 0000A3 .TOKEN_STEP | |
al 0000A2 .TOKEN_NOT | |
al 0000A1 .TOKEN_THEN | |
al 0000A0 .TOKEN_SPC | |
al 00009F .TOKEN_FN | |
al 00009E .TOKEN_TO | |
al 00009D .TOKEN_TAB | |
al 00001D .NUM_TOKENS | |
al 002521 .NEW | |
al 002A7E .GET | |
al 00253C .CLEAR | |
al 002579 .LIST | |
al 002711 .CONT | |
al 000097 .TOKEN_PRINT | |
al 002981 .PRINT | |
al 003610 .POKE | |
al 0031B2 .DEF | |
al 00273C .SAVE | |
al 00278C .LOAD | |
al 003619 .WAIT | |
al 00272B .NULL | |
al 002898 .ON | |
al 0026E8 .STOP | |
al 00008E .TOKEN_REM | |
al 002888 .REM | |
al 00281F .POP | |
al 00008C .TOKEN_GOSUB | |
al 0027D5 .GOSUB | |
al 0026CB .RESTORE | |
al 002875 .IF | |
al 0027CA .RUN | |
al 000088 .TOKEN_GOTO | |
al 0027F2 .GOTO | |
al 0028F2 .LET | |
al 002AB9 .READ | |
al 002E9F .DIM | |
al 002A8D .INPUT | |
al 002845 .DATA | |
al 002BC6 .NEXT | |
al 002608 .FOR | |
al 0026EA .END | |
al 000000 .DUMMY_START | |
al 002086 .TOKEN_NAME_TABLE | |
al 002000 .TOKEN_ADDRESS_TABLE | |
al 004059 .GENERIC_RNDSEED | |
al 00404E .GENERIC_CHRGOT2 | |
al 004047 .GENERIC_CHRGOT | |
al 004041 .GENERIC_CHRGET | |
al 0000C0 .CHRGET | |
al 0000BE .STRNG2 | |
al 0000BC .STRNG1 | |
al 0000BB .ARGSIGN | |
al 0000B6 .ARG | |
al 0000B5 .SHIFTSIGNEXT | |
al 0000B4 .SERLEN | |
al 0000B3 .FACSIGN | |
al 0000AE .FAC | |
al 0000AD .EXPSGN | |
al 0000AC .LOWTRX | |
al 0000AC .LOWTR | |
al 0000AB .EXPON | |
al 0000AA .TMPEXP | |
al 0000AA .INDX | |
al 0000A9 .TEMP2 | |
al 0000A7 .HIGHTR | |
al 0000A5 .HIGHDS | |
al 0000A4 .TEMP1 | |
al 0000A3 .ARGEXTENSION | |
al 0000A2 .Z52 | |
al 0000A1 .JMPADRS | |
al 0000A0 .DSCLEN | |
al 00009D .DSCPTR | |
al 00009B .TEMP3 | |
al 00009B .FNCNAM | |
al 00009A .CPRTYP | |
al 000098 .LASTOP | |
al 000096 .FORPNT | |
al 000094 .VARPNT | |
al 000092 .VARNAM | |
al 000090 .INPTR | |
al 00008E .DATPTR | |
al 00008C .Z8C | |
al 00008A .OLDTEXT | |
al 000088 .OLDLIN | |
al 000086 .CURLIN | |
al 000084 .MEMSIZ | |
al 000082 .FRESPC | |
al 000080 .FRETOP | |
al 00007E .STREND | |
al 00007C .ARYTAB | |
al 00007A .VARTAB | |
al 000078 .TXTTAB | |
al 000073 .RESULT | |
al 000071 .DEST | |
al 00006F .INDEX | |
al 000066 .TEMPST | |
al 000064 .LASTPT | |
al 000063 .TEMPPT | |
al 000014 .Z14 | |
al 000013 .CPRMASK | |
al 000012 .INPUTFLG | |
al 000011 .SUBFLG | |
al 000010 .DATAFLG | |
al 00000E .VALTYP | |
al 00000D .DIMFLG | |
al 00000C .EOLPNTR | |
al 00000B .ENDCHR | |
al 00000A .CHARAC | |
al 000019 .TXPSV | |
al 000019 .LINNUM | |
al 000018 .Z18 | |
al 000017 .Z17 | |
al 000016 .POSX | |
al 000015 .Z15 | |
al 000008 .GOGIVEAYF | |
al 000006 .GOAYINT | |
al 000003 .GOSTROUT | |
al 000000 .GORESTART | |
al 00000A .CRLF_2 | |
al 00000D .CRLF_1 | |
al 00001B .INPUTBUFFER | |
al 000100 .STACK | |
al 000009 .FOR_STACK2 | |
al 00000F .FOR_STACK1 | |
al 000012 .BYTES_PER_FRAME | |
al 000004 .MANTISSA_BYTES | |
al 000007 .BYTES_PER_VARIABLE | |
al 000005 .BYTES_PER_ELEMENT | |
al 000005 .BYTES_FP | |
al 000001 .CONFIG_10A | |
al 000001 .CONFIG_11 | |
al 001EA0 .MONCOUT | |
al 001E5A .MONRDKEY | |
al 001873 .L1873 | |
al 001800 .L1800 | |
al 000038 .WIDTH2 | |
al 000048 .WIDTH | |
al 0000F2 .NULL_MAX | |
al 000036 .SPACE_FOR_GOSUB | |
al 0000FC .STACK_TOP | |
al 000002 .CONFIG_SCRTCH_ORDER | |
al 000001 .CONFIG_SAFE_NAMENOTFOUND | |
al 000001 .CONFIG_ROR_WORKAROUND | |
al 000001 .CONFIG_RAM | |
al 000001 .CONFIG_PRINT_CR | |
al 000001 .CONFIG_NULL | |
al 000001 .CONFIG_MONCOUT_DESTROYS_Y | |
al 000001 .CONFIG_11A | |
al 000001 .KIM |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ca65 V2.13.9 - (C) Copyright 1998-2005 Ullrich von Bassewitz | |
Main file : msbasic.s | |
Current file: msbasic.s | |
000000r 1 ; Microsoft BASIC for 6502 | |
000000r 1 ; | |
000000r 1 ; (first revision of this distribution, 20 Oct 2008, Michael Steil www.pagetable.com) | |
000000r 1 ; | |
000000r 1 ; This is a single integrated assembly source tree that can generate seven different versions of | |
000000r 1 ; Microsoft BASIC for 6502. | |
000000r 1 ; | |
000000r 1 ; By running ./make.sh, this will generate all versions and compare them to the original files | |
000000r 1 ; byte by byte. The CC65 compiler suite is need to build this project. | |
000000r 1 ; | |
000000r 1 ; These are the first eight (known) versions of Microsoft BASIC for 6502: | |
000000r 1 ; | |
000000r 1 ; Name Release MS Version ROM 9digit INPUTBUFFER extensions .define | |
000000r 1 ;--------------------------------------------------------------------------------------------------- | |
000000r 1 ; Commodore BASIC 1 1977 Y Y ZP CBM | |
000000r 1 ; OSI BASIC 1977 1.0 REV 3.2 Y N ZP - CONFIG_10A | |
000000r 1 ; AppleSoft I 1977 1.1 N Y $0200 Apple CONFIG_11 | |
000000r 1 ; KIM BASIC 1977 1.1 N Y ZP - CONFIG_11A | |
000000r 1 ; AppleSoft II 1978 Y Y $0200 Apple CONFIG_2 | |
000000r 1 ; Commodore BASIC 2 1979 Y Y $0200 CBM CONFIG_2A | |
000000r 1 ; KBD BASIC 1982 Y N $0700 KBD CONFIG_2B | |
000000r 1 ; MicroTAN 1980 Y Y ZP - CONFIG_2C | |
000000r 1 ; | |
000000r 1 ; (Note that this assembly source cannot (yet) build AppleSoft II.) | |
000000r 1 ; | |
000000r 1 ; This lists the versions in the order in which they were forked from the Microsoft source base. | |
000000r 1 ; Commodore BASIC 1, as used on the original PET is the oldest known version of Microsoft BASIC | |
000000r 1 ; for 6502. It contains some additions to Microsoft's version, like Commodore-style file I/O. | |
000000r 1 ; | |
000000r 1 ; The CONFIG_n defines specify what Microsoft-version the OEM version is based on. If CONFIG_2B | |
000000r 1 ; is defined, for example, CONFIG_2A, CONFIG_2, CONFIG_11A, CONFIG_11 and CONFIG_10A will be | |
000000r 1 ; defined as well, and all bugfixes up to version 2B will be enabled. | |
000000r 1 ; | |
000000r 1 ; The following symbols can be defined in addition: | |
000000r 1 ; | |
000000r 1 ; CONFIG_CBM1_PATCHES jump out into CBM1's binary patches instead of doing the right thing inline | |
000000r 1 ; CONFIG_CBM_ALL add all Commodore-specific additions except file I/O | |
000000r 1 ; CONFIG_DATAFLG ? | |
000000r 1 ; CONFIG_EASTER_EGG include the CBM2 "WAIT 6502" easter egg | |
000000r 1 ; CONFIG_FILE support Commodore PRINT#, INPUT#, GET#, CMD | |
000000r 1 ; CONFIG_IO_MSB all I/O has bit #7 set | |
000000r 1 ; CONFIG_MONCOUT_DESTROYS_Y Y needs to be preserved when calling MONCOUT | |
000000r 1 ; CONFIG_NO_CR terminal doesn't need explicit CRs on line ends | |
000000r 1 ; CONFIG_NO_LINE_EDITING disable support for Microsoft-style "@", "_", BEL etc. | |
000000r 1 ; CONFIG_NO_POKE don't support PEEK, POKE and WAIT | |
000000r 1 ; CONFIG_NO_READ_Y_IS_ZERO_HACK don't do a very volatile trick that saves one byte | |
000000r 1 ; CONFIG_NULL support for the NULL statement | |
000000r 1 ; CONFIG_PEEK_SAVE_LINNUM preserve LINNUM on a PEEK | |
000000r 1 ; CONFIG_PRINTNULLS whether PRINTNULLS does anything | |
000000r 1 ; CONFIG_PRINT_CR print CR when line end reached | |
000000r 1 ; CONFIG_RAM optimizations for RAM version of BASIC, only use on 1.x | |
000000r 1 ; CONFIG_ROR_WORKAROUND use workaround for buggy 6502s from 1975/1976; not safe for CONFIG_SMALL! | |
000000r 1 ; CONFIG_SAFE_NAMENOTFOUND check both bytes of the caller's address in NAMENOTFOUND | |
000000r 1 ; CONFIG_SCRTCH_ORDER where in the init code to call SCRTCH | |
000000r 1 ; CONFIG_SMALL use 6 digit FP instead of 9 digit, use 2 character error messages, don't have GET | |
000000r 1 ; | |
000000r 1 ; Changing symbol definitions can alter an existing base configuration, but it not guaranteed to assemble | |
000000r 1 ; or work correctly. | |
000000r 1 ; | |
000000r 1 ; Credits: | |
000000r 1 ; * main work by Michael Steil | |
000000r 1 ; * function names and all uppercase comments taken from Bob Sander-Cederlof's excellent AppleSoft II disassembly: | |
000000r 1 ; http://www.txbobsc.com/scsc/scdocumentor/ | |
000000r 1 ; * Applesoft lite by Tom Greene http://cowgod.org/replica1/applesoft/ helped a lot, too. | |
000000r 1 ; * Thanks to Joe Zbicak for help with Intellision Keyboard BASIC | |
000000r 1 ; * This work is dedicated to the memory of my dear hacking pal Michael "acidity" Kollmann. | |
000000r 1 | |
000000r 1 .debuginfo + | |
000000r 1 | |
000000r 1 .setcpu "6502" | |
000000r 1 .macpack longbranch | |
000000r 1 | |
000000r 1 .include "defines.s" | |
000000r 2 .if .def(cbmbasic1) | |
000000r 2 CBM1 := 1 | |
000000r 2 .include "defines_cbm1.s" | |
000000r 2 .elseif .def(osi) | |
000000r 2 OSI := 1 | |
000000r 2 .include "defines_osi.s" | |
000000r 2 .elseif .def(applesoft) | |
000000r 2 APPLE := 1 | |
000000r 2 .include "defines_apple.s" | |
000000r 2 .elseif .def(kb9) | |
000000r 2 KIM := 1 | |
000000r 2 .include "defines_kim.s" | |
000000r 3 ; configuration | |
000000r 3 CONFIG_11A := 1 | |
000000r 3 | |
000000r 3 CONFIG_MONCOUT_DESTROYS_Y := 1 | |
000000r 3 CONFIG_NULL := 1 | |
000000r 3 CONFIG_PRINT_CR := 1 ; print CR when line end reached | |
000000r 3 CONFIG_RAM := 1 | |
000000r 3 CONFIG_ROR_WORKAROUND := 1 | |
000000r 3 CONFIG_SAFE_NAMENOTFOUND := 1 | |
000000r 3 CONFIG_SCRTCH_ORDER := 2 | |
000000r 3 | |
000000r 3 ; zero page | |
000000r 3 ZP_START1 = $00 | |
000000r 3 ZP_START2 = $15 | |
000000r 3 ZP_START3 = $0A | |
000000r 3 ZP_START4 = $63 | |
000000r 3 | |
000000r 3 ; constants | |
000000r 3 STACK_TOP := $FC | |
000000r 3 SPACE_FOR_GOSUB := $36 | |
000000r 3 NULL_MAX := $F2 ; probably different in original version; the image I have seems to be modified; see PDF | |
000000r 3 WIDTH := 72 | |
000000r 3 WIDTH2 := 56 | |
000000r 3 | |
000000r 3 ; magic memory locations | |
000000r 3 L1800 := $1800 | |
000000r 3 L1873 := $1873 | |
000000r 3 | |
000000r 3 ; monitor functions | |
000000r 3 MONRDKEY := $1E5A | |
000000r 3 MONCOUT := $1EA0 | |
000000r 3 | |
000000r 3 | |
000000r 2 .elseif .def(cbmbasic2) | |
000000r 2 CBM2 := 1 | |
000000r 2 .include "defines_cbm2.s" | |
000000r 2 .elseif .def(kbdbasic) | |
000000r 2 KBD := 1 | |
000000r 2 .include "defines_kbd.s" | |
000000r 2 .elseif .def(microtan) | |
000000r 2 MICROTAN := 1 | |
000000r 2 .include "defines_microtan.s" | |
000000r 2 .endif | |
000000r 2 | |
000000r 2 .ifdef CONFIG_2C | |
000000r 2 CONFIG_2B := 1 | |
000000r 2 .endif | |
000000r 2 .ifdef CONFIG_2B | |
000000r 2 CONFIG_2A := 1 | |
000000r 2 .endif | |
000000r 2 .ifdef CONFIG_2A | |
000000r 2 CONFIG_2 := 1 | |
000000r 2 .endif | |
000000r 2 .ifdef CONFIG_2 | |
000000r 2 CONFIG_11A := 1 | |
000000r 2 .endif | |
000000r 2 .ifdef CONFIG_11A | |
000000r 2 CONFIG_11 := 1 | |
000000r 2 .endif | |
000000r 2 .ifdef CONFIG_11 | |
000000r 2 CONFIG_10A := 1 | |
000000r 2 .endif | |
000000r 2 | |
000000r 2 .ifdef CONFIG_SMALL | |
000000r 2 BYTES_FP := 4 | |
000000r 2 .else | |
000000r 2 BYTES_FP := 5 | |
000000r 2 .endif | |
000000r 2 | |
000000r 2 .ifndef BYTES_PER_ELEMENT | |
000000r 2 BYTES_PER_ELEMENT := BYTES_FP | |
000000r 2 .endif | |
000000r 2 BYTES_PER_VARIABLE := BYTES_FP+2 | |
000000r 2 MANTISSA_BYTES := BYTES_FP-1 | |
000000r 2 BYTES_PER_FRAME := 2*BYTES_FP+8 | |
000000r 2 FOR_STACK1 := 2*BYTES_FP+5 | |
000000r 2 FOR_STACK2 := BYTES_FP+4 | |
000000r 2 | |
000000r 2 .ifndef MAX_EXPON | |
000000r 2 MAX_EXPON = 10 | |
000000r 2 .endif | |
000000r 2 | |
000000r 2 STACK := $0100 | |
000000r 2 | |
000000r 2 .ifdef INPUTBUFFER | |
000000r 2 .if INPUTBUFFER >= $0100 | |
000000r 2 CONFIG_NO_INPUTBUFFER_ZP := 1 | |
000000r 2 .endif | |
000000r 2 .if INPUTBUFFER = $0200 | |
000000r 2 CONFIG_INPUTBUFFER_0200 := 1 | |
000000r 2 .endif | |
000000r 2 .endif | |
000000r 2 INPUTBUFFERX = INPUTBUFFER & $FF00 | |
000000r 2 | |
000000r 2 CR=13 | |
000000r 2 LF=10 | |
000000r 2 | |
000000r 2 .ifndef CRLF_1 | |
000000r 2 CRLF_1 := CR | |
000000r 2 CRLF_2 := LF | |
000000r 2 .endif | |
000000r 2 | |
000000r 2 | |
000000r 2 | |
000000r 2 | |
000000r 1 .include "macros.s" | |
000000r 2 ; htasc - set the hi bit on the last byte of a string for termination | |
000000r 2 ; (by Tom Greene) | |
000000r 2 .macro htasc str | |
000000r 2 .repeat .strlen(str)-1,I | |
000000r 2 .byte .strat(str,I) | |
000000r 2 .endrep | |
000000r 2 .byte .strat(str,.strlen(str)-1) | $80 | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 ; For every token, a byte gets put into segment "DUMMY". | |
000000r 2 ; This way, we count up with every token. The DUMMY segment | |
000000r 2 ; doesn't get linked into the binary. | |
000000r 2 .macro init_token_tables | |
000000r 2 .segment "VECTORS" | |
000000r 2 TOKEN_ADDRESS_TABLE: | |
000000r 2 .segment "KEYWORDS" | |
000000r 2 TOKEN_NAME_TABLE: | |
000000r 2 .segment "DUMMY" | |
000000r 2 DUMMY_START: | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 ; optionally define token symbol | |
000000r 2 ; count up token number | |
000000r 2 .macro define_token token | |
000000r 2 .segment "DUMMY" | |
000000r 2 .ifnblank token | |
000000r 2 token := <(*-DUMMY_START)+$80 | |
000000r 2 .endif | |
000000r 2 .res 1; count up in any case | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 ; lay down a keyword, optionally define a token symbol | |
000000r 2 .macro keyword key, token | |
000000r 2 .segment "KEYWORDS" | |
000000r 2 htasc key | |
000000r 2 define_token token | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 ; lay down a keyword and an address (RTS style), | |
000000r 2 ; optionally define a token symbol | |
000000r 2 .macro keyword_rts key, vec, token | |
000000r 2 .segment "VECTORS" | |
000000r 2 .word vec-1 | |
000000r 2 keyword key, token | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 ; lay down a keyword and an address, | |
000000r 2 ; optionally define a token symbol | |
000000r 2 .macro keyword_addr key, vec, token | |
000000r 2 .segment "VECTORS" | |
000000r 2 .addr vec | |
000000r 2 keyword key, token | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 .macro count_tokens | |
000000r 2 .segment "DUMMY" | |
000000r 2 NUM_TOKENS := <(*-DUMMY_START) | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 .macro init_error_table | |
000000r 2 .segment "ERROR" | |
000000r 2 ERROR_MESSAGES: | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 .macro define_error error, msg | |
000000r 2 .segment "ERROR" | |
000000r 2 error := <(*-ERROR_MESSAGES) | |
000000r 2 htasc msg | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 ;--------------------------------------------- | |
000000r 2 ; set the MSB of every byte of a string | |
000000r 2 .macro asc80 str | |
000000r 2 .repeat .strlen(str),I | |
000000r 2 .byte .strat(str,I)+$80 | |
000000r 2 .endrep | |
000000r 2 .endmacro | |
000000r 2 | |
000000r 2 | |
000000r 1 .include "zeropage.s" | |
000000r 2 | |
000000r 2 .feature org_per_seg | |
000000r 2 .zeropage | |
000000r 2 | |
000000r 2 .org ZP_START1 | |
000000 2 | |
000000 2 GORESTART: | |
000000 2 xx xx xx .res 3 | |
000003 2 GOSTROUT: | |
000003 2 xx xx xx .res 3 | |
000006 2 GOAYINT: | |
000006 2 xx xx .res 2 | |
000008 2 GOGIVEAYF: | |
000008 2 xx xx .res 2 | |
00000A 2 | |
00000A 2 .org ZP_START2 | |
000015 2 Z15: | |
000015 2 xx .res 1 | |
000016 2 .ifndef POSX; allow override | |
000016 2 POSX: | |
000016 2 .endif | |
000016 2 xx .res 1 | |
000017 2 .ifndef Z17; allow override | |
000017 2 Z17: | |
000017 2 .endif | |
000017 2 xx .res 1 | |
000018 2 .ifndef Z18; allow override | |
000018 2 Z18: | |
000018 2 .endif | |
000018 2 xx .res 1 | |
000019 2 LINNUM: | |
000019 2 .ifndef TXPSV; allow override | |
000019 2 TXPSV: | |
000019 2 .endif | |
000019 2 xx xx .res 2 | |
00001B 2 .ifndef INPUTBUFFER; allow override | |
00001B 2 INPUTBUFFER: | |
00001B 2 .endif | |
00001B 2 | |
00001B 2 .org ZP_START3 | |
00000A 2 | |
00000A 2 CHARAC: | |
00000A 2 xx .res 1 | |
00000B 2 ENDCHR: | |
00000B 2 xx .res 1 | |
00000C 2 EOLPNTR: | |
00000C 2 xx .res 1 | |
00000D 2 DIMFLG: | |
00000D 2 xx .res 1 | |
00000E 2 VALTYP: | |
00000E 2 .ifdef CONFIG_SMALL | |
00000E 2 .res 1 | |
00000E 2 .else | |
00000E 2 xx xx .res 2 | |
000010 2 .endif | |
000010 2 DATAFLG: | |
000010 2 xx .res 1 | |
000011 2 SUBFLG: | |
000011 2 xx .res 1 | |
000012 2 INPUTFLG: | |
000012 2 xx .res 1 | |
000013 2 CPRMASK: | |
000013 2 xx .res 1 | |
000014 2 Z14: | |
000014 2 xx .res 1 | |
000015 2 | |
000015 2 .org ZP_START4 | |
000063 2 | |
000063 2 TEMPPT: | |
000063 2 xx .res 1 | |
000064 2 LASTPT: | |
000064 2 xx xx .res 2 | |
000066 2 TEMPST: | |
000066 2 xx xx xx xx .res 9 | |
00006A 2 xx xx xx xx | |
00006E 2 xx | |
00006F 2 INDEX: | |
00006F 2 xx xx .res 2 | |
000071 2 DEST: | |
000071 2 xx xx .res 2 | |
000073 2 RESULT: | |
000073 2 xx xx xx xx .res BYTES_FP | |
000077 2 xx | |
000078 2 RESULT_LAST = RESULT + BYTES_FP-1 | |
000078 2 TXTTAB: | |
000078 2 xx xx .res 2 | |
00007A 2 VARTAB: | |
00007A 2 xx xx .res 2 | |
00007C 2 ARYTAB: | |
00007C 2 xx xx .res 2 | |
00007E 2 STREND: | |
00007E 2 xx xx .res 2 | |
000080 2 FRETOP: | |
000080 2 xx xx .res 2 | |
000082 2 FRESPC: | |
000082 2 xx xx .res 2 | |
000084 2 MEMSIZ: | |
000084 2 xx xx .res 2 | |
000086 2 CURLIN: | |
000086 2 xx xx .res 2 | |
000088 2 OLDLIN: | |
000088 2 xx xx .res 2 | |
00008A 2 OLDTEXT: | |
00008A 2 xx xx .res 2 | |
00008C 2 Z8C: | |
00008C 2 xx xx .res 2 | |
00008E 2 DATPTR: | |
00008E 2 xx xx .res 2 | |
000090 2 INPTR: | |
000090 2 xx xx .res 2 | |
000092 2 VARNAM: | |
000092 2 xx xx .res 2 | |
000094 2 VARPNT: | |
000094 2 xx xx .res 2 | |
000096 2 FORPNT: | |
000096 2 xx xx .res 2 | |
000098 2 LASTOP: | |
000098 2 xx xx .res 2 | |
00009A 2 CPRTYP: | |
00009A 2 xx .res 1 | |
00009B 2 FNCNAM: | |
00009B 2 TEMP3: | |
00009B 2 xx xx .res 2 | |
00009D 2 DSCPTR: | |
00009D 2 .ifdef CONFIG_SMALL | |
00009D 2 .res 2 | |
00009D 2 .else | |
00009D 2 xx xx xx .res 3 | |
0000A0 2 .endif | |
0000A0 2 DSCLEN: | |
0000A0 2 xx xx .res 2 | |
0000A2 2 .ifndef JMPADRS ; allow override | |
0000A2 2 JMPADRS := DSCLEN + 1 | |
0000A2 2 .endif | |
0000A2 2 Z52: | |
0000A2 2 xx .res 1 | |
0000A3 2 ARGEXTENSION: | |
0000A3 2 .ifndef CONFIG_SMALL | |
0000A3 2 xx .res 1 | |
0000A4 2 .endif | |
0000A4 2 TEMP1: | |
0000A4 2 xx .res 1 | |
0000A5 2 HIGHDS: | |
0000A5 2 xx xx .res 2 | |
0000A7 2 HIGHTR: | |
0000A7 2 xx xx .res 2 | |
0000A9 2 .ifndef CONFIG_SMALL | |
0000A9 2 TEMP2: | |
0000A9 2 xx .res 1 | |
0000AA 2 .endif | |
0000AA 2 INDX: | |
0000AA 2 TMPEXP: | |
0000AA 2 .ifdef CONFIG_SMALL | |
0000AA 2 TEMP2: | |
0000AA 2 .endif | |
0000AA 2 xx .res 1 | |
0000AB 2 EXPON: | |
0000AB 2 xx .res 1 | |
0000AC 2 LOWTR: | |
0000AC 2 .ifndef LOWTRX ; allow override | |
0000AC 2 LOWTRX: | |
0000AC 2 .endif | |
0000AC 2 xx .res 1 | |
0000AD 2 EXPSGN: | |
0000AD 2 xx .res 1 | |
0000AE 2 FAC: | |
0000AE 2 xx xx xx xx .res BYTES_FP | |
0000B2 2 xx | |
0000B3 2 FAC_LAST = FAC + BYTES_FP-1 | |
0000B3 2 FACSIGN: | |
0000B3 2 xx .res 1 | |
0000B4 2 SERLEN: | |
0000B4 2 xx .res 1 | |
0000B5 2 SHIFTSIGNEXT: | |
0000B5 2 xx .res 1 | |
0000B6 2 ARG: | |
0000B6 2 xx xx xx xx .res BYTES_FP | |
0000BA 2 xx | |
0000BB 2 ARG_LAST = ARG + BYTES_FP-1 | |
0000BB 2 ARGSIGN: | |
0000BB 2 xx .res 1 | |
0000BC 2 STRNG1: | |
0000BC 2 xx xx .res 2 | |
0000BE 2 SGNCPR = STRNG1 | |
0000BE 2 FACEXTENSION = STRNG1+1 | |
0000BE 2 STRNG2: | |
0000BE 2 xx xx .res 2 | |
0000C0 2 CHRGET: | |
0000C0 2 TXTPTR = <(GENERIC_TXTPTR-GENERIC_CHRGET + CHRGET) | |
0000C0 2 CHRGOT = <(GENERIC_CHRGOT-GENERIC_CHRGET + CHRGET) | |
0000C0 2 CHRGOT2 = <(GENERIC_CHRGOT2-GENERIC_CHRGET + CHRGET) | |
0000C0 2 RNDSEED = <(GENERIC_RNDSEED-GENERIC_CHRGET + CHRGET) | |
0000C0 2 | |
0000C0 2 | |
0000C0 2 | |
0000C0 1 | |
0000C0 1 .include "header.s" | |
0000C0 2 .segment "HEADER" | |
000000r 2 .ifdef KBD | |
000000r 2 jmp LE68C | |
000000r 2 .byte $00,$13,$56 | |
000000r 2 .endif | |
000000r 2 | |
000000r 1 .include "token.s" | |
000000r 2 init_token_tables | |
000000r 2 | |
000000r 2 rr rr 45 4E keyword_rts "END", END | |
000004r 2 C4 xx | |
000001r 2 rr rr 46 4F keyword_rts "FOR", FOR | |
000005r 2 D2 xx | |
000002r 2 rr rr 4E 45 keyword_rts "NEXT", NEXT | |
000006r 2 58 D4 xx | |
000003r 2 rr rr 44 41 keyword_rts "DATA", DATA | |
000007r 2 54 C1 xx | |
000004r 2 .ifdef CONFIG_FILE | |
000004r 2 keyword_rts "INPUT#", INPUTH | |
000004r 2 .endif | |
000004r 2 rr rr 49 4E keyword_rts "INPUT", INPUT | |
000008r 2 50 55 D4 xx | |
000005r 2 rr rr 44 49 keyword_rts "DIM", DIM | |
000009r 2 CD xx | |
000006r 2 rr rr 52 45 keyword_rts "READ", READ | |
00000Ar 2 41 C4 xx | |
000007r 2 .ifdef APPLE | |
000007r 2 keyword_rts "PLT", PLT | |
000007r 2 .else | |
000007r 2 rr rr 4C 45 keyword_rts "LET", LET | |
00000Br 2 D4 xx | |
000008r 2 .endif | |
000008r 2 rr rr 47 4F keyword_rts "GOTO", GOTO, TOKEN_GOTO | |
00000Cr 2 54 CF xx | |
000009r 2 rr rr 52 55 keyword_rts "RUN", RUN | |
00000Dr 2 CE xx | |
00000Ar 2 rr rr 49 C6 keyword_rts "IF", IF | |
00000Er 2 xx | |
00000Br 2 rr rr 52 45 keyword_rts "RESTORE", RESTORE | |
00000Fr 2 53 54 4F 52 | |
000013r 2 C5 xx | |
00000Cr 2 rr rr 47 4F keyword_rts "GOSUB", GOSUB, TOKEN_GOSUB | |
000010r 2 53 55 C2 xx | |
00000Dr 2 rr rr 52 45 keyword_rts "RETURN", POP | |
000011r 2 54 55 52 CE | |
000015r 2 xx | |
00000Er 2 .ifdef APPLE | |
00000Er 2 keyword_rts "TEX", TEX, TOKEN_REM | |
00000Er 2 .else | |
00000Er 2 rr rr 52 45 keyword_rts "REM", REM, TOKEN_REM | |
000012r 2 CD xx | |
00000Fr 2 .endif | |
00000Fr 2 rr rr 53 54 keyword_rts "STOP", STOP | |
000013r 2 4F D0 xx | |
000010r 2 rr rr 4F CE keyword_rts "ON", ON | |
000014r 2 xx | |
000011r 2 .ifdef CONFIG_NULL | |
000011r 2 rr rr 4E 55 keyword_rts "NULL", NULL | |
000015r 2 4C CC xx | |
000012r 2 .endif | |
000012r 2 .ifdef KBD | |
000012r 2 keyword_rts "PLOD", PLOD | |
000012r 2 keyword_rts "PSAV", PSAV | |
000012r 2 keyword_rts "VLOD", VLOD | |
000012r 2 keyword_rts "VSAV", VSAV | |
000012r 2 .endif | |
000012r 2 .ifndef CONFIG_NO_POKE | |
000012r 2 rr rr 57 41 keyword_rts "WAIT", WAIT | |
000016r 2 49 D4 xx | |
000013r 2 .endif | |
000013r 2 .ifndef KBD | |
000013r 2 rr rr 4C 4F keyword_rts "LOAD", LOAD | |
000017r 2 41 C4 xx | |
000014r 2 rr rr 53 41 keyword_rts "SAVE", SAVE | |
000018r 2 56 C5 xx | |
000015r 2 .endif | |
000015r 2 .ifdef CONFIG_CBM_ALL | |
000015r 2 keyword_rts "VERIFY", VERIFY | |
000015r 2 .endif | |
000015r 2 rr rr 44 45 keyword_rts "DEF", DEF | |
000019r 2 C6 xx | |
000016r 2 .ifdef KBD | |
000016r 2 keyword_rts "SLOD", SLOD | |
000016r 2 .endif | |
000016r 2 .ifndef CONFIG_NO_POKE | |
000016r 2 rr rr 50 4F keyword_rts "POKE", POKE | |
00001Ar 2 4B C5 xx | |
000017r 2 .endif | |
000017r 2 .ifdef CONFIG_FILE | |
000017r 2 keyword_rts "PRINT#", PRINTH | |
000017r 2 .endif | |
000017r 2 rr rr 50 52 keyword_rts "PRINT", PRINT, TOKEN_PRINT | |
00001Br 2 49 4E D4 xx | |
000018r 2 rr rr 43 4F keyword_rts "CONT", CONT | |
00001Cr 2 4E D4 xx | |
000019r 2 rr rr 4C 49 keyword_rts "LIST", LIST | |
00001Dr 2 53 D4 xx | |
00001Ar 2 .ifdef CONFIG_CBM_ALL | |
00001Ar 2 keyword_rts "CLR", CLEAR | |
00001Ar 2 .else | |
00001Ar 2 rr rr 43 4C keyword_rts "CLEAR", CLEAR | |
00001Er 2 45 41 D2 xx | |
00001Br 2 .endif | |
00001Br 2 .ifdef CONFIG_FILE | |
00001Br 2 keyword_rts "CMD", CMD | |
00001Br 2 keyword_rts "SYS", SYS | |
00001Br 2 keyword_rts "OPEN", OPEN | |
00001Br 2 keyword_rts "CLOSE", CLOSE | |
00001Br 2 .endif | |
00001Br 2 .ifndef CONFIG_SMALL | |
00001Br 2 rr rr 47 45 keyword_rts "GET", GET | |
00001Fr 2 D4 xx | |
00001Cr 2 .endif | |
00001Cr 2 .ifdef KBD | |
00001Cr 2 keyword_rts "PRT", PRT | |
00001Cr 2 .endif | |
00001Cr 2 rr rr 4E 45 keyword_rts "NEW", NEW | |
000020r 2 D7 xx | |
00001Dr 2 | |
00001Dr 2 count_tokens | |
00001Dr 2 | |
00001Dr 2 54 41 42 A8 keyword "TAB(", TOKEN_TAB | |
000021r 2 xx | |
00001Er 2 54 CF xx keyword "TO", TOKEN_TO | |
00001Fr 2 46 CE xx keyword "FN", TOKEN_FN | |
000020r 2 53 50 43 A8 keyword "SPC(", TOKEN_SPC | |
000024r 2 xx | |
000021r 2 54 48 45 CE keyword "THEN", TOKEN_THEN | |
000025r 2 xx | |
000022r 2 4E 4F D4 xx keyword "NOT", TOKEN_NOT | |
000023r 2 53 54 45 D0 keyword "STEP", TOKEN_STEP | |
000027r 2 xx | |
000024r 2 AB xx keyword "+", TOKEN_PLUS | |
000025r 2 AD xx keyword "-", TOKEN_MINUS | |
000026r 2 AA xx keyword "*" | |
000027r 2 AF xx keyword "/" | |
000028r 2 .ifdef KBD | |
000028r 2 keyword "#" | |
000028r 2 .else | |
000028r 2 DE xx keyword "^" | |
000029r 2 .endif | |
000029r 2 41 4E C4 xx keyword "AND" | |
00002Ar 2 4F D2 xx keyword "OR" | |
00002Br 2 BE xx keyword ">", TOKEN_GREATER | |
00002Cr 2 BD xx keyword "=", TOKEN_EQUAL | |
00002Dr 2 BC xx keyword "<" | |
00002Er 2 | |
00002Er 2 .segment "VECTORS" | |
00003Ar 2 UNFNC: | |
00003Ar 2 | |
00003Ar 2 rr rr 53 47 keyword_addr "SGN", SGN, TOKEN_SGN | |
00003Er 2 CE xx | |
00002Fr 2 rr rr 49 4E keyword_addr "INT", INT | |
000033r 2 D4 xx | |
000030r 2 rr rr 41 42 keyword_addr "ABS", ABS | |
000034r 2 D3 xx | |
000031r 2 .ifdef KBD | |
000031r 2 keyword_addr "VER", VER | |
000031r 2 .endif | |
000031r 2 .ifndef CONFIG_NO_POKE | |
000031r 2 .ifdef CONFIG_RAM | |
000031r 2 rr rr 55 53 keyword_addr "USR", IQERR | |
000035r 2 D2 xx | |
000032r 2 .else | |
000032r 2 keyword_addr "USR", USR | |
000032r 2 .endif | |
000032r 2 .endif | |
000032r 2 rr rr 46 52 keyword_addr "FRE", FRE | |
000036r 2 C5 xx | |
000033r 2 rr rr 50 4F keyword_addr "POS", POS | |
000037r 2 D3 xx | |
000034r 2 rr rr 53 51 keyword_addr "SQR", SQR | |
000038r 2 D2 xx | |
000035r 2 rr rr 52 4E keyword_addr "RND", RND | |
000039r 2 C4 xx | |
000036r 2 rr rr 4C 4F keyword_addr "LOG", LOG | |
00003Ar 2 C7 xx | |
000037r 2 rr rr 45 58 keyword_addr "EXP", EXP | |
00003Br 2 D0 xx | |
000038r 2 .segment "VECTORS" | |
00004Er 2 UNFNC_COS: | |
00004Er 2 rr rr 43 4F keyword_addr "COS", COS | |
000052r 2 D3 xx | |
000039r 2 .segment "VECTORS" | |
000050r 2 UNFNC_SIN: | |
000050r 2 rr rr 53 49 keyword_addr "SIN", SIN | |
000054r 2 CE xx | |
00003Ar 2 .segment "VECTORS" | |
000052r 2 UNFNC_TAN: | |
000052r 2 rr rr 54 41 keyword_addr "TAN", TAN | |
000056r 2 CE xx | |
00003Br 2 .segment "VECTORS" | |
000054r 2 UNFNC_ATN: | |
000054r 2 rr rr 41 54 keyword_addr "ATN", ATN | |
000058r 2 CE xx | |
00003Cr 2 .ifdef KBD | |
00003Cr 2 keyword_addr "GETC", GETC | |
00003Cr 2 .endif | |
00003Cr 2 .ifndef CONFIG_NO_POKE | |
00003Cr 2 rr rr 50 45 keyword_addr "PEEK", PEEK | |
000040r 2 45 CB xx | |
00003Dr 2 .endif | |
00003Dr 2 rr rr 4C 45 keyword_addr "LEN", LEN | |
000041r 2 CE xx | |
00003Er 2 rr rr 53 54 keyword_addr "STR$", STR | |
000042r 2 52 A4 xx | |
00003Fr 2 rr rr 56 41 keyword_addr "VAL", VAL | |
000043r 2 CC xx | |
000040r 2 rr rr 41 53 keyword_addr "ASC", ASC | |
000044r 2 C3 xx | |
000041r 2 rr rr 43 48 keyword_addr "CHR$", CHRSTR | |
000045r 2 52 A4 xx | |
000042r 2 rr rr 4C 45 keyword_addr "LEFT$", LEFTSTR, TOKEN_LEFTSTR | |
000046r 2 46 54 A4 xx | |
000043r 2 rr rr 52 49 keyword_addr "RIGHT$", RIGHTSTR | |
000047r 2 47 48 54 A4 | |
00004Br 2 xx | |
000044r 2 rr rr 4D 49 keyword_addr "MID$", MIDSTR | |
000048r 2 44 A4 xx | |
000045r 2 .ifdef CONFIG_2 | |
000045r 2 keyword "GO", TOKEN_GO | |
000045r 2 .endif | |
000045r 2 .segment "KEYWORDS" | |
0000E2r 2 00 .byte 0 | |
0000E3r 2 | |
0000E3r 2 .segment "VECTORS" | |
000068r 2 MATHTBL: | |
000068r 2 79 .byte $79 | |
000069r 2 rr rr .word FADDT-1 | |
00006Br 2 79 .byte $79 | |
00006Cr 2 rr rr .word FSUBT-1 | |
00006Er 2 7B .byte $7B | |
00006Fr 2 rr rr .word FMULTT-1 | |
000071r 2 7B .byte $7B | |
000072r 2 rr rr .word FDIVT-1 | |
000074r 2 7F .byte $7F | |
000075r 2 rr rr .word FPWRT-1 | |
000077r 2 50 .byte $50 | |
000078r 2 rr rr .word TAND-1 | |
00007Ar 2 46 .byte $46 | |
00007Br 2 rr rr .word OR-1 | |
00007Dr 2 7D .byte $7D | |
00007Er 2 rr rr .word NEGOP-1 | |
000080r 2 5A .byte $5A | |
000081r 2 rr rr .word EQUOP-1 | |
000083r 2 64 .byte $64 | |
000084r 2 rr rr .word RELOPS-1 | |
000086r 2 | |
000086r 1 .include "error.s" | |
000086r 2 init_error_table | |
000000r 2 | |
000000r 2 .ifdef CONFIG_SMALL | |
000000r 2 define_error ERR_NOFOR, "NF" | |
000000r 2 define_error ERR_SYNTAX, "SN" | |
000000r 2 define_error ERR_NOGOSUB, "RG" | |
000000r 2 define_error ERR_NODATA, "OD" | |
000000r 2 define_error ERR_ILLQTY, "FC" | |
000000r 2 define_error ERR_OVERFLOW, "OV" | |
000000r 2 define_error ERR_MEMFULL, "OM" | |
000000r 2 define_error ERR_UNDEFSTAT, "US" | |
000000r 2 define_error ERR_BADSUBS, "BS" | |
000000r 2 define_error ERR_REDIMD, "DD" | |
000000r 2 define_error ERR_ZERODIV, "/0" | |
000000r 2 define_error ERR_ILLDIR, "ID" | |
000000r 2 define_error ERR_BADTYPE, "TM" | |
000000r 2 define_error ERR_STRLONG, "LS" | |
000000r 2 define_error ERR_FRMCPX, "ST" | |
000000r 2 define_error ERR_CANTCONT, "CN" | |
000000r 2 define_error ERR_UNDEFFN, "UF" | |
000000r 2 .else | |
000000r 2 4E 45 58 54 define_error ERR_NOFOR, "NEXT WITHOUT FOR" | |
000004r 2 20 57 49 54 | |
000008r 2 48 4F 55 54 | |
000010r 2 53 59 4E 54 define_error ERR_SYNTAX, "SYNTAX" | |
000014r 2 41 D8 | |
000016r 2 52 45 54 55 define_error ERR_NOGOSUB, "RETURN WITHOUT GOSUB" | |
00001Ar 2 52 4E 20 57 | |
00001Er 2 49 54 48 4F | |
00002Ar 2 4F 55 54 20 define_error ERR_NODATA, "OUT OF DATA" | |
00002Er 2 4F 46 20 44 | |
000032r 2 41 54 C1 | |
000035r 2 49 4C 4C 45 define_error ERR_ILLQTY, "ILLEGAL QUANTITY" | |
000039r 2 47 41 4C 20 | |
00003Dr 2 51 55 41 4E | |
000045r 2 .ifdef CBM1 | |
000045r 2 .byte 0,0,0,0,0 | |
000045r 2 .endif | |
000045r 2 4F 56 45 52 define_error ERR_OVERFLOW, "OVERFLOW" | |
000049r 2 46 4C 4F D7 | |
00004Dr 2 4F 55 54 20 define_error ERR_MEMFULL, "OUT OF MEMORY" | |
000051r 2 4F 46 20 4D | |
000055r 2 45 4D 4F 52 | |
00005Ar 2 55 4E 44 45 define_error ERR_UNDEFSTAT, "UNDEF'D STATEMENT" | |
00005Er 2 46 27 44 20 | |
000062r 2 53 54 41 54 | |
00006Br 2 42 41 44 20 define_error ERR_BADSUBS, "BAD SUBSCRIPT" | |
00006Fr 2 53 55 42 53 | |
000073r 2 43 52 49 50 | |
000078r 2 52 45 44 49 define_error ERR_REDIMD, "REDIM'D ARRAY" | |
00007Cr 2 4D 27 44 20 | |
000080r 2 41 52 52 41 | |
000085r 2 44 49 56 49 define_error ERR_ZERODIV, "DIVISION BY ZERO" | |
000089r 2 53 49 4F 4E | |
00008Dr 2 20 42 59 20 | |
000095r 2 49 4C 4C 45 define_error ERR_ILLDIR, "ILLEGAL DIRECT" | |
000099r 2 47 41 4C 20 | |
00009Dr 2 44 49 52 45 | |
0000A3r 2 54 59 50 45 define_error ERR_BADTYPE, "TYPE MISMATCH" | |
0000A7r 2 20 4D 49 53 | |
0000ABr 2 4D 41 54 43 | |
0000B0r 2 53 54 52 49 define_error ERR_STRLONG, "STRING TOO LONG" | |
0000B4r 2 4E 47 20 54 | |
0000B8r 2 4F 4F 20 4C | |
0000BFr 2 .ifdef CONFIG_FILE | |
0000BFr 2 .ifdef CBM1 | |
0000BFr 2 define_error ERR_BADDATA, "BAD DATA" | |
0000BFr 2 .else | |
0000BFr 2 define_error ERR_BADDATA, "FILE DATA" | |
0000BFr 2 .endif | |
0000BFr 2 .endif | |
0000BFr 2 46 4F 52 4D define_error ERR_FRMCPX, "FORMULA TOO COMPLEX" | |
0000C3r 2 55 4C 41 20 | |
0000C7r 2 54 4F 4F 20 | |
0000D2r 2 43 41 4E 27 define_error ERR_CANTCONT, "CAN'T CONTINUE" | |
0000D6r 2 54 20 43 4F | |
0000DAr 2 4E 54 49 4E | |
0000E0r 2 55 4E 44 45 define_error ERR_UNDEFFN, "UNDEF'D FUNCTION" | |
0000E4r 2 46 27 44 20 | |
0000E8r 2 46 55 4E 43 | |
0000F0r 2 .endif | |
0000F0r 2 | |
0000F0r 1 .include "message.s" | |
0000F0r 2 ; global messages: "error", "in", "ready", "break" | |
0000F0r 2 | |
0000F0r 2 .segment "CODE" | |
000000r 2 | |
000000r 2 QT_ERROR: | |
000000r 2 .ifdef KBD | |
000000r 2 .byte " err" | |
000000r 2 .else | |
000000r 2 .ifdef APPLE | |
000000r 2 .byte " ERR" | |
000000r 2 .byte $07,$07 | |
000000r 2 .else | |
000000r 2 20 45 52 52 .byte " ERROR" | |
000004r 2 4F 52 | |
000006r 2 .endif | |
000006r 2 .endif | |
000006r 2 00 .byte 0 | |
000007r 2 | |
000007r 2 .ifndef KBD | |
000007r 2 QT_IN: | |
000007r 2 20 49 4E 20 .byte " IN " | |
00000Br 2 00 .byte $00 | |
00000Cr 2 .endif | |
00000Cr 2 | |
00000Cr 2 .ifdef KBD | |
00000Cr 2 .byte $54,$D2 ; ??? | |
00000Cr 2 OKPRT: | |
00000Cr 2 jsr PRIMM | |
00000Cr 2 .byte CR,CR,">>",CR,LF | |
00000Cr 2 .byte 0 | |
00000Cr 2 rts | |
00000Cr 2 nop | |
00000Cr 2 .else | |
00000Cr 2 QT_OK: | |
00000Cr 2 .ifdef CONFIG_CBM_ALL | |
00000Cr 2 .byte CR,LF,"READY.",CR,LF | |
00000Cr 2 .else | |
00000Cr 2 .ifdef APPLE | |
00000Cr 2 ; binary patch! | |
00000Cr 2 .byte CR,0,0,"K",CR,LF | |
00000Cr 2 .else | |
00000Cr 2 0D 0A 4F 4B .byte CR,LF,"OK",CR,LF | |
000010r 2 0D 0A | |
000012r 2 .endif | |
000012r 2 .endif | |
000012r 2 00 .byte 0 | |
000013r 2 .endif | |
000013r 2 | |
000013r 2 QT_BREAK: | |
000013r 2 | |
000013r 2 .ifdef KBD | |
000013r 2 .byte CR,LF," Brk" | |
000013r 2 .byte 0 | |
000013r 2 .byte $54,$D0 ; ??? | |
000013r 2 .elseif .def(MICROTAN) | |
000013r 2 .byte CR,LF," BREAK" | |
000013r 2 .byte 0 | |
000013r 2 .else | |
000013r 2 0D 0A 42 52 .byte CR,LF,"BREAK" | |
000017r 2 45 41 4B | |
00001Ar 2 00 .byte 0 | |
00001Br 2 .endif | |
00001Br 2 | |
00001Br 1 .include "memory.s" | |
00001Br 2 ; generic stack and memory management code | |
00001Br 2 ; this code is identical across all versions of | |
00001Br 2 ; BASIC | |
00001Br 2 | |
00001Br 2 .segment "CODE" | |
00001Br 2 | |
00001Br 2 ; ---------------------------------------------------------------------------- | |
00001Br 2 ; CALLED BY "NEXT" AND "FOR" TO SCAN THROUGH | |
00001Br 2 ; THE STACK FOR A FRAME WITH THE SAME VARIABLE. | |
00001Br 2 ; | |
00001Br 2 ; (FORPNT) = ADDRESS OF VARIABLE IF "FOR" OR "NEXT" | |
00001Br 2 ; = $XXFF IF CALLED FROM "RETURN" | |
00001Br 2 ; <<< BUG: SHOULD BE $FFXX >>> | |
00001Br 2 ; | |
00001Br 2 ; RETURNS .NE. IF VARIABLE NOT FOUND, | |
00001Br 2 ; (X) = STACK PNTR AFTER SKIPPING ALL FRAMES | |
00001Br 2 ; | |
00001Br 2 ; .EQ. IF FOUND | |
00001Br 2 ; (X) = STACK PNTR OF FRAME FOUND | |
00001Br 2 ; ---------------------------------------------------------------------------- | |
00001Br 2 GTFORPNT: | |
00001Br 2 BA tsx | |
00001Cr 2 E8 inx | |
00001Dr 2 E8 inx | |
00001Er 2 E8 inx | |
00001Fr 2 E8 inx | |
000020r 2 L2279: | |
000020r 2 BD 01 01 lda STACK+1,x | |
000023r 2 C9 81 cmp #$81 | |
000025r 2 D0 21 bne L22A1 | |
000027r 2 A5 97 lda FORPNT+1 | |
000029r 2 D0 0A bne L228E | |
00002Br 2 BD 02 01 lda STACK+2,x | |
00002Er 2 85 96 sta FORPNT | |
000030r 2 BD 03 01 lda STACK+3,x | |
000033r 2 85 97 sta FORPNT+1 | |
000035r 2 L228E: | |
000035r 2 DD 03 01 cmp STACK+3,x | |
000038r 2 D0 07 bne L229A | |
00003Ar 2 A5 96 lda FORPNT | |
00003Cr 2 DD 02 01 cmp STACK+2,x | |
00003Fr 2 F0 07 beq L22A1 | |
000041r 2 L229A: | |
000041r 2 8A txa | |
000042r 2 18 clc | |
000043r 2 69 12 adc #BYTES_PER_FRAME | |
000045r 2 AA tax | |
000046r 2 D0 D8 bne L2279 | |
000048r 2 L22A1: | |
000048r 2 60 rts | |
000049r 2 | |
000049r 2 ; ---------------------------------------------------------------------------- | |
000049r 2 ; MOVE BLOCK OF MEMORY UP | |
000049r 2 ; | |
000049r 2 ; ON ENTRY: | |
000049r 2 ; (Y,A) = (HIGHDS) = DESTINATION END+1 | |
000049r 2 ; (LOWTR) = LOWEST ADDRESS OF SOURCE | |
000049r 2 ; (HIGHTR) = HIGHEST SOURCE ADDRESS+1 | |
000049r 2 ; ---------------------------------------------------------------------------- | |
000049r 2 BLTU: | |
000049r 2 20 rr rr jsr REASON | |
00004Cr 2 85 7E sta STREND | |
00004Er 2 84 7F sty STREND+1 | |
000050r 2 BLTU2: | |
000050r 2 38 sec | |
000051r 2 A5 A7 lda HIGHTR | |
000053r 2 E5 AC sbc LOWTR | |
000055r 2 85 6F sta INDEX | |
000057r 2 A8 tay | |
000058r 2 A5 A8 lda HIGHTR+1 | |
00005Ar 2 E5 AD sbc LOWTR+1 | |
00005Cr 2 AA tax | |
00005Dr 2 E8 inx | |
00005Er 2 98 tya | |
00005Fr 2 F0 23 beq L22DD | |
000061r 2 A5 A7 lda HIGHTR | |
000063r 2 38 sec | |
000064r 2 E5 6F sbc INDEX | |
000066r 2 85 A7 sta HIGHTR | |
000068r 2 B0 03 bcs L22C6 | |
00006Ar 2 C6 A8 dec HIGHTR+1 | |
00006Cr 2 38 sec | |
00006Dr 2 L22C6: | |
00006Dr 2 A5 A5 lda HIGHDS | |
00006Fr 2 E5 6F sbc INDEX | |
000071r 2 85 A5 sta HIGHDS | |
000073r 2 B0 08 bcs L22D6 | |
000075r 2 C6 A6 dec HIGHDS+1 | |
000077r 2 90 04 bcc L22D6 | |
000079r 2 L22D2: | |
000079r 2 B1 A7 lda (HIGHTR),y | |
00007Br 2 91 A5 sta (HIGHDS),y | |
00007Dr 2 L22D6: | |
00007Dr 2 88 dey | |
00007Er 2 D0 F9 bne L22D2 | |
000080r 2 B1 A7 lda (HIGHTR),y | |
000082r 2 91 A5 sta (HIGHDS),y | |
000084r 2 L22DD: | |
000084r 2 C6 A8 dec HIGHTR+1 | |
000086r 2 C6 A6 dec HIGHDS+1 | |
000088r 2 CA dex | |
000089r 2 D0 F2 bne L22D6 | |
00008Br 2 60 rts | |
00008Cr 2 | |
00008Cr 2 ; ---------------------------------------------------------------------------- | |
00008Cr 2 ; CHECK IF ENOUGH ROOM LEFT ON STACK | |
00008Cr 2 ; FOR "FOR", "GOSUB", OR EXPRESSION EVALUATION | |
00008Cr 2 ; ---------------------------------------------------------------------------- | |
00008Cr 2 CHKMEM: | |
00008Cr 2 0A asl a | |
00008Dr 2 69 36 adc #SPACE_FOR_GOSUB | |
00008Fr 2 B0 35 bcs MEMERR | |
000091r 2 85 6F sta INDEX | |
000093r 2 BA tsx | |
000094r 2 E4 6F cpx INDEX | |
000096r 2 90 2E bcc MEMERR | |
000098r 2 60 rts | |
000099r 2 | |
000099r 2 ; ---------------------------------------------------------------------------- | |
000099r 2 ; CHECK IF ENOUGH ROOM BETWEEN ARRAYS AND STRINGS | |
000099r 2 ; (Y,A) = ADDR ARRAYS NEED TO GROW TO | |
000099r 2 ; ---------------------------------------------------------------------------- | |
000099r 2 REASON: | |
000099r 2 C4 81 cpy FRETOP+1 | |
00009Br 2 90 28 bcc L231E | |
00009Dr 2 D0 04 bne L22FC | |
00009Fr 2 C5 80 cmp FRETOP | |
0000A1r 2 90 22 bcc L231E | |
0000A3r 2 L22FC: | |
0000A3r 2 48 pha | |
0000A4r 2 A2 09 ldx #FAC-TEMP1-1 | |
0000A6r 2 98 tya | |
0000A7r 2 L2300: | |
0000A7r 2 48 pha | |
0000A8r 2 B5 A4 lda TEMP1,x | |
0000AAr 2 CA dex | |
0000ABr 2 10 FA bpl L2300 | |
0000ADr 2 20 rr rr jsr GARBAG | |
0000B0r 2 A2 F7 ldx #TEMP1-FAC+1 | |
0000B2r 2 L230B: | |
0000B2r 2 68 pla | |
0000B3r 2 95 AE sta FAC,x | |
0000B5r 2 E8 inx | |
0000B6r 2 30 FA bmi L230B | |
0000B8r 2 68 pla | |
0000B9r 2 A8 tay | |
0000BAr 2 68 pla | |
0000BBr 2 C4 81 cpy FRETOP+1 | |
0000BDr 2 90 06 bcc L231E | |
0000BFr 2 D0 05 bne MEMERR | |
0000C1r 2 C5 80 cmp FRETOP | |
0000C3r 2 B0 01 bcs MEMERR | |
0000C5r 2 L231E: | |
0000C5r 2 60 rts | |
0000C6r 2 | |
0000C6r 1 .include "program.s" | |
0000C6r 2 ; error | |
0000C6r 2 ; line input, line editing | |
0000C6r 2 ; tokenize | |
0000C6r 2 ; detokenize | |
0000C6r 2 ; BASIC program memory management | |
0000C6r 2 | |
0000C6r 2 ; MICROTAN has some nonstandard extension to LIST here | |
0000C6r 2 | |
0000C6r 2 .segment "CODE" | |
0000C6r 2 | |
0000C6r 2 MEMERR: | |
0000C6r 2 A2 4D ldx #ERR_MEMFULL | |
0000C8r 2 | |
0000C8r 2 ; ---------------------------------------------------------------------------- | |
0000C8r 2 ; HANDLE AN ERROR | |
0000C8r 2 ; | |
0000C8r 2 ; (X)=OFFSET IN ERROR MESSAGE TABLE | |
0000C8r 2 ; (ERRFLG) > 128 IF "ON ERR" TURNED ON | |
0000C8r 2 ; (CURLIN+1) = $FF IF IN DIRECT MODE | |
0000C8r 2 ; ---------------------------------------------------------------------------- | |
0000C8r 2 ERROR: | |
0000C8r 2 46 14 lsr Z14 | |
0000CAr 2 .ifdef CONFIG_FILE | |
0000CAr 2 lda CURDVC ; output | |
0000CAr 2 beq LC366 ; is screen | |
0000CAr 2 jsr CLRCH ; otherwise redirect output back to screen | |
0000CAr 2 lda #$00 | |
0000CAr 2 sta CURDVC | |
0000CAr 2 LC366: | |
0000CAr 2 .endif | |
0000CAr 2 20 rr rr jsr CRDO | |
0000CDr 2 20 rr rr jsr OUTQUES | |
0000D0r 2 L2329: | |
0000D0r 2 BD rr rr lda ERROR_MESSAGES,x | |
0000D3r 2 .ifndef CONFIG_SMALL | |
0000D3r 2 48 pha | |
0000D4r 2 29 7F and #$7F | |
0000D6r 2 .endif | |
0000D6r 2 20 rr rr jsr OUTDO | |
0000D9r 2 .ifdef CONFIG_SMALL | |
0000D9r 2 lda ERROR_MESSAGES+1,x | |
0000D9r 2 .ifdef KBD | |
0000D9r 2 and #$7F | |
0000D9r 2 .endif | |
0000D9r 2 jsr OUTDO | |
0000D9r 2 .else | |
0000D9r 2 E8 inx | |
0000DAr 2 68 pla | |
0000DBr 2 10 F3 bpl L2329 | |
0000DDr 2 .endif | |
0000DDr 2 20 rr rr jsr STKINI | |
0000E0r 2 A9 rr lda #<QT_ERROR | |
0000E2r 2 A0 rr ldy #>QT_ERROR | |
0000E4r 2 | |
0000E4r 2 ; ---------------------------------------------------------------------------- | |
0000E4r 2 ; PRINT STRING AT (Y,A) | |
0000E4r 2 ; PRINT CURRENT LINE # UNLESS IN DIRECT MODE | |
0000E4r 2 ; FALL INTO WARM RESTART | |
0000E4r 2 ; ---------------------------------------------------------------------------- | |
0000E4r 2 PRINT_ERROR_LINNUM: | |
0000E4r 2 20 rr rr jsr STROUT | |
0000E7r 2 A4 87 ldy CURLIN+1 | |
0000E9r 2 C8 iny | |
0000EAr 2 F0 03 beq RESTART | |
0000ECr 2 20 rr rr jsr INPRT | |
0000EFr 2 | |
0000EFr 2 ; ---------------------------------------------------------------------------- | |
0000EFr 2 ; WARM RESTART ENTRY | |
0000EFr 2 ; ---------------------------------------------------------------------------- | |
0000EFr 2 RESTART: | |
0000EFr 2 .ifdef KBD | |
0000EFr 2 jsr CRDO | |
0000EFr 2 nop | |
0000EFr 2 L2351X: | |
0000EFr 2 jsr OKPRT | |
0000EFr 2 L2351: | |
0000EFr 2 jsr INLIN | |
0000EFr 2 LE28E: | |
0000EFr 2 bpl RESTART | |
0000EFr 2 .else | |
0000EFr 2 46 14 lsr Z14 | |
0000F1r 2 A9 rr lda #<QT_OK | |
0000F3r 2 A0 rr ldy #>QT_OK | |
0000F5r 2 .ifdef CONFIG_CBM_ALL | |
0000F5r 2 jsr STROUT | |
0000F5r 2 .else | |
0000F5r 2 20 03 00 jsr GOSTROUT | |
0000F8r 2 .endif | |
0000F8r 2 L2351: | |
0000F8r 2 20 rr rr jsr INLIN | |
0000FBr 2 .endif | |
0000FBr 2 86 C7 stx TXTPTR | |
0000FDr 2 84 C8 sty TXTPTR+1 | |
0000FFr 2 20 C0 00 jsr CHRGET | |
000102r 2 .ifdef CONFIG_11 | |
000102r 2 ; bug in pre-1.1: CHRGET sets Z on '\0' | |
000102r 2 ; and ':' - a line starting with ':' in | |
000102r 2 ; direct mode gets ignored | |
000102r 2 AA tax | |
000103r 2 .endif | |
000103r 2 .ifdef KBD | |
000103r 2 beq L2351X | |
000103r 2 .else | |
000103r 2 F0 F3 beq L2351 | |
000105r 2 .endif | |
000105r 2 A2 FF ldx #$FF | |
000107r 2 86 87 stx CURLIN+1 | |
000109r 2 90 06 bcc NUMBERED_LINE | |
00010Br 2 20 rr rr jsr PARSE_INPUT_LINE | |
00010Er 2 4C rr rr jmp NEWSTT2 | |
000111r 2 | |
000111r 2 ; ---------------------------------------------------------------------------- | |
000111r 2 ; HANDLE NUMBERED LINE | |
000111r 2 ; ---------------------------------------------------------------------------- | |
000111r 2 NUMBERED_LINE: | |
000111r 2 20 rr rr jsr LINGET | |
000114r 2 20 rr rr jsr PARSE_INPUT_LINE | |
000117r 2 84 0C sty EOLPNTR | |
000119r 2 .ifdef KBD | |
000119r 2 jsr FNDLIN2 | |
000119r 2 lda JMPADRS+1 | |
000119r 2 sta LOWTR | |
000119r 2 sta Z96 | |
000119r 2 lda JMPADRS+2 | |
000119r 2 sta LOWTR+1 | |
000119r 2 sta Z96+1 | |
000119r 2 lda LINNUM | |
000119r 2 sta L06FE | |
000119r 2 lda LINNUM+1 | |
000119r 2 sta L06FE+1 | |
000119r 2 inc LINNUM | |
000119r 2 bne LE2D2 | |
000119r 2 inc LINNUM+1 | |
000119r 2 bne LE2D2 | |
000119r 2 jmp SYNERR | |
000119r 2 LE2D2: | |
000119r 2 jsr LF457 | |
000119r 2 ldx #Z96 | |
000119r 2 jsr CMPJMPADRS | |
000119r 2 bcs LE2FD | |
000119r 2 LE2DC: | |
000119r 2 ldx #$00 | |
000119r 2 lda (JMPADRS+1,x) | |
000119r 2 sta (Z96,x) | |
000119r 2 inc JMPADRS+1 | |
000119r 2 bne LE2E8 | |
000119r 2 inc JMPADRS+2 | |
000119r 2 LE2E8: | |
000119r 2 inc Z96 | |
000119r 2 bne LE2EE | |
000119r 2 inc Z96+1 | |
000119r 2 LE2EE: | |
000119r 2 ldx #VARTAB | |
000119r 2 jsr CMPJMPADRS | |
000119r 2 bne LE2DC | |
000119r 2 lda Z96 | |
000119r 2 sta VARTAB | |
000119r 2 lda Z96+1 | |
000119r 2 sta VARTAB+1 | |
000119r 2 LE2FD: | |
000119r 2 jsr SETPTRS | |
000119r 2 jsr LE33D | |
000119r 2 lda INPUTBUFFER | |
000119r 2 LE306: | |
000119r 2 beq LE28E | |
000119r 2 cmp #$A5 | |
000119r 2 beq LE306 | |
000119r 2 clc | |
000119r 2 .else | |
000119r 2 20 rr rr jsr FNDLIN | |
00011Cr 2 90 44 bcc PUT_NEW_LINE | |
00011Er 2 A0 01 ldy #$01 | |
000120r 2 B1 AC lda (LOWTR),y | |
000122r 2 85 70 sta INDEX+1 | |
000124r 2 A5 7A lda VARTAB | |
000126r 2 85 6F sta INDEX | |
000128r 2 A5 AD lda LOWTR+1 | |
00012Ar 2 85 72 sta DEST+1 | |
00012Cr 2 A5 AC lda LOWTR | |
00012Er 2 88 dey | |
00012Fr 2 F1 AC sbc (LOWTR),y | |
000131r 2 18 clc | |
000132r 2 65 7A adc VARTAB | |
000134r 2 85 7A sta VARTAB | |
000136r 2 85 71 sta DEST | |
000138r 2 A5 7B lda VARTAB+1 | |
00013Ar 2 69 FF adc #$FF | |
00013Cr 2 85 7B sta VARTAB+1 | |
00013Er 2 E5 AD sbc LOWTR+1 | |
000140r 2 AA tax | |
000141r 2 38 sec | |
000142r 2 A5 AC lda LOWTR | |
000144r 2 E5 7A sbc VARTAB | |
000146r 2 A8 tay | |
000147r 2 B0 03 bcs L23A5 | |
000149r 2 E8 inx | |
00014Ar 2 C6 72 dec DEST+1 | |
00014Cr 2 L23A5: | |
00014Cr 2 18 clc | |
00014Dr 2 65 6F adc INDEX | |
00014Fr 2 90 03 bcc L23AD | |
000151r 2 C6 70 dec INDEX+1 | |
000153r 2 18 clc | |
000154r 2 L23AD: | |
000154r 2 B1 6F lda (INDEX),y | |
000156r 2 91 71 sta (DEST),y | |
000158r 2 C8 iny | |
000159r 2 D0 F9 bne L23AD | |
00015Br 2 E6 70 inc INDEX+1 | |
00015Dr 2 E6 72 inc DEST+1 | |
00015Fr 2 CA dex | |
000160r 2 D0 F2 bne L23AD | |
000162r 2 .endif | |
000162r 2 ; ---------------------------------------------------------------------------- | |
000162r 2 PUT_NEW_LINE: | |
000162r 2 .ifndef KBD | |
000162r 2 .ifdef CONFIG_2 | |
000162r 2 jsr SETPTRS | |
000162r 2 jsr LE33D | |
000162r 2 lda INPUTBUFFER | |
000162r 2 beq L2351 | |
000162r 2 clc | |
000162r 2 .else | |
000162r 2 A5 1B lda INPUTBUFFER | |
000164r 2 F0 2F beq FIX_LINKS | |
000166r 2 A5 84 lda MEMSIZ | |
000168r 2 A4 85 ldy MEMSIZ+1 | |
00016Ar 2 85 80 sta FRETOP | |
00016Cr 2 84 81 sty FRETOP+1 | |
00016Er 2 .endif | |
00016Er 2 .endif | |
00016Er 2 A5 7A lda VARTAB | |
000170r 2 85 A7 sta HIGHTR | |
000172r 2 65 0C adc EOLPNTR | |
000174r 2 85 A5 sta HIGHDS | |
000176r 2 A4 7B ldy VARTAB+1 | |
000178r 2 84 A8 sty HIGHTR+1 | |
00017Ar 2 90 01 bcc L23D6 | |
00017Cr 2 C8 iny | |
00017Dr 2 L23D6: | |
00017Dr 2 84 A6 sty HIGHDS+1 | |
00017Fr 2 20 rr rr jsr BLTU | |
000182r 2 .ifdef CONFIG_INPUTBUFFER_0200 | |
000182r 2 lda LINNUM | |
000182r 2 ldy LINNUM+1 | |
000182r 2 sta INPUTBUFFER-2 | |
000182r 2 sty INPUTBUFFER-1 | |
000182r 2 .endif | |
000182r 2 A5 7E lda STREND | |
000184r 2 A4 7F ldy STREND+1 | |
000186r 2 85 7A sta VARTAB | |
000188r 2 84 7B sty VARTAB+1 | |
00018Ar 2 A4 0C ldy EOLPNTR | |
00018Cr 2 88 dey | |
00018Dr 2 ; ---COPY LINE INTO PROGRAM------- | |
00018Dr 2 L23E6: | |
00018Dr 2 B9 17 00 lda INPUTBUFFER-4,y | |
000190r 2 91 AC sta (LOWTR),y | |
000192r 2 88 dey | |
000193r 2 10 F8 bpl L23E6 | |
000195r 2 | |
000195r 2 ; ---------------------------------------------------------------------------- | |
000195r 2 ; CLEAR ALL VARIABLES | |
000195r 2 ; RE-ESTABLISH ALL FORWARD LINKS | |
000195r 2 ; ---------------------------------------------------------------------------- | |
000195r 2 FIX_LINKS: | |
000195r 2 20 rr rr jsr SETPTRS | |
000198r 2 .ifdef CONFIG_2 | |
000198r 2 jsr LE33D | |
000198r 2 jmp L2351 | |
000198r 2 LE33D: | |
000198r 2 .endif | |
000198r 2 A5 78 lda TXTTAB | |
00019Ar 2 A4 79 ldy TXTTAB+1 | |
00019Cr 2 85 6F sta INDEX | |
00019Er 2 84 70 sty INDEX+1 | |
0001A0r 2 18 clc | |
0001A1r 2 L23FA: | |
0001A1r 2 A0 01 ldy #$01 | |
0001A3r 2 B1 6F lda (INDEX),y | |
0001A5r 2 .ifdef CONFIG_2 | |
0001A5r 2 beq RET3 | |
0001A5r 2 .else | |
0001A5r 2 D0 03 4C rr jeq L2351 | |
0001A9r 2 rr | |
0001AAr 2 .endif | |
0001AAr 2 A0 04 ldy #$04 | |
0001ACr 2 L2405: | |
0001ACr 2 C8 iny | |
0001ADr 2 B1 6F lda (INDEX),y | |
0001AFr 2 D0 FB bne L2405 | |
0001B1r 2 C8 iny | |
0001B2r 2 98 tya | |
0001B3r 2 65 6F adc INDEX | |
0001B5r 2 AA tax | |
0001B6r 2 A0 00 ldy #$00 | |
0001B8r 2 91 6F sta (INDEX),y | |
0001BAr 2 A5 70 lda INDEX+1 | |
0001BCr 2 69 00 adc #$00 | |
0001BEr 2 C8 iny | |
0001BFr 2 91 6F sta (INDEX),y | |
0001C1r 2 86 6F stx INDEX | |
0001C3r 2 85 70 sta INDEX+1 | |
0001C5r 2 90 DA bcc L23FA ; always | |
0001C7r 2 | |
0001C7r 2 ; ---------------------------------------------------------------------------- | |
0001C7r 2 .ifdef KBD | |
0001C7r 2 .include "kbd_loadsave.s" | |
0001C7r 2 .endif | |
0001C7r 2 | |
0001C7r 2 .ifdef CONFIG_2 | |
0001C7r 2 ; !!! kbd_loadsave.s requires an RTS here! | |
0001C7r 2 RET3: | |
0001C7r 2 rts | |
0001C7r 2 .endif | |
0001C7r 2 | |
0001C7r 2 .include "inline.s" | |
0001C7r 3 .segment "CODE" | |
0001C7r 3 | |
0001C7r 3 .ifndef CONFIG_NO_INPUTBUFFER_ZP | |
0001C7r 3 L2420: | |
0001C7r 3 .ifdef OSI | |
0001C7r 3 jsr OUTDO | |
0001C7r 3 .endif | |
0001C7r 3 CA dex | |
0001C8r 3 10 05 bpl INLIN2 | |
0001CAr 3 L2423: | |
0001CAr 3 .ifdef OSI | |
0001CAr 3 jsr OUTDO | |
0001CAr 3 .endif | |
0001CAr 3 20 rr rr jsr CRDO | |
0001CDr 3 .endif | |
0001CDr 3 | |
0001CDr 3 ; ---------------------------------------------------------------------------- | |
0001CDr 3 ; READ A LINE, AND STRIP OFF SIGN BITS | |
0001CDr 3 ; ---------------------------------------------------------------------------- | |
0001CDr 3 .ifndef KBD | |
0001CDr 3 INLIN: | |
0001CDr 3 .ifdef APPLE | |
0001CDr 3 ldx #$DD | |
0001CDr 3 INLIN1: | |
0001CDr 3 stx $33 | |
0001CDr 3 jsr L2900 | |
0001CDr 3 cpx #$EF | |
0001CDr 3 bcs L0C32 | |
0001CDr 3 ldx #$EF | |
0001CDr 3 L0C32: | |
0001CDr 3 lda #$00 | |
0001CDr 3 sta INPUTBUFFER,x | |
0001CDr 3 ldx #<INPUTBUFFER-1 | |
0001CDr 3 ldy #>INPUTBUFFER-1 | |
0001CDr 3 rts | |
0001CDr 3 .endif | |
0001CDr 3 | |
0001CDr 3 .ifndef APPLE | |
0001CDr 3 A2 00 ldx #$00 | |
0001CFr 3 INLIN2: | |
0001CFr 3 20 rr rr jsr GETLN | |
0001D2r 3 .ifndef CONFIG_NO_LINE_EDITING | |
0001D2r 3 C9 07 cmp #$07 | |
0001D4r 3 F0 14 beq L2443 | |
0001D6r 3 .endif | |
0001D6r 3 C9 0D cmp #$0D | |
0001D8r 3 F0 20 beq L2453 | |
0001DAr 3 .ifndef CONFIG_NO_LINE_EDITING | |
0001DAr 3 C9 20 cmp #$20 | |
0001DCr 3 90 F1 bcc INLIN2 | |
0001DEr 3 .ifdef MICROTAN | |
0001DEr 3 cmp #$80 | |
0001DEr 3 .else | |
0001DEr 3 C9 7D cmp #$7D | |
0001E0r 3 .endif | |
0001E0r 3 B0 ED bcs INLIN2 | |
0001E2r 3 C9 40 cmp #$40 ; @ | |
0001E4r 3 F0 E4 beq L2423 | |
0001E6r 3 .ifdef MICROTAN | |
0001E6r 3 cmp #$7F ; DEL | |
0001E6r 3 .else | |
0001E6r 3 C9 5F cmp #$5F ; _ | |
0001E8r 3 .endif | |
0001E8r 3 F0 DD beq L2420 | |
0001EAr 3 L2443: | |
0001EAr 3 .ifdef MICROTAN | |
0001EAr 3 cpx #$4F | |
0001EAr 3 .else | |
0001EAr 3 E0 47 cpx #$47 | |
0001ECr 3 .endif | |
0001ECr 3 B0 05 bcs L244C | |
0001EEr 3 .endif | |
0001EEr 3 95 1B sta INPUTBUFFER,x | |
0001F0r 3 E8 inx | |
0001F1r 3 .ifdef OSI | |
0001F1r 3 .byte $2C | |
0001F1r 3 .else | |
0001F1r 3 D0 DC bne INLIN2 | |
0001F3r 3 .endif | |
0001F3r 3 L244C: | |
0001F3r 3 .ifndef CONFIG_NO_LINE_EDITING | |
0001F3r 3 A9 07 lda #$07 ; BEL | |
0001F5r 3 20 rr rr jsr OUTDO | |
0001F8r 3 D0 D5 bne INLIN2 | |
0001FAr 3 .endif | |
0001FAr 3 L2453: | |
0001FAr 3 4C rr rr jmp L29B9 | |
0001FDr 3 .endif | |
0001FDr 3 .endif | |
0001FDr 3 | |
0001FDr 3 .ifndef KBD | |
0001FDr 3 .ifndef APPLE | |
0001FDr 3 GETLN: | |
0001FDr 3 .ifdef CONFIG_FILE | |
0001FDr 3 jsr CHRIN | |
0001FDr 3 ldy CURDVC | |
0001FDr 3 bne L2465 | |
0001FDr 3 .else | |
0001FDr 3 20 5A 1E jsr MONRDKEY | |
000200r 3 .endif | |
000200r 3 .ifdef OSI | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 nop | |
000200r 3 and #$7F | |
000200r 3 .endif | |
000200r 3 .endif ; /* APPLE */ | |
000200r 3 .ifdef APPLE | |
000200r 3 RDKEY: | |
000200r 3 jsr LFD0C | |
000200r 3 and #$7F | |
000200r 3 .endif | |
000200r 3 C9 0F cmp #$0F | |
000202r 3 D0 08 bne L2465 | |
000204r 3 48 pha | |
000205r 3 A5 14 lda Z14 | |
000207r 3 49 FF eor #$FF | |
000209r 3 85 14 sta Z14 | |
00020Br 3 68 pla | |
00020Cr 3 L2465: | |
00020Cr 3 60 rts | |
00020Dr 3 .endif ; /* KBD */ | |
00020Dr 3 | |
00020Dr 2 | |
00020Dr 2 ; ---------------------------------------------------------------------------- | |
00020Dr 2 ; TOKENIZE THE INPUT LINE | |
00020Dr 2 ; ---------------------------------------------------------------------------- | |
00020Dr 2 PARSE_INPUT_LINE: | |
00020Dr 2 A6 C7 ldx TXTPTR | |
00020Fr 2 A0 04 ldy #$04 | |
000211r 2 84 10 sty DATAFLG | |
000213r 2 L246C: | |
000213r 2 B5 00 lda INPUTBUFFERX,x | |
000215r 2 .ifdef CONFIG_CBM_ALL | |
000215r 2 bpl LC49E | |
000215r 2 cmp #$FF | |
000215r 2 beq L24AC | |
000215r 2 inx | |
000215r 2 bne L246C | |
000215r 2 LC49E: | |
000215r 2 .endif | |
000215r 2 C9 20 cmp #$20 | |
000217r 2 F0 3A beq L24AC | |
000219r 2 85 0B sta ENDCHR | |
00021Br 2 C9 22 cmp #$22 | |
00021Dr 2 F0 58 beq L24D0 | |
00021Fr 2 24 10 bit DATAFLG | |
000221r 2 70 30 bvs L24AC | |
000223r 2 C9 3F cmp #$3F | |
000225r 2 D0 04 bne L2484 | |
000227r 2 A9 97 lda #TOKEN_PRINT | |
000229r 2 D0 28 bne L24AC | |
00022Br 2 L2484: | |
00022Br 2 C9 30 cmp #$30 | |
00022Dr 2 90 04 bcc L248C | |
00022Fr 2 C9 3C cmp #$3C | |
000231r 2 90 20 bcc L24AC | |
000233r 2 ; ---------------------------------------------------------------------------- | |
000233r 2 ; SEARCH TOKEN NAME TABLE FOR MATCH STARTING | |
000233r 2 ; WITH CURRENT CHAR FROM INPUT LINE | |
000233r 2 ; ---------------------------------------------------------------------------- | |
000233r 2 L248C: | |
000233r 2 84 BE sty STRNG2 | |
000235r 2 A0 00 ldy #$00 | |
000237r 2 84 0C sty EOLPNTR | |
000239r 2 88 dey | |
00023Ar 2 86 C7 stx TXTPTR | |
00023Cr 2 CA dex | |
00023Dr 2 L2496: | |
00023Dr 2 C8 iny | |
00023Er 2 L2497: | |
00023Er 2 E8 inx | |
00023Fr 2 L2498: | |
00023Fr 2 .ifdef KBD | |
00023Fr 2 jsr GET_UPPER | |
00023Fr 2 .else | |
00023Fr 2 B5 00 lda INPUTBUFFERX,x | |
000241r 2 .ifndef CONFIG_2 | |
000241r 2 C9 20 cmp #$20 | |
000243r 2 F0 F9 beq L2497 | |
000245r 2 .endif | |
000245r 2 .endif | |
000245r 2 38 sec | |
000246r 2 F9 rr rr sbc TOKEN_NAME_TABLE,y | |
000249r 2 F0 F2 beq L2496 | |
00024Br 2 C9 80 cmp #$80 | |
00024Dr 2 D0 2F bne L24D7 | |
00024Fr 2 05 0C ora EOLPNTR | |
000251r 2 ; ---------------------------------------------------------------------------- | |
000251r 2 ; STORE CHARACTER OR TOKEN IN OUTPUT LINE | |
000251r 2 ; ---------------------------------------------------------------------------- | |
000251r 2 L24AA: | |
000251r 2 A4 BE ldy STRNG2 | |
000253r 2 L24AC: | |
000253r 2 E8 inx | |
000254r 2 C8 iny | |
000255r 2 99 16 00 sta INPUTBUFFER-5,y | |
000258r 2 B9 16 00 lda INPUTBUFFER-5,y | |
00025Br 2 F0 34 beq L24EA | |
00025Dr 2 38 sec | |
00025Er 2 E9 3A sbc #$3A | |
000260r 2 F0 04 beq L24BF | |
000262r 2 C9 49 cmp #$49 | |
000264r 2 D0 02 bne L24C1 | |
000266r 2 L24BF: | |
000266r 2 85 10 sta DATAFLG | |
000268r 2 L24C1: | |
000268r 2 38 sec | |
000269r 2 E9 54 sbc #TOKEN_REM-':' | |
00026Br 2 D0 A6 bne L246C | |
00026Dr 2 85 0B sta ENDCHR | |
00026Fr 2 ; ---------------------------------------------------------------------------- | |
00026Fr 2 ; HANDLE LITERAL (BETWEEN QUOTES) OR REMARK, | |
00026Fr 2 ; BY COPYING CHARS UP TO ENDCHR. | |
00026Fr 2 ; ---------------------------------------------------------------------------- | |
00026Fr 2 L24C8: | |
00026Fr 2 B5 00 lda INPUTBUFFERX,x | |
000271r 2 F0 E0 beq L24AC | |
000273r 2 C5 0B cmp ENDCHR | |
000275r 2 F0 DC beq L24AC | |
000277r 2 L24D0: | |
000277r 2 C8 iny | |
000278r 2 99 16 00 sta INPUTBUFFER-5,y | |
00027Br 2 E8 inx | |
00027Cr 2 D0 F1 bne L24C8 | |
00027Er 2 ; ---------------------------------------------------------------------------- | |
00027Er 2 ; ADVANCE POINTER TO NEXT TOKEN NAME | |
00027Er 2 ; ---------------------------------------------------------------------------- | |
00027Er 2 L24D7: | |
00027Er 2 A6 C7 ldx TXTPTR | |
000280r 2 E6 0C inc EOLPNTR | |
000282r 2 L24DB: | |
000282r 2 C8 iny | |
000283r 2 B9 rr rr lda MATHTBL+28+1,y | |
000286r 2 10 FA bpl L24DB | |
000288r 2 B9 rr rr lda TOKEN_NAME_TABLE,y | |
00028Br 2 D0 B2 bne L2498 | |
00028Dr 2 B5 00 lda INPUTBUFFERX,x | |
00028Fr 2 10 C0 bpl L24AA | |
000291r 2 ; ---END OF LINE------------------ | |
000291r 2 L24EA: | |
000291r 2 99 18 00 sta INPUTBUFFER-3,y | |
000294r 2 .ifdef CONFIG_NO_INPUTBUFFER_ZP | |
000294r 2 dec TXTPTR+1 | |
000294r 2 .endif | |
000294r 2 A9 1A lda #<INPUTBUFFER-1 | |
000296r 2 85 C7 sta TXTPTR | |
000298r 2 60 rts | |
000299r 2 | |
000299r 2 ; ---------------------------------------------------------------------------- | |
000299r 2 ; SEARCH FOR LINE | |
000299r 2 ; | |
000299r 2 ; (LINNUM) = LINE # TO FIND | |
000299r 2 ; IF NOT FOUND: CARRY = 0 | |
000299r 2 ; LOWTR POINTS AT NEXT LINE | |
000299r 2 ; IF FOUND: CARRY = 1 | |
000299r 2 ; LOWTR POINTS AT LINE | |
000299r 2 ; ---------------------------------------------------------------------------- | |
000299r 2 FNDLIN: | |
000299r 2 .ifdef KBD | |
000299r 2 jsr CHRGET | |
000299r 2 jmp LE444 | |
000299r 2 LE440: | |
000299r 2 php | |
000299r 2 jsr LINGET | |
000299r 2 LE444: | |
000299r 2 jsr LF457 | |
000299r 2 ldx #$FF | |
000299r 2 plp | |
000299r 2 beq LE464 | |
000299r 2 jsr CHRGOT | |
000299r 2 beq L2520 | |
000299r 2 cmp #$A5 | |
000299r 2 bne L2520 | |
000299r 2 jsr CHRGET | |
000299r 2 beq LE464 | |
000299r 2 bcs LE461 | |
000299r 2 jsr LINGET | |
000299r 2 beq L2520 | |
000299r 2 LE461: | |
000299r 2 jmp SYNERR | |
000299r 2 LE464: | |
000299r 2 stx LINNUM | |
000299r 2 stx LINNUM+1 | |
000299r 2 .else | |
000299r 2 A5 78 lda TXTTAB | |
00029Br 2 A6 79 ldx TXTTAB+1 | |
00029Dr 2 FL1: | |
00029Dr 2 A0 01 ldy #$01 | |
00029Fr 2 85 AC sta LOWTR | |
0002A1r 2 86 AD stx LOWTR+1 | |
0002A3r 2 B1 AC lda (LOWTR),y | |
0002A5r 2 F0 1F beq L251F | |
0002A7r 2 C8 iny | |
0002A8r 2 C8 iny | |
0002A9r 2 A5 1A lda LINNUM+1 | |
0002ABr 2 D1 AC cmp (LOWTR),y | |
0002ADr 2 90 18 bcc L2520 | |
0002AFr 2 F0 03 beq L250D | |
0002B1r 2 88 dey | |
0002B2r 2 D0 09 bne L2516 | |
0002B4r 2 L250D: | |
0002B4r 2 A5 19 lda LINNUM | |
0002B6r 2 88 dey | |
0002B7r 2 D1 AC cmp (LOWTR),y | |
0002B9r 2 90 0C bcc L2520 | |
0002BBr 2 F0 0A beq L2520 | |
0002BDr 2 L2516: | |
0002BDr 2 88 dey | |
0002BEr 2 B1 AC lda (LOWTR),y | |
0002C0r 2 AA tax | |
0002C1r 2 88 dey | |
0002C2r 2 B1 AC lda (LOWTR),y | |
0002C4r 2 B0 D7 bcs FL1 | |
0002C6r 2 L251F: | |
0002C6r 2 18 clc | |
0002C7r 2 .endif | |
0002C7r 2 L2520: | |
0002C7r 2 60 rts | |
0002C8r 2 | |
0002C8r 2 ; ---------------------------------------------------------------------------- | |
0002C8r 2 ; "NEW" STATEMENT | |
0002C8r 2 ; ---------------------------------------------------------------------------- | |
0002C8r 2 NEW: | |
0002C8r 2 D0 FD bne L2520 | |
0002CAr 2 SCRTCH: | |
0002CAr 2 A9 00 lda #$00 | |
0002CCr 2 A8 tay | |
0002CDr 2 91 78 sta (TXTTAB),y | |
0002CFr 2 C8 iny | |
0002D0r 2 91 78 sta (TXTTAB),y | |
0002D2r 2 A5 78 lda TXTTAB | |
0002D4r 2 .ifdef CONFIG_2 | |
0002D4r 2 clc | |
0002D4r 2 .endif | |
0002D4r 2 69 02 adc #$02 | |
0002D6r 2 85 7A sta VARTAB | |
0002D8r 2 A5 79 lda TXTTAB+1 | |
0002DAr 2 69 00 adc #$00 | |
0002DCr 2 85 7B sta VARTAB+1 | |
0002DEr 2 ; ---------------------------------------------------------------------------- | |
0002DEr 2 SETPTRS: | |
0002DEr 2 20 rr rr jsr STXTPT | |
0002E1r 2 .ifdef CONFIG_11A | |
0002E1r 2 A9 00 lda #$00 | |
0002E3r 2 | |
0002E3r 2 ; ---------------------------------------------------------------------------- | |
0002E3r 2 ; "CLEAR" STATEMENT | |
0002E3r 2 ; ---------------------------------------------------------------------------- | |
0002E3r 2 CLEAR: | |
0002E3r 2 D0 2C bne L256A | |
0002E5r 2 .endif | |
0002E5r 2 CLEARC: | |
0002E5r 2 .ifdef KBD | |
0002E5r 2 lda #<CONST_MEMSIZ | |
0002E5r 2 ldy #>CONST_MEMSIZ | |
0002E5r 2 .else | |
0002E5r 2 A5 84 lda MEMSIZ | |
0002E7r 2 A4 85 ldy MEMSIZ+1 | |
0002E9r 2 .endif | |
0002E9r 2 85 80 sta FRETOP | |
0002EBr 2 84 81 sty FRETOP+1 | |
0002EDr 2 .ifdef CONFIG_CBM_ALL | |
0002EDr 2 jsr CLALL | |
0002EDr 2 .endif | |
0002EDr 2 A5 7A lda VARTAB | |
0002EFr 2 A4 7B ldy VARTAB+1 | |
0002F1r 2 85 7C sta ARYTAB | |
0002F3r 2 84 7D sty ARYTAB+1 | |
0002F5r 2 85 7E sta STREND | |
0002F7r 2 84 7F sty STREND+1 | |
0002F9r 2 20 rr rr jsr RESTORE | |
0002FCr 2 ; ---------------------------------------------------------------------------- | |
0002FCr 2 STKINI: | |
0002FCr 2 A2 66 ldx #TEMPST | |
0002FEr 2 86 63 stx TEMPPT | |
000300r 2 68 pla | |
000301r 2 .ifdef CONFIG_2 | |
000301r 2 tay | |
000301r 2 .else | |
000301r 2 8D FD 01 sta STACK+STACK_TOP+1 | |
000304r 2 .endif | |
000304r 2 68 pla | |
000305r 2 .ifndef CONFIG_2 | |
000305r 2 8D FE 01 sta STACK+STACK_TOP+2 | |
000308r 2 .endif | |
000308r 2 A2 FC ldx #STACK_TOP | |
00030Ar 2 9A txs | |
00030Br 2 .ifdef CONFIG_2 | |
00030Br 2 pha | |
00030Br 2 tya | |
00030Br 2 pha | |
00030Br 2 .endif | |
00030Br 2 A9 00 lda #$00 | |
00030Dr 2 85 8B sta OLDTEXT+1 | |
00030Fr 2 85 11 sta SUBFLG | |
000311r 2 L256A: | |
000311r 2 60 rts | |
000312r 2 | |
000312r 2 ; ---------------------------------------------------------------------------- | |
000312r 2 ; SET TXTPTR TO BEGINNING OF PROGRAM | |
000312r 2 ; ---------------------------------------------------------------------------- | |
000312r 2 STXTPT: | |
000312r 2 18 clc | |
000313r 2 A5 78 lda TXTTAB | |
000315r 2 69 FF adc #$FF | |
000317r 2 85 C7 sta TXTPTR | |
000319r 2 A5 79 lda TXTTAB+1 | |
00031Br 2 69 FF adc #$FF | |
00031Dr 2 85 C8 sta TXTPTR+1 | |
00031Fr 2 60 rts | |
000320r 2 | |
000320r 2 ; ---------------------------------------------------------------------------- | |
000320r 2 .ifdef KBD | |
000320r 2 LE4C0: | |
000320r 2 ldy #<LE444 | |
000320r 2 ldx #>LE444 | |
000320r 2 LE4C4: | |
000320r 2 jsr LFFD6 | |
000320r 2 jsr LFFED | |
000320r 2 lda $0504 | |
000320r 2 clc | |
000320r 2 adc #$08 | |
000320r 2 sta $0504 | |
000320r 2 rts | |
000320r 2 | |
000320r 2 CMPJMPADRS: | |
000320r 2 lda 1,x | |
000320r 2 cmp JMPADRS+2 | |
000320r 2 bne LE4DE | |
000320r 2 lda 0,x | |
000320r 2 cmp JMPADRS+1 | |
000320r 2 LE4DE: | |
000320r 2 rts | |
000320r 2 .endif | |
000320r 2 | |
000320r 2 ; ---------------------------------------------------------------------------- | |
000320r 2 ; "LIST" STATEMENT | |
000320r 2 ; ---------------------------------------------------------------------------- | |
000320r 2 LIST: | |
000320r 2 .ifdef KBD | |
000320r 2 jsr LE440 | |
000320r 2 bne LE4DE | |
000320r 2 pla | |
000320r 2 pla | |
000320r 2 L25A6: | |
000320r 2 jsr CRDO | |
000320r 2 .else | |
000320r 2 .ifdef MICROTAN | |
000320r 2 php | |
000320r 2 jmp LE21C ; patch | |
000320r 2 LC57E: | |
000320r 2 .else | |
000320r 2 90 06 bcc L2581 | |
000322r 2 F0 04 beq L2581 | |
000324r 2 C9 A5 cmp #TOKEN_MINUS | |
000326r 2 D0 E9 bne L256A | |
000328r 2 L2581: | |
000328r 2 20 rr rr jsr LINGET | |
00032Br 2 .endif | |
00032Br 2 20 rr rr jsr FNDLIN | |
00032Er 2 .ifdef MICROTAN | |
00032Er 2 plp | |
00032Er 2 beq L2598 | |
00032Er 2 .endif | |
00032Er 2 20 C6 00 jsr CHRGOT | |
000331r 2 .ifdef MICROTAN | |
000331r 2 beq L25A6 | |
000331r 2 .else | |
000331r 2 F0 0C beq L2598 | |
000333r 2 .endif | |
000333r 2 C9 A5 cmp #TOKEN_MINUS | |
000335r 2 D0 90 bne L2520 | |
000337r 2 20 C0 00 jsr CHRGET | |
00033Ar 2 .ifdef MICROTAN | |
00033Ar 2 beq L2598 | |
00033Ar 2 jsr LINGET | |
00033Ar 2 beq L25A6 | |
00033Ar 2 rts | |
00033Ar 2 .else | |
00033Ar 2 20 rr rr jsr LINGET | |
00033Dr 2 D0 88 bne L2520 | |
00033Fr 2 .endif | |
00033Fr 2 L2598: | |
00033Fr 2 .ifndef MICROTAN | |
00033Fr 2 68 pla | |
000340r 2 68 pla | |
000341r 2 A5 19 lda LINNUM | |
000343r 2 05 1A ora LINNUM+1 | |
000345r 2 D0 06 bne L25A6 | |
000347r 2 .endif | |
000347r 2 A9 FF lda #$FF | |
000349r 2 85 19 sta LINNUM | |
00034Br 2 85 1A sta LINNUM+1 | |
00034Dr 2 L25A6: | |
00034Dr 2 .ifdef MICROTAN | |
00034Dr 2 pla | |
00034Dr 2 pla | |
00034Dr 2 .endif | |
00034Dr 2 L25A6X: | |
00034Dr 2 .endif | |
00034Dr 2 A0 01 ldy #$01 | |
00034Fr 2 .ifdef CONFIG_DATAFLG | |
00034Fr 2 sty DATAFLG | |
00034Fr 2 .endif | |
00034Fr 2 B1 AC lda (LOWTRX),y | |
000351r 2 F0 39 beq L25E5 | |
000353r 2 .ifdef MICROTAN | |
000353r 2 jmp LE21F | |
000353r 2 LC5A9: | |
000353r 2 .else | |
000353r 2 20 rr rr jsr ISCNTC | |
000356r 2 .endif | |
000356r 2 .ifndef KBD | |
000356r 2 20 rr rr jsr CRDO | |
000359r 2 .endif | |
000359r 2 C8 iny | |
00035Ar 2 B1 AC lda (LOWTRX),y | |
00035Cr 2 AA tax | |
00035Dr 2 C8 iny | |
00035Er 2 B1 AC lda (LOWTRX),y | |
000360r 2 C5 1A cmp LINNUM+1 | |
000362r 2 D0 04 bne L25C1 | |
000364r 2 E4 19 cpx LINNUM | |
000366r 2 F0 02 beq L25C3 | |
000368r 2 L25C1: | |
000368r 2 B0 22 bcs L25E5 | |
00036Ar 2 ; ---LIST ONE LINE---------------- | |
00036Ar 2 L25C3: | |
00036Ar 2 84 96 sty FORPNT | |
00036Cr 2 20 rr rr jsr LINPRT | |
00036Fr 2 A9 20 lda #$20 | |
000371r 2 L25CA: | |
000371r 2 A4 96 ldy FORPNT | |
000373r 2 29 7F and #$7F | |
000375r 2 L25CE: | |
000375r 2 20 rr rr jsr OUTDO | |
000378r 2 .ifdef CONFIG_DATAFLG | |
000378r 2 cmp #$22 | |
000378r 2 bne LA519 | |
000378r 2 lda DATAFLG | |
000378r 2 eor #$FF | |
000378r 2 sta DATAFLG | |
000378r 2 LA519: | |
000378r 2 .endif | |
000378r 2 C8 iny | |
000379r 2 .ifdef CONFIG_11 | |
000379r 2 F0 11 beq L25E5 | |
00037Br 2 .endif | |
00037Br 2 B1 AC lda (LOWTRX),y | |
00037Dr 2 D0 10 bne L25E8 | |
00037Fr 2 A8 tay | |
000380r 2 B1 AC lda (LOWTRX),y | |
000382r 2 AA tax | |
000383r 2 C8 iny | |
000384r 2 B1 AC lda (LOWTRX),y | |
000386r 2 86 AC stx LOWTRX | |
000388r 2 85 AD sta LOWTRX+1 | |
00038Ar 2 .ifdef MICROTAN | |
00038Ar 2 bne L25A6X | |
00038Ar 2 .else | |
00038Ar 2 D0 C1 bne L25A6 | |
00038Cr 2 .endif | |
00038Cr 2 L25E5: | |
00038Cr 2 4C rr rr jmp RESTART | |
00038Fr 2 L25E8: | |
00038Fr 2 10 E4 bpl L25CE | |
000391r 2 .ifdef CONFIG_DATAFLG | |
000391r 2 cmp #$FF | |
000391r 2 beq L25CE | |
000391r 2 bit DATAFLG | |
000391r 2 bmi L25CE | |
000391r 2 .endif | |
000391r 2 38 sec | |
000392r 2 E9 7F sbc #$7F | |
000394r 2 AA tax | |
000395r 2 84 96 sty FORPNT | |
000397r 2 A0 FF ldy #$FF | |
000399r 2 L25F2: | |
000399r 2 CA dex | |
00039Ar 2 F0 08 beq L25FD | |
00039Cr 2 L25F5: | |
00039Cr 2 C8 iny | |
00039Dr 2 B9 rr rr lda TOKEN_NAME_TABLE,y | |
0003A0r 2 10 FA bpl L25F5 | |
0003A2r 2 30 F5 bmi L25F2 | |
0003A4r 2 L25FD: | |
0003A4r 2 C8 iny | |
0003A5r 2 B9 rr rr lda TOKEN_NAME_TABLE,y | |
0003A8r 2 30 C7 bmi L25CA | |
0003AAr 2 20 rr rr jsr OUTDO | |
0003ADr 2 D0 F5 bne L25FD ; always | |
0003AFr 2 | |
0003AFr 2 | |
0003AFr 1 .include "flow1.s" | |
0003AFr 2 .segment "CODE" | |
0003AFr 2 | |
0003AFr 2 ; ---------------------------------------------------------------------------- | |
0003AFr 2 ; "FOR" STATEMENT | |
0003AFr 2 ; | |
0003AFr 2 ; FOR PUSHES 18 BYTES ON THE STACK: | |
0003AFr 2 ; 2 -- TXTPTR | |
0003AFr 2 ; 2 -- LINE NUMBER | |
0003AFr 2 ; 5 -- INITIAL (CURRENT) FOR VARIABLE VALUE | |
0003AFr 2 ; 1 -- STEP SIGN | |
0003AFr 2 ; 5 -- STEP VALUE | |
0003AFr 2 ; 2 -- ADDRESS OF FOR VARIABLE IN VARTAB | |
0003AFr 2 ; 1 -- FOR TOKEN ($81) | |
0003AFr 2 ; ---------------------------------------------------------------------------- | |
0003AFr 2 FOR: | |
0003AFr 2 A9 80 lda #$80 | |
0003B1r 2 85 11 sta SUBFLG | |
0003B3r 2 20 rr rr jsr LET | |
0003B6r 2 20 rr rr jsr GTFORPNT | |
0003B9r 2 D0 05 bne L2619 | |
0003BBr 2 8A txa | |
0003BCr 2 69 0F adc #FOR_STACK1 | |
0003BEr 2 AA tax | |
0003BFr 2 9A txs | |
0003C0r 2 L2619: | |
0003C0r 2 68 pla | |
0003C1r 2 68 pla | |
0003C2r 2 A9 09 lda #FOR_STACK2 | |
0003C4r 2 20 rr rr jsr CHKMEM | |
0003C7r 2 20 rr rr jsr DATAN | |
0003CAr 2 18 clc | |
0003CBr 2 98 tya | |
0003CCr 2 65 C7 adc TXTPTR | |
0003CEr 2 48 pha | |
0003CFr 2 A5 C8 lda TXTPTR+1 | |
0003D1r 2 69 00 adc #$00 | |
0003D3r 2 48 pha | |
0003D4r 2 A5 87 lda CURLIN+1 | |
0003D6r 2 48 pha | |
0003D7r 2 A5 86 lda CURLIN | |
0003D9r 2 48 pha | |
0003DAr 2 A9 9E lda #TOKEN_TO | |
0003DCr 2 20 rr rr jsr SYNCHR | |
0003DFr 2 20 rr rr jsr CHKNUM | |
0003E2r 2 20 rr rr jsr FRMNUM | |
0003E5r 2 A5 B3 lda FACSIGN | |
0003E7r 2 09 7F ora #$7F | |
0003E9r 2 25 AF and FAC+1 | |
0003EBr 2 85 AF sta FAC+1 | |
0003EDr 2 A9 rr lda #<STEP | |
0003EFr 2 A0 rr ldy #>STEP | |
0003F1r 2 85 6F sta INDEX | |
0003F3r 2 84 70 sty INDEX+1 | |
0003F5r 2 4C rr rr jmp FRM_STACK3 | |
0003F8r 2 | |
0003F8r 2 ; ---------------------------------------------------------------------------- | |
0003F8r 2 ; "STEP" PHRASE OF "FOR" STATEMENT | |
0003F8r 2 ; ---------------------------------------------------------------------------- | |
0003F8r 2 STEP: | |
0003F8r 2 A9 rr lda #<CON_ONE | |
0003FAr 2 A0 rr ldy #>CON_ONE | |
0003FCr 2 20 rr rr jsr LOAD_FAC_FROM_YA | |
0003FFr 2 20 C6 00 jsr CHRGOT | |
000402r 2 C9 A3 cmp #TOKEN_STEP | |
000404r 2 D0 06 bne L2665 | |
000406r 2 20 C0 00 jsr CHRGET | |
000409r 2 20 rr rr jsr FRMNUM | |
00040Cr 2 L2665: | |
00040Cr 2 20 rr rr jsr SIGN | |
00040Fr 2 20 rr rr jsr FRM_STACK2 | |
000412r 2 A5 97 lda FORPNT+1 | |
000414r 2 48 pha | |
000415r 2 A5 96 lda FORPNT | |
000417r 2 48 pha | |
000418r 2 A9 81 lda #$81 | |
00041Ar 2 48 pha | |
00041Br 2 | |
00041Br 2 ; ---------------------------------------------------------------------------- | |
00041Br 2 ; PERFORM NEXT STATEMENT | |
00041Br 2 ; ---------------------------------------------------------------------------- | |
00041Br 2 NEWSTT: | |
00041Br 2 20 rr rr jsr ISCNTC | |
00041Er 2 A5 C7 lda TXTPTR | |
000420r 2 A4 C8 ldy TXTPTR+1 | |
000422r 2 .if .def(CONFIG_NO_INPUTBUFFER_ZP) && .def(CONFIG_2) | |
000422r 2 cpy #>INPUTBUFFER | |
000422r 2 .ifdef CBM2 | |
000422r 2 nop | |
000422r 2 .endif | |
000422r 2 beq LC6D4 | |
000422r 2 .else | |
000422r 2 ; BUG on AppleSoft I, | |
000422r 2 ; fixed differently on AppleSoft II (ldx/inx) | |
000422r 2 F0 06 beq L2683 | |
000424r 2 .endif | |
000424r 2 85 8A sta OLDTEXT | |
000426r 2 84 8B sty OLDTEXT+1 | |
000428r 2 LC6D4: | |
000428r 2 A0 00 ldy #$00 | |
00042Ar 2 L2683: | |
00042Ar 2 B1 C7 lda (TXTPTR),y | |
00042Cr 2 .ifndef CONFIG_11 | |
00042Cr 2 beq LA5DC ; old: 1 cycle more on generic case | |
00042Cr 2 cmp #$3A | |
00042Cr 2 beq NEWSTT2 | |
00042Cr 2 SYNERR1: | |
00042Cr 2 jmp SYNERR | |
00042Cr 2 LA5DC: | |
00042Cr 2 .else | |
00042Cr 2 D0 3D bne COLON; new: 1 cycle more on ":" case | |
00042Er 2 .endif | |
00042Er 2 A0 02 ldy #$02 | |
000430r 2 B1 C7 lda (TXTPTR),y | |
000432r 2 18 clc | |
000433r 2 .ifdef CONFIG_2 | |
000433r 2 jeq L2701 | |
000433r 2 .else | |
000433r 2 F0 73 beq L2701 | |
000435r 2 .endif | |
000435r 2 C8 iny | |
000436r 2 B1 C7 lda (TXTPTR),y | |
000438r 2 85 86 sta CURLIN | |
00043Ar 2 C8 iny | |
00043Br 2 B1 C7 lda (TXTPTR),y | |
00043Dr 2 85 87 sta CURLIN+1 | |
00043Fr 2 98 tya | |
000440r 2 65 C7 adc TXTPTR | |
000442r 2 85 C7 sta TXTPTR | |
000444r 2 90 02 bcc NEWSTT2 | |
000446r 2 E6 C8 inc TXTPTR+1 | |
000448r 2 NEWSTT2: | |
000448r 2 20 C0 00 jsr CHRGET | |
00044Br 2 20 rr rr jsr EXECUTE_STATEMENT | |
00044Er 2 4C rr rr jmp NEWSTT | |
000451r 2 | |
000451r 2 ; ---------------------------------------------------------------------------- | |
000451r 2 ; EXECUTE A STATEMENT | |
000451r 2 ; | |
000451r 2 ; (A) IS FIRST CHAR OF STATEMENT | |
000451r 2 ; CARRY IS SET | |
000451r 2 ; ---------------------------------------------------------------------------- | |
000451r 2 EXECUTE_STATEMENT: | |
000451r 2 .ifndef CONFIG_11A | |
000451r 2 beq RET1 | |
000451r 2 .else | |
000451r 2 F0 2D beq RET2 | |
000453r 2 .endif | |
000453r 2 .ifndef CONFIG_11 | |
000453r 2 sec | |
000453r 2 .endif | |
000453r 2 EXECUTE_STATEMENT1: | |
000453r 2 E9 80 sbc #$80 | |
000455r 2 .ifndef CONFIG_11 | |
000455r 2 jcc LET ; old: 1 cycle more on instr. | |
000455r 2 .else | |
000455r 2 90 11 bcc LET1; new: 1 cycle more on assignment | |
000457r 2 .endif | |
000457r 2 C9 1D cmp #NUM_TOKENS | |
000459r 2 .ifdef CONFIG_2 | |
000459r 2 bcs LC721 | |
000459r 2 .else | |
000459r 2 B0 14 bcs SYNERR1 | |
00045Br 2 .endif | |
00045Br 2 0A asl a | |
00045Cr 2 A8 tay | |
00045Dr 2 B9 rr rr lda TOKEN_ADDRESS_TABLE+1,y | |
000460r 2 48 pha | |
000461r 2 B9 rr rr lda TOKEN_ADDRESS_TABLE,y | |
000464r 2 48 pha | |
000465r 2 4C C0 00 jmp CHRGET | |
000468r 2 | |
000468r 2 .ifdef CONFIG_11 | |
000468r 2 LET1: | |
000468r 2 4C rr rr jmp LET | |
00046Br 2 | |
00046Br 2 COLON: | |
00046Br 2 C9 3A cmp #$3A | |
00046Dr 2 F0 D9 beq NEWSTT2 | |
00046Fr 2 SYNERR1: | |
00046Fr 2 4C rr rr jmp SYNERR | |
000472r 2 .endif | |
000472r 2 | |
000472r 2 .ifdef CONFIG_2; GO TO | |
000472r 2 LC721: | |
000472r 2 cmp #TOKEN_GO-$80 | |
000472r 2 bne SYNERR1 | |
000472r 2 jsr CHRGET | |
000472r 2 lda #TOKEN_TO | |
000472r 2 jsr SYNCHR | |
000472r 2 jmp GOTO | |
000472r 2 .endif | |
000472r 2 | |
000472r 2 ; ---------------------------------------------------------------------------- | |
000472r 2 ; "RESTORE" STATEMENT | |
000472r 2 ; ---------------------------------------------------------------------------- | |
000472r 2 RESTORE: | |
000472r 2 38 sec | |
000473r 2 A5 78 lda TXTTAB | |
000475r 2 E9 01 sbc #$01 | |
000477r 2 A4 79 ldy TXTTAB+1 | |
000479r 2 B0 01 bcs SETDA | |
00047Br 2 88 dey | |
00047Cr 2 SETDA: | |
00047Cr 2 85 8E sta DATPTR | |
00047Er 2 84 8F sty DATPTR+1 | |
000480r 2 RET2: | |
000480r 2 60 rts | |
000481r 2 | |
000481r 2 .include "iscntc.s" | |
000481r 3 .segment "CODE" | |
000481r 3 ; ---------------------------------------------------------------------------- | |
000481r 3 ; SEE IF CONTROL-C TYPED | |
000481r 3 ; ---------------------------------------------------------------------------- | |
000481r 3 .ifndef CONFIG_CBM_ALL | |
000481r 3 .include "cbm_iscntc.s" | |
000481r 4 ; nothing - ISCNTC is a KERNAL function | |
000481r 4 | |
000481r 3 .endif | |
000481r 3 .ifdef KBD | |
000481r 3 .include "kbd_iscntc.s" | |
000481r 3 .endif | |
000481r 3 .ifdef OSI | |
000481r 3 .include "osi_iscntc.s" | |
000481r 3 .endif | |
000481r 3 .ifdef APPLE | |
000481r 3 .include "apple_iscntc.s" | |
000481r 3 .endif | |
000481r 3 .ifdef KIM | |
000481r 3 .include "kim_iscntc.s" | |
000481r 4 .segment "CODE" | |
000481r 4 ISCNTC: | |
000481r 4 A9 01 lda #$01 | |
000483r 4 2C 40 17 bit $1740 | |
000486r 4 30 F8 bmi RET2 | |
000488r 4 A2 08 ldx #$08 | |
00048Ar 4 A9 03 lda #$03 | |
00048Cr 4 18 clc | |
00048Dr 4 C9 03 cmp #$03 | |
00048Fr 4 ;!!! runs into "STOP" | |
00048Fr 4 | |
00048Fr 3 .endif | |
00048Fr 3 .ifdef MICROTAN | |
00048Fr 3 .include "microtan_iscntc.s" | |
00048Fr 3 .endif | |
00048Fr 3 ;!!! runs into "STOP" | |
00048Fr 3 | |
00048Fr 2 ;!!! runs into "STOP" | |
00048Fr 2 ; ---------------------------------------------------------------------------- | |
00048Fr 2 ; "STOP" STATEMENT | |
00048Fr 2 ; ---------------------------------------------------------------------------- | |
00048Fr 2 STOP: | |
00048Fr 2 B0 01 bcs END2 | |
000491r 2 | |
000491r 2 ; ---------------------------------------------------------------------------- | |
000491r 2 ; "END" STATEMENT | |
000491r 2 ; ---------------------------------------------------------------------------- | |
000491r 2 END: | |
000491r 2 18 clc | |
000492r 2 END2: | |
000492r 2 D0 3D bne RET1 | |
000494r 2 A5 C7 lda TXTPTR | |
000496r 2 A4 C8 ldy TXTPTR+1 | |
000498r 2 .if .def(CONFIG_NO_INPUTBUFFER_ZP) && .def(CONFIG_2) | |
000498r 2 ; BUG on AppleSoft I | |
000498r 2 ; fix exists on AppleSoft II | |
000498r 2 ; TXTPTR+1 will always be > 0 | |
000498r 2 ldx CURLIN+1 | |
000498r 2 inx | |
000498r 2 .endif | |
000498r 2 F0 0C beq END4 | |
00049Ar 2 85 8A sta OLDTEXT | |
00049Cr 2 84 8B sty OLDTEXT+1 | |
00049Er 2 CONTROL_C_TYPED: | |
00049Er 2 A5 86 lda CURLIN | |
0004A0r 2 A4 87 ldy CURLIN+1 | |
0004A2r 2 85 88 sta OLDLIN | |
0004A4r 2 84 89 sty OLDLIN+1 | |
0004A6r 2 END4: | |
0004A6r 2 68 pla | |
0004A7r 2 68 pla | |
0004A8r 2 L2701: | |
0004A8r 2 A9 rr lda #<QT_BREAK | |
0004AAr 2 A0 rr ldy #>QT_BREAK | |
0004ACr 2 .ifndef KBD | |
0004ACr 2 A2 00 ldx #$00 | |
0004AEr 2 86 14 stx Z14 | |
0004B0r 2 .endif | |
0004B0r 2 90 03 bcc L270E | |
0004B2r 2 4C rr rr jmp PRINT_ERROR_LINNUM | |
0004B5r 2 L270E: | |
0004B5r 2 4C rr rr jmp RESTART | |
0004B8r 2 .ifdef KBD | |
0004B8r 2 LE664: | |
0004B8r 2 tay | |
0004B8r 2 jmp SNGFLT | |
0004B8r 2 .endif | |
0004B8r 2 | |
0004B8r 2 ; ---------------------------------------------------------------------------- | |
0004B8r 2 ; "CONT" COMMAND | |
0004B8r 2 ; ---------------------------------------------------------------------------- | |
0004B8r 2 CONT: | |
0004B8r 2 D0 17 bne RET1 | |
0004BAr 2 A2 D2 ldx #ERR_CANTCONT | |
0004BCr 2 A4 8B ldy OLDTEXT+1 | |
0004BEr 2 D0 03 bne L271C | |
0004C0r 2 4C rr rr jmp ERROR | |
0004C3r 2 L271C: | |
0004C3r 2 A5 8A lda OLDTEXT | |
0004C5r 2 85 C7 sta TXTPTR | |
0004C7r 2 84 C8 sty TXTPTR+1 | |
0004C9r 2 A5 88 lda OLDLIN | |
0004CBr 2 A4 89 ldy OLDLIN+1 | |
0004CDr 2 85 86 sta CURLIN | |
0004CFr 2 84 87 sty CURLIN+1 | |
0004D1r 2 RET1: | |
0004D1r 2 60 rts | |
0004D2r 2 | |
0004D2r 2 .ifdef KBD | |
0004D2r 2 PRT: | |
0004D2r 2 jsr GETBYT | |
0004D2r 2 txa | |
0004D2r 2 ; not ROR bug safe | |
0004D2r 2 ror a | |
0004D2r 2 ror a | |
0004D2r 2 ror a | |
0004D2r 2 sta $8F | |
0004D2r 2 rts | |
0004D2r 2 | |
0004D2r 2 LE68C: | |
0004D2r 2 ldy #$12 | |
0004D2r 2 LE68E: | |
0004D2r 2 lda LEA30,y | |
0004D2r 2 sta $03A2,y | |
0004D2r 2 dey | |
0004D2r 2 bpl LE68E | |
0004D2r 2 rts | |
0004D2r 2 .endif | |
0004D2r 2 | |
0004D2r 2 .if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS) | |
0004D2r 2 ; CBM1 has the keyword removed, | |
0004D2r 2 ; but the code is still here | |
0004D2r 2 NULL: | |
0004D2r 2 20 rr rr jsr GETBYT | |
0004D5r 2 D0 FA bne RET1 | |
0004D7r 2 E8 inx | |
0004D8r 2 E0 F2 cpx #NULL_MAX | |
0004DAr 2 B0 04 bcs L2739 | |
0004DCr 2 CA dex | |
0004DDr 2 86 15 stx Z15 | |
0004DFr 2 60 rts | |
0004E0r 2 L2739: | |
0004E0r 2 4C rr rr jmp IQERR | |
0004E3r 2 .endif | |
0004E3r 2 .ifndef CONFIG_11A | |
0004E3r 2 CLEAR: | |
0004E3r 2 bne RET1 | |
0004E3r 2 jmp CLEARC | |
0004E3r 2 .endif | |
0004E3r 2 | |
0004E3r 1 .include "loadsave.s" | |
0004E3r 2 .segment "CODE" | |
0004E3r 2 | |
0004E3r 2 .ifdef APPLE | |
0004E3r 2 .include "apple_loadsave.s" | |
0004E3r 2 .endif | |
0004E3r 2 .ifdef KIM | |
0004E3r 2 .include "kim_loadsave.s" | |
0004E3r 3 .segment "CODE" | |
0004E3r 3 SAVE: | |
0004E3r 3 BA tsx | |
0004E4r 3 86 12 stx INPUTFLG | |
0004E6r 3 A9 37 lda #$37 | |
0004E8r 3 85 F2 sta $F2 | |
0004EAr 3 A9 FE lda #$FE | |
0004ECr 3 8D F9 17 sta $17F9 | |
0004EFr 3 A5 78 lda TXTTAB | |
0004F1r 3 A4 79 ldy TXTTAB+1 | |
0004F3r 3 8D F5 17 sta $17F5 | |
0004F6r 3 8C F6 17 sty $17F6 | |
0004F9r 3 A5 7A lda VARTAB | |
0004FBr 3 A4 7B ldy VARTAB+1 | |
0004FDr 3 8D F7 17 sta $17F7 | |
000500r 3 8C F8 17 sty $17F8 | |
000503r 3 4C 00 18 jmp L1800 | |
000506r 3 A6 12 ldx INPUTFLG | |
000508r 3 9A txs | |
000509r 3 A9 rr lda #<QT_SAVED | |
00050Br 3 A0 rr ldy #>QT_SAVED | |
00050Dr 3 4C rr rr jmp STROUT | |
000510r 3 QT_LOADED: | |
000510r 3 4C 4F 41 44 .byte "LOADED" | |
000514r 3 45 44 | |
000516r 3 00 .byte $00 | |
000517r 3 QT_SAVED: | |
000517r 3 53 41 56 45 .byte "SAVED" | |
00051Br 3 44 | |
00051Cr 3 0D 0A 00 00 .byte $0D,$0A,$00,$00,$00,$00,$00,$00 | |
000520r 3 00 00 00 00 | |
000524r 3 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 | |
000528r 3 00 00 00 00 | |
00052Cr 3 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00 | |
000530r 3 00 00 00 | |
000533r 3 LOAD: | |
000533r 3 A5 78 lda TXTTAB | |
000535r 3 A4 79 ldy TXTTAB+1 | |
000537r 3 8D F5 17 sta $17F5 | |
00053Ar 3 8C F6 17 sty $17F6 | |
00053Dr 3 A9 FF lda #$FF | |
00053Fr 3 8D F9 17 sta $17F9 | |
000542r 3 A9 rr lda #<L27A6 | |
000544r 3 A0 rr ldy #>L27A6 | |
000546r 3 85 01 sta GORESTART+1 | |
000548r 3 84 02 sty GORESTART+2 | |
00054Ar 3 4C 73 18 jmp L1873 | |
00054Dr 3 L27A6: | |
00054Dr 3 A2 FF ldx #$FF | |
00054Fr 3 9A txs | |
000550r 3 A9 rr lda #<RESTART | |
000552r 3 A0 rr ldy #>RESTART | |
000554r 3 85 01 sta GORESTART+1 | |
000556r 3 84 02 sty GORESTART+2 | |
000558r 3 A9 rr lda #<QT_LOADED | |
00055Ar 3 A0 rr ldy #>QT_LOADED | |
00055Cr 3 20 rr rr jsr STROUT | |
00055Fr 3 AE ED 17 ldx $17ED | |
000562r 3 AC EE 17 ldy $17EE | |
000565r 3 8A txa | |
000566r 3 D0 01 bne L27C2 | |
000568r 3 EA nop | |
000569r 3 L27C2: | |
000569r 3 EA nop | |
00056Ar 3 86 7A stx VARTAB | |
00056Cr 3 84 7B sty VARTAB+1 | |
00056Er 3 4C rr rr jmp FIX_LINKS | |
000571r 3 | |
000571r 2 .endif | |
000571r 2 .ifdef MICROTAN | |
000571r 2 .include "microtan_loadsave.s" | |
000571r 2 .endif | |
000571r 2 | |
000571r 1 .include "flow2.s" | |
000571r 2 .segment "CODE" | |
000571r 2 ; ---------------------------------------------------------------------------- | |
000571r 2 ; "RUN" COMMAND | |
000571r 2 ; ---------------------------------------------------------------------------- | |
000571r 2 RUN: | |
000571r 2 D0 03 bne L27CF | |
000573r 2 4C rr rr jmp SETPTRS | |
000576r 2 L27CF: | |
000576r 2 20 rr rr jsr CLEARC | |
000579r 2 4C rr rr jmp L27E9 | |
00057Cr 2 | |
00057Cr 2 ; ---------------------------------------------------------------------------- | |
00057Cr 2 ; "GOSUB" STATEMENT | |
00057Cr 2 ; | |
00057Cr 2 ; LEAVES 7 BYTES ON STACK: | |
00057Cr 2 ; 2 -- RETURN ADDRESS (NEWSTT) | |
00057Cr 2 ; 2 -- TXTPTR | |
00057Cr 2 ; 2 -- LINE # | |
00057Cr 2 ; 1 -- GOSUB TOKEN | |
00057Cr 2 ; ---------------------------------------------------------------------------- | |
00057Cr 2 GOSUB: | |
00057Cr 2 A9 03 lda #$03 | |
00057Er 2 20 rr rr jsr CHKMEM | |
000581r 2 A5 C8 lda TXTPTR+1 | |
000583r 2 48 pha | |
000584r 2 A5 C7 lda TXTPTR | |
000586r 2 48 pha | |
000587r 2 A5 87 lda CURLIN+1 | |
000589r 2 48 pha | |
00058Ar 2 A5 86 lda CURLIN | |
00058Cr 2 48 pha | |
00058Dr 2 A9 8C lda #TOKEN_GOSUB | |
00058Fr 2 48 pha | |
000590r 2 L27E9: | |
000590r 2 20 C6 00 jsr CHRGOT | |
000593r 2 20 rr rr jsr GOTO | |
000596r 2 4C rr rr jmp NEWSTT | |
000599r 2 | |
000599r 2 ; ---------------------------------------------------------------------------- | |
000599r 2 ; "GOTO" STATEMENT | |
000599r 2 ; ALSO USED BY "RUN" AND "GOSUB" | |
000599r 2 ; ---------------------------------------------------------------------------- | |
000599r 2 GOTO: | |
000599r 2 20 rr rr jsr LINGET | |
00059Cr 2 20 rr rr jsr REMN | |
00059Fr 2 A5 87 lda CURLIN+1 | |
0005A1r 2 C5 1A cmp LINNUM+1 | |
0005A3r 2 B0 0B bcs L2809 | |
0005A5r 2 98 tya | |
0005A6r 2 38 sec | |
0005A7r 2 65 C7 adc TXTPTR | |
0005A9r 2 A6 C8 ldx TXTPTR+1 | |
0005ABr 2 90 07 bcc L280D | |
0005ADr 2 E8 inx | |
0005AEr 2 B0 04 bcs L280D | |
0005B0r 2 L2809: | |
0005B0r 2 A5 78 lda TXTTAB | |
0005B2r 2 A6 79 ldx TXTTAB+1 | |
0005B4r 2 L280D: | |
0005B4r 2 .ifdef KBD | |
0005B4r 2 jsr LF457 | |
0005B4r 2 bne UNDERR | |
0005B4r 2 .else | |
0005B4r 2 20 rr rr jsr FL1 | |
0005B7r 2 90 1E bcc UNDERR | |
0005B9r 2 .endif | |
0005B9r 2 A5 AC lda LOWTRX | |
0005BBr 2 E9 01 sbc #$01 | |
0005BDr 2 85 C7 sta TXTPTR | |
0005BFr 2 A5 AD lda LOWTRX+1 | |
0005C1r 2 E9 00 sbc #$00 | |
0005C3r 2 85 C8 sta TXTPTR+1 | |
0005C5r 2 L281E: | |
0005C5r 2 60 rts | |
0005C6r 2 | |
0005C6r 2 ; ---------------------------------------------------------------------------- | |
0005C6r 2 ; "POP" AND "RETURN" STATEMENTS | |
0005C6r 2 ; ---------------------------------------------------------------------------- | |
0005C6r 2 POP: | |
0005C6r 2 D0 FD bne L281E | |
0005C8r 2 A9 FF lda #$FF | |
0005CAr 2 .ifdef CONFIG_2A | |
0005CAr 2 sta FORPNT+1 ; bugfix, wrong in AppleSoft II | |
0005CAr 2 .else | |
0005CAr 2 85 96 sta FORPNT | |
0005CCr 2 .endif | |
0005CCr 2 20 rr rr jsr GTFORPNT | |
0005CFr 2 9A txs | |
0005D0r 2 C9 8C cmp #TOKEN_GOSUB | |
0005D2r 2 F0 0B beq RETURN | |
0005D4r 2 A2 16 ldx #ERR_NOGOSUB | |
0005D6r 2 2C .byte $2C | |
0005D7r 2 UNDERR: | |
0005D7r 2 A2 5A ldx #ERR_UNDEFSTAT | |
0005D9r 2 4C rr rr jmp ERROR | |
0005DCr 2 ; ---------------------------------------------------------------------------- | |
0005DCr 2 SYNERR2: | |
0005DCr 2 4C rr rr jmp SYNERR | |
0005DFr 2 ; ---------------------------------------------------------------------------- | |
0005DFr 2 RETURN: | |
0005DFr 2 68 pla | |
0005E0r 2 68 pla | |
0005E1r 2 85 86 sta CURLIN | |
0005E3r 2 68 pla | |
0005E4r 2 85 87 sta CURLIN+1 | |
0005E6r 2 68 pla | |
0005E7r 2 85 C7 sta TXTPTR | |
0005E9r 2 68 pla | |
0005EAr 2 85 C8 sta TXTPTR+1 | |
0005ECr 2 | |
0005ECr 2 ; ---------------------------------------------------------------------------- | |
0005ECr 2 ; "DATA" STATEMENT | |
0005ECr 2 ; EXECUTED BY SKIPPING TO NEXT COLON OR EOL | |
0005ECr 2 ; ---------------------------------------------------------------------------- | |
0005ECr 2 DATA: | |
0005ECr 2 20 rr rr jsr DATAN | |
0005EFr 2 | |
0005EFr 2 ; ---------------------------------------------------------------------------- | |
0005EFr 2 ; ADD (Y) TO TXTPTR | |
0005EFr 2 ; ---------------------------------------------------------------------------- | |
0005EFr 2 ADDON: | |
0005EFr 2 98 tya | |
0005F0r 2 18 clc | |
0005F1r 2 65 C7 adc TXTPTR | |
0005F3r 2 85 C7 sta TXTPTR | |
0005F5r 2 90 02 bcc L2852 | |
0005F7r 2 E6 C8 inc TXTPTR+1 | |
0005F9r 2 L2852: | |
0005F9r 2 60 rts | |
0005FAr 2 | |
0005FAr 2 ; ---------------------------------------------------------------------------- | |
0005FAr 2 ; SCAN AHEAD TO NEXT ":" OR EOL | |
0005FAr 2 ; ---------------------------------------------------------------------------- | |
0005FAr 2 DATAN: | |
0005FAr 2 A2 3A ldx #$3A | |
0005FCr 2 2C .byte $2C | |
0005FDr 2 REMN: | |
0005FDr 2 A2 00 ldx #$00 | |
0005FFr 2 86 0A stx CHARAC | |
000601r 2 A0 00 ldy #$00 | |
000603r 2 84 0B sty ENDCHR | |
000605r 2 L285E: | |
000605r 2 A5 0B lda ENDCHR | |
000607r 2 A6 0A ldx CHARAC | |
000609r 2 85 0A sta CHARAC | |
00060Br 2 86 0B stx ENDCHR | |
00060Dr 2 L2866: | |
00060Dr 2 B1 C7 lda (TXTPTR),y | |
00060Fr 2 F0 E8 beq L2852 | |
000611r 2 C5 0B cmp ENDCHR | |
000613r 2 F0 E4 beq L2852 | |
000615r 2 C8 iny | |
000616r 2 C9 22 cmp #$22 | |
000618r 2 .ifndef CONFIG_11 | |
000618r 2 beq L285E; old: swap & cont is faster | |
000618r 2 bne L2866 | |
000618r 2 .else | |
000618r 2 D0 F3 bne L2866; new: cont is faster | |
00061Ar 2 F0 E9 beq L285E | |
00061Cr 2 .endif | |
00061Cr 2 | |
00061Cr 2 ; ---------------------------------------------------------------------------- | |
00061Cr 2 ; "IF" STATEMENT | |
00061Cr 2 ; ---------------------------------------------------------------------------- | |
00061Cr 2 IF: | |
00061Cr 2 20 rr rr jsr FRMEVL | |
00061Fr 2 20 C6 00 jsr CHRGOT | |
000622r 2 C9 88 cmp #TOKEN_GOTO | |
000624r 2 F0 05 beq L2884 | |
000626r 2 A9 A1 lda #TOKEN_THEN | |
000628r 2 20 rr rr jsr SYNCHR | |
00062Br 2 L2884: | |
00062Br 2 A5 AE lda FAC | |
00062Dr 2 D0 05 bne L288D | |
00062Fr 2 | |
00062Fr 2 ; ---------------------------------------------------------------------------- | |
00062Fr 2 ; "REM" STATEMENT, OR FALSE "IF" STATEMENT | |
00062Fr 2 ; ---------------------------------------------------------------------------- | |
00062Fr 2 REM: | |
00062Fr 2 20 rr rr jsr REMN | |
000632r 2 F0 BB beq ADDON | |
000634r 2 L288D: | |
000634r 2 20 C6 00 jsr CHRGOT | |
000637r 2 B0 03 bcs L2895 | |
000639r 2 4C rr rr jmp GOTO | |
00063Cr 2 L2895: | |
00063Cr 2 4C rr rr jmp EXECUTE_STATEMENT | |
00063Fr 2 | |
00063Fr 2 ; ---------------------------------------------------------------------------- | |
00063Fr 2 ; "ON" STATEMENT | |
00063Fr 2 ; | |
00063Fr 2 ; ON <EXP> GOTO <LIST> | |
00063Fr 2 ; ON <EXP> GOSUB <LIST> | |
00063Fr 2 ; ---------------------------------------------------------------------------- | |
00063Fr 2 ON: | |
00063Fr 2 20 rr rr jsr GETBYT | |
000642r 2 48 pha | |
000643r 2 C9 8C cmp #TOKEN_GOSUB | |
000645r 2 F0 04 beq L28A4 | |
000647r 2 L28A0: | |
000647r 2 C9 88 cmp #TOKEN_GOTO | |
000649r 2 D0 91 bne SYNERR2 | |
00064Br 2 L28A4: | |
00064Br 2 C6 B2 dec FAC_LAST | |
00064Dr 2 D0 04 bne L28AC | |
00064Fr 2 68 pla | |
000650r 2 4C rr rr jmp EXECUTE_STATEMENT1 | |
000653r 2 L28AC: | |
000653r 2 20 C0 00 jsr CHRGET | |
000656r 2 20 rr rr jsr LINGET | |
000659r 2 C9 2C cmp #$2C | |
00065Br 2 F0 EE beq L28A4 | |
00065Dr 2 68 pla | |
00065Er 2 L28B7: | |
00065Er 2 60 rts | |
00065Fr 2 | |
00065Fr 1 .include "misc1.s" | |
00065Fr 2 .segment "CODE" | |
00065Fr 2 | |
00065Fr 2 ; ---------------------------------------------------------------------------- | |
00065Fr 2 ; CONVERT LINE NUMBER | |
00065Fr 2 ; ---------------------------------------------------------------------------- | |
00065Fr 2 LINGET: | |
00065Fr 2 A2 00 ldx #$00 | |
000661r 2 86 19 stx LINNUM | |
000663r 2 86 1A stx LINNUM+1 | |
000665r 2 L28BE: | |
000665r 2 B0 F7 bcs L28B7 | |
000667r 2 E9 2F sbc #$2F | |
000669r 2 85 0A sta CHARAC | |
00066Br 2 A5 1A lda LINNUM+1 | |
00066Dr 2 85 6F sta INDEX | |
00066Fr 2 C9 19 cmp #$19 | |
000671r 2 B0 D4 bcs L28A0 | |
000673r 2 ; <<<<<DANGEROUS CODE>>>>> | |
000673r 2 ; NOTE THAT IF (A) = $AB ON THE LINE ABOVE, | |
000673r 2 ; ON.1 WILL COMPARE = AND CAUSE A CATASTROPHIC | |
000673r 2 ; JUMP TO $22D9 (FOR GOTO), OR OTHER LOCATIONS | |
000673r 2 ; FOR OTHER CALLS TO LINGET. | |
000673r 2 ; | |
000673r 2 ; YOU CAN SEE THIS IS YOU FIRST PUT "BRK" IN $22D9, | |
000673r 2 ; THEN TYPE "GO TO 437761". | |
000673r 2 ; | |
000673r 2 ; ANY VALUE FROM 437760 THROUGH 440319 WILL CAUSE | |
000673r 2 ; THE PROBLEM. ($AB00 - $ABFF) | |
000673r 2 ; <<<<<DANGEROUS CODE>>>>> | |
000673r 2 A5 19 lda LINNUM | |
000675r 2 0A asl a | |
000676r 2 26 6F rol INDEX | |
000678r 2 0A asl a | |
000679r 2 26 6F rol INDEX | |
00067Br 2 65 19 adc LINNUM | |
00067Dr 2 85 19 sta LINNUM | |
00067Fr 2 A5 6F lda INDEX | |
000681r 2 65 1A adc LINNUM+1 | |
000683r 2 85 1A sta LINNUM+1 | |
000685r 2 06 19 asl LINNUM | |
000687r 2 26 1A rol LINNUM+1 | |
000689r 2 A5 19 lda LINNUM | |
00068Br 2 65 0A adc CHARAC | |
00068Dr 2 85 19 sta LINNUM | |
00068Fr 2 90 02 bcc L28EC | |
000691r 2 E6 1A inc LINNUM+1 | |
000693r 2 L28EC: | |
000693r 2 20 C0 00 jsr CHRGET | |
000696r 2 4C rr rr jmp L28BE | |
000699r 2 | |
000699r 2 ; ---------------------------------------------------------------------------- | |
000699r 2 ; "LET" STATEMENT | |
000699r 2 ; | |
000699r 2 ; LET <VAR> = <EXP> | |
000699r 2 ; <VAR> = <EXP> | |
000699r 2 ; ---------------------------------------------------------------------------- | |
000699r 2 LET: | |
000699r 2 20 rr rr jsr PTRGET | |
00069Cr 2 85 96 sta FORPNT | |
00069Er 2 84 97 sty FORPNT+1 | |
0006A0r 2 A9 AC lda #TOKEN_EQUAL | |
0006A2r 2 20 rr rr jsr SYNCHR | |
0006A5r 2 .ifndef CONFIG_SMALL | |
0006A5r 2 A5 0F lda VALTYP+1 | |
0006A7r 2 48 pha | |
0006A8r 2 .endif | |
0006A8r 2 A5 0E lda VALTYP | |
0006AAr 2 48 pha | |
0006ABr 2 20 rr rr jsr FRMEVL | |
0006AEr 2 68 pla | |
0006AFr 2 2A rol a | |
0006B0r 2 20 rr rr jsr CHKVAL | |
0006B3r 2 D0 18 bne LETSTRING | |
0006B5r 2 .ifndef CONFIG_SMALL | |
0006B5r 2 68 pla | |
0006B6r 2 LET2: | |
0006B6r 2 10 12 bpl L2923 | |
0006B8r 2 20 rr rr jsr ROUND_FAC | |
0006BBr 2 20 rr rr jsr AYINT | |
0006BEr 2 A0 00 ldy #$00 | |
0006C0r 2 A5 B1 lda FAC+3 | |
0006C2r 2 91 96 sta (FORPNT),y | |
0006C4r 2 C8 iny | |
0006C5r 2 A5 B2 lda FAC+4 | |
0006C7r 2 91 96 sta (FORPNT),y | |
0006C9r 2 60 rts | |
0006CAr 2 L2923: | |
0006CAr 2 .endif | |
0006CAr 2 | |
0006CAr 2 ; ---------------------------------------------------------------------------- | |
0006CAr 2 ; REAL VARIABLE = EXPRESSION | |
0006CAr 2 ; ---------------------------------------------------------------------------- | |
0006CAr 2 4C rr rr jmp SETFOR | |
0006CDr 2 LETSTRING: | |
0006CDr 2 .ifndef CONFIG_SMALL | |
0006CDr 2 68 pla | |
0006CEr 2 .endif | |
0006CEr 2 | |
0006CEr 2 ; ---------------------------------------------------------------------------- | |
0006CEr 2 ; INSTALL STRING, DESCRIPTOR ADDRESS IS AT FAC+3,4 | |
0006CEr 2 ; ---------------------------------------------------------------------------- | |
0006CEr 2 PUTSTR: | |
0006CEr 2 .ifdef CONFIG_CBM_ALL | |
0006CEr 2 ldy FORPNT+1 | |
0006CEr 2 .ifdef CBM1 | |
0006CEr 2 cpy #$D0 ; TI$ | |
0006CEr 2 .else | |
0006CEr 2 cpy #$DE | |
0006CEr 2 .endif | |
0006CEr 2 bne LC92B | |
0006CEr 2 jsr FREFAC | |
0006CEr 2 cmp #$06 | |
0006CEr 2 .ifdef CBM2 | |
0006CEr 2 bne IQERR1 | |
0006CEr 2 .else | |
0006CEr 2 jne IQERR | |
0006CEr 2 .endif | |
0006CEr 2 ldy #$00 | |
0006CEr 2 sty FAC | |
0006CEr 2 sty FACSIGN | |
0006CEr 2 LC8E8: | |
0006CEr 2 sty STRNG2 | |
0006CEr 2 jsr LC91C | |
0006CEr 2 jsr MUL10 | |
0006CEr 2 inc STRNG2 | |
0006CEr 2 ldy STRNG2 | |
0006CEr 2 jsr LC91C | |
0006CEr 2 jsr COPY_FAC_TO_ARG_ROUNDED | |
0006CEr 2 tax | |
0006CEr 2 beq LC902 | |
0006CEr 2 inx | |
0006CEr 2 txa | |
0006CEr 2 jsr LD9BF | |
0006CEr 2 LC902: | |
0006CEr 2 ldy STRNG2 | |
0006CEr 2 iny | |
0006CEr 2 cpy #$06 | |
0006CEr 2 bne LC8E8 | |
0006CEr 2 jsr MUL10 | |
0006CEr 2 jsr QINT | |
0006CEr 2 ldx #$02 | |
0006CEr 2 sei | |
0006CEr 2 LC912: | |
0006CEr 2 lda FAC+2,x | |
0006CEr 2 sta TISTR,x | |
0006CEr 2 dex | |
0006CEr 2 bpl LC912 | |
0006CEr 2 cli | |
0006CEr 2 rts | |
0006CEr 2 LC91C: | |
0006CEr 2 lda (INDEX),y | |
0006CEr 2 jsr CHRGOT2 | |
0006CEr 2 bcc LC926 | |
0006CEr 2 IQERR1: | |
0006CEr 2 jmp IQERR | |
0006CEr 2 LC926: | |
0006CEr 2 sbc #$2F | |
0006CEr 2 jmp ADDACC | |
0006CEr 2 LC92B: | |
0006CEr 2 .endif | |
0006CEr 2 A0 02 ldy #$02 | |
0006D0r 2 B1 B1 lda (FAC_LAST-1),y | |
0006D2r 2 C5 81 cmp FRETOP+1 | |
0006D4r 2 90 17 bcc L2946 | |
0006D6r 2 D0 07 bne L2938 | |
0006D8r 2 88 dey | |
0006D9r 2 B1 B1 lda (FAC_LAST-1),y | |
0006DBr 2 C5 80 cmp FRETOP | |
0006DDr 2 90 0E bcc L2946 | |
0006DFr 2 L2938: | |
0006DFr 2 A4 B2 ldy FAC_LAST | |
0006E1r 2 C4 7B cpy VARTAB+1 | |
0006E3r 2 90 08 bcc L2946 | |
0006E5r 2 D0 0D bne L294D | |
0006E7r 2 A5 B1 lda FAC_LAST-1 | |
0006E9r 2 C5 7A cmp VARTAB | |
0006EBr 2 B0 07 bcs L294D | |
0006EDr 2 L2946: | |
0006EDr 2 A5 B1 lda FAC_LAST-1 | |
0006EFr 2 A4 B2 ldy FAC_LAST | |
0006F1r 2 4C rr rr jmp L2963 | |
0006F4r 2 L294D: | |
0006F4r 2 A0 00 ldy #$00 | |
0006F6r 2 B1 B1 lda (FAC_LAST-1),y | |
0006F8r 2 20 rr rr jsr STRINI | |
0006FBr 2 A5 9D lda DSCPTR | |
0006FDr 2 A4 9E ldy DSCPTR+1 | |
0006FFr 2 85 BC sta STRNG1 | |
000701r 2 84 BD sty STRNG1+1 | |
000703r 2 20 rr rr jsr MOVINS | |
000706r 2 A9 AE lda #FAC | |
000708r 2 A0 00 ldy #$00 | |
00070Ar 2 L2963: | |
00070Ar 2 85 9D sta DSCPTR | |
00070Cr 2 84 9E sty DSCPTR+1 | |
00070Er 2 20 rr rr jsr FRETMS | |
000711r 2 A0 00 ldy #$00 | |
000713r 2 B1 9D lda (DSCPTR),y | |
000715r 2 91 96 sta (FORPNT),y | |
000717r 2 C8 iny | |
000718r 2 B1 9D lda (DSCPTR),y | |
00071Ar 2 91 96 sta (FORPNT),y | |
00071Cr 2 C8 iny | |
00071Dr 2 B1 9D lda (DSCPTR),y | |
00071Fr 2 91 96 sta (FORPNT),y | |
000721r 2 60 rts | |
000722r 2 .ifdef CONFIG_FILE | |
000722r 2 PRINTH: | |
000722r 2 jsr CMD | |
000722r 2 jmp LCAD6 | |
000722r 2 CMD: | |
000722r 2 jsr GETBYT | |
000722r 2 beq LC98F | |
000722r 2 lda #$2C | |
000722r 2 jsr SYNCHR | |
000722r 2 LC98F: | |
000722r 2 php | |
000722r 2 jsr CHKOUT | |
000722r 2 stx CURDVC | |
000722r 2 plp | |
000722r 2 jmp PRINT | |
000722r 2 .endif | |
000722r 2 | |
000722r 2 | |
000722r 1 .include "print.s" | |
000722r 2 .segment "CODE" | |
000722r 2 | |
000722r 2 PRSTRING: | |
000722r 2 20 rr rr jsr STRPRT | |
000725r 2 L297E: | |
000725r 2 20 C6 00 jsr CHRGOT | |
000728r 2 | |
000728r 2 ; ---------------------------------------------------------------------------- | |
000728r 2 ; "PRINT" STATEMENT | |
000728r 2 ; ---------------------------------------------------------------------------- | |
000728r 2 PRINT: | |
000728r 2 F0 3C beq CRDO | |
00072Ar 2 PRINT2: | |
00072Ar 2 F0 58 beq L29DD | |
00072Cr 2 C9 9D cmp #TOKEN_TAB | |
00072Er 2 F0 6C beq L29F5 | |
000730r 2 C9 A0 cmp #TOKEN_SPC | |
000732r 2 .ifdef CONFIG_2 | |
000732r 2 clc ; also AppleSoft II | |
000732r 2 .endif | |
000732r 2 F0 68 beq L29F5 | |
000734r 2 C9 2C cmp #',' | |
000736r 2 ; Pre-KIM had no CLC. KIM added the CLC | |
000736r 2 ; here. Post-KIM moved the CLC up... | |
000736r 2 ; (makes no sense on KIM, liveness = 0) | |
000736r 2 .if .def(CONFIG_11A) && (!.def(CONFIG_2)) | |
000736r 2 18 clc | |
000737r 2 .endif | |
000737r 2 F0 4C beq L29DE | |
000739r 2 C9 3B cmp #$3B | |
00073Br 2 F0 77 beq L2A0D | |
00073Dr 2 20 rr rr jsr FRMEVL | |
000740r 2 24 0E bit VALTYP | |
000742r 2 30 DE bmi PRSTRING | |
000744r 2 20 rr rr jsr FOUT | |
000747r 2 20 rr rr jsr STRLIT | |
00074Ar 2 .ifndef CONFIG_NO_CR | |
00074Ar 2 A0 00 ldy #$00 | |
00074Cr 2 B1 B1 lda (FAC_LAST-1),y | |
00074Er 2 18 clc | |
00074Fr 2 65 16 adc POSX | |
000751r 2 .ifdef KBD | |
000751r 2 cmp #$28 | |
000751r 2 .else | |
000751r 2 C5 17 cmp Z17 | |
000753r 2 .endif | |
000753r 2 90 03 bcc L29B1 | |
000755r 2 20 rr rr jsr CRDO | |
000758r 2 L29B1: | |
000758r 2 .endif | |
000758r 2 20 rr rr jsr STRPRT | |
00075Br 2 .ifdef KBD | |
00075Br 2 jmp L297E | |
00075Br 2 .else | |
00075Br 2 20 rr rr jsr OUTSP | |
00075Er 2 D0 C5 bne L297E ; branch always | |
000760r 2 .endif | |
000760r 2 | |
000760r 2 .ifdef KBD | |
000760r 2 ; PATCHES | |
000760r 2 LE86C: | |
000760r 2 pla | |
000760r 2 jmp CONTROL_C_TYPED | |
000760r 2 LE870: | |
000760r 2 jsr GETBYT | |
000760r 2 txa | |
000760r 2 LE874: | |
000760r 2 beq LE878 | |
000760r 2 bpl LE8F2 | |
000760r 2 LE878: | |
000760r 2 jmp IQERR | |
000760r 2 ; PATCHES | |
000760r 2 .endif | |
000760r 2 | |
000760r 2 | |
000760r 2 | |
000760r 2 .ifndef KBD | |
000760r 2 L29B9: | |
000760r 2 .ifdef CBM2 | |
000760r 2 lda #$00 | |
000760r 2 sta INPUTBUFFER,x | |
000760r 2 ldx #<(INPUTBUFFER-1) | |
000760r 2 ldy #>(INPUTBUFFER-1) | |
000760r 2 .else | |
000760r 2 .ifndef APPLE | |
000760r 2 A0 00 ldy #$00 | |
000762r 2 94 1B sty INPUTBUFFER,x | |
000764r 2 A2 1A ldx #LINNUM+1 | |
000766r 2 .endif | |
000766r 2 .ifdef MICROTAN | |
000766r 2 bne CRDO2 | |
000766r 2 .endif | |
000766r 2 .endif | |
000766r 2 .ifdef CONFIG_FILE | |
000766r 2 lda CURDVC | |
000766r 2 bne L29DD | |
000766r 2 .endif | |
000766r 2 .endif | |
000766r 2 | |
000766r 2 | |
000766r 2 CRDO: | |
000766r 2 .if .def(CONFIG_PRINTNULLS) && .def(CONFIG_FILE) | |
000766r 2 lda CURDVC | |
000766r 2 bne LC9D8 | |
000766r 2 sta POSX | |
000766r 2 LC9D8: | |
000766r 2 .endif | |
000766r 2 A9 0D lda #CRLF_1 | |
000768r 2 .ifndef CONFIG_CBM_ALL | |
000768r 2 85 16 sta POSX | |
00076Ar 2 .endif | |
00076Ar 2 20 rr rr jsr OUTDO | |
00076Dr 2 CRDO2: | |
00076Dr 2 A9 0A lda #CRLF_2 | |
00076Fr 2 20 rr rr jsr OUTDO | |
000772r 2 | |
000772r 2 PRINTNULLS: | |
000772r 2 .ifdef KBD | |
000772r 2 lda #$00 | |
000772r 2 sta POSX | |
000772r 2 eor #$FF | |
000772r 2 .else | |
000772r 2 .if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS) | |
000772r 2 .ifdef CONFIG_FILE | |
000772r 2 ; Although there is no statement for it, | |
000772r 2 ; CBM1 had NULL support and ignores | |
000772r 2 ; it when not targeting the screen, | |
000772r 2 ; CBM2 dropped it completely. | |
000772r 2 lda CURDVC | |
000772r 2 bne L29DD | |
000772r 2 .endif | |
000772r 2 8A txa | |
000773r 2 48 pha | |
000774r 2 A6 15 ldx Z15 | |
000776r 2 F0 08 beq L29D9 | |
000778r 2 A9 00 lda #$00 | |
00077Ar 2 L29D3: | |
00077Ar 2 20 rr rr jsr OUTDO | |
00077Dr 2 CA dex | |
00077Er 2 D0 FA bne L29D3 | |
000780r 2 L29D9: | |
000780r 2 86 16 stx POSX | |
000782r 2 68 pla | |
000783r 2 AA tax | |
000784r 2 .else | |
000784r 2 .ifndef CONFIG_2 | |
000784r 2 lda #$00 | |
000784r 2 sta POSX | |
000784r 2 .endif | |
000784r 2 eor #$FF | |
000784r 2 .endif | |
000784r 2 .endif | |
000784r 2 L29DD: | |
000784r 2 60 rts | |
000785r 2 L29DE: | |
000785r 2 A5 16 lda POSX | |
000787r 2 .ifndef CONFIG_NO_CR | |
000787r 2 .ifdef KBD | |
000787r 2 cmp #$1A | |
000787r 2 .else | |
000787r 2 C5 18 cmp Z18 | |
000789r 2 .endif | |
000789r 2 90 06 bcc L29EA | |
00078Br 2 20 rr rr jsr CRDO | |
00078Er 2 4C rr rr jmp L2A0D | |
000791r 2 L29EA: | |
000791r 2 .endif | |
000791r 2 38 sec | |
000792r 2 L29EB: | |
000792r 2 .ifdef CONFIG_CBM_ALL | |
000792r 2 sbc #$0A | |
000792r 2 .else | |
000792r 2 .ifdef KBD | |
000792r 2 sbc #$0D | |
000792r 2 .else | |
000792r 2 E9 0E sbc #$0E | |
000794r 2 .endif | |
000794r 2 .endif | |
000794r 2 B0 FC bcs L29EB | |
000796r 2 49 FF eor #$FF | |
000798r 2 69 01 adc #$01 | |
00079Ar 2 D0 13 bne L2A08 | |
00079Cr 2 L29F5: | |
00079Cr 2 .ifdef CONFIG_11A | |
00079Cr 2 08 php | |
00079Dr 2 .else | |
00079Dr 2 pha | |
00079Dr 2 .endif | |
00079Dr 2 20 rr rr jsr GTBYTC | |
0007A0r 2 C9 29 cmp #')' | |
0007A2r 2 .ifdef CONFIG_11A | |
0007A2r 2 .ifdef CONFIG_2 | |
0007A2r 2 bne SYNERR4 | |
0007A2r 2 .else | |
0007A2r 2 F0 03 4C rr jne SYNERR | |
0007A6r 2 rr | |
0007A7r 2 .endif | |
0007A7r 2 28 plp | |
0007A8r 2 90 06 bcc L2A09 | |
0007AAr 2 .else | |
0007AAr 2 .ifdef CONFIG_11 | |
0007AAr 2 jne SYNERR | |
0007AAr 2 .else | |
0007AAr 2 bne SYNERR4 | |
0007AAr 2 .endif | |
0007AAr 2 pla | |
0007AAr 2 cmp #TOKEN_TAB | |
0007AAr 2 .ifdef CONFIG_11 | |
0007AAr 2 bne L2A09 | |
0007AAr 2 .else | |
0007AAr 2 bne L2A0A | |
0007AAr 2 .endif | |
0007AAr 2 .endif | |
0007AAr 2 8A txa | |
0007ABr 2 E5 16 sbc POSX | |
0007ADr 2 90 05 bcc L2A0D | |
0007AFr 2 .ifndef CONFIG_11 | |
0007AFr 2 beq L2A0D | |
0007AFr 2 .endif | |
0007AFr 2 L2A08: | |
0007AFr 2 AA tax | |
0007B0r 2 .ifdef CONFIG_11 | |
0007B0r 2 L2A09: | |
0007B0r 2 E8 inx | |
0007B1r 2 .endif | |
0007B1r 2 L2A0A: | |
0007B1r 2 .ifndef CONFIG_11 | |
0007B1r 2 jsr OUTSP | |
0007B1r 2 .endif | |
0007B1r 2 CA dex | |
0007B2r 2 .ifndef CONFIG_11 | |
0007B2r 2 bne L2A0A | |
0007B2r 2 .else | |
0007B2r 2 D0 06 bne L2A13 | |
0007B4r 2 .endif | |
0007B4r 2 L2A0D: | |
0007B4r 2 20 C0 00 jsr CHRGET | |
0007B7r 2 4C rr rr jmp PRINT2 | |
0007BAr 2 .ifdef CONFIG_11 | |
0007BAr 2 L2A13: | |
0007BAr 2 20 rr rr jsr OUTSP | |
0007BDr 2 D0 F2 bne L2A0A | |
0007BFr 2 .endif | |
0007BFr 2 | |
0007BFr 2 ; ---------------------------------------------------------------------------- | |
0007BFr 2 ; PRINT STRING AT (Y,A) | |
0007BFr 2 ; ---------------------------------------------------------------------------- | |
0007BFr 2 STROUT: | |
0007BFr 2 20 rr rr jsr STRLIT | |
0007C2r 2 | |
0007C2r 2 ; ---------------------------------------------------------------------------- | |
0007C2r 2 ; PRINT STRING AT (FACMO,FACLO) | |
0007C2r 2 ; ---------------------------------------------------------------------------- | |
0007C2r 2 STRPRT: | |
0007C2r 2 20 rr rr jsr FREFAC | |
0007C5r 2 AA tax | |
0007C6r 2 A0 00 ldy #$00 | |
0007C8r 2 E8 inx | |
0007C9r 2 L2A22: | |
0007C9r 2 CA dex | |
0007CAr 2 F0 B8 beq L29DD | |
0007CCr 2 B1 6F lda (INDEX),y | |
0007CEr 2 20 rr rr jsr OUTDO | |
0007D1r 2 C8 iny | |
0007D2r 2 C9 0D cmp #$0D | |
0007D4r 2 D0 F3 bne L2A22 | |
0007D6r 2 20 rr rr jsr PRINTNULLS | |
0007D9r 2 4C rr rr jmp L2A22 | |
0007DCr 2 ; ---------------------------------------------------------------------------- | |
0007DCr 2 OUTSP: | |
0007DCr 2 .ifdef CONFIG_FILE | |
0007DCr 2 .ifndef CBM1 | |
0007DCr 2 ; on non-screen devices, print SPACE | |
0007DCr 2 ; instead of CRSR RIGHT | |
0007DCr 2 lda CURDVC | |
0007DCr 2 beq LCA40 | |
0007DCr 2 lda #$20 | |
0007DCr 2 .byte $2C | |
0007DCr 2 LCA40: | |
0007DCr 2 .endif | |
0007DCr 2 lda #$1D ; CRSR RIGHT | |
0007DCr 2 .else | |
0007DCr 2 A9 20 lda #$20 | |
0007DEr 2 .endif | |
0007DEr 2 2C .byte $2C | |
0007DFr 2 OUTQUES: | |
0007DFr 2 A9 3F lda #$3F | |
0007E1r 2 | |
0007E1r 2 ; ---------------------------------------------------------------------------- | |
0007E1r 2 ; PRINT CHAR FROM (A) | |
0007E1r 2 ; ---------------------------------------------------------------------------- | |
0007E1r 2 OUTDO: | |
0007E1r 2 .ifndef KBD | |
0007E1r 2 24 14 bit Z14 | |
0007E3r 2 30 18 bmi L2A56 | |
0007E5r 2 .endif | |
0007E5r 2 .if .def(CONFIG_PRINT_CR) || .def(CBM1) | |
0007E5r 2 ; Commodore forgot to remove this in CBM1 | |
0007E5r 2 48 pha | |
0007E6r 2 .endif | |
0007E6r 2 .ifdef CBM1 | |
0007E6r 2 cmp #$1D ; CRSR RIGHT | |
0007E6r 2 beq LCA6A | |
0007E6r 2 cmp #$9D ; CRSR LEFT | |
0007E6r 2 beq LCA5A | |
0007E6r 2 cmp #$14 ; DEL | |
0007E6r 2 bne LCA64 | |
0007E6r 2 LCA5A: | |
0007E6r 2 lda POSX | |
0007E6r 2 beq L2A4E | |
0007E6r 2 lda CURDVC | |
0007E6r 2 bne L2A4E | |
0007E6r 2 dec POSX | |
0007E6r 2 LCA64: | |
0007E6r 2 and #$7F | |
0007E6r 2 .endif | |
0007E6r 2 .ifndef CBM2 | |
0007E6r 2 C9 20 cmp #$20 | |
0007E8r 2 90 0B bcc L2A4E | |
0007EAr 2 .endif | |
0007EAr 2 LCA6A: | |
0007EAr 2 .ifdef CONFIG_CBM1_PATCHES | |
0007EAr 2 lda CURDVC | |
0007EAr 2 jsr PATCH6 | |
0007EAr 2 nop | |
0007EAr 2 .endif | |
0007EAr 2 .ifdef CONFIG_PRINT_CR | |
0007EAr 2 A5 16 lda POSX | |
0007ECr 2 C5 17 cmp Z17 | |
0007EEr 2 D0 03 bne L2A4C | |
0007F0r 2 .ifdef APPLE | |
0007F0r 2 nop ; PATCH! | |
0007F0r 2 nop ; don't print CR | |
0007F0r 2 nop | |
0007F0r 2 .else | |
0007F0r 2 20 rr rr jsr CRDO | |
0007F3r 2 .endif | |
0007F3r 2 L2A4C: | |
0007F3r 2 .endif | |
0007F3r 2 .ifndef CONFIG_CBM_ALL | |
0007F3r 2 E6 16 inc POSX | |
0007F5r 2 .endif | |
0007F5r 2 L2A4E: | |
0007F5r 2 .if .def(CONFIG_PRINT_CR) || .def(CBM1) | |
0007F5r 2 ; Commodore forgot to remove this in CBM1 | |
0007F5r 2 68 pla | |
0007F6r 2 .endif | |
0007F6r 2 .ifdef CONFIG_MONCOUT_DESTROYS_Y | |
0007F6r 2 84 0D sty DIMFLG | |
0007F8r 2 .endif | |
0007F8r 2 .ifdef CONFIG_IO_MSB | |
0007F8r 2 ora #$80 | |
0007F8r 2 .endif | |
0007F8r 2 20 A0 1E jsr MONCOUT | |
0007FBr 2 .ifdef CONFIG_IO_MSB | |
0007FBr 2 and #$7F | |
0007FBr 2 .endif | |
0007FBr 2 .ifdef CONFIG_MONCOUT_DESTROYS_Y | |
0007FBr 2 A4 0D ldy DIMFLG | |
0007FDr 2 .endif | |
0007FDr 2 .ifdef OSI | |
0007FDr 2 nop | |
0007FDr 2 nop | |
0007FDr 2 nop | |
0007FDr 2 nop | |
0007FDr 2 .endif | |
0007FDr 2 L2A56: | |
0007FDr 2 29 FF and #$FF | |
0007FFr 2 LE8F2: | |
0007FFr 2 60 rts | |
000800r 2 | |
000800r 2 ; ---------------------------------------------------------------------------- | |
000800r 2 ; ??? | |
000800r 2 ; ---------------------------------------------------------------------------- | |
000800r 2 .ifdef KBD | |
000800r 2 LE8F3: | |
000800r 2 pha | |
000800r 2 lda $047F | |
000800r 2 clc | |
000800r 2 beq LE900 | |
000800r 2 lda #$00 | |
000800r 2 sta $047F | |
000800r 2 sec | |
000800r 2 LE900: | |
000800r 2 pla | |
000800r 2 rts | |
000800r 2 .endif | |
000800r 2 | |
000800r 1 .include "input.s" | |
000800r 2 .segment "CODE" | |
000800r 2 | |
000800r 2 ; ---------------------------------------------------------------------------- | |
000800r 2 ; INPUT CONVERSION ERROR: ILLEGAL CHARACTER | |
000800r 2 ; IN NUMERIC FIELD. MUST DISTINGUISH | |
000800r 2 ; BETWEEN INPUT, READ, AND GET | |
000800r 2 ; ---------------------------------------------------------------------------- | |
000800r 2 INPUTERR: | |
000800r 2 A5 12 lda INPUTFLG | |
000802r 2 F0 11 beq RESPERR ; INPUT | |
000804r 2 .ifndef CONFIG_SMALL | |
000804r 2 .ifdef CONFIG_10A | |
000804r 2 ; without this, it treats GET errors | |
000804r 2 ; like READ errors | |
000804r 2 30 04 bmi L2A63 ; READ | |
000806r 2 A0 FF ldy #$FF ; GET | |
000808r 2 D0 04 bne L2A67 | |
00080Ar 2 L2A63: | |
00080Ar 2 .endif | |
00080Ar 2 .endif | |
00080Ar 2 .ifdef CONFIG_CBM1_PATCHES | |
00080Ar 2 jsr PATCH5 | |
00080Ar 2 nop | |
00080Ar 2 .else | |
00080Ar 2 A5 8C lda Z8C | |
00080Cr 2 A4 8D ldy Z8C+1 | |
00080Er 2 .endif | |
00080Er 2 L2A67: | |
00080Er 2 85 86 sta CURLIN | |
000810r 2 84 87 sty CURLIN+1 | |
000812r 2 SYNERR4: | |
000812r 2 4C rr rr jmp SYNERR | |
000815r 2 RESPERR: | |
000815r 2 .ifdef CONFIG_FILE | |
000815r 2 lda CURDVC | |
000815r 2 beq LCA8F | |
000815r 2 ldx #ERR_BADDATA | |
000815r 2 jmp ERROR | |
000815r 2 LCA8F: | |
000815r 2 .endif | |
000815r 2 A9 rr lda #<ERRREENTRY | |
000817r 2 A0 rr ldy #>ERRREENTRY | |
000819r 2 20 rr rr jsr STROUT | |
00081Cr 2 A5 8A lda OLDTEXT | |
00081Er 2 A4 8B ldy OLDTEXT+1 | |
000820r 2 85 C7 sta TXTPTR | |
000822r 2 84 C8 sty TXTPTR+1 | |
000824r 2 RTS20: | |
000824r 2 60 rts | |
000825r 2 | |
000825r 2 ; ---------------------------------------------------------------------------- | |
000825r 2 ; "GET" STATEMENT | |
000825r 2 ; ---------------------------------------------------------------------------- | |
000825r 2 .ifndef CONFIG_SMALL | |
000825r 2 GET: | |
000825r 2 20 rr rr jsr ERRDIR | |
000828r 2 ; CBM: if GET#, then switch input | |
000828r 2 .ifdef CONFIG_FILE | |
000828r 2 cmp #'#' | |
000828r 2 bne LCAB6 | |
000828r 2 jsr CHRGET | |
000828r 2 jsr GETBYT | |
000828r 2 lda #',' | |
000828r 2 jsr SYNCHR | |
000828r 2 jsr CHKIN | |
000828r 2 stx CURDVC | |
000828r 2 LCAB6: | |
000828r 2 .endif | |
000828r 2 A2 1C ldx #<(INPUTBUFFER+1) | |
00082Ar 2 A0 00 ldy #>(INPUTBUFFER+1) | |
00082Cr 2 .ifdef CONFIG_NO_INPUTBUFFER_ZP | |
00082Cr 2 lda #$00 | |
00082Cr 2 sta INPUTBUFFER+1 | |
00082Cr 2 .else | |
00082Cr 2 84 1C sty INPUTBUFFER+1 | |
00082Er 2 .endif | |
00082Er 2 A9 40 lda #$40 | |
000830r 2 20 rr rr jsr PROCESS_INPUT_LIST | |
000833r 2 ; CBM: if GET#, then switch input back | |
000833r 2 .ifdef CONFIG_FILE | |
000833r 2 ldx CURDVC | |
000833r 2 bne LCAD8 | |
000833r 2 .endif | |
000833r 2 60 rts | |
000834r 2 .endif | |
000834r 2 | |
000834r 2 ; ---------------------------------------------------------------------------- | |
000834r 2 ; "INPUT#" STATEMENT | |
000834r 2 ; ---------------------------------------------------------------------------- | |
000834r 2 .ifdef CONFIG_FILE | |
000834r 2 INPUTH: | |
000834r 2 jsr GETBYT | |
000834r 2 lda #$2C | |
000834r 2 jsr SYNCHR | |
000834r 2 jsr CHKIN | |
000834r 2 stx CURDVC | |
000834r 2 jsr L2A9E | |
000834r 2 LCAD6: | |
000834r 2 lda CURDVC | |
000834r 2 LCAD8: | |
000834r 2 jsr CLRCH | |
000834r 2 ldx #$00 | |
000834r 2 stx CURDVC | |
000834r 2 rts | |
000834r 2 LCAE0: | |
000834r 2 .endif | |
000834r 2 | |
000834r 2 ; ---------------------------------------------------------------------------- | |
000834r 2 ; "INPUT" STATEMENT | |
000834r 2 ; ---------------------------------------------------------------------------- | |
000834r 2 INPUT: | |
000834r 2 .ifndef KBD | |
000834r 2 46 14 lsr Z14 | |
000836r 2 .endif | |
000836r 2 C9 22 cmp #$22 | |
000838r 2 D0 0B bne L2A9E | |
00083Ar 2 20 rr rr jsr STRTXT | |
00083Dr 2 A9 3B lda #$3B | |
00083Fr 2 20 rr rr jsr SYNCHR | |
000842r 2 20 rr rr jsr STRPRT | |
000845r 2 L2A9E: | |
000845r 2 20 rr rr jsr ERRDIR | |
000848r 2 A9 2C lda #$2C | |
00084Ar 2 85 1A sta INPUTBUFFER-1 | |
00084Cr 2 LCAF8: | |
00084Cr 2 .ifdef APPLE | |
00084Cr 2 jsr INLINX | |
00084Cr 2 .else | |
00084Cr 2 20 rr rr jsr NXIN | |
00084Fr 2 .endif | |
00084Fr 2 .ifdef KBD | |
00084Fr 2 bmi L2ABE | |
00084Fr 2 .else | |
00084Fr 2 .ifdef CONFIG_FILE | |
00084Fr 2 lda CURDVC | |
00084Fr 2 beq LCB0C | |
00084Fr 2 lda Z96 | |
00084Fr 2 and #$02 | |
00084Fr 2 beq LCB0C | |
00084Fr 2 jsr LCAD6 | |
00084Fr 2 jmp DATA | |
00084Fr 2 LCB0C: | |
00084Fr 2 .endif | |
00084Fr 2 A5 1B lda INPUTBUFFER | |
000851r 2 D0 12 bne L2ABE | |
000853r 2 .ifdef CONFIG_FILE | |
000853r 2 lda CURDVC | |
000853r 2 bne LCAF8 | |
000853r 2 .endif | |
000853r 2 .ifdef CONFIG_CBM1_PATCHES | |
000853r 2 jmp PATCH1 | |
000853r 2 .else | |
000853r 2 18 clc | |
000854r 2 4C rr rr jmp CONTROL_C_TYPED | |
000857r 2 .endif | |
000857r 2 .endif | |
000857r 2 | |
000857r 2 NXIN: | |
000857r 2 .ifdef KBD | |
000857r 2 jsr INLIN | |
000857r 2 bmi RTS20 | |
000857r 2 pla | |
000857r 2 jmp LE86C | |
000857r 2 .else | |
000857r 2 .ifdef CONFIG_FILE | |
000857r 2 lda CURDVC | |
000857r 2 bne LCB21 | |
000857r 2 .endif | |
000857r 2 20 rr rr jsr OUTQUES ; '?' | |
00085Ar 2 20 rr rr jsr OUTSP | |
00085Dr 2 LCB21: | |
00085Dr 2 4C rr rr jmp INLIN | |
000860r 2 .endif | |
000860r 2 | |
000860r 2 ; ---------------------------------------------------------------------------- | |
000860r 2 ; "GETC" STATEMENT | |
000860r 2 ; ---------------------------------------------------------------------------- | |
000860r 2 .ifdef KBD | |
000860r 2 GETC: | |
000860r 2 jsr CONINT | |
000860r 2 jsr LF43D | |
000860r 2 jmp LE664 | |
000860r 2 .endif | |
000860r 2 | |
000860r 2 ; ---------------------------------------------------------------------------- | |
000860r 2 ; "READ" STATEMENT | |
000860r 2 ; ---------------------------------------------------------------------------- | |
000860r 2 READ: | |
000860r 2 A6 8E ldx DATPTR | |
000862r 2 A4 8F ldy DATPTR+1 | |
000864r 2 .ifdef CONFIG_NO_READ_Y_IS_ZERO_HACK | |
000864r 2 ; AppleSoft II, too | |
000864r 2 lda #$98 ; READ | |
000864r 2 .byte $2C | |
000864r 2 L2ABE: | |
000864r 2 lda #$00 ; INPUT | |
000864r 2 .else | |
000864r 2 A9 .byte $A9 ; LDA #$98 | |
000865r 2 L2ABE: | |
000865r 2 98 tya | |
000866r 2 .endif | |
000866r 2 | |
000866r 2 ; ---------------------------------------------------------------------------- | |
000866r 2 ; PROCESS INPUT LIST | |
000866r 2 ; | |
000866r 2 ; (Y,X) IS ADDRESS OF INPUT DATA STRING | |
000866r 2 ; (A) = VALUE FOR INPUTFLG: $00 FOR INPUT | |
000866r 2 ; $40 FOR GET | |
000866r 2 ; $98 FOR READ | |
000866r 2 ; ---------------------------------------------------------------------------- | |
000866r 2 PROCESS_INPUT_LIST: | |
000866r 2 85 12 sta INPUTFLG | |
000868r 2 86 90 stx INPTR | |
00086Ar 2 84 91 sty INPTR+1 | |
00086Cr 2 PROCESS_INPUT_ITEM: | |
00086Cr 2 20 rr rr jsr PTRGET | |
00086Fr 2 85 96 sta FORPNT | |
000871r 2 84 97 sty FORPNT+1 | |
000873r 2 A5 C7 lda TXTPTR | |
000875r 2 A4 C8 ldy TXTPTR+1 | |
000877r 2 85 19 sta TXPSV | |
000879r 2 84 1A sty TXPSV+1 | |
00087Br 2 A6 90 ldx INPTR | |
00087Dr 2 A4 91 ldy INPTR+1 | |
00087Fr 2 86 C7 stx TXTPTR | |
000881r 2 84 C8 sty TXTPTR+1 | |
000883r 2 20 C6 00 jsr CHRGOT | |
000886r 2 D0 1B bne INSTART | |
000888r 2 24 12 bit INPUTFLG | |
00088Ar 2 .ifndef CONFIG_SMALL ; GET | |
00088Ar 2 50 0B bvc L2AF0 | |
00088Cr 2 .ifdef MICROTAN | |
00088Cr 2 jsr MONRDKEY2 | |
00088Cr 2 .else | |
00088Cr 2 20 5A 1E jsr MONRDKEY | |
00088Fr 2 .endif | |
00088Fr 2 .ifdef CONFIG_IO_MSB | |
00088Fr 2 and #$7F | |
00088Fr 2 .endif | |
00088Fr 2 85 1B sta INPUTBUFFER | |
000891r 2 ; BUG: The beq/bne L2AF8 below is supposed | |
000891r 2 ; to be always taken. For this to happen, | |
000891r 2 ; the last load must be a 0 for beq | |
000891r 2 ; and != 0 for bne. The original Microsoft | |
000891r 2 ; code had ldx/ldy/bne here, which was only | |
000891r 2 ; correct for a non-ZP INPUTBUFFER. Commodore | |
000891r 2 ; fixed it in CBMBASIC V1 by swapping the | |
000891r 2 ; ldx and the ldy. It was broken on KIM, | |
000891r 2 ; but okay on APPLE and CBM2, because | |
000891r 2 ; these used a non-ZP INPUTBUFFER. | |
000891r 2 ; Microsoft fixed this somewhere after KIM | |
000891r 2 ; and before MICROTAN, by using beq instead | |
000891r 2 ; of bne in the ZP case. | |
000891r 2 .ifdef CBM1 | |
000891r 2 ldy #>(INPUTBUFFER-1) | |
000891r 2 ldx #<(INPUTBUFFER-1) | |
000891r 2 .else | |
000891r 2 A2 1A ldx #<(INPUTBUFFER-1) | |
000893r 2 A0 00 ldy #>(INPUTBUFFER-1) | |
000895r 2 .endif | |
000895r 2 .if .def(CONFIG_2) && (!.def(CONFIG_NO_INPUTBUFFER_ZP)) | |
000895r 2 beq L2AF8 ; always | |
000895r 2 .else | |
000895r 2 D0 08 bne L2AF8 ; always | |
000897r 2 .endif | |
000897r 2 L2AF0: | |
000897r 2 .endif | |
000897r 2 30 71 bmi FINDATA | |
000899r 2 .ifdef CONFIG_FILE | |
000899r 2 lda CURDVC | |
000899r 2 bne LCB64 | |
000899r 2 .endif | |
000899r 2 .ifdef KBD | |
000899r 2 jsr OUTQUESSP | |
000899r 2 .else | |
000899r 2 20 rr rr jsr OUTQUES | |
00089Cr 2 .endif | |
00089Cr 2 LCB64: | |
00089Cr 2 20 rr rr jsr NXIN | |
00089Fr 2 L2AF8: | |
00089Fr 2 86 C7 stx TXTPTR | |
0008A1r 2 84 C8 sty TXTPTR+1 | |
0008A3r 2 | |
0008A3r 2 ; ---------------------------------------------------------------------------- | |
0008A3r 2 INSTART: | |
0008A3r 2 20 C0 00 jsr CHRGET | |
0008A6r 2 24 0E bit VALTYP | |
0008A8r 2 10 31 bpl L2B34 | |
0008AAr 2 .ifndef CONFIG_SMALL ; GET | |
0008AAr 2 24 12 bit INPUTFLG | |
0008ACr 2 50 09 bvc L2B10 | |
0008AEr 2 .ifdef CONFIG_CBM1_PATCHES | |
0008AEr 2 lda #$00 | |
0008AEr 2 jsr PATCH4 | |
0008AEr 2 nop | |
0008AEr 2 .else | |
0008AEr 2 E8 inx | |
0008AFr 2 86 C7 stx TXTPTR | |
0008B1r 2 A9 00 lda #$00 | |
0008B3r 2 85 0A sta CHARAC | |
0008B5r 2 F0 0C beq L2B1C | |
0008B7r 2 .endif | |
0008B7r 2 L2B10: | |
0008B7r 2 .endif | |
0008B7r 2 85 0A sta CHARAC | |
0008B9r 2 C9 22 cmp #$22 | |
0008BBr 2 F0 07 beq L2B1D | |
0008BDr 2 A9 3A lda #$3A | |
0008BFr 2 85 0A sta CHARAC | |
0008C1r 2 A9 2C lda #$2C | |
0008C3r 2 L2B1C: | |
0008C3r 2 18 clc | |
0008C4r 2 L2B1D: | |
0008C4r 2 85 0B sta ENDCHR | |
0008C6r 2 A5 C7 lda TXTPTR | |
0008C8r 2 A4 C8 ldy TXTPTR+1 | |
0008CAr 2 69 00 adc #$00 | |
0008CCr 2 90 01 bcc L2B28 | |
0008CEr 2 C8 iny | |
0008CFr 2 L2B28: | |
0008CFr 2 20 rr rr jsr STRLT2 | |
0008D2r 2 20 rr rr jsr POINT | |
0008D5r 2 .ifdef CONFIG_SMALL | |
0008D5r 2 jsr LETSTRING | |
0008D5r 2 .else | |
0008D5r 2 20 rr rr jsr PUTSTR | |
0008D8r 2 .endif | |
0008D8r 2 4C rr rr jmp INPUT_MORE | |
0008DBr 2 ; ---------------------------------------------------------------------------- | |
0008DBr 2 L2B34: | |
0008DBr 2 20 rr rr jsr FIN | |
0008DEr 2 .ifdef CONFIG_SMALL | |
0008DEr 2 jsr SETFOR | |
0008DEr 2 .else | |
0008DEr 2 A5 0F lda VALTYP+1 | |
0008E0r 2 20 rr rr jsr LET2 | |
0008E3r 2 .endif | |
0008E3r 2 ; ---------------------------------------------------------------------------- | |
0008E3r 2 INPUT_MORE: | |
0008E3r 2 20 C6 00 jsr CHRGOT | |
0008E6r 2 F0 07 beq L2B48 | |
0008E8r 2 C9 2C cmp #$2C | |
0008EAr 2 F0 03 beq L2B48 | |
0008ECr 2 4C rr rr jmp INPUTERR | |
0008EFr 2 L2B48: | |
0008EFr 2 A5 C7 lda TXTPTR | |
0008F1r 2 A4 C8 ldy TXTPTR+1 | |
0008F3r 2 85 90 sta INPTR | |
0008F5r 2 84 91 sty INPTR+1 | |
0008F7r 2 A5 19 lda TXPSV | |
0008F9r 2 A4 1A ldy TXPSV+1 | |
0008FBr 2 85 C7 sta TXTPTR | |
0008FDr 2 84 C8 sty TXTPTR+1 | |
0008FFr 2 20 C6 00 jsr CHRGOT | |
000902r 2 F0 2C beq INPDONE | |
000904r 2 20 rr rr jsr CHKCOM | |
000907r 2 4C rr rr jmp PROCESS_INPUT_ITEM | |
00090Ar 2 ; ---------------------------------------------------------------------------- | |
00090Ar 2 FINDATA: | |
00090Ar 2 20 rr rr jsr DATAN | |
00090Dr 2 C8 iny | |
00090Er 2 AA tax | |
00090Fr 2 D0 12 bne L2B7C | |
000911r 2 A2 2A ldx #ERR_NODATA | |
000913r 2 C8 iny | |
000914r 2 B1 C7 lda (TXTPTR),y | |
000916r 2 F0 69 beq GERR | |
000918r 2 C8 iny | |
000919r 2 B1 C7 lda (TXTPTR),y | |
00091Br 2 85 8C sta Z8C | |
00091Dr 2 C8 iny | |
00091Er 2 B1 C7 lda (TXTPTR),y | |
000920r 2 C8 iny | |
000921r 2 85 8D sta Z8C+1 | |
000923r 2 L2B7C: | |
000923r 2 B1 C7 lda (TXTPTR),y | |
000925r 2 AA tax | |
000926r 2 20 rr rr jsr ADDON | |
000929r 2 E0 83 cpx #$83 | |
00092Br 2 D0 DD bne FINDATA | |
00092Dr 2 4C rr rr jmp INSTART | |
000930r 2 ; ---NO MORE INPUT REQUESTED------ | |
000930r 2 INPDONE: | |
000930r 2 A5 90 lda INPTR | |
000932r 2 A4 91 ldy INPTR+1 | |
000934r 2 A6 12 ldx INPUTFLG | |
000936r 2 .if .def(CONFIG_SMALL) && (!.def(CONFIG_11)) | |
000936r 2 beq L2B94 ; INPUT | |
000936r 2 .else | |
000936r 2 10 03 bpl L2B94; INPUT or GET | |
000938r 2 .endif | |
000938r 2 4C rr rr jmp SETDA | |
00093Br 2 L2B94: | |
00093Br 2 A0 00 ldy #$00 | |
00093Dr 2 B1 90 lda (INPTR),y | |
00093Fr 2 F0 07 beq L2BA1 | |
000941r 2 .ifdef CONFIG_FILE | |
000941r 2 lda CURDVC | |
000941r 2 bne L2BA1 | |
000941r 2 .endif | |
000941r 2 A9 rr lda #<ERREXTRA | |
000943r 2 A0 rr ldy #>ERREXTRA | |
000945r 2 4C rr rr jmp STROUT | |
000948r 2 L2BA1: | |
000948r 2 60 rts | |
000949r 2 | |
000949r 2 ; ---------------------------------------------------------------------------- | |
000949r 2 ERREXTRA: | |
000949r 2 .ifdef KBD | |
000949r 2 .byte "?Extra" | |
000949r 2 .else | |
000949r 2 3F 45 58 54 .byte "?EXTRA IGNORED" | |
00094Dr 2 52 41 20 49 | |
000951r 2 47 4E 4F 52 | |
000957r 2 .endif | |
000957r 2 0D 0A 00 .byte $0D,$0A,$00 | |
00095Ar 2 ERRREENTRY: | |
00095Ar 2 .ifdef KBD | |
00095Ar 2 .byte "What?" | |
00095Ar 2 .else | |
00095Ar 2 3F 52 45 44 .byte "?REDO FROM START" | |
00095Er 2 4F 20 46 52 | |
000962r 2 4F 4D 20 53 | |
00096Ar 2 .endif | |
00096Ar 2 0D 0A 00 .byte $0D,$0A,$00 | |
00096Dr 2 .ifdef KBD | |
00096Dr 2 LEA30: | |
00096Dr 2 .byte "B" | |
00096Dr 2 .byte $FD | |
00096Dr 2 .byte "GsBASIC" | |
00096Dr 2 .byte $00,$1B,$0D,$13 | |
00096Dr 2 .byte " BASIC" | |
00096Dr 2 .endif | |
00096Dr 2 | |
00096Dr 1 .include "eval.s" | |
00096Dr 2 .segment "CODE" | |
00096Dr 2 | |
00096Dr 2 ; ---------------------------------------------------------------------------- | |
00096Dr 2 ; "NEXT" STATEMENT | |
00096Dr 2 ; ---------------------------------------------------------------------------- | |
00096Dr 2 NEXT: | |
00096Dr 2 D0 04 bne NEXT1 | |
00096Fr 2 A0 00 ldy #$00 | |
000971r 2 F0 03 beq NEXT2 | |
000973r 2 NEXT1: | |
000973r 2 20 rr rr jsr PTRGET | |
000976r 2 NEXT2: | |
000976r 2 85 96 sta FORPNT | |
000978r 2 84 97 sty FORPNT+1 | |
00097Ar 2 20 rr rr jsr GTFORPNT | |
00097Dr 2 F0 04 beq NEXT3 | |
00097Fr 2 A2 00 ldx #$00 | |
000981r 2 GERR: | |
000981r 2 F0 69 beq JERROR | |
000983r 2 NEXT3: | |
000983r 2 9A txs | |
000984r 2 .ifndef CONFIG_2 | |
000984r 2 E8 inx | |
000985r 2 E8 inx | |
000986r 2 E8 inx | |
000987r 2 E8 inx | |
000988r 2 .endif | |
000988r 2 8A txa | |
000989r 2 .ifdef CONFIG_2 | |
000989r 2 clc | |
000989r 2 adc #$04 | |
000989r 2 pha | |
000989r 2 adc #BYTES_FP+1 | |
000989r 2 sta DEST | |
000989r 2 pla | |
000989r 2 .else | |
000989r 2 E8 inx | |
00098Ar 2 E8 inx | |
00098Br 2 E8 inx | |
00098Cr 2 E8 inx | |
00098Dr 2 E8 inx | |
00098Er 2 .ifndef CONFIG_SMALL | |
00098Er 2 E8 inx | |
00098Fr 2 .endif | |
00098Fr 2 86 71 stx DEST | |
000991r 2 .endif | |
000991r 2 A0 01 ldy #>STACK | |
000993r 2 20 rr rr jsr LOAD_FAC_FROM_YA | |
000996r 2 BA tsx | |
000997r 2 BD 09 01 lda STACK+BYTES_FP+4,x | |
00099Ar 2 85 B3 sta FACSIGN | |
00099Cr 2 A5 96 lda FORPNT | |
00099Er 2 A4 97 ldy FORPNT+1 | |
0009A0r 2 20 rr rr jsr FADD | |
0009A3r 2 20 rr rr jsr SETFOR | |
0009A6r 2 A0 01 ldy #>STACK | |
0009A8r 2 20 rr rr jsr FCOMP2 | |
0009ABr 2 BA tsx | |
0009ACr 2 38 sec | |
0009ADr 2 FD 09 01 sbc STACK+BYTES_FP+4,x | |
0009B0r 2 F0 17 beq L2C22 | |
0009B2r 2 BD 0F 01 lda STACK+2*BYTES_FP+5,x | |
0009B5r 2 85 86 sta CURLIN | |
0009B7r 2 BD 10 01 lda STACK+2*BYTES_FP+6,x | |
0009BAr 2 85 87 sta CURLIN+1 | |
0009BCr 2 BD 12 01 lda STACK+2*BYTES_FP+8,x | |
0009BFr 2 85 C7 sta TXTPTR | |
0009C1r 2 BD 11 01 lda STACK+2*BYTES_FP+7,x | |
0009C4r 2 85 C8 sta TXTPTR+1 | |
0009C6r 2 L2C1F: | |
0009C6r 2 4C rr rr jmp NEWSTT | |
0009C9r 2 L2C22: | |
0009C9r 2 8A txa | |
0009CAr 2 69 11 adc #2*BYTES_FP+7 | |
0009CCr 2 AA tax | |
0009CDr 2 9A txs | |
0009CEr 2 20 C6 00 jsr CHRGOT | |
0009D1r 2 C9 2C cmp #$2C | |
0009D3r 2 D0 F1 bne L2C1F | |
0009D5r 2 20 C0 00 jsr CHRGET | |
0009D8r 2 20 rr rr jsr NEXT1 | |
0009DBr 2 | |
0009DBr 2 ; ---------------------------------------------------------------------------- | |
0009DBr 2 ; EVALUATE EXPRESSION, MAKE SURE IT IS NUMERIC | |
0009DBr 2 ; ---------------------------------------------------------------------------- | |
0009DBr 2 FRMNUM: | |
0009DBr 2 20 rr rr jsr FRMEVL | |
0009DEr 2 | |
0009DEr 2 ; ---------------------------------------------------------------------------- | |
0009DEr 2 ; MAKE SURE (FAC) IS NUMERIC | |
0009DEr 2 ; ---------------------------------------------------------------------------- | |
0009DEr 2 CHKNUM: | |
0009DEr 2 18 clc | |
0009DFr 2 24 .byte $24 | |
0009E0r 2 | |
0009E0r 2 ; ---------------------------------------------------------------------------- | |
0009E0r 2 ; MAKE SURE (FAC) IS STRING | |
0009E0r 2 ; ---------------------------------------------------------------------------- | |
0009E0r 2 CHKSTR: | |
0009E0r 2 38 sec | |
0009E1r 2 | |
0009E1r 2 ; ---------------------------------------------------------------------------- | |
0009E1r 2 ; MAKE SURE (FAC) IS CORRECT TYPE | |
0009E1r 2 ; IF C=0, TYPE MUST BE NUMERIC | |
0009E1r 2 ; IF C=1, TYPE MUST BE STRING | |
0009E1r 2 ; ---------------------------------------------------------------------------- | |
0009E1r 2 CHKVAL: | |
0009E1r 2 24 0E bit VALTYP | |
0009E3r 2 30 03 bmi L2C41 | |
0009E5r 2 B0 03 bcs L2C43 | |
0009E7r 2 L2C40: | |
0009E7r 2 60 rts | |
0009E8r 2 L2C41: | |
0009E8r 2 B0 FD bcs L2C40 | |
0009EAr 2 L2C43: | |
0009EAr 2 A2 A3 ldx #ERR_BADTYPE | |
0009ECr 2 JERROR: | |
0009ECr 2 4C rr rr jmp ERROR | |
0009EFr 2 | |
0009EFr 2 ; ---------------------------------------------------------------------------- | |
0009EFr 2 ; EVALUATE THE EXPRESSION AT TXTPTR, LEAVING THE | |
0009EFr 2 ; RESULT IN FAC. WORKS FOR BOTH STRING AND NUMERIC | |
0009EFr 2 ; EXPRESSIONS. | |
0009EFr 2 ; ---------------------------------------------------------------------------- | |
0009EFr 2 FRMEVL: | |
0009EFr 2 A6 C7 ldx TXTPTR | |
0009F1r 2 D0 02 bne L2C4E | |
0009F3r 2 C6 C8 dec TXTPTR+1 | |
0009F5r 2 L2C4E: | |
0009F5r 2 C6 C7 dec TXTPTR | |
0009F7r 2 A2 00 ldx #$00 | |
0009F9r 2 24 .byte $24 | |
0009FAr 2 FRMEVL1: | |
0009FAr 2 48 pha | |
0009FBr 2 8A txa | |
0009FCr 2 48 pha | |
0009FDr 2 A9 01 lda #$01 | |
0009FFr 2 20 rr rr jsr CHKMEM | |
000A02r 2 20 rr rr jsr FRM_ELEMENT | |
000A05r 2 A9 00 lda #$00 | |
000A07r 2 85 9A sta CPRTYP | |
000A09r 2 FRMEVL2: | |
000A09r 2 20 C6 00 jsr CHRGOT | |
000A0Cr 2 L2C65: | |
000A0Cr 2 38 sec | |
000A0Dr 2 E9 AB sbc #TOKEN_GREATER | |
000A0Fr 2 90 17 bcc L2C81 | |
000A11r 2 C9 03 cmp #$03 | |
000A13r 2 B0 13 bcs L2C81 | |
000A15r 2 C9 01 cmp #$01 | |
000A17r 2 2A rol a | |
000A18r 2 49 01 eor #$01 | |
000A1Ar 2 45 9A eor CPRTYP | |
000A1Cr 2 C5 9A cmp CPRTYP | |
000A1Er 2 90 61 bcc SNTXERR | |
000A20r 2 85 9A sta CPRTYP | |
000A22r 2 20 C0 00 jsr CHRGET | |
000A25r 2 4C rr rr jmp L2C65 | |
000A28r 2 L2C81: | |
000A28r 2 A6 9A ldx CPRTYP | |
000A2Ar 2 D0 2C bne FRM_RELATIONAL | |
000A2Cr 2 B0 7B bcs L2D02 | |
000A2Er 2 69 07 adc #$07 | |
000A30r 2 90 77 bcc L2D02 | |
000A32r 2 65 0E adc VALTYP | |
000A34r 2 D0 03 bne L2C92 | |
000A36r 2 4C rr rr jmp CAT | |
000A39r 2 L2C92: | |
000A39r 2 69 FF adc #$FF | |
000A3Br 2 85 6F sta INDEX | |
000A3Dr 2 0A asl a | |
000A3Er 2 65 6F adc INDEX | |
000A40r 2 A8 tay | |
000A41r 2 FRM_PRECEDENCE_TEST: | |
000A41r 2 68 pla | |
000A42r 2 D9 rr rr cmp MATHTBL,y | |
000A45r 2 B0 67 bcs FRM_PERFORM1 | |
000A47r 2 20 rr rr jsr CHKNUM | |
000A4Ar 2 L2CA3: | |
000A4Ar 2 48 pha | |
000A4Br 2 L2CA4: | |
000A4Br 2 20 rr rr jsr FRM_RECURSE | |
000A4Er 2 68 pla | |
000A4Fr 2 A4 98 ldy LASTOP | |
000A51r 2 10 17 bpl PREFNC | |
000A53r 2 AA tax | |
000A54r 2 F0 56 beq GOEX | |
000A56r 2 D0 5F bne FRM_PERFORM2 | |
000A58r 2 | |
000A58r 2 ; ---------------------------------------------------------------------------- | |
000A58r 2 ; FOUND ONE OR MORE RELATIONAL OPERATORS <,=,> | |
000A58r 2 ; ---------------------------------------------------------------------------- | |
000A58r 2 FRM_RELATIONAL: | |
000A58r 2 46 0E lsr VALTYP | |
000A5Ar 2 8A txa | |
000A5Br 2 2A rol a | |
000A5Cr 2 A6 C7 ldx TXTPTR | |
000A5Er 2 D0 02 bne L2CBB | |
000A60r 2 C6 C8 dec TXTPTR+1 | |
000A62r 2 L2CBB: | |
000A62r 2 C6 C7 dec TXTPTR | |
000A64r 2 A0 1B ldy #$1B | |
000A66r 2 85 9A sta CPRTYP | |
000A68r 2 D0 D7 bne FRM_PRECEDENCE_TEST | |
000A6Ar 2 PREFNC: | |
000A6Ar 2 D9 rr rr cmp MATHTBL,y | |
000A6Dr 2 B0 48 bcs FRM_PERFORM2 | |
000A6Fr 2 90 D9 bcc L2CA3 | |
000A71r 2 | |
000A71r 2 ; ---------------------------------------------------------------------------- | |
000A71r 2 ; STACK THIS OPERATION AND CALL FRMEVL FOR | |
000A71r 2 ; ANOTHER ONE | |
000A71r 2 ; ---------------------------------------------------------------------------- | |
000A71r 2 FRM_RECURSE: | |
000A71r 2 B9 rr rr lda MATHTBL+2,y | |
000A74r 2 48 pha | |
000A75r 2 B9 rr rr lda MATHTBL+1,y | |
000A78r 2 48 pha | |
000A79r 2 20 rr rr jsr FRM_STACK1 | |
000A7Cr 2 A5 9A lda CPRTYP | |
000A7Er 2 4C rr rr jmp FRMEVL1 | |
000A81r 2 SNTXERR: | |
000A81r 2 4C rr rr jmp SYNERR | |
000A84r 2 | |
000A84r 2 ; ---------------------------------------------------------------------------- | |
000A84r 2 ; STACK (FAC) | |
000A84r 2 ; THREE ENTRY POINTS: | |
000A84r 2 ; 1, FROM FRMEVL | |
000A84r 2 ; 2, FROM "STEP" | |
000A84r 2 ; 3, FROM "FOR" | |
000A84r 2 ; ---------------------------------------------------------------------------- | |
000A84r 2 FRM_STACK1: | |
000A84r 2 A5 B3 lda FACSIGN | |
000A86r 2 BE rr rr ldx MATHTBL,y | |
000A89r 2 | |
000A89r 2 ; ---------------------------------------------------------------------------- | |
000A89r 2 ; ENTER HERE FROM "STEP", TO PUSH STEP SIGN AND VALUE | |
000A89r 2 ; ---------------------------------------------------------------------------- | |
000A89r 2 FRM_STACK2: | |
000A89r 2 A8 tay | |
000A8Ar 2 68 pla | |
000A8Br 2 85 6F sta INDEX | |
000A8Dr 2 .ifndef CONFIG_2B | |
000A8Dr 2 E6 6F inc INDEX ; bug: assumes not on page boundary | |
000A8Fr 2 ; bug exists on AppleSoft II | |
000A8Fr 2 .endif | |
000A8Fr 2 68 pla | |
000A90r 2 85 70 sta INDEX+1 | |
000A92r 2 .ifdef CONFIG_2B | |
000A92r 2 inc INDEX | |
000A92r 2 bne LEB69 | |
000A92r 2 inc INDEX+1 | |
000A92r 2 LEB69: | |
000A92r 2 .endif | |
000A92r 2 98 tya | |
000A93r 2 48 pha | |
000A94r 2 | |
000A94r 2 ; ---------------------------------------------------------------------------- | |
000A94r 2 ; ENTER HERE FROM "FOR", WITH (INDEX) = STEP, | |
000A94r 2 ; TO PUSH INITIAL VALUE OF "FOR" VARIABLE | |
000A94r 2 ; ---------------------------------------------------------------------------- | |
000A94r 2 FRM_STACK3: | |
000A94r 2 20 rr rr jsr ROUND_FAC | |
000A97r 2 .ifndef CONFIG_SMALL | |
000A97r 2 A5 B2 lda FAC+4 | |
000A99r 2 48 pha | |
000A9Ar 2 .endif | |
000A9Ar 2 A5 B1 lda FAC+3 | |
000A9Cr 2 48 pha | |
000A9Dr 2 A5 B0 lda FAC+2 | |
000A9Fr 2 48 pha | |
000AA0r 2 A5 AF lda FAC+1 | |
000AA2r 2 48 pha | |
000AA3r 2 A5 AE lda FAC | |
000AA5r 2 48 pha | |
000AA6r 2 6C 6F 00 jmp (INDEX) | |
000AA9r 2 L2D02: | |
000AA9r 2 A0 FF ldy #$FF | |
000AABr 2 68 pla | |
000AACr 2 GOEX: | |
000AACr 2 F0 23 beq EXIT | |
000AAEr 2 | |
000AAEr 2 ; ---------------------------------------------------------------------------- | |
000AAEr 2 ; PERFORM STACKED OPERATION | |
000AAEr 2 ; | |
000AAEr 2 ; (A) = PRECEDENCE BYTE | |
000AAEr 2 ; STACK: 1 -- CPRMASK | |
000AAEr 2 ; 5 -- (ARG) | |
000AAEr 2 ; 2 -- ADDR OF PERFORMER | |
000AAEr 2 ; ---------------------------------------------------------------------------- | |
000AAEr 2 FRM_PERFORM1: | |
000AAEr 2 C9 64 cmp #$64 | |
000AB0r 2 F0 03 beq L2D0E | |
000AB2r 2 20 rr rr jsr CHKNUM | |
000AB5r 2 L2D0E: | |
000AB5r 2 84 98 sty LASTOP | |
000AB7r 2 FRM_PERFORM2: | |
000AB7r 2 68 pla | |
000AB8r 2 4A lsr a | |
000AB9r 2 85 13 sta CPRMASK | |
000ABBr 2 68 pla | |
000ABCr 2 85 B6 sta ARG | |
000ABEr 2 68 pla | |
000ABFr 2 85 B7 sta ARG+1 | |
000AC1r 2 68 pla | |
000AC2r 2 85 B8 sta ARG+2 | |
000AC4r 2 68 pla | |
000AC5r 2 85 B9 sta ARG+3 | |
000AC7r 2 68 pla | |
000AC8r 2 .ifndef CONFIG_SMALL | |
000AC8r 2 85 BA sta ARG+4 | |
000ACAr 2 68 pla | |
000ACBr 2 .endif | |
000ACBr 2 85 BB sta ARGSIGN | |
000ACDr 2 45 B3 eor FACSIGN | |
000ACFr 2 85 BC sta SGNCPR | |
000AD1r 2 EXIT: | |
000AD1r 2 A5 AE lda FAC | |
000AD3r 2 60 rts | |
000AD4r 2 | |
000AD4r 2 ; ---------------------------------------------------------------------------- | |
000AD4r 2 ; GET ELEMENT IN EXPRESSION | |
000AD4r 2 ; | |
000AD4r 2 ; GET VALUE OF VARIABLE OR NUMBER AT TXTPNT, OR POINT | |
000AD4r 2 ; TO STRING DESCRIPTOR IF A STRING, AND PUT IN FAC. | |
000AD4r 2 ; ---------------------------------------------------------------------------- | |
000AD4r 2 FRM_ELEMENT: | |
000AD4r 2 A9 00 lda #$00 | |
000AD6r 2 85 0E sta VALTYP | |
000AD8r 2 L2D31: | |
000AD8r 2 20 C0 00 jsr CHRGET | |
000ADBr 2 B0 03 bcs L2D39 | |
000ADDr 2 L2D36: | |
000ADDr 2 4C rr rr jmp FIN | |
000AE0r 2 L2D39: | |
000AE0r 2 20 rr rr jsr ISLETC | |
000AE3r 2 B0 67 bcs FRM_VARIABLE | |
000AE5r 2 .ifdef CONFIG_CBM_ALL | |
000AE5r 2 cmp #$FF | |
000AE5r 2 bne LCDC1 | |
000AE5r 2 lda #<CON_PI | |
000AE5r 2 ldy #>CON_PI | |
000AE5r 2 jsr LOAD_FAC_FROM_YA | |
000AE5r 2 jmp CHRGET | |
000AE5r 2 CON_PI: | |
000AE5r 2 .byte $82,$49,$0f,$DA,$A1 | |
000AE5r 2 LCDC1: | |
000AE5r 2 .endif | |
000AE5r 2 C9 2E cmp #$2E | |
000AE7r 2 F0 F4 beq L2D36 | |
000AE9r 2 C9 A5 cmp #TOKEN_MINUS | |
000AEBr 2 F0 58 beq MIN | |
000AEDr 2 C9 A4 cmp #TOKEN_PLUS | |
000AEFr 2 F0 E7 beq L2D31 | |
000AF1r 2 C9 22 cmp #$22 | |
000AF3r 2 D0 0F bne NOT_ | |
000AF5r 2 | |
000AF5r 2 ; ---------------------------------------------------------------------------- | |
000AF5r 2 ; STRING CONSTANT ELEMENT | |
000AF5r 2 ; | |
000AF5r 2 ; SET Y,A = (TXTPTR)+CARRY | |
000AF5r 2 ; ---------------------------------------------------------------------------- | |
000AF5r 2 STRTXT: | |
000AF5r 2 A5 C7 lda TXTPTR | |
000AF7r 2 A4 C8 ldy TXTPTR+1 | |
000AF9r 2 69 00 adc #$00 | |
000AFBr 2 90 01 bcc L2D57 | |
000AFDr 2 C8 iny | |
000AFEr 2 L2D57: | |
000AFEr 2 20 rr rr jsr STRLIT | |
000B01r 2 4C rr rr jmp POINT | |
000B04r 2 | |
000B04r 2 ; ---------------------------------------------------------------------------- | |
000B04r 2 ; "NOT" FUNCTION | |
000B04r 2 ; IF FAC=0, RETURN FAC=1 | |
000B04r 2 ; IF FAC<>0, RETURN FAC=0 | |
000B04r 2 ; ---------------------------------------------------------------------------- | |
000B04r 2 NOT_: | |
000B04r 2 C9 A2 cmp #TOKEN_NOT | |
000B06r 2 D0 13 bne L2D74 | |
000B08r 2 A0 18 ldy #$18 | |
000B0Ar 2 D0 3B bne EQUL | |
000B0Cr 2 | |
000B0Cr 2 ; ---------------------------------------------------------------------------- | |
000B0Cr 2 ; COMPARISON FOR EQUALITY (= OPERATOR) | |
000B0Cr 2 ; ALSO USED TO EVALUATE "NOT" FUNCTION | |
000B0Cr 2 ; ---------------------------------------------------------------------------- | |
000B0Cr 2 EQUOP: | |
000B0Cr 2 20 rr rr jsr AYINT | |
000B0Fr 2 A5 B2 lda FAC_LAST | |
000B11r 2 49 FF eor #$FF | |
000B13r 2 A8 tay | |
000B14r 2 A5 B1 lda FAC_LAST-1 | |
000B16r 2 49 FF eor #$FF | |
000B18r 2 4C rr rr jmp GIVAYF | |
000B1Br 2 L2D74: | |
000B1Br 2 C9 9F cmp #TOKEN_FN | |
000B1Dr 2 D0 03 bne L2D7B | |
000B1Fr 2 4C rr rr jmp L31F3 | |
000B22r 2 L2D7B: | |
000B22r 2 C9 AE cmp #TOKEN_SGN | |
000B24r 2 90 03 bcc PARCHK | |
000B26r 2 4C rr rr jmp UNARY | |
000B29r 2 | |
000B29r 2 ; ---------------------------------------------------------------------------- | |
000B29r 2 ; EVALUATE "(EXPRESSION)" | |
000B29r 2 ; ---------------------------------------------------------------------------- | |
000B29r 2 PARCHK: | |
000B29r 2 20 rr rr jsr CHKOPN | |
000B2Cr 2 20 rr rr jsr FRMEVL | |
000B2Fr 2 CHKCLS: | |
000B2Fr 2 A9 29 lda #$29 | |
000B31r 2 2C .byte $2C | |
000B32r 2 CHKOPN: | |
000B32r 2 A9 28 lda #$28 | |
000B34r 2 2C .byte $2C | |
000B35r 2 CHKCOM: | |
000B35r 2 A9 2C lda #$2C | |
000B37r 2 | |
000B37r 2 ; ---------------------------------------------------------------------------- | |
000B37r 2 ; UNLESS CHAR AT TXTPTR = (A), SYNTAX ERROR | |
000B37r 2 ; ---------------------------------------------------------------------------- | |
000B37r 2 SYNCHR: ; XXX all CBM code calls SYNCHR instead of CHKCOM | |
000B37r 2 A0 00 ldy #$00 | |
000B39r 2 D1 C7 cmp (TXTPTR),y | |
000B3Br 2 D0 03 bne SYNERR | |
000B3Dr 2 4C C0 00 jmp CHRGET | |
000B40r 2 ; ---------------------------------------------------------------------------- | |
000B40r 2 SYNERR: | |
000B40r 2 A2 10 ldx #ERR_SYNTAX | |
000B42r 2 4C rr rr jmp ERROR | |
000B45r 2 ; ---------------------------------------------------------------------------- | |
000B45r 2 MIN: | |
000B45r 2 A0 15 ldy #$15 | |
000B47r 2 EQUL: | |
000B47r 2 68 pla | |
000B48r 2 68 pla | |
000B49r 2 4C rr rr jmp L2CA4 | |
000B4Cr 2 ; ---------------------------------------------------------------------------- | |
000B4Cr 2 FRM_VARIABLE: | |
000B4Cr 2 20 rr rr jsr PTRGET | |
000B4Fr 2 FRM_VARIABLE_CALL = *-1 | |
000B4Fr 2 85 B1 sta FAC_LAST-1 | |
000B51r 2 84 B2 sty FAC_LAST | |
000B53r 2 .ifdef CONFIG_CBM_ALL | |
000B53r 2 lda VARNAM | |
000B53r 2 ldy VARNAM+1 | |
000B53r 2 .endif | |
000B53r 2 A6 0E ldx VALTYP | |
000B55r 2 F0 01 beq L2DB1 | |
000B57r 2 .ifdef CONFIG_CBM_ALL | |
000B57r 2 .ifdef CONFIG_CBM1_PATCHES | |
000B57r 2 jmp PATCH2 | |
000B57r 2 clc | |
000B57r 2 LCE3B: | |
000B57r 2 .else | |
000B57r 2 ldx #$00 | |
000B57r 2 stx STRNG1+1 | |
000B57r 2 bit FAC+4 | |
000B57r 2 bpl LCE53 | |
000B57r 2 cmp #$54 ; T | |
000B57r 2 bne LCE53 | |
000B57r 2 .endif | |
000B57r 2 cpy #$C9 ; I$ | |
000B57r 2 bne LCE53 | |
000B57r 2 jsr LCE76 | |
000B57r 2 sty EXPON | |
000B57r 2 dey | |
000B57r 2 sty STRNG2 | |
000B57r 2 ldy #$06 | |
000B57r 2 sty INDX | |
000B57r 2 ldy #$24 | |
000B57r 2 jsr LDD3A | |
000B57r 2 jmp LD353 | |
000B57r 2 LCE53: | |
000B57r 2 .endif | |
000B57r 2 .ifdef CONFIG_2 | |
000B57r 2 .ifndef CBM2 | |
000B57r 2 ; bugfix? | |
000B57r 2 ; fixed on AppleSoft II, not on any CBM | |
000B57r 2 ldx #$00 | |
000B57r 2 stx STRNG1+1 | |
000B57r 2 .endif | |
000B57r 2 .endif | |
000B57r 2 60 rts | |
000B58r 2 L2DB1: | |
000B58r 2 .ifndef CONFIG_SMALL | |
000B58r 2 A6 0F ldx VALTYP+1 | |
000B5Ar 2 10 0D bpl L2DC2 | |
000B5Cr 2 A0 00 ldy #$00 | |
000B5Er 2 B1 B1 lda (FAC+3),y | |
000B60r 2 AA tax | |
000B61r 2 C8 iny | |
000B62r 2 B1 B1 lda (FAC+3),y | |
000B64r 2 A8 tay | |
000B65r 2 8A txa | |
000B66r 2 4C rr rr jmp GIVAYF | |
000B69r 2 L2DC2: | |
000B69r 2 .endif | |
000B69r 2 .ifdef CONFIG_CBM1_PATCHES | |
000B69r 2 jmp PATCH3 | |
000B69r 2 .byte $19 | |
000B69r 2 .endif | |
000B69r 2 .ifdef CBM2 | |
000B69r 2 bit FAC+4 | |
000B69r 2 bpl LCE90 | |
000B69r 2 cmp #$54 | |
000B69r 2 bne LCE82 | |
000B69r 2 .endif | |
000B69r 2 .ifndef CONFIG_CBM_ALL | |
000B69r 2 4C rr rr jmp LOAD_FAC_FROM_YA | |
000B6Cr 2 .endif | |
000B6Cr 2 .ifdef CONFIG_CBM_ALL | |
000B6Cr 2 LCE69: | |
000B6Cr 2 cpy #$49 | |
000B6Cr 2 .ifdef CBM1 | |
000B6Cr 2 bne LCE82 | |
000B6Cr 2 .else | |
000B6Cr 2 bne LCE90 | |
000B6Cr 2 .endif | |
000B6Cr 2 jsr LCE76 | |
000B6Cr 2 tya | |
000B6Cr 2 ldx #$A0 | |
000B6Cr 2 jmp LDB21 | |
000B6Cr 2 LCE76: | |
000B6Cr 2 .ifdef CBM1 | |
000B6Cr 2 lda #$FE | |
000B6Cr 2 ldy #$01 | |
000B6Cr 2 .else | |
000B6Cr 2 lda #$8B | |
000B6Cr 2 ldy #$00 | |
000B6Cr 2 .endif | |
000B6Cr 2 sei | |
000B6Cr 2 jsr LOAD_FAC_FROM_YA | |
000B6Cr 2 cli | |
000B6Cr 2 sty FAC+1 | |
000B6Cr 2 rts | |
000B6Cr 2 LCE82: | |
000B6Cr 2 cmp #$53 | |
000B6Cr 2 bne LCE90 | |
000B6Cr 2 cpy #$54 | |
000B6Cr 2 bne LCE90 | |
000B6Cr 2 lda Z96 | |
000B6Cr 2 jmp FLOAT | |
000B6Cr 2 LCE90: | |
000B6Cr 2 lda FAC+3 | |
000B6Cr 2 ldy FAC+4 | |
000B6Cr 2 jmp LOAD_FAC_FROM_YA | |
000B6Cr 2 .endif | |
000B6Cr 2 | |
000B6Cr 2 ; ---------------------------------------------------------------------------- | |
000B6Cr 2 UNARY: | |
000B6Cr 2 0A asl a | |
000B6Dr 2 48 pha | |
000B6Er 2 AA tax | |
000B6Fr 2 20 C0 00 jsr CHRGET | |
000B72r 2 E0 83 cpx #<(TOKEN_LEFTSTR*2-1) | |
000B74r 2 90 20 bcc L2DEF | |
000B76r 2 20 rr rr jsr CHKOPN | |
000B79r 2 20 rr rr jsr FRMEVL | |
000B7Cr 2 20 rr rr jsr CHKCOM | |
000B7Fr 2 20 rr rr jsr CHKSTR | |
000B82r 2 68 pla | |
000B83r 2 AA tax | |
000B84r 2 A5 B2 lda FAC_LAST | |
000B86r 2 48 pha | |
000B87r 2 A5 B1 lda FAC_LAST-1 | |
000B89r 2 48 pha | |
000B8Ar 2 8A txa | |
000B8Br 2 48 pha | |
000B8Cr 2 20 rr rr jsr GETBYT | |
000B8Fr 2 68 pla | |
000B90r 2 A8 tay | |
000B91r 2 8A txa | |
000B92r 2 48 pha | |
000B93r 2 4C rr rr jmp L2DF4 | |
000B96r 2 L2DEF: | |
000B96r 2 20 rr rr jsr PARCHK | |
000B99r 2 68 pla | |
000B9Ar 2 A8 tay | |
000B9Br 2 L2DF4: | |
000B9Br 2 B9 rr rr lda UNFNC-TOKEN_SGN-TOKEN_SGN+$100,y | |
000B9Er 2 85 A2 sta JMPADRS+1 | |
000BA0r 2 B9 rr rr lda UNFNC-TOKEN_SGN-TOKEN_SGN+$101,y | |
000BA3r 2 85 A3 sta JMPADRS+2 | |
000BA5r 2 .ifdef KBD | |
000BA5r 2 jsr LF47D | |
000BA5r 2 .else | |
000BA5r 2 20 A1 00 jsr JMPADRS | |
000BA8r 2 .endif | |
000BA8r 2 4C rr rr jmp CHKNUM | |
000BABr 2 | |
000BABr 2 ; ---------------------------------------------------------------------------- | |
000BABr 2 OR: | |
000BABr 2 A0 FF ldy #$FF | |
000BADr 2 2C .byte $2C | |
000BAEr 2 ; ---------------------------------------------------------------------------- | |
000BAEr 2 TAND: | |
000BAEr 2 A0 00 ldy #$00 | |
000BB0r 2 84 0C sty EOLPNTR | |
000BB2r 2 20 rr rr jsr AYINT | |
000BB5r 2 A5 B1 lda FAC_LAST-1 | |
000BB7r 2 45 0C eor EOLPNTR | |
000BB9r 2 85 0A sta CHARAC | |
000BBBr 2 A5 B2 lda FAC_LAST | |
000BBDr 2 45 0C eor EOLPNTR | |
000BBFr 2 85 0B sta ENDCHR | |
000BC1r 2 20 rr rr jsr COPY_ARG_TO_FAC | |
000BC4r 2 20 rr rr jsr AYINT | |
000BC7r 2 A5 B2 lda FAC_LAST | |
000BC9r 2 45 0C eor EOLPNTR | |
000BCBr 2 25 0B and ENDCHR | |
000BCDr 2 45 0C eor EOLPNTR | |
000BCFr 2 A8 tay | |
000BD0r 2 A5 B1 lda FAC_LAST-1 | |
000BD2r 2 45 0C eor EOLPNTR | |
000BD4r 2 25 0A and CHARAC | |
000BD6r 2 45 0C eor EOLPNTR | |
000BD8r 2 4C rr rr jmp GIVAYF | |
000BDBr 2 | |
000BDBr 2 ; ---------------------------------------------------------------------------- | |
000BDBr 2 ; PERFORM RELATIONAL OPERATIONS | |
000BDBr 2 ; ---------------------------------------------------------------------------- | |
000BDBr 2 RELOPS: | |
000BDBr 2 20 rr rr jsr CHKVAL | |
000BDEr 2 B0 13 bcs STRCMP | |
000BE0r 2 A5 BB lda ARGSIGN | |
000BE2r 2 09 7F ora #$7F | |
000BE4r 2 25 B7 and ARG+1 | |
000BE6r 2 85 B7 sta ARG+1 | |
000BE8r 2 A9 B6 lda #<ARG | |
000BEAr 2 A0 00 ldy #$00 | |
000BECr 2 20 rr rr jsr FCOMP | |
000BEFr 2 AA tax | |
000BF0r 2 4C rr rr jmp NUMCMP | |
000BF3r 2 | |
000BF3r 2 ; ---------------------------------------------------------------------------- | |
000BF3r 2 ; STRING COMPARISON | |
000BF3r 2 ; ---------------------------------------------------------------------------- | |
000BF3r 2 STRCMP: | |
000BF3r 2 A9 00 lda #$00 | |
000BF5r 2 85 0E sta VALTYP | |
000BF7r 2 C6 9A dec CPRTYP | |
000BF9r 2 20 rr rr jsr FREFAC | |
000BFCr 2 85 AE sta FAC | |
000BFEr 2 86 AF stx FAC+1 | |
000C00r 2 84 B0 sty FAC+2 | |
000C02r 2 A5 B9 lda ARG_LAST-1 | |
000C04r 2 A4 BA ldy ARG_LAST | |
000C06r 2 20 rr rr jsr FRETMP | |
000C09r 2 86 B9 stx ARG_LAST-1 | |
000C0Br 2 84 BA sty ARG_LAST | |
000C0Dr 2 AA tax | |
000C0Er 2 38 sec | |
000C0Fr 2 E5 AE sbc FAC | |
000C11r 2 F0 08 beq L2E74 | |
000C13r 2 A9 01 lda #$01 | |
000C15r 2 90 04 bcc L2E74 | |
000C17r 2 A6 AE ldx FAC | |
000C19r 2 A9 FF lda #$FF | |
000C1Br 2 L2E74: | |
000C1Br 2 85 B3 sta FACSIGN | |
000C1Dr 2 A0 FF ldy #$FF | |
000C1Fr 2 E8 inx | |
000C20r 2 STRCMP1: | |
000C20r 2 C8 iny | |
000C21r 2 CA dex | |
000C22r 2 D0 07 bne L2E84 | |
000C24r 2 A6 B3 ldx FACSIGN | |
000C26r 2 NUMCMP: | |
000C26r 2 30 0F bmi CMPDONE | |
000C28r 2 18 clc | |
000C29r 2 90 0C bcc CMPDONE | |
000C2Br 2 L2E84: | |
000C2Br 2 B1 B9 lda (ARG_LAST-1),y | |
000C2Dr 2 D1 AF cmp (FAC+1),y | |
000C2Fr 2 F0 EF beq STRCMP1 | |
000C31r 2 A2 FF ldx #$FF | |
000C33r 2 B0 02 bcs CMPDONE | |
000C35r 2 A2 01 ldx #$01 | |
000C37r 2 CMPDONE: | |
000C37r 2 E8 inx | |
000C38r 2 8A txa | |
000C39r 2 2A rol a | |
000C3Ar 2 25 13 and CPRMASK | |
000C3Cr 2 F0 02 beq L2E99 | |
000C3Er 2 A9 FF lda #$FF | |
000C40r 2 L2E99: | |
000C40r 2 4C rr rr jmp FLOAT | |
000C43r 2 | |
000C43r 1 .include "var.s" | |
000C43r 2 .segment "CODE" | |
000C43r 2 | |
000C43r 2 ; ---------------------------------------------------------------------------- | |
000C43r 2 ; "DIM" STATEMENT | |
000C43r 2 ; ---------------------------------------------------------------------------- | |
000C43r 2 NXDIM: | |
000C43r 2 20 rr rr jsr CHKCOM | |
000C46r 2 DIM: | |
000C46r 2 AA tax | |
000C47r 2 20 rr rr jsr PTRGET2 | |
000C4Ar 2 20 C6 00 jsr CHRGOT | |
000C4Dr 2 D0 F4 bne NXDIM | |
000C4Fr 2 60 rts | |
000C50r 2 | |
000C50r 2 ; ---------------------------------------------------------------------------- | |
000C50r 2 ; PTRGET -- GENERAL VARIABLE SCAN | |
000C50r 2 ; | |
000C50r 2 ; SCANS VARIABLE NAME AT TXTPTR, AND SEARCHES THE | |
000C50r 2 ; VARTAB AND ARYTAB FOR THE NAME. | |
000C50r 2 ; IF NOT FOUND, CREATE VARIABLE OF APPROPRIATE TYPE. | |
000C50r 2 ; RETURN WITH ADDRESS IN VARPNT AND Y,A | |
000C50r 2 ; | |
000C50r 2 ; ACTUAL ACTIVITY CONTROLLED SOMEWHAT BY TWO FLAGS: | |
000C50r 2 ; DIMFLG -- NONZERO IF CALLED FROM "DIM" | |
000C50r 2 ; ELSE = 0 | |
000C50r 2 ; | |
000C50r 2 ; SUBFLG -- = $00 | |
000C50r 2 ; = $40 IF CALLED FROM "GETARYPT" | |
000C50r 2 ; ---------------------------------------------------------------------------- | |
000C50r 2 PTRGET: | |
000C50r 2 A2 00 ldx #$00 | |
000C52r 2 20 C6 00 jsr CHRGOT | |
000C55r 2 PTRGET2: | |
000C55r 2 86 0D stx DIMFLG | |
000C57r 2 PTRGET3: | |
000C57r 2 85 92 sta VARNAM | |
000C59r 2 20 C6 00 jsr CHRGOT | |
000C5Cr 2 20 rr rr jsr ISLETC | |
000C5Fr 2 B0 03 bcs NAMOK | |
000C61r 2 SYNERR3: | |
000C61r 2 4C rr rr jmp SYNERR | |
000C64r 2 NAMOK: | |
000C64r 2 A2 00 ldx #$00 | |
000C66r 2 86 0E stx VALTYP | |
000C68r 2 .ifndef CONFIG_SMALL | |
000C68r 2 86 0F stx VALTYP+1 | |
000C6Ar 2 .endif | |
000C6Ar 2 20 C0 00 jsr CHRGET | |
000C6Dr 2 90 05 bcc L2ECD | |
000C6Fr 2 20 rr rr jsr ISLETC | |
000C72r 2 90 0B bcc L2ED8 | |
000C74r 2 L2ECD: | |
000C74r 2 AA tax | |
000C75r 2 L2ECE: | |
000C75r 2 20 C0 00 jsr CHRGET | |
000C78r 2 90 FB bcc L2ECE | |
000C7Ar 2 20 rr rr jsr ISLETC | |
000C7Dr 2 B0 F6 bcs L2ECE | |
000C7Fr 2 L2ED8: | |
000C7Fr 2 C9 24 cmp #$24 | |
000C81r 2 .ifdef CONFIG_SMALL | |
000C81r 2 bne L2EF9 | |
000C81r 2 .else | |
000C81r 2 D0 06 bne L2EE2 | |
000C83r 2 .endif | |
000C83r 2 A9 FF lda #$FF | |
000C85r 2 85 0E sta VALTYP | |
000C87r 2 .ifndef CONFIG_SMALL | |
000C87r 2 D0 10 bne L2EF2 | |
000C89r 2 L2EE2: | |
000C89r 2 C9 25 cmp #$25 | |
000C8Br 2 D0 13 bne L2EF9 | |
000C8Dr 2 A5 11 lda SUBFLG | |
000C8Fr 2 D0 D0 bne SYNERR3 | |
000C91r 2 A9 80 lda #$80 | |
000C93r 2 85 0F sta VALTYP+1 | |
000C95r 2 05 92 ora VARNAM | |
000C97r 2 85 92 sta VARNAM | |
000C99r 2 L2EF2: | |
000C99r 2 .endif | |
000C99r 2 8A txa | |
000C9Ar 2 09 80 ora #$80 | |
000C9Cr 2 AA tax | |
000C9Dr 2 20 C0 00 jsr CHRGET | |
000CA0r 2 L2EF9: | |
000CA0r 2 86 93 stx VARNAM+1 | |
000CA2r 2 38 sec | |
000CA3r 2 05 11 ora SUBFLG | |
000CA5r 2 E9 28 sbc #$28 | |
000CA7r 2 D0 03 bne L2F05 | |
000CA9r 2 4C rr rr jmp ARRAY | |
000CACr 2 L2F05: | |
000CACr 2 A9 00 lda #$00 | |
000CAEr 2 85 11 sta SUBFLG | |
000CB0r 2 A5 7A lda VARTAB | |
000CB2r 2 A6 7B ldx VARTAB+1 | |
000CB4r 2 A0 00 ldy #$00 | |
000CB6r 2 L2F0F: | |
000CB6r 2 86 AD stx LOWTR+1 | |
000CB8r 2 L2F11: | |
000CB8r 2 85 AC sta LOWTR | |
000CBAr 2 E4 7D cpx ARYTAB+1 | |
000CBCr 2 D0 04 bne L2F1B | |
000CBEr 2 C5 7C cmp ARYTAB | |
000CC0r 2 F0 22 beq NAMENOTFOUND | |
000CC2r 2 L2F1B: | |
000CC2r 2 A5 92 lda VARNAM | |
000CC4r 2 D1 AC cmp (LOWTR),y | |
000CC6r 2 D0 08 bne L2F29 | |
000CC8r 2 A5 93 lda VARNAM+1 | |
000CCAr 2 C8 iny | |
000CCBr 2 D1 AC cmp (LOWTR),y | |
000CCDr 2 F0 6C beq SET_VARPNT_AND_YA | |
000CCFr 2 88 dey | |
000CD0r 2 L2F29: | |
000CD0r 2 18 clc | |
000CD1r 2 A5 AC lda LOWTR | |
000CD3r 2 69 07 adc #BYTES_PER_VARIABLE | |
000CD5r 2 90 E1 bcc L2F11 | |
000CD7r 2 E8 inx | |
000CD8r 2 D0 DC bne L2F0F | |
000CDAr 2 | |
000CDAr 2 ; ---------------------------------------------------------------------------- | |
000CDAr 2 ; CHECK IF (A) IS ASCII LETTER A-Z | |
000CDAr 2 ; | |
000CDAr 2 ; RETURN CARRY = 1 IF A-Z | |
000CDAr 2 ; = 0 IF NOT | |
000CDAr 2 ; ---------------------------------------------------------------------------- | |
000CDAr 2 ISLETC: | |
000CDAr 2 C9 41 cmp #$41 | |
000CDCr 2 90 05 bcc L2F3C | |
000CDEr 2 E9 5B sbc #$5B | |
000CE0r 2 38 sec | |
000CE1r 2 E9 A5 sbc #$A5 | |
000CE3r 2 L2F3C: | |
000CE3r 2 60 rts | |
000CE4r 2 | |
000CE4r 2 ; ---------------------------------------------------------------------------- | |
000CE4r 2 ; VARIABLE NOT FOUND, SO MAKE ONE | |
000CE4r 2 ; ---------------------------------------------------------------------------- | |
000CE4r 2 NAMENOTFOUND: | |
000CE4r 2 68 pla | |
000CE5r 2 48 pha | |
000CE6r 2 C9 rr cmp #<FRM_VARIABLE_CALL | |
000CE8r 2 D0 0F bne MAKENEWVARIABLE | |
000CEAr 2 .ifdef CONFIG_SAFE_NAMENOTFOUND | |
000CEAr 2 BA tsx | |
000CEBr 2 BD 02 01 lda STACK+2,x | |
000CEEr 2 C9 rr cmp #>FRM_VARIABLE_CALL | |
000CF0r 2 D0 07 bne MAKENEWVARIABLE | |
000CF2r 2 .endif | |
000CF2r 2 LD015: | |
000CF2r 2 A9 rr lda #<C_ZERO | |
000CF4r 2 A0 rr ldy #>C_ZERO | |
000CF6r 2 60 rts | |
000CF7r 2 | |
000CF7r 2 ; ---------------------------------------------------------------------------- | |
000CF7r 2 .ifndef CONFIG_2 | |
000CF7r 2 C_ZERO: | |
000CF7r 2 00 00 .byte $00,$00 | |
000CF9r 2 .endif | |
000CF9r 2 | |
000CF9r 2 ; ---------------------------------------------------------------------------- | |
000CF9r 2 ; MAKE A NEW SIMPLE VARIABLE | |
000CF9r 2 ; | |
000CF9r 2 ; MOVE ARRAYS UP 7 BYTES TO MAKE ROOM FOR NEW VARIABLE | |
000CF9r 2 ; ENTER 7-BYTE VARIABLE DATA IN THE HOLE | |
000CF9r 2 ; ---------------------------------------------------------------------------- | |
000CF9r 2 MAKENEWVARIABLE: | |
000CF9r 2 .ifdef CONFIG_CBM_ALL | |
000CF9r 2 lda VARNAM | |
000CF9r 2 ldy VARNAM+1 | |
000CF9r 2 cmp #$54 | |
000CF9r 2 bne LD02F | |
000CF9r 2 cpy #$C9 | |
000CF9r 2 beq LD015 | |
000CF9r 2 cpy #$49 | |
000CF9r 2 bne LD02F | |
000CF9r 2 LD02C: | |
000CF9r 2 jmp SYNERR | |
000CF9r 2 LD02F: | |
000CF9r 2 cmp #$53 | |
000CF9r 2 bne LD037 | |
000CF9r 2 cpy #$54 | |
000CF9r 2 beq LD02C | |
000CF9r 2 LD037: | |
000CF9r 2 .endif | |
000CF9r 2 A5 7C lda ARYTAB | |
000CFBr 2 A4 7D ldy ARYTAB+1 | |
000CFDr 2 85 AC sta LOWTR | |
000CFFr 2 84 AD sty LOWTR+1 | |
000D01r 2 A5 7E lda STREND | |
000D03r 2 A4 7F ldy STREND+1 | |
000D05r 2 85 A7 sta HIGHTR | |
000D07r 2 84 A8 sty HIGHTR+1 | |
000D09r 2 18 clc | |
000D0Ar 2 69 07 adc #BYTES_PER_VARIABLE | |
000D0Cr 2 90 01 bcc L2F68 | |
000D0Er 2 C8 iny | |
000D0Fr 2 L2F68: | |
000D0Fr 2 85 A5 sta HIGHDS | |
000D11r 2 84 A6 sty HIGHDS+1 | |
000D13r 2 20 rr rr jsr BLTU | |
000D16r 2 A5 A5 lda HIGHDS | |
000D18r 2 A4 A6 ldy HIGHDS+1 | |
000D1Ar 2 C8 iny | |
000D1Br 2 85 7C sta ARYTAB | |
000D1Dr 2 84 7D sty ARYTAB+1 | |
000D1Fr 2 A0 00 ldy #$00 | |
000D21r 2 A5 92 lda VARNAM | |
000D23r 2 91 AC sta (LOWTR),y | |
000D25r 2 C8 iny | |
000D26r 2 A5 93 lda VARNAM+1 | |
000D28r 2 91 AC sta (LOWTR),y | |
000D2Ar 2 A9 00 lda #$00 | |
000D2Cr 2 C8 iny | |
000D2Dr 2 91 AC sta (LOWTR),y | |
000D2Fr 2 C8 iny | |
000D30r 2 91 AC sta (LOWTR),y | |
000D32r 2 C8 iny | |
000D33r 2 91 AC sta (LOWTR),y | |
000D35r 2 C8 iny | |
000D36r 2 91 AC sta (LOWTR),y | |
000D38r 2 .ifndef CONFIG_SMALL | |
000D38r 2 C8 iny | |
000D39r 2 91 AC sta (LOWTR),y | |
000D3Br 2 .endif | |
000D3Br 2 | |
000D3Br 2 ; ---------------------------------------------------------------------------- | |
000D3Br 2 ; PUT ADDRESS OF VALUE OF VARIABLE IN VARPNT AND Y,A | |
000D3Br 2 ; ---------------------------------------------------------------------------- | |
000D3Br 2 SET_VARPNT_AND_YA: | |
000D3Br 2 A5 AC lda LOWTR | |
000D3Dr 2 18 clc | |
000D3Er 2 69 02 adc #$02 | |
000D40r 2 A4 AD ldy LOWTR+1 | |
000D42r 2 90 01 bcc L2F9E | |
000D44r 2 C8 iny | |
000D45r 2 L2F9E: | |
000D45r 2 85 94 sta VARPNT | |
000D47r 2 84 95 sty VARPNT+1 | |
000D49r 2 60 rts | |
000D4Ar 2 | |
000D4Ar 1 .include "array.s" | |
000D4Ar 2 .segment "CODE" | |
000D4Ar 2 | |
000D4Ar 2 ; ---------------------------------------------------------------------------- | |
000D4Ar 2 ; COMPUTE ADDRESS OF FIRST VALUE IN ARRAY | |
000D4Ar 2 ; ARYPNT = (LOWTR) + #DIMS*2 + 5 | |
000D4Ar 2 ; ---------------------------------------------------------------------------- | |
000D4Ar 2 GETARY: | |
000D4Ar 2 A5 0C lda EOLPNTR | |
000D4Cr 2 0A asl a | |
000D4Dr 2 69 05 adc #$05 | |
000D4Fr 2 65 AC adc LOWTR | |
000D51r 2 A4 AD ldy LOWTR+1 | |
000D53r 2 90 01 bcc L2FAF | |
000D55r 2 C8 iny | |
000D56r 2 L2FAF: | |
000D56r 2 85 A5 sta HIGHDS | |
000D58r 2 84 A6 sty HIGHDS+1 | |
000D5Ar 2 60 rts | |
000D5Br 2 | |
000D5Br 2 ; ---------------------------------------------------------------------------- | |
000D5Br 2 NEG32768: | |
000D5Br 2 90 80 00 00 .byte $90,$80,$00,$00 | |
000D5Fr 2 | |
000D5Fr 2 .ifdef CONFIG_2C | |
000D5Fr 2 .byte $00; bugfix: short number | |
000D5Fr 2 .endif | |
000D5Fr 2 | |
000D5Fr 2 ; ---------------------------------------------------------------------------- | |
000D5Fr 2 ; EVALUATE NUMERIC FORMULA AT TXTPTR | |
000D5Fr 2 ; CONVERTING RESULT TO INTEGER 0 <= X <= 32767 | |
000D5Fr 2 ; IN FAC+3,4 | |
000D5Fr 2 ; ---------------------------------------------------------------------------- | |
000D5Fr 2 MAKINT: | |
000D5Fr 2 20 C0 00 jsr CHRGET | |
000D62r 2 .ifdef CONFIG_2 | |
000D62r 2 jsr FRMEVL | |
000D62r 2 .else | |
000D62r 2 20 rr rr jsr FRMNUM | |
000D65r 2 .endif | |
000D65r 2 | |
000D65r 2 ; ---------------------------------------------------------------------------- | |
000D65r 2 ; CONVERT FAC TO INTEGER | |
000D65r 2 ; MUST BE POSITIVE AND LESS THAN 32768 | |
000D65r 2 ; ---------------------------------------------------------------------------- | |
000D65r 2 MKINT: | |
000D65r 2 .ifdef CONFIG_2 | |
000D65r 2 jsr CHKNUM | |
000D65r 2 .endif | |
000D65r 2 A5 B3 lda FACSIGN | |
000D67r 2 30 0D bmi MI1 | |
000D69r 2 | |
000D69r 2 ; ---------------------------------------------------------------------------- | |
000D69r 2 ; CONVERT FAC TO INTEGER | |
000D69r 2 ; MUST BE -32767 <= FAC <= 32767 | |
000D69r 2 ; ---------------------------------------------------------------------------- | |
000D69r 2 AYINT: | |
000D69r 2 A5 AE lda FAC | |
000D6Br 2 C9 90 cmp #$90 | |
000D6Dr 2 90 09 bcc MI2 | |
000D6Fr 2 A9 rr lda #<NEG32768 | |
000D71r 2 A0 rr ldy #>NEG32768 | |
000D73r 2 20 rr rr jsr FCOMP | |
000D76r 2 MI1: | |
000D76r 2 D0 7A bne IQERR | |
000D78r 2 MI2: | |
000D78r 2 4C rr rr jmp QINT | |
000D7Br 2 | |
000D7Br 2 ; ---------------------------------------------------------------------------- | |
000D7Br 2 ; LOCATE ARRAY ELEMENT OR CREATE AN ARRAY | |
000D7Br 2 ; ---------------------------------------------------------------------------- | |
000D7Br 2 ARRAY: | |
000D7Br 2 A5 0D lda DIMFLG | |
000D7Dr 2 .ifndef CONFIG_SMALL | |
000D7Dr 2 05 0F ora VALTYP+1 | |
000D7Fr 2 .endif | |
000D7Fr 2 48 pha | |
000D80r 2 A5 0E lda VALTYP | |
000D82r 2 48 pha | |
000D83r 2 A0 00 ldy #$00 | |
000D85r 2 L2FDE: | |
000D85r 2 98 tya | |
000D86r 2 48 pha | |
000D87r 2 A5 93 lda VARNAM+1 | |
000D89r 2 48 pha | |
000D8Ar 2 A5 92 lda VARNAM | |
000D8Cr 2 48 pha | |
000D8Dr 2 20 rr rr jsr MAKINT | |
000D90r 2 68 pla | |
000D91r 2 85 92 sta VARNAM | |
000D93r 2 68 pla | |
000D94r 2 85 93 sta VARNAM+1 | |
000D96r 2 68 pla | |
000D97r 2 A8 tay | |
000D98r 2 BA tsx | |
000D99r 2 BD 02 01 lda STACK+2,x | |
000D9Cr 2 48 pha | |
000D9Dr 2 BD 01 01 lda STACK+1,x | |
000DA0r 2 48 pha | |
000DA1r 2 A5 B1 lda FAC_LAST-1 | |
000DA3r 2 9D 02 01 sta STACK+2,x | |
000DA6r 2 A5 B2 lda FAC_LAST | |
000DA8r 2 9D 01 01 sta STACK+1,x | |
000DABr 2 C8 iny | |
000DACr 2 20 C6 00 jsr CHRGOT | |
000DAFr 2 C9 2C cmp #$2C | |
000DB1r 2 F0 D2 beq L2FDE | |
000DB3r 2 84 0C sty EOLPNTR | |
000DB5r 2 20 rr rr jsr CHKCLS | |
000DB8r 2 68 pla | |
000DB9r 2 85 0E sta VALTYP | |
000DBBr 2 68 pla | |
000DBCr 2 .ifndef CONFIG_SMALL | |
000DBCr 2 85 0F sta VALTYP+1 | |
000DBEr 2 29 7F and #$7F | |
000DC0r 2 .endif | |
000DC0r 2 85 0D sta DIMFLG | |
000DC2r 2 ; ---------------------------------------------------------------------------- | |
000DC2r 2 ; SEARCH ARRAY TABLE FOR THIS ARRAY NAME | |
000DC2r 2 ; ---------------------------------------------------------------------------- | |
000DC2r 2 A6 7C ldx ARYTAB | |
000DC4r 2 A5 7D lda ARYTAB+1 | |
000DC6r 2 L301F: | |
000DC6r 2 86 AC stx LOWTR | |
000DC8r 2 85 AD sta LOWTR+1 | |
000DCAr 2 C5 7F cmp STREND+1 | |
000DCCr 2 D0 04 bne L302B | |
000DCEr 2 E4 7E cpx STREND | |
000DD0r 2 F0 39 beq MAKE_NEW_ARRAY | |
000DD2r 2 L302B: | |
000DD2r 2 A0 00 ldy #$00 | |
000DD4r 2 B1 AC lda (LOWTR),y | |
000DD6r 2 C8 iny | |
000DD7r 2 C5 92 cmp VARNAM | |
000DD9r 2 D0 06 bne L303A | |
000DDBr 2 A5 93 lda VARNAM+1 | |
000DDDr 2 D1 AC cmp (LOWTR),y | |
000DDFr 2 F0 16 beq USE_OLD_ARRAY | |
000DE1r 2 L303A: | |
000DE1r 2 C8 iny | |
000DE2r 2 B1 AC lda (LOWTR),y | |
000DE4r 2 18 clc | |
000DE5r 2 65 AC adc LOWTR | |
000DE7r 2 AA tax | |
000DE8r 2 C8 iny | |
000DE9r 2 B1 AC lda (LOWTR),y | |
000DEBr 2 65 AD adc LOWTR+1 | |
000DEDr 2 90 D7 bcc L301F | |
000DEFr 2 | |
000DEFr 2 ; ---------------------------------------------------------------------------- | |
000DEFr 2 ; ERROR: BAD SUBSCRIPTS | |
000DEFr 2 ; ---------------------------------------------------------------------------- | |
000DEFr 2 SUBERR: | |
000DEFr 2 A2 6B ldx #ERR_BADSUBS | |
000DF1r 2 2C .byte $2C | |
000DF2r 2 | |
000DF2r 2 ; ---------------------------------------------------------------------------- | |
000DF2r 2 ; ERROR: ILLEGAL QUANTITY | |
000DF2r 2 ; ---------------------------------------------------------------------------- | |
000DF2r 2 IQERR: | |
000DF2r 2 A2 35 ldx #ERR_ILLQTY | |
000DF4r 2 JER: | |
000DF4r 2 4C rr rr jmp ERROR | |
000DF7r 2 | |
000DF7r 2 ; ---------------------------------------------------------------------------- | |
000DF7r 2 ; FOUND THE ARRAY | |
000DF7r 2 ; ---------------------------------------------------------------------------- | |
000DF7r 2 USE_OLD_ARRAY: | |
000DF7r 2 A2 78 ldx #ERR_REDIMD | |
000DF9r 2 A5 0D lda DIMFLG | |
000DFBr 2 D0 F7 bne JER | |
000DFDr 2 20 rr rr jsr GETARY | |
000E00r 2 A5 0C lda EOLPNTR | |
000E02r 2 A0 04 ldy #$04 | |
000E04r 2 D1 AC cmp (LOWTR),y | |
000E06r 2 D0 E7 bne SUBERR | |
000E08r 2 4C rr rr jmp FIND_ARRAY_ELEMENT | |
000E0Br 2 | |
000E0Br 2 ; ---------------------------------------------------------------------------- | |
000E0Br 2 ; CREATE A NEW ARRAY, UNLESS CALLED FROM GETARYPT | |
000E0Br 2 ; ---------------------------------------------------------------------------- | |
000E0Br 2 MAKE_NEW_ARRAY: | |
000E0Br 2 20 rr rr jsr GETARY | |
000E0Er 2 20 rr rr jsr REASON | |
000E11r 2 A9 00 lda #$00 | |
000E13r 2 A8 tay | |
000E14r 2 85 BF sta STRNG2+1 | |
000E16r 2 A2 05 ldx #BYTES_PER_ELEMENT | |
000E18r 2 .if .def(CONFIG_SMALL) && (!.def(CONFIG_2)) | |
000E18r 2 stx STRNG2 | |
000E18r 2 .endif | |
000E18r 2 A5 92 lda VARNAM | |
000E1Ar 2 91 AC sta (LOWTR),y | |
000E1Cr 2 .ifndef CONFIG_SMALL | |
000E1Cr 2 10 01 bpl L3078 | |
000E1Er 2 CA dex | |
000E1Fr 2 L3078: | |
000E1Fr 2 .endif | |
000E1Fr 2 C8 iny | |
000E20r 2 A5 93 lda VARNAM+1 | |
000E22r 2 91 AC sta (LOWTR),y | |
000E24r 2 .if (!.def(CONFIG_SMALL)) || .def(CONFIG_2) | |
000E24r 2 10 02 bpl L3081 | |
000E26r 2 CA dex | |
000E27r 2 .if !(.def(CONFIG_SMALL) && .def(CONFIG_2)) | |
000E27r 2 CA dex | |
000E28r 2 .endif | |
000E28r 2 L3081: | |
000E28r 2 86 BE stx STRNG2 | |
000E2Ar 2 .endif | |
000E2Ar 2 A5 0C lda EOLPNTR | |
000E2Cr 2 C8 iny | |
000E2Dr 2 C8 iny | |
000E2Er 2 C8 iny | |
000E2Fr 2 91 AC sta (LOWTR),y | |
000E31r 2 L308A: | |
000E31r 2 A2 0B ldx #$0B | |
000E33r 2 A9 00 lda #$00 | |
000E35r 2 24 0D bit DIMFLG | |
000E37r 2 50 08 bvc L309A | |
000E39r 2 68 pla | |
000E3Ar 2 18 clc | |
000E3Br 2 69 01 adc #$01 | |
000E3Dr 2 AA tax | |
000E3Er 2 68 pla | |
000E3Fr 2 69 00 adc #$00 | |
000E41r 2 L309A: | |
000E41r 2 C8 iny | |
000E42r 2 91 AC sta (LOWTR),y | |
000E44r 2 C8 iny | |
000E45r 2 8A txa | |
000E46r 2 91 AC sta (LOWTR),y | |
000E48r 2 20 rr rr jsr MULTIPLY_SUBSCRIPT | |
000E4Br 2 86 BE stx STRNG2 | |
000E4Dr 2 85 BF sta STRNG2+1 | |
000E4Fr 2 A4 6F ldy INDEX | |
000E51r 2 C6 0C dec EOLPNTR | |
000E53r 2 D0 DC bne L308A | |
000E55r 2 65 A6 adc HIGHDS+1 | |
000E57r 2 B0 5D bcs GME | |
000E59r 2 85 A6 sta HIGHDS+1 | |
000E5Br 2 A8 tay | |
000E5Cr 2 8A txa | |
000E5Dr 2 65 A5 adc HIGHDS | |
000E5Fr 2 90 03 bcc L30BD | |
000E61r 2 C8 iny | |
000E62r 2 F0 52 beq GME | |
000E64r 2 L30BD: | |
000E64r 2 20 rr rr jsr REASON | |
000E67r 2 85 7E sta STREND | |
000E69r 2 84 7F sty STREND+1 | |
000E6Br 2 A9 00 lda #$00 | |
000E6Dr 2 E6 BF inc STRNG2+1 | |
000E6Fr 2 A4 BE ldy STRNG2 | |
000E71r 2 F0 05 beq L30D1 | |
000E73r 2 L30CC: | |
000E73r 2 88 dey | |
000E74r 2 91 A5 sta (HIGHDS),y | |
000E76r 2 D0 FB bne L30CC | |
000E78r 2 L30D1: | |
000E78r 2 C6 A6 dec HIGHDS+1 | |
000E7Ar 2 C6 BF dec STRNG2+1 | |
000E7Cr 2 D0 F5 bne L30CC | |
000E7Er 2 E6 A6 inc HIGHDS+1 | |
000E80r 2 38 sec | |
000E81r 2 A5 7E lda STREND | |
000E83r 2 E5 AC sbc LOWTR | |
000E85r 2 A0 02 ldy #$02 | |
000E87r 2 91 AC sta (LOWTR),y | |
000E89r 2 A5 7F lda STREND+1 | |
000E8Br 2 C8 iny | |
000E8Cr 2 E5 AD sbc LOWTR+1 | |
000E8Er 2 91 AC sta (LOWTR),y | |
000E90r 2 A5 0D lda DIMFLG | |
000E92r 2 D0 62 bne RTS9 | |
000E94r 2 C8 iny | |
000E95r 2 | |
000E95r 2 ; ---------------------------------------------------------------------------- | |
000E95r 2 ; FIND SPECIFIED ARRAY ELEMENT | |
000E95r 2 ; | |
000E95r 2 ; (LOWTR),Y POINTS AT # OF DIMS IN ARRAY DESCRIPTOR | |
000E95r 2 ; THE SUBSCRIPTS ARE ALL ON THE STACK AS INTEGERS | |
000E95r 2 ; ---------------------------------------------------------------------------- | |
000E95r 2 FIND_ARRAY_ELEMENT: | |
000E95r 2 B1 AC lda (LOWTR),y | |
000E97r 2 85 0C sta EOLPNTR | |
000E99r 2 A9 00 lda #$00 | |
000E9Br 2 85 BE sta STRNG2 | |
000E9Dr 2 L30F6: | |
000E9Dr 2 85 BF sta STRNG2+1 | |
000E9Fr 2 C8 iny | |
000EA0r 2 68 pla | |
000EA1r 2 AA tax | |
000EA2r 2 85 B1 sta FAC_LAST-1 | |
000EA4r 2 68 pla | |
000EA5r 2 85 B2 sta FAC_LAST | |
000EA7r 2 D1 AC cmp (LOWTR),y | |
000EA9r 2 90 0E bcc FAE2 | |
000EABr 2 D0 06 bne GSE | |
000EADr 2 C8 iny | |
000EAEr 2 8A txa | |
000EAFr 2 D1 AC cmp (LOWTR),y | |
000EB1r 2 90 07 bcc FAE3 | |
000EB3r 2 ; ---------------------------------------------------------------------------- | |
000EB3r 2 GSE: | |
000EB3r 2 4C rr rr jmp SUBERR | |
000EB6r 2 GME: | |
000EB6r 2 4C rr rr jmp MEMERR | |
000EB9r 2 ; ---------------------------------------------------------------------------- | |
000EB9r 2 FAE2: | |
000EB9r 2 C8 iny | |
000EBAr 2 FAE3: | |
000EBAr 2 A5 BF lda STRNG2+1 | |
000EBCr 2 05 BE ora STRNG2 | |
000EBEr 2 18 clc | |
000EBFr 2 F0 0A beq L3124 | |
000EC1r 2 20 rr rr jsr MULTIPLY_SUBSCRIPT | |
000EC4r 2 8A txa | |
000EC5r 2 65 B1 adc FAC_LAST-1 | |
000EC7r 2 AA tax | |
000EC8r 2 98 tya | |
000EC9r 2 A4 6F ldy INDEX | |
000ECBr 2 L3124: | |
000ECBr 2 65 B2 adc FAC_LAST | |
000ECDr 2 86 BE stx STRNG2 | |
000ECFr 2 C6 0C dec EOLPNTR | |
000ED1r 2 D0 CA bne L30F6 | |
000ED3r 2 .if .def(CONFIG_SMALL) && (!.def(CONFIG_2)) | |
000ED3r 2 asl STRNG2 | |
000ED3r 2 rol a | |
000ED3r 2 bcs GSE | |
000ED3r 2 asl STRNG2 | |
000ED3r 2 rol a | |
000ED3r 2 bcs GSE | |
000ED3r 2 tay | |
000ED3r 2 lda STRNG2 | |
000ED3r 2 .else | |
000ED3r 2 .ifdef CONFIG_11A | |
000ED3r 2 85 BF sta STRNG2+1 | |
000ED5r 2 .endif | |
000ED5r 2 A2 05 ldx #BYTES_FP | |
000ED7r 2 .ifdef CONFIG_SMALL | |
000ED7r 2 lda VARNAM+1 | |
000ED7r 2 .else | |
000ED7r 2 A5 92 lda VARNAM | |
000ED9r 2 .endif | |
000ED9r 2 10 01 bpl L3135 | |
000EDBr 2 CA dex | |
000EDCr 2 L3135: | |
000EDCr 2 .ifdef CONFIG_SMALL | |
000EDCr 2 stx RESULT+1 | |
000EDCr 2 .else | |
000EDCr 2 A5 93 lda VARNAM+1 | |
000EDEr 2 10 02 bpl L313B | |
000EE0r 2 CA dex | |
000EE1r 2 CA dex | |
000EE2r 2 L313B: | |
000EE2r 2 86 75 stx RESULT+2 | |
000EE4r 2 .endif | |
000EE4r 2 A9 00 lda #$00 | |
000EE6r 2 20 rr rr jsr MULTIPLY_SUBS1 | |
000EE9r 2 8A txa | |
000EEAr 2 .endif | |
000EEAr 2 65 A5 adc HIGHDS | |
000EECr 2 85 94 sta VARPNT | |
000EEEr 2 98 tya | |
000EEFr 2 65 A6 adc HIGHDS+1 | |
000EF1r 2 85 95 sta VARPNT+1 | |
000EF3r 2 A8 tay | |
000EF4r 2 A5 94 lda VARPNT | |
000EF6r 2 RTS9: | |
000EF6r 2 60 rts | |
000EF7r 2 | |
000EF7r 2 ; ---------------------------------------------------------------------------- | |
000EF7r 2 ; MULTIPLY (STRNG2) BY ((LOWTR),Y) | |
000EF7r 2 ; LEAVING PRODUCT IN A,X. (HI-BYTE ALSO IN Y.) | |
000EF7r 2 ; USED ONLY BY ARRAY SUBSCRIPT ROUTINES | |
000EF7r 2 ; ---------------------------------------------------------------------------- | |
000EF7r 2 MULTIPLY_SUBSCRIPT: | |
000EF7r 2 84 6F sty INDEX | |
000EF9r 2 B1 AC lda (LOWTR),y | |
000EFBr 2 85 75 sta RESULT_LAST-2 | |
000EFDr 2 88 dey | |
000EFEr 2 B1 AC lda (LOWTR),y | |
000F00r 2 MULTIPLY_SUBS1: | |
000F00r 2 85 76 sta RESULT_LAST-1 | |
000F02r 2 A9 10 lda #$10 | |
000F04r 2 85 AA sta INDX | |
000F06r 2 A2 00 ldx #$00 | |
000F08r 2 A0 00 ldy #$00 | |
000F0Ar 2 L3163: | |
000F0Ar 2 8A txa | |
000F0Br 2 0A asl a | |
000F0Cr 2 AA tax | |
000F0Dr 2 98 tya | |
000F0Er 2 2A rol a | |
000F0Fr 2 A8 tay | |
000F10r 2 B0 A4 bcs GME | |
000F12r 2 06 BE asl STRNG2 | |
000F14r 2 26 BF rol STRNG2+1 | |
000F16r 2 90 0B bcc L317C | |
000F18r 2 18 clc | |
000F19r 2 8A txa | |
000F1Ar 2 65 75 adc RESULT_LAST-2 | |
000F1Cr 2 AA tax | |
000F1Dr 2 98 tya | |
000F1Er 2 65 76 adc RESULT_LAST-1 | |
000F20r 2 A8 tay | |
000F21r 2 B0 93 bcs GME | |
000F23r 2 L317C: | |
000F23r 2 C6 AA dec INDX | |
000F25r 2 D0 E3 bne L3163 | |
000F27r 2 60 rts | |
000F28r 2 | |
000F28r 2 | |
000F28r 1 .include "misc2.s" | |
000F28r 2 .segment "CODE" | |
000F28r 2 | |
000F28r 2 ; ---------------------------------------------------------------------------- | |
000F28r 2 ; "FRE" FUNCTION | |
000F28r 2 ; | |
000F28r 2 ; COLLECTS GARBAGE AND RETURNS # BYTES OF MEMORY LEFT | |
000F28r 2 ; ---------------------------------------------------------------------------- | |
000F28r 2 FRE: | |
000F28r 2 A5 0E lda VALTYP | |
000F2Ar 2 F0 03 beq L3188 | |
000F2Cr 2 20 rr rr jsr FREFAC | |
000F2Fr 2 L3188: | |
000F2Fr 2 20 rr rr jsr GARBAG | |
000F32r 2 38 sec | |
000F33r 2 A5 80 lda FRETOP | |
000F35r 2 E5 7E sbc STREND | |
000F37r 2 A8 tay | |
000F38r 2 A5 81 lda FRETOP+1 | |
000F3Ar 2 E5 7F sbc STREND+1 | |
000F3Cr 2 ; FALL INTO GIVAYF TO FLOAT THE VALUE | |
000F3Cr 2 ; NOTE THAT VALUES OVER 32767 WILL RETURN AS NEGATIVE | |
000F3Cr 2 | |
000F3Cr 2 ; ---------------------------------------------------------------------------- | |
000F3Cr 2 ; FLOAT THE SIGNED INTEGER IN A,Y | |
000F3Cr 2 ; ---------------------------------------------------------------------------- | |
000F3Cr 2 GIVAYF: | |
000F3Cr 2 A2 00 ldx #$00 | |
000F3Er 2 86 0E stx VALTYP | |
000F40r 2 85 AF sta FAC+1 | |
000F42r 2 84 B0 sty FAC+2 | |
000F44r 2 A2 90 ldx #$90 | |
000F46r 2 4C rr rr jmp FLOAT1 | |
000F49r 2 POS: | |
000F49r 2 A4 16 ldy POSX | |
000F4Br 2 | |
000F4Br 2 ; ---------------------------------------------------------------------------- | |
000F4Br 2 ; FLOAT (Y) INTO FAC, GIVING VALUE 0-255 | |
000F4Br 2 ; ---------------------------------------------------------------------------- | |
000F4Br 2 SNGFLT: | |
000F4Br 2 A9 00 lda #$00 | |
000F4Dr 2 F0 ED beq GIVAYF | |
000F4Fr 2 | |
000F4Fr 2 ; ---------------------------------------------------------------------------- | |
000F4Fr 2 ; CHECK FOR DIRECT OR RUNNING MODE | |
000F4Fr 2 ; GIVING ERROR IF DIRECT MODE | |
000F4Fr 2 ; ---------------------------------------------------------------------------- | |
000F4Fr 2 ERRDIR: | |
000F4Fr 2 A6 87 ldx CURLIN+1 | |
000F51r 2 E8 inx | |
000F52r 2 D0 A2 bne RTS9 | |
000F54r 2 A2 95 ldx #ERR_ILLDIR | |
000F56r 2 .ifdef CONFIG_2 | |
000F56r 2 .byte $2C | |
000F56r 2 LD288: | |
000F56r 2 ldx #ERR_UNDEFFN | |
000F56r 2 .endif | |
000F56r 2 L31AF: | |
000F56r 2 4C rr rr jmp ERROR | |
000F59r 2 DEF: | |
000F59r 2 20 rr rr jsr FNC | |
000F5Cr 2 20 rr rr jsr ERRDIR | |
000F5Fr 2 20 rr rr jsr CHKOPN | |
000F62r 2 A9 80 lda #$80 | |
000F64r 2 85 11 sta SUBFLG | |
000F66r 2 20 rr rr jsr PTRGET | |
000F69r 2 20 rr rr jsr CHKNUM | |
000F6Cr 2 20 rr rr jsr CHKCLS | |
000F6Fr 2 A9 AC lda #TOKEN_EQUAL | |
000F71r 2 20 rr rr jsr SYNCHR | |
000F74r 2 .ifndef CONFIG_SMALL | |
000F74r 2 48 pha | |
000F75r 2 .endif | |
000F75r 2 A5 95 lda VARPNT+1 | |
000F77r 2 48 pha | |
000F78r 2 A5 94 lda VARPNT | |
000F7Ar 2 48 pha | |
000F7Br 2 A5 C8 lda TXTPTR+1 | |
000F7Dr 2 48 pha | |
000F7Er 2 A5 C7 lda TXTPTR | |
000F80r 2 48 pha | |
000F81r 2 20 rr rr jsr DATA | |
000F84r 2 4C rr rr jmp L3250 | |
000F87r 2 FNC: | |
000F87r 2 A9 9F lda #TOKEN_FN | |
000F89r 2 20 rr rr jsr SYNCHR | |
000F8Cr 2 09 80 ora #$80 | |
000F8Er 2 85 11 sta SUBFLG | |
000F90r 2 20 rr rr jsr PTRGET3 | |
000F93r 2 85 9B sta FNCNAM | |
000F95r 2 84 9C sty FNCNAM+1 | |
000F97r 2 4C rr rr jmp CHKNUM | |
000F9Ar 2 L31F3: | |
000F9Ar 2 20 rr rr jsr FNC | |
000F9Dr 2 A5 9C lda FNCNAM+1 | |
000F9Fr 2 48 pha | |
000FA0r 2 A5 9B lda FNCNAM | |
000FA2r 2 48 pha | |
000FA3r 2 20 rr rr jsr PARCHK | |
000FA6r 2 20 rr rr jsr CHKNUM | |
000FA9r 2 68 pla | |
000FAAr 2 85 9B sta FNCNAM | |
000FACr 2 68 pla | |
000FADr 2 85 9C sta FNCNAM+1 | |
000FAFr 2 A0 02 ldy #$02 | |
000FB1r 2 .ifndef CONFIG_2 | |
000FB1r 2 A2 E0 ldx #ERR_UNDEFFN | |
000FB3r 2 .endif | |
000FB3r 2 B1 9B lda (FNCNAM),y | |
000FB5r 2 .ifndef CONFIG_2 | |
000FB5r 2 F0 9F beq L31AF | |
000FB7r 2 .endif | |
000FB7r 2 85 94 sta VARPNT | |
000FB9r 2 AA tax | |
000FBAr 2 C8 iny | |
000FBBr 2 B1 9B lda (FNCNAM),y | |
000FBDr 2 .ifdef CONFIG_2 | |
000FBDr 2 beq LD288 | |
000FBDr 2 .endif | |
000FBDr 2 85 95 sta VARPNT+1 | |
000FBFr 2 .ifndef CONFIG_SMALL | |
000FBFr 2 C8 iny | |
000FC0r 2 .endif | |
000FC0r 2 L3219: | |
000FC0r 2 B1 94 lda (VARPNT),y | |
000FC2r 2 48 pha | |
000FC3r 2 88 dey | |
000FC4r 2 10 FA bpl L3219 | |
000FC6r 2 A4 95 ldy VARPNT+1 | |
000FC8r 2 20 rr rr jsr STORE_FAC_AT_YX_ROUNDED | |
000FCBr 2 A5 C8 lda TXTPTR+1 | |
000FCDr 2 48 pha | |
000FCEr 2 A5 C7 lda TXTPTR | |
000FD0r 2 48 pha | |
000FD1r 2 B1 9B lda (FNCNAM),y | |
000FD3r 2 85 C7 sta TXTPTR | |
000FD5r 2 C8 iny | |
000FD6r 2 B1 9B lda (FNCNAM),y | |
000FD8r 2 85 C8 sta TXTPTR+1 | |
000FDAr 2 A5 95 lda VARPNT+1 | |
000FDCr 2 48 pha | |
000FDDr 2 A5 94 lda VARPNT | |
000FDFr 2 48 pha | |
000FE0r 2 20 rr rr jsr FRMNUM | |
000FE3r 2 68 pla | |
000FE4r 2 85 9B sta FNCNAM | |
000FE6r 2 68 pla | |
000FE7r 2 85 9C sta FNCNAM+1 | |
000FE9r 2 20 C6 00 jsr CHRGOT | |
000FECr 2 F0 03 beq L324A | |
000FEEr 2 4C rr rr jmp SYNERR | |
000FF1r 2 L324A: | |
000FF1r 2 68 pla | |
000FF2r 2 85 C7 sta TXTPTR | |
000FF4r 2 68 pla | |
000FF5r 2 85 C8 sta TXTPTR+1 | |
000FF7r 2 L3250: | |
000FF7r 2 A0 00 ldy #$00 | |
000FF9r 2 68 pla | |
000FFAr 2 91 9B sta (FNCNAM),y | |
000FFCr 2 68 pla | |
000FFDr 2 C8 iny | |
000FFEr 2 91 9B sta (FNCNAM),y | |
001000r 2 68 pla | |
001001r 2 C8 iny | |
001002r 2 91 9B sta (FNCNAM),y | |
001004r 2 68 pla | |
001005r 2 C8 iny | |
001006r 2 91 9B sta (FNCNAM),y | |
001008r 2 .ifndef CONFIG_SMALL | |
001008r 2 68 pla | |
001009r 2 C8 iny | |
00100Ar 2 91 9B sta (FNCNAM),y | |
00100Cr 2 .endif | |
00100Cr 2 60 rts | |
00100Dr 2 | |
00100Dr 1 .include "string.s" | |
00100Dr 2 .segment "CODE" | |
00100Dr 2 ; ---------------------------------------------------------------------------- | |
00100Dr 2 ; "STR$" FUNCTION | |
00100Dr 2 ; ---------------------------------------------------------------------------- | |
00100Dr 2 STR: | |
00100Dr 2 20 rr rr jsr CHKNUM | |
001010r 2 A0 00 ldy #$00 | |
001012r 2 20 rr rr jsr FOUT1 | |
001015r 2 68 pla | |
001016r 2 68 pla | |
001017r 2 LD353: | |
001017r 2 A9 FF lda #$FF | |
001019r 2 A0 00 ldy #$00 | |
00101Br 2 F0 12 beq STRLIT | |
00101Dr 2 | |
00101Dr 2 ; ---------------------------------------------------------------------------- | |
00101Dr 2 ; GET SPACE AND MAKE DESCRIPTOR FOR STRING WHOSE | |
00101Dr 2 ; ADDRESS IS IN FAC+3,4 AND WHOSE LENGTH IS IN A-REG | |
00101Dr 2 ; ---------------------------------------------------------------------------- | |
00101Dr 2 STRINI: | |
00101Dr 2 A6 B1 ldx FAC_LAST-1 | |
00101Fr 2 A4 B2 ldy FAC_LAST | |
001021r 2 86 9D stx DSCPTR | |
001023r 2 84 9E sty DSCPTR+1 | |
001025r 2 | |
001025r 2 ; ---------------------------------------------------------------------------- | |
001025r 2 ; GET SPACE AND MAKE DESCRIPTOR FOR STRING WHOSE | |
001025r 2 ; ADDRESS IS IN Y,X AND WHOSE LENGTH IS IN A-REG | |
001025r 2 ; ---------------------------------------------------------------------------- | |
001025r 2 STRSPA: | |
001025r 2 20 rr rr jsr GETSPA | |
001028r 2 86 AF stx FAC+1 | |
00102Ar 2 84 B0 sty FAC+2 | |
00102Cr 2 85 AE sta FAC | |
00102Er 2 60 rts | |
00102Fr 2 | |
00102Fr 2 ; ---------------------------------------------------------------------------- | |
00102Fr 2 ; BUILD A DESCRIPTOR FOR STRING STARTING AT Y,A | |
00102Fr 2 ; AND TERMINATED BY $00 OR QUOTATION MARK | |
00102Fr 2 ; RETURN WITH DESCRIPTOR IN A TEMPORARY | |
00102Fr 2 ; AND ADDRESS OF DESCRIPTOR IN FAC+3,4 | |
00102Fr 2 ; ---------------------------------------------------------------------------- | |
00102Fr 2 STRLIT: | |
00102Fr 2 A2 22 ldx #$22 | |
001031r 2 86 0A stx CHARAC | |
001033r 2 86 0B stx ENDCHR | |
001035r 2 | |
001035r 2 ; ---------------------------------------------------------------------------- | |
001035r 2 ; BUILD A DESCRIPTOR FOR STRING STARTING AT Y,A | |
001035r 2 ; AND TERMINATED BY $00, (CHARAC), OR (ENDCHR) | |
001035r 2 ; | |
001035r 2 ; RETURN WITH DESCRIPTOR IN A TEMPORARY | |
001035r 2 ; AND ADDRESS OF DESCRIPTOR IN FAC+3,4 | |
001035r 2 ; ---------------------------------------------------------------------------- | |
001035r 2 STRLT2: | |
001035r 2 85 BC sta STRNG1 | |
001037r 2 84 BD sty STRNG1+1 | |
001039r 2 85 AF sta FAC+1 | |
00103Br 2 84 B0 sty FAC+2 | |
00103Dr 2 A0 FF ldy #$FF | |
00103Fr 2 L3298: | |
00103Fr 2 C8 iny | |
001040r 2 B1 BC lda (STRNG1),y | |
001042r 2 F0 0C beq L32A9 | |
001044r 2 C5 0A cmp CHARAC | |
001046r 2 F0 04 beq L32A5 | |
001048r 2 C5 0B cmp ENDCHR | |
00104Ar 2 D0 F3 bne L3298 | |
00104Cr 2 L32A5: | |
00104Cr 2 C9 22 cmp #$22 | |
00104Er 2 F0 01 beq L32AA | |
001050r 2 L32A9: | |
001050r 2 18 clc | |
001051r 2 L32AA: | |
001051r 2 84 AE sty FAC | |
001053r 2 98 tya | |
001054r 2 65 BC adc STRNG1 | |
001056r 2 85 BE sta STRNG2 | |
001058r 2 A6 BD ldx STRNG1+1 | |
00105Ar 2 90 01 bcc L32B6 | |
00105Cr 2 E8 inx | |
00105Dr 2 L32B6: | |
00105Dr 2 86 BF stx STRNG2+1 | |
00105Fr 2 A5 BD lda STRNG1+1 | |
001061r 2 .ifdef CONFIG_NO_INPUTBUFFER_ZP | |
001061r 2 beq LD399 | |
001061r 2 cmp #>INPUTBUFFER | |
001061r 2 .endif | |
001061r 2 D0 0B bne PUTNEW | |
001063r 2 LD399: | |
001063r 2 98 tya | |
001064r 2 20 rr rr jsr STRINI | |
001067r 2 A6 BC ldx STRNG1 | |
001069r 2 A4 BD ldy STRNG1+1 | |
00106Br 2 20 rr rr jsr MOVSTR | |
00106Er 2 | |
00106Er 2 ; ---------------------------------------------------------------------------- | |
00106Er 2 ; STORE DESCRIPTOR IN TEMPORARY DESCRIPTOR STACK | |
00106Er 2 ; | |
00106Er 2 ; THE DESCRIPTOR IS NOW IN FAC, FAC+1, FAC+2 | |
00106Er 2 ; PUT ADDRESS OF TEMP DESCRIPTOR IN FAC+3,4 | |
00106Er 2 ; ---------------------------------------------------------------------------- | |
00106Er 2 PUTNEW: | |
00106Er 2 A6 63 ldx TEMPPT | |
001070r 2 E0 6F cpx #TEMPST+9 | |
001072r 2 D0 05 bne PUTEMP | |
001074r 2 A2 BF ldx #ERR_FRMCPX | |
001076r 2 JERR: | |
001076r 2 4C rr rr jmp ERROR | |
001079r 2 PUTEMP: | |
001079r 2 A5 AE lda FAC | |
00107Br 2 95 00 sta 0,x | |
00107Dr 2 A5 AF lda FAC+1 | |
00107Fr 2 95 01 sta 1,x | |
001081r 2 A5 B0 lda FAC+2 | |
001083r 2 95 02 sta 2,x | |
001085r 2 A0 00 ldy #$00 | |
001087r 2 86 B1 stx FAC_LAST-1 | |
001089r 2 84 B2 sty FAC_LAST | |
00108Br 2 .ifdef CONFIG_2 | |
00108Br 2 sty FACEXTENSION | |
00108Br 2 .endif | |
00108Br 2 88 dey | |
00108Cr 2 84 0E sty VALTYP | |
00108Er 2 86 64 stx LASTPT | |
001090r 2 E8 inx | |
001091r 2 E8 inx | |
001092r 2 E8 inx | |
001093r 2 86 63 stx TEMPPT | |
001095r 2 60 rts | |
001096r 2 | |
001096r 2 ; ---------------------------------------------------------------------------- | |
001096r 2 ; MAKE SPACE FOR STRING AT BOTTOM OF STRING SPACE | |
001096r 2 ; (A)=# BYTES SPACE TO MAKE | |
001096r 2 ; | |
001096r 2 ; RETURN WITH (A) SAME, | |
001096r 2 ; AND Y,X = ADDRESS OF SPACE ALLOCATED | |
001096r 2 ; ---------------------------------------------------------------------------- | |
001096r 2 GETSPA: | |
001096r 2 46 10 lsr DATAFLG | |
001098r 2 L32F1: | |
001098r 2 48 pha | |
001099r 2 49 FF eor #$FF | |
00109Br 2 38 sec | |
00109Cr 2 65 80 adc FRETOP | |
00109Er 2 A4 81 ldy FRETOP+1 | |
0010A0r 2 B0 01 bcs L32FC | |
0010A2r 2 88 dey | |
0010A3r 2 L32FC: | |
0010A3r 2 C4 7F cpy STREND+1 | |
0010A5r 2 90 11 bcc L3311 | |
0010A7r 2 D0 04 bne L3306 | |
0010A9r 2 C5 7E cmp STREND | |
0010ABr 2 90 0B bcc L3311 | |
0010ADr 2 L3306: | |
0010ADr 2 85 80 sta FRETOP | |
0010AFr 2 84 81 sty FRETOP+1 | |
0010B1r 2 85 82 sta FRESPC | |
0010B3r 2 84 83 sty FRESPC+1 | |
0010B5r 2 AA tax | |
0010B6r 2 68 pla | |
0010B7r 2 60 rts | |
0010B8r 2 L3311: | |
0010B8r 2 A2 4D ldx #ERR_MEMFULL | |
0010BAr 2 A5 10 lda DATAFLG | |
0010BCr 2 30 B8 bmi JERR | |
0010BEr 2 20 rr rr jsr GARBAG | |
0010C1r 2 A9 80 lda #$80 | |
0010C3r 2 85 10 sta DATAFLG | |
0010C5r 2 68 pla | |
0010C6r 2 D0 D0 bne L32F1 | |
0010C8r 2 | |
0010C8r 2 ; ---------------------------------------------------------------------------- | |
0010C8r 2 ; SHOVE ALL REFERENCED STRINGS AS HIGH AS POSSIBLE | |
0010C8r 2 ; IN MEMORY (AGAINST HIMEM), FREEING UP SPACE | |
0010C8r 2 ; BELOW STRING AREA DOWN TO STREND. | |
0010C8r 2 ; ---------------------------------------------------------------------------- | |
0010C8r 2 GARBAG: | |
0010C8r 2 | |
0010C8r 2 .ifdef CONST_MEMSIZ | |
0010C8r 2 ldx #<CONST_MEMSIZ | |
0010C8r 2 lda #>CONST_MEMSIZ | |
0010C8r 2 .else | |
0010C8r 2 A6 84 ldx MEMSIZ | |
0010CAr 2 A5 85 lda MEMSIZ+1 | |
0010CCr 2 .endif | |
0010CCr 2 FINDHIGHESTSTRING: | |
0010CCr 2 86 80 stx FRETOP | |
0010CEr 2 85 81 sta FRETOP+1 | |
0010D0r 2 A0 00 ldy #$00 | |
0010D2r 2 84 9C sty FNCNAM+1 | |
0010D4r 2 .ifdef CONFIG_2 | |
0010D4r 2 sty FNCNAM ; GC bugfix! | |
0010D4r 2 .endif | |
0010D4r 2 A5 7E lda STREND | |
0010D6r 2 A6 7F ldx STREND+1 | |
0010D8r 2 85 AC sta LOWTR | |
0010DAr 2 86 AD stx LOWTR+1 | |
0010DCr 2 A9 66 lda #TEMPST | |
0010DEr 2 A2 00 ldx #$00 | |
0010E0r 2 85 6F sta INDEX | |
0010E2r 2 86 70 stx INDEX+1 | |
0010E4r 2 L333D: | |
0010E4r 2 C5 63 cmp TEMPPT | |
0010E6r 2 F0 05 beq L3346 | |
0010E8r 2 20 rr rr jsr CHECK_VARIABLE | |
0010EBr 2 F0 F7 beq L333D | |
0010EDr 2 L3346: | |
0010EDr 2 A9 07 lda #BYTES_PER_VARIABLE | |
0010EFr 2 85 A0 sta DSCLEN | |
0010F1r 2 A5 7A lda VARTAB | |
0010F3r 2 A6 7B ldx VARTAB+1 | |
0010F5r 2 85 6F sta INDEX | |
0010F7r 2 86 70 stx INDEX+1 | |
0010F9r 2 L3352: | |
0010F9r 2 E4 7D cpx ARYTAB+1 | |
0010FBr 2 D0 04 bne L335A | |
0010FDr 2 C5 7C cmp ARYTAB | |
0010FFr 2 F0 05 beq L335F | |
001101r 2 L335A: | |
001101r 2 20 rr rr jsr CHECK_SIMPLE_VARIABLE | |
001104r 2 F0 F3 beq L3352 | |
001106r 2 L335F: | |
001106r 2 85 A5 sta HIGHDS | |
001108r 2 86 A6 stx HIGHDS+1 | |
00110Ar 2 A9 03 lda #$03 ; OSI GC bugfix -> $04 ??? | |
00110Cr 2 85 A0 sta DSCLEN | |
00110Er 2 L3367: | |
00110Er 2 A5 A5 lda HIGHDS | |
001110r 2 A6 A6 ldx HIGHDS+1 | |
001112r 2 L336B: | |
001112r 2 E4 7F cpx STREND+1 | |
001114r 2 D0 07 bne L3376 | |
001116r 2 C5 7E cmp STREND | |
001118r 2 D0 03 bne L3376 | |
00111Ar 2 4C rr rr jmp MOVE_HIGHEST_STRING_TO_TOP | |
00111Dr 2 L3376: | |
00111Dr 2 85 6F sta INDEX | |
00111Fr 2 86 70 stx INDEX+1 | |
001121r 2 .ifdef CONFIG_SMALL | |
001121r 2 ldy #$01 | |
001121r 2 .else | |
001121r 2 A0 00 ldy #$00 | |
001123r 2 B1 6F lda (INDEX),y | |
001125r 2 AA tax | |
001126r 2 C8 iny | |
001127r 2 .endif | |
001127r 2 B1 6F lda (INDEX),y | |
001129r 2 08 php | |
00112Ar 2 C8 iny | |
00112Br 2 B1 6F lda (INDEX),y | |
00112Dr 2 65 A5 adc HIGHDS | |
00112Fr 2 85 A5 sta HIGHDS | |
001131r 2 C8 iny | |
001132r 2 B1 6F lda (INDEX),y | |
001134r 2 65 A6 adc HIGHDS+1 | |
001136r 2 85 A6 sta HIGHDS+1 | |
001138r 2 28 plp | |
001139r 2 10 D3 bpl L3367 | |
00113Br 2 .ifndef CONFIG_SMALL | |
00113Br 2 8A txa | |
00113Cr 2 30 D0 bmi L3367 | |
00113Er 2 .endif | |
00113Er 2 C8 iny | |
00113Fr 2 B1 6F lda (INDEX),y | |
001141r 2 .ifdef CONFIG_CBM1_PATCHES | |
001141r 2 jsr LE7F3 ; XXX patch, call into screen editor | |
001141r 2 .else | |
001141r 2 .ifdef CONFIG_11 | |
001141r 2 A0 00 ldy #$00 ; GC bugfix | |
001143r 2 .endif | |
001143r 2 0A asl a | |
001144r 2 69 05 adc #$05 | |
001146r 2 .endif | |
001146r 2 65 6F adc INDEX | |
001148r 2 85 6F sta INDEX | |
00114Ar 2 90 02 bcc L33A7 | |
00114Cr 2 E6 70 inc INDEX+1 | |
00114Er 2 L33A7: | |
00114Er 2 A6 70 ldx INDEX+1 | |
001150r 2 L33A9: | |
001150r 2 E4 A6 cpx HIGHDS+1 | |
001152r 2 D0 04 bne L33B1 | |
001154r 2 C5 A5 cmp HIGHDS | |
001156r 2 F0 BA beq L336B | |
001158r 2 L33B1: | |
001158r 2 20 rr rr jsr CHECK_VARIABLE | |
00115Br 2 F0 F3 beq L33A9 | |
00115Dr 2 | |
00115Dr 2 ; ---------------------------------------------------------------------------- | |
00115Dr 2 ; PROCESS A SIMPLE VARIABLE | |
00115Dr 2 ; ---------------------------------------------------------------------------- | |
00115Dr 2 CHECK_SIMPLE_VARIABLE: | |
00115Dr 2 .ifndef CONFIG_SMALL | |
00115Dr 2 B1 6F lda (INDEX),y | |
00115Fr 2 30 35 bmi CHECK_BUMP | |
001161r 2 .endif | |
001161r 2 C8 iny | |
001162r 2 B1 6F lda (INDEX),y | |
001164r 2 10 30 bpl CHECK_BUMP | |
001166r 2 C8 iny | |
001167r 2 | |
001167r 2 ; ---------------------------------------------------------------------------- | |
001167r 2 ; IF STRING IS NOT EMPTY, CHECK IF IT IS HIGHEST | |
001167r 2 ; ---------------------------------------------------------------------------- | |
001167r 2 CHECK_VARIABLE: | |
001167r 2 B1 6F lda (INDEX),y | |
001169r 2 F0 2B beq CHECK_BUMP | |
00116Br 2 C8 iny | |
00116Cr 2 B1 6F lda (INDEX),y | |
00116Er 2 AA tax | |
00116Fr 2 C8 iny | |
001170r 2 B1 6F lda (INDEX),y | |
001172r 2 C5 81 cmp FRETOP+1 | |
001174r 2 90 06 bcc L33D5 | |
001176r 2 D0 1E bne CHECK_BUMP | |
001178r 2 E4 80 cpx FRETOP | |
00117Ar 2 B0 1A bcs CHECK_BUMP | |
00117Cr 2 L33D5: | |
00117Cr 2 C5 AD cmp LOWTR+1 | |
00117Er 2 90 16 bcc CHECK_BUMP | |
001180r 2 D0 04 bne L33DF | |
001182r 2 E4 AC cpx LOWTR | |
001184r 2 90 10 bcc CHECK_BUMP | |
001186r 2 L33DF: | |
001186r 2 86 AC stx LOWTR | |
001188r 2 85 AD sta LOWTR+1 | |
00118Ar 2 A5 6F lda INDEX | |
00118Cr 2 A6 70 ldx INDEX+1 | |
00118Er 2 85 9B sta FNCNAM | |
001190r 2 86 9C stx FNCNAM+1 | |
001192r 2 A5 A0 lda DSCLEN | |
001194r 2 85 A2 sta Z52 | |
001196r 2 | |
001196r 2 ; ---------------------------------------------------------------------------- | |
001196r 2 ; ADD (DSCLEN) TO PNTR IN INDEX | |
001196r 2 ; RETURN WITH Y=0, PNTR ALSO IN X,A | |
001196r 2 ; ---------------------------------------------------------------------------- | |
001196r 2 CHECK_BUMP: | |
001196r 2 A5 A0 lda DSCLEN | |
001198r 2 18 clc | |
001199r 2 65 6F adc INDEX | |
00119Br 2 85 6F sta INDEX | |
00119Dr 2 90 02 bcc L33FA | |
00119Fr 2 E6 70 inc INDEX+1 | |
0011A1r 2 L33FA: | |
0011A1r 2 A6 70 ldx INDEX+1 | |
0011A3r 2 A0 00 ldy #$00 | |
0011A5r 2 60 rts | |
0011A6r 2 | |
0011A6r 2 ; ---------------------------------------------------------------------------- | |
0011A6r 2 ; FOUND HIGHEST NON-EMPTY STRING, SO MOVE IT | |
0011A6r 2 ; TO TOP AND GO BACK FOR ANOTHER | |
0011A6r 2 ; ---------------------------------------------------------------------------- | |
0011A6r 2 MOVE_HIGHEST_STRING_TO_TOP: | |
0011A6r 2 .ifdef CONFIG_2 | |
0011A6r 2 lda FNCNAM+1 ; GC bugfix | |
0011A6r 2 ora FNCNAM | |
0011A6r 2 .else | |
0011A6r 2 A6 9C ldx FNCNAM+1 | |
0011A8r 2 .endif | |
0011A8r 2 F0 F7 beq L33FA | |
0011AAr 2 A5 A2 lda Z52 | |
0011ACr 2 .ifndef CONFIG_10A | |
0011ACr 2 sbc #$03 | |
0011ACr 2 .else | |
0011ACr 2 29 04 and #$04 | |
0011AEr 2 .endif | |
0011AEr 2 4A lsr a | |
0011AFr 2 A8 tay | |
0011B0r 2 85 A2 sta Z52 | |
0011B2r 2 B1 9B lda (FNCNAM),y | |
0011B4r 2 65 AC adc LOWTR | |
0011B6r 2 85 A7 sta HIGHTR | |
0011B8r 2 A5 AD lda LOWTR+1 | |
0011BAr 2 69 00 adc #$00 | |
0011BCr 2 85 A8 sta HIGHTR+1 | |
0011BEr 2 A5 80 lda FRETOP | |
0011C0r 2 A6 81 ldx FRETOP+1 | |
0011C2r 2 85 A5 sta HIGHDS | |
0011C4r 2 86 A6 stx HIGHDS+1 | |
0011C6r 2 20 rr rr jsr BLTU2 | |
0011C9r 2 A4 A2 ldy Z52 | |
0011CBr 2 C8 iny | |
0011CCr 2 A5 A5 lda HIGHDS | |
0011CEr 2 91 9B sta (FNCNAM),y | |
0011D0r 2 AA tax | |
0011D1r 2 E6 A6 inc HIGHDS+1 | |
0011D3r 2 A5 A6 lda HIGHDS+1 | |
0011D5r 2 C8 iny | |
0011D6r 2 91 9B sta (FNCNAM),y | |
0011D8r 2 4C rr rr jmp FINDHIGHESTSTRING | |
0011DBr 2 | |
0011DBr 2 ; ---------------------------------------------------------------------------- | |
0011DBr 2 ; CONCATENATE TWO STRINGS | |
0011DBr 2 ; ---------------------------------------------------------------------------- | |
0011DBr 2 CAT: | |
0011DBr 2 A5 B2 lda FAC_LAST | |
0011DDr 2 48 pha | |
0011DEr 2 A5 B1 lda FAC_LAST-1 | |
0011E0r 2 48 pha | |
0011E1r 2 20 rr rr jsr FRM_ELEMENT | |
0011E4r 2 20 rr rr jsr CHKSTR | |
0011E7r 2 68 pla | |
0011E8r 2 85 BC sta STRNG1 | |
0011EAr 2 68 pla | |
0011EBr 2 85 BD sta STRNG1+1 | |
0011EDr 2 A0 00 ldy #$00 | |
0011EFr 2 B1 BC lda (STRNG1),y | |
0011F1r 2 18 clc | |
0011F2r 2 71 B1 adc (FAC_LAST-1),y | |
0011F4r 2 90 05 bcc L3454 | |
0011F6r 2 A2 B0 ldx #ERR_STRLONG | |
0011F8r 2 4C rr rr jmp ERROR | |
0011FBr 2 L3454: | |
0011FBr 2 20 rr rr jsr STRINI | |
0011FEr 2 20 rr rr jsr MOVINS | |
001201r 2 A5 9D lda DSCPTR | |
001203r 2 A4 9E ldy DSCPTR+1 | |
001205r 2 20 rr rr jsr FRETMP | |
001208r 2 20 rr rr jsr MOVSTR1 | |
00120Br 2 A5 BC lda STRNG1 | |
00120Dr 2 A4 BD ldy STRNG1+1 | |
00120Fr 2 20 rr rr jsr FRETMP | |
001212r 2 20 rr rr jsr PUTNEW | |
001215r 2 4C rr rr jmp FRMEVL2 | |
001218r 2 | |
001218r 2 ; ---------------------------------------------------------------------------- | |
001218r 2 ; GET STRING DESCRIPTOR POINTED AT BY (STRNG1) | |
001218r 2 ; AND MOVE DESCRIBED STRING TO (FRESPC) | |
001218r 2 ; ---------------------------------------------------------------------------- | |
001218r 2 MOVINS: | |
001218r 2 A0 00 ldy #$00 | |
00121Ar 2 B1 BC lda (STRNG1),y | |
00121Cr 2 48 pha | |
00121Dr 2 C8 iny | |
00121Er 2 B1 BC lda (STRNG1),y | |
001220r 2 AA tax | |
001221r 2 C8 iny | |
001222r 2 B1 BC lda (STRNG1),y | |
001224r 2 A8 tay | |
001225r 2 68 pla | |
001226r 2 | |
001226r 2 ; ---------------------------------------------------------------------------- | |
001226r 2 ; MOVE STRING AT (Y,X) WITH LENGTH (A) | |
001226r 2 ; TO DESTINATION WHOSE ADDRESS IS IN FRESPC,FRESPC+1 | |
001226r 2 ; ---------------------------------------------------------------------------- | |
001226r 2 MOVSTR: | |
001226r 2 86 6F stx INDEX | |
001228r 2 84 70 sty INDEX+1 | |
00122Ar 2 MOVSTR1: | |
00122Ar 2 A8 tay | |
00122Br 2 F0 0A beq L3490 | |
00122Dr 2 48 pha | |
00122Er 2 L3487: | |
00122Er 2 88 dey | |
00122Fr 2 B1 6F lda (INDEX),y | |
001231r 2 91 82 sta (FRESPC),y | |
001233r 2 98 tya | |
001234r 2 D0 F8 bne L3487 | |
001236r 2 68 pla | |
001237r 2 L3490: | |
001237r 2 18 clc | |
001238r 2 65 82 adc FRESPC | |
00123Ar 2 85 82 sta FRESPC | |
00123Cr 2 90 02 bcc L3499 | |
00123Er 2 E6 83 inc FRESPC+1 | |
001240r 2 L3499: | |
001240r 2 60 rts | |
001241r 2 | |
001241r 2 ; ---------------------------------------------------------------------------- | |
001241r 2 ; IF (FAC) IS A TEMPORARY STRING, RELEASE DESCRIPTOR | |
001241r 2 ; ---------------------------------------------------------------------------- | |
001241r 2 FRESTR: | |
001241r 2 20 rr rr jsr CHKSTR | |
001244r 2 | |
001244r 2 ; ---------------------------------------------------------------------------- | |
001244r 2 ; IF STRING DESCRIPTOR POINTED TO BY FAC+3,4 IS | |
001244r 2 ; A TEMPORARY STRING, RELEASE IT. | |
001244r 2 ; ---------------------------------------------------------------------------- | |
001244r 2 FREFAC: | |
001244r 2 A5 B1 lda FAC_LAST-1 | |
001246r 2 A4 B2 ldy FAC_LAST | |
001248r 2 | |
001248r 2 ; ---------------------------------------------------------------------------- | |
001248r 2 ; IF STRING DESCRIPTOR WHOSE ADDRESS IS IN Y,A IS | |
001248r 2 ; A TEMPORARY STRING, RELEASE IT. | |
001248r 2 ; ---------------------------------------------------------------------------- | |
001248r 2 FRETMP: | |
001248r 2 85 6F sta INDEX | |
00124Ar 2 84 70 sty INDEX+1 | |
00124Cr 2 20 rr rr jsr FRETMS | |
00124Fr 2 08 php | |
001250r 2 A0 00 ldy #$00 | |
001252r 2 B1 6F lda (INDEX),y | |
001254r 2 48 pha | |
001255r 2 C8 iny | |
001256r 2 B1 6F lda (INDEX),y | |
001258r 2 AA tax | |
001259r 2 C8 iny | |
00125Ar 2 B1 6F lda (INDEX),y | |
00125Cr 2 A8 tay | |
00125Dr 2 68 pla | |
00125Er 2 28 plp | |
00125Fr 2 D0 13 bne L34CD | |
001261r 2 C4 81 cpy FRETOP+1 | |
001263r 2 D0 0F bne L34CD | |
001265r 2 E4 80 cpx FRETOP | |
001267r 2 D0 0B bne L34CD | |
001269r 2 48 pha | |
00126Ar 2 18 clc | |
00126Br 2 65 80 adc FRETOP | |
00126Dr 2 85 80 sta FRETOP | |
00126Fr 2 90 02 bcc L34CC | |
001271r 2 E6 81 inc FRETOP+1 | |
001273r 2 L34CC: | |
001273r 2 68 pla | |
001274r 2 L34CD: | |
001274r 2 86 6F stx INDEX | |
001276r 2 84 70 sty INDEX+1 | |
001278r 2 60 rts | |
001279r 2 | |
001279r 2 ; ---------------------------------------------------------------------------- | |
001279r 2 ; RELEASE TEMPORARY DESCRIPTOR IF Y,A = LASTPT | |
001279r 2 ; ---------------------------------------------------------------------------- | |
001279r 2 FRETMS: | |
001279r 2 .ifdef KBD | |
001279r 2 cpy #$00 | |
001279r 2 .else | |
001279r 2 C4 65 cpy LASTPT+1 | |
00127Br 2 .endif | |
00127Br 2 D0 0C bne L34E2 | |
00127Dr 2 C5 64 cmp LASTPT | |
00127Fr 2 D0 08 bne L34E2 | |
001281r 2 85 63 sta TEMPPT | |
001283r 2 E9 03 sbc #$03 | |
001285r 2 85 64 sta LASTPT | |
001287r 2 A0 00 ldy #$00 | |
001289r 2 L34E2: | |
001289r 2 60 rts | |
00128Ar 2 | |
00128Ar 2 ; ---------------------------------------------------------------------------- | |
00128Ar 2 ; "CHR$" FUNCTION | |
00128Ar 2 ; ---------------------------------------------------------------------------- | |
00128Ar 2 CHRSTR: | |
00128Ar 2 20 rr rr jsr CONINT | |
00128Dr 2 8A txa | |
00128Er 2 48 pha | |
00128Fr 2 A9 01 lda #$01 | |
001291r 2 20 rr rr jsr STRSPA | |
001294r 2 68 pla | |
001295r 2 A0 00 ldy #$00 | |
001297r 2 91 AF sta (FAC+1),y | |
001299r 2 68 pla | |
00129Ar 2 68 pla | |
00129Br 2 4C rr rr jmp PUTNEW | |
00129Er 2 | |
00129Er 2 ; ---------------------------------------------------------------------------- | |
00129Er 2 ; "LEFT$" FUNCTION | |
00129Er 2 ; ---------------------------------------------------------------------------- | |
00129Er 2 LEFTSTR: | |
00129Er 2 20 rr rr jsr SUBSTRING_SETUP | |
0012A1r 2 D1 9D cmp (DSCPTR),y | |
0012A3r 2 98 tya | |
0012A4r 2 SUBSTRING1: | |
0012A4r 2 90 04 bcc L3503 | |
0012A6r 2 B1 9D lda (DSCPTR),y | |
0012A8r 2 AA tax | |
0012A9r 2 98 tya | |
0012AAr 2 L3503: | |
0012AAr 2 48 pha | |
0012ABr 2 SUBSTRING2: | |
0012ABr 2 8A txa | |
0012ACr 2 SUBSTRING3: | |
0012ACr 2 48 pha | |
0012ADr 2 20 rr rr jsr STRSPA | |
0012B0r 2 A5 9D lda DSCPTR | |
0012B2r 2 A4 9E ldy DSCPTR+1 | |
0012B4r 2 20 rr rr jsr FRETMP | |
0012B7r 2 68 pla | |
0012B8r 2 A8 tay | |
0012B9r 2 68 pla | |
0012BAr 2 18 clc | |
0012BBr 2 65 6F adc INDEX | |
0012BDr 2 85 6F sta INDEX | |
0012BFr 2 90 02 bcc L351C | |
0012C1r 2 E6 70 inc INDEX+1 | |
0012C3r 2 L351C: | |
0012C3r 2 98 tya | |
0012C4r 2 20 rr rr jsr MOVSTR1 | |
0012C7r 2 4C rr rr jmp PUTNEW | |
0012CAr 2 | |
0012CAr 2 ; ---------------------------------------------------------------------------- | |
0012CAr 2 ; "RIGHT$" FUNCTION | |
0012CAr 2 ; ---------------------------------------------------------------------------- | |
0012CAr 2 RIGHTSTR: | |
0012CAr 2 20 rr rr jsr SUBSTRING_SETUP | |
0012CDr 2 18 clc | |
0012CEr 2 F1 9D sbc (DSCPTR),y | |
0012D0r 2 49 FF eor #$FF | |
0012D2r 2 4C rr rr jmp SUBSTRING1 | |
0012D5r 2 | |
0012D5r 2 ; ---------------------------------------------------------------------------- | |
0012D5r 2 ; "MID$" FUNCTION | |
0012D5r 2 ; ---------------------------------------------------------------------------- | |
0012D5r 2 MIDSTR: | |
0012D5r 2 A9 FF lda #$FF | |
0012D7r 2 85 B2 sta FAC_LAST | |
0012D9r 2 20 C6 00 jsr CHRGOT | |
0012DCr 2 C9 29 cmp #$29 | |
0012DEr 2 F0 06 beq L353F | |
0012E0r 2 20 rr rr jsr CHKCOM | |
0012E3r 2 20 rr rr jsr GETBYT | |
0012E6r 2 L353F: | |
0012E6r 2 20 rr rr jsr SUBSTRING_SETUP | |
0012E9r 2 .ifdef CONFIG_2 | |
0012E9r 2 beq GOIQ | |
0012E9r 2 .endif | |
0012E9r 2 CA dex | |
0012EAr 2 8A txa | |
0012EBr 2 48 pha | |
0012ECr 2 18 clc | |
0012EDr 2 A2 00 ldx #$00 | |
0012EFr 2 F1 9D sbc (DSCPTR),y | |
0012F1r 2 B0 B8 bcs SUBSTRING2 | |
0012F3r 2 49 FF eor #$FF | |
0012F5r 2 C5 B2 cmp FAC_LAST | |
0012F7r 2 90 B3 bcc SUBSTRING3 | |
0012F9r 2 A5 B2 lda FAC_LAST | |
0012FBr 2 B0 AF bcs SUBSTRING3 | |
0012FDr 2 | |
0012FDr 2 ; ---------------------------------------------------------------------------- | |
0012FDr 2 ; COMMON SETUP ROUTINE FOR LEFT$, RIGHT$, MID$: | |
0012FDr 2 ; REQUIRE ")"; POP RETURN ADRS, GET DESCRIPTOR | |
0012FDr 2 ; ADDRESS, GET 1ST PARAMETER OF COMMAND | |
0012FDr 2 ; ---------------------------------------------------------------------------- | |
0012FDr 2 SUBSTRING_SETUP: | |
0012FDr 2 20 rr rr jsr CHKCLS | |
001300r 2 68 pla | |
001301r 2 .ifndef CONFIG_11 | |
001301r 2 sta JMPADRS+1 | |
001301r 2 pla | |
001301r 2 sta JMPADRS+2 | |
001301r 2 .else | |
001301r 2 A8 tay | |
001302r 2 68 pla | |
001303r 2 85 A2 sta Z52 | |
001305r 2 .endif | |
001305r 2 68 pla | |
001306r 2 68 pla | |
001307r 2 68 pla | |
001308r 2 AA tax | |
001309r 2 68 pla | |
00130Ar 2 85 9D sta DSCPTR | |
00130Cr 2 68 pla | |
00130Dr 2 85 9E sta DSCPTR+1 | |
00130Fr 2 .ifdef CONFIG_11 | |
00130Fr 2 A5 A2 lda Z52 | |
001311r 2 48 pha | |
001312r 2 98 tya | |
001313r 2 48 pha | |
001314r 2 .endif | |
001314r 2 A0 00 ldy #$00 | |
001316r 2 8A txa | |
001317r 2 .ifndef CONFIG_2 | |
001317r 2 F0 1D beq GOIQ | |
001319r 2 .endif | |
001319r 2 .ifndef CONFIG_11 | |
001319r 2 inc JMPADRS+1 | |
001319r 2 jmp (JMPADRS+1) | |
001319r 2 .else | |
001319r 2 60 rts | |
00131Ar 2 .endif | |
00131Ar 2 | |
00131Ar 2 ; ---------------------------------------------------------------------------- | |
00131Ar 2 ; "LEN" FUNCTION | |
00131Ar 2 ; ---------------------------------------------------------------------------- | |
00131Ar 2 LEN: | |
00131Ar 2 20 rr rr jsr GETSTR | |
00131Dr 2 SNGFLT1: | |
00131Dr 2 4C rr rr jmp SNGFLT | |
001320r 2 | |
001320r 2 ; ---------------------------------------------------------------------------- | |
001320r 2 ; IF LAST RESULT IS A TEMPORARY STRING, FREE IT | |
001320r 2 ; MAKE VALTYP NUMERIC, RETURN LENGTH IN Y-REG | |
001320r 2 ; ---------------------------------------------------------------------------- | |
001320r 2 GETSTR: | |
001320r 2 20 rr rr jsr FRESTR | |
001323r 2 A2 00 ldx #$00 | |
001325r 2 86 0E stx VALTYP | |
001327r 2 A8 tay | |
001328r 2 60 rts | |
001329r 2 | |
001329r 2 ; ---------------------------------------------------------------------------- | |
001329r 2 ; "ASC" FUNCTION | |
001329r 2 ; ---------------------------------------------------------------------------- | |
001329r 2 ASC: | |
001329r 2 20 rr rr jsr GETSTR | |
00132Cr 2 F0 08 beq GOIQ | |
00132Er 2 A0 00 ldy #$00 | |
001330r 2 B1 6F lda (INDEX),y | |
001332r 2 A8 tay | |
001333r 2 .ifndef CONFIG_11A | |
001333r 2 jmp SNGFLT1 | |
001333r 2 .else | |
001333r 2 4C rr rr jmp SNGFLT | |
001336r 2 .endif | |
001336r 2 ; ---------------------------------------------------------------------------- | |
001336r 2 GOIQ: | |
001336r 2 4C rr rr jmp IQERR | |
001339r 2 | |
001339r 2 ; ---------------------------------------------------------------------------- | |
001339r 2 ; SCAN TO NEXT CHARACTER AND CONVERT EXPRESSION | |
001339r 2 ; TO SINGLE BYTE IN X-REG | |
001339r 2 ; ---------------------------------------------------------------------------- | |
001339r 2 GTBYTC: | |
001339r 2 20 C0 00 jsr CHRGET | |
00133Cr 2 | |
00133Cr 2 ; ---------------------------------------------------------------------------- | |
00133Cr 2 ; EVALUATE EXPRESSION AT TXTPTR, AND | |
00133Cr 2 ; CONVERT IT TO SINGLE BYTE IN X-REG | |
00133Cr 2 ; ---------------------------------------------------------------------------- | |
00133Cr 2 GETBYT: | |
00133Cr 2 20 rr rr jsr FRMNUM | |
00133Fr 2 | |
00133Fr 2 ; ---------------------------------------------------------------------------- | |
00133Fr 2 ; CONVERT (FAC) TO SINGLE BYTE INTEGER IN X-REG | |
00133Fr 2 ; ---------------------------------------------------------------------------- | |
00133Fr 2 CONINT: | |
00133Fr 2 20 rr rr jsr MKINT | |
001342r 2 A6 B1 ldx FAC_LAST-1 | |
001344r 2 D0 F0 bne GOIQ | |
001346r 2 A6 B2 ldx FAC_LAST | |
001348r 2 4C C6 00 jmp CHRGOT | |
00134Br 2 | |
00134Br 2 ; ---------------------------------------------------------------------------- | |
00134Br 2 ; "VAL" FUNCTION | |
00134Br 2 ; ---------------------------------------------------------------------------- | |
00134Br 2 VAL: | |
00134Br 2 20 rr rr jsr GETSTR | |
00134Er 2 D0 03 bne L35AC | |
001350r 2 4C rr rr jmp ZERO_FAC | |
001353r 2 L35AC: | |
001353r 2 A6 C7 ldx TXTPTR | |
001355r 2 A4 C8 ldy TXTPTR+1 | |
001357r 2 86 BE stx STRNG2 | |
001359r 2 84 BF sty STRNG2+1 | |
00135Br 2 A6 6F ldx INDEX | |
00135Dr 2 86 C7 stx TXTPTR | |
00135Fr 2 18 clc | |
001360r 2 65 6F adc INDEX | |
001362r 2 85 71 sta DEST | |
001364r 2 A6 70 ldx INDEX+1 | |
001366r 2 86 C8 stx TXTPTR+1 | |
001368r 2 90 01 bcc L35C4 | |
00136Ar 2 E8 inx | |
00136Br 2 L35C4: | |
00136Br 2 86 72 stx DEST+1 | |
00136Dr 2 A0 00 ldy #$00 | |
00136Fr 2 B1 71 lda (DEST),y | |
001371r 2 48 pha | |
001372r 2 A9 00 lda #$00 | |
001374r 2 91 71 sta (DEST),y | |
001376r 2 20 C6 00 jsr CHRGOT | |
001379r 2 20 rr rr jsr FIN | |
00137Cr 2 68 pla | |
00137Dr 2 A0 00 ldy #$00 | |
00137Fr 2 91 71 sta (DEST),y | |
001381r 2 | |
001381r 2 ; ---------------------------------------------------------------------------- | |
001381r 2 ; COPY STRNG2 INTO TXTPTR | |
001381r 2 ; ---------------------------------------------------------------------------- | |
001381r 2 POINT: | |
001381r 2 A6 BE ldx STRNG2 | |
001383r 2 A4 BF ldy STRNG2+1 | |
001385r 2 86 C7 stx TXTPTR | |
001387r 2 84 C8 sty TXTPTR+1 | |
001389r 2 60 rts | |
00138Ar 2 | |
00138Ar 2 | |
00138Ar 1 .include "misc3.s" | |
00138Ar 2 ; KBD specific patches | |
00138Ar 2 | |
00138Ar 2 .segment "CODE" | |
00138Ar 2 | |
00138Ar 2 .ifdef KBD | |
00138Ar 2 VARTAB_MINUS_2_TO_AY: | |
00138Ar 2 lda VARTAB | |
00138Ar 2 sec | |
00138Ar 2 sbc #$02 | |
00138Ar 2 ldy VARTAB+1 | |
00138Ar 2 bcs LF42C | |
00138Ar 2 dey | |
00138Ar 2 LF42C: | |
00138Ar 2 rts | |
00138Ar 2 | |
00138Ar 2 ; ---------------------------------------------------------------------------- | |
00138Ar 2 GET_UPPER: | |
00138Ar 2 lda INPUTBUFFERX,x | |
00138Ar 2 LF430: | |
00138Ar 2 cmp #'a' | |
00138Ar 2 bcc LF43A | |
00138Ar 2 cmp #'z'+1 | |
00138Ar 2 bcs LF43A | |
00138Ar 2 LF438: | |
00138Ar 2 sbc #$1F | |
00138Ar 2 LF43A: | |
00138Ar 2 rts | |
00138Ar 2 | |
00138Ar 2 ; ---------------------------------------------------------------------------- | |
00138Ar 2 GETLN: | |
00138Ar 2 ldx #$5D | |
00138Ar 2 LF43D: | |
00138Ar 2 txa | |
00138Ar 2 and #$7F | |
00138Ar 2 cmp $0340 | |
00138Ar 2 beq LF44D | |
00138Ar 2 sta $0340 | |
00138Ar 2 lda #$03 | |
00138Ar 2 jsr LDE48 | |
00138Ar 2 LF44D: | |
00138Ar 2 jsr LDE7F | |
00138Ar 2 bne RTS4 | |
00138Ar 2 cpx #$80 | |
00138Ar 2 bcc LF44D | |
00138Ar 2 RTS4: | |
00138Ar 2 rts | |
00138Ar 2 | |
00138Ar 2 ; ---------------------------------------------------------------------------- | |
00138Ar 2 LF457: | |
00138Ar 2 lda TXTTAB | |
00138Ar 2 ldx TXTTAB+1 | |
00138Ar 2 LF45B: | |
00138Ar 2 sta JMPADRS+1 | |
00138Ar 2 stx JMPADRS+2 | |
00138Ar 2 ldy #$01 | |
00138Ar 2 lda (JMPADRS+1),y | |
00138Ar 2 beq LF438 | |
00138Ar 2 iny | |
00138Ar 2 iny | |
00138Ar 2 lda (JMPADRS+1),y | |
00138Ar 2 dey | |
00138Ar 2 cmp LINNUM+1 | |
00138Ar 2 bne LF472 | |
00138Ar 2 lda (JMPADRS+1),y | |
00138Ar 2 cmp LINNUM | |
00138Ar 2 LF472: | |
00138Ar 2 bcs LF43A | |
00138Ar 2 dey | |
00138Ar 2 lda (JMPADRS+1),y | |
00138Ar 2 tax | |
00138Ar 2 dey | |
00138Ar 2 lda (JMPADRS+1),y | |
00138Ar 2 bcc LF45B | |
00138Ar 2 LF47D: | |
00138Ar 2 jmp (JMPADRS+1) | |
00138Ar 2 .endif | |
00138Ar 2 | |
00138Ar 1 .include "poke.s" | |
00138Ar 2 .segment "CODE" | |
00138Ar 2 | |
00138Ar 2 .ifndef CONFIG_NO_POKE | |
00138Ar 2 ; ---------------------------------------------------------------------------- | |
00138Ar 2 ; EVALUATE "EXP1,EXP2" | |
00138Ar 2 ; | |
00138Ar 2 ; CONVERT EXP1 TO 16-BIT NUMBER IN LINNUM | |
00138Ar 2 ; CONVERT EXP2 TO 8-BIT NUMBER IN X-REG | |
00138Ar 2 ; ---------------------------------------------------------------------------- | |
00138Ar 2 GTNUM: | |
00138Ar 2 20 rr rr jsr FRMNUM | |
00138Dr 2 20 rr rr jsr GETADR | |
001390r 2 | |
001390r 2 ; ---------------------------------------------------------------------------- | |
001390r 2 ; EVALUATE ",EXPRESSION" | |
001390r 2 ; CONVERT EXPRESSION TO SINGLE BYTE IN X-REG | |
001390r 2 ; ---------------------------------------------------------------------------- | |
001390r 2 COMBYTE: | |
001390r 2 20 rr rr jsr CHKCOM | |
001393r 2 4C rr rr jmp GETBYT | |
001396r 2 | |
001396r 2 ; ---------------------------------------------------------------------------- | |
001396r 2 ; CONVERT (FAC) TO A 16-BIT VALUE IN LINNUM | |
001396r 2 ; ---------------------------------------------------------------------------- | |
001396r 2 GETADR: | |
001396r 2 A5 B3 lda FACSIGN | |
001398r 2 .ifdef APPLE | |
001398r 2 nop ; PATCH | |
001398r 2 nop | |
001398r 2 .else | |
001398r 2 30 9C bmi GOIQ | |
00139Ar 2 .endif | |
00139Ar 2 A5 AE lda FAC | |
00139Cr 2 C9 91 cmp #$91 | |
00139Er 2 B0 96 bcs GOIQ | |
0013A0r 2 20 rr rr jsr QINT | |
0013A3r 2 A5 B1 lda FAC_LAST-1 | |
0013A5r 2 A4 B2 ldy FAC_LAST | |
0013A7r 2 84 19 sty LINNUM | |
0013A9r 2 85 1A sta LINNUM+1 | |
0013ABr 2 60 rts | |
0013ACr 2 | |
0013ACr 2 ; ---------------------------------------------------------------------------- | |
0013ACr 2 ; "PEEK" FUNCTION | |
0013ACr 2 ; ---------------------------------------------------------------------------- | |
0013ACr 2 PEEK: | |
0013ACr 2 .ifdef CONFIG_PEEK_SAVE_LINNUM | |
0013ACr 2 lda LINNUM+1 | |
0013ACr 2 pha | |
0013ACr 2 lda LINNUM | |
0013ACr 2 pha | |
0013ACr 2 .endif | |
0013ACr 2 20 rr rr jsr GETADR | |
0013AFr 2 A0 00 ldy #$00 | |
0013B1r 2 .ifdef CBM1 | |
0013B1r 2 ; disallow PEEK between $C000 and $DFFF | |
0013B1r 2 cmp #$C0 | |
0013B1r 2 bcc LD6F3 | |
0013B1r 2 cmp #$E1 | |
0013B1r 2 bcc LD6F6 | |
0013B1r 2 LD6F3: | |
0013B1r 2 .endif | |
0013B1r 2 .ifdef CBM2 | |
0013B1r 2 nop ; patch that disables the compares above | |
0013B1r 2 nop | |
0013B1r 2 nop | |
0013B1r 2 nop | |
0013B1r 2 nop | |
0013B1r 2 nop | |
0013B1r 2 nop | |
0013B1r 2 nop | |
0013B1r 2 .endif | |
0013B1r 2 B1 19 lda (LINNUM),y | |
0013B3r 2 A8 tay | |
0013B4r 2 .ifdef CONFIG_PEEK_SAVE_LINNUM | |
0013B4r 2 pla | |
0013B4r 2 sta LINNUM | |
0013B4r 2 pla | |
0013B4r 2 sta LINNUM+1 | |
0013B4r 2 .endif | |
0013B4r 2 LD6F6: | |
0013B4r 2 4C rr rr jmp SNGFLT | |
0013B7r 2 | |
0013B7r 2 ; ---------------------------------------------------------------------------- | |
0013B7r 2 ; "POKE" STATEMENT | |
0013B7r 2 ; ---------------------------------------------------------------------------- | |
0013B7r 2 POKE: | |
0013B7r 2 20 rr rr jsr GTNUM | |
0013BAr 2 8A txa | |
0013BBr 2 A0 00 ldy #$00 | |
0013BDr 2 91 19 sta (LINNUM),y | |
0013BFr 2 60 rts | |
0013C0r 2 | |
0013C0r 2 ; ---------------------------------------------------------------------------- | |
0013C0r 2 ; "WAIT" STATEMENT | |
0013C0r 2 ; ---------------------------------------------------------------------------- | |
0013C0r 2 WAIT: | |
0013C0r 2 20 rr rr jsr GTNUM | |
0013C3r 2 86 96 stx FORPNT | |
0013C5r 2 A2 00 ldx #$00 | |
0013C7r 2 20 C6 00 jsr CHRGOT | |
0013CAr 2 .ifdef CONFIG_EASTER_EGG | |
0013CAr 2 beq EASTER_EGG | |
0013CAr 2 .else | |
0013CAr 2 F0 03 beq L3628 | |
0013CCr 2 .endif | |
0013CCr 2 20 rr rr jsr COMBYTE | |
0013CFr 2 L3628: | |
0013CFr 2 86 97 stx FORPNT+1 | |
0013D1r 2 A0 00 ldy #$00 | |
0013D3r 2 L362C: | |
0013D3r 2 B1 19 lda (LINNUM),y | |
0013D5r 2 45 97 eor FORPNT+1 | |
0013D7r 2 25 96 and FORPNT | |
0013D9r 2 F0 F8 beq L362C | |
0013DBr 2 RTS3: | |
0013DBr 2 60 rts | |
0013DCr 2 .endif ;/* KBD */ | |
0013DCr 2 | |
0013DCr 1 .include "float.s" | |
0013DCr 2 .segment "CODE" | |
0013DCr 2 | |
0013DCr 2 TEMP1X = TEMP1+(5-BYTES_FP) | |
0013DCr 2 | |
0013DCr 2 ; ---------------------------------------------------------------------------- | |
0013DCr 2 ; ADD 0.5 TO FAC | |
0013DCr 2 ; ---------------------------------------------------------------------------- | |
0013DCr 2 FADDH: | |
0013DCr 2 A9 rr lda #<CON_HALF | |
0013DEr 2 A0 rr ldy #>CON_HALF | |
0013E0r 2 4C rr rr jmp FADD | |
0013E3r 2 | |
0013E3r 2 ; ---------------------------------------------------------------------------- | |
0013E3r 2 ; FAC = (Y,A) - FAC | |
0013E3r 2 ; ---------------------------------------------------------------------------- | |
0013E3r 2 FSUB: | |
0013E3r 2 20 rr rr jsr LOAD_ARG_FROM_YA | |
0013E6r 2 | |
0013E6r 2 ; ---------------------------------------------------------------------------- | |
0013E6r 2 ; FAC = ARG - FAC | |
0013E6r 2 ; ---------------------------------------------------------------------------- | |
0013E6r 2 FSUBT: | |
0013E6r 2 A5 B3 lda FACSIGN | |
0013E8r 2 49 FF eor #$FF | |
0013EAr 2 85 B3 sta FACSIGN | |
0013ECr 2 45 BB eor ARGSIGN | |
0013EEr 2 85 BC sta SGNCPR | |
0013F0r 2 A5 AE lda FAC | |
0013F2r 2 4C rr rr jmp FADDT | |
0013F5r 2 | |
0013F5r 2 ; ---------------------------------------------------------------------------- | |
0013F5r 2 ; Commodore BASIC V2 Easter Egg | |
0013F5r 2 ; ---------------------------------------------------------------------------- | |
0013F5r 2 .ifdef CONFIG_EASTER_EGG | |
0013F5r 2 EASTER_EGG: | |
0013F5r 2 lda LINNUM | |
0013F5r 2 cmp #<6502 | |
0013F5r 2 bne L3628 | |
0013F5r 2 lda LINNUM+1 | |
0013F5r 2 sbc #>6502 | |
0013F5r 2 bne L3628 | |
0013F5r 2 sta LINNUM | |
0013F5r 2 tay | |
0013F5r 2 lda #$80 | |
0013F5r 2 sta LINNUM+1 | |
0013F5r 2 LD758: | |
0013F5r 2 ldx #$0A | |
0013F5r 2 LD75A: | |
0013F5r 2 lda MICROSOFT-1,x | |
0013F5r 2 and #$3F | |
0013F5r 2 sta (LINNUM),y | |
0013F5r 2 iny | |
0013F5r 2 bne LD766 | |
0013F5r 2 inc LINNUM+1 | |
0013F5r 2 LD766: | |
0013F5r 2 dex | |
0013F5r 2 bne LD75A | |
0013F5r 2 dec FORPNT | |
0013F5r 2 bne LD758 | |
0013F5r 2 rts | |
0013F5r 2 .endif | |
0013F5r 2 | |
0013F5r 2 ; ---------------------------------------------------------------------------- | |
0013F5r 2 ; SHIFT SMALLER ARGUMENT MORE THAN 7 BITS | |
0013F5r 2 ; ---------------------------------------------------------------------------- | |
0013F5r 2 FADD1: | |
0013F5r 2 20 rr rr jsr SHIFT_RIGHT | |
0013F8r 2 90 3C bcc FADD3 | |
0013FAr 2 | |
0013FAr 2 ; ---------------------------------------------------------------------------- | |
0013FAr 2 ; FAC = (Y,A) + FAC | |
0013FAr 2 ; ---------------------------------------------------------------------------- | |
0013FAr 2 FADD: | |
0013FAr 2 20 rr rr jsr LOAD_ARG_FROM_YA | |
0013FDr 2 | |
0013FDr 2 ; ---------------------------------------------------------------------------- | |
0013FDr 2 ; FAC = ARG + FAC | |
0013FDr 2 ; ---------------------------------------------------------------------------- | |
0013FDr 2 FADDT: | |
0013FDr 2 D0 03 bne L365B | |
0013FFr 2 4C rr rr jmp COPY_ARG_TO_FAC | |
001402r 2 L365B: | |
001402r 2 A6 BD ldx FACEXTENSION | |
001404r 2 86 A3 stx ARGEXTENSION | |
001406r 2 A2 B6 ldx #ARG | |
001408r 2 A5 B6 lda ARG | |
00140Ar 2 FADD2: | |
00140Ar 2 A8 tay | |
00140Br 2 .ifdef KBD | |
00140Br 2 beq RTS4 | |
00140Br 2 .else | |
00140Br 2 F0 CE beq RTS3 | |
00140Dr 2 .endif | |
00140Dr 2 38 sec | |
00140Er 2 E5 AE sbc FAC | |
001410r 2 F0 24 beq FADD3 | |
001412r 2 90 12 bcc L367F | |
001414r 2 84 AE sty FAC | |
001416r 2 A4 BB ldy ARGSIGN | |
001418r 2 84 B3 sty FACSIGN | |
00141Ar 2 49 FF eor #$FF | |
00141Cr 2 69 00 adc #$00 | |
00141Er 2 A0 00 ldy #$00 | |
001420r 2 84 A3 sty ARGEXTENSION | |
001422r 2 A2 AE ldx #FAC | |
001424r 2 D0 04 bne L3683 | |
001426r 2 L367F: | |
001426r 2 A0 00 ldy #$00 | |
001428r 2 84 BD sty FACEXTENSION | |
00142Ar 2 L3683: | |
00142Ar 2 C9 F9 cmp #$F9 | |
00142Cr 2 30 C7 bmi FADD1 | |
00142Er 2 A8 tay | |
00142Fr 2 A5 BD lda FACEXTENSION | |
001431r 2 56 01 lsr 1,x | |
001433r 2 20 rr rr jsr SHIFT_RIGHT4 | |
001436r 2 FADD3: | |
001436r 2 24 BC bit SGNCPR | |
001438r 2 10 57 bpl FADD4 | |
00143Ar 2 A0 AE ldy #FAC | |
00143Cr 2 E0 B6 cpx #ARG | |
00143Er 2 F0 02 beq L369B | |
001440r 2 A0 B6 ldy #ARG | |
001442r 2 L369B: | |
001442r 2 38 sec | |
001443r 2 49 FF eor #$FF | |
001445r 2 65 A3 adc ARGEXTENSION | |
001447r 2 85 BD sta FACEXTENSION | |
001449r 2 .ifndef CONFIG_SMALL | |
001449r 2 B9 04 00 lda 4,y | |
00144Cr 2 F5 04 sbc 4,x | |
00144Er 2 85 B2 sta FAC+4 | |
001450r 2 .endif | |
001450r 2 B9 03 00 lda 3,y | |
001453r 2 F5 03 sbc 3,x | |
001455r 2 85 B1 sta FAC+3 | |
001457r 2 B9 02 00 lda 2,y | |
00145Ar 2 F5 02 sbc 2,x | |
00145Cr 2 85 B0 sta FAC+2 | |
00145Er 2 B9 01 00 lda 1,y | |
001461r 2 F5 01 sbc 1,x | |
001463r 2 85 AF sta FAC+1 | |
001465r 2 | |
001465r 2 ; ---------------------------------------------------------------------------- | |
001465r 2 ; NORMALIZE VALUE IN FAC | |
001465r 2 ; ---------------------------------------------------------------------------- | |
001465r 2 NORMALIZE_FAC1: | |
001465r 2 B0 03 bcs NORMALIZE_FAC2 | |
001467r 2 20 rr rr jsr COMPLEMENT_FAC | |
00146Ar 2 NORMALIZE_FAC2: | |
00146Ar 2 A0 00 ldy #$00 | |
00146Cr 2 98 tya | |
00146Dr 2 18 clc | |
00146Er 2 L36C7: | |
00146Er 2 A6 AF ldx FAC+1 | |
001470r 2 D0 4A bne NORMALIZE_FAC4 | |
001472r 2 A6 B0 ldx FAC+2 | |
001474r 2 86 AF stx FAC+1 | |
001476r 2 A6 B1 ldx FAC+3 | |
001478r 2 86 B0 stx FAC+2 | |
00147Ar 2 .ifdef CONFIG_SMALL | |
00147Ar 2 ldx FACEXTENSION | |
00147Ar 2 stx FAC+3 | |
00147Ar 2 .else | |
00147Ar 2 A6 B2 ldx FAC+4 | |
00147Cr 2 86 B1 stx FAC+3 | |
00147Er 2 A6 BD ldx FACEXTENSION | |
001480r 2 86 B2 stx FAC+4 | |
001482r 2 .endif | |
001482r 2 84 BD sty FACEXTENSION | |
001484r 2 69 08 adc #$08 | |
001486r 2 .ifdef CONFIG_2B | |
001486r 2 ; bugfix? | |
001486r 2 ; fix does not exist on AppleSoft 2 | |
001486r 2 cmp #(MANTISSA_BYTES+1)*8 | |
001486r 2 .else | |
001486r 2 C9 20 cmp #MANTISSA_BYTES*8 | |
001488r 2 .endif | |
001488r 2 D0 E4 bne L36C7 | |
00148Ar 2 | |
00148Ar 2 ; ---------------------------------------------------------------------------- | |
00148Ar 2 ; SET FAC = 0 | |
00148Ar 2 ; (ONLY NECESSARY TO ZERO EXPONENT AND SIGN CELLS) | |
00148Ar 2 ; ---------------------------------------------------------------------------- | |
00148Ar 2 ZERO_FAC: | |
00148Ar 2 A9 00 lda #$00 | |
00148Cr 2 STA_IN_FAC_SIGN_AND_EXP: | |
00148Cr 2 85 AE sta FAC | |
00148Er 2 STA_IN_FAC_SIGN: | |
00148Er 2 85 B3 sta FACSIGN | |
001490r 2 60 rts | |
001491r 2 | |
001491r 2 ; ---------------------------------------------------------------------------- | |
001491r 2 ; ADD MANTISSAS OF FAC AND ARG INTO FAC | |
001491r 2 ; ---------------------------------------------------------------------------- | |
001491r 2 FADD4: | |
001491r 2 65 A3 adc ARGEXTENSION | |
001493r 2 85 BD sta FACEXTENSION | |
001495r 2 .ifndef CONFIG_SMALL | |
001495r 2 A5 B2 lda FAC+4 | |
001497r 2 65 BA adc ARG+4 | |
001499r 2 85 B2 sta FAC+4 | |
00149Br 2 .endif | |
00149Br 2 A5 B1 lda FAC+3 | |
00149Dr 2 65 B9 adc ARG+3 | |
00149Fr 2 85 B1 sta FAC+3 | |
0014A1r 2 A5 B0 lda FAC+2 | |
0014A3r 2 65 B8 adc ARG+2 | |
0014A5r 2 85 B0 sta FAC+2 | |
0014A7r 2 A5 AF lda FAC+1 | |
0014A9r 2 65 B7 adc ARG+1 | |
0014ABr 2 85 AF sta FAC+1 | |
0014ADr 2 4C rr rr jmp NORMALIZE_FAC5 | |
0014B0r 2 | |
0014B0r 2 ; ---------------------------------------------------------------------------- | |
0014B0r 2 ; FINISH NORMALIZING FAC | |
0014B0r 2 ; ---------------------------------------------------------------------------- | |
0014B0r 2 NORMALIZE_FAC3: | |
0014B0r 2 69 01 adc #$01 | |
0014B2r 2 06 BD asl FACEXTENSION | |
0014B4r 2 .ifndef CONFIG_SMALL | |
0014B4r 2 26 B2 rol FAC+4 | |
0014B6r 2 .endif | |
0014B6r 2 26 B1 rol FAC+3 | |
0014B8r 2 26 B0 rol FAC+2 | |
0014BAr 2 26 AF rol FAC+1 | |
0014BCr 2 NORMALIZE_FAC4: | |
0014BCr 2 10 F2 bpl NORMALIZE_FAC3 | |
0014BEr 2 38 sec | |
0014BFr 2 E5 AE sbc FAC | |
0014C1r 2 B0 C7 bcs ZERO_FAC | |
0014C3r 2 49 FF eor #$FF | |
0014C5r 2 69 01 adc #$01 | |
0014C7r 2 85 AE sta FAC | |
0014C9r 2 NORMALIZE_FAC5: | |
0014C9r 2 90 40 bcc L3764 | |
0014CBr 2 NORMALIZE_FAC6: | |
0014CBr 2 E6 AE inc FAC | |
0014CDr 2 F0 74 beq OVERFLOW | |
0014CFr 2 .ifndef CONFIG_ROR_WORKAROUND | |
0014CFr 2 ror FAC+1 | |
0014CFr 2 ror FAC+2 | |
0014CFr 2 ror FAC+3 | |
0014CFr 2 .ifndef CONFIG_SMALL | |
0014CFr 2 ror FAC+4 | |
0014CFr 2 .endif | |
0014CFr 2 ror FACEXTENSION | |
0014CFr 2 .else | |
0014CFr 2 A9 00 lda #$00 | |
0014D1r 2 90 02 bcc L372E | |
0014D3r 2 A9 80 lda #$80 | |
0014D5r 2 L372E: | |
0014D5r 2 46 AF lsr FAC+1 | |
0014D7r 2 05 AF ora FAC+1 | |
0014D9r 2 85 AF sta FAC+1 | |
0014DBr 2 A9 00 lda #$00 | |
0014DDr 2 90 02 bcc L373A | |
0014DFr 2 A9 80 lda #$80 | |
0014E1r 2 L373A: | |
0014E1r 2 46 B0 lsr FAC+2 | |
0014E3r 2 05 B0 ora FAC+2 | |
0014E5r 2 85 B0 sta FAC+2 | |
0014E7r 2 A9 00 lda #$00 | |
0014E9r 2 90 02 bcc L3746 | |
0014EBr 2 A9 80 lda #$80 | |
0014EDr 2 L3746: | |
0014EDr 2 46 B1 lsr FAC+3 | |
0014EFr 2 05 B1 ora FAC+3 | |
0014F1r 2 85 B1 sta FAC+3 | |
0014F3r 2 A9 00 lda #$00 | |
0014F5r 2 90 02 bcc L3752 | |
0014F7r 2 A9 80 lda #$80 | |
0014F9r 2 L3752: | |
0014F9r 2 46 B2 lsr FAC+4 | |
0014FBr 2 05 B2 ora FAC+4 | |
0014FDr 2 85 B2 sta FAC+4 | |
0014FFr 2 A9 00 lda #$00 | |
001501r 2 90 02 bcc L375E | |
001503r 2 A9 80 lda #$80 | |
001505r 2 L375E: | |
001505r 2 46 BD lsr FACEXTENSION | |
001507r 2 05 BD ora FACEXTENSION | |
001509r 2 85 BD sta FACEXTENSION | |
00150Br 2 .endif | |
00150Br 2 L3764: | |
00150Br 2 60 rts | |
00150Cr 2 | |
00150Cr 2 ; ---------------------------------------------------------------------------- | |
00150Cr 2 ; 2'S COMPLEMENT OF FAC | |
00150Cr 2 ; ---------------------------------------------------------------------------- | |
00150Cr 2 COMPLEMENT_FAC: | |
00150Cr 2 A5 B3 lda FACSIGN | |
00150Er 2 49 FF eor #$FF | |
001510r 2 85 B3 sta FACSIGN | |
001512r 2 | |
001512r 2 ; ---------------------------------------------------------------------------- | |
001512r 2 ; 2'S COMPLEMENT OF FAC MANTISSA ONLY | |
001512r 2 ; ---------------------------------------------------------------------------- | |
001512r 2 COMPLEMENT_FAC_MANTISSA: | |
001512r 2 A5 AF lda FAC+1 | |
001514r 2 49 FF eor #$FF | |
001516r 2 85 AF sta FAC+1 | |
001518r 2 A5 B0 lda FAC+2 | |
00151Ar 2 49 FF eor #$FF | |
00151Cr 2 85 B0 sta FAC+2 | |
00151Er 2 A5 B1 lda FAC+3 | |
001520r 2 49 FF eor #$FF | |
001522r 2 85 B1 sta FAC+3 | |
001524r 2 .ifndef CONFIG_SMALL | |
001524r 2 A5 B2 lda FAC+4 | |
001526r 2 49 FF eor #$FF | |
001528r 2 85 B2 sta FAC+4 | |
00152Ar 2 .endif | |
00152Ar 2 A5 BD lda FACEXTENSION | |
00152Cr 2 49 FF eor #$FF | |
00152Er 2 85 BD sta FACEXTENSION | |
001530r 2 E6 BD inc FACEXTENSION | |
001532r 2 D0 0E bne RTS12 | |
001534r 2 | |
001534r 2 ; ---------------------------------------------------------------------------- | |
001534r 2 ; INCREMENT FAC MANTISSA | |
001534r 2 ; ---------------------------------------------------------------------------- | |
001534r 2 INCREMENT_FAC_MANTISSA: | |
001534r 2 .ifndef CONFIG_SMALL | |
001534r 2 E6 B2 inc FAC+4 | |
001536r 2 D0 0A bne RTS12 | |
001538r 2 .endif | |
001538r 2 E6 B1 inc FAC+3 | |
00153Ar 2 D0 06 bne RTS12 | |
00153Cr 2 E6 B0 inc FAC+2 | |
00153Er 2 D0 02 bne RTS12 | |
001540r 2 E6 AF inc FAC+1 | |
001542r 2 RTS12: | |
001542r 2 60 rts | |
001543r 2 OVERFLOW: | |
001543r 2 A2 45 ldx #ERR_OVERFLOW | |
001545r 2 4C rr rr jmp ERROR | |
001548r 2 | |
001548r 2 ; ---------------------------------------------------------------------------- | |
001548r 2 ; SHIFT 1,X THRU 5,X RIGHT | |
001548r 2 ; (A) = NEGATIVE OF SHIFT COUNT | |
001548r 2 ; (X) = POINTER TO BYTES TO BE SHIFTED | |
001548r 2 ; | |
001548r 2 ; RETURN WITH (Y)=0, CARRY=0, EXTENSION BITS IN A-REG | |
001548r 2 ; ---------------------------------------------------------------------------- | |
001548r 2 SHIFT_RIGHT1: | |
001548r 2 A2 72 ldx #RESULT-1 | |
00154Ar 2 SHIFT_RIGHT2: | |
00154Ar 2 .ifdef CONFIG_SMALL | |
00154Ar 2 ldy 3,x | |
00154Ar 2 .else | |
00154Ar 2 B4 04 ldy 4,x | |
00154Cr 2 .endif | |
00154Cr 2 84 BD sty FACEXTENSION | |
00154Er 2 .ifndef CONFIG_SMALL | |
00154Er 2 B4 03 ldy 3,x | |
001550r 2 94 04 sty 4,x | |
001552r 2 .endif | |
001552r 2 B4 02 ldy 2,x | |
001554r 2 94 03 sty 3,x | |
001556r 2 B4 01 ldy 1,x | |
001558r 2 94 02 sty 2,x | |
00155Ar 2 A4 B5 ldy SHIFTSIGNEXT | |
00155Cr 2 94 01 sty 1,x | |
00155Er 2 | |
00155Er 2 ; ---------------------------------------------------------------------------- | |
00155Er 2 ; MAIN ENTRY TO RIGHT SHIFT SUBROUTINE | |
00155Er 2 ; ---------------------------------------------------------------------------- | |
00155Er 2 SHIFT_RIGHT: | |
00155Er 2 69 08 adc #$08 | |
001560r 2 30 E8 bmi SHIFT_RIGHT2 | |
001562r 2 F0 E6 beq SHIFT_RIGHT2 | |
001564r 2 E9 08 sbc #$08 | |
001566r 2 A8 tay | |
001567r 2 A5 BD lda FACEXTENSION | |
001569r 2 B0 3C bcs SHIFT_RIGHT5 | |
00156Br 2 .ifndef CONFIG_ROR_WORKAROUND | |
00156Br 2 LB588: | |
00156Br 2 asl 1,x | |
00156Br 2 bcc LB58E | |
00156Br 2 inc 1,x | |
00156Br 2 LB58E: | |
00156Br 2 ror 1,x | |
00156Br 2 ror 1,x | |
00156Br 2 | |
00156Br 2 ; ---------------------------------------------------------------------------- | |
00156Br 2 ; ENTER HERE FOR SHORT SHIFTS WITH NO SIGN EXTENSION | |
00156Br 2 ; ---------------------------------------------------------------------------- | |
00156Br 2 SHIFT_RIGHT4: | |
00156Br 2 ror 2,x | |
00156Br 2 ror 3,x | |
00156Br 2 .ifndef CONFIG_SMALL | |
00156Br 2 ror 4,x | |
00156Br 2 .endif | |
00156Br 2 ror a | |
00156Br 2 iny | |
00156Br 2 bne LB588 | |
00156Br 2 .else | |
00156Br 2 L37C4: | |
00156Br 2 48 pha | |
00156Cr 2 B5 01 lda 1,x | |
00156Er 2 29 80 and #$80 | |
001570r 2 56 01 lsr 1,x | |
001572r 2 15 01 ora 1,x | |
001574r 2 95 01 sta 1,x | |
001576r 2 24 .byte $24 | |
001577r 2 SHIFT_RIGHT4: | |
001577r 2 48 pha | |
001578r 2 A9 00 lda #$00 | |
00157Ar 2 90 02 bcc L37D7 | |
00157Cr 2 A9 80 lda #$80 | |
00157Er 2 L37D7: | |
00157Er 2 56 02 lsr 2,x | |
001580r 2 15 02 ora 2,x | |
001582r 2 95 02 sta 2,x | |
001584r 2 A9 00 lda #$00 | |
001586r 2 90 02 bcc L37E3 | |
001588r 2 A9 80 lda #$80 | |
00158Ar 2 L37E3: | |
00158Ar 2 56 03 lsr 3,x | |
00158Cr 2 15 03 ora 3,x | |
00158Er 2 95 03 sta 3,x | |
001590r 2 A9 00 lda #$00 | |
001592r 2 90 02 bcc L37EF | |
001594r 2 A9 80 lda #$80 | |
001596r 2 L37EF: | |
001596r 2 56 04 lsr 4,x | |
001598r 2 15 04 ora 4,x | |
00159Ar 2 95 04 sta 4,x | |
00159Cr 2 68 pla | |
00159Dr 2 08 php | |
00159Er 2 4A lsr a | |
00159Fr 2 28 plp | |
0015A0r 2 90 02 bcc L37FD | |
0015A2r 2 09 80 ora #$80 | |
0015A4r 2 L37FD: | |
0015A4r 2 C8 iny | |
0015A5r 2 D0 C4 bne L37C4 | |
0015A7r 2 .endif | |
0015A7r 2 SHIFT_RIGHT5: | |
0015A7r 2 18 clc | |
0015A8r 2 60 rts | |
0015A9r 2 | |
0015A9r 2 ; ---------------------------------------------------------------------------- | |
0015A9r 2 .ifdef CONFIG_SMALL | |
0015A9r 2 CON_ONE: | |
0015A9r 2 .byte $81,$00,$00,$00 | |
0015A9r 2 POLY_LOG: | |
0015A9r 2 .byte $02 | |
0015A9r 2 .byte $80,$19,$56,$62 | |
0015A9r 2 .byte $80,$76,$22,$F3 | |
0015A9r 2 .byte $82,$38,$AA,$40 | |
0015A9r 2 CON_SQR_HALF: | |
0015A9r 2 .byte $80,$35,$04,$F3 | |
0015A9r 2 CON_SQR_TWO: | |
0015A9r 2 .byte $81,$35,$04,$F3 | |
0015A9r 2 CON_NEG_HALF: | |
0015A9r 2 .byte $80,$80,$00,$00 | |
0015A9r 2 CON_LOG_TWO: | |
0015A9r 2 .byte $80,$31,$72,$18 | |
0015A9r 2 .else | |
0015A9r 2 CON_ONE: | |
0015A9r 2 81 00 00 00 .byte $81,$00,$00,$00,$00 | |
0015ADr 2 00 | |
0015AEr 2 POLY_LOG: | |
0015AEr 2 03 .byte $03 | |
0015AFr 2 7F 5E 56 CB .byte $7F,$5E,$56,$CB,$79 | |
0015B3r 2 79 | |
0015B4r 2 80 13 9B 0B .byte $80,$13,$9B,$0B,$64 | |
0015B8r 2 64 | |
0015B9r 2 80 76 38 93 .byte $80,$76,$38,$93,$16 | |
0015BDr 2 16 | |
0015BEr 2 82 38 AA 3B .byte $82,$38,$AA,$3B,$20 | |
0015C2r 2 20 | |
0015C3r 2 CON_SQR_HALF: | |
0015C3r 2 80 35 04 F3 .byte $80,$35,$04,$F3,$34 | |
0015C7r 2 34 | |
0015C8r 2 CON_SQR_TWO: | |
0015C8r 2 81 35 04 F3 .byte $81,$35,$04,$F3,$34 | |
0015CCr 2 34 | |
0015CDr 2 CON_NEG_HALF: | |
0015CDr 2 80 80 00 00 .byte $80,$80,$00,$00,$00 | |
0015D1r 2 00 | |
0015D2r 2 CON_LOG_TWO: | |
0015D2r 2 80 31 72 17 .byte $80,$31,$72,$17,$F8 | |
0015D6r 2 F8 | |
0015D7r 2 .endif | |
0015D7r 2 | |
0015D7r 2 ; ---------------------------------------------------------------------------- | |
0015D7r 2 ; "LOG" FUNCTION | |
0015D7r 2 ; ---------------------------------------------------------------------------- | |
0015D7r 2 LOG: | |
0015D7r 2 20 rr rr jsr SIGN | |
0015DAr 2 F0 02 beq GIQ | |
0015DCr 2 10 03 bpl LOG2 | |
0015DEr 2 GIQ: | |
0015DEr 2 4C rr rr jmp IQERR | |
0015E1r 2 LOG2: | |
0015E1r 2 A5 AE lda FAC | |
0015E3r 2 E9 7F sbc #$7F | |
0015E5r 2 48 pha | |
0015E6r 2 A9 80 lda #$80 | |
0015E8r 2 85 AE sta FAC | |
0015EAr 2 A9 rr lda #<CON_SQR_HALF | |
0015ECr 2 A0 rr ldy #>CON_SQR_HALF | |
0015EEr 2 20 rr rr jsr FADD | |
0015F1r 2 A9 rr lda #<CON_SQR_TWO | |
0015F3r 2 A0 rr ldy #>CON_SQR_TWO | |
0015F5r 2 20 rr rr jsr FDIV | |
0015F8r 2 A9 rr lda #<CON_ONE | |
0015FAr 2 A0 rr ldy #>CON_ONE | |
0015FCr 2 20 rr rr jsr FSUB | |
0015FFr 2 A9 rr lda #<POLY_LOG | |
001601r 2 A0 rr ldy #>POLY_LOG | |
001603r 2 20 rr rr jsr POLYNOMIAL_ODD | |
001606r 2 A9 rr lda #<CON_NEG_HALF | |
001608r 2 A0 rr ldy #>CON_NEG_HALF | |
00160Ar 2 20 rr rr jsr FADD | |
00160Dr 2 68 pla | |
00160Er 2 20 rr rr jsr ADDACC | |
001611r 2 A9 rr lda #<CON_LOG_TWO | |
001613r 2 A0 rr ldy #>CON_LOG_TWO | |
001615r 2 | |
001615r 2 ; ---------------------------------------------------------------------------- | |
001615r 2 ; FAC = (Y,A) * FAC | |
001615r 2 ; ---------------------------------------------------------------------------- | |
001615r 2 FMULT: | |
001615r 2 20 rr rr jsr LOAD_ARG_FROM_YA | |
001618r 2 | |
001618r 2 ; ---------------------------------------------------------------------------- | |
001618r 2 ; FAC = ARG * FAC | |
001618r 2 ; ---------------------------------------------------------------------------- | |
001618r 2 FMULTT: | |
001618r 2 .ifndef CONFIG_11 | |
001618r 2 beq L3903 | |
001618r 2 .else | |
001618r 2 D0 03 4C rr jeq L3903 | |
00161Cr 2 rr | |
00161Dr 2 .endif | |
00161Dr 2 20 rr rr jsr ADD_EXPONENTS | |
001620r 2 A9 00 lda #$00 | |
001622r 2 85 73 sta RESULT | |
001624r 2 85 74 sta RESULT+1 | |
001626r 2 85 75 sta RESULT+2 | |
001628r 2 .ifndef CONFIG_SMALL | |
001628r 2 85 76 sta RESULT+3 | |
00162Ar 2 .endif | |
00162Ar 2 A5 BD lda FACEXTENSION | |
00162Cr 2 20 rr rr jsr MULTIPLY1 | |
00162Fr 2 .ifndef CONFIG_SMALL | |
00162Fr 2 A5 B2 lda FAC+4 | |
001631r 2 20 rr rr jsr MULTIPLY1 | |
001634r 2 .endif | |
001634r 2 A5 B1 lda FAC+3 | |
001636r 2 20 rr rr jsr MULTIPLY1 | |
001639r 2 A5 B0 lda FAC+2 | |
00163Br 2 20 rr rr jsr MULTIPLY1 | |
00163Er 2 A5 AF lda FAC+1 | |
001640r 2 20 rr rr jsr MULTIPLY2 | |
001643r 2 4C rr rr jmp COPY_RESULT_INTO_FAC | |
001646r 2 | |
001646r 2 ; ---------------------------------------------------------------------------- | |
001646r 2 ; MULTIPLY ARG BY (A) INTO RESULT | |
001646r 2 ; ---------------------------------------------------------------------------- | |
001646r 2 MULTIPLY1: | |
001646r 2 D0 03 bne MULTIPLY2 | |
001648r 2 4C rr rr jmp SHIFT_RIGHT1 | |
00164Br 2 MULTIPLY2: | |
00164Br 2 4A lsr a | |
00164Cr 2 09 80 ora #$80 | |
00164Er 2 L38A7: | |
00164Er 2 A8 tay | |
00164Fr 2 90 19 bcc L38C3 | |
001651r 2 18 clc | |
001652r 2 .ifndef CONFIG_SMALL | |
001652r 2 A5 76 lda RESULT+3 | |
001654r 2 65 BA adc ARG+4 | |
001656r 2 85 76 sta RESULT+3 | |
001658r 2 .endif | |
001658r 2 A5 75 lda RESULT+2 | |
00165Ar 2 65 B9 adc ARG+3 | |
00165Cr 2 85 75 sta RESULT+2 | |
00165Er 2 A5 74 lda RESULT+1 | |
001660r 2 65 B8 adc ARG+2 | |
001662r 2 85 74 sta RESULT+1 | |
001664r 2 A5 73 lda RESULT | |
001666r 2 65 B7 adc ARG+1 | |
001668r 2 85 73 sta RESULT | |
00166Ar 2 L38C3: | |
00166Ar 2 .ifndef CONFIG_ROR_WORKAROUND | |
00166Ar 2 ror RESULT | |
00166Ar 2 ror RESULT+1 | |
00166Ar 2 .ifdef APPLE_BAD_BYTE | |
00166Ar 2 ; this seems to be a bad byte in the dump | |
00166Ar 2 .byte RESULT+2,RESULT+2 ; XXX BUG! | |
00166Ar 2 .else | |
00166Ar 2 ror RESULT+2 | |
00166Ar 2 .endif | |
00166Ar 2 .ifndef CONFIG_SMALL | |
00166Ar 2 ror RESULT+3 | |
00166Ar 2 .endif | |
00166Ar 2 ror FACEXTENSION | |
00166Ar 2 .else | |
00166Ar 2 A9 00 lda #$00 | |
00166Cr 2 90 02 bcc L38C9 | |
00166Er 2 A9 80 lda #$80 | |
001670r 2 L38C9: | |
001670r 2 46 73 lsr RESULT | |
001672r 2 05 73 ora RESULT | |
001674r 2 85 73 sta RESULT | |
001676r 2 A9 00 lda #$00 | |
001678r 2 90 02 bcc L38D5 | |
00167Ar 2 A9 80 lda #$80 | |
00167Cr 2 L38D5: | |
00167Cr 2 46 74 lsr RESULT+1 | |
00167Er 2 05 74 ora RESULT+1 | |
001680r 2 85 74 sta RESULT+1 | |
001682r 2 A9 00 lda #$00 | |
001684r 2 90 02 bcc L38E1 | |
001686r 2 A9 80 lda #$80 | |
001688r 2 L38E1: | |
001688r 2 46 75 lsr RESULT+2 | |
00168Ar 2 05 75 ora RESULT+2 | |
00168Cr 2 85 75 sta RESULT+2 | |
00168Er 2 A9 00 lda #$00 | |
001690r 2 90 02 bcc L38ED | |
001692r 2 A9 80 lda #$80 | |
001694r 2 L38ED: | |
001694r 2 46 76 lsr RESULT+3 | |
001696r 2 05 76 ora RESULT+3 | |
001698r 2 85 76 sta RESULT+3 | |
00169Ar 2 A9 00 lda #$00 | |
00169Cr 2 90 02 bcc L38F9 | |
00169Er 2 A9 80 lda #$80 | |
0016A0r 2 L38F9: | |
0016A0r 2 46 BD lsr FACEXTENSION | |
0016A2r 2 05 BD ora FACEXTENSION | |
0016A4r 2 85 BD sta FACEXTENSION | |
0016A6r 2 .endif | |
0016A6r 2 98 tya | |
0016A7r 2 4A lsr a | |
0016A8r 2 D0 A4 bne L38A7 | |
0016AAr 2 L3903: | |
0016AAr 2 60 rts | |
0016ABr 2 | |
0016ABr 2 ; ---------------------------------------------------------------------------- | |
0016ABr 2 ; UNPACK NUMBER AT (Y,A) INTO ARG | |
0016ABr 2 ; ---------------------------------------------------------------------------- | |
0016ABr 2 LOAD_ARG_FROM_YA: | |
0016ABr 2 85 6F sta INDEX | |
0016ADr 2 84 70 sty INDEX+1 | |
0016AFr 2 A0 04 ldy #BYTES_FP-1 | |
0016B1r 2 .ifndef CONFIG_SMALL | |
0016B1r 2 B1 6F lda (INDEX),y | |
0016B3r 2 85 BA sta ARG+4 | |
0016B5r 2 88 dey | |
0016B6r 2 .endif | |
0016B6r 2 B1 6F lda (INDEX),y | |
0016B8r 2 85 B9 sta ARG+3 | |
0016BAr 2 88 dey | |
0016BBr 2 B1 6F lda (INDEX),y | |
0016BDr 2 85 B8 sta ARG+2 | |
0016BFr 2 88 dey | |
0016C0r 2 B1 6F lda (INDEX),y | |
0016C2r 2 85 BB sta ARGSIGN | |
0016C4r 2 45 B3 eor FACSIGN | |
0016C6r 2 85 BC sta SGNCPR | |
0016C8r 2 A5 BB lda ARGSIGN | |
0016CAr 2 09 80 ora #$80 | |
0016CCr 2 85 B7 sta ARG+1 | |
0016CEr 2 88 dey | |
0016CFr 2 B1 6F lda (INDEX),y | |
0016D1r 2 85 B6 sta ARG | |
0016D3r 2 A5 AE lda FAC | |
0016D5r 2 60 rts | |
0016D6r 2 | |
0016D6r 2 ; ---------------------------------------------------------------------------- | |
0016D6r 2 ; ADD EXPONENTS OF ARG AND FAC | |
0016D6r 2 ; (CALLED BY FMULT AND FDIV) | |
0016D6r 2 ; | |
0016D6r 2 ; ALSO CHECK FOR OVERFLOW, AND SET RESULT SIGN | |
0016D6r 2 ; ---------------------------------------------------------------------------- | |
0016D6r 2 ADD_EXPONENTS: | |
0016D6r 2 A5 B6 lda ARG | |
0016D8r 2 ADD_EXPONENTS1: | |
0016D8r 2 F0 1F beq ZERO | |
0016DAr 2 18 clc | |
0016DBr 2 65 AE adc FAC | |
0016DDr 2 90 04 bcc L393C | |
0016DFr 2 30 1D bmi JOV | |
0016E1r 2 18 clc | |
0016E2r 2 2C .byte $2C | |
0016E3r 2 L393C: | |
0016E3r 2 10 14 bpl ZERO | |
0016E5r 2 69 80 adc #$80 | |
0016E7r 2 85 AE sta FAC | |
0016E9r 2 D0 03 bne L3947 | |
0016EBr 2 4C rr rr jmp STA_IN_FAC_SIGN | |
0016EEr 2 L3947: | |
0016EEr 2 A5 BC lda SGNCPR | |
0016F0r 2 85 B3 sta FACSIGN | |
0016F2r 2 60 rts | |
0016F3r 2 | |
0016F3r 2 ; ---------------------------------------------------------------------------- | |
0016F3r 2 ; IF (FAC) IS POSITIVE, GIVE "OVERFLOW" ERROR | |
0016F3r 2 ; IF (FAC) IS NEGATIVE, SET FAC=0, POP ONE RETURN, AND RTS | |
0016F3r 2 ; CALLED FROM "EXP" FUNCTION | |
0016F3r 2 ; ---------------------------------------------------------------------------- | |
0016F3r 2 OUTOFRNG: | |
0016F3r 2 A5 B3 lda FACSIGN | |
0016F5r 2 49 FF eor #$FF | |
0016F7r 2 30 05 bmi JOV | |
0016F9r 2 | |
0016F9r 2 ; ---------------------------------------------------------------------------- | |
0016F9r 2 ; POP RETURN ADDRESS AND SET FAC=0 | |
0016F9r 2 ; ---------------------------------------------------------------------------- | |
0016F9r 2 ZERO: | |
0016F9r 2 68 pla | |
0016FAr 2 68 pla | |
0016FBr 2 4C rr rr jmp ZERO_FAC | |
0016FEr 2 JOV: | |
0016FEr 2 4C rr rr jmp OVERFLOW | |
001701r 2 | |
001701r 2 ; ---------------------------------------------------------------------------- | |
001701r 2 ; MULTIPLY FAC BY 10 | |
001701r 2 ; ---------------------------------------------------------------------------- | |
001701r 2 MUL10: | |
001701r 2 20 rr rr jsr COPY_FAC_TO_ARG_ROUNDED | |
001704r 2 AA tax | |
001705r 2 F0 10 beq L3970 | |
001707r 2 18 clc | |
001708r 2 69 02 adc #$02 | |
00170Ar 2 B0 F2 bcs JOV | |
00170Cr 2 LD9BF: | |
00170Cr 2 A2 00 ldx #$00 | |
00170Er 2 86 BC stx SGNCPR | |
001710r 2 20 rr rr jsr FADD2 | |
001713r 2 E6 AE inc FAC | |
001715r 2 F0 E7 beq JOV | |
001717r 2 L3970: | |
001717r 2 60 rts | |
001718r 2 | |
001718r 2 ; ---------------------------------------------------------------------------- | |
001718r 2 CONTEN: | |
001718r 2 .ifdef CONFIG_SMALL | |
001718r 2 .byte $84,$20,$00,$00 | |
001718r 2 .else | |
001718r 2 84 20 00 00 .byte $84,$20,$00,$00,$00 | |
00171Cr 2 00 | |
00171Dr 2 .endif | |
00171Dr 2 | |
00171Dr 2 ; ---------------------------------------------------------------------------- | |
00171Dr 2 ; DIVIDE FAC BY 10 | |
00171Dr 2 ; ---------------------------------------------------------------------------- | |
00171Dr 2 DIV10: | |
00171Dr 2 20 rr rr jsr COPY_FAC_TO_ARG_ROUNDED | |
001720r 2 A9 rr lda #<CONTEN | |
001722r 2 A0 rr ldy #>CONTEN | |
001724r 2 A2 00 ldx #$00 | |
001726r 2 | |
001726r 2 ; ---------------------------------------------------------------------------- | |
001726r 2 ; FAC = ARG / (Y,A) | |
001726r 2 ; ---------------------------------------------------------------------------- | |
001726r 2 DIV: | |
001726r 2 86 BC stx SGNCPR | |
001728r 2 20 rr rr jsr LOAD_FAC_FROM_YA | |
00172Br 2 4C rr rr jmp FDIVT | |
00172Er 2 | |
00172Er 2 ; ---------------------------------------------------------------------------- | |
00172Er 2 ; FAC = (Y,A) / FAC | |
00172Er 2 ; ---------------------------------------------------------------------------- | |
00172Er 2 FDIV: | |
00172Er 2 20 rr rr jsr LOAD_ARG_FROM_YA | |
001731r 2 | |
001731r 2 ; ---------------------------------------------------------------------------- | |
001731r 2 ; FAC = ARG / FAC | |
001731r 2 ; ---------------------------------------------------------------------------- | |
001731r 2 FDIVT: | |
001731r 2 F0 76 beq L3A02 | |
001733r 2 20 rr rr jsr ROUND_FAC | |
001736r 2 A9 00 lda #$00 | |
001738r 2 38 sec | |
001739r 2 E5 AE sbc FAC | |
00173Br 2 85 AE sta FAC | |
00173Dr 2 20 rr rr jsr ADD_EXPONENTS | |
001740r 2 E6 AE inc FAC | |
001742r 2 F0 BA beq JOV | |
001744r 2 A2 FC ldx #-MANTISSA_BYTES | |
001746r 2 A9 01 lda #$01 | |
001748r 2 L39A1: | |
001748r 2 A4 B7 ldy ARG+1 | |
00174Ar 2 C4 AF cpy FAC+1 | |
00174Cr 2 D0 10 bne L39B7 | |
00174Er 2 A4 B8 ldy ARG+2 | |
001750r 2 C4 B0 cpy FAC+2 | |
001752r 2 D0 0A bne L39B7 | |
001754r 2 A4 B9 ldy ARG+3 | |
001756r 2 C4 B1 cpy FAC+3 | |
001758r 2 .ifndef CONFIG_SMALL | |
001758r 2 D0 04 bne L39B7 | |
00175Ar 2 A4 BA ldy ARG+4 | |
00175Cr 2 C4 B2 cpy FAC+4 | |
00175Er 2 .endif | |
00175Er 2 L39B7: | |
00175Er 2 08 php | |
00175Fr 2 2A rol a | |
001760r 2 90 09 bcc L39C4 | |
001762r 2 E8 inx | |
001763r 2 95 76 sta RESULT_LAST-1,x | |
001765r 2 F0 32 beq L39F2 | |
001767r 2 10 34 bpl L39F6 | |
001769r 2 A9 01 lda #$01 | |
00176Br 2 L39C4: | |
00176Br 2 28 plp | |
00176Cr 2 B0 0E bcs L39D5 | |
00176Er 2 L39C7: | |
00176Er 2 06 BA asl ARG_LAST | |
001770r 2 .ifndef CONFIG_SMALL | |
001770r 2 26 B9 rol ARG+3 | |
001772r 2 .endif | |
001772r 2 26 B8 rol ARG+2 | |
001774r 2 26 B7 rol ARG+1 | |
001776r 2 B0 E6 bcs L39B7 | |
001778r 2 30 CE bmi L39A1 | |
00177Ar 2 10 E2 bpl L39B7 | |
00177Cr 2 L39D5: | |
00177Cr 2 A8 tay | |
00177Dr 2 .ifndef CONFIG_SMALL | |
00177Dr 2 A5 BA lda ARG+4 | |
00177Fr 2 E5 B2 sbc FAC+4 | |
001781r 2 85 BA sta ARG+4 | |
001783r 2 .endif | |
001783r 2 A5 B9 lda ARG+3 | |
001785r 2 E5 B1 sbc FAC+3 | |
001787r 2 85 B9 sta ARG+3 | |
001789r 2 A5 B8 lda ARG+2 | |
00178Br 2 E5 B0 sbc FAC+2 | |
00178Dr 2 85 B8 sta ARG+2 | |
00178Fr 2 A5 B7 lda ARG+1 | |
001791r 2 E5 AF sbc FAC+1 | |
001793r 2 85 B7 sta ARG+1 | |
001795r 2 98 tya | |
001796r 2 4C rr rr jmp L39C7 | |
001799r 2 L39F2: | |
001799r 2 A9 40 lda #$40 | |
00179Br 2 D0 CE bne L39C4 | |
00179Dr 2 L39F6: | |
00179Dr 2 0A asl a | |
00179Er 2 0A asl a | |
00179Fr 2 0A asl a | |
0017A0r 2 0A asl a | |
0017A1r 2 0A asl a | |
0017A2r 2 0A asl a | |
0017A3r 2 85 BD sta FACEXTENSION | |
0017A5r 2 28 plp | |
0017A6r 2 4C rr rr jmp COPY_RESULT_INTO_FAC | |
0017A9r 2 L3A02: | |
0017A9r 2 A2 85 ldx #ERR_ZERODIV | |
0017ABr 2 4C rr rr jmp ERROR | |
0017AEr 2 | |
0017AEr 2 ; ---------------------------------------------------------------------------- | |
0017AEr 2 ; COPY RESULT INTO FAC MANTISSA, AND NORMALIZE | |
0017AEr 2 ; ---------------------------------------------------------------------------- | |
0017AEr 2 COPY_RESULT_INTO_FAC: | |
0017AEr 2 A5 73 lda RESULT | |
0017B0r 2 85 AF sta FAC+1 | |
0017B2r 2 A5 74 lda RESULT+1 | |
0017B4r 2 85 B0 sta FAC+2 | |
0017B6r 2 A5 75 lda RESULT+2 | |
0017B8r 2 85 B1 sta FAC+3 | |
0017BAr 2 .ifndef CONFIG_SMALL | |
0017BAr 2 A5 76 lda RESULT+3 | |
0017BCr 2 85 B2 sta FAC+4 | |
0017BEr 2 .endif | |
0017BEr 2 4C rr rr jmp NORMALIZE_FAC2 | |
0017C1r 2 | |
0017C1r 2 ; ---------------------------------------------------------------------------- | |
0017C1r 2 ; UNPACK (Y,A) INTO FAC | |
0017C1r 2 ; ---------------------------------------------------------------------------- | |
0017C1r 2 LOAD_FAC_FROM_YA: | |
0017C1r 2 85 6F sta INDEX | |
0017C3r 2 84 70 sty INDEX+1 | |
0017C5r 2 A0 04 ldy #MANTISSA_BYTES | |
0017C7r 2 .ifndef CONFIG_SMALL | |
0017C7r 2 B1 6F lda (INDEX),y | |
0017C9r 2 85 B2 sta FAC+4 | |
0017CBr 2 88 dey | |
0017CCr 2 .endif | |
0017CCr 2 B1 6F lda (INDEX),y | |
0017CEr 2 85 B1 sta FAC+3 | |
0017D0r 2 88 dey | |
0017D1r 2 B1 6F lda (INDEX),y | |
0017D3r 2 85 B0 sta FAC+2 | |
0017D5r 2 88 dey | |
0017D6r 2 B1 6F lda (INDEX),y | |
0017D8r 2 85 B3 sta FACSIGN | |
0017DAr 2 09 80 ora #$80 | |
0017DCr 2 85 AF sta FAC+1 | |
0017DEr 2 88 dey | |
0017DFr 2 B1 6F lda (INDEX),y | |
0017E1r 2 85 AE sta FAC | |
0017E3r 2 84 BD sty FACEXTENSION | |
0017E5r 2 60 rts | |
0017E6r 2 | |
0017E6r 2 ; ---------------------------------------------------------------------------- | |
0017E6r 2 ; ROUND FAC, STORE IN TEMP2 | |
0017E6r 2 ; ---------------------------------------------------------------------------- | |
0017E6r 2 STORE_FAC_IN_TEMP2_ROUNDED: | |
0017E6r 2 A2 A9 ldx #TEMP2 | |
0017E8r 2 2C .byte $2C | |
0017E9r 2 | |
0017E9r 2 ; ---------------------------------------------------------------------------- | |
0017E9r 2 ; ROUND FAC, STORE IN TEMP1 | |
0017E9r 2 ; ---------------------------------------------------------------------------- | |
0017E9r 2 STORE_FAC_IN_TEMP1_ROUNDED: | |
0017E9r 2 A2 A4 ldx #TEMP1X | |
0017EBr 2 A0 00 ldy #$00 | |
0017EDr 2 F0 04 beq STORE_FAC_AT_YX_ROUNDED | |
0017EFr 2 | |
0017EFr 2 ; ---------------------------------------------------------------------------- | |
0017EFr 2 ; ROUND FAC, AND STORE WHERE FORPNT POINTS | |
0017EFr 2 ; ---------------------------------------------------------------------------- | |
0017EFr 2 SETFOR: | |
0017EFr 2 A6 96 ldx FORPNT | |
0017F1r 2 A4 97 ldy FORPNT+1 | |
0017F3r 2 | |
0017F3r 2 ; ---------------------------------------------------------------------------- | |
0017F3r 2 ; ROUND FAC, AND STORE AT (Y,X) | |
0017F3r 2 ; ---------------------------------------------------------------------------- | |
0017F3r 2 STORE_FAC_AT_YX_ROUNDED: | |
0017F3r 2 20 rr rr jsr ROUND_FAC | |
0017F6r 2 86 6F stx INDEX | |
0017F8r 2 84 70 sty INDEX+1 | |
0017FAr 2 A0 04 ldy #MANTISSA_BYTES | |
0017FCr 2 .ifndef CONFIG_SMALL | |
0017FCr 2 A5 B2 lda FAC+4 | |
0017FEr 2 91 6F sta (INDEX),y | |
001800r 2 88 dey | |
001801r 2 .endif | |
001801r 2 A5 B1 lda FAC+3 | |
001803r 2 91 6F sta (INDEX),y | |
001805r 2 88 dey | |
001806r 2 A5 B0 lda FAC+2 | |
001808r 2 91 6F sta (INDEX),y | |
00180Ar 2 88 dey | |
00180Br 2 A5 B3 lda FACSIGN | |
00180Dr 2 09 7F ora #$7F | |
00180Fr 2 25 AF and FAC+1 | |
001811r 2 91 6F sta (INDEX),y | |
001813r 2 88 dey | |
001814r 2 A5 AE lda FAC | |
001816r 2 91 6F sta (INDEX),y | |
001818r 2 84 BD sty FACEXTENSION | |
00181Ar 2 60 rts | |
00181Br 2 | |
00181Br 2 ; ---------------------------------------------------------------------------- | |
00181Br 2 ; COPY ARG INTO FAC | |
00181Br 2 ; ---------------------------------------------------------------------------- | |
00181Br 2 COPY_ARG_TO_FAC: | |
00181Br 2 A5 BB lda ARGSIGN | |
00181Dr 2 MFA: | |
00181Dr 2 85 B3 sta FACSIGN | |
00181Fr 2 A2 05 ldx #BYTES_FP | |
001821r 2 L3A7A: | |
001821r 2 B5 B5 lda SHIFTSIGNEXT,x | |
001823r 2 95 AD sta EXPSGN,x | |
001825r 2 CA dex | |
001826r 2 D0 F9 bne L3A7A | |
001828r 2 86 BD stx FACEXTENSION | |
00182Ar 2 60 rts | |
00182Br 2 | |
00182Br 2 ; ---------------------------------------------------------------------------- | |
00182Br 2 ; ROUND FAC AND COPY TO ARG | |
00182Br 2 ; ---------------------------------------------------------------------------- | |
00182Br 2 COPY_FAC_TO_ARG_ROUNDED: | |
00182Br 2 20 rr rr jsr ROUND_FAC | |
00182Er 2 MAF: | |
00182Er 2 A2 06 ldx #BYTES_FP+1 | |
001830r 2 L3A89: | |
001830r 2 B5 AD lda EXPSGN,x | |
001832r 2 95 B5 sta SHIFTSIGNEXT,x | |
001834r 2 CA dex | |
001835r 2 D0 F9 bne L3A89 | |
001837r 2 86 BD stx FACEXTENSION | |
001839r 2 RTS14: | |
001839r 2 60 rts | |
00183Ar 2 | |
00183Ar 2 ; ---------------------------------------------------------------------------- | |
00183Ar 2 ; ROUND FAC USING EXTENSION BYTE | |
00183Ar 2 ; ---------------------------------------------------------------------------- | |
00183Ar 2 ROUND_FAC: | |
00183Ar 2 A5 AE lda FAC | |
00183Cr 2 F0 FB beq RTS14 | |
00183Er 2 06 BD asl FACEXTENSION | |
001840r 2 90 F7 bcc RTS14 | |
001842r 2 | |
001842r 2 ; ---------------------------------------------------------------------------- | |
001842r 2 ; INCREMENT MANTISSA AND RE-NORMALIZE IF CARRY | |
001842r 2 ; ---------------------------------------------------------------------------- | |
001842r 2 INCREMENT_MANTISSA: | |
001842r 2 20 rr rr jsr INCREMENT_FAC_MANTISSA | |
001845r 2 D0 F2 bne RTS14 | |
001847r 2 4C rr rr jmp NORMALIZE_FAC6 | |
00184Ar 2 | |
00184Ar 2 ; ---------------------------------------------------------------------------- | |
00184Ar 2 ; TEST FAC FOR ZERO AND SIGN | |
00184Ar 2 ; | |
00184Ar 2 ; FAC > 0, RETURN +1 | |
00184Ar 2 ; FAC = 0, RETURN 0 | |
00184Ar 2 ; FAC < 0, RETURN -1 | |
00184Ar 2 ; ---------------------------------------------------------------------------- | |
00184Ar 2 SIGN: | |
00184Ar 2 A5 AE lda FAC | |
00184Cr 2 F0 09 beq RTS15 | |
00184Er 2 L3AA7: | |
00184Er 2 A5 B3 lda FACSIGN | |
001850r 2 SIGN2: | |
001850r 2 2A rol a | |
001851r 2 A9 FF lda #$FF | |
001853r 2 B0 02 bcs RTS15 | |
001855r 2 A9 01 lda #$01 | |
001857r 2 RTS15: | |
001857r 2 60 rts | |
001858r 2 | |
001858r 2 ; ---------------------------------------------------------------------------- | |
001858r 2 ; "SGN" FUNCTION | |
001858r 2 ; ---------------------------------------------------------------------------- | |
001858r 2 SGN: | |
001858r 2 20 rr rr jsr SIGN | |
00185Br 2 | |
00185Br 2 ; ---------------------------------------------------------------------------- | |
00185Br 2 ; CONVERT (A) INTO FAC, AS SIGNED VALUE -128 TO +127 | |
00185Br 2 ; ---------------------------------------------------------------------------- | |
00185Br 2 FLOAT: | |
00185Br 2 85 AF sta FAC+1 | |
00185Dr 2 A9 00 lda #$00 | |
00185Fr 2 85 B0 sta FAC+2 | |
001861r 2 A2 88 ldx #$88 | |
001863r 2 | |
001863r 2 ; ---------------------------------------------------------------------------- | |
001863r 2 ; FLOAT UNSIGNED VALUE IN FAC+1,2 | |
001863r 2 ; (X) = EXPONENT | |
001863r 2 ; ---------------------------------------------------------------------------- | |
001863r 2 FLOAT1: | |
001863r 2 A5 AF lda FAC+1 | |
001865r 2 49 FF eor #$FF | |
001867r 2 2A rol a | |
001868r 2 | |
001868r 2 ; ---------------------------------------------------------------------------- | |
001868r 2 ; FLOAT UNSIGNED VALUE IN FAC+1,2 | |
001868r 2 ; (X) = EXPONENT | |
001868r 2 ; C=0 TO MAKE VALUE NEGATIVE | |
001868r 2 ; C=1 TO MAKE VALUE POSITIVE | |
001868r 2 ; ---------------------------------------------------------------------------- | |
001868r 2 FLOAT2: | |
001868r 2 A9 00 lda #$00 | |
00186Ar 2 .ifndef CONFIG_SMALL | |
00186Ar 2 85 B2 sta FAC+4 | |
00186Cr 2 .endif | |
00186Cr 2 85 B1 sta FAC+3 | |
00186Er 2 LDB21: | |
00186Er 2 86 AE stx FAC | |
001870r 2 85 BD sta FACEXTENSION | |
001872r 2 85 B3 sta FACSIGN | |
001874r 2 4C rr rr jmp NORMALIZE_FAC1 | |
001877r 2 | |
001877r 2 ; ---------------------------------------------------------------------------- | |
001877r 2 ; "ABS" FUNCTION | |
001877r 2 ; ---------------------------------------------------------------------------- | |
001877r 2 ABS: | |
001877r 2 46 B3 lsr FACSIGN | |
001879r 2 60 rts | |
00187Ar 2 | |
00187Ar 2 ; ---------------------------------------------------------------------------- | |
00187Ar 2 ; COMPARE FAC WITH PACKED # AT (Y,A) | |
00187Ar 2 ; RETURN A=1,0,-1 AS (Y,A) IS <,=,> FAC | |
00187Ar 2 ; ---------------------------------------------------------------------------- | |
00187Ar 2 FCOMP: | |
00187Ar 2 85 71 sta DEST | |
00187Cr 2 | |
00187Cr 2 ; ---------------------------------------------------------------------------- | |
00187Cr 2 ; SPECIAL ENTRY FROM "NEXT" PROCESSOR | |
00187Cr 2 ; "DEST" ALREADY SET UP | |
00187Cr 2 ; ---------------------------------------------------------------------------- | |
00187Cr 2 FCOMP2: | |
00187Cr 2 84 72 sty DEST+1 | |
00187Er 2 A0 00 ldy #$00 | |
001880r 2 B1 71 lda (DEST),y | |
001882r 2 C8 iny | |
001883r 2 AA tax | |
001884r 2 F0 C4 beq SIGN | |
001886r 2 B1 71 lda (DEST),y | |
001888r 2 45 B3 eor FACSIGN | |
00188Ar 2 30 C2 bmi L3AA7 | |
00188Cr 2 E4 AE cpx FAC | |
00188Er 2 D0 21 bne L3B0A | |
001890r 2 B1 71 lda (DEST),y | |
001892r 2 09 80 ora #$80 | |
001894r 2 C5 AF cmp FAC+1 | |
001896r 2 D0 19 bne L3B0A | |
001898r 2 C8 iny | |
001899r 2 B1 71 lda (DEST),y | |
00189Br 2 C5 B0 cmp FAC+2 | |
00189Dr 2 D0 12 bne L3B0A | |
00189Fr 2 C8 iny | |
0018A0r 2 .ifndef CONFIG_SMALL | |
0018A0r 2 B1 71 lda (DEST),y | |
0018A2r 2 C5 B1 cmp FAC+3 | |
0018A4r 2 D0 0B bne L3B0A | |
0018A6r 2 C8 iny | |
0018A7r 2 .endif | |
0018A7r 2 A9 7F lda #$7F | |
0018A9r 2 C5 BD cmp FACEXTENSION | |
0018ABr 2 B1 71 lda (DEST),y | |
0018ADr 2 E5 B2 sbc FAC_LAST | |
0018AFr 2 F0 28 beq L3B32 | |
0018B1r 2 L3B0A: | |
0018B1r 2 A5 B3 lda FACSIGN | |
0018B3r 2 90 02 bcc L3B10 | |
0018B5r 2 49 FF eor #$FF | |
0018B7r 2 L3B10: | |
0018B7r 2 4C rr rr jmp SIGN2 | |
0018BAr 2 | |
0018BAr 2 ; ---------------------------------------------------------------------------- | |
0018BAr 2 ; QUICK INTEGER FUNCTION | |
0018BAr 2 ; | |
0018BAr 2 ; CONVERTS FP VALUE IN FAC TO INTEGER VALUE | |
0018BAr 2 ; IN FAC+1...FAC+4, BY SHIFTING RIGHT WITH SIGN | |
0018BAr 2 ; EXTENSION UNTIL FRACTIONAL BITS ARE OUT. | |
0018BAr 2 ; | |
0018BAr 2 ; THIS SUBROUTINE ASSUMES THE EXPONENT < 32. | |
0018BAr 2 ; ---------------------------------------------------------------------------- | |
0018BAr 2 QINT: | |
0018BAr 2 A5 AE lda FAC | |
0018BCr 2 F0 4A beq QINT3 | |
0018BEr 2 38 sec | |
0018BFr 2 E9 A0 sbc #120+8*BYTES_FP | |
0018C1r 2 24 B3 bit FACSIGN | |
0018C3r 2 10 09 bpl L3B27 | |
0018C5r 2 AA tax | |
0018C6r 2 A9 FF lda #$FF | |
0018C8r 2 85 B5 sta SHIFTSIGNEXT | |
0018CAr 2 20 rr rr jsr COMPLEMENT_FAC_MANTISSA | |
0018CDr 2 8A txa | |
0018CEr 2 L3B27: | |
0018CEr 2 A2 AE ldx #FAC | |
0018D0r 2 C9 F9 cmp #$F9 | |
0018D2r 2 10 06 bpl QINT2 | |
0018D4r 2 20 rr rr jsr SHIFT_RIGHT | |
0018D7r 2 84 B5 sty SHIFTSIGNEXT | |
0018D9r 2 L3B32: | |
0018D9r 2 60 rts | |
0018DAr 2 QINT2: | |
0018DAr 2 A8 tay | |
0018DBr 2 A5 B3 lda FACSIGN | |
0018DDr 2 29 80 and #$80 | |
0018DFr 2 46 AF lsr FAC+1 | |
0018E1r 2 05 AF ora FAC+1 | |
0018E3r 2 85 AF sta FAC+1 | |
0018E5r 2 20 rr rr jsr SHIFT_RIGHT4 | |
0018E8r 2 84 B5 sty SHIFTSIGNEXT | |
0018EAr 2 60 rts | |
0018EBr 2 | |
0018EBr 2 ; ---------------------------------------------------------------------------- | |
0018EBr 2 ; "INT" FUNCTION | |
0018EBr 2 ; | |
0018EBr 2 ; USES QINT TO CONVERT (FAC) TO INTEGER FORM, | |
0018EBr 2 ; AND THEN REFLOATS THE INTEGER. | |
0018EBr 2 ; ---------------------------------------------------------------------------- | |
0018EBr 2 INT: | |
0018EBr 2 A5 AE lda FAC | |
0018EDr 2 C9 A0 cmp #120+8*BYTES_FP | |
0018EFr 2 B0 20 bcs RTS17 | |
0018F1r 2 20 rr rr jsr QINT | |
0018F4r 2 84 BD sty FACEXTENSION | |
0018F6r 2 A5 B3 lda FACSIGN | |
0018F8r 2 84 B3 sty FACSIGN | |
0018FAr 2 49 80 eor #$80 | |
0018FCr 2 2A rol a | |
0018FDr 2 A9 A0 lda #120+8*BYTES_FP | |
0018FFr 2 85 AE sta FAC | |
001901r 2 A5 B2 lda FAC_LAST | |
001903r 2 85 0A sta CHARAC | |
001905r 2 4C rr rr jmp NORMALIZE_FAC1 | |
001908r 2 QINT3: | |
001908r 2 85 AF sta FAC+1 | |
00190Ar 2 85 B0 sta FAC+2 | |
00190Cr 2 85 B1 sta FAC+3 | |
00190Er 2 .ifndef CONFIG_SMALL | |
00190Er 2 85 B2 sta FAC+4 | |
001910r 2 .endif | |
001910r 2 A8 tay | |
001911r 2 RTS17: | |
001911r 2 60 rts | |
001912r 2 | |
001912r 2 ; ---------------------------------------------------------------------------- | |
001912r 2 ; CONVERT STRING TO FP VALUE IN FAC | |
001912r 2 ; | |
001912r 2 ; STRING POINTED TO BY TXTPTR | |
001912r 2 ; FIRST CHAR ALREADY SCANNED BY CHRGET | |
001912r 2 ; (A) = FIRST CHAR, C=0 IF DIGIT. | |
001912r 2 ; ---------------------------------------------------------------------------- | |
001912r 2 FIN: | |
001912r 2 A0 00 ldy #$00 | |
001914r 2 A2 0A ldx #SERLEN-TMPEXP | |
001916r 2 L3B6F: | |
001916r 2 94 AA sty TMPEXP,x | |
001918r 2 CA dex | |
001919r 2 10 FB bpl L3B6F | |
00191Br 2 90 0F bcc FIN2 | |
00191Dr 2 C9 2D cmp #$2D | |
00191Fr 2 D0 04 bne L3B7E | |
001921r 2 86 B4 stx SERLEN | |
001923r 2 F0 04 beq FIN1 | |
001925r 2 L3B7E: | |
001925r 2 C9 2B cmp #$2B | |
001927r 2 D0 05 bne FIN3 | |
001929r 2 FIN1: | |
001929r 2 20 C0 00 jsr CHRGET | |
00192Cr 2 FIN2: | |
00192Cr 2 90 6F bcc FIN9 | |
00192Er 2 FIN3: | |
00192Er 2 C9 2E cmp #$2E | |
001930r 2 F0 38 beq FIN10 | |
001932r 2 C9 45 cmp #$45 | |
001934r 2 D0 44 bne FIN7 | |
001936r 2 20 C0 00 jsr CHRGET | |
001939r 2 90 21 bcc FIN5 | |
00193Br 2 C9 A5 cmp #TOKEN_MINUS | |
00193Dr 2 F0 0E beq L3BA6 | |
00193Fr 2 C9 2D cmp #$2D | |
001941r 2 F0 0A beq L3BA6 | |
001943r 2 C9 A4 cmp #TOKEN_PLUS | |
001945r 2 F0 12 beq FIN4 | |
001947r 2 C9 2B cmp #$2B | |
001949r 2 F0 0E beq FIN4 | |
00194Br 2 D0 11 bne FIN6 | |
00194Dr 2 L3BA6: | |
00194Dr 2 .ifndef CONFIG_ROR_WORKAROUND | |
00194Dr 2 ror EXPSGN | |
00194Dr 2 .else | |
00194Dr 2 A9 00 lda #$00 | |
00194Fr 2 90 02 bcc L3BAC | |
001951r 2 A9 80 lda #$80 | |
001953r 2 L3BAC: | |
001953r 2 46 AD lsr EXPSGN | |
001955r 2 05 AD ora EXPSGN | |
001957r 2 85 AD sta EXPSGN | |
001959r 2 .endif | |
001959r 2 FIN4: | |
001959r 2 20 C0 00 jsr CHRGET | |
00195Cr 2 FIN5: | |
00195Cr 2 90 66 bcc GETEXP | |
00195Er 2 FIN6: | |
00195Er 2 24 AD bit EXPSGN | |
001960r 2 10 18 bpl FIN7 | |
001962r 2 A9 00 lda #$00 | |
001964r 2 38 sec | |
001965r 2 E5 AB sbc EXPON | |
001967r 2 4C rr rr jmp FIN8 | |
00196Ar 2 | |
00196Ar 2 ; ---------------------------------------------------------------------------- | |
00196Ar 2 ; FOUND A DECIMAL POINT | |
00196Ar 2 ; ---------------------------------------------------------------------------- | |
00196Ar 2 FIN10: | |
00196Ar 2 .ifndef CONFIG_ROR_WORKAROUND | |
00196Ar 2 ror LOWTR | |
00196Ar 2 .else | |
00196Ar 2 A9 00 lda #$00 | |
00196Cr 2 90 02 bcc L3BC9 | |
00196Er 2 A9 80 lda #$80 | |
001970r 2 L3BC9: | |
001970r 2 46 AC lsr LOWTR | |
001972r 2 05 AC ora LOWTR | |
001974r 2 85 AC sta LOWTR | |
001976r 2 .endif | |
001976r 2 24 AC bit LOWTR | |
001978r 2 50 AF bvc FIN1 | |
00197Ar 2 | |
00197Ar 2 ; ---------------------------------------------------------------------------- | |
00197Ar 2 ; NUMBER TERMINATED, ADJUST EXPONENT NOW | |
00197Ar 2 ; ---------------------------------------------------------------------------- | |
00197Ar 2 FIN7: | |
00197Ar 2 A5 AB lda EXPON | |
00197Cr 2 FIN8: | |
00197Cr 2 38 sec | |
00197Dr 2 E5 AA sbc INDX | |
00197Fr 2 85 AB sta EXPON | |
001981r 2 F0 12 beq L3BEE | |
001983r 2 10 09 bpl L3BE7 | |
001985r 2 L3BDE: | |
001985r 2 20 rr rr jsr DIV10 | |
001988r 2 E6 AB inc EXPON | |
00198Ar 2 D0 F9 bne L3BDE | |
00198Cr 2 F0 07 beq L3BEE | |
00198Er 2 L3BE7: | |
00198Er 2 20 rr rr jsr MUL10 | |
001991r 2 C6 AB dec EXPON | |
001993r 2 D0 F9 bne L3BE7 | |
001995r 2 L3BEE: | |
001995r 2 A5 B4 lda SERLEN | |
001997r 2 30 01 bmi L3BF3 | |
001999r 2 60 rts | |
00199Ar 2 L3BF3: | |
00199Ar 2 4C rr rr jmp NEGOP | |
00199Dr 2 | |
00199Dr 2 ; ---------------------------------------------------------------------------- | |
00199Dr 2 ; ACCUMULATE A DIGIT INTO FAC | |
00199Dr 2 ; ---------------------------------------------------------------------------- | |
00199Dr 2 FIN9: | |
00199Dr 2 48 pha | |
00199Er 2 24 AC bit LOWTR | |
0019A0r 2 10 02 bpl L3BFD | |
0019A2r 2 E6 AA inc INDX | |
0019A4r 2 L3BFD: | |
0019A4r 2 20 rr rr jsr MUL10 | |
0019A7r 2 68 pla | |
0019A8r 2 38 sec | |
0019A9r 2 E9 30 sbc #$30 | |
0019ABr 2 20 rr rr jsr ADDACC | |
0019AEr 2 4C rr rr jmp FIN1 | |
0019B1r 2 | |
0019B1r 2 ; ---------------------------------------------------------------------------- | |
0019B1r 2 ; ADD (A) TO FAC | |
0019B1r 2 ; ---------------------------------------------------------------------------- | |
0019B1r 2 ADDACC: | |
0019B1r 2 48 pha | |
0019B2r 2 20 rr rr jsr COPY_FAC_TO_ARG_ROUNDED | |
0019B5r 2 68 pla | |
0019B6r 2 20 rr rr jsr FLOAT | |
0019B9r 2 A5 BB lda ARGSIGN | |
0019BBr 2 45 B3 eor FACSIGN | |
0019BDr 2 85 BC sta SGNCPR | |
0019BFr 2 A6 AE ldx FAC | |
0019C1r 2 4C rr rr jmp FADDT | |
0019C4r 2 | |
0019C4r 2 ; ---------------------------------------------------------------------------- | |
0019C4r 2 ; ACCUMULATE DIGIT OF EXPONENT | |
0019C4r 2 ; ---------------------------------------------------------------------------- | |
0019C4r 2 GETEXP: | |
0019C4r 2 A5 AB lda EXPON | |
0019C6r 2 C9 0A cmp #MAX_EXPON | |
0019C8r 2 90 09 bcc L3C2C | |
0019CAr 2 .ifdef CONFIG_10A | |
0019CAr 2 A9 64 lda #$64 | |
0019CCr 2 .endif | |
0019CCr 2 24 AD bit EXPSGN | |
0019CEr 2 .ifdef CONFIG_10A | |
0019CEr 2 30 11 bmi L3C3A | |
0019D0r 2 .else | |
0019D0r 2 bmi LDC70 | |
0019D0r 2 .endif | |
0019D0r 2 4C rr rr jmp OVERFLOW | |
0019D3r 2 LDC70: | |
0019D3r 2 .ifndef CONFIG_10A | |
0019D3r 2 lda #$0B | |
0019D3r 2 .endif | |
0019D3r 2 L3C2C: | |
0019D3r 2 0A asl a | |
0019D4r 2 0A asl a | |
0019D5r 2 18 clc | |
0019D6r 2 65 AB adc EXPON | |
0019D8r 2 0A asl a | |
0019D9r 2 18 clc | |
0019DAr 2 A0 00 ldy #$00 | |
0019DCr 2 71 C7 adc (TXTPTR),y | |
0019DEr 2 38 sec | |
0019DFr 2 E9 30 sbc #$30 | |
0019E1r 2 L3C3A: | |
0019E1r 2 85 AB sta EXPON | |
0019E3r 2 4C rr rr jmp FIN4 | |
0019E6r 2 | |
0019E6r 2 ; ---------------------------------------------------------------------------- | |
0019E6r 2 .ifdef CONFIG_SMALL | |
0019E6r 2 ; these values are /1000 of what the labels say | |
0019E6r 2 CON_99999999_9: | |
0019E6r 2 .byte $91,$43,$4F,$F8 | |
0019E6r 2 CON_999999999: | |
0019E6r 2 .byte $94,$74,$23,$F7 | |
0019E6r 2 CON_BILLION: | |
0019E6r 2 .byte $94,$74,$24,$00 | |
0019E6r 2 .else | |
0019E6r 2 CON_99999999_9: | |
0019E6r 2 9B 3E BC 1F .byte $9B,$3E,$BC,$1F,$FD | |
0019EAr 2 FD | |
0019EBr 2 CON_999999999: | |
0019EBr 2 .ifndef CONFIG_10A | |
0019EBr 2 .byte $9E,$6E,$6B,$27,$FE | |
0019EBr 2 .else | |
0019EBr 2 9E 6E 6B 27 .byte $9E,$6E,$6B,$27,$FD | |
0019EFr 2 FD | |
0019F0r 2 .endif | |
0019F0r 2 CON_BILLION: | |
0019F0r 2 9E 6E 6B 28 .byte $9E,$6E,$6B,$28,$00 | |
0019F4r 2 00 | |
0019F5r 2 .endif | |
0019F5r 2 | |
0019F5r 2 ; ---------------------------------------------------------------------------- | |
0019F5r 2 ; PRINT "IN <LINE #>" | |
0019F5r 2 ; ---------------------------------------------------------------------------- | |
0019F5r 2 INPRT: | |
0019F5r 2 .ifdef KBD | |
0019F5r 2 jsr LFE0B | |
0019F5r 2 .byte " in" | |
0019F5r 2 .byte 0 | |
0019F5r 2 .else | |
0019F5r 2 A9 rr lda #<QT_IN | |
0019F7r 2 A0 rr ldy #>QT_IN | |
0019F9r 2 20 rr rr jsr GOSTROUT2 | |
0019FCr 2 .endif | |
0019FCr 2 A5 87 lda CURLIN+1 | |
0019FEr 2 A6 86 ldx CURLIN | |
001A00r 2 | |
001A00r 2 ; ---------------------------------------------------------------------------- | |
001A00r 2 ; PRINT A,X AS DECIMAL INTEGER | |
001A00r 2 ; ---------------------------------------------------------------------------- | |
001A00r 2 LINPRT: | |
001A00r 2 85 AF sta FAC+1 | |
001A02r 2 86 B0 stx FAC+2 | |
001A04r 2 A2 90 ldx #$90 | |
001A06r 2 38 sec | |
001A07r 2 20 rr rr jsr FLOAT2 | |
001A0Ar 2 20 rr rr jsr FOUT | |
001A0Dr 2 GOSTROUT2: | |
001A0Dr 2 4C rr rr jmp STROUT | |
001A10r 2 | |
001A10r 2 ; ---------------------------------------------------------------------------- | |
001A10r 2 ; CONVERT (FAC) TO STRING STARTING AT STACK | |
001A10r 2 ; RETURN WITH (Y,A) POINTING AT STRING | |
001A10r 2 ; ---------------------------------------------------------------------------- | |
001A10r 2 FOUT: | |
001A10r 2 A0 01 ldy #$01 | |
001A12r 2 | |
001A12r 2 ; ---------------------------------------------------------------------------- | |
001A12r 2 ; "STR$" FUNCTION ENTERS HERE, WITH (Y)=0 | |
001A12r 2 ; SO THAT RESULT STRING STARTS AT STACK-1 | |
001A12r 2 ; (THIS IS USED AS A FLAG) | |
001A12r 2 ; ---------------------------------------------------------------------------- | |
001A12r 2 FOUT1: | |
001A12r 2 A9 20 lda #$20 | |
001A14r 2 24 B3 bit FACSIGN | |
001A16r 2 10 02 bpl L3C73 | |
001A18r 2 A9 2D lda #$2D | |
001A1Ar 2 L3C73: | |
001A1Ar 2 99 FF 00 sta $FF,y | |
001A1Dr 2 85 B3 sta FACSIGN | |
001A1Fr 2 84 BE sty STRNG2 | |
001A21r 2 C8 iny | |
001A22r 2 A9 30 lda #$30 | |
001A24r 2 A6 AE ldx FAC | |
001A26r 2 D0 03 bne L3C84 | |
001A28r 2 4C rr rr jmp FOUT4 | |
001A2Br 2 L3C84: | |
001A2Br 2 A9 00 lda #$00 | |
001A2Dr 2 E0 80 cpx #$80 | |
001A2Fr 2 F0 02 beq L3C8C | |
001A31r 2 B0 09 bcs L3C95 | |
001A33r 2 L3C8C: | |
001A33r 2 A9 rr lda #<CON_BILLION | |
001A35r 2 A0 rr ldy #>CON_BILLION | |
001A37r 2 20 rr rr jsr FMULT | |
001A3Ar 2 .ifdef CONFIG_SMALL | |
001A3Ar 2 lda #-6 ; exponent adjustment | |
001A3Ar 2 .else | |
001A3Ar 2 A9 F7 lda #-9 | |
001A3Cr 2 .endif | |
001A3Cr 2 L3C95: | |
001A3Cr 2 85 AA sta INDX | |
001A3Er 2 ; ---------------------------------------------------------------------------- | |
001A3Er 2 ; ADJUST UNTIL 1E8 <= (FAC) <1E9 | |
001A3Er 2 ; ---------------------------------------------------------------------------- | |
001A3Er 2 L3C97: | |
001A3Er 2 A9 rr lda #<CON_999999999 | |
001A40r 2 A0 rr ldy #>CON_999999999 | |
001A42r 2 20 rr rr jsr FCOMP | |
001A45r 2 F0 1E beq L3CBE | |
001A47r 2 10 12 bpl L3CB4 | |
001A49r 2 L3CA2: | |
001A49r 2 A9 rr lda #<CON_99999999_9 | |
001A4Br 2 A0 rr ldy #>CON_99999999_9 | |
001A4Dr 2 20 rr rr jsr FCOMP | |
001A50r 2 F0 02 beq L3CAD | |
001A52r 2 10 0E bpl L3CBB | |
001A54r 2 L3CAD: | |
001A54r 2 20 rr rr jsr MUL10 | |
001A57r 2 C6 AA dec INDX | |
001A59r 2 D0 EE bne L3CA2 | |
001A5Br 2 L3CB4: | |
001A5Br 2 20 rr rr jsr DIV10 | |
001A5Er 2 E6 AA inc INDX | |
001A60r 2 D0 DC bne L3C97 | |
001A62r 2 L3CBB: | |
001A62r 2 20 rr rr jsr FADDH | |
001A65r 2 L3CBE: | |
001A65r 2 20 rr rr jsr QINT | |
001A68r 2 ; ---------------------------------------------------------------------------- | |
001A68r 2 ; FAC+1...FAC+4 IS NOW IN INTEGER FORM | |
001A68r 2 ; WITH POWER OF TEN ADJUSTMENT IN TMPEXP | |
001A68r 2 ; | |
001A68r 2 ; IF -10 < TMPEXP > 1, PRINT IN DECIMAL FORM | |
001A68r 2 ; OTHERWISE, PRINT IN EXPONENTIAL FORM | |
001A68r 2 ; ---------------------------------------------------------------------------- | |
001A68r 2 A2 01 ldx #$01 | |
001A6Ar 2 A5 AA lda INDX | |
001A6Cr 2 18 clc | |
001A6Dr 2 69 0A adc #3*BYTES_FP-5 | |
001A6Fr 2 30 09 bmi L3CD3 | |
001A71r 2 C9 0B cmp #3*BYTES_FP-4 | |
001A73r 2 B0 06 bcs L3CD4 | |
001A75r 2 69 FF adc #$FF | |
001A77r 2 AA tax | |
001A78r 2 A9 02 lda #$02 | |
001A7Ar 2 L3CD3: | |
001A7Ar 2 38 sec | |
001A7Br 2 L3CD4: | |
001A7Br 2 E9 02 sbc #$02 | |
001A7Dr 2 85 AB sta EXPON | |
001A7Fr 2 86 AA stx INDX | |
001A81r 2 8A txa | |
001A82r 2 F0 02 beq L3CDF | |
001A84r 2 10 13 bpl L3CF2 | |
001A86r 2 L3CDF: | |
001A86r 2 A4 BE ldy STRNG2 | |
001A88r 2 A9 2E lda #$2E | |
001A8Ar 2 C8 iny | |
001A8Br 2 99 FF 00 sta $FF,y | |
001A8Er 2 8A txa | |
001A8Fr 2 F0 06 beq L3CF0 | |
001A91r 2 A9 30 lda #$30 | |
001A93r 2 C8 iny | |
001A94r 2 99 FF 00 sta $FF,y | |
001A97r 2 L3CF0: | |
001A97r 2 84 BE sty STRNG2 | |
001A99r 2 ; ---------------------------------------------------------------------------- | |
001A99r 2 ; NOW DIVIDE BY POWERS OF TEN TO GET SUCCESSIVE DIGITS | |
001A99r 2 ; ---------------------------------------------------------------------------- | |
001A99r 2 L3CF2: | |
001A99r 2 A0 00 ldy #$00 | |
001A9Br 2 LDD3A: | |
001A9Br 2 A2 80 ldx #$80 | |
001A9Dr 2 L3CF6: | |
001A9Dr 2 A5 B2 lda FAC_LAST | |
001A9Fr 2 18 clc | |
001AA0r 2 .ifndef CONFIG_SMALL | |
001AA0r 2 79 rr rr adc DECTBL+3,y | |
001AA3r 2 85 B2 sta FAC+4 | |
001AA5r 2 A5 B1 lda FAC+3 | |
001AA7r 2 .endif | |
001AA7r 2 79 rr rr adc DECTBL+2,y | |
001AAAr 2 85 B1 sta FAC+3 | |
001AACr 2 A5 B0 lda FAC+2 | |
001AAEr 2 79 rr rr adc DECTBL+1,y | |
001AB1r 2 85 B0 sta FAC+2 | |
001AB3r 2 A5 AF lda FAC+1 | |
001AB5r 2 79 rr rr adc DECTBL,y | |
001AB8r 2 85 AF sta FAC+1 | |
001ABAr 2 E8 inx | |
001ABBr 2 B0 04 bcs L3D1A | |
001ABDr 2 10 DE bpl L3CF6 | |
001ABFr 2 30 02 bmi L3D1C | |
001AC1r 2 L3D1A: | |
001AC1r 2 30 DA bmi L3CF6 | |
001AC3r 2 L3D1C: | |
001AC3r 2 8A txa | |
001AC4r 2 90 04 bcc L3D23 | |
001AC6r 2 49 FF eor #$FF | |
001AC8r 2 69 0A adc #$0A | |
001ACAr 2 L3D23: | |
001ACAr 2 69 2F adc #$2F | |
001ACCr 2 C8 iny | |
001ACDr 2 C8 iny | |
001ACEr 2 C8 iny | |
001ACFr 2 .ifndef CONFIG_SMALL | |
001ACFr 2 C8 iny | |
001AD0r 2 .endif | |
001AD0r 2 84 94 sty VARPNT | |
001AD2r 2 A4 BE ldy STRNG2 | |
001AD4r 2 C8 iny | |
001AD5r 2 AA tax | |
001AD6r 2 29 7F and #$7F | |
001AD8r 2 99 FF 00 sta $FF,y | |
001ADBr 2 C6 AA dec INDX | |
001ADDr 2 D0 06 bne L3D3E | |
001ADFr 2 A9 2E lda #$2E | |
001AE1r 2 C8 iny | |
001AE2r 2 99 FF 00 sta $FF,y | |
001AE5r 2 L3D3E: | |
001AE5r 2 84 BE sty STRNG2 | |
001AE7r 2 A4 94 ldy VARPNT | |
001AE9r 2 8A txa | |
001AEAr 2 49 FF eor #$FF | |
001AECr 2 29 80 and #$80 | |
001AEEr 2 AA tax | |
001AEFr 2 C0 24 cpy #DECTBL_END-DECTBL | |
001AF1r 2 .ifdef CONFIG_CBM_ALL | |
001AF1r 2 beq LDD96 | |
001AF1r 2 cpy #$3C ; XXX | |
001AF1r 2 .endif | |
001AF1r 2 D0 AA bne L3CF6 | |
001AF3r 2 ; ---------------------------------------------------------------------------- | |
001AF3r 2 ; NINE DIGITS HAVE BEEN STORED IN STRING. NOW LOOK | |
001AF3r 2 ; BACK AND LOP OFF TRAILING ZEROES AND A TRAILING | |
001AF3r 2 ; DECIMAL POINT. | |
001AF3r 2 ; ---------------------------------------------------------------------------- | |
001AF3r 2 LDD96: | |
001AF3r 2 A4 BE ldy STRNG2 | |
001AF5r 2 L3D4E: | |
001AF5r 2 B9 FF 00 lda $FF,y | |
001AF8r 2 88 dey | |
001AF9r 2 C9 30 cmp #$30 | |
001AFBr 2 F0 F8 beq L3D4E | |
001AFDr 2 C9 2E cmp #$2E | |
001AFFr 2 F0 01 beq L3D5B | |
001B01r 2 C8 iny | |
001B02r 2 L3D5B: | |
001B02r 2 A9 2B lda #$2B | |
001B04r 2 A6 AB ldx EXPON | |
001B06r 2 F0 2E beq L3D8F | |
001B08r 2 10 08 bpl L3D6B | |
001B0Ar 2 A9 00 lda #$00 | |
001B0Cr 2 38 sec | |
001B0Dr 2 E5 AB sbc EXPON | |
001B0Fr 2 AA tax | |
001B10r 2 A9 2D lda #$2D | |
001B12r 2 L3D6B: | |
001B12r 2 99 01 01 sta STACK+1,y | |
001B15r 2 A9 45 lda #$45 | |
001B17r 2 99 00 01 sta STACK,y | |
001B1Ar 2 8A txa | |
001B1Br 2 A2 2F ldx #$2F | |
001B1Dr 2 38 sec | |
001B1Er 2 L3D77: | |
001B1Er 2 E8 inx | |
001B1Fr 2 E9 0A sbc #$0A | |
001B21r 2 B0 FB bcs L3D77 | |
001B23r 2 69 3A adc #$3A | |
001B25r 2 99 03 01 sta STACK+3,y | |
001B28r 2 8A txa | |
001B29r 2 99 02 01 sta STACK+2,y | |
001B2Cr 2 A9 00 lda #$00 | |
001B2Er 2 99 04 01 sta STACK+4,y | |
001B31r 2 F0 08 beq L3D94 | |
001B33r 2 FOUT4: | |
001B33r 2 99 FF 00 sta $FF,y | |
001B36r 2 L3D8F: | |
001B36r 2 A9 00 lda #$00 | |
001B38r 2 99 00 01 sta STACK,y | |
001B3Br 2 L3D94: | |
001B3Br 2 A9 00 lda #$00 | |
001B3Dr 2 A0 01 ldy #$01 | |
001B3Fr 2 60 rts | |
001B40r 2 | |
001B40r 2 ; ---------------------------------------------------------------------------- | |
001B40r 2 CON_HALF: | |
001B40r 2 .ifdef CONFIG_SMALL | |
001B40r 2 .byte $80,$00,$00,$00 | |
001B40r 2 .else | |
001B40r 2 80 00 00 00 .byte $80,$00,$00,$00,$00 | |
001B44r 2 00 | |
001B45r 2 .endif | |
001B45r 2 | |
001B45r 2 ; ---------------------------------------------------------------------------- | |
001B45r 2 ; POWERS OF 10 FROM 1E8 DOWN TO 1, | |
001B45r 2 ; AS 32-BIT INTEGERS, WITH ALTERNATING SIGNS | |
001B45r 2 ; ---------------------------------------------------------------------------- | |
001B45r 2 DECTBL: | |
001B45r 2 .ifdef CONFIG_SMALL | |
001B45r 2 .byte $FE,$79,$60 ; -100000 | |
001B45r 2 .byte $00,$27,$10 ; 10000 | |
001B45r 2 .byte $FF,$FC,$18 ; -1000 | |
001B45r 2 .byte $00,$00,$64 ; 100 | |
001B45r 2 .byte $FF,$FF,$F6 ; -10 | |
001B45r 2 .byte $00,$00,$01 ; 1 | |
001B45r 2 .else | |
001B45r 2 FA 0A 1F 00 .byte $FA,$0A,$1F,$00 ; -100000000 | |
001B49r 2 00 98 96 80 .byte $00,$98,$96,$80 ; 10000000 | |
001B4Dr 2 FF F0 BD C0 .byte $FF,$F0,$BD,$C0 ; -1000000 | |
001B51r 2 00 01 86 A0 .byte $00,$01,$86,$A0 ; 100000 | |
001B55r 2 FF FF D8 F0 .byte $FF,$FF,$D8,$F0 ; -10000 | |
001B59r 2 00 00 03 E8 .byte $00,$00,$03,$E8 ; 1000 | |
001B5Dr 2 FF FF FF 9C .byte $FF,$FF,$FF,$9C ; -100 | |
001B61r 2 00 00 00 0A .byte $00,$00,$00,$0A ; 10 | |
001B65r 2 FF FF FF FF .byte $FF,$FF,$FF,$FF ; -1 | |
001B69r 2 .endif | |
001B69r 2 DECTBL_END: | |
001B69r 2 .ifdef CONFIG_CBM_ALL | |
001B69r 2 .byte $FF,$DF,$0A,$80 ; TI$ | |
001B69r 2 .byte $00,$03,$4B,$C0 | |
001B69r 2 .byte $FF,$FF,$73,$60 | |
001B69r 2 .byte $00,$00,$0E,$10 | |
001B69r 2 .byte $FF,$FF,$FD,$A8 | |
001B69r 2 .byte $00,$00,$00,$3C | |
001B69r 2 .endif | |
001B69r 2 .ifdef CONFIG_2 | |
001B69r 2 C_ZERO = CON_HALF + 2 | |
001B69r 2 .endif | |
001B69r 2 | |
001B69r 2 ; ---------------------------------------------------------------------------- | |
001B69r 2 ; "SQR" FUNCTION | |
001B69r 2 ; ---------------------------------------------------------------------------- | |
001B69r 2 SQR: | |
001B69r 2 20 rr rr jsr COPY_FAC_TO_ARG_ROUNDED | |
001B6Cr 2 A9 rr lda #<CON_HALF | |
001B6Er 2 A0 rr ldy #>CON_HALF | |
001B70r 2 20 rr rr jsr LOAD_FAC_FROM_YA | |
001B73r 2 | |
001B73r 2 ; ---------------------------------------------------------------------------- | |
001B73r 2 ; EXPONENTIATION OPERATION | |
001B73r 2 ; | |
001B73r 2 ; ARG ^ FAC = EXP( LOG(ARG) * FAC ) | |
001B73r 2 ; ---------------------------------------------------------------------------- | |
001B73r 2 FPWRT: | |
001B73r 2 F0 70 beq EXP | |
001B75r 2 A5 B6 lda ARG | |
001B77r 2 D0 03 bne L3DD5 | |
001B79r 2 4C rr rr jmp STA_IN_FAC_SIGN_AND_EXP | |
001B7Cr 2 L3DD5: | |
001B7Cr 2 A2 9B ldx #TEMP3 | |
001B7Er 2 A0 00 ldy #$00 | |
001B80r 2 20 rr rr jsr STORE_FAC_AT_YX_ROUNDED | |
001B83r 2 A5 BB lda ARGSIGN | |
001B85r 2 10 0F bpl L3DEF | |
001B87r 2 20 rr rr jsr INT | |
001B8Ar 2 A9 9B lda #TEMP3 | |
001B8Cr 2 A0 00 ldy #$00 | |
001B8Er 2 20 rr rr jsr FCOMP | |
001B91r 2 D0 03 bne L3DEF | |
001B93r 2 98 tya | |
001B94r 2 A4 0A ldy CHARAC | |
001B96r 2 L3DEF: | |
001B96r 2 20 rr rr jsr MFA | |
001B99r 2 98 tya | |
001B9Ar 2 48 pha | |
001B9Br 2 20 rr rr jsr LOG | |
001B9Er 2 A9 9B lda #TEMP3 | |
001BA0r 2 A0 00 ldy #$00 | |
001BA2r 2 20 rr rr jsr FMULT | |
001BA5r 2 20 rr rr jsr EXP | |
001BA8r 2 68 pla | |
001BA9r 2 4A lsr a | |
001BAAr 2 90 0A bcc L3E0F | |
001BACr 2 | |
001BACr 2 ; ---------------------------------------------------------------------------- | |
001BACr 2 ; NEGATE VALUE IN FAC | |
001BACr 2 ; ---------------------------------------------------------------------------- | |
001BACr 2 NEGOP: | |
001BACr 2 A5 AE lda FAC | |
001BAEr 2 F0 06 beq L3E0F | |
001BB0r 2 A5 B3 lda FACSIGN | |
001BB2r 2 49 FF eor #$FF | |
001BB4r 2 85 B3 sta FACSIGN | |
001BB6r 2 L3E0F: | |
001BB6r 2 60 rts | |
001BB7r 2 | |
001BB7r 2 ; ---------------------------------------------------------------------------- | |
001BB7r 2 .ifdef CONFIG_SMALL | |
001BB7r 2 CON_LOG_E: | |
001BB7r 2 .byte $81,$38,$AA,$3B | |
001BB7r 2 POLY_EXP: | |
001BB7r 2 .byte $06 | |
001BB7r 2 .byte $74,$63,$90,$8C | |
001BB7r 2 .byte $77,$23,$0C,$AB | |
001BB7r 2 .byte $7A,$1E,$94,$00 | |
001BB7r 2 .byte $7C,$63,$42,$80 | |
001BB7r 2 .byte $7E,$75,$FE,$D0 | |
001BB7r 2 .byte $80,$31,$72,$15 | |
001BB7r 2 .byte $81,$00,$00,$00 | |
001BB7r 2 .else | |
001BB7r 2 CON_LOG_E: | |
001BB7r 2 81 38 AA 3B .byte $81,$38,$AA,$3B,$29 | |
001BBBr 2 29 | |
001BBCr 2 POLY_EXP: | |
001BBCr 2 07 .byte $07 | |
001BBDr 2 71 34 58 3E .byte $71,$34,$58,$3E,$56 | |
001BC1r 2 56 | |
001BC2r 2 74 16 7E B3 .byte $74,$16,$7E,$B3,$1B | |
001BC6r 2 1B | |
001BC7r 2 77 2F EE E3 .byte $77,$2F,$EE,$E3,$85 | |
001BCBr 2 85 | |
001BCCr 2 7A 1D 84 1C .byte $7A,$1D,$84,$1C,$2A | |
001BD0r 2 2A | |
001BD1r 2 7C 63 59 58 .byte $7C,$63,$59,$58,$0A | |
001BD5r 2 0A | |
001BD6r 2 7E 75 FD E7 .byte $7E,$75,$FD,$E7,$C6 | |
001BDAr 2 C6 | |
001BDBr 2 80 31 72 18 .byte $80,$31,$72,$18,$10 | |
001BDFr 2 10 | |
001BE0r 2 81 00 00 00 .byte $81,$00,$00,$00,$00 | |
001BE4r 2 00 | |
001BE5r 2 .endif | |
001BE5r 2 | |
001BE5r 2 ; ---------------------------------------------------------------------------- | |
001BE5r 2 ; "EXP" FUNCTION | |
001BE5r 2 ; | |
001BE5r 2 ; FAC = E ^ FAC | |
001BE5r 2 ; ---------------------------------------------------------------------------- | |
001BE5r 2 EXP: | |
001BE5r 2 A9 rr lda #<CON_LOG_E | |
001BE7r 2 A0 rr ldy #>CON_LOG_E | |
001BE9r 2 20 rr rr jsr FMULT | |
001BECr 2 A5 BD lda FACEXTENSION | |
001BEEr 2 69 50 adc #$50 | |
001BF0r 2 90 03 bcc L3E4E | |
001BF2r 2 20 rr rr jsr INCREMENT_MANTISSA | |
001BF5r 2 L3E4E: | |
001BF5r 2 85 A3 sta ARGEXTENSION | |
001BF7r 2 20 rr rr jsr MAF | |
001BFAr 2 A5 AE lda FAC | |
001BFCr 2 C9 88 cmp #$88 | |
001BFEr 2 90 03 bcc L3E5C | |
001C00r 2 L3E59: | |
001C00r 2 20 rr rr jsr OUTOFRNG | |
001C03r 2 L3E5C: | |
001C03r 2 20 rr rr jsr INT | |
001C06r 2 A5 0A lda CHARAC | |
001C08r 2 18 clc | |
001C09r 2 69 81 adc #$81 | |
001C0Br 2 F0 F3 beq L3E59 | |
001C0Dr 2 38 sec | |
001C0Er 2 E9 01 sbc #$01 | |
001C10r 2 48 pha | |
001C11r 2 A2 05 ldx #BYTES_FP | |
001C13r 2 L3E6C: | |
001C13r 2 B5 B6 lda ARG,x | |
001C15r 2 B4 AE ldy FAC,x | |
001C17r 2 95 AE sta FAC,x | |
001C19r 2 94 B6 sty ARG,x | |
001C1Br 2 CA dex | |
001C1Cr 2 10 F5 bpl L3E6C | |
001C1Er 2 A5 A3 lda ARGEXTENSION | |
001C20r 2 85 BD sta FACEXTENSION | |
001C22r 2 20 rr rr jsr FSUBT | |
001C25r 2 20 rr rr jsr NEGOP | |
001C28r 2 A9 rr lda #<POLY_EXP | |
001C2Ar 2 A0 rr ldy #>POLY_EXP | |
001C2Cr 2 20 rr rr jsr POLYNOMIAL | |
001C2Fr 2 A9 00 lda #$00 | |
001C31r 2 85 BC sta SGNCPR | |
001C33r 2 68 pla | |
001C34r 2 20 rr rr jsr ADD_EXPONENTS1 | |
001C37r 2 60 rts | |
001C38r 2 | |
001C38r 2 ; ---------------------------------------------------------------------------- | |
001C38r 2 ; ODD POLYNOMIAL SUBROUTINE | |
001C38r 2 ; | |
001C38r 2 ; F(X) = X * P(X^2) | |
001C38r 2 ; | |
001C38r 2 ; WHERE: X IS VALUE IN FAC | |
001C38r 2 ; Y,A POINTS AT COEFFICIENT TABLE | |
001C38r 2 ; FIRST BYTE OF COEFF. TABLE IS N | |
001C38r 2 ; COEFFICIENTS FOLLOW, HIGHEST POWER FIRST | |
001C38r 2 ; | |
001C38r 2 ; P(X^2) COMPUTED USING NORMAL POLYNOMIAL SUBROUTINE | |
001C38r 2 ; ---------------------------------------------------------------------------- | |
001C38r 2 POLYNOMIAL_ODD: | |
001C38r 2 85 BE sta STRNG2 | |
001C3Ar 2 84 BF sty STRNG2+1 | |
001C3Cr 2 20 rr rr jsr STORE_FAC_IN_TEMP1_ROUNDED | |
001C3Fr 2 A9 A4 lda #TEMP1X | |
001C41r 2 20 rr rr jsr FMULT | |
001C44r 2 20 rr rr jsr SERMAIN | |
001C47r 2 A9 A4 lda #TEMP1X | |
001C49r 2 A0 00 ldy #$00 | |
001C4Br 2 4C rr rr jmp FMULT | |
001C4Er 2 | |
001C4Er 2 ; ---------------------------------------------------------------------------- | |
001C4Er 2 ; NORMAL POLYNOMIAL SUBROUTINE | |
001C4Er 2 ; | |
001C4Er 2 ; P(X) = C(0)*X^N + C(1)*X^(N-1) + ... + C(N) | |
001C4Er 2 ; | |
001C4Er 2 ; WHERE: X IS VALUE IN FAC | |
001C4Er 2 ; Y,A POINTS AT COEFFICIENT TABLE | |
001C4Er 2 ; FIRST BYTE OF COEFF. TABLE IS N | |
001C4Er 2 ; COEFFICIENTS FOLLOW, HIGHEST POWER FIRST | |
001C4Er 2 ; ---------------------------------------------------------------------------- | |
001C4Er 2 POLYNOMIAL: | |
001C4Er 2 85 BE sta STRNG2 | |
001C50r 2 84 BF sty STRNG2+1 | |
001C52r 2 SERMAIN: | |
001C52r 2 20 rr rr jsr STORE_FAC_IN_TEMP2_ROUNDED | |
001C55r 2 B1 BE lda (STRNG2),y | |
001C57r 2 85 B4 sta SERLEN | |
001C59r 2 A4 BE ldy STRNG2 | |
001C5Br 2 C8 iny | |
001C5Cr 2 98 tya | |
001C5Dr 2 D0 02 bne L3EBA | |
001C5Fr 2 E6 BF inc STRNG2+1 | |
001C61r 2 L3EBA: | |
001C61r 2 85 BE sta STRNG2 | |
001C63r 2 A4 BF ldy STRNG2+1 | |
001C65r 2 L3EBE: | |
001C65r 2 20 rr rr jsr FMULT | |
001C68r 2 A5 BE lda STRNG2 | |
001C6Ar 2 A4 BF ldy STRNG2+1 | |
001C6Cr 2 18 clc | |
001C6Dr 2 69 05 adc #BYTES_FP | |
001C6Fr 2 90 01 bcc L3ECB | |
001C71r 2 C8 iny | |
001C72r 2 L3ECB: | |
001C72r 2 85 BE sta STRNG2 | |
001C74r 2 84 BF sty STRNG2+1 | |
001C76r 2 20 rr rr jsr FADD | |
001C79r 2 A9 A9 lda #TEMP2 | |
001C7Br 2 A0 00 ldy #$00 | |
001C7Dr 2 C6 B4 dec SERLEN | |
001C7Fr 2 D0 E4 bne L3EBE | |
001C81r 2 RTS19: | |
001C81r 2 60 rts | |
001C82r 2 | |
001C82r 1 .include "chrget.s" | |
001C82r 2 .segment "CHRGET" | |
000000r 2 RAMSTART1: | |
000000r 2 GENERIC_CHRGET: | |
000000r 2 E6 C7 inc TXTPTR | |
000002r 2 D0 02 bne GENERIC_CHRGOT | |
000004r 2 E6 C8 inc TXTPTR+1 | |
000006r 2 GENERIC_CHRGOT: | |
000006r 2 GENERIC_TXTPTR = GENERIC_CHRGOT + 1 | |
000006r 2 AD 60 EA lda $EA60 | |
000009r 2 .ifdef KBD | |
000009r 2 jsr LF430 | |
000009r 2 .endif | |
000009r 2 C9 3A cmp #$3A | |
00000Br 2 B0 0A bcs L4058 | |
00000Dr 2 GENERIC_CHRGOT2: | |
00000Dr 2 C9 20 cmp #$20 | |
00000Fr 2 F0 EF beq GENERIC_CHRGET | |
000011r 2 38 sec | |
000012r 2 E9 30 sbc #$30 | |
000014r 2 38 sec | |
000015r 2 E9 D0 sbc #$D0 | |
000017r 2 L4058: | |
000017r 2 60 rts | |
000018r 2 | |
000018r 1 .include "rnd.s" | |
000018r 2 .segment "CODE" | |
001C82r 2 | |
001C82r 2 ; ---------------------------------------------------------------------------- | |
001C82r 2 ; "RND" FUNCTION | |
001C82r 2 ; ---------------------------------------------------------------------------- | |
001C82r 2 | |
001C82r 2 .ifdef KBD | |
001C82r 2 RND: | |
001C82r 2 ldx #$10 | |
001C82r 2 jsr SIGN | |
001C82r 2 beq LFC26 | |
001C82r 2 bmi LFC10 | |
001C82r 2 lda RNDSEED | |
001C82r 2 ldy RNDSEED+1 | |
001C82r 2 LFBFA: | |
001C82r 2 sta FAC+2 | |
001C82r 2 sty FAC+1 | |
001C82r 2 LFBFE: | |
001C82r 2 asl a | |
001C82r 2 asl a | |
001C82r 2 eor FAC+2 | |
001C82r 2 asl a | |
001C82r 2 eor FAC+1 | |
001C82r 2 asl a | |
001C82r 2 asl a | |
001C82r 2 asl a | |
001C82r 2 asl a | |
001C82r 2 eor FAC+1 | |
001C82r 2 asl a | |
001C82r 2 rol FAC+2 | |
001C82r 2 rol FAC+1 | |
001C82r 2 LFC10: | |
001C82r 2 lda FAC+2 | |
001C82r 2 dex | |
001C82r 2 bne LFBFE | |
001C82r 2 sta RNDSEED | |
001C82r 2 sta FAC+3 | |
001C82r 2 lda FAC+1 | |
001C82r 2 sta RNDSEED+1 | |
001C82r 2 lda #$80 | |
001C82r 2 sta FAC | |
001C82r 2 stx FACSIGN | |
001C82r 2 jmp NORMALIZE_FAC2 | |
001C82r 2 LFC26: | |
001C82r 2 ldy $03CA | |
001C82r 2 lda $03C7 | |
001C82r 2 ora #$01 | |
001C82r 2 GOMOVMF: | |
001C82r 2 bne LFBFA | |
001C82r 2 .byte $F0 | |
001C82r 2 .else | |
001C82r 2 ; <<< THESE ARE MISSING ONE BYTE FOR FP VALUES >>> | |
001C82r 2 ; (non CONFIG_SMALL) | |
001C82r 2 CONRND1: | |
001C82r 2 98 35 44 7A .byte $98,$35,$44,$7A | |
001C86r 2 CONRND2: | |
001C86r 2 68 28 B1 46 .byte $68,$28,$B1,$46 | |
001C8Ar 2 RND: | |
001C8Ar 2 20 rr rr jsr SIGN | |
001C8Dr 2 .ifdef CONFIG_CBM_ALL | |
001C8Dr 2 bmi L3F01 | |
001C8Dr 2 bne LDF63 | |
001C8Dr 2 lda ENTROPY | |
001C8Dr 2 sta FAC+1 | |
001C8Dr 2 lda ENTROPY+4 | |
001C8Dr 2 sta FAC+2 | |
001C8Dr 2 lda ENTROPY+1 | |
001C8Dr 2 sta FAC+3 | |
001C8Dr 2 lda ENTROPY+5 | |
001C8Dr 2 sta FAC+4 | |
001C8Dr 2 jmp LDF88 | |
001C8Dr 2 LDF63: | |
001C8Dr 2 .else | |
001C8Dr 2 AA tax | |
001C8Er 2 30 18 bmi L3F01 | |
001C90r 2 .endif | |
001C90r 2 A9 D8 lda #<RNDSEED | |
001C92r 2 A0 00 ldy #>RNDSEED | |
001C94r 2 20 rr rr jsr LOAD_FAC_FROM_YA | |
001C97r 2 .ifndef CONFIG_CBM_ALL | |
001C97r 2 8A txa | |
001C98r 2 F0 E7 beq RTS19 | |
001C9Ar 2 .endif | |
001C9Ar 2 A9 rr lda #<CONRND1 | |
001C9Cr 2 A0 rr ldy #>CONRND1 | |
001C9Er 2 20 rr rr jsr FMULT | |
001CA1r 2 A9 rr lda #<CONRND2 | |
001CA3r 2 A0 rr ldy #>CONRND2 | |
001CA5r 2 20 rr rr jsr FADD | |
001CA8r 2 L3F01: | |
001CA8r 2 A6 B2 ldx FAC_LAST | |
001CAAr 2 A5 AF lda FAC+1 | |
001CACr 2 85 B2 sta FAC_LAST | |
001CAEr 2 86 AF stx FAC+1 | |
001CB0r 2 .ifdef CONFIG_CBM_ALL | |
001CB0r 2 ldx FAC+2 | |
001CB0r 2 lda FAC+3 | |
001CB0r 2 sta FAC+2 | |
001CB0r 2 stx FAC+3 | |
001CB0r 2 LDF88: | |
001CB0r 2 .endif | |
001CB0r 2 A9 00 lda #$00 | |
001CB2r 2 85 B3 sta FACSIGN | |
001CB4r 2 A5 AE lda FAC | |
001CB6r 2 85 BD sta FACEXTENSION | |
001CB8r 2 A9 80 lda #$80 | |
001CBAr 2 85 AE sta FAC | |
001CBCr 2 20 rr rr jsr NORMALIZE_FAC2 | |
001CBFr 2 A2 D8 ldx #<RNDSEED | |
001CC1r 2 A0 00 ldy #>RNDSEED | |
001CC3r 2 GOMOVMF: | |
001CC3r 2 4C rr rr jmp STORE_FAC_AT_YX_ROUNDED | |
001CC6r 2 .endif | |
001CC6r 2 | |
001CC6r 2 .segment "CHRGET" | |
000018r 2 ; ---------------------------------------------------------------------------- | |
000018r 2 ; INITIAL VALUE FOR RANDOM NUMBER, ALSO COPIED | |
000018r 2 ; IN ALONG WITH CHRGET, BUT ERRONEOUSLY: | |
000018r 2 ; <<< THE LAST BYTE IS NOT COPIED >>> | |
000018r 2 ; (on all non-CONFIG_SMALL) | |
000018r 2 ; ---------------------------------------------------------------------------- | |
000018r 2 GENERIC_RNDSEED: | |
000018r 2 .ifndef KBD | |
000018r 2 ; random number seed | |
000018r 2 .ifdef CONFIG_SMALL | |
000018r 2 .byte $80,$4F,$C7,$52 | |
000018r 2 .else | |
000018r 2 .ifdef CONFIG_11 | |
000018r 2 80 4F C7 52 .byte $80,$4F,$C7,$52,$58 | |
00001Cr 2 58 | |
00001Dr 2 .else | |
00001Dr 2 .byte $80,$4F,$C7,$52,$59 | |
00001Dr 2 .endif | |
00001Dr 2 .endif | |
00001Dr 2 .endif | |
00001Dr 2 GENERIC_CHRGET_END: | |
00001Dr 2 | |
00001Dr 1 .include "trig.s" | |
00001Dr 2 .segment "CODE" | |
001CC6r 2 | |
001CC6r 2 SIN_COS_TAN_ATN: | |
001CC6r 2 ; ---------------------------------------------------------------------------- | |
001CC6r 2 ; "COS" FUNCTION | |
001CC6r 2 ; ---------------------------------------------------------------------------- | |
001CC6r 2 COS: | |
001CC6r 2 A9 rr lda #<CON_PI_HALF | |
001CC8r 2 A0 rr ldy #>CON_PI_HALF | |
001CCAr 2 20 rr rr jsr FADD | |
001CCDr 2 | |
001CCDr 2 ; ---------------------------------------------------------------------------- | |
001CCDr 2 ; "SIN" FUNCTION | |
001CCDr 2 ; ---------------------------------------------------------------------------- | |
001CCDr 2 SIN: | |
001CCDr 2 20 rr rr jsr COPY_FAC_TO_ARG_ROUNDED | |
001CD0r 2 A9 rr lda #<CON_PI_DOUB | |
001CD2r 2 A0 rr ldy #>CON_PI_DOUB | |
001CD4r 2 A6 BB ldx ARGSIGN | |
001CD6r 2 20 rr rr jsr DIV | |
001CD9r 2 20 rr rr jsr COPY_FAC_TO_ARG_ROUNDED | |
001CDCr 2 20 rr rr jsr INT | |
001CDFr 2 A9 00 lda #$00 | |
001CE1r 2 85 BC sta STRNG1 | |
001CE3r 2 20 rr rr jsr FSUBT | |
001CE6r 2 ; ---------------------------------------------------------------------------- | |
001CE6r 2 ; (FAC) = ANGLE AS A FRACTION OF A FULL CIRCLE | |
001CE6r 2 ; | |
001CE6r 2 ; NOW FOLD THE RANGE INTO A QUARTER CIRCLE | |
001CE6r 2 ; | |
001CE6r 2 ; <<< THERE ARE MUCH SIMPLER WAYS TO DO THIS >>> | |
001CE6r 2 ; ---------------------------------------------------------------------------- | |
001CE6r 2 A9 rr lda #<QUARTER | |
001CE8r 2 A0 rr ldy #>QUARTER | |
001CEAr 2 20 rr rr jsr FSUB | |
001CEDr 2 A5 B3 lda FACSIGN | |
001CEFr 2 48 pha | |
001CF0r 2 10 0D bpl SIN1 | |
001CF2r 2 20 rr rr jsr FADDH | |
001CF5r 2 A5 B3 lda FACSIGN | |
001CF7r 2 30 09 bmi L3F5B | |
001CF9r 2 A5 13 lda CPRMASK | |
001CFBr 2 49 FF eor #$FF | |
001CFDr 2 85 13 sta CPRMASK | |
001CFFr 2 ; ---------------------------------------------------------------------------- | |
001CFFr 2 ; IF FALL THRU, RANGE IS 0...1/2 | |
001CFFr 2 ; IF BRANCH HERE, RANGE IS 0...1/4 | |
001CFFr 2 ; ---------------------------------------------------------------------------- | |
001CFFr 2 SIN1: | |
001CFFr 2 20 rr rr jsr NEGOP | |
001D02r 2 ; ---------------------------------------------------------------------------- | |
001D02r 2 ; IF FALL THRU, RANGE IS -1/2...0 | |
001D02r 2 ; IF BRANCH HERE, RANGE IS -1/4...0 | |
001D02r 2 ; ---------------------------------------------------------------------------- | |
001D02r 2 L3F5B: | |
001D02r 2 A9 rr lda #<QUARTER | |
001D04r 2 A0 rr ldy #>QUARTER | |
001D06r 2 20 rr rr jsr FADD | |
001D09r 2 68 pla | |
001D0Ar 2 10 03 bpl L3F68 | |
001D0Cr 2 20 rr rr jsr NEGOP | |
001D0Fr 2 L3F68: | |
001D0Fr 2 A9 rr lda #<POLY_SIN | |
001D11r 2 A0 rr ldy #>POLY_SIN | |
001D13r 2 4C rr rr jmp POLYNOMIAL_ODD | |
001D16r 2 | |
001D16r 2 ; ---------------------------------------------------------------------------- | |
001D16r 2 ; "TAN" FUNCTION | |
001D16r 2 ; | |
001D16r 2 ; COMPUTE TAN(X) = SIN(X) / COS(X) | |
001D16r 2 ; ---------------------------------------------------------------------------- | |
001D16r 2 TAN: | |
001D16r 2 20 rr rr jsr STORE_FAC_IN_TEMP1_ROUNDED | |
001D19r 2 A9 00 lda #$00 | |
001D1Br 2 85 13 sta CPRMASK | |
001D1Dr 2 20 rr rr jsr SIN | |
001D20r 2 A2 9B ldx #TEMP3 | |
001D22r 2 A0 00 ldy #$00 | |
001D24r 2 20 rr rr jsr GOMOVMF | |
001D27r 2 A9 A4 lda #TEMP1+(5-BYTES_FP) | |
001D29r 2 A0 00 ldy #$00 | |
001D2Br 2 20 rr rr jsr LOAD_FAC_FROM_YA | |
001D2Er 2 A9 00 lda #$00 | |
001D30r 2 85 B3 sta FACSIGN | |
001D32r 2 A5 13 lda CPRMASK | |
001D34r 2 20 rr rr jsr TAN1 | |
001D37r 2 A9 9B lda #TEMP3 | |
001D39r 2 A0 00 ldy #$00 | |
001D3Br 2 4C rr rr jmp FDIV | |
001D3Er 2 TAN1: | |
001D3Er 2 48 pha | |
001D3Fr 2 4C rr rr jmp SIN1 | |
001D42r 2 | |
001D42r 2 ; ---------------------------------------------------------------------------- | |
001D42r 2 .ifdef CONFIG_SMALL | |
001D42r 2 CON_PI_HALF: | |
001D42r 2 .byte $81,$49,$0F,$DB | |
001D42r 2 CON_PI_DOUB: | |
001D42r 2 .byte $83,$49,$0F,$DB | |
001D42r 2 QUARTER: | |
001D42r 2 .byte $7F,$00,$00,$00 | |
001D42r 2 POLY_SIN: | |
001D42r 2 .byte $04,$86,$1E,$D7,$FB,$87,$99,$26 | |
001D42r 2 .byte $65,$87,$23,$34,$58,$86,$A5,$5D | |
001D42r 2 .byte $E1,$83,$49,$0F,$DB | |
001D42r 2 .else | |
001D42r 2 CON_PI_HALF: | |
001D42r 2 81 49 0F DA .byte $81,$49,$0F,$DA,$A2 | |
001D46r 2 A2 | |
001D47r 2 CON_PI_DOUB: | |
001D47r 2 83 49 0F DA .byte $83,$49,$0F,$DA,$A2 | |
001D4Br 2 A2 | |
001D4Cr 2 QUARTER: | |
001D4Cr 2 7F 00 00 00 .byte $7F,$00,$00,$00,$00 | |
001D50r 2 00 | |
001D51r 2 POLY_SIN: | |
001D51r 2 05 84 E6 1A .byte $05,$84,$E6,$1A,$2D,$1B,$86,$28 | |
001D55r 2 2D 1B 86 28 | |
001D59r 2 07 FB F8 87 .byte $07,$FB,$F8,$87,$99,$68,$89,$01 | |
001D5Dr 2 99 68 89 01 | |
001D61r 2 87 23 35 DF .byte $87,$23,$35,$DF,$E1,$86,$A5,$5D | |
001D65r 2 E1 86 A5 5D | |
001D69r 2 E7 28 83 49 .byte $E7,$28,$83,$49,$0F,$DA,$A2 | |
001D6Dr 2 0F DA A2 | |
001D70r 2 .ifndef CONFIG_11 | |
001D70r 2 ; no easter egg text before BASIC 1.1 | |
001D70r 2 .elseif !.def(CONFIG_2A) | |
001D70r 2 ; ASCII encoded easter egg | |
001D70r 2 MICROSOFT: | |
001D70r 2 A6 D3 C1 C8 .byte $A6,$D3,$C1,$C8,$D4,$C8,$D5,$C4 | |
001D74r 2 D4 C8 D5 C4 | |
001D78r 2 CE CA .byte $CE,$CA | |
001D7Ar 2 .else | |
001D7Ar 2 ; PET encoded easter egg text since CBM2 | |
001D7Ar 2 MICROSOFT: | |
001D7Ar 2 .byte $A1,$54,$46,$8F,$13,$8F,$52,$43 | |
001D7Ar 2 .byte $89,$CD | |
001D7Ar 2 .endif | |
001D7Ar 2 .endif | |
001D7Ar 2 | |
001D7Ar 2 ; ---------------------------------------------------------------------------- | |
001D7Ar 2 ; "ATN" FUNCTION | |
001D7Ar 2 ; ---------------------------------------------------------------------------- | |
001D7Ar 2 ATN: | |
001D7Ar 2 A5 B3 lda FACSIGN | |
001D7Cr 2 48 pha | |
001D7Dr 2 10 03 bpl L3FDB | |
001D7Fr 2 20 rr rr jsr NEGOP | |
001D82r 2 L3FDB: | |
001D82r 2 A5 AE lda FAC | |
001D84r 2 48 pha | |
001D85r 2 C9 81 cmp #$81 | |
001D87r 2 90 07 bcc L3FE9 | |
001D89r 2 A9 rr lda #<CON_ONE | |
001D8Br 2 A0 rr ldy #>CON_ONE | |
001D8Dr 2 20 rr rr jsr FDIV | |
001D90r 2 ; ---------------------------------------------------------------------------- | |
001D90r 2 ; 0 <= X <= 1 | |
001D90r 2 ; 0 <= ATN(X) <= PI/8 | |
001D90r 2 ; ---------------------------------------------------------------------------- | |
001D90r 2 L3FE9: | |
001D90r 2 A9 rr lda #<POLY_ATN | |
001D92r 2 A0 rr ldy #>POLY_ATN | |
001D94r 2 20 rr rr jsr POLYNOMIAL_ODD | |
001D97r 2 68 pla | |
001D98r 2 C9 81 cmp #$81 | |
001D9Ar 2 90 07 bcc L3FFC | |
001D9Cr 2 A9 rr lda #<CON_PI_HALF | |
001D9Er 2 A0 rr ldy #>CON_PI_HALF | |
001DA0r 2 20 rr rr jsr FSUB | |
001DA3r 2 L3FFC: | |
001DA3r 2 68 pla | |
001DA4r 2 10 03 bpl L4002 | |
001DA6r 2 4C rr rr jmp NEGOP | |
001DA9r 2 L4002: | |
001DA9r 2 60 rts | |
001DAAr 2 | |
001DAAr 2 ; ---------------------------------------------------------------------------- | |
001DAAr 2 POLY_ATN: | |
001DAAr 2 .ifdef CONFIG_SMALL | |
001DAAr 2 .byte $08 | |
001DAAr 2 .byte $78,$3A,$C5,$37 | |
001DAAr 2 .byte $7B,$83,$A2,$5C | |
001DAAr 2 .byte $7C,$2E,$DD,$4D | |
001DAAr 2 .byte $7D,$99,$B0,$1E | |
001DAAr 2 .byte $7D,$59,$ED,$24 | |
001DAAr 2 .byte $7E,$91,$72,$00 | |
001DAAr 2 .byte $7E,$4C,$B9,$73 | |
001DAAr 2 .byte $7F,$AA,$AA,$53 | |
001DAAr 2 .byte $81,$00,$00,$00 | |
001DAAr 2 .else | |
001DAAr 2 0B .byte $0B | |
001DABr 2 76 B3 83 BD .byte $76,$B3,$83,$BD,$D3 | |
001DAFr 2 D3 | |
001DB0r 2 79 1E F4 A6 .byte $79,$1E,$F4,$A6,$F5 | |
001DB4r 2 F5 | |
001DB5r 2 7B 83 FC B0 .byte $7B,$83,$FC,$B0,$10 | |
001DB9r 2 10 | |
001DBAr 2 7C 0C 1F 67 .byte $7C,$0C,$1F,$67,$CA | |
001DBEr 2 CA | |
001DBFr 2 7C DE 53 CB .byte $7C,$DE,$53,$CB,$C1 | |
001DC3r 2 C1 | |
001DC4r 2 7D 14 64 70 .byte $7D,$14,$64,$70,$4C | |
001DC8r 2 4C | |
001DC9r 2 7D B7 EA 51 .byte $7D,$B7,$EA,$51,$7A | |
001DCDr 2 7A | |
001DCEr 2 7D 63 30 88 .byte $7D,$63,$30,$88,$7E | |
001DD2r 2 7E | |
001DD3r 2 7E 92 44 99 .byte $7E,$92,$44,$99,$3A | |
001DD7r 2 3A | |
001DD8r 2 7E 4C CC 91 .byte $7E,$4C,$CC,$91,$C7 | |
001DDCr 2 C7 | |
001DDDr 2 7F AA AA AA .byte $7F,$AA,$AA,$AA,$13 | |
001DE1r 2 13 | |
001DE2r 2 81 00 00 00 .byte $81,$00,$00,$00,$00 | |
001DE6r 2 00 | |
001DE7r 2 .endif | |
001DE7r 2 | |
001DE7r 2 .if .def(CONFIG_11A) && (!.def(CONFIG_2)) | |
001DE7r 2 00 .byte $00 ; XXX | |
001DE8r 2 .endif | |
001DE8r 2 | |
001DE8r 1 .include "init.s" | |
001DE8r 2 .segment "INIT" | |
000000r 2 | |
000000r 2 .ifdef KBD | |
000000r 2 FNDLIN2: | |
000000r 2 php | |
000000r 2 jmp FNDLIN | |
000000r 2 .endif | |
000000r 2 | |
000000r 2 ; ---------------------------------------------------------------------------- | |
000000r 2 PR_WRITTEN_BY: | |
000000r 2 .ifndef KBD | |
000000r 2 .ifndef CONFIG_CBM_ALL | |
000000r 2 A9 rr lda #<QT_WRITTEN_BY | |
000002r 2 A0 rr ldy #>QT_WRITTEN_BY | |
000004r 2 20 rr rr jsr STROUT | |
000007r 2 .endif | |
000007r 2 .endif | |
000007r 2 COLD_START: | |
000007r 2 .ifdef KBD | |
000007r 2 lda #<LFD81 | |
000007r 2 sta $03A0 | |
000007r 2 lda #>LFD81 | |
000007r 2 sta $03A1 | |
000007r 2 lda #$20 | |
000007r 2 sta $0480 | |
000007r 2 lda $0352 | |
000007r 2 sta $04 | |
000007r 2 lda $0353 | |
000007r 2 sta $05 | |
000007r 2 .else | |
000007r 2 .ifndef CBM2 | |
000007r 2 A2 FF ldx #$FF | |
000009r 2 86 87 stx CURLIN+1 | |
00000Br 2 .endif | |
00000Br 2 .ifdef CONFIG_NO_INPUTBUFFER_ZP | |
00000Br 2 ldx #$FB | |
00000Br 2 .endif | |
00000Br 2 9A txs | |
00000Cr 2 .ifndef CONFIG_CBM_ALL | |
00000Cr 2 A9 rr lda #<COLD_START | |
00000Er 2 A0 rr ldy #>COLD_START | |
000010r 2 85 01 sta GORESTART+1 | |
000012r 2 84 02 sty GORESTART+2 | |
000014r 2 85 04 sta GOSTROUT+1 | |
000016r 2 84 05 sty GOSTROUT+2 | |
000018r 2 A9 rr lda #<AYINT | |
00001Ar 2 A0 rr ldy #>AYINT | |
00001Cr 2 85 06 sta GOAYINT | |
00001Er 2 84 07 sty GOAYINT+1 | |
000020r 2 A9 rr lda #<GIVAYF | |
000022r 2 A0 rr ldy #>GIVAYF | |
000024r 2 85 08 sta GOGIVEAYF | |
000026r 2 84 09 sty GOGIVEAYF+1 | |
000028r 2 .endif | |
000028r 2 A9 4C lda #$4C | |
00002Ar 2 .ifdef CONFIG_CBM_ALL | |
00002Ar 2 sta JMPADRS | |
00002Ar 2 .endif | |
00002Ar 2 85 00 sta GORESTART | |
00002Cr 2 .ifndef CONFIG_CBM_ALL | |
00002Cr 2 85 03 sta GOSTROUT | |
00002Er 2 85 A1 sta JMPADRS | |
000030r 2 .endif | |
000030r 2 .if (!.def(CONFIG_RAM)) && (!.def(CONFIG_CBM_ALL)) | |
000030r 2 sta USR | |
000030r 2 .endif | |
000030r 2 | |
000030r 2 .ifndef CONFIG_RAM | |
000030r 2 .ifdef APPLE | |
000030r 2 lda #<USR_FUNC | |
000030r 2 ldy #>USR_FUNC | |
000030r 2 .else | |
000030r 2 lda #<IQERR | |
000030r 2 ldy #>IQERR | |
000030r 2 .endif | |
000030r 2 sta USR+1 | |
000030r 2 sty USR+2 | |
000030r 2 .endif | |
000030r 2 .ifndef CBM1 | |
000030r 2 A9 48 lda #WIDTH | |
000032r 2 85 17 sta Z17 | |
000034r 2 A9 38 lda #WIDTH2 | |
000036r 2 85 18 sta Z18 | |
000038r 2 .endif | |
000038r 2 .endif ;/* KBD */ | |
000038r 2 | |
000038r 2 ; All non-CONFIG_SMALL versions of BASIC have | |
000038r 2 ; the same bug here: While the number of bytes | |
000038r 2 ; to be copied is correct for CONFIG_SMALL, | |
000038r 2 ; it is one byte short on non-CONFIG_SMALL: | |
000038r 2 ; It seems the "ldx" value below has been | |
000038r 2 ; hardcoded. So on these configurations, | |
000038r 2 ; the last byte of GENERIC_RNDSEED, which | |
000038r 2 ; is 5 bytes instead of 4, does not get copied - | |
000038r 2 ; which is nothing major, because it is just | |
000038r 2 ; the least significant 8 bits of the mantissa | |
000038r 2 ; of the random number seed. | |
000038r 2 ; KBD added three bytes to CHRGET and removed | |
000038r 2 ; the random number seed, but only adjusted | |
000038r 2 ; the number of bytes by adding 3 - this | |
000038r 2 ; copies four bytes too many, which is no | |
000038r 2 ; problem. | |
000038r 2 .ifdef CONFIG_SMALL | |
000038r 2 .ifdef KBD | |
000038r 2 ldx #GENERIC_CHRGET_END-GENERIC_CHRGET+4 | |
000038r 2 .else | |
000038r 2 ldx #GENERIC_CHRGET_END-GENERIC_CHRGET | |
000038r 2 .endif | |
000038r 2 .else | |
000038r 2 A2 1C ldx #GENERIC_CHRGET_END-GENERIC_CHRGET-1 ; XXX | |
00003Ar 2 .endif | |
00003Ar 2 L4098: | |
00003Ar 2 BD rr rr lda GENERIC_CHRGET-1,x | |
00003Dr 2 95 BF sta CHRGET-1,x | |
00003Fr 2 CA dex | |
000040r 2 D0 F8 bne L4098 | |
000042r 2 .ifdef CONFIG_2 | |
000042r 2 lda #$03 | |
000042r 2 sta DSCLEN | |
000042r 2 .endif | |
000042r 2 .ifndef KBD | |
000042r 2 8A txa | |
000043r 2 85 B5 sta SHIFTSIGNEXT | |
000045r 2 .ifdef CONFIG_CBM_ALL | |
000045r 2 sta CURDVC | |
000045r 2 .endif | |
000045r 2 85 65 sta LASTPT+1 | |
000047r 2 .if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS) | |
000047r 2 85 15 sta Z15 | |
000049r 2 .endif | |
000049r 2 .ifndef CONFIG_11 | |
000049r 2 sta POSX | |
000049r 2 .endif | |
000049r 2 48 pha | |
00004Ar 2 85 14 sta Z14 | |
00004Cr 2 .ifndef CBM2 | |
00004Cr 2 .ifndef MICROTAN | |
00004Cr 2 A9 03 lda #$03 | |
00004Er 2 85 A0 sta DSCLEN | |
000050r 2 .endif | |
000050r 2 .ifndef CONFIG_11 | |
000050r 2 lda #$2C | |
000050r 2 sta LINNUM+1 | |
000050r 2 .endif | |
000050r 2 20 rr rr jsr CRDO | |
000053r 2 .endif | |
000053r 2 .ifdef CBM2 | |
000053r 2 inx | |
000053r 2 stx INPUTBUFFER-3 | |
000053r 2 stx INPUTBUFFER-4 | |
000053r 2 .endif | |
000053r 2 .ifdef APPLE | |
000053r 2 lda #$01 | |
000053r 2 sta INPUTBUFFER-3 | |
000053r 2 sta INPUTBUFFER-4 | |
000053r 2 .endif | |
000053r 2 A2 66 ldx #TEMPST | |
000055r 2 86 63 stx TEMPPT | |
000057r 2 .ifndef CONFIG_CBM_ALL | |
000057r 2 A9 rr lda #<QT_MEMORY_SIZE | |
000059r 2 A0 rr ldy #>QT_MEMORY_SIZE | |
00005Br 2 20 rr rr jsr STROUT | |
00005Er 2 .ifdef APPLE | |
00005Er 2 jsr INLINX | |
00005Er 2 .else | |
00005Er 2 20 rr rr jsr NXIN | |
000061r 2 .endif | |
000061r 2 86 C7 stx TXTPTR | |
000063r 2 84 C8 sty TXTPTR+1 | |
000065r 2 20 C0 00 jsr CHRGET | |
000068r 2 C9 41 cmp #$41 | |
00006Ar 2 F0 94 beq PR_WRITTEN_BY | |
00006Cr 2 A8 tay | |
00006Dr 2 D0 21 bne L40EE | |
00006Fr 2 .endif | |
00006Fr 2 .ifndef CBM2 | |
00006Fr 2 A9 rr lda #<RAMSTART2 | |
000071r 2 .endif | |
000071r 2 A0 rr ldy #>RAMSTART2 | |
000073r 2 .ifdef CONFIG_2 | |
000073r 2 sta TXTTAB | |
000073r 2 sty TXTTAB+1 | |
000073r 2 .endif | |
000073r 2 85 19 sta LINNUM | |
000075r 2 84 1A sty LINNUM+1 | |
000077r 2 .ifdef CBM2 | |
000077r 2 tay | |
000077r 2 .else | |
000077r 2 A0 00 ldy #$00 | |
000079r 2 .endif | |
000079r 2 L40D7: | |
000079r 2 E6 19 inc LINNUM | |
00007Br 2 D0 02 bne L40DD | |
00007Dr 2 E6 1A inc LINNUM+1 | |
00007Fr 2 .ifdef CBM1 | |
00007Fr 2 ; CBM: hard RAM top limit is $8000 | |
00007Fr 2 lda LINNUM+1 | |
00007Fr 2 cmp #$80 | |
00007Fr 2 beq L40FA | |
00007Fr 2 .endif | |
00007Fr 2 .ifdef CBM2 | |
00007Fr 2 ; optimized version of the CBM1 code | |
00007Fr 2 bmi L40FA | |
00007Fr 2 .endif | |
00007Fr 2 L40DD: | |
00007Fr 2 .ifdef CONFIG_2 | |
00007Fr 2 lda #$55 ; 01010101 / 10101010 | |
00007Fr 2 .else | |
00007Fr 2 A9 92 lda #$92 ; 10010010 / 00100100 | |
000081r 2 .endif | |
000081r 2 91 19 sta (LINNUM),y | |
000083r 2 D1 19 cmp (LINNUM),y | |
000085r 2 D0 15 bne L40FA | |
000087r 2 0A asl a | |
000088r 2 91 19 sta (LINNUM),y | |
00008Ar 2 D1 19 cmp (LINNUM),y | |
00008Cr 2 .ifdef CONFIG_CBM_ALL | |
00008Cr 2 beq L40D7 | |
00008Cr 2 .else | |
00008Cr 2 .ifndef CONFIG_11 | |
00008Cr 2 beq L40D7; old: faster | |
00008Cr 2 bne L40FA | |
00008Cr 2 .else | |
00008Cr 2 D0 0E bne L40FA; new: slower | |
00008Er 2 F0 E9 beq L40D7 | |
000090r 2 .endif | |
000090r 2 L40EE: | |
000090r 2 20 C6 00 jsr CHRGOT | |
000093r 2 20 rr rr jsr LINGET | |
000096r 2 A8 tay | |
000097r 2 F0 03 beq L40FA | |
000099r 2 4C rr rr jmp SYNERR | |
00009Cr 2 .endif | |
00009Cr 2 L40FA: | |
00009Cr 2 A5 19 lda LINNUM | |
00009Er 2 A4 1A ldy LINNUM+1 | |
0000A0r 2 85 84 sta MEMSIZ | |
0000A2r 2 84 85 sty MEMSIZ+1 | |
0000A4r 2 .ifndef MICROTAN | |
0000A4r 2 85 80 sta FRETOP | |
0000A6r 2 84 81 sty FRETOP+1 | |
0000A8r 2 .endif | |
0000A8r 2 L4106: | |
0000A8r 2 .ifndef CONFIG_CBM_ALL | |
0000A8r 2 .ifdef APPLE | |
0000A8r 2 lda #$FF | |
0000A8r 2 jmp L2829 | |
0000A8r 2 .word STROUT ; PATCH! | |
0000A8r 2 jsr NXIN | |
0000A8r 2 .else | |
0000A8r 2 A9 rr lda #<QT_TERMINAL_WIDTH | |
0000AAr 2 A0 rr ldy #>QT_TERMINAL_WIDTH | |
0000ACr 2 20 rr rr jsr STROUT | |
0000AFr 2 20 rr rr jsr NXIN | |
0000B2r 2 .endif | |
0000B2r 2 86 C7 stx TXTPTR | |
0000B4r 2 84 C8 sty TXTPTR+1 | |
0000B6r 2 20 C0 00 jsr CHRGET | |
0000B9r 2 A8 tay | |
0000BAr 2 F0 1C beq L4136 | |
0000BCr 2 20 rr rr jsr LINGET | |
0000BFr 2 A5 1A lda LINNUM+1 | |
0000C1r 2 D0 E5 bne L4106 | |
0000C3r 2 A5 19 lda LINNUM | |
0000C5r 2 C9 10 cmp #$10 | |
0000C7r 2 90 DF bcc L4106 | |
0000C9r 2 L2829: | |
0000C9r 2 85 17 sta Z17 | |
0000CBr 2 L4129: | |
0000CBr 2 E9 0E sbc #$0E | |
0000CDr 2 B0 FC bcs L4129 | |
0000CFr 2 49 FF eor #$FF | |
0000D1r 2 E9 0C sbc #$0C | |
0000D3r 2 18 clc | |
0000D4r 2 65 17 adc Z17 | |
0000D6r 2 85 18 sta Z18 | |
0000D8r 2 .endif | |
0000D8r 2 L4136: | |
0000D8r 2 .ifdef CONFIG_RAM | |
0000D8r 2 A9 rr lda #<QT_WANT | |
0000DAr 2 A0 rr ldy #>QT_WANT | |
0000DCr 2 20 rr rr jsr STROUT | |
0000DFr 2 20 rr rr jsr NXIN | |
0000E2r 2 86 C7 stx TXTPTR | |
0000E4r 2 84 C8 sty TXTPTR+1 | |
0000E6r 2 20 C0 00 jsr CHRGET | |
0000E9r 2 A2 rr ldx #<RAMSTART1 | |
0000EBr 2 A0 rr ldy #>RAMSTART1 | |
0000EDr 2 C9 59 cmp #'Y' | |
0000EFr 2 F0 34 beq L4183 | |
0000F1r 2 C9 41 cmp #'A' | |
0000F3r 2 F0 04 beq L4157 | |
0000F5r 2 C9 4E cmp #'N' | |
0000F7r 2 D0 DF bne L4136 | |
0000F9r 2 L4157: | |
0000F9r 2 A2 rr ldx #<IQERR | |
0000FBr 2 A0 rr ldy #>IQERR | |
0000FDr 2 8E rr rr stx UNFNC_ATN | |
000100r 2 8C rr rr sty UNFNC_ATN+1 | |
000103r 2 A2 rr ldx #<ATN ; overwrite starting | |
000105r 2 A0 rr ldy #>ATN ; with ATN | |
000107r 2 C9 41 cmp #'A' | |
000109r 2 F0 1A beq L4183 | |
00010Br 2 A2 rr ldx #<IQERR | |
00010Dr 2 A0 rr ldy #>IQERR | |
00010Fr 2 8E rr rr stx UNFNC_COS | |
000112r 2 8C rr rr sty UNFNC_COS+1 | |
000115r 2 8E rr rr stx UNFNC_TAN | |
000118r 2 8C rr rr sty UNFNC_TAN+1 | |
00011Br 2 8E rr rr stx UNFNC_SIN | |
00011Er 2 8C rr rr sty UNFNC_SIN+1 | |
000121r 2 A2 rr ldx #<SIN_COS_TAN_ATN ; overwrite | |
000123r 2 A0 rr ldy #>SIN_COS_TAN_ATN ; all of trig.s | |
000125r 2 L4183: | |
000125r 2 .else | |
000125r 2 ldx #<RAMSTART2 | |
000125r 2 ldy #>RAMSTART2 | |
000125r 2 .endif | |
000125r 2 86 78 stx TXTTAB | |
000127r 2 84 79 sty TXTTAB+1 | |
000129r 2 A0 00 ldy #$00 | |
00012Br 2 98 tya | |
00012Cr 2 91 78 sta (TXTTAB),y | |
00012Er 2 E6 78 inc TXTTAB | |
000130r 2 .ifndef CBM2 | |
000130r 2 D0 02 bne L4192 | |
000132r 2 E6 79 inc TXTTAB+1 | |
000134r 2 L4192: | |
000134r 2 .endif | |
000134r 2 .if CONFIG_SCRTCH_ORDER = 1 | |
000134r 2 jsr SCRTCH | |
000134r 2 .endif | |
000134r 2 A5 78 lda TXTTAB | |
000136r 2 A4 79 ldy TXTTAB+1 | |
000138r 2 20 rr rr jsr REASON | |
00013Br 2 .ifdef CBM2 | |
00013Br 2 lda #<QT_BASIC | |
00013Br 2 ldy #>QT_BASIC | |
00013Br 2 jsr STROUT | |
00013Br 2 .else | |
00013Br 2 20 rr rr jsr CRDO | |
00013Er 2 .endif | |
00013Er 2 A5 84 lda MEMSIZ | |
000140r 2 38 sec | |
000141r 2 E5 78 sbc TXTTAB | |
000143r 2 AA tax | |
000144r 2 A5 85 lda MEMSIZ+1 | |
000146r 2 E5 79 sbc TXTTAB+1 | |
000148r 2 20 rr rr jsr LINPRT | |
00014Br 2 A9 rr lda #<QT_BYTES_FREE | |
00014Dr 2 A0 rr ldy #>QT_BYTES_FREE | |
00014Fr 2 20 rr rr jsr STROUT | |
000152r 2 .if CONFIG_SCRTCH_ORDER = 2 | |
000152r 2 20 rr rr jsr SCRTCH | |
000155r 2 .endif | |
000155r 2 .ifdef CONFIG_CBM_ALL | |
000155r 2 jmp RESTART | |
000155r 2 .else | |
000155r 2 A9 rr lda #<STROUT | |
000157r 2 A0 rr ldy #>STROUT | |
000159r 2 85 04 sta GOSTROUT+1 | |
00015Br 2 84 05 sty GOSTROUT+2 | |
00015Dr 2 .if CONFIG_SCRTCH_ORDER = 3 | |
00015Dr 2 jsr SCRTCH | |
00015Dr 2 .endif | |
00015Dr 2 A9 rr lda #<RESTART | |
00015Fr 2 A0 rr ldy #>RESTART | |
000161r 2 85 01 sta GORESTART+1 | |
000163r 2 84 02 sty GORESTART+2 | |
000165r 2 6C 01 00 jmp (GORESTART+1) | |
000168r 2 .endif | |
000168r 2 | |
000168r 2 .if .def(CONFIG_RAM) || .def(OSI) | |
000168r 2 ; OSI is compiled for ROM, but includes | |
000168r 2 ; this unused string | |
000168r 2 QT_WANT: | |
000168r 2 57 41 4E 54 .byte "WANT SIN-COS-TAN-ATN" | |
00016Cr 2 20 53 49 4E | |
000170r 2 2D 43 4F 53 | |
00017Cr 2 00 .byte 0 | |
00017Dr 2 .endif | |
00017Dr 2 QT_WRITTEN_BY: | |
00017Dr 2 .ifndef CONFIG_CBM_ALL | |
00017Dr 2 .ifdef APPLE | |
00017Dr 2 asc80 "COPYRIGHT 1977 BY MICROSOFT CO" | |
00017Dr 2 .byte CR,0 | |
00017Dr 2 .else | |
00017Dr 2 0D 0A 0C .byte CR,LF,$0C ; FORM FEED | |
000180r 2 .ifndef CONFIG_11 | |
000180r 2 .byte "WRITTEN BY RICHARD W. WEILAND." | |
000180r 2 .else | |
000180r 2 57 52 49 54 .byte "WRITTEN BY WEILAND & GATES" | |
000184r 2 54 45 4E 20 | |
000188r 2 42 59 20 57 | |
00019Ar 2 .endif | |
00019Ar 2 0D 0A 00 .byte CR,LF,0 | |
00019Dr 2 .endif | |
00019Dr 2 QT_MEMORY_SIZE: | |
00019Dr 2 4D 45 4D 4F .byte "MEMORY SIZE" | |
0001A1r 2 52 59 20 53 | |
0001A5r 2 49 5A 45 | |
0001A8r 2 00 .byte 0 | |
0001A9r 2 QT_TERMINAL_WIDTH: | |
0001A9r 2 54 45 52 4D .byte "TERMINAL WIDTH" | |
0001ADr 2 49 4E 41 4C | |
0001B1r 2 20 57 49 44 | |
0001B7r 2 00 .byte 0 | |
0001B8r 2 .endif | |
0001B8r 2 QT_BYTES_FREE: | |
0001B8r 2 20 42 59 54 .byte " BYTES FREE" | |
0001BCr 2 45 53 20 46 | |
0001C0r 2 52 45 45 | |
0001C3r 2 .ifdef CBM1 | |
0001C3r 2 .elseif .def(CBM2) | |
0001C3r 2 .byte CR,0 | |
0001C3r 2 .elseif .def(APPLE) | |
0001C3r 2 .byte 0 | |
0001C3r 2 .else | |
0001C3r 2 0D 0A 0D 0A .byte CR,LF,CR,LF | |
0001C7r 2 .endif | |
0001C7r 2 QT_BASIC: | |
0001C7r 2 .ifdef OSI | |
0001C7r 2 .byte "OSI 6502 BASIC VERSION 1.0 REV 3.2" | |
0001C7r 2 .endif | |
0001C7r 2 .ifdef KIM | |
0001C7r 2 4D 4F 53 20 .byte "MOS TECH 6502 BASIC V1.1" | |
0001CBr 2 54 45 43 48 | |
0001CFr 2 20 36 35 30 | |
0001DFr 2 .endif | |
0001DFr 2 .ifdef MICROTAN | |
0001DFr 2 .byte "MICROTAN BASIC" | |
0001DFr 2 .endif | |
0001DFr 2 .ifdef CBM1 | |
0001DFr 2 .byte $13 ; HOME | |
0001DFr 2 .byte "*** COMMODORE BASIC ***" | |
0001DFr 2 .byte $11,$11,$11,0 ; DOWN/DOWN/DOWN | |
0001DFr 2 .endif | |
0001DFr 2 .ifdef CBM2 | |
0001DFr 2 .byte "### COMMODORE BASIC ###" | |
0001DFr 2 .byte CR,CR,0 | |
0001DFr 2 .endif | |
0001DFr 2 .ifdef APPLE | |
0001DFr 2 .byte LF,CR,LF | |
0001DFr 2 .byte "APPLE BASIC V1.1" | |
0001DFr 2 .endif | |
0001DFr 2 .ifndef CONFIG_CBM_ALL | |
0001DFr 2 0D 0A .byte CR,LF | |
0001E1r 2 .ifdef MICROTAN | |
0001E1r 2 .byte "(C) 1980 MICROSOFT" | |
0001E1r 2 .else | |
0001E1r 2 43 4F 50 59 .byte "COPYRIGHT 1977 BY MICROSOFT CO." | |
0001E5r 2 52 49 47 48 | |
0001E9r 2 54 20 31 39 | |
000200r 2 .endif | |
000200r 2 0D 0A 00 .byte CR,LF,0 | |
000203r 2 .endif | |
000203r 2 .endif ; /* KBD */ | |
000203r 2 | |
000203r 1 .include "extra.s" | |
000203r 2 .segment "EXTRA" | |
000000r 2 | |
000000r 2 .ifdef KIM | |
000000r 2 .include "kim_extra.s" | |
000000r 3 .segment "EXTRA" | |
000000r 3 | |
000000r 3 RAMSTART2: | |
000000r 3 08 29 25 20 .byte $08,$29,$25,$20,$60,$2A,$E5,$E4 | |
000004r 3 60 2A E5 E4 | |
000008r 3 20 66 24 65 .byte $20,$66,$24,$65,$AC,$04,$A4 | |
00000Cr 3 AC 04 A4 | |
00000Fr 3 | |
00000Fr 2 .endif | |
00000Fr 2 | |
00000Fr 2 .ifdef CONFIG_CBM1_PATCHES | |
00000Fr 2 .include "cbm1_patches.s" | |
00000Fr 2 .endif | |
00000Fr 2 | |
00000Fr 2 .ifdef KBD | |
00000Fr 2 .include "kbd_extra.s" | |
00000Fr 2 .endif | |
00000Fr 2 | |
00000Fr 2 .ifdef APPLE | |
00000Fr 2 .include "apple_extra.s" | |
00000Fr 2 .endif | |
00000Fr 2 | |
00000Fr 2 .ifdef MICROTAN | |
00000Fr 2 .include "microtan_extra.s" | |
00000Fr 2 .endif | |
00000Fr 2 | |
00000Fr 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment