FetchNumLine: 4AFBh: Gets BC bytes from parser (basic_pc). Keep (basic_end) out of the way. Stores BC bytes to HL-1. Preserves BC and HL. Returns when delimiter (anything not '0'-'9') is found. (basic_pc) points to delimiter. ERR:SYNTAX if BC too small. DispCoords: 513Ah: Displays two coordinates at bottom of the graph screen. A: character of variable for first coordinate. HL: pointer to first floating point coordinate. 8B5Ah: second floating point coordinate. Destroys all including OP1. 'p' is always second variable. Handles vertical and horizontal splitting. Rounds numbers to 4 decimal places. Displays up to 9 digits. ParamYEquToOP1: 531Ah: Sets OP1 to the specified Y part of a parametric equation. A is zero-based index. Ex. A=1: OP1-> 03h,5Eh,23h,0 ParamXEquToOP1: 5317h: Sets OP1 to the specified X part of a parametric equation. A is zero-based index. Ex. A=1: OP1-> 03h,5Eh,22h,0 CmpSymsNoCase: 52F3h: Same as _CmpSyms, compares two symbol table names, only it's case-insensitive. Used with apps. DE: end of first name. HL: end of second name. B: length of both names. Output appears to be carry set if problems, which makes no sense. C is definitely non-zero if problems. (what was I thinking? check this) GetVarCBL82: 50F5h: Requests a variable from either a CBL or TI-82 through silent linking. 0,(iy+1Bh) set for USB, reset for I/O OP1 is name and type of variable to request. If type is list, request is from CBL. Anything else, TI-82. AppGetCalcUSB: 50F8h: Same as 50F5h, only it gets it twice, once with GetVarCmdUSB settings of your choice and again with 50F5h. JForceCmdNoChar2: 4C8Ah: 4C9Fh: Just "jp _JForceCmdNoChar", on OS 2.41 at least. 4C06h: Initializes a context and sets callback 3. Also installs a rawkey hook. Clears callback 2. Backs up previous context. Inputs: HL is callback 3 address, A is page. 4C2Ah: Clears callback 2. Resets 6,(iy+2Dh). 4C18h: Resets 5,(iy+2Dh). 4C27h: Sets callback 2. Inputs: HL is callback 2 address, A is page. Sets 6,(iy+2Dh). 4C24h: Calls callback 2 only if 6,(iy+2Dh) is set. 4C0Fh: Gets address of floating-point number in appData. Inputs: A is number, zero-indexed. Outputs: HL is address. 4C09h: Gets floating-point number in appData to OP1. Inputs: A is number, zero-indexed. 4C0Ch: Stores floating-point number in OP1 to appData. Inputs: OP1 is number, A is zero-indexed spot in appData. 4C2Dh: Copies number from one spot to another in appData. Inputs: B is zero-indexed source, C is zero-indexed desination. OP1 destroyed. 4C12h: Makes sure that both OP1 and OP3 are greater than or equal to OP2. IsContextKey: 4C5Dh: Compares A against the following keys/contexts: 30h kSPlot kZoom kDraw kDraw kAppsMenu kPrgm kMem kGraph kTblSet kFormat kMode kWindow kTable kYequ kCalc kSolveTVM kLinkIO kMatrixEd 5Ah 4DEFh: Calls the "cell override", whatever that is. Otherwise known as callback 4. Only if 1,(iy+2Bh) set. _setcelloverride (already documented): 4D7Ah: Sets callback 4, or the "cell override." Sets 1,(iy+2Bh). ConvFCKeyToTok: 4A05h: Converts 0FCh extended key to token. Inputs: A is extended part of key. Outputs: DE is token. Destroys DE, HL. ConvFEKeyToTok: 4A08h: Converts 0FEh extended key to token. Inputs: A is extended part of key. Outputs: DE is token. Destroys DE, HL. RstrpartialWin: 4D6Bh: Restores some display areas of memory and flags. Inputs: textShadCur (goes to curRow), textShadAplh (goes to shiftFlags), textShadIns (goes to textFlags, partly). This is the same as _rstrpartial except it doesn't reset winTop and winBtm. CplxFrac: 4EC1h: Gets the fractional part of each part of a complex number in OP1/OP2. OP1/OP2 is then the new number. CplxFloor: 4EC4h: Floors both the real and imaginary parts of a complex number in OP1/OP2 and adds them together. OP1/OP2 is then the new number. Destroys OP4. CplxTrunc: 4EBEh: Truncates both the real and imaginary parts of a complex number in OP1/OP2 and adds them together. OP1/OP2 is then the new number. Destroys OP3. CplxMult: 4EB8h: Multiples both the real and imaginary parts of a complex number in OP1/OP2 by the number in OP3, then adds the real and imaginary parts together. OP1/OP2 is then the new number. CplxDiv: 4EBBh: Divides both the real and imaginary parts of a complex number in OP1/OP2 by the number in OP3, then adds the real and imaginary parts together. OP1/OP2 is then the new number. InvertNonReal: 4EB5h: Inverts the imaginary part of the complex number in OP1/OP2. Just calls InvOP2S and changes OP1/OP2 type bytes to be complex. AddSquares: 4E9Ah: Computes the square of both OP1 and OP2, then adds them together. OP1 is new number. Destroys OP4. CPOP1OP2Rounded: 5197h: Rounds OP1 and OP2 to the current fix setting, then compares to see which is greater. OP1 is set to 1 if OP1 is greater than OP2, set to 0 otherwise. An odd routine. CPOP1OP2Rounded2: 519Ah: Rounds OP1 and OP2 to the current fix setting, then compares to see which is greater. OP1 is set to 1 if OP1 is less than or equal to OP2, set to 0 otherwise. An odd variation on an odd routine. ExecClass3Token: 50DAh: Executes the "class 3" (from the parser hook) function associated with a BASIC token. Inputs: A is the token. (49 entries in the exec table for this) GetCatalogItem: 5056h: Retrieves the keypress associated with the item pointed to by (CatalogCurrent). B = keypress C = extended key code (0FBh, 0FCh, 0FEh, 0FFh) A = extended key code (0FBh, 0FCh, 0FEh, 0FFh) RestorePenCol: 4CB7h: Restores (penCol) from memory. 817Bh: 8-bit value to restore. Worthless. ProcessBufKeys: 4756h: Processes default keys while in an edit buffer. This processes things like kLeft, kRight, kBOL, kEOL, kIns, kDel, and possibly others. A and (keyExtend) might be the input. GetCurModeCellFlag: 4E19h: No idea what this does, but the name is probably right. AppSetupMouseMem: 4D56h: Sets up memory for AppUpdateMouse/AppEraseMouse. Turns off cursor, run indicator, sets up mouse coordinates at 986Dh, and copies 26-byte sprite data to ramCode. AppDispMouse: 4D50h: Displays the mouse at the current coordinates. 986Dh: current mouse coordinates. Probably shouldn't modify this directly. AppMouseGetKey: 4D4Dh: Gets a mouse keypress and adjusts mouse coordinates appropriately. Returns 0Ch if enter pressed, 0Ah if arrow key pressed. HL is new coordinates. AppMouseForceKey: 4E55h: Forces a mouse keypress and adjusts memory appropriately. A is scan code. Pass this an invalid value and it will wait until a real key is pressed. Same outputs as 4D4Dh. AppDispPrevMouse: 4D68h: Displays the mouse based on the previous keypress. 7,(iy+2Ch) is some sort of flag. Bits 5 and 6 may be, too... RclExit: 50C2h: cleans up memory after returning from Rcl context in an edit buffer. Inputs: None. Outputs: Lots. res 1,(iy+promptFlags) res 5,(iy+1Eh) res curLock,(iy+curFlags) Clears bottom row of LCD. Restores insert mode setting from (promptIns). Restores shift settings. Restores (curRow) from (promptRow). Restores edit pointers from prompt pointers. Restores previous context vectors. Calls cxSizeWind handler. SendUSBData: 50F2h: Sends data through USB port to supported device. Inputs: DE is number of bytes to send. HL is address of data to send (RAM pages 3/2 are swapped in for this). Outputs: C if problems. Calculator must already be initialized, and works as either host or peripheral. If peripheral, the other device will receive data in callback. VDispRealOP1: 52D5h: Displays REAL variable in OP1 at current penRow/penCol coordinates. Rounds to number of digits in MODE screen. DispXEqualsNum: 52D8h: Displays "X=" in lower-left corner and optionally the value of X. Input: set 6,(iy+03h) to cancel displaying the value of X. Output: "X=" and maybe number displayed. InitializeVariables: 52DEh: Initializes memory by recreating and resetting default variables to their initial state. Recreates L1-L6. Clears graph styles for all modes. Recreates all Y equations. Stores zero to Ans. Clears the last entry list. Re-initializes the random seed. PTTReset: 5323h: Performs a "soft-reset" by recreating L1-L6, equations, and other variables while deleting all non-program/appvar variables. Input: (867Dh) and (867Fh) should be zero to keep appvars, 2 to (867Dh) and 0 to (867Fh) to delete them. B: bit 0 set for degree mode, reset for radian. B: bit 1 set for stat diagnostics on, reset for off. Closes open edit buffer and resets top of hardware stack, does return. Does not touch applications. Used by Press-to-Test. TenX2: 5101h: Raises 10 to the OP1 power. For example, if OP1 was 3, this does 10^3 and stores it in OP1. This is identical to _TenX except it doesn't do this: xor a ld (OP1+9),a ld (OP2+9),a ld (OP3+9),a ld (OP4+9),a I have no idea how this is significant. ZeroFinanceVars: 512Bh: Zeroes out a lot of the statistics variables. No inputs or outputs. iy+1Ch is zeroed out. Variables from 8C4Dh to 8D0Dh affected. I don't quite get all that it does, but it's clear that it resets statistics variables. ForceSmallEditReturn: 4CC0h: 4CE4h: Forces the small edit routines to return to the point after _StartSmallEdit was called. This is used in a keyhook or something where you get control before _StartSmallEdit has finished and you want to abort immediately. Destroys A and HL. GetDispRowOffset: 4D59h: Gets offset into display buffer (like plotSScreen) for a specified row. A is row (0 to 63). HL becomes offset (A*12). Destroys DE. Useless. AppDrawMouse: 4DC2h: set 2,(iy+2Ch) for AppEraseMouse, reset for AppDispMouse. Assume destroys all. Useless. AppStartMouseNoSetup: 4D4Ah: Starts the mouse routine, but doesn't set up memory (this is good for resuming from a previous location). No inputs or outputs, behaves the same as AppStartMouse. AppSetupMouseMemCoords: 4E58h: This is AppSetupMouseMem with the cursor coordinates at HL. Destroys all. AppDrawMouseDirect: 4DC5h: Displays or erases mouse (res or set 2,(iy+2Ch), respectively) at current LCD column. A = LCD column. Destroys all. AppUpdateMouseRow: 4DBFh: set 5,(iy+2Ch) to decrease LCD row, set 6,(iy+2Ch) to increase LCD row. Extremely low-level. AppUpdateMouseXY: 4DCEh: Updates mouse coordinates to reflect recent keypress. set 4,(iy+2Dh) to display mouse afterward. AppUpdateMouseCoords: 4DA4h: Updates mouse coordinates completely to reflect recent keypress. set 5,(iy+2Ch) to decrease LCD row, set 6,(iy+2Ch) to increase LCD row. set 4,(iy+2Dh) to display mouse afterward. AppMouseGetKey: 4D4Dh: Waits for keypress and updates mouse memory accordingly. Will not return until arrow key or enter is pressed. Call AppUpdateMouseCoords or something after this. AppMouseForceKey: 4E55h: Same as AppMouseGetKey only you pass the scancode of the key to be "pressed" in A. If you pass it something weird, it waits until a good one is pressed. AppDispMouse: 4D50h: Displays mouse using current stored screen coordinates. AppDispPrevMouse: 4D68h: Updates mouse coordinates to reflect last keypress and displays it. Subroutine of AppUpdateMouse. VEraseEOL: 4CCFh: Clears to the end of the line in the small font. Input is (SmallEditColumnRight). Destroys nothing. ResetGraphSettings: 52DBh: Resets settings related to graphing and number modes. No inputs or outputs, destroys all. Turns off stat diagnostics, deselects all equations, sets the graph to dirty, resets graph styles, split screen settings, and puts it in REAL, radians mode. _GRPUTAWAYFull: 5305h: Puts away the graph screen (closing the edit buffer, etc.). Assume destroys all, same as _GRPUTAWAY except it assumes screen is not split. BackUpGraphSettings: 45E8h: Backs up graph settings and flags to memory. iy+appFlags -> 85E3h iy+0Ch -> 85E4h (curGStyle) -> 85E5h iy+graphFlags -> 85E6h Destroys A. GetMenuKeypress: 5053h: Gets the keypress associated with a menu item. B is menu ID, A is item number (zero-indexed), (menuCurrent) is menu ID, (menuCurrent+1) is current menu header (zero-indexed) Returns keypress in A and (keyExtend) if necessary. LoadMenu: 507Dh: Loads a menu into memory. B = menuCurrent value to load. B_CALL Mon after this or just return. Calls _BLINKGCUR for some dumb reason. Sets 5,(iy+16h) and might be intended for some sort of graphing use. HomeInit: 5125h: Initializes memory to go to the homescreen. This deletes programs ! and # (any entered stuff on the homescreen plus the most recent entry), sets cxCurApp=40h and the homescreen context vectors, and opens an empty edit buffer on !. ParseInpGraph: 4B01h: Same as ParseInp, type and name of program/equation to parse in OP1. 3,(iy+1Fh) is override for graph/split screen setting, or something...reset to force full screen. 4B04h is same except some flag changes. GoToErr: 4CD8h: Displays an open edit buffer up to the point that the parser encountered an error. Inputs: (editTop): top of edit buffer (editTail): end of entered data (editBtm): end of edit buffer (errOffset): byte offset from (editTop) that error occurred. This keeps displaying until reaching (editTop)+(errOffset). To display the rest of it, use DispEOW. ZeroParseVar: 4C57h: Sets (parseVar) to zero. Destroys A. Useless. Might convince ParseInp not to return to whatever called it or something. SixToParseVar: 4C5Ah: Sets (parseVar) to 6 (ProtProgObj). Destroys A. Useless. ForceModeKeypress: 51C4h: Forces a keypress in either the MODE, TABLE SETUP, FORMAT, or STAT EDITOR contexts. A: keypress (and (keyExtend) if necessary). Calls help hook with A=3. Use (cxCurApp) to determine which context you're in. IsModeSelContext: 5200h: Returns Z if vectors for a mode selection context are loaded. This returns Z for the MODE, [2nd]+[FORMAT], TABLE SETUP, and STAT EDITOR contexts. Same context vectors are used for all four, it seems. Useless. Destroys DE and HL. ClockOff: 5146h: Turns the 84+/SE clock off. Just resets 6,(iy+3Fh). ClockOn: 5149h: Turns the 84+/SE clock on. Just sets 6,(iy+3Fh). JForceWindowSettings: 4FC3h: Sets up the Window Settings context. No inputs or outputs. Use B_CALL Mon after this to actually jump to it. GetStringInput: 4E5Eh: Gets a string of input from the user. Input: MUST reset 6,(iy+1Ch) and set 7,(iy+9). Output: string stored in temporary equation 04h,2Dh,00h,00h. It basically calls _newContext on 50h, Mon, then _newContext on 3Fh. 4E61h is identical except it does set 1,(iy+9) instead of reset (not sure of significance). DeleteTempEditEqu: 5113h: Deletes temporary equation 03h,2Dh,00h,00h. Used with GetStringInput and potentially other things. MenuSwitchContext: 45E2h: Switches to context in A. Calls menu hook with A=3, does nothing if menu hook canceled operation, or runs whatever it returned instead. set 5,(iy+16h) for some sort of one-time override to not run the context. ErrNonReal2: 4A89h: Same as ErrNonReal, except B=2. Throws ERR:DATA TYPE if top two numbers on floating-point stack are non-real. FetchQuoteString: 4AF8h: Parses a quoted string out of a BASIC program and stores in a temporary string. Set up (basic_pc), (basic_end), make sure it ends with either another quotation mark or end-of-line. Creates temporary string, name in OP1. MUST pass E with bit 0 SET or else it'll keep on parsing the rest of the program, which is bad. MUST have numOP1,(iy+ParsFlag2) RESET or it will throw ERR:SYNTAX. ErrArgumentO123: 4C12h: Throws ERR:ARGUMENT if OP2>OP1 or if OP1>OP3. This is dumb. Might have something to do with dialog context, since it's in the middle of that code. Convert85List: 4F1Eh: Converts an 85/86 format list to 83+ format. Inputs: OP1 is type and name of variable to convert. Must exist in RAM. Subroutine in GetVarCmd. Convert85Real: 4F27h Converts an 85/86 format REAL variable to 83+ format. Inputs: HL is source address. DE is destination address. These can be equal. Outputs: HL and DE point to next spot. Subroutine in Convert85List and in GetVarCmd. Example is with OP1. SetupEmptyEditTempEqu: 5212h: Deletes (if it exists) and then re-creates equation 03h,2Dh,00h,00h and sets up edit pointers for it. Basically deletes and creates 03h,2Dh,00h,00h and calls _SetupEmptyEditPtr. (editSym) is pointer to symbol table entry. Sets 6,(iy+5h). Looks at textShadow. SetUpEditor: 51ACh: Sets up the stats/list editor, identical to the BASIC SetUpEditor command. This is used by the parser immediately after encountering the token, so basic_pc and so forth must be set up to point just after the token. It can point to the end of a line, at which point it functions as "SetUpEditor ", and will recreate lists L1-L6 and set them up. It can point to a group of up to 20 lists separated by commas (and/or beginning/trailing parentheses) and it will set up those lists instead. This stores 1 to 970Eh, zeroes to 970Fh and 9710h, and the 20 list names. The list ends with 71h ("q"). ResetIOPrompt: 51A6h: Resets the (ioPrompt) memory area. (ioPrompt) is a word of row/column coordinates for a string input prompt. This will reset (ioPrompt) to 003Fh. The equivalent code is: ld hl,003Fh \ ld (ioPrompt),hl \ ret Destroys HL. SortA: 51AFh: Sorts the elements of an unarchived list in ascending order. Destroys all registers, OP1-OP6, iMathPtr1, and possibly more. OP1 is name of list variable to sort. SortD: 51B2h: Sorts the elements of an unarchived list in descending order. Destroys all registers, OP1-OP6, iMathPtr1, and possibly more. OP1 is name of list variable to sort. ListToMatrix: 518Bh: Converts a group of lists to a matrix. While the OS uses it this way, it's more of a "fill a matrix with stuff" function. OP1 is the name of the matrix (if it doesn't exist, the OS will create it). A is the number of numbers to insert into the matrix. The floating-point stack contains the numbers to insert. So I guess an example would be: B_CALL ZeroOP1 \ rst rPushOP1 \ rst rPushOP1 \ ld a,2 \ ld hl,5C02h \ ld (OP1),hl \ B_CALL ListToMatrix That would create a 1x2 (or 2x1?) matrix named [A] with zeroes. Or something. BinOPExec2: 507Ah: Same as _BinOPExexc except it does this at the beginning: res 6,(iy+0Fh) \ ld hl,9817h \ ld (hl),0 I'm not convinced that 9817h is used for anything at all (as of OS 2.41). I also don't know what 6,(iy+0Fh) is. UnOPExec2: 5077h: Same as _UnOPExec except it does this at the beginning: res 6,(iy+0Fh) \ ld hl,9817h \ ld (hl),0 I'm not convinced that 9817h is used for anything at all (as of OS 2.41). I also don't know what 6,(iy+0Fh) is. NDeriv: 4FFCh: Performs the nDeriv( function. FPST: expression. OP1: variable. If this does not result to a REAL number, ERR:DOMAIN is thrown. This is essentially: rst rPushRealO1 call _RclVarSym ld a,25h ;nDeriv call _ThreeExec call _CkOP1Real jp nz,_ErrDomain ret getDtStr: 5158h: Gets the current date from the 84+/SE clock hardware in the specified date format. This is the equivalent of the BASIC getDtStr( command. OP1 is the format (1, 2, or 3); ERR:DOMAIN for anything else. Returns the name of a temporary string containing the date in OP1. You can set 4,(iy+3Fh) beforehand to get the real string instead of token values, but make sure you res 4,(iy+3Fh) afterward. getTmStr: 5164h: Gets the current time from the 84+/SE clock hardware in the specified time format. This is the equivalent of the BASIC getTmStr( command. OP1 is the format (12 or 24); ERR:DOMAIN for anything else. Returns the name of a temporary string containing the time in OP1. You can set 4,(iy+3Fh) beforehand to get the real string instead of token values, but make sure you res 4,(iy+3Fh) afterward. GetDateString: 5152h: Gets the current date from the 84+/SE clock hardware in the current date format. DE is where to put the string. You can set 4,(iy+3Fh) beforehand to get the real string instead of token values, but make sure you res 4,(iy+3Fh) afterward. GetTimeString: 515Eh: Gets the current time from the 84+/SE clock hardware in the current time format. DE is where to put the string. You can set 4,(iy+3Fh) beforehand to get the real string instead of token values, but make sure you res 4,(iy+3Fh) afterward. StrCpyVarData: 51CAh: Copies a string of token data from a RAM variable to a specified location (only one row). HL is the destination location in RAM. DE points to the variable data (size bytes). This will only print up to 16 characters. It is used with the BASIC Menu( command to parse things like the Str1 in: Menu("HEADER",Str1,A ChkTmr: 5143h: This is the BASIC chkTmr( command. Pass the value you would normally pass to chkTmr( to OP1. All this does is get the number of elapsed seconds (which is startTmr) and subtracts OP1 from it. Throws ERR:DOMAIN if OP1 (input or output) isn't/would not be a positive integer. dayOfWk: 514Ch: This is the BASIC dayOfWk( command. Pass the values to the FPS as you would normally pass them to dayOfWk(. OP1: day FPST: month FPS1: year This can throw ERR:DOMAIN if you pass it wonky values. PolarDerivative: 4FFFh: This is the dy/dx command from the OS' CALCULATE menu. It uses r and theta to calculate it. The result is either in OP1, OP2, or both. I'm not sure because I can barely remember what derivative even means. setDate: 516Ah: This sets the date on the 84+/SE clock. It's the same as the BASIC command. Pass the year, month, and day as you would the command. OP1: day FPST: month FPS1: year This can throw ERR:DOMAIN if you pass it wonky values, like the year 2133 and above. This creates a 3-element temporary list, as the BASIC command does. setTime: 5170h: This sets the date on the 84+/SE clock. It's the same as the BASIC command. Pass the year, month, and day as you would the command. OP1: hour FPST: minute FPS1: second This can throw ERR:DOMAIN if you pass it wonky values, like the hour 57 and above. This creates a 3-element temporary list, as the BASIC command does. timeCnv: 5179h: This converts a number of seconds into a 4-element list of days, hours, minutes, and seconds. This is the same as the BASIC timeCnv( command. OP1: number of seconds This can throw ERR:DOMAIN if you pass it wonky values, like a negative number or non-integer. This creates a temporary list (name returned in OP1) of the values. WaitEnterKeyValue: 4E64h: Displays the value in OP1 and waits for a keypress. This is identical to the BASIC "Pause " command and a value after it. OP1 can be a number or a variable that can be displayed on the homescreen. This can and probably will throw errors, so be sure to catch them first. This will allow the user to scroll left, right, up and down, and press ON to continue. This will set onInterrupt,(iy+onFlags). This will display textShadow by calling _Disp. DispValue: 5188h: Displays the value in OP1 along with the "..." at the end of the line if necessary. Basically "set 5,(iy+0h) \ call _Disp \ call _formDisp \ call _disarmScroll \ ret". This can and probably will throw errors, so be sure to catch them first. IPointNoGraphicsHook: 5038h: This is _IPoint, except the graphics hook will not fire. It also does bounds checking (if the first point is not on the LCD, the routine immediately returns). Look at _IPoint for inputs/outputs. ErrNonReal_FPST_FPS1: 4A89h: Throws ERR:DATA TYPE if the floating-point values at FPST and FPS1 are non-real. That's it. BackUpGraphSettings: 45E8h: Backs up graphing settings to another area of RAM. (iy+appFlags) -> (85E3h) (iy+0Ch) -> (85E4h) (curGStyle) -> (85E5h) (iy+graphFlags) -> (85E6h) That's it. StatPlotPutS: 51F7h: Displays an OS string related to the stat plot editor. E is the offset into a table (then _PutS is called on it). E=2: L1 E=4: L2 E=6: L3 E=8: L4 E=10: L5 E=12: L6 E=14: On E=16: Off Useless. ClearParseVar: 4C57h: Zeroes out (parseVar). Code: push af \ xor a \ ld (parseVar),a \ pop af \ ret Stupid. SetParseVarProg: 4C5Ah: Sets (parseVar) to 6. Code: push af ld a,6 \ ld (parseVar),a \ pop af \ ret Stupid. ParseNameTokens: 4AFEh: Begins parsing name tokens at the specified point (for example, (basic_pc) would point to the prgm token, or A-Z, theta, etc.). This is a subroutine in _ParseInp and does not return until parsing is complete. You could use it to resume parsing at a specific point, I guess, or you could parse your own string of tokens if you set up the inputs properly. This is going to require the operator stack to be set up from ParseInp, and (basic_pc)/etc. set up correctly. RestartParseOP1Result: 521Eh: This restarts the token parsing loop in _ParseInp, and sets 0,(iy+7) (result is in OP1). Yeah, that's about it. ExecClass1Token: 5215h: Executes a "class 1" token, per the parser hook. This will call the parser hook. (OPS) must be zero. Result must not be in OP1 (res 0,(iy+7)). parseVar must be a program. A is the token to parse. This doesn't return...it will keep on parsing the variable. I suppose you could set 4,(iy+9) and an error handler to catch it, but ew. MaybePushMultiplyOperator: 521Bh: Pushes the multiplication operator to the operator stack if OP1 contains a result. This is what allows for implied multiplication. If you are parsing another number and a result is already in OP1, you want to push the multiplication operator to the stack in case they need to be multiplied together. HandleMathTokenParse: 5218h: Handles the following tokens when encountered by the parser: tRound equ IMUN ;12h 'round' tPxTst equ IMUN+1 ;13h 'PXL-TEST' tAug equ IMUN+2 ;14h 'aug' tRowSwap equ IMUN+3 ;15h 'rSwap' tRowPlus equ IMUN+4 ;16h 'rAdd' tmRow equ IMUN+5 ;17h 'multR' tmRowPlus equ IMUN+6 ;18h 'mRAdd' tMax equ IMUN+7 ;19h 'max' tMin equ IMUN+8 ;1Ah 'min' tRToPr equ IMUN+9 ;1Bh 'R>Pr tRToPo equ IMUN+10 ;1Ch 'R>Po tPToRx equ IMUN+11 ;1Dh 'P>Rx tPToRy equ IMUN+12 ;1Eh 'P>Ry tMedian equ IMUN+13 ;1Fh 'MEDIAN tRandM equ IMUN+14 ;20h 'randM' tMean equ IMUN+15 ;21h tRoot equ IMUN+16 ;22h 'ROOT' tSeries equ IMUN+17 ;23h 'seq' tFnInt equ IMUN+18 ;24h 'fnInt' tNDeriv equ IMUN+19 ;25h 'fnIr' tEvalF equ IMUN+20 ;26h tFmin equ IMUN+21 ;27h tFmax equ IMUN+22 ;28h It will parse out the arguments and place the proper things on the operator stack, then return execution of the parser. I think you might be able to set 1,(iy+8) to force the parser to return once it's done with this token. UpdateStatPlotLists: 52C6h: Updates lists for a specified stat plot and any formulas attached to them. HL points to a byte specifying the stat plot (1-3). This will delete the temporary equation (04h,26h+plotNumber,00h,00h) associated with the stat plot. This can abort a couple of different ways, namely bit 0 of the first byte of the stat plot structure for this stat plot being reset, the first byte being 5, and it behaves differently whether it's less than 2. If not less than 2, the next list can't start with a 1. Weird. GetCurPlotListNameToOP1: 5230h: For the current stat plot being plotted, get the name of the list associated with it to OP1. A is the list you want (0-2). OP1 will contain the list name. GetCurPlotListOffset: 5296h: For the current stat plot being plotted, get the address and offset into the stat plot structure for the specified list. HL will contain the pointer to the structure, DE to the offset to the list name. You pass in A which list you want (0-2). ParseAndStoreSysVar: 4FBDh: Closes any open edit buffer and parses homescreen program 05h,21h,00h,00h, then stores to a system variable. This basically calls _ParseInp on program 05h,21h,00h,00h and attempts to store to a system variable with _StoSysTok. (9700h) points to a table entry (see window hook). The window hook will be called with A=6 here. Return NZ to abort storing the variable. All temporary variables are cleaned up by this routine. This is obviously use by the OS for storing system variables after editing them, such as on the WINDOW and TblSet screens. DisplayEditSysVar: 4FC0h: Displays the current contents of a system variable to the screen. (9700h) points to a table entry (see window hook). The window hook will be called with A=9 here. Return NZ to abort displaying the variable. This does funky stuff if (cxCurApp) is 49h. Set up curRow/penRow/winLeftEdge beforehand. It looks like 1,(iy+2Ah) reset means to use the fixed width font, but who knows, really. GetCurPlotOffset: 52B7h: Gets the pointer in RAM to the current stat plot structure being graphed. HL will be the pointer. It ANDs the first byte of the structure with 0Fh and returns Z/NZ based on that. DisplayListNameEquals: 51DFh: Displays the list prompt at the bottom of the screen for the list editor. This can display "Name=" if an existing list is not highlighted (meaning ((9710h)+(970Fh)+listName1) is 71h). It will display L1-L6 for built-in lists or L(name) for named lists. It will also display the current element highlighted within the selected list (such as "L1 (1)="). This is stored at (96FEh). 0000h means nothing selected. DisplayListEquals: 522Dh: Displays the current element highlighted within the selected list in the list editor (such as "L1 (1)="), and equals ("="). This is a subroutine of DisplayListNameEquals. Useless. DisplayListElementOffsetLA: 4FA5h: Displays the current element highlighted within the selected list in the list editor (such as the "(1)" in "L1 (1)="). It uses whatever is in (curRow). Input is in A. This will write in the large font. This does wacky things if you're on the MATRX menu, (cxCurApp) is 43h or 4Ah (stat or table editor), and 3,(iy+15h). It really just displays the number in A, but don't use it outside of its original purpose (the list editor). PromptMoveBackLeft: 511Ch: Sets window/LCD coordinates as far left as possible for a prompt. It starts at column 1 and moves (winLeftEdge) right until after characters "=", ":", "?", or 7Fh (obtained from txtShadow). If 1,(iy+2Ah) set: (817Bh)->(penCol), otherwise (winLeftEdge)->(curCol). This is likely used to move to the start of a prompt. GetLToOP1Extra: 517Ch: This is _GetLToOP1 for extra RAM pages and the archive. BDE (or just DE if in RAM) points to the data bytes of a real or complex list. HL is the list element to get to OP1 (one-based). Stupid. ListEdNameCxMain: 51BBh: This is the cxMain routine when a list name is highlighted in the list editor. There are several different cxMain routines depending on where in the context you are. This is when the top row is highlighted. This is stupid. ListEdEnterNewName: 51BEh: This forces kEnter on the cxMain routine used in the list editor when entering a new name for a list. There are several different cxMain routines depending on where in the context you are. This is when a new list name is being entered. This is stupid. DisplayListHeader: 51E2h: Displays the top three list names for the list editor. (970Fh) is an offset for how far to go into the list list to start displaying entries. On the far left side of the editor, this would be zero. List names are stored at listName1 and go forward, 5 bytes each. DispMatrixDimensions: 51E5h: Displays the dimensions of the matrix you specify for the matrix editor. A is the matrix number (0-based). It does column 6 itself, you specify the row with (curRow). HighlightListEdItem: 51E8h: Highlights (displays in inverse text) the list element or name currently selected in the list editor. (9710h) holds the currently-selected list (0-based). (9704h) is the number of elements in this list. (96FEh) contains the currently-selected list element, 1-based (0000h for the list name instead).