fin@norge.unet.umn.edu (Craig A. Finseth) (03/28/90)
Here is my HP-16 emulator code. No, it doesn't do quite everything but it does use the vectored Enter key to add "#" characters... ------------------------------------------------------------ Written by: Craig Finseth, University of Minnesota From: 24 Mar 1990 What: Partial HP-16C Emulator ON16 Turn on our special ENTER key. OFF16 Turn off our special ENTER key. BASE MATH:BASE menu. LJ Left Justify MSKL Mask Left MSKR Mask Right RLn Rotate Left by n RRn Rotate Right by n RLC Rotate Left through Carry RRC Rotate Right through Carry RLCn Rotate Left by n through Carry RRCn Rotate Right by n through Carry CNTB Count the number of "1" bits SB Set a bit CB Clear a bit TB Test a bit TOBIN Convert an expression to a binary number. TOREAL Convert an expression to a real number. TRIMN Trim N to the current word size. SWAPC Swap the bottom bit of the current value with the carry bit. CARRY The carry bit. alphaENTER Our vectored Enter key. This key checks to see if the first character of the command string is a digit ("0" through "9"). If so, it prepends a "#" character to the command line. Note: The USER mode must be active for this to work. HP-16C Functions Not Emulated: RMD DBLR DBL/ DBL* 1's mode UNSGN mode All other HP-16C functions exist in the HP-48SX (e.g., RR, RL, ASR) or are implemented in a better way in the HP-48SX (e.g., program control). Checksum: #17d Size: 1420.5 ------------------------------------------------------------ %%HP: T(3)A(D)F(.); DIR ON16 \<< -62 SF -63 SF \>> OFF16 \<< -62 CF -63 CF \>> BASE \<< 9 MENU \>> LJ \<< DUP IF TOREAL THEN TOBIN DO RL DUP UNTIL # 1d AND TOREAL END RR ELSE # 0d END \>> MSKL \<< TRIMN \-> n \<< # 0d 1 n START RR # 1d RR OR NEXT \>> \>> MSKR \<< TRIMN \-> n \<< # 0d 1 n START SL # 1d OR NEXT \>> \>> RLn \<< \-> X n \<< X TOBIN 1 n TRIMN START RL NEXT \>> \>> RRn \<< \-> X n \<< X TOBIN 1 n TRIMN START RR NEXT \>> \>> RLC \<< TOBIN RL SWAPC \>> RRC \<< TOBIN SWAPC RR \>> RLCn \<< \-> X n \<< X TOBIN 1 n TRIMN START RLC NEXT \>> \>> RRCn \<< \-> X n \<< X TOBIN 1 n TRIMN START RRC NEXT \>> \>> CNTB \<< 0 SWAP TOBIN 1 RCWS START IF DUP # 1d AND TOREAL THEN SWAP 1 + SWAP END RR NEXT DROP \>> SB \<< # 1d SWAP RLn OR \>> CB \<< # 1d NOT SWAP RLn AND \>> TB \<< RRn # 1d AND \>> TOBIN \<< \->NUM \-> X \<< IF X TYPE 10 \=/ THEN X RE R\->B ELSE X END \>> \>> TOREAL \<< \->NUM \-> X \<< IF X TYPE 10 == THEN X B\->R ELSE X END \>> \>> TRIMN \<< TOREAL ABS RCWS MOD \>> SWAPC \<< DUP CARRY SWAP # 1d AND 'CARRY' STO SWAP # 1d NOT AND OR \>> CARRY # 0d \GaENTER \<< \-> X \<< X 1 1 SUB NUM \-> Y \<< IF Y 48 \>= Y 57 \<= AND THEN "#" X + ELSE X END \>> \>> OBJ\-> \>> END