Vertical scrolling routine (MSX1)

Page 4/12
1 | 2 | 3 | | 5 | 6 | 7 | 8 | 9

By thegeps

Champion (278)

thegeps's picture

11-01-2019, 10:46

The videos was on blueMSX. Now I tested the routine on openMSX set with Philips&VG_8020-20

By TomH

Champion (327)

TomH's picture

11-01-2019, 18:20

I think 27 cycles is the recognised minimum spacing of VDP writes on an MSX*; OUTI+JP conditional is 29 but I don't think there's a solution for outputting a block from memory in less than 29 but greater than or equal to 27 cycles, so it's probably the smart choice.

You can actually write a lot more quickly during the vertical border area though, so assuming you're synchronised to end of frame you might consider a loop that uses OTIR for a while, then switches to OTIR+JP. That is, if you really want to get into the complexities on this stuff.

* I'm pretty sure it's 39 VDP cycles on an original TMS9918a, which would ostensibly be 26 Z80 cycles, but only if the VDP were guaranteed to run at exactly 1.5 times the CPU speed and you definitely weren't using a reimplementation with slightly different logic. Neither of which need necessarily be true. So headroom required.

By Grauw

Ascended (8507)

Grauw's picture

11-01-2019, 18:29

The TMS9918 manual says 8 µs (§2.1.5), which is 28,6 cycles, so 29 cycles seems perfect.

But that’s just going by the official documentation, I haven’t looked at the cycle accurate reverse engineering research.

By TomH

Champion (327)

TomH's picture

11-01-2019, 18:46

Well I've just realised that my research is flawed; it was based on observed behaviour of ColecoVision titles (and Galaga especially, which has a very tight read loop prior to displaying the title screen), but I failed to spot that the ColecoVision appears to contain the same M1 WAIT delay as the MSX. That's what the 74LS74A is doing in this schematic, I believe. So my present results are questionable.

This is a terrible digression, so ignore all that and keeping it on topic:

  • 29 cycles if you can't be certain where you are in the frame, or know yourself to be in the middle of pixel generation; but
  • OTIR is an option if you know for certain its entire loop will complete during the vertical border region.

By thegeps

Champion (278)

thegeps's picture

11-01-2019, 19:58

Now I have a problem with openMSX. I have installed it earlier in the office where sometimes I work (when there is no work for electricians in the building site and there's all ok. Now I'm at home and I've just installed openMSX 0.15.0 (same version) and I can't open the console with F10 (win10 here, win7 in office). I need to open the console to measure cpu time... Sad

By Manuel

Ascended (15799)

Manuel's picture

11-01-2019, 20:33

How did you install openMSX? Using the installer?

I saw your question on IRC, but not at all times people are ready to respond. Stay on the channel longer and you'll see someone will respond after a while. But we can't respond if you leave.

By thegeps

Champion (278)

thegeps's picture

11-01-2019, 20:34

yep
and when I try to go fullscreen (in VG8020-20 mode, in c-bios mode works fine) the emulator close itself and I have this error message: Uncaught std::exception: bad allocation

By thegeps

Champion (278)

thegeps's picture

11-01-2019, 20:37

I can load my cas file and see my routine go smooth until end, but I have to stay in small window. I can't use console to set fullspeedwhenloading (I can't use console at all, it doesn't open) and I can't copy the code for measuring cpu time...

By Manuel

Ascended (15799)

Manuel's picture

11-01-2019, 21:46

Do you have a laptop or computer with a keyboard which needs some Fn-combination to press F10?

By thegeps

Champion (278)

thegeps's picture

11-01-2019, 21:53

Nope, cause F12 key works. Except that it make crash the emulator. But when I restart catapult (after crash) then it opens automatically in fullscreen and works fine. But still I can't open console. In the other pc (the one with windows 7), as I said, all works fine.

Page 4/12
1 | 2 | 3 | | 5 | 6 | 7 | 8 | 9