Metropoli BBS
VIEWER: mlscan22.doc MODE: TEXT (ASCII)
				 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-

[ RETURN TO DIRECTORY ]