MLSCANv2.2 by Paul Stabnow -- Works on S/SX/G/GX -- ------------------------ Changes From 2.0 to 2.1 ----------------------- - Fixed bug that prevented lib 993 from being seen on a high port in the GX. - Fixed EEX bug(Turning back on no longer exits the scanner). From 2.1 to 2.2 ----------------------- - Fixed Repeat bug(After a wrap, the direction pressed next would be executed twice. - Rewrote the whole key substructure for faster response. - Rewrote repeat routine for more speed and a visible cursor. - Added Alpha mode by pressing alpha key(POKE and SCAN not yet implemented). - Fixed bug in allowing start with an ACPTR as an argument. Features Include: ----------------- -HEX/ASC display of memory. -Use of RPL.TAB and DIS.TAB for position and mem! -Convenient Search and Poke ability. -Written Completly in ML with over 2000 lines of source code! -Ability to recall objects to the stack. -Shows Primitives and Valid Objects. -BankSwitching ability on the GX!! -And much more... -Thanks to Bill Stabnow, Bryan Monosmith, and Mika Heiskanen for helpful suggestions. Technical Information --------------------- **For you junkies like me who want to know the insides. -No memory buffers are used, therefore no residue may be found in memory. One example being that you won't find a buffer created while searching as you would in other scanners. -Exceptions being: KEYBUFFER VDISP \ This may be VDISP2 / advantageous. -Great care is taken with bankswitching on the G/GX. This includes use of tables even when in a switched mode, leaving on the same port as you came in on(e.g. If switched for port 2, this scanner will exit switched to port 2, even if ports are switched from within the scanner). -Determining an open port is done by taking a near and far point and going through each port until a match is found. As one can see, this may not always work correctly(e.g. 2 ports having the same 16 nibs at C0000 and F0000 will result in the first one found). -RPL tables on high ports will not be brought into memory, instead they will be accessed directly so no extra memory is used. -Note: It is strongly recommended that you follow the directions for making this program Jazz free if you plan to enter this scanner while bankswitched. Possible Future Enhancements ---------------------------- -Make OFF/ON work better(works better now, but I'm not satisfied yet) -Add Search and Poke ability for letters A-Z Disclaimer ---------- Blah blah...this is a Hacker's Utility--I will take no responsibility... Requirements: ------------- -A calculator(S/SX/G/GX) -Jazz*(must have xFNT1 as first XLIB) * While it is nice to have jazz, it isn't needed. If you don't have it, or it's not in the right format(FNT1 first), follow these instructions to make it run without: 1. First recall MLSCAN to the stack and break it apart(There should be three objects). 2. The three objects are FNT1(XLIB 992 0), NEWOB, and the Code object. 4. Replace FNT1 with any 4x6 font, and get rid of NEWOB. * This will make a working copy of MLSCAN that is ~1K larger, but does not require Jazz. The tables are handled within the code object, thus you may have library 993(benifit of the tabs) without Jazz. If 993 does not exist, this scanner will simply not be able to find the RPL equivalent for a given address. MLSCAN takes four types of arguments from the stack: ---------------------------------------------------- -Nothing: in which case the scanner will default to addres 0h. -Any object: the scanner will default to the addr of the object. -A System Binary: the scanner will default to that position. -An ACPTR: -SX: This will be regarded as 'Any Object'. -GX: will open the proper port and go to the position. The screen of MLSCAN is organized as such: ------------------------------------------ Eight rows of XXXXX: YYYYYYYYYYYYYYYY> ZZZZZZZZ, where XXXXX is the address of the line, Y..Y is 16 nibs at XXXXX, and Z..Z is the ASCII interpretation of Y..Y. On row 9 will be the cursor position, the RPL.TAB equivalent of curpos(if any), and PRIM if curpos is at a Primitive, or the prolog if curpos is at a prolog. In MLSCAN, there are 8 menu options available(7 on an SX). ---------------------------------------------------------- PORT- This allows the Switching of ports 0-X, 0 being covered rom, and X being the highest port in your calculator. The help menu will show the highest port you can switch to. All positions are bankswitched at the C0000 area. 0 will switch to covered rom, 1 will restore the banks, and 2-9 will switch to that port(assuming it's there). -Note: This menu key is disabled on an S/SX. SCAN- This sets the scanner into search mode. Here, by pressing 0-F, you can scan for up to 16 nibs. After 16 nibs, each new digit pressed will cause the leftmost digit to be lost when searching. MLSCAN will also first look for the nibs at the scan position, then increment the find. This means that if you are searching for "D9D20AAB20", and the scanner finds it after "D9D20AA" has been entered, pressing the "B" will not make it search forward, instead it will remain on the same position and highlight the "B". Inside Scan, all keys remain the same, except for NXT, which finds the next occurrence of the search string, and ENTER or ON, which leave scan and go back to the main menu. POKE- This sets the scanner into poke mode, which allows you to poke 0-F at the cursor position. ENTER or ON leaves this mode. Again, all keys are left in tact while in this mode. GOTO- This allows you to enter an address you wish to go to. Just type in 0-F, and press enter to go to the address. The DROP key will delete one nib at a time, and the ON key will cancel the operation. RCLOB- This puts a pointer to the object at the cursor on the stack. In order for an object to be recalled, the cursor must be at a valid object(Prologed), or a Primitive. This will be indicated in the lower right corner of the screen. GX: If bankswitched and above C0000, the object will be loaded into ram. SETPS- This sets the upper left hand position to the position of the cursor. HELP- This gives a brief description of all the menus and keys available in MLSCAN. Note that the description of PORT will change, depending on your system status. If on an SX, the description will say: "SX...Ignore this." On a GX, it will say: "Switches ports 0-X", where X is the highest port in your calculator. EXIT- Duh...what could this possibly do??? The following keys are active when in MLSCAN: --------------------------------------------- NXT -Pages between the two menus / Finds next in search mode ' -Looks up the five nibs at the cursor in RPL.TAB for name. This will not work in a bankswitched mode on the GX. y^x -Page up one page DEL -Page down ENTER -Pushes address at cursor to stack in the form of a system binary / Back to main menu. EEX -Turns off the calculator until ON is pressed(sucks right now--ON key needs to be pressed a couple of times...doesn't go into low power state). DROP -Backspace in GOTO mode ON -Cancel / Exit Arrows -Up, Down, Left, Right. * The arrow keys and Page up/down keys all have a repeat sequence. Holding them down for approximately 1/2 of a second will start it. I made them scroll at a nice speed so you can stop where you want(no lightning pressing required). -Bugs can be reported to me at: wstabnow@clark.net or If you see me on #hp48 under the nickname TallPaul -Paul Stabnow-