Model: 48SX General: Name: Scientific Expandable HP-Code-Name: Charlemagne Family: Charlemagne Logic: RPL Features: scientific, programmable, clock, alarms date arithmetic, hyperbolics, complex base w/arithmetic, matrix, vector, lists, solver (algebraic, program), symbolic math, symbolic integration, differentiation, plotting, graphics, etc., etc. Firsts: real units that work, bidirectional I/R, matrix editor, equation writer, kermit, 3D complex, stack application, ->Q, serial port, overhead projector support (from HP) Introduction: Date: 1990-03-06 Price: $350 Discontinuation: Date: <2003-01-01 Price: ? Production-Run: ? Display: Type: LCD, bit-mapped Size: 8 lines x 22 chars, 64 x 131 pixels Number-Formats: sign, 12 mantissa, ., exp sign, 2 exp see data types Annunciators: <\ left shift active /> right shift active \Ga alpha keyboard active ((.)) alarm has gone off or low battery hourglass busy /\ --> transmitting data \/ the following ones are in the message area: RAD radians mode GRAD grads mode R\<)Z polar/cylindrical mode R\<)\<) polar/spherical mode HALT program has been halted 1 user flag 1 set 2 user flag 2 set 3 user flag 3 set 4 user flag 4 set 5 user flag 5 set 1USR user keyboard active for one key USER user keyboard mode ALG alebraic-entry mode PRG program entry mode Data: User-Visible: Smallest: 1E-499 Largest: 9.99999999999E499 Signif.-Digits: 12 Internal: Smallest: 1E-49999 Largest: 9.99999999999999E49999 Signif.-Digits: 15 Data-Types-and-Sizes: type object size (bytes) display as 0 real number 10.5 1.2345 1 complex number 18.5 (6.7,8.9) (6.7,\<)8.9) 2 string 5 +length "XYZ" or $C 5 hello 3 real array 7.5+8*elements [ 9 8 7 ] 4 complex array 7.5+16*elements [ (1,2) (3,4) ] 5 list 5+2.5*elements+ { "FIN" Name } element storage 6 global name 5 + length X 7 local name 5 + length j 8 program as list \<< Z 4 * \>> 9 algebraic as list 'A=B-3' 10 binary integer 10.5 # 1010b 1-64 bits # 765o # 987d # FEDh 11 graphics object 10 + data Graphic 131 x 64 header 2.5 GROB 4 4 70607050 length 2.5 height 2.5 width 2.5 data <as required> 12 tagged object 5+tag+object area: 4.8 (tags can be applied to any object) :area: 2.3 13 unit object ? 55 km/s^2 14 XLIB name ? XLIB 645 2 15 directory as list DIR ... END 16 library ? Library 645: ... 17 backup object ? Backup HOMEDIR 18 built-in function 2.5 COS 19 built-in command 2.5 ROLL 20 address ? <28FCh> 21 long real ? Long Real 22 long complex ? Long Complex 23 linked array ? Linked Array 24 character ? Character 25 code ? Code 26 library data ? Library Data 27 external ? External The sizes are guesses. Memory: Named-Registers: none Flags: 64-1 user flags -1 principal solution only -2 symbolic constants -3 numeric results -5 to -10 binary word size -11 base 0)decimal 1)octal 2)binary 3)hex -15 coordinates 0)rectangular 2)cylindrical 3)spherical -17 trig mode 0)degrees 1)radians 2)grads -19 vector/complex -20 underflow is error -21 overflow is error -22 infinite not an error -23 there was positive underflow -24 there was negative underflow -25 there was overflow -26 there was infinite -30 plot y and f(x) -31 disable curve filling -32 graphics cursor dark background -33 I/O to I/R -34 print to serial -35 I/O is binary format -36 receive overwrite variable -37 double-spaced print -38 supress line feed -39 supress Kermit messages -40 display clock -41 24 hour format -42 DD.MM.YY format -43 don't reschedule repeating alarms -44 save acknowledged alarms -45 to -48 set number of digits -49 display format 0)STD 1)SCI 2)FIX 3)ENG -51 fraction mark comma -52 multi-line object display -53 display () to mark precedence -55 save last arguments -56 beep off -57 alarm beep off -58 verbose messages off -59 fast catalog display -60 alpha key once to lock -61 user key once to lock -62 user mode active -63 vectored enter on -64 set by GETI and PUTI when indices wrap The default flags are represented by #1008d. Register-Usage: ALRMDAT current alarms CST custom menu EQ current equation IERR uncertainty of integration IOPAR I/O parameters {baud parity recv-pacing xmit-pacing checksum translate-code} PICT the graphics display PPAR plotting parameters {(xmin,ymin) (xmax,ymax) indepvar resolution (xaxis,yaxis) type dependvar} PRTPAR printing parameters {delay "remap" linelen "lineterm"} der... user-defined derivative n1,n2,... integers created by ISOL s1,s2,... signs created by ISOL and QUAD \GSDAT current statistics data \GSPAR statistics parameters {indepcol dependcol intercept slope model } Numbered-Registers: none Program-Steps: memory Program-Editing: insert or replace Program-Display: alpha User-RAM-Bytes: 32K Total-RAM-Bytes: 32K (288K max) ROM-Bytes: 256K Machine-State: flags stack user memory libraries File-Types: none Physical: Technology-Used: CMOS Processor: Clarke (147 pin TAB), 2 MHz Chip-Count: 5 (1LT8 (Clarke) CPU, 2x SED1181 (display column driver), 256K ROM, 32K RAM) Power-Source: 3 AAA cells Continuous-Memory: yes Expansion-Ports: 2 I/O-Ports: 4-wire serial, I/R I/O, beeper Clock: yes Length: 180mm Width: 81mm Height: 25mm Weight: 264g Temperature-Range: Operating: 0 to 45 deg C Charging: - Storage: -20 to 65 deg C Keyboard: Switches: none Shift-Keys: left, orange, above left right, blue, above right alpha, white, right User-Defined-Keys: 6 menu keys, entire keyboard Key-Arrangement:: ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ***** ** ** ** ** * *** *** *** *** * *** *** *** *** * *** *** *** *** * *** *** *** *** Key-Labels-Base-Keyboard:: [] [] [] [] [] [] MTH PRG CST VAR ^ NXT ' STO EVAL <| v |> x SIN COS TAN \v/x y 1/x ENTER +/- EEX DEL <- \Ga 7 8 9 \:- <\ 4 5 6 x /> 1 2 3 - ON 0 . SPC + (The ON key has a white lower label of ATTN.) Key-Labels-Left-Orange-Above-Left:: [] [] [] [] [] [] [PRINT] [I/O] [MODES] [MEMORY][LIBRARY] PREV UP DEF ->Q GRAPH REVIEW SWAP 2 x x ASIN ACOS ATAN x 10 e EQUATION EDIT 2D PURGE DROP USR [SOLVE] [PLOT] [ALGEBRA] ( ) [] [TIME] [STAT] [UNITS] [ ] |-- LAST -| [] RAD STACK CMD \<< \>> CONT = , \pi { } Key-Labels-Right-Blue-Above-Right:: [] [] [] [] [] [] [] [] [] [] [] [] HOME RCL ->NUM [] [] [] \.d \.S \GS x\v/y LOG LN MATRIX VISIT 3D [] CLR [] [] [] [] # [] [] [] [] _ |-- LAST --| [] POLAR ARG MENU " " OFF -> <--| \<) : : Key-Labels-Alpha-White-Right:: A B C D E F G H I J K L M N O P Q R S T U V W X [] Y Z [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] ([] keys do the same as the base keyboard, but do not insert any extra spaces.) Key-Labels-Alpha-Left-Not-Shown:: a b c d e f g h i j k l m n o p q r s t u v w x & y z ! ? LC ` ^ : () [] $ L- currency [] [] == < \<= \<< \>> CONT = , \pi {} (The three characters starting after LC are non-spacing diacritics that compose with the character typed next.) Key-Labels-Alpha-Right-Not-Shown:: \Ga \Gb \GD \Gd \Ge \Gh \Gg \Gn \Goo | \|^ \Gl ' \Gm \GW \<- \|v \Gr \Gs \Gt % ~ \Gw \Gx- @ +- \GZ upside! upside? INS ' ~ etc. # [] c| Y= \^o _ [] \=/ > \>= "" OFF \-> return \<) :: (The three characters starting after INS are non-spacing diacritics that compose with the character typed next.) Programmable-Operations:: ! factorial or gamma " " identify string # identify binary number % compute percent %CH compute percent change %T compute percent total ' identify algebraic ( ) precedence; identify complex number *H adjust plot height *W adjust plot width + addition +/- change sign - subtraction -> create local variable ->ARRY create an array ->DATE set the date ->GROB create a grob ->HMS convert to HH.MMSS ->LCD put grob into LCD ->LIST create a list ->NUM evaluate an object to a numeric value ->Q converts a number to a fractional equivalent ->Q\pi converts a number to a fractional equivalent after factoring out \pi ->STR create a string ->TAG create a tagged object ->TIME set the time ->UNIT create a unit object ->V2 create a 2d vector ->V3 create a 3d vector 0-9, . enter digit 1/x reciprocal 10^x common exponentiation : : identify tag < comparison test = "equal" comparison test == "equality" comparison test > comparison test A ampere unit a are unit (100 m^2) ABS absolute value ACK acknowledge displayed past due alarm ACKA acknowledge all past due alarms ACOS arc cosine ACOSH hyperbolic arc cosine acre acre unit ALOG common antilogarithm AND logical / binary and Ao Angstrom unit APPLY applies an operator to an expression ARC draw an arc ARCHIVE makes a backup copy of HOME arcmin arc minutes unit arcs arc seconds unit ARG compute polar angle of a coordinate ARRAY-> separate array (28 compatability) ASIN arc sine ASINH hyperbolic arc sine ASN assign user key ASR arithmetic shift right ATAN arc tangent ATANH hyperbolic arc tangent atm atmosphere unit ATTACH attach a library to a directory au astronomical unit AUTO auto-scales Y axis AXES set axes intersections b barn unit B->R convert binary to real BAR select bar plot bar bar unit (pressure) BARPLOT draw a bar plot BAUD set baud bbl barrel unit BEEP sound a beep BESTBIT select best fit model BIN select binary mode BINS sort summation into bins BLANK blank grob BOX draw a box Bq Becquerel unit of activity Btu British Thermal Unit bu bushel unit BUFLEN returns the number of characters in the serial in buffer BYTES returns object size and checksum C Couloumb unit c speed of light constant C->PX convert user to pixel coordinates C->R convert complex to real cal calorie unit CASE ... THEN ... END ... END case statement cd Candela unit CEIL next larger integer CENTR identify center of plot display CF clear flag chain chain unit CHR convert integer to character Ci Curie unit CKSM specifies Kermit checksum CLEAR clears the stack CLKADJ adjust clock ticks CLLCD clear display CLOSEIO close serial port CLUSR clear all variables CLVAR clear all variables CL\GS clear statistics data cm centimeter unit cm/s centimeters/second unit cm^2 square centimeters unit cm^3 cubic centimeters unit CNRM compute column normal COLCT collect like terms COL\GS specifies dependant and independant statistics variables COMB combinations CON constant array CONIC selects conic polot CONJ compute complex conjugate CONT continue CONVERT compute unit conversion CORR compute correlation coefficent COS cosine COSH hyperbolic cosine COV compute covariance CR print a carriage-right CRDIR create directory CROSS compute cross product CT carat unit cu cup unit d day unit D->R convert degrees to radians DATE return the date DATE+ add days to date DDAYS compute days between dates DEC specify decimal mode DECR decrements variable DEFINE create a user-defined function DEG specify degrees mode DELALARM remove an alarm DELAY specify printing delay DELKEYS delete key assignments DEPND specify dependant plot variable DEPTH size of stack DET compute determinant DETACH detach a library DISP display object in line of display DO ... UNTIL ... END do loop DOERR generate error DOT compute dot product DRAW draw plot DRAX draw axes DROP drop one object DROP2 drop two objects DROPN drop N objects DTAG remove tags DUP duplicate object DUP2 duplicate two objects DUPN duplicate N items dyn dyn unit e symbolic constant 'e' EEX enter exponent ELSE control structure component END control structure component ENG specify ENG mode ENTER enter EQ-> separate equation ERASE erase PICT erg erg unit ERR0 clear error ERRM last error message ERRN last error number eV electron volt unit EVAL evaluate object EXP natural exponentiation EXPAN expands algebraic EXPM natural exponentiation - 1 e^x natural exponentiation F Farad unit fath fathom unit fbm board foot unit fc footcandle unit FC? is a flag clear? FC?C is a flag clear? and clear Fdy Faraday unit fermi Fermi unit FINDALARM find an alarm FINISH end Kermit server mode FIX specify FIX display mode flam footlambert unit FLOOR next smaller integer FOR ... NEXT for loop FOR ... STEP for loop FP fractional part FREE free merged memory FREEZE freeze part of display FS? is a flag set? FS?C is a flag set? then clear ft foot unit ft*lbf foot-pound unit ft/s feet per second unit ftUS US foot unit ft^2 square feet unit ft^3 cubic feet unit FUNCTION specify function plot g gram unit ga standard freefall acceleration constant gal US gallon unit galC Canadian gallon unit galUK UK gallon unit GET get an element from a list, vector, or matrix GETI get an element from a list, vector, or matrix and increment gf gram-force unit GOR graphics OR GRAD specify GRADS mode grad grads unit grain grains unit GRAPH enter the graphics environment GXOR graphics XOR Gy Gray unit of radiation H Henry unit h hour unit ha hectare unit HALT suspend execution HEX specify hexadecimal mode HISTOGRAM specify histogram plot HISTPLOT draw a histogram HMS+ hh.mmss addition HMS- hh.mmss subtraction HMS-> convert to hh.mmss HOME move to home directory hp horsepower unit Hz Hertz unit IDN identity matrix IF ... THEN ... ELSE ... END if-statement IF ... THEN ... END if-statement IFERR ... THEN ... ELSE ... END error trap IFERR ... THEN ... END error trap IFT stack-based if IFTE stack-based if, can be used in algebraics IM return imaginary part in inch unit INCR increment variable INDEP specify independent variable for plotting inH20 inches of water unit inHg inches of mercury unit INPUT accept input INV reciprocal in^2 square inches unit IN^3 cubic inches unit IP integer part ISOL isolate an equation variable J Joule unit K Kelvin unit kcal kilocalorie unit KERRM return last Kermit error message KEY check for key press kg kilogram unit KGET get data using Kermit KILL abort all suspended programs kip kilopound of force unit km kilometers unit km^2 square kilometers unit knot knots unit kph kilometers per hour unit l liter unit LABEL labels axes lam lambert unit LAST return last arguments LASTARG return last arguments lb Avoirdupois pount unit lbf pound-force unit lbt troy pound unit LCD-> return LCD as a grob LIBS lists library objects LINE draw line LINFIT specify linear model LIST-> separate list (28 compatability) lm lumen unit LN natural logarithm LNP1 natural logarithm + 1 LOG common logarithm LOGFIT specify logarithmic model LR compute linear regression lx lux unit lyr light-year unit m meter unit m/s meters per second unit MANT return mantissa MAX larger of two number MAXR largest real number MAX\GS largest statistics value MEAN compute mean MEM compute available memory MENU select a built-in menu MERGE merges RAM card into main memory MeV mega electron volt unit mho mho unit mi international mile unit mil mil unit MIN smaller of two numbers min minutes unit MINR smallest positive real number MIN\GS smallest statistics value miUS US mile unit miUS^2 square US miles unit mi^2 square miles unit ml milliliters unit mm millimeters unit mmHg millimeters of mercury unit MOD modulus mol mole unit Mpc mega parsec unit MPH miles per hour unit M^2 square meter unit M^3 cubic meter unit N Newton unit NEG negate an argument NEWOBJ create a new instance of an object NEXT control structure component nmi nautical mile unit NOT logical or binary not NUM convert character to a number N\GS number of entries in summation OBJ-> separate object OCT specify octal mode OFF off OLDPRT maps printer output to HP 82249A character set OPENIO open serial port OR logical or binary or ORDER specify order of objects in a directory OVER select object oz ounce unit ozfl US fluid ounce unit ozt Troy ounce unit ozUK UK fluid ounce unit P Poise unit of viscosity Pa Pascal unit PARAMETRIC specify parametric plot PARITY sets parity PATH returns current path pc parsec unit PDIM changes the size of PICT pdl poundal unit of force PERM compute permutations PGDIR purge directory ph phot unit of illuminance PICK fetch object PICT specify screen for graphics PIX? is pixel set? PIXOFF turn pixel off PIXON turn pixel on pk peck unit PKT send a Kermit packet to a server PMAX sets the upper-right plot coordinate PMIN sets the lower-left plot coordinate POLAR specify polar plot POS find position of object in another PR1 print level 1 object PREDV predict the dependant variable PREDX compute X given Y PREDY compute Y given X PRLCD print screen PROMPT display prompt and print program PRST print stack PRSTC print stack compactly PRVAR print a variable psi pounds per square inch unit pt pint unit PURGE deletes one or more variables PUT put an element to a list, vector, or matrix PUTI put an element to a list, vector, or matrix and incremnt PVARS return a lists of backup and library objects PVIEW display PICT at location PWRFIT specify power model PX->C convert pixel to user coordinates qt quart unit QUAD solve a quadratic polynomial QUOTE returns an argument unevaluated R roentgen unit r radian unit R->B convert real to binary R->C convert real to complex R->D convert radians to degrees RAD specify radians mode rad rad unit of absorbed dose RAND compute random number RCEQ recalls the current equation RCL recall value RCLALARM recall an alarm RCLF recall flags RCLMENU recall current menu RCL\GS recall the current statistics matrix RCWS recall binary word size rd rod unit RDM redimension a matrix RDZ set the random number seed RE return real part RECN receive file from remote Kermit, save in name RECV receive file from remote Kermit, save as file rem rem unit REPEAT control structure component REPL replace RES set the plot resolution RESTORE restore a backup object RL rotate left RLB rotate left byte RND round number RNRM compute row normal of a matrix (maximum of sums of absolute values of all elements of all rows) ROLL roll stack ROLLD roll stack down ROOT compute numerical root ROT move level 3 object to level 1 RR rotate right RRB rotate right byte RSD compute residual to solution of system of linear equations S Siemens unit s second unit SAME comparison test sb Stilb unit of luminance SBRK send a break on the serial line SCALE specify x and y scale SCATRPLOT draw a scatter plot SCI specify scientific display mode SCONJ conjugate the contents of a variable SDEV compute standard deviation SEND send the object using Kermit SERVER go into Kermit server mode SF set flag SHOW resolve all name references SIGN return the sign of a number SIN sine SINH hyperbolic sine SINV invert the contents of a variable SIZE returns the dimensions of an object SL shift left SLB shift left byte SLOPE compute slope slug slug unit SNEG negates the contents of a variable SQ square sr steradian unit SR shift right SRB shift right byte SRECV reads data from serial port St Stoke unit of viscosity st stere unit of volume START ... NEXT loop with no index variable START ... STEP loop with no index variable, variable step STD specify standard display mode STEP control structure component STEQ store into EQ STIME sets serial timeout STO store into variable STO* store with multiplication into variable STO+ store with addition into variable STO- store with subtraction into variable STO/ store with division into variable STOALARM store an alarm STOF set system flags STOKEYS make user key assignments STO\GS store into \GSDAT STR-> separate string (28 compatability) STWS sets binary wordsize SUB extracts portion of an object Sv Sievert unit of dose equivalent SWAP exchange two objects SYSEVAL evaluates object T Tesla unit t metric ton unit TAN tangent TANH hyperbolic tangent TAYLR compute Taylor series approximation tbsp tablespoon unit TEXT selects the stack display (as opposed to graphics) THEN control structure component THEN ... END control structure components therm therm unit TICKS return time in clock ticks TIME return the current time TLINE draw line toggling pixels TMENU display temporary menu ton short ton unit tonUK UK ton unit torr torr unit TOT compute statistics sums TRANSIO select character translation TRN transpose TRUNC truncates a number TRUTH specify truth plot tsp teaspoon unit TSTR convert date and time to string TVARS lists variables of type TYPE returns type of an object u unified atomic mass unit UBASE convert to SI base units UFACT factor compound unit UNTIL control structure component UPDIR move up one level in path UTPC upper-tail Chi-Square distribution UTPF upper-tail F-distribution UTPN upper-tail normal distrbution UTPT upper-tail t-distribution UVAL return numeric portion of a unit V volt unit V-> separate a vector VAR compute variances VARS return list of variables VTYPE return variable's type W Watt unit WAIT pause execution for time or key Wb Weber unit WHILE ... REPEAT ... END while statement WSLOG return warm start log x multiplication XCOL specify independant variable XMIT sent serial data XOR logical or binary xor XPON return exponent XRNG specify x-axis plotting range XROOT xth root of y x\v/y xth root of y x^2 square YCOL specify dependant variable yd yard unit yd^2 square yard unit yd^3 cubic yard unit yr year unit YRNG specify y-axis plotting range y^x power [ ] identify array \.d differentiate \.S integrate \:- division \<) identify polar or spherical coordinates \<< \>> identify program \<= comparison test \=/ comparison test \>= comparison test \Gm micron unit \GS sum expression over range \GS+ add to statistics \GS- add to statistics \GSLINE compute best-fit line \GSX compute sum of X data \GSX*Y compute sum of products of X and Y data \GSX^2 compute sum of squares of X data \GSY compute sum of Y data \GSY^W compute sum of squares of Y data \GW ohms unit \pi symbolic constant \v/x square root \^o degrees units \^oC degrees C units \^oF degrees F units \^oR degrees R units ^ power _ identify unit { } identify list | where; substitute symbolics for names Non-Programmable-Operations:: (()) parenthesize neighbors (<- expand subexpression left />(<- repeat (<- until no change *1 multiply by 1 +1-1 add and subtract 1 +COL insert a column of zeros +ROW insert a row of zeros , separate numbers -() double negate and distribute ->() distribute prefix ->) expand subexpression right />->) repeat (<- until no change ->DEF expand trig and hyp functions into EXP and LN ->STK put object onto stack -COL delete a matrix column -ROW delete a matrix row /1 divide by 1 /> right shift 1-VAR makes entry the statistical matrix and displays menu page 2 1/() double invert and distribute 12/24 toggle 12 and 24 hour display format 2-VAR makes entry the statistical matrix and displays menu page 4 2D assemble or disassemble a 2d vector 3D assemble or disassemble a 3d vector <- erase last character or object <--> commute arguments <--| enter newline <-A associate left /><-A repeat <-A until no change <-D distribute left /><-D repeat <-D until no change <-DEL delete item to the left /><-DEL delete all items to the end of the line <-M merge factors left /><-M repeat <-M until no change <-SKIP move left one item <-T move term left /><-T repeat T-> until no change <-WID decrease column width <\ left shift <| left arrow >DATE set alarm date >TIME set alarm time A-> associate right />A-> repeat A-> until no change A/PM specify AM/PM format in clock A/PM specify AM/PM format in alarm ADJST TIME sub-menu AF add fractions ALGEBRA bring up menu ALRM TIME sub-menu ANGL UNITS sub-menu AREA calculate area under plot AREA UNITS sub-menu ARG enable/disable LAST ARG ASCII specify ASCII/binary Kermit transfer ATTN abort execution; exit special environments; clear messages AUTO scale Y axis and draw plot />AXES recall axes intersection BASE MTH sub-menu BEEP enable/disable beep BOX draw box BRCH PGM sub-menu CAT STAT sub-menu CENT redraw graph centered />CENT recall center coordinates CIRCL draw circle CLK enable/disable clock display CLR clears screen or pict CMD enable/disable LAST CMD CNCT enable/disable curve filling COLCT collect like terms COORD displays cursor coordinates CST custom menu CTRL PGM sub-menu D-> distribute right />D-> repeat D-> until no change DAY repeating alarm interval DBUG debugger DEL delete next item DEL-> delete item to the right />DEL-> delete all items to the end of the line />DEPN recall dependant variable DINV double invert DNEG double negate DOT+ turn on pixel drawing DOT- turn off pixel drawing DRAW plot equation with axes DRPN drop items from stack DSPL PGM sub-menu DUPN duplicate items E() replace power-of-power with power-product ECHO copy items to stack EDEQ edit equation EDIT EDIT menu EDIT\GS copy statistics data to matrix writer ELEC UNITS sub-menu ENRG UNITS sub-menu ENTRY toggle algebraic and program entry modes EQ+ add equation to EQ />EQ+ remove last entry from EQ EQUATION equation writer application EXEC set alarm execution action />EXEC recall alarm execution action EXECS show alarm execution action EXIT exits environemnt EXPR highlights subexpression EXPR= return expression or equation values EXTR move cursor to extremum E^ replace power-of-product with power-of-power F' plot first derivative F(X) display value of function FAST toggles display of equation names or names and values FCN PLOT sub-menu FM,/FM. set fraction mark FORCE UNITS sub-menu GO-> set matrix entry mode to left-to-right GOv set matrix entry mode to top-to-bottom GRAPH invokes scrolling mode HOUR repeating alarm interval HR+ adjust hours HR- adjust hours HYP MTH sub-menu I/O I/O menu />INDEP recall independent variable INS switches between insert and replace editing IR/W infrared/wire selection ISECT move cursor to closest intersection KEEP clear stack levels above current KEYS remove graphics application menu labels L() replace product-of-log with log-of-power L* replace log-of-power with product-of-log LABEL labels axes LAST ARG retains stack and restores last arguments LAST CMD return last command line LAST MENU return last menu LAST STACK restore last stack LENG UNITS sub-menu LEVEL enter level number to stack LIBRARY bring up menu LIGHT UNITS sub-menu LINE draw line M-> merge factors right />M-> repeat M-> until no change M/D toggles date display format MASS UNITS sub-menu MATRX MTH sub-menu MATRIX matrix writer application MEMORY bring up menu MIN+ adjust minutes MIN- adjust minutes MODES bring up menu MODL STAT sub-menu MTH bring up menu NEW stores algebraic or matrix under new name NEXT display but doesn't execute next object NONE cancel alarm repeat NXEQ rotate list in EQ NXT next screen or menu OBJ PRG sub-menu OFF off ON turn on ON + + adjust contrast ON + - adjust contrast ON + A + F clear all memory ON + B cancels ON + selection ON + C bring calculator to known state without clearing memory ON + D interactive self-test, exit with ON + C <- memory scanner (see below) A display CPU speed B press ENTER for display patterns C check internal ROM D check internal RAM DEL summary of tests E test keyboard ENTER initialize test times F partial keyboard test G ESD test H UART loop back test I wired UART echo J identify what's plugged in K port RAM device test L blank display M sent time to I/R port N receive time from I/R port O wireless loop back test P writeless UART echo test S show test start time T show test fail time U looping test V looping test W looping test X looping test Y looping test Z looping test debugger / memory scanner commands: + move by + #1h nybbles +/- go to address #F000Ah - move by - #1h nybbles . transmit #10h nibbles to infrared and serial 0-9,A-F enter a digit into memory, move by + #1h nybbles 1/X go to address #F0A8Ch or #F1210h (display, see below) <- refresh DEL go to port 2 address #C0000h EEX go to address #80000h (port 1?) ENTER go to address #00100h (display controller?) EVAL execute at address ON + C exits SPC transmit #1000h nybbles to serial (9600 baud) X go to display RAM address x move by + #100h nybbles Y halt log address Z go to port 1 address \:- move by - #100h nybbles \|v move by - #1000h nybbles \|^ move by + #1000h nybbles When you first enter scan mode, the address is #705D9h. Pressing EVAL at this address displays the version number. (See also notes.) ON + E continuous self-test, stop with ON + C ON + MTH print screen ON + PRINT graphics screen dump ON + SPC enters coma mode, which turns off all timers and saves power ON + TIME cancels next repeating alarm PARTS MTH sub-menu />PDIM recall PICT size PICK copies object to level 1 PLOT bring up menu PLOTR PLOT sub-menu POLAR switches rectangular and polar coordinates PORT0 LIBRARY sub-menu PORT1 LIBRARY sub-menu PORT2 LIBRARY sub-menu POWR UNITS sub-menu PRESS UNITS sub-menu PREV previous screen or menu />PREV first menu page PRG bring up menu PRINT bring up menu PROB MTH sub-menu PTYPE PLOT sub-menu PURG purges selected equation RAD switches radians and degrees mode RAD UNITS sub-menu RCLKEYS recall user key assignments />RES recall spacing RESET reset plot parameters REVIEW brings up data in appropriate application ROLL roll object to level 1 ROLLD roll object in level 1 to here ROOT move cursor to root RPT TIME sub-menu RULES equation writer sub-menu R\<)Z specify polar/cylindrical mode R\<)\<) specify polar/spherical mode />SCALE recall scale SEC repeating alarm interval SEC+ adjust seconds SEC- adjust seconds SET TIME sub-menu SET set alarm SETUP I/O sub-menu SKIP-> move right over object SLOPE compute slope SOLVE bring up menu SOLVR bring up SOLVE menu SPC type a space SPEED UNITS sub-menu SST single step SSTv single step enter procedure STAT bring up menu STK PRG sub-menu STK enable/disable LAST STK SYM toggle symbolic/numeric results T-> move term right />T-> repeat T-> until no change TEMP UNITS sub-menu TEST PRG sub-menu TIME bring up menu TIME UNITS sub-menu TRG* expand trig and hyp functions of sums and differences UNITS bring up menu USR user keyboard: press once and user keyboard is enabled for one key; press twice and user keyboard is locked on; third press clears user keyboard v move down VAR variable sub-menu VEC toggles vector and array modes VECTR MTH sub-menu VIEW views object in level 1 VISC UNITS sub-menu VISIT edit object named by level 1 object vMATCH match and replace, beginning with top level expression VOL UNITS sub-menu WEEK repeating alarm interval WID-> increase column width X select X axis zoom XAUTO select X axis zoom with auto scaling />XCOL recall independant variable />XRNG recall x axis display range XY select X and Y axis zoom XYZ select rectangular mode Y select Y axis zoom />YCOL recall dependant variable />YRNG recall Y axis display range Z-BOX zoom in to box />Z-BOX zoom in to box, autoscaling Y ZOOM GRAPH sub-menu \Ga alpha keyboard: press once and alpha keyboard is enabled for one key; press twice and alpha keyboard is locked on; third press clears alpha keyboard ^ move up ^1 raise to power 1 ^MATCH match and replace, beginning with subexpressions ^STK selects interactive stack |> right arrow Menus:: ALGEBRA:COLCT EXPA ISOL QUAD SHOW TAYLR ^MAT vMAT | APPLY QUOT ->Q\pi />ALGEBRA:equation catalog PLOTR SOLVR EQ+ EDIT ->STK VIEW ORDER PURG FAST CST: custom menu EDIT: <-SKIP SKIP-> <-DEL DEL-> INS ^STK EQUATION:type <| to activate SELECTION menu SELECTION:RULES EDIT EXPR SUB REPL EXIT RULES: <-T T-> DNEG DINV *1 ^1 /1 +1-1 COLCT these are not in proper order: (()) (<- ->) <--> <-M M-> <-A A-> ->() <-D D-> AF -() 1/() L* L() E^ E() ->DEF TRG* GRAPH: ZOOM Z-BOX CENT COORD LABEL FCN ZOOM: XAUTO X Y XY EXIT FCN: ROOT ISECT SLOPE AREA EXTR EXIT F(X) F' NXEQ I/O: SEND RECV SERVE KGET FINIS SETUP RECN PKT KERR OPENI CLOSE XMIT SRECV STIME SBRK BUFLE SETUP: IR/W ASCII BAUD PARIT CKSM TRAN />I/O: directly to server mode LIBRARY:current libraries PORT0 PORT1 PORT2 MATRIX: EDIT VEC <-WID WID-> GO-> GOv +ROW -ROW +COL -COL ->STK ^STK MEMORY: MEM BYTES VARS ORDER PATH CRDIR TVARS PVARS NEWO LIBS ATTAC DETAC MERG FREE ARCHI RESTO PGDIR />MEMORY:STO+ STO- STO* STO/ INCR DECR SINV SNEG SCON MODES: STD FIX SCI ENG SYM BEEP STK ARG CMD CNC ML CLK DEG RAD GRAD XYZ R\<)Z R\<)\<) HEX DEC OCT BIN FM, />MODES:ASN STOK RCLK DELK MENU CST TMEN RCLM STOF RCLF SF CF FS? FC? FS?C FC?C MTH: PARTS PROB HYP MATR VECTR BASE PARTS: ABS SIGN CONJ ARG RE IM MIN MAX MOD % %CH %T MANT XPON IP FP FLOOR CEIL RND TRUNC MAXR MINR PROB: COMB PERM ! RAND RDZ UTPC UTPF UTPN UTPT HYP: SINH ASINH COSH ACOSH TANH ATANH EXPM LNP1 MATR: CON IDN TRN RDM DET RSD ABS RNRM CNRM VECTR: XYZ R\<)Z R\<)\<) CROSS DOT ABS V-> ->V2 ->V3 D->R R->D BASE: HEX DEC OCT BIN STWS RCWS RL RR RLB RRB R->B B->R SL SR SLB SRB ASR PLOT: PLOTR PTYPE NEW EDEQ STEQ CAT PLOTR: ERASE DRAW AUTO XRNG YRNG INDEP DEPN PTYPE RES CENT SCALE RESET AXES DRAX LABEL *H *W PDIM />INDEP:recall value />DEPN: recall value PTYPE: FUNC CONIC POLAR PARA TRUTH BAR />RES: recall value />AXES: recall value />PDIM: recall value PTYPE: FUNC CONIC POLAR PARA TRUTH BAR />STEQ: RCEQ />PLOT: direct to PLOTR menu PRG: STK OBJ DSPL CTRL BRCH TEST STK: OVER ROT ROLL ROLLD PICK DEPTH DUP DUP2 DUPN DROP2 DRPN OBJ: OBJ-> EQ-> ->ARR ->LIST ->STR ->TAG R->C C->R DTAG ->UNIT TYPE VTYPE SIZE POS REPL SUB NUM CHR PUT GET PUTI GETI DSPL: PICT PVIEW LINE TLINE BOX ARC PIXON PIXOF PIX? PX->C C->PX SIZE ->GRO BLAN GOR GXOR REPL SUB ->LCD LCD-> CLLCD DISP FREEZ TEXT CTRL: DBUG SST SSTV NEXT HALT KILL INPUT PROM DISP MENU WAIT KEY DOERR ERRN ERRM ERR0 BEEP OFF BRCH: IF CASE START FOR DO WHILE THEN END NEXT STEP UNTIL REPEA ELSE IFERR IFT IFTE <\IF: IF ... THEN ... END />IF:IF ... THEN ... ELSE ... END <\CASE: CASE ... THEN ... END ... END />CASE: THEN ... END <\START:START ... NEXT />START:START ... STEP <\FOR: FOR ... NEXT />FOR: FOR ... STEP <\DO: DO ... UNTIL ... END <\WHILE:WHILE ... REPEAT ... END <\IFERR:IFERR ... THEN ... END />IFERR:IFERR ... THEN ... ELSE ... END TEST: AND OR XOR NOT SAME TYPE == \=/ < > \<= \>= SF CF FS? FC? FS?C FC?C PRINT: PR1 PRST PRSTC PRLCD PRVAR CR DELAY OLDPR />PRINT:does a PR1 SOLVE: SOLVR ROOT NEW EDEQ STEQ CAT />STEQ: RCEQ SOLVR: list of solver variables LEFT= RT= or EXPR= />SOLVE:direct to SOLVR menu name does STO <\name does solve for />name does RCL STACK application menu: ECHO VIEW PICK ROLL ROLLD ->LIST DUPN DRPN KEEP LEVEL STAT: \GS+ CL\GS NEW EDIT\GS STO\GS CAT TOT MEAN SDEV MAX\GS MIN\GS BINS XCOL YCOL BARPL HISTP SCATR \GSLINE LR PREDX PREDY CORR COV MODL \GSX \GSY \GSX^2 \GSY^W \GSX*Y N\GS <\\GS+: \GS- />STO\GS:RCL\GS CAT: 1-VAR PLOT 2-VAR EDIT ->STK VIEW MODL: LIN LOG EXP PWR BEST />STAT: direct to page 2 of STAT menu TIME: SET ADJST ALRM ACK ACKA CAT DATE+ DDAYS DATE TIME TSTR TICKS ->HMS HMS-> HMS+ HMS- SET: ->DAT ->TIM A/PM 12/24 M/D ADJST: HR+ HR- MIN+ MIN- SEC+ SEC- CLKA ALRM: >DATE >TIME A/PM EXEC RPT SET STOAL RCLAL DELAL FINDA RPT: WEEK DAY HOUR MIN SEC NONE />TIME: direct to alarm catalog PURG EXECS EDIT ->STK VIEW UNITS: LENG AREA VOL TIME SPEED MASS FORCE ENRG POWR PRESS TEMP ELEC ANGL LIGHT RAD VISC LENG: M CM MM YD FT IN MPC PC LYR AU KM MI NMI MIUS CHAIN RD FATH FTUS MIL \Gm A FERMI AREA: M^2 CM^2 B YD^2 FT^2 IN^2 KM^2 HA A MI^2 MIUS^ ACRE VOL: M^3 ST CM^3 YD^3 FT^3 IN^3 L GALU GALC GAL QT PT ML CU OZFL OZUK TBSP TSP BBL BU PK FBM TIME: YR D H MIN S HZ SPEED: M/S CM/S FT/S KPH MPH KNOT C GA MASS: KG G LB OZ SLUG LBT TON TONU T OZT CT GRAIN U MOL FORCE: N DYN GF KIP LBF PDL ENRG: J ERG KCAL CAL BTU FT*LB THER MEV EV POWR: W HP PRESS: PA ATM BAR PSI TORR MMH INHG INH20 TEMP: \^oC \^oF K \^oR ELEC: V A C \GW F W FDY H MHO S T WB ANGL: \^o R GRAD ARCMI ARCS ST LIGHT: FC FLAM LX PH SB LM CD LAM RAD: GY RAD REM SV BQ CI R VISC: P ST unit: adds the unit to the current object (real number) <\unit: convert to unit />unit: divide the current object by unit />UNITS:CONV UBASE UVAL UFACT ->UNIT VAR: user variables name does EVAL <\name does STO />name does RCL Bugs/ROM-Versions:: A DEFINE rounds values according to the current display format. ABCD entry of complex in form (A,\<)B) returns 'B*COS(A)+i*SIN(B)' and not vice-versa. A Executing NXEQ from the graphics environment with flag -3 set may overwrite the current equation with a numeric value. A KGET will erase memory if you transfer a zero length file. A If flag -41 is set, the alarm catalog will show the incorrect ones-digit for minutes. ABC INV returns incorrect result with an 8x8 or larger matrix. ?ABCD ?Having the time displayed while doing a backup may invalidate the backup. ???? "Ubase"-ed units are represented as a seven-byte value, with each byte being the intgeral power (-128 to +127) of the corresponding SI unit. Consequently, things get a little weird if you have computations that involve fractional units or units to powers outside the specified range. Try: 1 m 255 ^ UBASE This is not truly a bug. ?ABCD The sequence: -33 SF -34 SF sends printing output to the I/R interface using an 8-bit format and not the 12-bit "redeye" format. This is one of those holes where HP defines three of the four 2-bit combinations. ?ABCD The sequence: STD 19 1/x e-12 - \->Q Produces a fraction that clearly has not been reduced to lowest terms. ?ABCD PVIEW blows up if given pixel coordinates just to the top left of the grob ("{ #-1 #-1 }"). ?ABCD If the clock is running while a GROB is being displayed, the clock valuies are written into and erased from the GROB. ?ABCD In the Matrix Writer, any cell containing an absolute value between 1E5 and 1E6 can't be copied to the stack. Explanatio (from flavio@cflav.sublink.org (Flavio Casetta)): When you press [->STK] a subroutine recalls the current matrix (or vector) along with the cursor coordinates. Then a subroutine extracts the element from the matrix according with the actual dimension of the array. If the element does not exist it returns a null string. Then a subroutine checks for the presence of a null string. And here is the pitfall! The routine checking for the null string does not attempt to check in advance the object type lying on the stack. Numbers in the range 100000-999999 have the first five nibbles (3 of exponent and 2 of mantissa) matching the null string pattern. Try out with ->ASC ! Nevertheless the bug applies also to Complex numbers within the Real part in the same range. In effect if you supply a number like 100000.111111, you will find that the [->STK] works because the last two digits of the mantissa are no longer zeros. Thus the actual range of numbers is 100000-999999 rounded to 10 decimal significant digits. In conclusion the bug is due to a call to a subroutine whose expected argument is a string and not a number. The main routine is located at #63209h and always returns the original object plus a flag. A TRUE means that the string is null, a FALSE means it is not null. Notice that it is not a buggy routine. Simply it should not be called unless you have a string on the stack. I don't see a possible workaround in the usual sense of the word, unless you enter all numbers with at least 11 significant digits. What it can be done is a patch routine in RAM consisting of a menu that fixes the problem. Please keep in mind that when the Matrix Writer is not running, you may corrupt the memory by calling any of these subroutines. Supposedly, no version F ROM will ever be released for the 48. This is due to the "leak" via the release of the System RPL tools last August. (After each version is released, the internal tools all have their version numbers incremented to prevent confusing any code that they affect with released code. Someone forgot to fix this before releasing the tools.) There will also never be a version G ROM. This is because they messed things up while tinkering. There _may_ (as in, "not impossible") be a version H ROM. A version J ROM (no word on I) appears to have been released around December 1992. The only visible difference appears to be a factor of two or so speedup in the Equation Writer. Notes:: In the spring of 1991, HP offered a "trade in" program whereby all 48SX owners could trade their units in on one with Revision E ROMs. The Owner's Manual was completely rewritten and published in early 1992. This unit was left in production after the introduction of the 48GX only because there was a bunch of software out there that didn't follow the rules and wouldn't run on a GX. Don't use PICT STO: this causes display "snow." Instead, use something like PICT { #0h #0h } ROT REPL. These ASCII characters can't be typed from the keyboard: ; \ ^ ` The following and memory scanner information is from Alonzo Gariepy (alonzo@microsoft.UUCP, posted to Comp.sys.handhelds on 6 March 1990): 00000-0FFFF ROM (and registers for the display controller, I/O, and timers) 10000-6FFFF ROM 70000-7FFFF User/Display RAM (overlaid on Font/Strings ROM) 80000-BFFFF 128k for plug-in C0000-FFFFF 128k for plug-in F0000-FFFFF User/Display RAM (when 70000-7FFFF is used for Font/Strings ROM) The most interesting thing about scan mode is that the memory layout is different than in normal operation. The 32K of user/display RAM is moved from 70000 to F0000 so that you can see the ROM that is normally hidden underneath. In normal operation, the address space at 70000 is shared between this ROM and display RAM. The hidden ROM is used for code and data related to I/O, such as strings and font bitmaps, as well as for diagnostic functions, such as the self tests and scan mode. The 48 was called the 1152 at least at some point during design development. At the March 1992 Drexel Conference, some of the mockups were on display (courtsy of Dennis York from HP). The mockups consisted of a 41-ish case with a (fake) 3-line display, a 71-ish case, a clamshell (18C-ish) case, and a case that looked a lot like a 48. In addition was a mockup of a cassette drive. Why can't there be more card slots in the 48SX? (Other than case tooling.) The the address space is full. Of the 512 KBytes (1 MNybble) of address space, 256 KBytes is used for the ROM and each slot has 128 KBytes of address space dedicated to it. (This is also why the TDS 512 KByte cards must be bank-switched.) Thus, the address space is full already. But wait! What about the 32 KBytes of built-in RAM? It lives on top of the last 32 KBytes of ROM. When code is executed from here, the 48 must map the ROM in for reading (writes go to the RAM, of course), copy the required code to RAM, unmap the ROM, execute the code, and finally delete it from RAM. All of this entails a 20-30% performance hit. Apparently, the HP48's toolmaker dictated that the shift keys had to be located around the outside edge of the keyboard. (I assume that it has to do with where there is enough room for the extra traces.) If you pull a 48 RAM card and hold it in your hand, it has about a 2 week lifetime. If you put the same card (right away!) into the storage case, the lifetime increases to about a year. This is because the storage case incorporates a conductive strip which keeps the leads grounded. For a while during production, 48 cases were being warped. This was due to a capacitor physically interfering with the case during assembly. The line was shut down for a week to find this problem. After marketing complained to R&D about (not) making it easy to internationalize the products, the 48 was designed to be fully customizable. Only one version (English) was released. Some people think that you can reset a 48 by reversing the batteries: >>> DON'T <<< as you will tend to destroy your machine. The product number (48) was chosend to be a combintion of 41 and 28. ---------------------------------------------------------------------- Article: 3937 of comp.sys.hp48 From: akcs.joehorn@hpcvbbs.cv.hp.com (Joseph K. Horn) Date: Mon, 14 Sep 1992 06:40:02 GMT For those suffering from failing HP48 LCD's, the following "official" posting about it from HP's BBS sysop is the final word. Due to its importance, it was included on Goodies Disk #7, in the POSTINGS subdirectory. Hope it helps. -jkh- =============== (Feedbackto.hp) Item: 248 Resp: 3 by sanker@hpcvbbs.cv.hp.com Author: [Greg Sanker] Date: Tue Apr 07 1992 14:35 I checked with the Hardware folks, and here is the scoop: There was a specific problem that may or may not occur in a limited production of units. The problem has been isolated to the LCD and has been resolved with the vendor. The potentially defective LCD's were installed in HP 48's with serial numbers ranging 3013AXXXXX thru 3044AXXXXX. Symptoms of the problem are a pronounced black spot in the upper left hand corner of the display and/or dark/missing columns 3,5,7 and/or 9. If a unit is failing for the above reasons, subject to verification by the Corvallis Service Center, it will be covered as part of the standard warranty, even if the standard warranty period has expired. Greg (SYSOP) ============ ---------------------------------------------------------------------- From: akcs.joehorn@hpcvbbs.cv.hp.com (Joseph K. Horn) Date: Fri, 23 Oct 1992 07:40:08 GMT Message-ID: <2ae7a62d.1940.1comp.sys.hp48.1@hpcvbbs.cv.hp.com> There is a little-known "parentheses anomaly" which can easily be turned on and off like this: P.A. ON: Put '2^3' on the stack and then press and hold down the down-arrow key and then QUICKLY (before the EquationWriter begins) press the ON key, and release both. You'll see it change to '2^(3)'. All powers, square roots, and divisions will display with function-style parentheses. P.A. OFF: Just enter and then exit the EquationWriter. A warmstart also clears this strange mode, but that's a little drastic. ---------------------------------------------------------------------- From: akcs.joehorn@hpcvbbs.cv.hp.com (Joseph K. Horn) Date: Thu, 4 Feb 1993 08:40:11 GMT Subject: EquationWriter Bug Fixed in Rev J Message-ID: <2b70ccfa.2935comp.sys.hp48@hpcvbbs.cv.hp.com> Rev A-E EquationWriter Bug & Rev J Bugfix ----------------------------------------- observed by Joe Horn +------------------+ | Rev E behavior | +------------------+ Clear flag -53 first (the Precedence Flag). On a Rev E, put '((1+2)/(3+4))^5' on the stack and press down-arrow. You'll see: 5 / 1+2 \ | --- | (A) \ 3+4 / which is as it should be. But now press [orange-shift] [+]; see the message "Implicit () off" momentarily; press [left-arrow] (not backspace), then press the [EXIT] softkey. The expression gets mangled into this: 1+2 ----------- (B) (5) (3+4) which is not equal to expression (A) above! Bug, yes? Press [ON] to abort the process. Now set flag -53, then repeat the above procedure. First you see: 5 / 1+2 \ | --- | (C) \ 3+4 / which is the same as (A) above; but continuing as before, you see: (5) / 1+2 \ | ----- | (D) \ (3+4) / which *is* equal to the original. Thus the bug can be worked around by keeping flag -53 set (not a pleasant solution). +------------------+ | Rev J behavior | +------------------+ Major difference: after pressing down-arrow, Rev J goes directly into graphic mode, so you have to press ON and then EXIT to get into the equation editor (which Rev E goes directly into). But that's petty cash compared to the following big change. The same sequence of operations, first with flag -53 clear, then set, exactly as detailed above, yields these four displays in a Rev J: 5 / (1+2) \ | ----- | (A') \ 3+4 / (notice the extra parentheses?) and then: 5 / (1+2) \ | ----- | (B') \ (3+4) / which *is* equal to (A'); nothing at all like expression (B) above! and then: 5 / (1+2) \ | ----- | (C') \ 3+4 / which is the same as (A') above; and then: 5 / (1+2) \ | ----- | (D') \ (3+4) / which is also equal to (A'). No bug in Rev J. SUMMARY: Rev A-E have a bug in the EquationWriter that can mangle expressions if flag -53 is clear (the default) and if "Explicit Parentheses" mode is toggled. This bug has been fixed in Rev J. Unfortunately (as you can see above) Rev E *always* puts parentheses around polynomial numerators. It is therefore impossible to use the ->GROB command on a Rev J to create a GROB that looks like expression (A) above; the simplest that can be had is expression (A'). Another minor change, while I'm at it: Rev A-E don't change the menu when you press REPL; Rev J automatically flips to the appropriate RULES menu. None of these changes are documented anyplace that I'm aware of. Article: 9912 of comp.sys.hp48 From: akcs.joehorn@hpcvbbs.cv.hp.com (Joseph K. Horn) Date: Wed, 9 Jun 1993 07:40:10 GMT Subject: Re: WSLOG Message-ID: <2c158e10.935.3comp.sys.hp48.1@hpcvbbs.cv.hp.com> Path: news3.cis.umn.edu!umn.edu!news-feed-1.peachnet.edu!gatech!howland.reston.ans.net!wupost!sdd.hp.com!hp-cv!hp-pcd!hpcvra!rnews!hpcvbbs!akcs.joehorn Newsgroups: comp.sys.hp48 References: <A14794@AC.maus.de> <MHEISKAN.93Jun2005755@delta.hut.fi> Lines: 90 >>> There is a command for the HP48 I don't understand: It's WSLOG. >> WSLOG is completely explained on page 97 of Jim Donnelly's "The HP >> 48 Handbook", and on pages 415-416 of HP's "HP 48 Programmer's >> Reference Manual". Unfortunately, both of these works are >> copyrighted, with notices that their contents cannot be reproduced >> or transmitted without permission. > I'd suggest someone with either of the books would ask the damn > permission. This is really getting to be a FAQ.................... Excellent suggestion. So I called Jim Donnelly, and he kindly gave his permission to duplicate the following page from his book. ====================================================================== SYSTEM HALT LOG The command WSLOG returns four strings to the stack showing the cause, date, and time of the four most recent system halt events. The system halt log is not cleared when memory is erased, and may only be cleared by placing the calculator in coma mode. Example: 3-03/06/90 09:30:10 This string shows a type three system halt that occurred on the morning of March 6, 1990. +------+-----------------------------------+ | CODE | CONDITION | +------+-----------------------------------+ | 0 | Coma exit | | 1 | Low battery system save | | 2 | I/O timeout | | 3 | Execute through address 0 | | 4 | Corrupt system time | | 5 | Port change data | | 7 | Corrupt RAM test word | | 8 | Hardware configuration difficulty | | 9 | Corrupt alarm list | | A | Corrupt memory | | B | Module pulled or card bounce | | C | Hardware reset | | D | Software difficulty | | E | Corrupt configuration table | | F | Merged RAM card pulled | +------+-----------------------------------+ Note that some events will cause two events to be recorded, and some system halt events will cause a coldstart. [page 97 from Jim Donnelly's "The HP 48 Handbook", First Edition; copyright 1990, all rights reserved; reprinted with permission.] ====================================================================== A few extra notes from Joe Horn: (1) Jim Donnelly will be releasing real soon now a Second Edition of the book especially for the HP48G/GX, greatly expanded and containing lots more examples & goodies, including a whole chapter on System RPL programming! If you plan on keeping your HP48S/SX and haven't gotten the First Edition yet, I strongly suggest that you do so posthaste before it's extinct. (2) The format of the 4 dates in WSLOG's output is controlled by flag -42, the date format flag. The 4 times, however, are always in 24-hour format and are *not* affected by flag -41, the clock format flag. (3) The WSLOG information resides at a fixed RAM address, and therefore makes an excellent chunk of scratch RAM for assembly language programmers, as has been done by several folks here on the net. (4) Darryl Okahata's FAQ list includes a brief discussion of WSLOG as item #31. (5) At the end of time (differs depending on your ROM revision; for rev A-E it's 23:59:59 on 31 December 2088; for rev J it's 31 December 2090) a warmstart occurs, and *two* events get recorded, both with code 4 and date/time of zero. The following second time-warps back one century. (6) A code 2 warmstart (I/O timeout) does *not* refer to a Kermit retry timeout, but to a hardware IR failure only. -Joseph K. Horn- -Peripheral Vision, Ltd.- akcs.joehorn@hpcvbbs.cv.hp.com Disclaimer: I don't work for HP, EduCALC, or Armstrong Publishing.
Areas
General
Craig's Articles
Last modified Saturday, 2012-02-25T17:29:49-06:00.