GENERAL DESCRIPTION ENTERING NUMBERS THE BACKSPACE KEY DOING ARITHMETIC STACK OPERATIONS MEMORY OPERATIONS THE ESCAPE KEY PRACTICE EXAMPLES : HP.COM is a simple "calculator" for programmers. It is modelled after a Hewlett-Packard with RPN logic. It can do addition, subtraction, multiplication, exponentiation, quotient, remainder, and bitwise logical operations. It has an 8-word stack and 3 memories. Best of all, it can display in any of four modes: hexadecimal, decimal, binary, and character. HP has been kept relatively small and simple, since I wanted to implement a RAM-resident version of it for use under CP/M Plus. This version, which can be used even from within other programs, is now available as HP+.COM. See HP+.DOC for details. All internal storage and arithmetic is unsigned 16 bit. Thus 65537 becomes 00001, -1 becomes 65535, and so on. Multiplication overflow and division by 0 generate errors, except that in binary and character modes, the display shows only the lowest 8 bits of 16, so 8-bit overflow does NOT usually cause an error. When you run HP, it will display its single operating line: A>hp HP 1.0 - E.Meyer 9/84 H> 0000 The "H" indicates Hex display mode, and the "0000" is the calculator display. The stack and memory are initialized to zero. Try pressing the following sequence of keys: "2", "+", 4, "*". You should see "00008", which is (0+2)*4. Type control-C (^C) to exit HP. This should give you the idea; now read on. If you have never used an RPN calculator, you'd better learn to first. : ENTERING NUMBERS: Your "enter" (or "return") key, which I will henceforth call "", corresponds to the RPN "enter" key. It is used to separate two numbers entered in a row (or to intentionally duplicate the number in the display register on the stack). Typically you enter a string of digits, then hit to put the number on the stack. You do NOT hit after every number entry, as the other function keys ("+", etc) automatically terminate digit entry also. A maximum of 8 digits can be entered, after which the leading digits will begin to be discarded. On hitting (or another function key), the bell will ring if the string entered is not acceptable in the current display mode. You must then correct the string and try again. : THE BACKSPACE KEY: Your backspace key (^H) works like the "<-" key on an HP-41C; it has two functions. During digit entry, it deletes the last digit typed. Otherwise, it zeros the current display (X) register, and leaves the stack lift disabled. : DOING ARITHMETIC: The operations available, and the keys to invoke them are: "+" (addition, Y+X), "-" (subtraction, Y-X), "*" (multiplication, Y*X), "^" (exponentiation, Y^X), "/" (integer quotient, INT(Y/X)), "%" (remainder, X*(Y/X-INT(Y/X))), "&" (bitwise and, X&Y), "|" (bitwise or, X|Y), and "~" (negation [2's complement], ~X). Negation affects only the X register; the other operations use the values in the first two stack registers (X and Y), and return the result in the display (X), dropping the stack. Š The bell will ring if an undefined key is pressed as an operator. It will also ring, and multiplication "*" (also "^") will refuse to complete, if 16-bit overflow occurs. The same thing happens with "/" and "%" if division by 0 is attempted. The stack is left unchanged. Delete the offending operand and try again, if you wish. : STACK OPERATIONS: You can clear the stack with control-X (^X) at any time. (Memory registers are not affected by ^X.) Also, you can exchange the contents of the two lowest registers (X<>Y) with the "=" exchange function. HP.COM does not have stack roll functions. : MEMORY OPERATIONS: There are three memory registers (1-3), accessed with the commands "S" (or "s") for Store, and "R" (or "r") for Recall. To store the number in the display in register 2, for example, type "S2". To recall register 1 to the stack display, type "R1". : THE ESCAPE KEY: Your escape key (ESC, or ^[) has two functions. First, it allows changing the display mode. You can type ESC H, ESC D, ESC B, or ESC C, and the display mode will change accordingly to Hex, Decimal, Binary, or Character. In hex mode, numbers display as four hex digits from 0000-FFFF. In decimal mode, you get five decimal digits from 00000-65535. In binary mode, the least significant byte of the number displays as 8 binary digits, 00000000-11111111. In character mode, the least significant 7 bits of the number display as an ASCII character, if printable, or as a "^" code otherwise. (Note: code 7F, DEL, will display as "^?".) Second, the ESC key allows you to enter as a digit those characters that would otherwise be calculator functions, namely "+-*^/%&|~=sSrR". For example to enter the character "s", use ESC s, not just "s" (or you will initiate a store to memory). Note that control codes (and the space, 20H) cannot be entered as data in character mode. : EXAMPLES Now it's time for some more practice. Try the following sample calculations. Press the keys shown, and see whether the answer you get is correct. In the problems, the "h" suffix indicates a hex number. (1) What is (122+31)*8 ? PRESS: ^X ESC D 1 2 2 3 1 + 8 * ANSWER: D> 01224 (2) How many 128-byte records are between addresses D000h and E100h? PRESS: ^X ESC H E 1 0 0 D 0 0 0 - ESC D 1 2 8 / ANSWER: D> 00034 (3) What character results from MVI A,'w' ANI 5FH (that is, "w"&5Fh) ? PRESS: ^X ESC C w ESC H 5 F & ESC C ANSWER: C> W (4) What does -115 look like in binary? PRESS: ^X ESC D 1 1 5 ~ ESC B ANSWER: B> 10001101 (5) What is 5 to the 4th power? PRESS: ^X ESC D 5 4 ^ ANSWER: D> 00625 XA 1: