Bug in Ford's nkbd driver

Michael "Ford" Ditto ditto at cbmvax.UUCP
Tue Nov 1 06:51:37 AEST 1988


In article <381 at uncle.UUCP> jbm at uncle.UUCP (John B. Milton) writes:
 [ about nkbd ]
>To get it to work, I changed (in ldkout):
>	if (!(*C_CMND_ADDR & 2)) {
>to
>	if (!((ushort)*C_CMND_ADDR & 0x200)) {

Yeah!  That's it, all right!  It was just a bug in the human decompiler.
The cast isn't necessary, just change 2 to 0x200 (C_CMND_ADDR is already
a pointer to ushort).

>  Hey Ford, how did this off by one error creap in?

Like this:  the assembly code looked like:

	btst	&1,0e70000

which to my brain looks like (*C_CMND_ADDR & 2) since
(C_CMND_ADDR == 0xe70000).  It's actually looking at bit 1 of *byte 1*
(i.e., actually bit 9), because the 680x0 counts bytes backwards.  I
usually catch these as I go along, but this one slipped by (especially
since it worked anyway on my machine).  I hate Motorola byte order!
-- 
					-=] Ford [=-

"The number of Unix installations	(In Real Life:  Mike Ditto)
has grown to 10, with more expected."	ford at kenobi.cts.com
- The Unix Programmer's Manual,		...!sdcsvax!crash!elgar!ford
  2nd Edition, June, 1972.		ditto at cbmvax.commodore.com



More information about the Comp.sys.att mailing list