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 M2%!(4#0X+5A *S"7! I-3$1,(-\Q+C R"D1$ 0 - , X*0"O@ M + $ %$ 8 8 ! & 4 TU,,0- MT,1$)!0 !$U,4%("4-#$] 0U1 )04)/551-3$1, ' ! $4 T , 6@"@ P!. M*L # #X \$8 !P3 ,0!1 Y F H%4!( 6@$@#@"2 8!$! "=+5"A&&H$Q:(" M*P @*"!-5"@P/2Q$3$!/(=XP(CXRTJJT#!H@(K " C+T!I<GEW:&1@>2 M"A*3DQ.#,"JK0,&B BD (" J(4Y@8B))=&1U?F-O?FUC$JJT!Q-"K[0K$2 M TA$"<#< BT @!]D!@& OWD&,1 D 8&?4@;8OG& 1'0 S"W@ @!!$P 8^) ! M$4=^^)MG@)]2!MB^<8!$A #,+6 # /B;9Q!T,167$U_J-0$2U'&Q9FI=\]A# M48!$I "=+2#[&%U T-D" UH@Z0)$E #0+ 2 R5!, $%LW1V0*2+D!$!Y#_ M RLQ4 @$G2V0Z0=$,B#[&!;-T=D"DBY 1 >0_P,K,; 2 ^\_T-D"V!K6 07 M0+ 2 RLQ@$14 ,PMT D ^$%F$##XFV> L3342P0L,046,3& A>C.#' QXPK6 M%B,!%+#X?5L08ZTQ!1=#$1LP^ QG$#$8^)CXTF> ;R94^)MG$,$!B)ZE@*W0 M&$A$ ]#9 LZ.T04$G2TPH 62+D!$!<"<!2LQL!(#2$0$T-D"WX[AW&2=+1 ] M3\PMT < ^$%F$ #X06: OWD&;6 1Z$)/J*H$UMJR[KC&T\:&I/A]6Q!C 1Q3 M<*UPZ%PH$82!CXDO?0;8R6Z ?<H8*S&P$@-(1 +0V0*EBB'I D2D )HBIA(' MLHRQ^6"B<2#I D14 ",RX(\Q1#( K /(<8 E RLQ@$04 )TM4*H8DBY 1 J0 M$P39/C8 !.\_\!($V3[6V0+O/6!<,3?K(EM0*S'0V0+?58#=9!P<)ND"1(0 M !U!TF3:2S8R2^\_\/X#4O"T$@,C,B#I D1D "LQ@$1D ,PM$#0$)TXQ%H#X M0680,$$7<W$9ES$7H''DAQ]D!@.48 \1&$/8OG&@X)8&"3;6&6.!%"0Q!A8C MK6!!,L3< JCR$($QA'W+&&$49#$21JPQ%I!P,10C<#$61#$0D48!^$%F$!#X M06: _LYR.A !,7*0%@,G+!$3A%<L81&A0121Z*\Q6('^1&+. ->*'-P2NTYP M44*!$&64)"((_4L6111C"(F0 C'4$*0@#3 7_ 00ZQ QC%@( !"#? 40RV M_0I-3$1,(#$N,#(*0V]P>7)I9VAT("AC*2 Q.3DQ($IA;B!"<FET=&5N<V]N M"@H IQQHL(&QA8!"E?_/BD7H*#Z'!D<::'"!'H* ?E=3\\BT->@D(N@&"&?R M=@@82T.)/\ 24S 82T/J/\ 24S 82T,:0, 24S"'_4B*_D)RI!$#1_Q(>-D7 M8P%XQ7^($8$N5: N01T7$1A4<009U!"ZB+$TE , +#$4)1,F.?B1 PAA4^L- M43HQQH(4&#O6\ $0)B( G"(#P"E" )PB!< I8@"<(@? *<( SP 00!$@ ?4 M"X 3$ $7 2\ %! #="PL0,?R *H#)P 4H %4 1SP&= !C0$N &> >X!&2 = M@ 7 @ZP)P EP M00X*TP:&L304SP,L,037"M$&AK$T=-\#+#$%UPIQ:1X7 M08?,ZW+L?S]6%^PD@:H-0713;N-OX@UVDA^&00('<0]&!BUN%_ZL06"Z??=% M!BUNE_RN06"B?=]%!BUN%_LOK$%@B'W%108M;G?Y+ZY!8&X= !A+0R(]P!)# M$0!SDU4'K21P9'_4'P3VTX=7M? :1+935_17^T$6!.C)+3;1=P',+0 ' .C M*(<5M0('<S%5($949U)E8.)\<G(A@^T;!T?G:/!Q#%"$ET:G #7BD7HSCI7 MN\<NV# Q<-=$!C;)Z#LM5LAGO1,8:6)@>'R[@J#GNVWW/ 6 J@T(*(")!@!S MW4\&=L0!B"YG@J$?P(QN9Q)C+#%U840-^A+5;18<5'&$L314"@"L$_A1'7$1 M%'&D+D$M4,\G]V1@W,L>@ =!1- 2D.CY)1& +F 28RPQ%+81&<1VNNC5)0.G M6$$61E%J,17U%L46E1:&"EW@,'"M<$$51Q@KZ!XG<!CX:@&([K^"L31$J@,L M,0475'%TO7^Y?[5_L7^M?ZE_I7]Q'X'W U41MD&^9D&,@'L1-J\',V5@['I! M?_X<,.BL+Q&#G'H2@.C]) .G6!$8)*@"$-8*7?$P;6 82T/ .L#2#M<.<>,? M8T$41C$74T$41IU!%$:]001QNQ]#81YD?8$49%V!%&0Q%4A!%D,0&$M#UCG M$E,0I_YPK7 G G#' 7!G 7 ' 7"G '!' !@K015'$,$4=!"G^G$?UW"M9_Y@ M!_Y@I_U@1_U@Y_Q@A_Q@&"LQ!G9B.T0I '< <#$$H0\8)A,%%_8:GN'S"/W0 M9! %(0"!L31TJ ,L,=02Y1$C,1 6,<(:(S 8^H#7_!CZ D& @2^$H2\0 U$< M$+?Z&/A*!! C41PQ$DA!!H.Q-/2@ RPQ%&00 7CD'P$O+$$$@ZZE$3-#< ? M$D,05_Y#$ %@'>^2HK)"4F+R 1(2(#! 4& AK$TI/W_+#&D+'!!&A9IHK!D M%0_3@B$@Z#,=Z$T=$T>77<@;'5>A2(H>SG$(>M%_+H]^VH'.I7'P&7,QA(!" M< > _)!Q0W\ WQ)$@3 040QG^N@^]P'1=DQ?"<?N51X1EHB7[(&@+E$,$)?K M@= 0I1 &J P \19$]OHQ%Y Q%D,!&L 82T,L!L 24PU!BX!TC3$3$XQQ$?40 M!P@-41=1$N A,8>0,1<UD2$+G3%ENA]C 1IS"!ES K!!'Q>@,1=#(1E3:'@1 MH>A\'.C'&^B&&PU!BH!W%F$Q 9(N#H<M-OZF$C<2C4R,&$M#+ # PAEC#5$J M,<:"M8< 5P^6^A@[8) +LX +[Y .[A L0]$3WW(E>N(H)6)"%A1#U?0R?],A M=. &QJ 28G!#)O1)P?1,EPCJ$N40!FKV$J1A@8!V]5$." TQYH:0"!EC82'0 M\*:N,<820R8$$&$0!F$0!F$ <0H08RPQ!G$:T!"D88%T"&BG@'4(2!>B,1:B M$($0"!"W_#'F$F,01P!6#5?[;0@-T/H291%C"!EC A#'_0$ "P:K#U?X>AP" ML'"P$$A[UQ\">A(":&=@(&!VT!+E$ ;7]*S,!_G6!0B(IZX3"NGRL*83,>B( M&1,P:H+\EP$3(S-#4V-S@Y,3)#1$5&2$L33$_?\L$/JGCC$6@!?^,:36BH1Q M"ESY:*LP,7((@C$-BJNH)P''!@I=Z1$80Q!,,19#+#'6$*0Q!!&E@)$ =@!1 M"F$P,82 )PAJKN:F&A-2]QD3,.H0I1 &"$BCID$9%Q 30>H0I1 &"$ABW#]! M=&(Q 1.E$ 8(:%"P9L846&HF !4@@#75)'3U\_/S\_/S$X2D,19# 8BQ- 3] M_RP-40HQA*8'"$AS"\^,BAS,J!CBY'13'X$Q% 80$U>7#";]$U@8:##6_J?< M=P$1H"<1Q-* @0]D9*[O" W0 Y@H#OJR[_JNJ?HF ('5-"4T)=4$%:40!C$& MIH@82T/=_\\20Q-;UP.*A( &'U$^43UQ@X $"7@QP7(6$#88"9# T7 Q--$5 MU'$!$0("(0,A R$3 M(0I1 &$!?_"$AB!W#DCX T$PSV A/ ]_P(2(* -)8! MU_L8"#@F_1,(M_H!&&,!&3 82T.'_\\20Q'X=A<PP7)B'X&' !$90Q =BA5C M,<09,2PQI@Y1"C$V$:0FQO*334]612Y1G7$),3EU%03E8NH_)55$%=455Q!3 M+D$@YOZ7\0^@X#%51(75)- 8_Q *'@*5\0^BX#%51#4D4!G_, H>0TQ20P*7 M\0\$,%5$A52$)7 9_U 4T541$5# I?Q#X8 536%]#$D4!G_< A03U ?0P*; M\0\(,,0DY8(%,D4ED!G_D =6"!35"Q# H[Q#PK0 1"9\0\+(($%,L0R124 M&?_ $E. )(9_] 1$5#+C$@4 */\0^OX)$D8#G_@. $%.1 "R.?^ X( M3U(N @H@#Y#R#P$ T $0F_(/(0 @<04BX,!"L+ I_Q ! !U7( (++ 0.D/*O M,0#0 1";\J\Q B 1!")0P4+0 "G_&H, '0"Q*?\:HP 2-" "%2P$#9+RKT$ MT!$$()WRKT$(T"$$(E#! D30("G_&B0 '4$ TBG_&J0 '4(@0 (-+ 05E/*O M40#08:$ 4*7RKU$(T&&1$" 4E#! D30$$ I_QHE !T6"@!5*O\:I0 =%@D! M B! !0TL!!4!DO$?!Q!$1 0PG_$?##!5)?0A@! @P$(4(QG_80!!1$0 \QG_ M@0!354(? @@! BQ$,)OQ'PG0(0,B@"' 0@2S&?_1 !TR( (8 BQ$,9OQ'PK0 M00,B@$' 0@2S&?_A !TT( (8!"Q$,9OQ'PO040,B@%' 0@2S&?_Q !TU( (8 M!2Q$,9?P M 1 Q* $< "]0D_ !U0 0F! B $&0(L0Z7S_X^ M !=9$0* !" MD"' $G0I_T\ "E)%5$-3%I?R_P6@(%5$-31D(0E/&$)20U, E E?&$)20T,@ M 1," IWPAJ%4U03E,@,2,#$@T E_"4-!3$PN,R !$P,%E?+_) #@] 0U8W$Y M__\V !.3U T%YGT__]& #@] 15HX$I_X\ $]55"Y3 +4I_X\0 $]55"Y8 M($,6F?+_" *0Y.1" Q)DD2G_CS 24XN-"!#%IGR_P@$4.4TY&1T9)$I_X]0 M $-/3D9)1Q:;\O\(!M 1!))$Q#)DD2G_CW 4TA55$1.%IGS_X^ )#D1/7D M='%)__^/@ $*4E-)&IGS_X^ R!4-34D=&$Y__\(B !#3%( $SK__PB8 %-% M5$(@%Q@!+$.6\_^/@ 0PQ"0%,*'S_X^ !3!51"4$<H$1P!+D6?___PAH I2 M151"0P"56O___PAX I2151"4R 7& $L00*8\_^/@(8A)"4T!$"I\_^/@(<A M)"4T!7*!$< 2Q#(A8( Y__\(J!A"4D)# )0Z__\(N!A"4D)3(!<8 2Q#+!," M!I[U__^/@ J@(%5$)30$4*GU__^/L :@(%5$)30%<H$1P#(DD#G__PC8 $)5 M4T-$%YWS_X^ C*%4U03U 11TT3G__PCH&$I535 ?0$,7F_/_CX /D.1$]61D M=/$I_X^0 $%$1!]0*S$L0Q:7\O\(RB!5-%5$97$I_X^P $)54T-#%I7R_P@. M,"55%&4!*?^/P = !$J_X_P !(Q(% L0RX6"8$!H?+_" W0$0,RY&*1$!C M B4I_XP! %), +(I_XQ! %)23BY7( (,F/3_@!@( !!$1 0PK?3_@!@("#!5 M)>1BH0 2@! @P%+ $+ I_X^1 %-20BX6"B ,E/3_\!@* - !$*'T__ 8"@(@ M8:$0 .+ 0K 02O\/CZ$0 !T6"@$@"RP$#IGQCP$P)27D<B4 PK Y__\8*QA* M54U0'T$7F_/_C[&#H535!/4Q="$Y__\82Q@= -$Y__\8:Q@202!!+%!#%Y+S M_X^QA=$!$)WS_X^QAR$1! (UQ!)T\1G_* !#3%)"( (4+$A35*GT#_\H * @ M540E- 0B0,&"-$4E<!K_.!A"4D)#( (4+$A35"P3 @2.\O](SP DO&/!##$ M) 4PG_&/!3!51"4$(H 1P#)%Q4G_\(\& I2151"0P"52O_PCP< "E)%5$)3 M( (8 2Q35 *4\8^&(20E- 1 I_&/AR$D)30%(H 1P#)%Q3(A0,!)__"/" * M4D543D4 M4K_\(\) I2151%42XQ(% L A@! I3QCX@A).54!$"I\8^)(215 M%.42 P+%(H 1P#(A0,!)__R/"@ *4D5415$ Q4G__(]* I2151.10#%2?_\ MCPL "E)%5$=4 ,5)__R/2P *4D543%0 Q4G__(^+ I2151'10 52O_\C\L M"E)%5$Q%'P(1 ICTS_^H"* @540%0*'TS_^H#* @543EI/4AP"# 28_\GP M"E)%5$51 ,5)C_R?0 *4D543D4 Q4F/_)\( I2151'5 #%28_\GT@ "E)% M5$Q4 ,5)C_R?B *4D541T4 54J/_)_( I2151,12X!!R 1 ICTR/\)"* @ M540%0*7TR/\)#* @543EI.42< #"(& I_XP*&$)215$ 9"G_C$H80E).10!D M*?^,"QA"4D=4 &0I_XQ+&$)23%0 9"G_C(L80E)'10 4*O^,RQA"4DQ%'P(1 M+!,"!)+RSZB((20%,*'RSZB,(23EI/4AP, R(4!@*8^< !A"4D51 &0ICYQ M&$)23D4 9"F/G @80E)'5 !D*8^<2!A"4DQ4 &0ICYR(&$)21T4 5"J/G,@8 M0E),12X!!R 1+!,"!)+RR F((20%,*7RR F,(23EI.42< #"P#(A0/ 9_\@8 M2E5-4"XT( (3! .?\8^>,!3$Q.1" R(P07! &?_8&$I535 E!G_^ E#04Q, M'P(8!8SQS (SQS 0 )7QS @01$3T$;!1&<_, $1%0Q\!#([RR H ". M\L@*! F_+("@@01$3D$G LK$ICZS $1%0RX!!R ,E?'< ##$)/41P, 8 MSTT # 9SXT '4$@ 1R3\=P,(!$$$@"Q*8^L" !#3%(N 0<@#([RR(H$ "0 M\LB*"- !$)7RR(H,(!%P +!&,\. !0&<^. %-50A\!&Y7Q[ 20Y#3T$<!P M&<_. %-50DX? 1".\L@+ F_+("P@P527D$G LK$IC[Q $E.0RX!!R , MG?+("PPP527DY!)P (A&<\/ %-,3@ C&<]/ %-23@ C&<^/ $Y%1P!3&<_/ M $Y/5!\!#)3RR(L ,,7D!#"4\LB+!# EY00PE/+(BPC@5'0$,)ORR(L,X/1$ MY1)P ,(P"0 .R _/S\!@!<(,<<2<Q$8D#$6H .G6!@UH:!>$1I#01X6)P;J M!A;D87%3 ,?$] !N'I42)VI=T!'1,@')$I!QH-3%&C-W #'G"A%?5G!!%U-Q M&9<02(FT"*A0@+4(J*> E0B(UZ"N$R!K6@0-;4RL&/D0D2QN,1:E$ CK@+<G M"$B&@'11"C&&E@#KC(!D"$@'$:6 D088:1!C>-D-@8SXC<SY+7#N'Q9!%H 0 MM_X#IW@8=WH00T$60PT!U!"E$F,!RP*FO!@2D <'E_I8"B-PD!"1&*9\&$M# M+AW $D,1=$T>04,0 < 2P!$;0V&B](4)@;$T),\!+! 82T.=', 20Q#' 1%Y M'!"A5P$1>PX0P:8 I_P1&$1A!'$><"<0D <" 7H9$+ G 0$,<9E_!1" $$$6 M1A M8!A+0V0 P!)#<*U,,<820PU!R@)V2A]#<$&$%P#(:-PM;K7;XE;V+6YE MW^)6]BUN9=_B5O8.(31'6G"&[@0E_-(YU3-#291-.Q(Q-=,S14-#Q&0B1',U M6_,U8_-*$;((-91'A/1(*,53.456,P53+:52YP%:MC5;L-5:JG5:_W5F;!9G M=K9G@%9H<R @("!1?7$',0,"$M43-Q 3($$=%S#(Z>BW_4?\!_S'^X?[1_MH M"F#+/0%DU#^A8\P_$63$/R%DO#\Q9+0_062L/R%EI*^N$S!J8I:/@!(0:0B@ MQGWJ&&,!B(YA'D.]?C'6$*400^A>YNBVYFI=X!$80Q (* &A[\H;D/J.M.C> MY1&I?! (*%%@VX^ $@,&_?J:X0L"$R"UH6#UL(D"$RV6 (3*^?M^@8C<<>/ M@!("QO@34@?L$U.'ZVMFM#Z!=*E^Y7_0CK$4BY4!,<828U$N#4YF]-?J0698 M?YI^GG[X&X9!=C]_41X($U GY=?G40['^X%P,Q[E\/(R 8* B@830T?B&$M# MW!C $D-1#B\O$T@(J&@P073Y?>E],7\<'CA1+K?L)]W&O!A+0_07P!)#$+?? M9_ZG\\?:M]]A'_:'\H?71]<&N1?=+2]=]]LG^YPQ%&5W.7Y-;6E[LMWB5M;W MVBUN)7^LW>)6\@UWVHUM=]J=;H;^#4YUWN!4]@U.9=_@5/;WU2?T87^3?@5] M7!WV87^!?O-\2G[K;.7:RL;& M'2>C ] :,F9\UMU_T!>?B,L86 0G,7P!J1 M+#$49#%TA3WQ<I\<Y8N $@P7U0?(IJ<M;L6)L32D<P$L,01QHWWF?^$=1J?= M8733?45L/ZHHMP #= 1@+8IA+1@2@$?6=_H1>"X?(ZPQ,@&C)N? A]C6OP-Q MQ#]0AOL#<K8_8*;Z W.H/W#&^>A\US$40>>"UZ01- 01 "P!')$*'I GH+>3 M2'JG>S!YC1MS 8C.D!T#Z#S709N&$B$84S$60P>^II5M8!A+0X86P!)#<*T0 MZ,?83QCX. \G_4& -(?\08:!+Q]$,73[>T@;8_>W> -@^X@UY_SH>]@MBK;H M;FPQXQH308^ >4%MRWAH.%$1M A8%Y1QH>;E#H%.@WU)'P0' =?\1HE' ,:( M,1=38$AZD0H74W%Q%Q]D,81>XQTC1_!! (&Q-$1F 2PQ!-/&Q,K$R@31$H!( M>D&*;G8=%Q$P$:,F1Z+WI%?[$7# 'V,L,11D 7OA&A=AVQ+DM[$1BZYVC6H& ME_#(S_<M;B;Y+6Y6_RUN5O\M;E;_+6Y6_RUN5O\M;E;_&$M#_A/ $E,0475Q M#X.Q-#0^ 2PQ%8%1=7$?D5%U<1^A475Q'[%1=7$?P5%U<0^#L33T.0$L,15U M%_<!&'47]P$9=1?W 1IU%_<!&W47]P$,$W47]S!M8!A+0ZT3P!)#<*TP8) O M" P"+T7@!A9C8$B (P58,)&P9A)(D: %6 $D@+$5NS0!,<(:(W!!%$8Q%T08 M6[&3$A CK#$"%\7P%@91#&]@&%NQ#A,0(ZPQ A?%$B:*@@8("[9@40QAH"AH M4;!@40P86[$T$A CK#$2!:=/81\%%_9P471AK[]1=,;E;6 82T/X$< 20W"M M,&U@M^<82T/:$< 20U%R81]EIU]A'_91=OH7^%%V8$-P ! CK#$29&!A%&0Q M%491+J!AHRY1#H&0I@1040X8"8(B& D2R($?^($?^($?^($?^($?6%$." V! MH"Y1#FDN !=#<! 82T-S$\ 20U$V,&?^D%$T,*?]H#!(80: %4B"7J9=$%B" MZ@C(&-)'_.CVU!CXDN@;U*B&@'Q2C5XEC?XXC08/^(D20QPU@8^8!/6 []@ MR+[1I_?HT=-MZ-W6!1*V0;YF08PF#PBXAX"\&(TN.AT#Z-+109_F",ART7$6 MM8* -VT!B+$T9!T!+%TQ%8$(J%01)1<5%_9QCX!( @FZ@= '241%1%S"!E3 M A,00=UTUWV];'N"L:)>NJ9[&$M#50# $E-1#P@-<1 E$74!'A)S"!ES41,Q MAY Q%R<9UAPL @U1*S''@K$3_P!N$?\09A'_('(1_S!W$?]@B!'_<)H1__ ^ M 4^S U_] V]%$O_('0)_#!/_Z-X2_]C]$?_X/S+__PC(WC'__PCHQ#'__PAH M'S3__PAX$S3__PBH!S3__PBX^S/__Q@K?3'__Q@['3'__QA+KC+__QA;N3+_ M_QAKRC+__QA[VQ+_.#L4_V@S%/]X*Q3_B",4_Y@;%/^H$Q3_N L$GP4$ ;4 MA[$4"^ ,<828[U!! .&#@X=9G!1## '/W!W_%B"-+9$BK)@]_P5KBA7_'5] MK1OV81]D,-?^ 7BO$X%@2((TMD W_3$6@"<Y<!$0 T&$)$ACZ'.P?U*/OFU= M$^SD@*H)061ZC!SHC+YK71GL1(&J#T&$[@1M5(R^:(TL!7T-&V2&^A?U,11D MIOE'KT%F[A\606:%'Q8Q%D,!J"]1/M<M$<!B91\&,19# :@O42YG*Q' 8D4? M%D&&H0][EXL64^CISVWH>M3H&M+G*!%SB7IO"1> < $)%Z#H]M$1"A:18!$( MAB188\ 2L;?BZ,K-<1%T 7@[$H%@6((T=BEA$6,Q%(#Z$N5S#A(!&/@P+$;U M81!C,12 ^A+E<N$1 1CX("SF\NA<S7%QNQET0617CE[4'!='FF$?]D$71*;C MZ"C-<7&'&71!$A1!9!V.OM <%Z>681_VQ8TU8: O01ZPQQ0QP@*&KN,<9E$. M>+.0H LFWPF:'[%I;F!"#7<*;;>--/;Z&$M#QPS $E,!BK$TM,H +#$6I#&F M;@BH!!$E%Q47]G&?H!L(#=!1$E$1,8>0,2<P 1'4P0>?X2-,2] &;Y@58 MHRY!#1F0Z*SN$7*'B+YV+X!N[!Z1H.A-S6$6Y9#@!J;0$8OJ!O;%)P,!B<[8 M')$L&/@B:&3@YG8(;+6,1/;VR$;+#4Y.R"_8#4X5W^!4]AA+0Z8*P!)#<*U! M!A9(00862$$&%DA!!A9(00862$$&%DA!!A9(00862!@K<*UP011&&"L82T,; M"L 20W!!%$9'_0?]Q_R'_$?\!_S'^VC#@#X6?3*+)P:FOV:]Z!;,2(,7!5B# M)1,- 8@NPGP&H (" (> 0B@ <,2%Z@ 0Z%S2Z/7+YPJJ$;3J&!?G"?<(/5 5 ML )C 2V@%^ &J0%L( E !IL :) )( ;0!&)Q2B FL01S@!@P!9$!8T '0 =Y M %3@!R %@P!RX!>@![ ":1 S@ >M P %T/(0<H3($&;A@#I!A 7]2Z@*@@O MJF4Q+U'O(J6.WA:-?.2,'A:-K,.,7A6-G,.,GA2-',FL'^HU ;,6!#"1D-X; M$S%K00 3!>D!@($6"7-GKP]($/1I"G"V3P!QL0]Z@ 5&_C?]:(#0=EB)7(I\ MOH\&\P& SJH<@2Q!9-]_H(\&U8_V_1?Y: 0 .A?SX$P\%$,81"!002#?@=] MSX^LHXQ^!GV_CYQ?CWX%?:^/#%]_DS"4!7 4 ( #4$D$!! XO!.#Q0P N M3P3@\U(P $XO%0/@]5(R &XO-0/@]U(T (Y/! /@240Q *,T106 *DA35 "K M@$0$P H < $;L3$4I&EL8,O>>HUU=Q"Q,13D89'F]PU!&A91#@$8!C$6L.CK MR#'&$D-1=@&*#H^L#A@* 6L4H>AK[#,* %$]Z,O(,8-%9U$&]Q,Z]U8PZ(3R M,1:P$S !.G"*AW&G %)35$L <*UG31&B;FN$H09R*'6MCTZ&'+$Q%$8Q%K!! MAIZ_/J, $-6#SH,<,Z=(2E^:AMN7UWC T. 4(%6!R@1. 7)<C0<(Z$W( 1.A M[&5@?1V@Z SI$1M#Z-O'Z&;.,0:&[I$.%[ S"@!1/>BUQS
= Y'KVC <, M#4X!4A6H3. 4()?->(" KGP<,!'*7@:FSP&*3G8<L>@(Z^A3ZA&+CJ@^HP 0 MU8/.<QPS$8N!+Q^P6'1[0ZP7QWA@8*.L+P.8;_-Z3.U.&/HP,$?]!\L1B[R- M?,-_GQRQR#7)Z#OO,1:P$S$!.G 8IGR' $)05 !PK><O$7I<<^$=H6L6H.B/ MQA$;0V$=8P$;9.@DZNAOZ6$;Y.A;ZC,* %$]Z%7&,7.CHO35:-&+B@#, 0(6 M,P&C#QAJ ?NP#_L00%B$-A]P8*T')A'3@J$3[.IZ1H*?*#&$GX;S:(*ACO@] M$9,&"0@H\8. =!&\;_NV;VDV@C8&UR41&U/J$M1P+1@ZP3#JIGX82T.% , 2 M4T$?%VGC$"=I_FX2T!+U$C,L&#L3(.F;,/&C?A$;4Q'*7@D3!S02H!@ZP3N& MH0.LOD$=%S$3,&AC<,9A$U_Q"ABJ@& 0?P$A80<7"M !0!(=PN =4< QNTM M&#K!.0H0L3$4&$$Z 8)W"NDF40?IJG"P8,P/@S8&MP 3"NIG/#_18#F!-@X3 M4H< EQ$&Y6 37G<1<$81+1@ZP3EJ$S%LKACY$C 1PAH@:!,!=A8 QX[J\[J" MH0-L'7X(< Q@ S"!8+LP 6*S< 1@^8VA$YRC #J.H0,<H6X!&K'L[ &+-@ & M^^BYPS$S88$59@!(@24!$)!HX1"1:AZ0!!"!,12D>*$0%FD(X.86@&@D,:&0 M9@G7 /6K;O< 53O1< 0PH8"O##&$KZYHDH#?$S&Q%@$0A# 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