Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Print color bug (*solved*)
#18
(10-05-2022, 07:59 AM)Darkstar Wrote:
(10-05-2022, 07:01 AM)boriel Wrote: The print changes were introduced in 1.16.0!
Indeed that was one of the updates from 1.15 to 1.16. I'm on it. Smile

I tested 1.15.2 and the bug was there so it must have happened before 1.16.0. You state in your changelog that you changed the print routine in 1.16.1 so you are contradicting yourself. The print routine is just likely incomplete as it does not reflect some changes that you have made to the core codebase, but the print routine is just fine under the old conditions.

I had a color bug myself as I was compiling my program under the new version of the complier, it was not updating the color when I was tripple buffering. I had to change the code from this:

Code:
Sub fastcall SetScreen (ScreenPtr as uinteger)

Asm
  ld (.core.SCREEN_ADDR), hl
End asm

End sub
 
To this:

Code:
Sub fastcall SetScreen (ScreenPtr as uinteger)

Asm
  ld (.core.SCREEN_ADDR), hl
  ld de, 6144
  Add hl, de
  ld (.core.SCREEN_ATTR_ADDR), hl
End asm

End sub

This might give you a clue.

This makes me wonder if other statements like DRAW, PLOT, CIRCLE have this bug as well. I hope you figure it out.

Okay, I've reviewed your code and it's ok. And so the compiler.
SCREEN_ATTR_ADDR *must* be updated, along with SCREEN_ADDR from 15.x onwards.
This is because this allows having the ATTR Region in another separate place. For example, suppose you want to buffer only the first 2 thirds of the screen (rows 0 to 15, both included), and leave the last third unbuffered (for scores and game data only). You can do it, by pointing the ATTR address to SCREEN_ADDR + 4096 and saving 2k.

Your SetAttrs routine should be:

Code:
Sub SetAttrs (ByVal Row as ubyte, ByVal Column as ubyte, ByVal NumberOfCells as uinteger)

Asm
  ld e, (ix+7)
  ld d, (ix+5)
  ld h, 0                    ;  7 T-States
  ld a, d                    ;  4 T-States
  add a, a    ; a * 2        ;  4 T-States
  add a, a    ; a * 4        ;  4 T-States
  ld l, a      ; HL = A * 4  ;  4 T-States
  add hl, hl  ; HL = A * 8  ; 15 T-States
  add hl, hl  ; HL = A * 16  ; 15 T-States
  add hl, hl  ; HL = A * 32  ; 15 T-States
  ;ld d, 18h ; DE = 6144 + E. Note: 6144 is the screen size (before attr zone)  <== NOT NEEDED
  ;add hl, de  <== NOT NEEDED
  ld de, (.core.SCREEN_ATTR_ADDR)    ; Adds attr screen address
  ;ld de, (SCREEN_ADDR)    ; Adds the screen address
  add hl, de
  ld b, (ix+8)
  ld a, (23693)
  SetAttrCopy:
  ld (hl), a
  inc hl
  djnz SetAttrCopy
End asm

End sub
I changed (splitted) the buffering areas because otherwise, you're always enforced to buffer the entire screen in a contiguous region. This way you can buffer only some regions if you choose wisely, or even buffer only one area (and point the other over the ROM, for example).
Reply


Messages In This Thread
Print color bug (*solved*) - by Darkstar - 10-03-2022, 08:18 PM
RE: Print color bug - by boriel - 10-04-2022, 06:54 AM
RE: Print color bug - by Darkstar - 10-04-2022, 09:44 AM
RE: Print color bug - by boriel - 10-04-2022, 10:53 AM
RE: Print color bug - by Darkstar - 10-05-2022, 12:44 AM
RE: Print color bug - by boriel - 10-05-2022, 07:01 AM
RE: Print color bug - by Darkstar - 10-05-2022, 07:59 AM
RE: Print color bug - by boriel - 10-11-2022, 06:15 PM
RE: Print color bug - by Darkstar - 10-11-2022, 06:57 PM
RE: Print color bug - by boriel - 10-05-2022, 10:27 AM
RE: Print color bug - by Darkstar - 10-07-2022, 01:09 AM
RE: Print color bug - by boriel - 10-07-2022, 10:53 PM
RE: Print color bug - by Darkstar - 10-08-2022, 01:36 AM
RE: Print color bug - by Darkstar - 10-08-2022, 03:11 AM
RE: Print color bug - by boriel - 10-08-2022, 08:04 AM
RE: Print color bug - by Darkstar - 10-08-2022, 08:37 AM
RE: Print color bug - by boriel - 10-09-2022, 06:30 PM
RE: Print color bug - by Darkstar - 10-09-2022, 08:27 PM
RE: Print color bug - by Darkstar - 10-10-2022, 04:20 AM
RE: Print color bug - by boriel - 01-19-2023, 10:56 PM

Forum Jump:


Users browsing this thread: 2 Guest(s)