home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.hp48
- Path: sparky!uunet!seq!spell
- From: Detlef Mueller <detlef@dmhh.hanse.de>
- Subject: v08i006: chkit.dm - CHKIT v1.1 - an utillity for identifing suspect RPL programs, Part01/01
- Message-ID: <1993Jan22.043653.2805@seq.uncwil.edu>
- Followup-To: comp.sys.hp48
- Sender: spell@seq.uncwil.edu (Chris Spell)
- Organization: Univ. of North Carolina @ Wilmington
- Date: Fri, 22 Jan 1993 04:36:53 GMT
- Approved: spell@seq.uncwil.edu
- Lines: 289
-
- Checksum: 2928438371 (verify with brik -cv)
- Submitted-by: Detlef Mueller <detlef@dmhh.hanse.de>
- Posting-number: Volume 8, Issue 6
- Archive-name: chkit.dm
-
-
- BEGIN_RDME chkit.rdm
-
- The changes of the CHKIT library vs. v1.0:
- - only contains one command: CHKIT
- - add unit search
-
- END_RDME
-
- BEGIN_DOC chkit.doc
-
- Hi all,
-
- the amout of people owning a ROM rev J HP48 grows and most sys-RPL/assembler
- programs available as standalone objects or libraries are using 'unsupported'
- ROM entry points simply because lot's of low level function aren't 'supported'
- (eg. library handling, port management).
-
- The little library provided in this article is a 1st step in trying to find
- moved RPL code. It is written using only ROM entries listed in ENTRIES.A of
- the HP toolkit, which should be safe on any HP48 ROM revision. It provides
- the command CHKIT; CHKIT expects an composite object (program, list, symbolic
- or unit) or a real number (the library ID of an installed library) on the
- stack. The object (resp. the objects of a library) is searched for RPL pointer
- into the ROM; each ROM pointer found is checked for pointing to a valid RPL
- object.
-
- The following rules define a valid RPL pointer (PTR) into the ROM:
-
- - a pointer to a primitive code object, ie. [PTR] = PTR - 5
- - a pointer to a RPL object, ie. [[PTR]] = PRLG
- - a pointer to the pointer DupAndThen, ie. [PTR] = DupAndThen
-
- In case no invalid RPL pointer are found, CHKIT reports
- All inspected RPL
- pointer are valid...
- in the status display area and leave the stack unchanged.
-
- If CHKIT detects ROM pointer not following the above rules,
- !!! Warning !!!
- Found void RPL pointer
- is reported in the display status area, the passed object/number is dropped
- and a list of binary numbers is placed on the stack. The binary numbers are
- the values of the illegal pointer.
-
- If you get a new piece of software, which was written on a HP48 with a
- different ROM revision than yours, run CHKIT on it.
-
- If CHKIT reports any invalid RPL pointer, remove the new software immidately
- from your HP48, send the list of the illegal pointer to the author of the
- software and publish it in comp.sys.hp48 (please include the name of the
- software, where you get it from and what ROM rev your HP48 have).
-
- If a checked object is reported to be clean means that all verified RPL
- pointer are valid from the scope of RPL execution; it means *NOT* that
- the ROM based code didn't move !
-
- RPL bases on assembler routines; there are some supported assembler ROM
- entries and a lot of unsupported ones. In many RPL programs are CODE objects
- embedded, containing assembler code slices (eg. <-LIB->, QED, StrWrt etc.).
- Entries called by this assembler slices can't be validated without a complete
- entries list of each ROM rev !
-
- CHKIT only works on installed libraries - the installation of a new library
- may cause trouble, if its configuration code makes use of unsupported entries !
-
- However, I would really appreciate if someone owning a rev J HP48 will install
- the <-LIB-> library (be shure, that flag 5 is clear !), then executing
- 1221 CHKIT and mailing me the result..
-
- Bye,
- 8-Detlef
-
- END_DOC
-
- BEGIN_RPL chkit.dir
- %%HP: T(3)A(D)F(.);
- DIR
- $ROMID 815
- $TITLE "CHKIT :1.1\169DM'93"
- $VISIBLE { CHKIT }
-
- $CONFIG
- "($CONFIG)
- ::
- 815 TOSRRP
- ;"
-
- CHKIT
- C$ 278 (CHKIT)
- ::
- CK1 STRIPTAGS
- ::
- DUPTYPEREAL? case
- ::
- RDROPCOLA ID cklib
- ;
- DUPTYPECOL? ?SEMI
- DUPTYPELIST? ?SEMI
- DUPTYPESYMB? ?SEMI
- DUPTYPEEXT? ?SEMI
- INHARDROM? ?SEMI
- SETTYPEERR
- ;
- NULL{} { LAM l } BIND
- $ "Snooping object\\031"
- DISPSTATUS2
- ID snoop
- ID bye
- ;
-
- cklib
- C$ 269 (cklib)
- ::
- DUP
- COERCEDUP ZERO
- #>ROMPTR ROMPTR@
- NOTcase
- ::
- TWELVE ERRORSTO
- ERRJMP
- ;
- NULL{} { LAM l } BIND
- ZEROSWAP BlankDA1
- BEGIN
- OVER #>$
- $ "Snooping ROMPTR "
- !insert$ DISPROW1
- ID snoop DROP
- #1+ 2DUP #>ROMPTR
- ROMPTR@
- NOT_UNTIL
- 2DROP
- ID bye
- ;
-
- snoop
- "(snoop)
- ::
- '
- ::
- ?ATTNQUIT
- INHARDROM? case
- ::
- CODE
- GOSBVL =SAVPTR
- A=DAT1 A ->ob
- D1=A
- C=DAT1 A [ob]
- D1=C
- C=C-CON A,5
- ?A=C A
- GOYES GpPfL
- LA(5) (=DupAndThen)-5
- ?A=C A
- GOYES GpPfL
- A=DAT1 A [[ob]]
- LC(5) =PRLG
- ?A=C A
- GOYES GpPfL
- GpPfL
- GOVLNG =GPPushT/FLp
- ENDCODE
- ?SEMI
- CODE
- GOSBVL =SAVPTR
- A=DAT1 A
- P= 4
- GOVLNG =PUSHhxsLoop
- ENDCODE
- LAM l SWAP2DUP
- EQUALPOSCOMP
- #0<> case2DROP
- >TCOMP
- ' LAM l STOLAM
- ;
- DUPTYPECOL? case
- :: 1GETLAM EVAL ::N
- ;
- DUPTYPELIST? case
- :: 1GETLAM EVAL {}N
- ;
- DUPTYPESYMB? case
- :: 1GETLAM EVAL SYMBN
- ;
- DUPTYPEEXT? NOT?SEMI
- 1GETLAM EVAL {}N
- # 2ADA (DOEXT)
- CHANGETYPE
- ;
- '
- ::
- INNERDUP
- DUP#0=csDROP
- ZERO_DO
- ROLL 2GETEVAL
- ISTOP@
- LOOP
- ;
- { NULLLAM NULLLAM }
- BIND 2GETEVAL ABND
- ;"
-
- bye
- C$ 197 (bye)
- ::
- 1GETABND DUPNULL{}?
- ITE
- ::
- DROP
- $ "All inspected RPL\\010pointer are valid\\031"
- ;
- ::
- SWAPDROP
- $ " !!! Warning !!! \\010Found void RPL pointer"
- ;
- DISPSTATUS2
- SetDA1Temp
- ;
- END
- END_RPL
-
-
- BEGIN_ASC chkit.asc
- %%HP: T(1);
- "04B2076500013484B4944502A313E2139A44D472933301F234C40000000C9400
- 50000D9D2011920F230090770B2130D9D206B436F6A368DA16D9D2044230C2A2
- 0D400014C6C60296E637075636475646022505C4A007F696E647562702162756
- 026716C69646F1B2130D9D20B9F06C2A20F500002020212121202751627E696E
- 6760212121202020202A064F657E6460267F69646022505C40207F696E647562
- 7B2130C0721C2093B2130D9D2079E60D9D20E3424AD2A139916D9D20CCD20840
- 008FB9760143131147135818FA48A202808247C1468A21114334CF8208A2208D
- 6B026B3A16CCD20810008FB9760143248DD6950D6E2010C6C68363A4467CC300
- 7916AF25079E60D6E2010C6B1D70B21307E12639916D9D206B316E8F6054450B
- 21301122639916D9D206B316E8F6095450B21302D12639916D9D206B316E8F60
- D6450B2130A4026C2A166B316E8F609545011920ADA203BA50B213079E60D9D2
- 014C26DBC363C370523305E2369427043370B213047A2003D4303D43B21300D4
- 705E23679470B2130D9D20881301EC26FEF3005E7099E70DA916D9D2076040E0
- D401DE40B21309E55047A20D6E2010C6B21300D470A3E26645A32A1702C2304E
- 761C2A205200035E6F6F60796E6760225F4D4054525025E226B542129E20F232
- 0044230FED30CA13005E7099E706C3368523029E20F23300B21308F23000D9D2
- 05AA8157746D9D209612639916D9D208592629E20F23100B21307E126B3A1611
- 226B3A162D126B3A16A4026B3A16AD2A1B3A162BC81B21309E55047A20D6E201
- 0C6B21300D470C2A205200035E6F6F60796E67602F626A6563647F1C072129E2
- 0F2320029E20F23300B2130E4A2091000B1FFFB2EFFA6CFFE6BFFE4A20E60000
- 0000000000000000000140000000000000000000000000000000000000000000
- 00000000000000041000503484B49445000F000061DF708E"
- END_ASC
-
- BYTES: #E807h 694
-
- BEGIN_UU chkit.uue
- begin 644 CHKIT.LIB
- M2%!(4#0X+45`*W!6`!!#2$M)5"`Z,2XQJ41-)SDS$"]#3````,!)``4`T-D"-
- M$2GP,@`)=[`2`YTM8$MC;SJ&K6&=+4`D`RPJT`0`06QL(&EN<W!E8W1E9"!27
- M4$P*<&]I;G1E<B!A<F4@=F%L:60?*S'0V0*;#\:B`E\```("$A(2`G(5)N>6.
- MYG8&$A(2`@("`J)@]%;G1@9B]Y9&!B(%Q00"]Y;F1E<FMQ(##"?!`CDK,=#9V
- M`I=NT-D"/B2D+1J3&=;9`LPM@`0`^)MG$#0Q$70QA8&OA"H@""AT'&2H$A$T`
- M0_PH@"H"V+8@MJ-AS"V``0#XFV<0-$+8;5G0Y@(!;&PX-DIDQSP`EV'Z4G#I*
- M!FTN$,"VT0<K,7`>8I,9UMD"MA/F^`9%5+`2`Q$B-IEAG2U@.V&.;Y!%!2LQ?
- M(!UBDQG6V0*V$^;X!FU4L!(#2B#&HF&V$^;X!EE4$)$"VBHPJP4K,7#I!ITMF
- M$,1BO3PV/`<E,U`N8TER0#,'*S%`IP(P30/3-"LQ`$T'Y3)V20<K,=#9`H@QH
- M$,YB[S\`Y0>9?M":89TM<`8$#DT0[00K,9!>!70JT.8"`6PK,0!-!SHN9E0Z7
- MHG$@+`/D9\&B`B4`,.7V]@:7YG8&(O74!$4E!5(N8ELD(>D"+R,`1#+PW@.L%
- M,0#E!YE^8#QC6#(@Z0(O,P`K,8`O`P"=+5"J&'5'UMD":2$VF6&=+8"58I(N.
- M\#(!L!(#YR&VHV$1(K:C8=(AMJ-A2B"VHV':HK&C8;*,L1(#Z55`IP)M+A#`'
- MMA(#T'3`H@(E`##E]O8&E^9V!O(FIE8V1O?!<!*2+O`R`B#I`B\S`"LQX*0"4
- M&0"P\?\K_J_&_V[[[Z0";@``````````````$`0`````````````````````Y
- ;````````````````0`$`!4-(2TE4`/```!;]E
- ``
- end
- sum -r/size 13647/1011 section (from "begin" to "end")
- sum -r/size 38830/702 entire input file
- END_UU chkit.uue
- --
- +------------------------------------+--------------------------------------+
- |`What a depressingly stupid machine'| Detlef Mueller |
- | -- Marvin | detlef@dmhh.hanse.de |
- +------------------------------------+--------------------------------------+
-
-