Autor
| VDP copy problem
|
DemonSeed msx professional Mensajes: 948 | Publicado: Agosto 25 2007, 04:28   |
I’m talking screen 5. Do you recognize this problem and/or can you even laugh about it (which might mean that you got a solution for it)?
I copy a page-wide (0-255) and vertically 64 pixels section of one memory-page to the same x-position (zero) on the same page, 16 pixels lower, The result is a 6*16 downwards copy of merely the first line.
When I copy the entire thing to 48 instead of 16 pixels lower, no such thing occurs!
Could this be a BASIC problem, an emulation problem or a genuine VDP 'flaw'?
|
|
SLotman msx professional Mensajes: 543 | Publicado: Agosto 25 2007, 09:35   |
It's not a flaw. As I understood, you're trying to copy a part of the screen, only 16 pixels lower, overwriting what's below. (if you're not, please post a sample program, so we can see what's going on!)
The VDP starts it's copy line by line, hence overwriting what's below. It's the correct behaviour. If VDP used a buffer to "move" and not "copy" the data, then it would do everything correctly.
The only way to get it working, is doing an upside-down copy, line by line (or as much line as you can) I guess.
|
|
[D-Tail]
 msx guru Mensajes: 3017 | Publicado: Agosto 25 2007, 09:44   |
DemonSeed: you can also exchange pairs of coordinates to get the thing working. I'm guessing you define the top-left and bottom right co-ordinates? Well, try specifying bottom-left, then top-right to get it working. It's the same problem when you try to copy something from right to left (i.e. ye good olde opposite scroller).
|
|
PingPong msx professional Mensajes: 988 | Publicado: Agosto 25 2007, 11:12   |
The VDP have a direction flag that could be used to do a right to left or down to top copy in one of the command register.
However i do not l know if in basic there is a way to manipulate this flag.
|
|
NYYRIKKI msx master Mensajes: 1510 | Publicado: Agosto 25 2007, 14:52   |
This is completely logical and sometimes even usefull. If I understand you right you have this kind of line in your BASIC program:
COPY (0,0)-(255,64) to (0,16)
This causes first 16 lines to be copyed 4 times. As this is not anyway what you want to do, you should use this command instead:
COPY (0,64)-(255,0) to (0,80)
|
|
ro msx guru Mensajes: 2329 | Publicado: Agosto 25 2007, 15:15   |
Pingpong's right. Just check your VPD manual and see what all them operational bits are about in the copy string.
It's obvious if ye think about it, which you prolly did already (I hope for you, else we'll have a laugh and call it a day)
Just copy from bottom to top with this one (y=y-1)
|
|
DemonSeed msx professional Mensajes: 948 | Publicado: Agosto 25 2007, 15:17   |
Thanks, guys!
I now see that this behaviour of the VDP is pretty logical indeed.
And I never would have thought that the solution would be that simple!  |
|
|
|
|