On Thu, Oct 27, 2022 at 3:04 PM John R. Hogerhuis <jho...@pobox.com> wrote:

>
> With hex it's a question though since MOD 16 can be done with AND 15 which
> is probably faster than a general integer 16 modulus. There's no bitshift
> operator so you still need a integer divide by 16%. Who knows how efficient
> an integer divide by 16 is in the interpreter versus 4096 (integer)
> divides.
>

That's a good question about efficiency. Integer division by 4096 seems
reasonably quick, but it would have been nice if BASIC had exposed the bit
shift operators. (I'm presuming the 8085 had some, right?)

I'm not sure it'd be any faster than division by 4096, but one could use
the fact that we're using a 2-byte integer for the address and just look at
each byte.
hexit.do

1 TS$=TIME$
5 DIM H$(15): *FOR* T=0 *TO* 9:H$(T)=CHR$(48+T): *NEXT* T: *FOR*
T=ASC("A") *TO* ASC("F"): H$(T-55)=CHR$(T): *NEXT*
6 DIM R$(7): *FOR* T=0 *TO* 7: R$(T)=" ": *NEXT*
10 DEFINT A-F, P: D=0: P=VARPTR(D)
15 INPUT "Start"; ST%
16 INPUT "End"; EN%
20 *FOR* D=ST% *TO* EN%
30 *IF* (D MOD 8) = 0 *THEN* *PRINT*" ";: *FOR* T=0 *TO* 7: *PRINT*
R$(T);: *NEXT*: *PRINT*: S=0: *GOSUB* 400
40 *GOSUB* 200
90 *NEXT*
100 REM Timing
110 TE$=TIME$
115 *PRINT*
120 *PRINT* TS$ " to " TE$
199 *END*
200 REM Print 2 hexits
201 *' *Input: D is address of an 8-bit integer202* '* Output: None,
but 2 hexits are printed followed by a space
210 A=PEEK(D)
220 *PRINT *H$(A\16); H$(A MOD 16); " ";
230 *IF* A<32 *THEN* A=46
240 R$(S)=CHR$(A)
250 S=S+1
260 *RETURN*
400 REM Print 4 hexits
401 *' *Input: P is address of a 16-bit little endian integer
402* '* Output: None, but 4 hexits are printed followed by a space
410 A=PEEK(P+1): B=PEEK(P)
420 *PRINT *H$(A\16); H$(A MOD 16); H$(B\16); H$(B MOD 16); " ";
430 *RETURN*

------------------------------
—b9

Reply via email to