Shop OBEX P1 Docs P2 Docs Learn Events
REP blocks and branching issue. — Parallax Forums

REP blocks and branching issue.

I started a new thread to isolate the REP issues "evanh" found from the FPGA files thread.

Here's my current test code demonstrating the Jxxx instruction issue.
test_code	
		mov	pa,#0
		mov	pb,#0
		cogid	cog
		decod	cog
{
'In version1 the ATN flag is polled and a branch cancels the REP
loop if C=1. This works corretly.
}
{
version1	rep	@rep_end,#0
		incmod	pb,#7 wz
	if_z	cogatn	cog
		add	pa,#1
		add	pa,#$10
		pollatn	wc
	if_c	jmp	#escape
		add	pa,#$100
		add	pa,_1000
rep_end
}
{
In version 2 a JATN is used.
This cancels the REP block but then restarts the REP block again.
}
{
version2	rep	@rep_end,#0
		incmod	pb,#7 wz
	if_z	cogatn	cog
		add	pa,#1
		add	pa,#$10
		jatn	#escape
		add	pa,#$100
		add	pa,_1000
rep_end
}
{
To check relative (rel9) branches work, this version uses a TJZ instruction.
It cancels correctly too.
}
'{
version3	rep	@rep_end,#0
		incmod	pb,#7 wz
		add	pa,#1
		add	pa,#$10
		tjz	pb,#escape
		add	pa,#$100
		add	pa,_1000
rep_end
'}

escape		jmp	#$

_1000		long	$1000
cog		long	0

And here's the results from my debugger.
Version1 & 3 work correctly, but version2 with the "JATN" instruction restarts the cancelled REP block again.

Version1 results
<LOG>>step
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
001: F607EE00                                MOV     PB,#test_code
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
002: FD601E01                                COGID   cog
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
003: F9C01E0F                                DECOD   cog
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
004: FCDC1000 version1                       REP     #$8,#test_code
005: F70FEE07                                INCMOD  PB,#$7 WZ
006: AD601E3F                           IF_z COGATN  cog
007: F107EC01                                ADD     PA,#$1
008: F107EC10                                ADD     PA,#$10
009: FD701C24                                POLLATN  WC
00A: CD900008                           IF_c JMP     #rep_end
00B: F107ED00                                ADD     PA,#$100
00C: F103EC0E                                ADD     PA,_1000
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: C Z BRK:00
00D: FD9FFFFC rep_end                        JMP     #rep_end
<LOG>(step) >pa
          pa COG $1F6:  $00007788 %0000_0000000_000_000111011_110001000 30600
<LOG>>logoff

PA = $7788 shows correct REP block cancel.

Version2 results
<LOG>>step
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
001: F607EE00                                MOV     PB,#test_code
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
002: FD601C01                                COGID   cog
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
003: F9C01C0E                                DECOD   cog
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
004: FCDC0E00 version2                       REP     #$7,#test_code
005: F70FEE07                                INCMOD  PB,#$7 WZ
006: AD601C3F                           IF_z COGATN  cog
007: F107EC01                                ADD     PA,#$1
008: F107EC10                                ADD     PA,#$10
009: FBCC1C02                                JATN    ,#$2 (+2)
00A: F107ED00                                ADD     PA,#$100
00B: F103EC0D                                ADD     PA,_1000
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc Z BRK:00
004: FCDC0E00 version2                       REP     #$7,#test_code
005: F70FEE07                                INCMOD  PB,#$7 WZ
006: AD601C3F                           IF_z COGATN  cog
007: F107EC01                                ADD     PA,#$1
008: F107EC10                                ADD     PA,#$10
009: FBCC1C02                                JATN    ,#$2 (+2)
00A: F107ED00                                ADD     PA,#$100
00B: F103EC0D                                ADD     PA,_1000
<LOG>(step) >pa
          pa COG $1F6:  $00007788 %0000_0000000_000_000111011_110001000 30600
<LOG>>step
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc Z BRK:00
004: FCDC0E00 version2                       REP     #$7,#test_code
005: F70FEE07                                INCMOD  PB,#$7 WZ
006: AD601C3F                           IF_z COGATN  cog
007: F107EC01                                ADD     PA,#$1
008: F107EC10                                ADD     PA,#$10
009: FBCC1C02                                JATN    ,#$2 (+2)
00A: F107ED00                                ADD     PA,#$100
00B: F103EC0D                                ADD     PA,_1000
<LOG>(step) >pa
          pa COG $1F6:  $0000EF10 %0000_0000000_000_001110111_100010000 61200
<LOG>>logoff
Note that the REP cancels correctly with PA = $7788, but then restarts the REP block again.

