Schrijver
| screensplit
|
norakomi msx professional Berichten: 861 | Geplaatst: 31 Maart 2005, 22:33   |
I played with the interrupt in vdp(1) in basic
lets say I use screen 5 and there is a ship flying around using the arrowkeys.
If I disable the interups (vdp(1)=80) and then erase my old ship (and enemies) and then place my new ship, with new coordinates, and place the enemies, and background. and Then....... enable the interups (vdp(1)=112) everything looks good.
However when I fly with my ship in a region between y=30 and y=100 (approx.) there is a lot of flickering and or no ship at all........
how come??
Another thing
I read the article about screensplit, experimented a bit,
But, I´d like to know what to do to disable the screen from y=100 for example.
|
|
NYYRIKKI msx master Berichten: 1525 | Geplaatst: 01 April 2005, 01:31   |
Disabling the VDP interrupts does not help. It will cause VDP to stop "bothering" CPU, but the display will be updated to anyway.
Flickering is caused by the fact, that you first remove the ship from screen and then draw it again to another place. When you have removed the ship, the screen refresh draws the picture before you have managed to draw the ship to VRAM again.
There are two ways to solve this:
1. Don't let that happen... Start to delete & redraw your ship just after screen refresh has passed your ship. This way you have most time to do your job, that is about 0.015 sec depending of VDP(10) bit 1 & size of your ship.
2. Give up your 50/60fps dream, free some VRAM and start double buffering. More of this subject from here: http://www.msx.org/forumtopic4397.html
Quote:
|
But, I´d like to know what to do to disable the screen from y=100 for example.
|
Here is an interesting discussion about this topic: http://es.msx.org/forumtopic1456.html
|
|
norakomi msx professional Berichten: 861 | Geplaatst: 03 April 2005, 05:27   |
So there is no way to disable screen output for a while.......
thnxfer da tip
|
|
Edwin msx professional Berichten: 626 | Geplaatst: 03 April 2005, 12:48   |
Quote:
| So there is no way to disable screen output for a while.......
thnxfer da tip
|
Yes, bit 6 of VDP R#1 sets the screen on and off. This works perfectly in screen splits. It also has the added benefit op making VDP transfers faster as no memory bandwidth is needed for displaying that part of the screen. |
|
Sonic_aka_T
 msx guru Berichten: 2269 | Geplaatst: 03 April 2005, 13:10   |
