Re: bug in bit32?

Mark Slicker <[email protected]>
Newsgroups gmane.comp.lang.forth.colorforth
Message-ID <[email protected]>
On Fri, 6 May 2005, Albert van der Horst wrote:

> On Thu, May 05, 2005 at 07:25:08PM -0400, Mark Slicker wrote:
>> On Fri, 6 May 2005, Albert van der Horst wrote:
> <SNIP>
>>
>> I don't follow this analysis. You should probably review again the source
>> code. The way bit16 works is that is will shift the bits one by one into
>> the carry bit, if the carry bit is set it will write a pixel. I does this
>> 16 times. bit32 is similar execpt it will write four pixels if the carry
>> bit is set.
>
> You're right I was totally off the mark. I overlooked that
> the LODS instruction sets a new value into AX.
> But that establishes that the high 16 bits of AX are never inspected
> in the loop of bits15 and bits32.

This is not entirely correct, remember that bit32 shifts EAX for each 
iteration, and bit16 shifts just AX. This is where I argue that bit32 has 
a bug, since the carry should be tested on the shift of AX.

I don't know if it helps but I've coded bit16 in colorForth:

: bit16 w drop *byte 15 2*s 16 for 2* -if p! then 2 +i next ;

I might change some names here, but the idea is similar, I use sign bit 
instead of the carry bit since colorForth has  -if .

w is the pentium word prefix
*byte swaps the lower bytes of T
p! writes DX to (EDI)
+i adds a literal to EDI

I've recoded some words so 'bit16' does not use the data stack, except for 
'w drop' which fetches the next row of the bitmap.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.