[comp.sys.handhelds] HP-48 MLDL Version Beta 1.02

bson@rice-chex.ai.mit.edu (Jan Brittenson) (04/30/91)

This is the manual part of MLDL version 1.02. Differences from 1.01:

	o Breakpoints

	o Server mode of operation (i.e. remote control, via wire)

	o Key arguments (addresses, etc)

	o Improved manual


Enjoy,


 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \

									1.


MLDL 1.02, APRIL 1991
---------------------


   The MLDL is a Machine Language Development Library for the HP-48SX,
and as such is primarily intended for HP-48 Machine-Language
Programmers familiar with the following:


	o  The Saturn instruction set

	o  Assembler programming

	o  Machine code debugging

	o  RPL internals - GC, system RPL, PMC

									1.


INSTALLING THE LIBRARY
----------------------


   The MLDL consists of five named commands, and has been given the
number 1092 decimal (hexadecimal 444). To install it, transfer the
binary file to your calculator and store it in a suitable port. Turn
the calculator off, then back on, and go to the directory where you
wish to attach it - HOME is fine. Enter :p:1092 where `p' is the port
you stored it in, then ATTACH. To remove it, go to the directory where
you previously attached it, enter `:p:1092', press DUP DETACH, then
PURGE.  The library does not automatically attach.

Installation example, assuming I/O has been properly set up:

	HOME
	'MLDL' KGET
	MLDL :0:1092 STO

	(Turn the calculator OFF, then back ON)

	:0:1092 ATTACH


Removal example:

	HOME
	:0:1092 ENTER DUP
	DETACH
	PURGE

   The display should briefly flicker as you purge the library from
the port.

									3.


LIBRARY COMMANDS
----------------


[ABOUTMLDL]

Displays version and copyright.


[MLDB]

   Saturn ML Debugger. This description covers the MLDB local mode. It
can also operate in one of two server modes: interactive or protocol,
described under MLDB Server Modes below. In Local Mode, the HP-48
display and keyboard, are used to control the debugger. In Server
Mode, control is maintained via the serial port, either from a dumb
ASCII terminal (Interactive Mode), or a dedicated front-end (Protocol
Mode). To assert that MLDB is in Local Mode when invoked, clear user
flags 32 and 33:


	32 33 CF CF


   MLDB allows you single-step ML programs, as well as examine
registers and memory contents. Since it single-steps ML, it is not
useful for debugging RPL code - unless you wish to follow your RPL
thread on an ML level. When invoked, an argument in expected in level 1:


	Code object

	        Halts before the first instruction of the code object.
	    Both the PC and A registers are set to the address of the
	    first instruction.

	XLIB

	       The XLIB must be a code object, which becomes the
	    argument.

	Binary integer

		Treats the binary integer as the address of a prefixed
	    machine code routine (PMC). Halts at the first instruction
	    of the PMC. PMCs consist of a 5-nybble pointer to the first
	    instruction which is usually, but not always, the address
	    of the PMC plus 5.
	    
	@#3a81 (True)

	Any object other than @#3a81

		Ignored - the debugger returns immediately. In the
	    future, @#3a81 (True) will cause the debugger to use the
	    next object in sequence. It will be possible to include a
	    call to MLDB and precede it with a test to determine
	    whether to actually debug or run free. A user flag test,
	    for instance.

									4.


   Local Mode MLDB uses PICT (the graphical display) to present
information. Since all information will not fit on one display at
once, it has been divided into 7 screens. Only one screen is active at
any one time. Switching between screens is done by means of the 6 menu
keys, here referred to as A-F, which correspond to screen 1 through 6
respectively, and the MTH key, which corresponds to screen 7.

   The sample screens 1-7 below are from the first instruction of the
PMC at #59CC, and can be reasonably reproduced by:


	#59CC MLDB



Screen 1  - General CPU State (key [A])

   Mnemonic............................ |CALL.4 #0679B         |
   Opcode.............................. | 8E4CD0 	       |
   PC, P, Carry, Hex/Dec mode, ST...... |@:059D1 P:0 CH ST:218 |
   A.A and C.A......................... |A:000CC C:77794       |
   B.A, D.A, and HST................... |B:729A9 D:00F96 HST:2 |
   D0 and 6 bytes @D0.................. |D0:409C1/9540A8240BC9 |
   D1 and 6 bytes @D1.................. |D1:77799/000000000000 |
   Top 3 levels of RSTK................ |RST:00000:00000:00000 |


Screen 2  - Arithmetic registers (key [B])

   Mnemonic............................ |CALL.4 #0679B         |
   Opcode.............................. | 8E4CD0 	       |
   PC, P, Carry, Hex/Dec mode, ST...... |@:059D1 P:0 CH ST:218 |
   Register A.......................... |A:00000005444000CC    |
   Register B.......................... |B:000000000007611E    |
   Register C.......................... |C:000000000007792C    |
   Register D.......................... |D:00000000000004D0    |
   Top 3 levels of RSTK................ |RST:00000:00000:00000 |


Screen 3  - Data registers (key [C])

   Mnemonic............................ |CALL.4 #0679B         |
   Opcode.............................. | 8E4CD0 	       |
   PC, P, Carry, Hex/Dec mode, ST...... |@:059D1 P:0 CH ST:218 |
   Register R0......................... |R0:053385D439800040   |
   Register R1......................... |R1:00000005444059D1   |
   Register R2......................... |R2:0000000000075BC1   |
   Register R3......................... |R3:0000000544402E92   |
   Register R4......................... |R4:00015075A6375AA1   |
   Top 3 levels of RSTK................ |RST:00000:00000:00000 |

									5.


Screen 4  - Return stack (key [D])

   Mnemonic............................ |CALL.4 #0679B         |
   Opcode.............................. | 8E4CD0 	       |
   PC, P, Carry, Hex/Dec mode, ST...... |@:059D1 P:0 CH ST:218 |
                                        | 		       |
   RSTK levels 0 and 4................. |RST0:00000 RST4:00000 |
   RSTK levels 1 and 5................. |RST1:00000 RST5:00000 |
   RSTK levels 2 and 6................. |RST2:00000 RST6:00000 |
   RSTK levels 3 and 7................. |RST3:00000 RST7:00000 |


Screen 5  - Memory dump (key [E])

   Locations 59A0-59AF................. |059A0:56113680913420CC|
   Locations 59B0-59BF................. |059B0:4E0156716FCC56FD|
   Locations 59C0-59CF................. |059C0:015B38D5E0101D95|
   Locations 59D0-59DF................. |059D0:08E4CD08E46C0101|
   Locations 59E0-59EF................. |059E0:D230574911191443|
   Locations 59F0-59FF................. |059F0:4E4A201101311456|
   Locations 5A00-5A0F................. |05A00:12280A50143174E7|
   Locations 5A10-5A1F................. |05A10:8E58D01311741431|

   The current location is indicated by an inverse digit.