I think what he wants is not to disable the screen, but more to freeze-frame it, right? And unfortunately, I haven't quite figured that one out yet  Double-buffering does the trick nicely though, albeit at a cost of one page and some extra commands... |
|
norakomi msx professional Berichten: 861 | Geplaatst: 04 April 2005, 20:50   |
and double buffering is the trick i have been using so far, untill I started to experiment with horizontal scrolling, which brings new problems to the light.....
(like not only does the screen scroll nice, the characters also scroll along, which is wat I NOT want !)
|
|
Grauw msx professional Berichten: 1006 | Geplaatst: 04 April 2005, 22:04   |
|
|
norakomi msx professional Berichten: 861 | Geplaatst: 05 April 2005, 18:38   |
if I have 2 screen splits
part 1 starting at y=0
part 2 starting at y=50
part 3 starting at y=51
can I then enable part 3 (just simply taking it out) and disable it again, and continue doing this (resulting in a page switching (p=1-p) kinda thing ???
and can I devide the screen with a screen split and make one part function in page 0 and the other in page 1????
|
|
Edwin msx professional Berichten: 626 | Geplaatst: 05 April 2005, 21:42   |
Quote:
| can I devide the screen with a screen split and make one part function in page 0 and the other in page 1????
|
Yes. You can change almost anything at a screensplit.
Split y=0
R#2 = $1F
Split y=51
R#2 = $3F
(loop)
this way you show page 0 on top and page 1 starting at line 51. It's as simple as that. |
|
Grauw msx professional Berichten: 1006 | Geplaatst: 05 April 2005, 22:37   |
pagesplits, scrollsplits, coloursplits, spritesplits... they rule  . |
|
norakomi msx professional Berichten: 861 | Geplaatst: 08 April 2005, 23:46   |
Quote:
| --------------------------------------------------------------------------------
can I devide the screen with a screen split and make one part function in page 0 and the other in page 1????
--------------------------------------------------------------------------------
Yes. You can change almost anything at a screensplit.
|
Then can I do this:
Split the screen at y=30 (and making y=30-y=211 page 0).
Split the screen at y=31 (and making y=31-y=211 page 1).
put a background in page 0 (y=30-y=211)
put the exact same background in page 1 (y=31-y=211)
put a character in page 1 at (100,100)
at this point page 0 will not be viewed because of the screensplit.
However can I do this in page 0:
Put the character at (101,100)
scroll the entire screen one pixel to the left (using hor.scroll register)
disable the 2nd screensplit which shows page 1 (disable the 2ndscreensplit at y=31)
???? is this possible
why do I want this?
This makes it possible to scroll independantly in page 0 or page 1 !!!! |
|
Edwin msx professional Berichten: 626 | Geplaatst: 09 April 2005, 00:35   |
Quote:
| Split the screen at y=30 (and making y=30-y=211 page 0).
Split the screen at y=31 (and making y=31-y=211 page 1).
|
This is pointless, use one split and change the page to what you need.
As for the rest, I'm still not entirely clear on what you're trying to accomplish. But I do have a feeling you don't entirely see what a screensplit is.
But instead of posting the question here, try out what you want to know. It's shows more than we can tell you. Also it gives a better base for questions. |
|
Grauw msx professional Berichten: 1006 | Geplaatst: 09 April 2005, 12:24   |
Yes, you can scroll page 0 and 1 independantly, and show them at the same time (one page before the screensplit line, the other after).
However what you are describing isn't possible. You cannot achieve general purpose ‘multilayer’ effects by using screensplits.
It *is* however possible as said earlier, to e.g. have a playing field at the top of the screen (e.g. lines 0-160) and have a status overview below it (lines 160-212). The field area at the top can then be in a different page and scroll independantly from the status area at the bottom.
If you want multilayer (within the same horizontal line, that is!, which is usually the case), it should be done with COPY commands and perhaps sprites (depending on your needs). COPY commands are slow, but you can still achieve quite nice effects with them, just look at the intro demos of games like Xak, Ys, Dragon Slayer, etc.
Ys 3 is also a very good example. The game is entirely multilayer, using just COPY commands, and still very fast. Of course, you must be an extremely good assembly coder to be able to make a game engine like that  , it’s really admireable. Cas Cremer’s Akin and Core Dump games (the latter never released but a demo version is available) are similarly impressive, although not as much as Ys 3 is. Neither of those use smooth scrolling though, because that's just not possible, they scroll per 8 pixels.
~Grauw |
|
ro msx guru Berichten: 2346 | Geplaatst: 11 April 2005, 12:57   |
you could use some sort of pseude multi layer though... just split the screen multiple time and make the top and bottom parts scroll faster than the middle part.. for example, here's a 5 layered scroll. the top and bottom are both 2 layers while the middle part is the actual playfield
(y-split, scroll speed)
0, 6 <- top 1, fast scrollspeed
32, 4 <- top 2, medium scrollspeed
64, 2 <- middle (playfield), slowest scrollspeed
140, 4 <- bottom 2, medium scrollspeed
172, 6 <- bottom 1, fastest scrollspeed
for example; put some "clouds" in the top layers and repeat the scroll. at the bottom some "stones" or alike and do the same. the actual playingfield might could be a starfield for example. or some actual background as in other games I could mention.
try it.
cheers.
|
|
ro msx guru Berichten: 2346 | Geplaatst: 11 April 2005, 12:57   |
note that the above example include LNI (Line Interrupts) routines!
|
|
|
|
|