I think the good compromise would be to use the Screen 4. Type 2 sprites, color palette and additional pages are a real plus without changing the program much.
Your annotated sources are a mine of information, it has been a titanic work...
Thanks for all the info Artrag!!! And yes, it was a lot of work, but it was fun! haha
@gdx: screen 4 is the only one I am familiar with in MSX2, and yes I think that would be a good choice for a quick port. Sprites could be used for the pointer that is always drawn on top at the moment. All other things can be occluded, so, not sure if sprites would work for anything else in the current code base.
A screen 5 or screen 8 version would need a separate renderer based on the vdp engine.
The trade off is full color use without color clash vs low frame rate and bigger effort in writing the renderer.
Using screen 4 you can use about the same code for msx1 and 2, in the latter case you can use less wait cycles and two pages to avoid frame tearing
Anyway an attempt of doing a direct rendering of the scene would be probably too slow due to the filling of the polygons.
Differential plotting could work but it needs some clever strategies to be implemented
What a gift! Thanks so much Santi!
While taking a look at the disassembly, I've seen your surprise about the handling of IY.
In a Spectrum, the ROM sets IY to 23610 (0x5C3A) then assumes that it's set to that value, and even the default IM 1 interrupt routine assumes that. A plausible hypothesis is that it was used by them during debugging, to return to BASIC. Another is that they weren't sure whether the ROM save/load routines used IY. When using the default entry point which gives an error on BREAK, the BREAK handler does use it.
There's a copy-paste error, by the way, in line 70 of the annotated version. The comment says the same as for the saving routine, but it should read "Loads a collection of bytes from tape". Sorry, I'm not on GitHub so I can't send you a PR.
Oh, interesting! I didn't know about the IY usage in spectrum! I was so confused, as I looked at the loader and it was no setting it either, it makes sense now then
And thanks for the note! I'll fix it! I have been noticing lots of typos after going through some routines, so, I should send a patch. Hopefully later this week [I just fixed it, since I was in my computer already haha]
There you go! It took many hours of work over about a month of time, but I have finished the disassembly of the Freescape engine! https://github.com/santiontanon/castlemaster2-disassembly
Nice! :D
Thanks for sharing. It is a hard work.
I already identified the main areas in Dark Side game and I am working on the routines for the conversion.
Programmers said that they used a different version of the engine in the different games they released so, the one in Castle Master 2 should be an enhanced version.
I think the last version should be in 3D Construction Kit.
That one is another target for me. It could be interesting having such a development tool for MSX.
By the way, I found an interesting game but with differebt approach to freescape: [url=https://en.m.wikipedia.org/wiki/The_Sentinel_(video_game)]The Sentinel[/url]
This one does not show real 3D moving stages, but pre-calculated views instead.
Amazing work, Santi! Thanks! I discovered this thread yesterday. First you say "I have 30% disassembled", and some weeks after you have the full disassembly, nicely formatted, and with comments. Wow
Hi, thank you for the disassembly. I noticed it overlaps on the system variable area and i assume it uses some Rom calls so this ROM dissas migth be handy as a reference.
https://github.com/ZXSpectrumVault/rom-disassemblies/tree/ma...
the system variables names as reference
https://worldofspectrum.org/ZXBasicManual/zxmanchap25.html
i myself did some gigascreen thingies and i am curious if a 2screen system would be possible but i assume it will be extreem slow.
cheers!