Version3 results
<LOG>>step
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
001: F607EE00                                MOV     PB,#test_code
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
002: FD601A01                                COGID   cog
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
003: F9C01A0D                                DECOD   cog
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc nz BRK:00
004: FCDC0C00 version3                       REP     #$6,#test_code
005: F70FEE07                                INCMOD  PB,#$7 WZ
006: F107EC01                                ADD     PA,#$1
007: F107EC10                                ADD     PA,#$10
008: FB97EE02                                TJZ     PB,#$2 (+2)
009: F107ED00                                ADD     PA,#$100
00A: F103EC0C                                ADD     PA,_1000
<LOG>(step) >
~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
Cog #1 FLAGS: nc Z BRK:00
00B: FD9FFFFC rep_end                        JMP     #rep_end
<LOG>(step) >pa
          pa COG $1F6:  $00007788 %0000_0000000_000_000111011_110001000 30600
<LOG>>logoff

REP block cancels correctly woth PA = $7788.
So a "rel9" branch works OK.

I'll keep digging......

FYI: These test were done on FPGA becuase sadly I fried my P2 silicon this morning. :(


Comments

  • sadly I fried my P2 silicon this morning. :(

    Oh no! How did that happen?
  • Faulty benchtop supply switched range on me. 30V instead of 5V.

    Starting grieving process now. :(
  • cgraceycgracey Posts: 14,152
    ozpropdev wrote: »
    Faulty benchtop supply switched range on me. 30V instead of 5V.

    Starting grieving process now. :(

    I mourn for you, too. We could send you another glob-top prototype for soldering onto a P2D2.
  • evanhevanh Posts: 15,915
    edited 2018-12-18 06:14
    You've just reminded me my own dual benchtop, which hasn't done many hours at all, has lost one current meter. Cheap hand soldering I bet!

    Update: Fixed my one. Turned out to just be IC sockets. Wriggled the chips and perfect readings again. :) The soldering is actually good for single sided boards. It has been reworked but maybe that's a good sign.

  • Did that 30v episode release smoke @ozpropdev ?
  • Here's three versions that demonstrate the issues with branches at the end of the REP block.
    Version4 has a relative jump. (Does extra loop)
    Version5 has a absolute branch. Works Ok
    Version6 is a relative branch with NOP padding to show PC+relative issue.

    Version4 results
    <LOG>>stat
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    000: F607EC00 test_code                      MOV     PA,#test_code
    <LOG>>step
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    001: FCDC0C00 version4                       REP     #$6,#test_code
    002: F70FEE07                                INCMOD  PB,#$7 WZ
    003: F107EC01                                ADD     PA,#version4
    004: F107EC10                                ADD     PA,#$10
    005: F107ED00                                ADD     PA,#$100
    006: F103EC09                                ADD     PA,_1000
    007: AD900000                           IF_z JMP     #rep_end
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    002: F70FEE07                                INCMOD  PB,#$7 WZ
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    003: F107EC01                                ADD     PA,#version4
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    004: F107EC10                                ADD     PA,#$10
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    005: F107ED00                                ADD     PA,#$100
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    006: F103EC09                                ADD     PA,_1000
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    007: AD900000                           IF_z JMP     #rep_end
    <LOG>(step) >pa
              pa COG $1F6:  $00009999 %0000_0000000_000_001001100_110011001 39321
    <LOG>>logoff
    
    

    PA = $9999 (1extra loop)

    Version5 results
    <LOG>>stat
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    000: F607EC00 test_code                      MOV     PA,#test_code
    <LOG>>step
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    001: FCDC0C00 version5                       REP     #$6,#test_code
    002: F70FEE07                                INCMOD  PB,#$7 WZ
    003: F107EC01                                ADD     PA,#version5
    004: F107EC10                                ADD     PA,#$10
    005: F107ED00                                ADD     PA,#$100
    006: F103EC09                                ADD     PA,_1000
    007: AD800008                           IF_z JMP     #rep_end
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    008: FD9FFFFC rep_end                        JMP     #rep_end
    <LOG>(step) >pa
              pa COG $1F6:  $00008888 %0000_0000000_000_001000100_010001000 34952
    <LOG>>logoff
    
    
    With absolute brach PA = $8888 which is the correct result.

    Version6 result
    <LOG>>stat
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    000: F607EC00 test_code                      MOV     PA,#test_code
    <LOG>>step
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc nz BRK:00
    001: FCDC0C00 version6                       REP     #$6,#test_code
    002: F70FEE07                                INCMOD  PB,#$7 WZ
    003: F107EC01                                ADD     PA,#version6
    004: F107EC10                                ADD     PA,#cog
    005: F107ED00                                ADD     PA,#$100
    006: F103EC0F                                ADD     PA,_1000
    007: AD900018                           IF_z JMP     #escape
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    008: 00000000 rep_end                        NOP     
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    009: 00000000                                NOP     
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    00A: 00000000                                NOP     
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    00B: 00000000                                NOP     
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    00C: 00000000                                NOP     
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    00D: 00000000                                NOP     
    <LOG>(step) >
    ~~~~~~~~~~~~~~~~~~~ Propeller 2 Debugger 3.3 File: demo3.obj ~~~~~~~~~~~~~~~~~~~
    TOS: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    Cog #1 FLAGS: nc Z BRK:00
    00E: FD9FFFFC escape                         JMP     #escape
    <LOG>(step) >pa
              pa COG $1F6:  $00008888 %0000_0000000_000_001000100_010001000 34952
    <LOG>>logoff
    
    
    Note that the NOP padding "fudges" the relative branch to hit the right address.




  • ozpropdevozpropdev Posts: 2,792
    edited 2018-12-18 07:08
    Tubular wrote: »
    Did that 30v episode release smoke @ozpropdev ?
    Pop sound (volt regs me thinks), no smoke then heartrate "overclocked" for a while.

  • cgraceycgracey Posts: 14,152
    Ozpropdev, you've earned the distinction of being the first to kill a P2 chip.
  • cgraceycgracey Posts: 14,152
    So, is there any issue with other than the last instruction being a jump in a REP loop?
  • jmgjmg Posts: 15,173
    cgracey wrote: »
    So, is there any issue with other than the last instruction being a jump in a REP loop?

    I think yes, evanh reports erratic exiting, which is a separate issue....
  • evanhevanh Posts: 15,915
    edited 2018-12-18 08:18
    Chip,
    Yes. Version two in Brian's opening post is a branch-on-event. It intermittently fails by falling out the bottom of the "forever" REP block instead of taking the branch. And happens no matter where in the REP block it sits.

  • evanhevanh Posts: 15,915
    edited 2018-12-18 08:52
    .
  • Cluso99Cluso99 Posts: 18,069
    cgracey wrote: »
    Ozpropdev, you've earned the distinction of being the first to kill a P2 chip.

    It's all good Chip. The smoke is on the way up to you :wink:
  • evanhevanh Posts: 15,915
    edited 2018-12-18 14:23
    The branch-on-event inside a REP issue can be recovered from by placing a double branch after the end of the REP block. The first one gets ignored. Only on the second branch instruction do things return to normal. It doesn't seem to matter the distance. Another way to gain control back is to place a double COGSTOP. The first one is always ignored, same as branching.

    Other instructions that don't manipulate the program counter seem to execute as if nothing is wrong.

  • evanhevanh Posts: 15,915
    I'm guessing interrupts somehow override it and also rectify the problem.

  • cgraceycgracey Posts: 14,152
    I see what the problem is!!!

    The conditional criteria for event jumps can possibly change within the instruction cycle, causing a bifurcated reaction in the REP/jump circuits. This shouldn't be allowed.

    I'm going to fix this and make new FPGA files. This bug should go away, then.

    Wendy's holding the door for us on this. I hope a few of you will be able to confirm that, indeed, this bug is gone, after I get the new FPGA images out.

    Thanks for doggedly hammering on this. And the LUT problem. They should both be fixed here, shortly.
  • evanhevanh Posts: 15,915
    Oh, cool. I was getting worried it was going to much harder to narrow down.
  • cgraceycgracey Posts: 14,152
    Are there any other problems that anyone can remember?
  • cgraceycgracey Posts: 14,152
    Okay. That JMP-event bug is fixed.

    Cooking up new FPGA files now. Already sent the latest to Wendy at ON.
  • evanhevanh Posts: 15,915
    edited 2019-02-01 10:48
    cgracey wrote: »
    The conditional criteria for event jumps can possibly change within the instruction cycle, causing a bifurcated reaction in the REP/jump circuits. This shouldn't be allowed.
    Chip,
    Just out of interest, could that potentially have gone batty for event branching in general? ie: Beyond REPing cases.

  • cgraceycgracey Posts: 14,152
    edited 2019-02-01 12:05
    evanh wrote: »
    cgracey wrote: »
    The conditional criteria for event jumps can possibly change within the instruction cycle, causing a bifurcated reaction in the REP/jump circuits. This shouldn't be allowed.
    Chip,
    Just out of interest, could that potentially have gone batty for event branching in general? ie: Beyond REPing cases.

    I wondered the same thing. I would need to look more carefully to know, for sure, but my design assumption was certainly that the 'jump' signal would be stable for the duration of the instruction. Hearing that event jumps behaved differently than other conditional jumps, I thought to look at the jump-criteria logic and it kind of jumped out at me. Of course, I jumped when the realization struck. I've been relaxed ever since I fixed it, though. And I'm really glad, too, that we fixed the LUT r+w glitch. That would have been a drag to live with.
Sign In or Register to comment.