(I shamelessly copied from SMB)
* SMW (Super Mario World from SNES), not SMB (Super Mario Bros from NES).
I would ask one thing about the TMS9918:
I know I can have two name tables and switch them, it's a simple way of implementing a double buffering. I wrote the bytes on the innactive names table, and then switch to it at VBLANK start.
The question is: can I use unrolled OUTIs when writing to the innactive names table? My guess is that I can't. Unrolled OUTIs are possible only during VBLANK. Is that correct?
Yep, VRAM is VRAM whatever it's located or how it's used. Same rules applies, full speed only in VBLANK and correct waiting timings out there
The question is: can I use unrolled OUTIs when writing to the innactive names table? My guess is that I can't. Unrolled OUTIs are possible only during VBLANK. Is that correct?
Correct. The access slots mechanism which limits the maximum transfer rate applies to all of the VRAM, not just a part of it. The bottleneck is the use of the data bus between the VDP and the memory, not tied to specific memory regions. During active display the VDP continuously reads bytes from VRAM to display, occupying the data bus. Between those reads, it leaves some room for the CPU to read / write to VRAM. During blanking there is more room so the CPU needs to wait less.
During blanking there is more room so the CPU needs to wait less.
During blanking there's no need for the CPU to wait at all, no?
OUTI is always possible (only a little wait time is required after setting the first address in VRAM) but not OTIR.
OUTI is always possible (only a little wait time is required after setting the first address in VRAM) but not OTIR.
not in active area without delay. OUTI unrolled is faster than otir
Yes, it's right. I was not clear. I meant alone in a in a loop.
Is there any way to rename a forum thread?
I would like to change it to "Go Penguin WIP platformer for MSX 1". Could some admin make this change?
Finally a new video to show you guys:
After one month of work, now we have enemies (they still don't move, neither can kill the player).
Lots of refactoring, I think the codebase is more robust and will be easier to work from now on.
Many bugs fixed (no more sticking to side of blocks). Minor bugs still found.
Running implemented, but not working 100%.
As next step I will implement the double buffering using dual name tables, to gain some performance and make it possible to show more than one enemy per screen.
ROM and source are avalialable, if someone would like to test (MSX 1 real machines are especially appreciated):
https://github.com/albs-br/penguin-platformer
Z key to run, X to jump.
Hope you enjoy!