CLS and SCREEN are bugged!

Por gdx

Enlighted (4195)

imagem de gdx

10-02-2021, 09:46

I'm surprised this program returns 4 instead of F4. Shocked!

10 COLOR15,4:SCREEN2
20 A%=VPEEK(&H2000)
30 COLOR15,4:CLS
40 B%=VPEEK(&H2000)
41 '
50 COLOR15,4:SCREEN4
60 C%=VPEEK(&H2000)
70 COLOR15,4:CLS
80 D%=VPEEK(&H2000)
90 SCREEN0
100 PRINT HEX$(A%);" "; HEX$(B%)
110 PRINT HEX$(C%);" "; HEX$(D%)
Entrar ou registrar-se para comentar

Por Metalion

Paragon (1343)

imagem de Metalion

10-02-2021, 09:52

I think 04h is the normal value, not F4h.
When you clear the screen, the only sure thing is the background color.
The MSX does not "preset" the foreground color.

Por gdx

Enlighted (4195)

imagem de gdx

10-02-2021, 10:10

In SCREEN 2/4, MSB 4 bits of the pattern colors are for the plotting color and LSB 4 bits are for the background. So MSB 4 bits should take the default plotting color and not the border color, but maybe zero was chosen to simplify the plotting in BASIC. (?)

Por Wolverine_nl

Paragon (1145)

imagem de Wolverine_nl

10-02-2021, 10:13

just to check, isn't it also needed to print string with a for next loop to look for the next character to print, so 4 might be the last/first ? Also what happens if you read out the system variables #F3E9, #F3EA? Didnt do basic in a long while, so just might be a stupid question which you can ignore ;-)

Por Metalion

Paragon (1343)

imagem de Metalion

10-02-2021, 10:24

gdx wrote:

So MSB 4 bits should take the default plotting color and not the border color, but maybe zero was chosen to simplify the plotting in BASIC. (?)

As I said, there's no practical reason to "preset" the plotting color, since we are in a multicolor mode.
The user will specify the color he wants to plot anyway, so why "preset" a specific one ?
I think it's a simplification chosen by the BIOS/BASIC programmers.

Por gdx

Enlighted (4195)

imagem de gdx

10-02-2021, 10:46

Because if we set a bit to 1 without specify the color (by using VPOKE for example), this point should take the default color. Even if that was no longer the case alone after an image load for example. CLS and SCREEN are supposed to initialize the screen as specified, there they are not doing their job correctly.

Por Wolverine_nl

Paragon (1145)

imagem de Wolverine_nl

10-02-2021, 10:59

So what happens of you set the colours after the screen init instead of first colours and then init screen mode? CHGCLR and CHGMOD affects all registers,maybe the issue is there to be found?

Por gdx

Enlighted (4195)

imagem de gdx

10-02-2021, 11:25

It's a minor bug that doesn't change much thing in most cases because the BASIC interpreter is based on system variables, but it's still a bug.

Por Wolverine_nl

Paragon (1145)

imagem de Wolverine_nl

10-02-2021, 11:29

I did have a situation that when I switched screens, not even using the basic int. , that my borders weren't black anymore after changing VRAM page and using CLR, eventhough I put this in the right sys variable and commited using CHGCLR, that could be the same issue?