Screen 6  - ML Instruction Stream (key [F])

   PC, P, Carry, Hex/Dec mode, ST...... |@:059D1 P:0 CH ST:218 |
   Next 7 instructions................. |#CALL.4##0679B########|
                                        | CALL.4 #06641	       |
                                        | MOVE.W A,R1	       |
                                        | CLR.A C	       |
                                        | MOVE.P1 #5,C	       |
                                        | CALL.3 #05B7D	       |
                                        | MOVE.W R1,C	       |


      The next instruction is the one displayed in reverse. Currently,
   it will always appear at the top. (Here somewhat crudely
   illustrated with the # signs.)


Screen 7  - Breakpoint Table Screen (key MTH)

   Breakpoint #1....................... | 1:6100 +02	       |
   Breakpoint #2....................... | 2:6104 -02	       |
   Breakpoint #3....................... | 3:613A  00	       |
   Breakpoints #4-#8: not used......... | 4:0000  00	       |
                                	| 5:0000  00	       |
                                	| 6:0000  00	       |
                                	| 7:0000  00	       |
                                	| 8:0000  00	       |

   Any breakpoints at the current location are displayed in reverse.

									6.


The Local Mode MLDB keyboard
----------------------------

   A number of keys will accept an argument, referred to as ARG. To
enter ARG, press [0] (the zero key) followed by a hex integer, which
will make up ARG. It is restricted to 5 hex digits (20 bits). As [0]
is pressed, the bottom display line, regardless of screen currently
active, becomes an ARG entry line:

	|ARG:00000             |

   This reformat remains in effect until a non-hex key is pressed, at
which point that key is passed ARG. Some keys behave differently
depending on whether ARG was present - [DEL], for instance, does
nothing, effectively cancelling ARG. The backarrow, [<==], divides the
argument by 16, in effect shifting it right one digit. The argument is
always a 20-bit unsigned integer. The digits A-F are found on the menu
keys.  The [+/-] key negates (2's complement) the argument.


Example, ARG entry:

	Keys		Comments	Bottom line following keys

	0		Start entry	|ARG:00000             |
	5		Digit 5		|ARG:00005             |
	7		Digit 7		|ARG:00057             |
	[<==]		Shift right	|ARG:00005             |
	9		Digit 9		|ARG:00059             |
	D1		Digits D, 1	|ARG:059D1             |
	[+/-]		Negate		|ARG:FA62F             |
	000		Three 0s	|ARG:2F000             |
	[<==]		Shift right	|ARG:02F00             |
	[DEL]		Cancel ARG


									7.


   Moving about is done with the arrow keys and the NXT key - notice
that none of these keys actually execute the previous instruction,
only the PC is affected:

	[up]	Decrement PC by 16 (or 16*ARG)
	[down]	Increment PC by 16 (or 16*ARG)
	[left]	Decrement PC by 1 (or ARG)
	[right]	Increment PC by 1 (or ARG)
	[NXT]	Move to next instruction (or ARG instructions forward)


In addition, there is a mark:

	[x]	(Mulitplication key)
		Set mark to ARG, if present. Otherwise the MARK
		is set to the current PC.

	[+/-]	Swaps the PC and the mark.



Example, Moving About:

	Keys		Comments	Display following keys

	059D1[ENTER]	PC=#059D1h	|@:059D1 P:0 CH ST:218 |	
					|#CALL.4##0679B########|
					| CALL.4 #06641        |
					| MOVE.W A,R1          |
					| CLR.A C              |
					| MOVE.P1 #5,C         |
					| CALL.3 #05B7D        |
					| MOVE.W R1,C          |


	04[right]	PC=PC+4		|@:059D5 P:0 CH ST:218 |
					|#CLR.A#A##############|
					| CALL.4 #06641        |
					| MOVE.W A,R1          |
					| CLR.A C              |
					| MOVE.P1 #5,C         |
					| CALL.3 #05B7D        |
					| MOVE.W R1,C          |


	059D1[ENTER]	PC=#059D1	|059A0:56113680913420CC|
	[E]		Memory dump,	|059B0:4E0156716FCC56FD|
			screen 5	|059C0:015B38D5E0101D95|
					|059D0:0#E4CD08E46C0101|
					|059E0:D230574911191443|
					|059F0:4E4A201101311456|
					|05A00:12280A50143174E7|
					|05A10:8E58D01311741431|

									8.


	[up]		PC=PC-#10h	|05990:3A6E80D0F40D4F01|
					|059A0:56113680913420CC|
					|059B0:4E0156716FCC56FD|
					|059C0:0#5B38D5E0101D95|
					|059D0:08E4CD08E46C0101|
					|059E0:D230574911191443|
					|059F0:4E4A201101311456|
					|05A00:12280A50143174E7|


	059D1[ENTER]	Back to #59D1h	|@:059D1 P:0 CH ST:218 |
	[F]		ML instructions	|#CALL.4##679B#########|
					| CALL.4 #06641        |
					| MOVE.W A,R1          |
					| CLR.A C              |
					| MOVE.P1 #5,C         |
					| CALL.3 #05B7D        |
					| MOVE.W R1,C          |


	[NXT]		Forward one	|@:059D7 P:0 CH ST:218 |
			instruction	|#CALL.4##06641########|
					| MOVE.W A,R1          |
					| CLR.A C              |
					| MOVE.P1 #5,C         |
					| CALL.3 #05B7D        |
					| MOVE.W R1,C          |
					| MOVE.A C,@D0	       |


	[x]		Set mark	|@:059D7 P:0 CH ST:218 |
	03[NXT]		Forward 3	|#MOVE.P1##5,C#########|
			instructions	| CALL.3 #05B7D        |
					| MOVE.W R1,C          |
					| MOVE.A C,@D0         |
					| MOVE.P5 #02A4E,C     |
					| MOVE.W R0,A          |
					| MOVE.A A,D1          |


	[+/-]		Toggle mark,	|@:059D7 P:0 CH ST:218 |
			PC		|#CALL.4##06641########|
					| MOVE.W A,R1          |
					| CLR.A C              |
					| MOVE.P1 #5,C         |
					| CALL.3 #05B7D        |
					| MOVE.W R1,C          |
					| MOVE.A C,@D0         |


   The arrow keys are most useful for moving around in the memory
dump, but can also be used to arbitrarily increment and decrement the
PC to shift the instruction stream by single nybbles. The mark
commands are useful for temporarily remembering an address.

									8.


   There are three ways of aborting your program, and seubsequently
leaving the debugger:

	[<==]	(Delete key)
		Exits.

	[DEL]	Restores system registers to the state they were in
		when the debugger was entered. This is useful if you
		would need to exit in the middle of your program and
		the system registers contain random data. It does
		nothing if ARG was supplied, in effect acting as an
		ARG cancellation key.

	[1/X] [1/X]
		Panic exit. If you know the machine will crash when
		you exit, such as could be the case if memory has been
		reconfigured. Resets the calculator, which causes the
		MLDL to become detached. Follow the procedure
		described in the first section of this document to
		reattach.
		

Four keys are used to execute your program:


	[+]	Single-steps one (or ARG) instruction(s), pointed to
		by the PC. Follows CALLs. If ARG, then also checks for
		breakpoints.

	[-]	Same as [+], but does not follows CALLs; instead, the
		program halts when it returns from the CALL.

	[.]	Redraws the display but otherwise does nothing.

	[EVAL]	Continue execution, run until program completes,
		breakpoint is reached, or [-] CALL execution
		completes.

									9.


   The MLDB maintains a breakpoint table of eight slots. Each slot
consists of an address and a counter, both of which are displayed when
the MTH key is pressed (see below). The address is 20 bits and the
counter is eight bits. In addition, each slot holds the breakpoint
instruction (a CALL instruction) to be inserted into the program when
running it. Breakpoints only work in RAM, although they can be set in
ROM and triggered by multi-instruction single-steps. When a breakpoint
is triggered, its counter is incremented; if after the increment it is
negative (80-FF), the program will continue. Setting a negative
counter is therefore a way of instruction MLDB to "ignore this
breakpoint N times" where N is in the range 01-7F hexadecimal. If the
counter is positive, the program is halted. Positive counters indicate
how many times the program has halted at a specific breakpoint.


Example, Program Completion:

	   Start with the stack display, HEX mode, in the MLDL library
	menu. Only the relevant lines of the stack display are
	included in the example below. #3244h is DROP.

					
	Keys		Comments	Display following keys

	HEX STD		Set up modes


	2 1 #3244	Enter two	|3:                   2|
	[ENTER]		arguments for	|2:                   1|
			DROP, and the	|1:             # 3244h|
			of the DROP 
			PMC


	[MLDB]		Invoke MLDB on  |@:03249 P:0  H ST:218 |
	[F]		the DROP PMC	|#ADD.A##5,D1##########|
			and choose the	| INC.A D              |
			instruction	| MOVE.A @D0,A         |
			screen		| ADD.A #5,D0          |
					| JUMP.A @A            |
					| MOVE.A C,B           |
					| MOVE.1 #3,P          |


	   The DROP PMC consists of only the first 5 instructions.
	The JUMP @A will cause the program to reach completion.


	[EVAL]		Allow program	|1:                   2|
			to run freely


									10.


Breakpoints are accessible via three keys:


	[MTH]	Switch to breakpoint table screen. Any entry at the
		current PC will be displayed in reverse video.

	[PRG]	Set breakpoint. Waits for a further key, 1-8, which
		specifies the breakpoint to set. ARG is the address
		the breakpoint is set to. If no ARG is entered, then
		the breakpoint is cleared (its address and counter are
		set to 00000 and 00, respectively).

	[STO]	Set breakpoint counter. Waits for a further key, 1-8,
		which specifies the breakpoint whose counter is to be
		set. ARG is the new counter value. The counter is
		cleared if no ARG is entered. Only the low 8 bits of
		ARG are used.


   Example, Breakpoints. For an illustration on how to enter ARG, see
the "ARG entry" example above.


	Keys		Comments	Display following keys

	059D1[ENTER]	PC=59D1		|CALL.4 #0679B         |
	[A]		Screen 1	| 8E4CD0               |
					|@:059D1 P:0 CH ST:218 |
					|A:000CC C:77794       |
					|B:729A9 D:00F96 HST:2 |
					|D0:409C1/9540A8240BC9 |
					|D1:77799/000000000000 |
					|RST:00000:00000:00000 |


	[MTH]		Breakpoint	| 1:00000  00	       |
			table screen	| 2:00000  00	       |
					| 3:00000  00	       |
					| 4:00000  00	       |
					| 5:00000  00	       |
					| 6:00000  00	       |
					| 7:00000  00	       |
					| 8:00000  00	       |


	059D1[PRG]1	Set		|#1:059D1##00##########|
			breakpoint 1	| 2:00000  00	       |
			at #59D1h	| 3:00000  00	       |
					| 4:00000  00	       |
					| 5:00000  00	       |
					| 6:00000  00	       |
					| 7:00000  00	       |
					| 8:00000  00	       |


	   The inverse bar in the display above indicates that the
	breakpoint is set at the current PC.

									11.


	[F]		Examine	next	|@:059D1 P:0 CH ST:218 |
			7 instructions	| CALL.4 #0679B	       |
					| CALL.4 #06641	       |
					| MOVE.W A,R1	       |
					| CLR.A C	       |
					| MOVE.P1 #5,C	       |
					| CALL.3 #05B7D	       |
					| MOVE.W R1,C	       |


	[MTH]		Back to breakpoint
			table screen

	06641[PRG]5	Set		|#1:059D1##00##########|
			breakpoint 5	| 2:00000  00	       |
			at #6641h	| 3:00000  00	       |
					| 4:00000  00	       |
					| 5:06641  00	       |
					| 6:00000  00	       |
					| 7:00000  00	       |
					| 8:00000  00	       |


	040[+]		Single-step 64	| 1:059D1  00          |
			instructions	| 2:00000  00          |
					| 3:00000  00          |
					| 4:00000  00          |
					|#5:06641#+01##########|
					| 6:00000  00          |
					| 7:00000  00          |
					| 8:00000  00          |


	   We never really got as far as 64 instructions. Instead we
	ran into the breakpoint at #6641h and stopped there. The
	breakpoint table above tells us why we stopped, and that it is
	our first stop here. Setting breakpoints and single-stepping a
	large number of instructions is the only way to use
	breakpoints in ROM.


	[STO]5		Clear counter	| 1:059D1  00          |
			of breakpoint 5	| 2:00000  00          |
					| 3:00000  00          |
					| 4:00000  00          |
					|#5:06641##00##########|
					| 6:00000  00          |
					| 7:00000  00          |
					| 8:00000  00          |


									12.


   A breakpoint is a CALL.A to an entry in the MLDB. When the
breakpoint is reached, control is transfered to the breakpoint trap
handler in the MLDB. It finds the location of the breakpoint on the
return stack (RSTK), looks it up in the breakpoint table, and proceeds
as outlined above. The CALL.A instruction uses 7 nybbles of memory.
Therefore, problems can arise when the program contains a sequence
like this:


	point:	brcc	foo		; 3 nybbles
		inc.a	c		; 2 nybbles
	foo:	inc.a	c		; 2 nybbles
		dec.a	a		; 2 nybbles


   Picture what would happen if a breakpoint is set at `point.' It
uses up 7 nybbles of memory, and thus overwrites the BRCC, subsequent
INC, and the INC at `foo.' Assume another piece of the program makes a
jump to `foo.' This will result in a jump into the last two nybbles of
the breakpoint instruction! The program is bound to break - if we're
lucky this means mysterious results - if we're unlucky, we're going
down in flames (metaphorically speaking).

   During a [+] single-step of multiple instructions (actually, any
single-step with an ARG will do), the breakpoints are never inserted
into the program. Instead, each consecutive PC is matched against the
breakpoint table, and if a breakpoint is set at exactly that address,
the single-stepping will stop. This usage of breakpoints is entirely
safe and works under all conditions. It can, of course, be used for
ROM as well as RAM programs. The drawback is execution speed, although
the [-] stepping variant is usually faster than the [+] variant.
Graphics and other CPU-heavy applications take seemingly forever to
run. There is no simple solution - you must take the 7-nybble limit
into consideration when writing such programs. Insert NOPs at places
where you know you will want to insert breakpoints.

   The [-] single-step does not follow CALLs. It leaves control to the
subroutine called and lets it run freely until it returns to the
caller, which is the MLDB. It then proceeds with the next instruction
in sequence, the one following the CALL. Time-consuming functions like
graphics routines can be placed in separately debugged and verified
subroutines, and the main program calling these routines debugged with
[-]. This will generally give acceptably quick response.

When during [-] step single-a subroutine that is allowed to run free until
it returns, encounters a breakpoint, the program halts. The return
address _into_MLDB_ will be on top of the return stack. Pressing
[EVAL] to continue at this point will cause the subroutine to continue
running free, until it again reaches a breakpoint, or returns, at
which point it returns to MLDB and continues its [-] single-step. The
subroutine can also be single-stepped when it has run into a
breakpoint.

									13.


MLDB Server Modes
-----------------

User flags 32 and 33 control the MLDB mode:


			  Server,	 Server,
		Local	Interactive	Protocol
	------------------------------------------
	  32	Clear	    Set		   Set
	  33	Clear	   Clear	   Set


   The normal mode of operation, as described in the previous
sections, is Local mode. The other two modes are referred to as Server
Modes, and are the Interactive Mode - commands (see Server Commands,
below) are entered on a dumb ASCII terminal or emulator, with full
editing (see Server Command Entry, below) - and Protocol Mode, in
which the same commands are accepted as in Interactive Mode, except no
prompts are printed and commands are not echoed during reception. The
Protocol Mode is intended for specialized MLDL Server Front-End
Software (FES) - refer to the manual of the Server FES in question for
details.

									14.


Server Mode Commands
--------------------

   Commands can be entered in response to the ``*'' prompt in
Interactive Mode, or whenever suitable - they will be processed
sequentially - when in Protocol Mode. Generally, excessive input is
ignored, as are unrecognized commands or commands with invalid
arguments. Commands of up to 40 characters can be entered.



	= <addr>	Set the PC to <addr>.
			<addr> is in the range 00000-FFFFF.

	+ <offs>	Add <offs> to PC.
			<offs> is in the range 00000-FFFFF.

	- <offs>	Subtract <offs> from PC.
			<offs> is in the range 00000-FFFFF.

	n [<n>]		Advance PC forward <n> instructions. If no <n>
			is supplied, the PC is advanced one
			instruction.

	s [<n>]		Single-step <n> instructions. Same as the [+]
			key in Local Mode. If no <n> is entered, one
			instruction is stepped.

	S [<n>]		Single-step <n> instrutions, but don't follow
			CALLs. Same as the [-] key in Local Mode. If
			no <n> is entered, one instruction or CALL is
			is stepped.

	c		Continue free-run execution until the program
			completes or a breakpoint is encountered. When
			the program completes, ``Exit'' is printed and
			MLDB exits.

	t		Terminate. Exit with current registers.

	T		Terminate. Exit with system registers set up
			exactly like when MLDB was first invoked.

	R		Reset.

	r		Print registers. The HEX/DEC mode is printed
			as ``HD:0'' or ``HD:1''. A zero means that HEX
			mode is active, a one means that DEC mode is
			active.

	i [<n>] [<addr>]
			Print instructions. <n> instructions are
			printed, starting at <addr>. The first
			argument is always <n> and the second is
			<addr>. If no <addr> is entered, the current
			PC is assumed. If <n> isn't entered, one - the
			next - instruction is printed. <n> and <addr>
			are both in the range 00000-FFFFF.

									15.


	x [<n>] [<addr>]
			Print memory contents. <n> words of 16 nybbles
			are printed, starting at <addr>, each on a
			separate line. The first argument is always
			<n> and the second is <addr>. If no <addr> is
			entered, the current PC is assumed. If <n>
			isn't entered, one - the next - word is
			printed. <n> and <addr> are both in the range
			00000-FFFFF.

	z		Print the return stack - the RSTK.

	db <n> [<addr>]	Set breakpoint <n> at <addr>.  If <addr> is
			absent, the breakpoint is cleared. <addr> is
			in the range 00000-FFFFF. <n> must be in the
			range 1-8.

	hb <n> [<cntr>]	Set breakpoint <n> counter to <cntr>. If
			<cntr> is absent, the counter is set to 00.
			<cntr> is in the range 00-FF. <n> must be in
			the range 1-8.
			
	lb		List breakpoints.


									16.


Server Command Entry
--------------------

   In both Interactive and Protocol Modes, input can be edited,
although no echo or response can be detected in Protocol Mode. The
following table may be of help when you try to locate the editing keys
on your keyboard:



	Backspace, Delete, 	Erase the last character entered.
	or Rubout

	Control-W		Erase the last word entered.

	Control-U or		Erase entire line.
	Control-X

	Control-R		Rewrite input.

	Return, Enter, or	Execute command entered.
	Control-M


									17.


Exampe, An Interactive Mode Session
-----------------------------------

   We invoke MLDB with #3223, the address of the SWAP PMC. We pass two
arguments to SWAP - 1 and 2. First, we are greeted with a header.

	MLDL 1.02
	Copyright (c) 1991 Jan Brittenson
	
Let's first take a look at the SWAP PMC:

	* i 9
	MOVE.A @D1,C
	ADD.A #5,D1
	MOVE.A @D1,A
	MOVE.A C,@D1
	SUB.A #5,D1
	MOVE.A A,@D1
	MOVE.A @D0,A
	ADD.A #5,D0
	JUMP.A @A

Then the registers:

	* r
	CY:0
	P:0
	PC:03228
	A:0000000644403223
	B:0960000000074FB3
	C:0000000000075FBB
	D:0000000000000335
	R0:000000000007BCA5
	R1:0000000644403228
	R2:00000000000505C6
	R3:0000000644400001
	R4:00015074EE274F20
	D0:7C1A5
	D1:75FC0
	ST:000
	HST:2
	HD:0

So stack level 1 is at 75FC0.

	* x 1 75fc0
	75FC0:ED2A29C2A2000000

Which is object 2A2DE.

	* x 2 2a2de
	2A2DE:3392000000000000
	2A2EE:0002033920000000

   Which is a real (type prefix 2933), the constant 2. Let's step a
few instructions.

									18.


	* i
	MOVE.A @D1,C
	* s
	* i
	ADD.A #5,D1
	* s
	* i
	MOVE.A @D1,A
	* s
	* i
	MOVE.A C,@D1
	* s
	* i
	SUB.A #5,D1
	* s
	* i
	MOVE.A A,@D1
	* s

Now, what do we have left?

	* i 3
	MOVE.A @D0,A
	ADD.A #5,D0
	JUMP.A @A

   We step a goodly chunk of instructions. That way we can be sure
that the program completes.

	* s 100
	Exit

   We're done. The HP-48 stack now reads "2" in level 2, and "1" in
level 1.


									19.


Some system considerations
--------------------------

   The debugger has been designed explicitly so that it will not alter
any static system data or depend on the precise machine configuration.
The only system data it modifies is the keyboard buffer, since it
relies on the system to respond to the keyboard interrupt and manage
the buffer.  Testing has shown that interfering with this results in
poor reliability. Still, there are two instructions the debugger will
refuse to single-step:


	RESET	
		The effect of this would be the same as ON-C.

	CLRB #F,ST
		Executing this instruction would lock up your calculator
		since it would disable all I/O most notably the keyboard.


   Apart from the aspects outlined above and some system RPL code to
do argument type checking, the debugger is self-contained.

									20.


A word of caution
-----------------

   The [-] key lets you complete an entire CALL. But beware: the
return stack is replaced by one that will cause the called routine to
return to the debugger. Therefore the routine called cannot rely on
specific return stack contents, or remove return addresses from the
stack, either of which will invariably result in a system crash.
Fortunately, this appears not to be standard practice in the HP-48
ROM.

   Despite the effort put into avoiding system collisions, the HP-48
will still remain a largely unprotected system where the debugger - or
other parts of the MLDL - can still be overwritten, which may result
in memory loss. Since the MLDL is stored as a library in a port, it is
not susceptible to general memory allocation, such as dynamic memory
allocation or system display GROB allocations.  On the other hand,
storing another library in the same port may cause it to move -
extreme caution is therefore advisable when single-stepping PMC that
alters stored port data. If you are stepping a port store block copy
by means of either [+] or [-], then the MLDL may be overwritten. If
you're using [-] to call a block copy routine within a similar
context, then the library may have moved and the subsequent return
will cause a system crash and possibly memory corruption.

   Single-stepping a machine code program is in no way less dangerous
than allowing it to run uncontrolled. It merely gives you some control
over what happens between instructions. It can even be more dangerous;
hardware may break if left in certain configurations for a period of
time, which may be a fraction of a second. So if you are going to
single-step parts of the system ROM, you should be aware of this risk.
In no way will the author or distributors of the MLDL accept any
responsibility or liability for such damage, regardless of its nature
and extent.

   The MLDL is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

									21.


[MLPR]

   Disassembles and prints ML programs. Accepts the same arguments as
MLDB, except @#3a81 and #3ac0 which are not recognized. The program is
printed to the current print device - IR or Serial. In case of
problems, first check your PRTPAR - see pages 602-611 in your Owner's
Manual Volume II. Page 611 explicitly describes the PRTPAR. Each line
consists of a mnemonic preceded by the address. No opcode is included,
since it normally is of low interest. Use ML1 (described below) to
build your own custom disassembler.



[ML1]

   Disassembles one ML instruction; allows you to build your own
disassemblers with special-purpose user interfaces. It takes a binary
integer in level one, and returns two values; in level 2 the mnemonic
form preceded by the address, and in level one the address of the next
instruction. Thus it is a simple task to make a number of consequtive
calls to ML1. MLOPC can be used to extract the opcode as a string of
hexadecimal digits. Extract The mnemonic from the string is trivial,
since it will always be of the form:

	"xxxxx: m"

where xxxxx is a five-digit address followed by a colon and a blank.
The last part of the string, m, is the mnemonic.


[MLOPC]

   Returns opcode as a string of hexadecimal digits. Expects two
binary integers - the first address in level 2 and the final address
plus one in level 1. Useful for creating the opcode field in a custom
disassembler. Example, MLOPC:

	#59D1 #59D7 MLOPC  -->  "8E4CD0"

The opcode size is limited to 255 digits.

									22.


MLDL COMMAND SUMMARY
--------------------


|-----------------------------------------------------------------------|
|									|
| Version	Returns version and copyright strings			|
|									|
|				--> "version" "copyright"		|
|									|
|-----------------------------------------------------------------------|
|									|
| MLDB		Saturn Machine Language Debugger			|
|									|
|			obj	--> any1 ... anyN			|
|									|
|-----------------------------------------------------------------------|
|									|
| MLPR		Print Machine Language Program				|
|									|
|			obj	--> obj					|
|									|
|-----------------------------------------------------------------------|
|									|
| ML1		Single-Instruction Machine Language Disassembler	|
|									|
|		      #address	--> "instruction" #next			|
|									|
|-----------------------------------------------------------------------|
|									|
| MLOPC		Machine Language Instruction Opcode			|
|									|
|	   #address1 #address2	--> "hex digits"			|
|									|
|-----------------------------------------------------------------------+

									23.


MLDB LOCAL MODE KEYBOARD SUMMARY
--------------------------------

	Screens		No ARG			ARG

	[A]		General CPU State
	[B]		Arithmetic registers
	[C]		Data registers
	[D]		Return stack (RSTK)
	[E]		Memory dump
	[F]		Instruction stream
	[MTH]		Breakpoint table	Breakpoint table

	ARG entry

	[0]		Begins ARG entry
	0-9, A-F	Hex digits
	[+/-]		2's complement
	[<==]		Shift right one digit
	[DEL]		Cancel

	Moving around

	[ENTER]		Ignored			PC=ARG
	[left]		PC=PC-1			PC=PC-ARG
	[right]		PC=PC+1			PC=PC+ARG
	[up]		PC=PC-16		PC=PC-16*ARG
	[down]		PC=PC+16		PC=PC+16*ARG
	[x]		MARK=PC			MARK=ARG
	[+/-]		MARK <-> PC		MARK <-> PC
	[NXT]		Advance one 		Advance ARG instructions
			instruction

	Breakpoints (b = 1 - 8)

	[MTH]		Breakpoint table 	Breakpoint table screen
			screen
	[PRG]b		Clear breakpoint b	Set breakpoint b at ARG
	[STO]b		Clear breakpoint b	Set breakpoint b counter
			counter			to ARG

	Program execution

	[+]		Single-step one		Single-step ARG instructions
			instruction
	[-]		Single-step one		Single-step ARG instructions,
			instruction, do		do not follow CALLs.
			not follow CALLs
	[EVAL]		Let program run until	Ignored
			completed, or until
			breakpoint

									24.


MLDL XLIB TABLE
---------------

   The command numbers are subject to change at random and without
prior notice. The library number is 444 hexadecimal, which is 1092
decimal.


	Command		Number
	----------------------
	Version		1092 0
	MLDB		1092 1
	MLPR		1092 2
	ML1		1092 3
	MLOPC		1092 4

 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \


						-- Jan Brittenson
						   bson@ai.mit.edu

bson@rice-chex.ai.mit.edu (Jan Brittenson) (04/30/91)

   I don't have enough memory to ASC encode the MLDL, and the various
programs I have picked off the net to do this under Unix either
corrupt the output or core dump. I'm sure Wayne Scott will make it
available from his mail server in other formats.

						-- Jan Brittenson
						   bson@ai.mit.edu

 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \


begin 644 mldl
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
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
'       J[   
 
end



 O  /
  \/
  /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 O  \
						-- Jan Brittenson
						   bson@ai.mit.edu

bson@rice-chex.ai.mit.edu (Jan Brittenson) (04/30/91)

   I failed to mention that the size of the library is 9404 bytes and
checksum #E8Bh (#3723d).

						-- Jan Brittenson
						   bson@ai.mit.edu

jmueller@umaxc.weeg.uiowa.edu (Jim Mueller) (05/01/91)

I've seen Wayne Scott's mail server mentioned a couple of times now. How
do I get to it? Does it have an internet address? Thanks.

 


--
|Jim Mueller								     |
|Internet: jmueller@umaxc.weeg.uiowa.edu                                     |
|The University of Iowa                            			     |
|"Many truths we cling to...greatly to our own point of view do they depend."|

akcs.falco@hpcvbbs.UUCP (Andrey Dolgachev) (05/01/91)

Could someone please ASC-> Jan's MLDL and put it up on the board,
please!  Thanks in advance.
     --Falco

cloos@acsu.buffalo.edu (James H. Cloos) (05/01/91)

Here is the mldl library in ASC format.  I've confirmed that asc2bin
returns a binary that differs from the one Jan posted ONLY in the header.
(Jan's header indicates version X, asc2bin's output shows version C.)
Everything else is identical.

Here is is:

-------------------------------------------------------------------START
%%HP: T(3)A(R)F(.);
"04B2037940A0D4C444C402FD13E20323A04444100000000DC00000000E4A20EB
0000000000000B40001500066000000000000000000160000000000000000000
00000000000000000000500030D4C41330040D4C4442410040D4C4052520050D
4C4F40534400901424F45545D4C444C40007100054000D3000A5000A3000E4A2
0C3000E3000F640070400C13001530096200A050052100A51002E00029100844
4000D9D2051A81A6405C2A20B20000202028405D2438302D4C444C402FD13E20
323ED2A2BA041C2A20B200002020234F607972796768647029A0213939313803
A2BA041C2A209200002020202A416E602242796474756E637F6E6D13A2BA0417
43A2BF241B21308444900CCD20D20008F146601008FB97601301421018F92560
8DEB1708444700CCD20E2000143100818F09101174E78FB97608F925608DEB17
08444800CCD20630008FB976014713517931F5AE5310214D171B66A6D53F8D34
1508444A00D9D202BF81D5040D9D2030A5029E2044490030040B213052140300
4061DC1D9D2029E204447009FF30B213058040D9D2099E70442302BF8161DC1D
9D2029E204447009FF30B2130B2130FEF30D9D208DA16D004071040B2130B213
08444500CCD20D90008F146601038FB976081B434DB440C2135061131308588E
ECC007133EA06D613210410B8FD7B50136DA1350713411B1038FC0760113818F
898F2D7608F662458FB976011C1088E95A08DA0D818444300D9D20ECE81D5040
D9D2030A5029E20444500CC950B2130B21308444400D9D20FDE81ECD46D9D201
D3F4CCD20D70008F146601008F146608FB9760D606118E24F48AAA406DAD2BEE
8B6C3D6C684A8FD7B5013610C13507DA078EC582114818F898F2D7608D9CE608
D7AC81B2130B21308444200D9D205AA8129E20444A00A9226A21702BC81B9F06
2A17029E2044450032230EF813442300CA308C17085230B21308444100D9D205
AA8129E20444A00931409DE3630040FEF30F21409DE36D9D20FED306C51373BE
22B505B2130D9D20FD5508DD46C1C1629E2044480000D1142D46ADB46323B4FE
F30FEF30250F4B21303223029E20444600B21308444600CCD201434072E41361
088F1466010314713717917913710A174E78F14660304906F01181348DEB170A
0E696090636D913618414213606132DA0614234CCD208A2F01181348D7BC8116
4146132164CA136109071341320713614413011964108F146601018F146608EF
EC27A30110132709613072C211314875C216111A1441198EFA138518EF4426EC
007DA8C1CD21BBE407152418015649422280DFB46154413680980920134D014A
02D00371CF4001BE010030815C08081080730C15C06BDFA0D4C444C40213E203
23A034F60797279676864702823692021393931302A416E602242796474756E6
37F6E6A0A0007AC1860B181B58082459FFFCA8548E82E3786074A1860718E128
08E775353F8C4B538E42228E6080762F678081B43498F30C21350381B434AEF3
0C21350381B434A1040C21350378DF84A8EF24274A113074CF84879D71361087
5CF7881118E2550AE214D1711181451740914D01AB881B43493000C213415231
62938F1930801635BED015A3136C284181B36D0F1001622200C922300C922400
C922500C922600C922700C922C00FC0001041102105F00B0083101107110F200
41013047C2C2047C2F00AA307200410A104510C10F910D10D810E200760810EE
109102D108007120E00B7200007900D214E0A03D60681B4341FC30C213407DA0
1D60681B4347FD30C213507DA01796E1711478CCBE27CEF7F36571CE4218AAD0
144735E63EF62ED06729F16814207017F06460D2E671EFCA1406ABD77F5460D2
E679CFEA14062AD7FD5460D2E671BFF2CA140688D75C5460D2E6779FF2EA1406
E6D10081B43422D30C2134110037395570DA420746F74DF1406F3D78755B0FA1
446B35754F75BF1461408E9CD2631D7710CCD20070008E0C8278515B20703713
55026445762556062EC727271238DEB170747E860F17C0054879647A00007DA8
548EECA375BB7CE28D0313077D4460639C8EB3D2658C76DB318196260687C7BB
280A7EBBD67FC35008AAD080820898600037DDF460674C1088E276281AF10CC8
E6762136C213571644D0AF215DD661C14517481B4345A000CA318F15D1171141
174AE214D205FC727F4606CDBCE1087014440D21098E9F521108E2062136C213
416B11914C67AB8E5D52307A8514616415A613515F615C61596168A0D50E0307
DA0714517481B28EE17207818FA61088EEFB281B4344AA30C2135071451747DB
F79BF75BF71BF7DAF79AF75AF717F1187F3055116B14EB6614C808B71163FA70
335606CEA714F7EFC1038ECAF21138C9A721088EDF42307A851181428A20016D
A0D51F03D60681B4340CA30C2DE07DE0173EF136144164137135144164D91441
64DB144017BBF13416E146D7184146D51841461351841461340181B4346D930C
2135017AEF07DA077220077C10077610077010077A0007740081B2145174011C
4147017AAF17F17D07DA76EF0670EF067ADF0674DF067ECF0678CF0681B21360
6726B344920077000713401AF081623150716FA1E91E3F80DF0D460150120018
1B43478A30C2134D215E1132130161132CA1320381AF087DCF81AF20140818F2
481AF2013015C1017BAF818FA440013215C11321841460381B434F0A30C21341
460110874EF110F2C2144038EA5A11333407700C21340175EF34011006D1FE29
2A2B2425262F102121020304050600681B434ADFFFC2134AC20714A161962A0B
4651F03D2812028E33D18ED4D1317479D58CB1D1751A84A8E1EC1780A71DF7E2
F8E7AD18EC5A170F913713480824077008CF091734F700FD214418030115C076
AF8EE37F101D67C4F5907CEE55E111698879CE180AE215C00179BE180D015A01
608AC0001F61446FAF13710913613410A10C81B434C2600C2135D014B80847D8
133131C817115F017080D0157115210E121378091371531912B0D91356ABF136
10A137809137200B14F1710A1371341291358687111A8EC7C18E7CB18E68B1D0
14A808776116131029E2E078D263EF6A217321D8C4C881B434C2000C2C9136D0
15A2136C285B780075F069AF81B30609B03B08B0FE09E0EE01C2341D31FD2752
A72E825226246141345D4F23F73D12470E606C0A21260734624F941C4FC47980
AE215E0160A66F214A161808675F15E080D0136E680980913616120D0F6AEA13
6C2134624001160160160160160017A00136C2136017A10D014A16184780867A
08578084712A13612A01180180017BCF136E213601740065D075BFD680D00DAF
2156113680913620017CDF1000B060BAF0758FA7C1200B070B0184B77DF120A7
21208676060206670D215E01607D4FCACC709F6D5080887AEA31A09E2F0B6A31
138E88913103A628CF7910313233343536373839314243444546481B434CDFFF
C201AF7AE813610871EF134A6DA84817A0C59F86BA031327802813D0A8BA8A72
107C60A0D59E11813401C4136134C2136D014A1340115A081900670015A01603
1348087280A6EA6E6AA131257F913103AE015A016080843A6A149171013114AE
015A0160808426CDF31447261310315A01608086050B666C4185A66200510208
535D42475F3F3F3F3F3F3F31484A13613410881B4340DFFFC2D015A013486A70
808437B0FCC8A8C1CC8A812E4E4735F11813416001317579C062DF3185818603
6DEF7ACD7710110A72114C2D0818F04646EAFE80D00D308982E0AF2BFEAFEA9A
AF6200185D435243525D40515A016013606A8881B434DDFFFC213431B57D30A8
480860F115E315D3173808409087131C276101638190090C1D0713431D514D17
10112020123012301231202D015A01600171FF80842670074EF8084331C06F20
310C7FCF808428084369107DBF81808362DF31807BAF10813610910381B43478
FFFC2134118F6771031C2726F118780011913401D1A85136134C9113C2136AE0
15A01363114A626C2F39D4F46554E215D9179013935751405E26AEF352554451
5D51750135E214026EEF791FF00A0E135544585D420D81FF01A0E120591FF02A
0E13554453420591FF03A0E134C4253420791FF040035544584548520791FF05
0035544544543420791FF068005553584F13420591FF078005F405F13420B91F
F080034C425E28502354520991FF0900D185023545C23420E81FF0A00D100199
1FF0B0021850234C2354520091FF0C0094E4002991FF0D00445434E213020520
F81FF0FA0E19420693FF080E000014E444002B93FF080E0800F425E220A002F0
092FF010000D1001B92FF01200021750220E0C240B0B92FF011000D1750220B0
C240E0092FFA13000D1001B92FFA132002114022051C240D0092FFA13800D100
1B92FFA13A002143022051C240D0292FFA14000D114002D92FFA14800D124022
051C20440D0292FFA14200D114002D92FFA14A00D124020420D0C24051492FFA
15000D161A00055A2FFA15800D161901020025051C20440D010492FFA15200D1
61A00055A2FFA15A00D161901020020450D0C2405110291FF1700144444003F9
1FF1C00355524F120801020C24413291FF1600144444003F91FF1800355524F1
20801020C24403B91FF1900D12302208120C24403B91FF1D00D12302208120C2
4413B91FF1A00D14302208140C24403B91FF1E00D14302208140C24413B91FF1
B00D15302208150C24403B91FF1F00D15302208150C24413790F200D11302108
110C205F90F300D1051090182002409120C2345A3FFFF808200D105719018200
2409120C214792FFF400A0255445343561792FFF500A0255445343461290F481
24253435004990F581242534340210312020D90F681A455D405E233021031302
0D90F7903414C4C4E2330210313050592FFF42000E4F4053361793FFFF630000
E4F4054371994FFFFF6400000E4F40553A1892FFF80000F45545E235005B92FF
F80100F45545E285023461992FFF8020094E4E243021461992FFF8030094E4E2
43023461992FFF8040055E434E4647461992FFF8050034F4E464947461B92FFF
80600D114029444C23461992FFF807003584554544E461993FFFF80800094E44
5F4E471794FFFFF80810A0253594A1993FFFF808300245535342471693FFFF80
880034C4250031A3FFFF8089003554452402718110C234693FFFF80840034C42
50031A3FFFF8085003554452402718110C214E95FFFFFF808600A02554452434
0059A5FFFFFF808700A0255445243502718110C21420893FFFF8086812425243
40049A3FFFF8087812425243502718110C214C2312060893FFFF808A81242524
340049A3FFFF808B812425243502718110C234C2312060E95FFFFFF808A00A02
5544524340059A5FFFFFF80B600A0255445243502718110C23420993FFFF808D
00245535344471D93FFFF808C81A455D405F1041471D93FFFF808E81A455D405
F1043471B93FFFF808F0094E445F4646471F92FFF80900144444F105B213C234
61792FFF80AC0255435544561792FFF80B00245535343461592FFF80E0035255
41561092FFF80C00D10011A2FFF80F0021130205C234E2619018101A2FFF80D0
0D1130234E261901810C205292FFC8100025C4002B92FFC814002525E4E27502
20C0894FFF088180000144444003DA4FFF088180800355524E261A0021080102
0C250C010B92FFF81900352524E261A002C0494FFF0F81A0000D10011A4FFF0F
81A02002161A01002E0C240B01A4FFF0F81A0100D161A01002B0C240E0991FF8
100352524E2752002C0B93FFFF81B281A455D405F11471B93FFFF81B381A455D
405F13471293FFFF81B481D1001D93FFFF81B68121140214C2053471293FFFF8
1B581D1001D93FFFF81B7812114020534C21471F91FF820034C42524022041C2
8435459A4FF0FF82000A02554452434022041C2843545207A1FF838124252434
022041C2843545C2312040E82FFF84FC0000291FF840034C425003F91FF85003
554452402208110C23545C94FF0FF86000A025544524340059A4FF0FF87000A0
255445243502208110C2354520491FF8681242524340047A1FF8781242524350
2208110C23545C2312040C94FF0FF88000A0255445E454005BA4FF0FF89000A0
2554455415E2130205C220811020491FF88812425E4540049A1FF89812425541
5E2130205C2208110C2312040C94FFCFF8A000A02554455415005C94FFCFF8A4
00A0255445E454005C94FFCFF8B000A02554457445005C94FFCFF8B400A02554
45C445005C94FFCFF8B800A025544574540051A4FFCFF8BC00A0255445C454F1
201120894FFCFF8A800A02554450041A4FFCFF8AC00A0255445E4A5F120C020C
94F8CFF90000A02554455415005C94F8CFF90400A0255445E454005C94F8CFF9
8000A02554457445005C94F8CFF98400A0255445C445005C94F8CFF98800A025
544574540055A4F8CFF98C00A0255445C454E21070021120894F8CFF90800A02
554450045A4F8CFF90C00A0255445E4A5E2107002C020692FFC8A08124255415
004692FFC8A4812425E454004692FFC8B08124257445004692FFC8B4812425C4
45004692FFC8B881242574540041A2FFC8BC812425C454F12011C2312040292F
FC8A88124250031A2FFC8AC812425E4A5F120C0C2312040692F8C90081242554
15004692F8C904812425E454004692F8C9808124257445004692F8C984812425
C445004692F8C98881242574540045A2F8C98C812425C454E210700211C23120
40292F8C9088124250035A2F8C90C812425E4A5E2107002C0C2312040F91FF8C
81A455D405E2430220314030F91FF8E903414C4C4E2430220314070491FF8D81
A455D405004991FF8F903414C4C4F1208150C81FCC000000C81FCC400000591F
CC800144444F110B1591FCCC00445434F110C0E82F8CA0000000E82F8CA04000
00B92F8CA0800144444E2107002B1B92F8CA0C00445434E2107002C0591FCD00
034C425F110C0C81FCD400000391FCD800D1140210C1391FCDC002114021001B
92F8CA800034C425E2107002C0E82F8CA8400000092F8CA8800D1001592F8CA8
C002110700201C81FCE000000591FCE800355524F110B1591FCE40094E434F11
0C0791FCEC00355524E4F11001E82F8CB0000000B92F8CB0800355524E210700
2B1B92F8CB040094E434E2107002C0D92F8CB0C00355524E4E210700201291FC
F00035C4E4003291FCF4003525E4003291FCF800E45474003591FCFC00E4F445
F110C0492F8CB800035C4E4003492F8CB84003525E4003492F8CB8800E454740
03B92F8CB8C00E4F445E2107002C03900000B302F3F3F310087180137C213711
810913610A307A8581531A0AE511A13414E1617260AE60614E161735007C4C4F
00E6E1592172A6D50D111D23109C2109170A4D5CA1337700137EA011F5650714
71351791790184984B808A05085B808A7A085980887D0AEA3102B6A540D0D6C4
CA819F0119C2E613615A0180BE087B72808468084715A013686900BEC8084680
8470115A08196081960136879DD018C88FD8CC9FD207EEF161146108017BEF30
7A878177A70134146134D0104D015A213610BC206ACB812109707079AF85A032
07090119816AC781B434E2D10C21341147D4E1143401100C210C11B134162A4F
5890181B4342FC10C20181B434D9C10C2134017C101197C1011A751011B7E001
1C6A007ACF118144164017E107720109702010A791010B721010C01799F75001
080114616401D20681B43446000C213407DAC4136C2134D014AC2067A4F13407
144871008C86CDD2E65BBD2E656FD2E656FD2E656FD2E656FD2E656FE0124374
A50768EE4052CF2D935D33349449D4B32113533D335434344C4622443753B53F
53363FA4112B80534974484F84825C35935465335035D25A257E10A56B53B50B
5DA5AA57A5FF5766C66176676B76086586370202020215D71770133020215D31
7301310214D171038C9E8E7BDF74CF70CF7CBF78BF74BF86A006BCD310464DF3
1A36CCF311464CF31246CBF313464BF31446CAF312564AFAEA3103A62669F808
210196800A6CD7AE81361088E816E134DBE7136D015A01348EE56E8E6B6EA6D5
0E118134018082101AFEACB109AFE84B8EED5E119AC70180821506BDF8082130
60DFAFA91EB02031025B1A065F0B982031D269002031B27EDEAF6032177CF808
21206C8F312570CE313578BEB6664BE318479AE75EF70DE81B41B85910136C21
3615E2D0E4664F7DAE146685F7A9E7E9E78FB1681467F3F715E1803105725E7D
7E15E07CBF180733E15E0F2F23102808A8603134742E81B434CD810C213415E0
F2F23184808A860314479FD79ED713F7C1E18315E27BCE72DD6CCB81B4344F71
0C2134017BFD76EF7A3F7CAD7BFD16F16F782F787D747D609B71DDD2F2D57FBD
72BFC91341567793E7D4D696B72BDD2E656D7FADD2E652F7CADD2E652FD077AD
D8D677ADD9E668EFD0E457ED0E456FD0E456FD0E456F7F5D724F16F739E750D7
C5D16F16F718E73FC7A4E7BEC65EADAC6C6C201D2DA703D3103A6276DCD67DDF
10978FC81B58082437710CA119C2134146134758D31F27F9C15EB80821C0715D
708C6A7AD2E65C981B434A3710C21340173AD76EF71ED1647ADD16473DD754C6
F3AA827B0030474006D2A816D2812108746D77AF1187E2F132CA1323103A627E
0C788D6DFB30174CF30568BF30276BF3066AAF30378AF3076C9F8EC77D134114
7E287D4A1143401100C210C119A0E109720A7B3984A77AB70397D8B1371088EC
09D1308EC37D14B9682112813513613470EB6A59D60681B43468610C213407DA
018E7C8DF4818F83F072DF14084378CF146818F2F1441347BFB784B1367F7B87
3006BF88537ECF8EB78DD2A86B8EE6C6133EA13114F8089714D6BC8786831511
4B80857149171A6E5EE018E438D794F14070107DCF649874006C881371350684
A719A07135171771F1461348E53ED132740F1400181B43446610C213403D6C4C
AC4CAC401D210884A714A8E667D1711103113A62742A7F4A75BF11070CF136C2
13414610B71EA17116BD214E7B1B11B8EA67D8A660790F8CFC7FD2E6629FD2E6
65FFD2E665FFD2E665FFD2E665FFD2E665FFD2E665FF81B434EF310C21350115
5717F0381B4343E310C2135118155717F119155717F11A155717F11B155717F1
1C155717F0381B434F9310C2135157717F108157717F109157717F10A157717F
10B157717F10C03157717F03D60681B434DA310C213407DA030609F280C020F2
540E60613606840832508503190B662184190A50851042081B51BB4310132CA1
320714416413714481B51B39210132CA1320715C0F616015C0F60681B51BE031
0132CA1320715C2162A8286080B06B0615C0160A8286150B0615C081B51B4321
0132CA1321507AF416F150716F07154716FAFB15476C5ED60681B4348F110C21
3407DA03D6067B7E81B434AD110C2134152716F1567AF516F16F1567AF718F15
67063407000132CA1321460616414613516415E20A163AE215E018096A400515
E0819028228190218C18F18F18F18F18F18F18F18F18F18515E080D0180AE215
E096E2007134070181B43437310C213415630376EF091543037ADF0A03841660
08518428E56AD5018528AE808C812D74CF8E6F4D818F298EB14D8A6808C725D8
E552D8EF83D860F08F982134C15318F889405F08FE8D008CEB1D7A7F8E1D3DD6
8EDD6D50216B14EB6614C862F0808B7808CB81D8E2A3D1308E2D1D14F96E808C
271D17615B280873D610881B4346D110C2D5135118808A4511527151716F17F8
08842090AB180D00D1521151113780913520310114DD477DD7DBC6B7281B2AE5
AB6AB781B43455000C213515F080D0170152115710E121378091371531137809
137172916DC1C220D015B2137C281B31FF00E611FF016611FF022711FF037711
FF068811FF07A911FF0FE310F43B30F5DF30F65421FF8CD120F7C031FF8EED21
FF8DDF11FF8FF323FFFF808CED13FFFF808E4C13FFFF8086F143FFFF80873143
FFFF808A7043FFFF808BBF33FFFF81B2D713FFFF81B3D113FFFF81B4EA23FFFF
81B59B23FFFF81B6AC23FFFF81B7BD21FF83B341FF863341FF87B241FF883241
FF89B141FF8A3141FF8BB040F9504000604D781B41B00E00136C2136DB144030
68E0E0D1660715C00370F30777CF8528436B44A82B067FCF51EA8275CF57D7DA
B16F16F146037DEF1087FA3118068428436B0473DF1361087293071101301448
4284368E370BF725F8EBD6D531CE4E08AA901446A7C8C18EC8EBB6D591CE4418
AAF01448EE40D645C8EB86D8C250D7D0B14668AF715F1341466A9F74FA1466EE
F161146658F161136134108AF215E37DD2110C2656F160136134108AF215E276
B2110C2654F16114681AF0B779B861358E9EFCD68EA74D8EA12D7E82113798A7
F6907108071090710A8E6F1D11A06119061180684285360C211B7B2E8EACDC17
11471087B32118068528436792161136134108AF215E37E02110818F03C2645F
160136134108AF215E271E1110818F02C26E2F8EC5DC1717BB9147144675E8E5
4DC17174A916F16F1471446A3E8E82DC17177891471421411446D1E8EB0DC171
7A6916F16F5CD853160AF214E10B7C41132C2068EA3EC16615E0873B090AB062
FD90A9F11B96E60624D077A0D67BD8436FAF81B4347CC00C213510A81B434BAC
00C213614A136AE6808A4011527151716F17F90AB180D00D1521151113780913
720310114D1C1038547E8F843D214F10B96E50853AE214D091098ECAEE112778
88EB67F208E6CEE1190A8ED4DC16615E090E606A0D11B8AE606F5C72301098EC
8DC119C2818F2286460E6E6780C65BC8446F6F8C64BCD0E4E48CF28DD0E451FD
0E456F81B4346AA00C213407DA14606184146061841460618414606184146061
8414606184146061841460618481B207DA0714416481B281B434B1A00C213407
14416474DF70DF7CCF78CF74CF70CF7CBF863C08E361D723B872606AFB66DB8E
61CC8438715085385231D01088E22CC7600A2020007808248200074C58AE0001
8EC52D8E5FBC7EA0AA114BAE81717E907F80D305510B203610D20A710E609A10
C602900460B90086099002600D402617A402621B403708810350191036047004
709700450E7002503800270E710A700B209601330870DA30000071348C14AC31
0214B968009E6001715FE20AA280F2AA5613F215FE225AE8ED61D8C74EC8E161
D8CA3CC8E551D8C93CC8E941D8C19CCAF1AE53103B6140031909EDB13113B614
0031509E10081861903776FAF084014F96A0076BF400171BF0A7085064EF73DF
86080D678598C5A8C7EBF8603F1008ECAAC118C21446FDF70AF8605DF86FDF71
9F860001008EF5FC18030F15C0160118144038E770D7FCF8CA3AC8E760D7FBF8
C9F5F8E750D7FAF8C0F5F739034950070005008000534009041400E0F2400E1F
3400E2F4400E3F250300E4F251300E5F252300E6F253300E7F254300E8F44030
0E944413003A43545008A284354500BA0844400CA0000710B11B13414A96C606
BCEDA7D85777011B13414E16196E7FD014A16115E010816013610B8EBE8C136C
2134156710A8E0F8CAE081A010B6411A8EB6CE33A00015D38EBC8C1338547615
607F31A37F65038E482F13610B310310A307A878177A00253545B40007DA76D4
112AE6B6481A60278257DAF8E468C11B13416413610B1468E9FBE33A00015D38
EC38C1337A84A4F5A968BD797D870C0D0E41025518AC40E41027C5D870808ED4
8C10311ACE5606D7D10A8EC09E11B1348EBD7C8E66EC136068EE19E0710B33A0
0015D38E5B7C13385470044EA76FC870C0D0E41025518AC40E410279DC870808
EAC7C10311ACE5606AFC10A8E467C11B8E80BE8E35AE11B8E88AE33A00015D38
EC37C13311B818F2F10B8547B734CA717C8706063ACAF23089F63FA7C4DEE481
AF030374DF70BC11B8CBD8C73CF7F9C11B8C539C8EB3FE13610B311310A30781
6AC778002405450007DA7EF211A7C5371ED11AB6610A8EF86C11B13416D13610
B1468E42AE8EF69E16B14E8EB5AE33A00015D38E556C13373A2A4F5D861DB8A8
00CC10206133103AF081A610BF0BF0BF0104854863F10706DA7062113D281A31
CEAEA76428F9821348F9683F86281AE88FD31139609080821F38084711CBF6BF
6BF696632863607D5211B135AE214D07D281A31C03AE6AE781B43458000C2135
14F171963E017296EFE6210D215F2133C281B331029EB9031F3AE711B13511AC
E590317043210A81A31CB3681A30CAEB14D1711331038636076C1631F51FA081
AA080601F71012167071A00D0050008477B0085774006CDED281A31C93A0011B
13418114A3102877A09E6215709EAA070B06CCF03863607B0031A0AE76C3F31D
06931863E0312578007911605E0631E57711076411D281A31C93A63113C6EA81
9F2103112CA1028631106761007CE8AE3FAB281A30C6D1E78007C00630031806
BB0310263B0740069FD81A31C93A00A3E81A30C11AE610A11BCECE10B8630060
BF8E9B3C13331618516600841852100109861E0119A6E10940011813414A871A
016196800E6E61088642131A0966907D005FBAE67F0055B31D0740031A08FAC0
1348FAEA862908FD31131B611001480300000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000A2CEB8E0"
-------------------------------------------------------------------END

-JimC
--
James H. Cloos, Jr.		Phone:  +1 716 673-1250
cloos@ACSU.Buffalo.EDU		Snail:  PersonalZipCode:  14048-0772, USA
cloos@ub.UUCP			Quote:  <>

cloos@acsu.buffalo.edu (James H. Cloos) (05/01/91)

In article <15428@life.ai.mit.edu> bson@rice-chex.ai.mit.edu (Jan Brittenson) writes:
>
>   I failed to mention that the size of the library is 9404 bytes and
>checksum #E8Bh (#3723d).
>
Just a note that the ASC'ified copy I posted does have this checksum.  I
can therefore say with complete confidence that it is an accurate
translation, modulus transmission errors.

-JimC
--
James H. Cloos, Jr.		Phone:  +1 716 673-1250
cloos@ACSU.Buffalo.EDU		Snail:  PersonalZipCode:  14048-0772, USA
cloos@ub.UUCP			Quote:  <>

CERVEIRA%ifqsc.usp.ansp.br@UICVM.uic.edu (Luis C. G. Cerveira da Silva) (05/07/91)

1)I want the UUdecoder and ASC-> ->ASC programs, because I am a new networker
and and don't have both of them. I also need, the PGROB and UPGROB. I think
that it's good way to transmit programs, if everybody has the coder and the
decoder. I cannot use the FTP, so..., please email me or put in the net.

2)Someone could help me, explaining what we see, when we press the key ON plus
MTH, SIN, COS, TAN, EEX, DEL ,etc. These are what internal test of the HP48.
My ROM Version is E.

3)Last question: when I try to download the MLDL in ASCII form my HP48, with
*nothing* in the memory, give me the error Insufficient Memory, what I am
doing wrong, or MLDL needs a memory card??

        Thanks, for everything that could be done.


Cerveira
Nickname T.C.

Internet mail address: CERVEIRA@USPFSC.IFQSC.USP.ANSP.BR

TDSTRONG%MTUS5.cts.mtu.edu@CUNYVM.CUNY.EDU (TIM STRONG) (05/09/91)

>
>        In the first place, I would like to thanks Roger for his informations,
>but every time you answer one question, two or more appear, so let's go...
>
>1)when I try to attach the MLDL1.02 in my HP48 (the program is in ML), after
>I turn OFF and ON, the calcl shows an error (WARNING, INVALID CARD), and I
>cannot find the MLDL lib (where is your location, I suppose that must be on
>the LIBRARY menu), but the calc's memory shows that the program is there, even
>using the DETACH, the memory shows the same number. What is wrong ??? Someone
>can help me.
>

First, back up the contents of your calculator. It seems that sometimes
MLDL doesn't load properly.  When it does so the 48 says invlaid card
data and then clears the library.  Unfortuantely it never updates and
frees the memory the library used.  So so far the only cure I've heard of to
get your memory back is to save the entire contents of memory then hit the
dreaded ON-A-F and then load in your backup and restore.  This seems
to bring back the missing memory.

As for why it happened in the first place I don't know.  It happened to me
to but I found the copy on wanynes mail server worked fine...Go Figure :-)

======================================================================
  ___
  I__)  _   _I  _   _   Tim Strong <TDSTRONG@MTUS5.cts.mtu.edu>
  I  \ (_I (_I (_I I    Michigan Tech.    Houghton, Michigan, U.S.A.

======================================================================

CERVEIRA%ifqsc.usp.ansp.br@UICVM.uic.edu (Luis C. G. Cerveira da Silva) (05/10/91)

        In the first place, I would like to thanks Roger for his informations,
but every time you answer one question, two or more appear, so let's go...

1)when I try to attach the MLDL1.02 in my HP48 (the program is in ML), after
I turn OFF and ON, the calcl shows an error (WARNING, INVALID CARD), and I
cannot find the MLDL lib (where is your location, I suppose that must be on
the LIBRARY menu), but the calc's memory shows that the program is there, even
using the DETACH, the memory shows the same number. What is wrong ??? Someone
can help me.

2)another thing, in the past, I see and get some large GROBs but I cannot
use the ASC-> program or the UPGROB, how can I transform that string in a
GROB ???

        I would like some help, PLEEEASEEE HELP ME. I want to thanks for
everything that could be done.



Cerveira
Nickname T.C.

Internet mail address: CERVEIRA@USPFSC.IFQSC.USP.ANSP.BR

bson@rice-chex.ai.mit.edu (Jan Brittenson) (05/10/91)

In a posting of [9 May 91 03:06:30 GMT]
   TDSTRONG%MTUS5.cts.mtu.edu@CUNYVM.CUNY.EDU (TIM STRONG) writes:

 > So so far the only cure I've heard of to get your memory back [after
 > installing a broken library] is to save the entire contents of memory
 > then hit the dreaded ON-A-F and then load in your backup and restore.

   You can answer YES after pressing ON-A-F. This will usually bring
back the library. Go to the port in the LIBRARY menu and type:

	:p:llll  PURGE

   Where `p' is the port number and `llll' is the library number as
listed in the menu.

						-- Jan Brittenson
						   bson@ai.mit.edu

tibbs@hplred.HP.COM (Kevin W. Tibbs) (05/12/91)

With regard to loading MLDL, do it in binary mode from the uuencoded version.

I experienced the same thing


kt

akcs.tklp@hpcvbbs.UUCP (doug henderson) (05/23/91)

this looks like an excellent program, but i have found what appears to be
a small bug. the debugger doesn't recognize the instruction 81b5 (move.a
pc,c). it reads it as 81b which it mistakenly identifies as srb.w d.

bson@rice-chex.ai.mit.edu (Jan Brittenson) (05/23/91)

In a posting of [23 May 91 02:40:05 GMT]
   akcs.tklp@hpcvbbs.UUCP (doug henderson) writes:

 > this looks like an excellent program, but i have found what appears to
 > be a small bug. the debugger doesn't recognize the instruction 81b5
 > (move.a pc,c). it reads it as 81b which it mistakenly identifies as
 > srb.w d.

   Fixed in version 1.03, soon to be posted. Unfortunately, there is
really no workaround to recommend in 1.02. I'm sorry about this.

						-- Jan Brittenson
						   bson@ai.mit.edu