Some things I've been doing on MSX
category: code [glöplog]
So I haven't released a demo in 4 years, but I have been doing adjacent things on the MSX platform some of which might even be considered demoish:
Pallo, a game for MSX2. This has a custom music player I made in Z80 with a custom format, though the music itself is all converted from public domain MIDI files. It uses the FM-PAC expansion for audio, which contains a YM2413 chip (also known as OPLL). The most demoish part is the rippling reflection effect in the intermission screens. Changing things in H-blank is tricky on this platform due to indirect access to video registers but I managed to change one scroll register and one palette entry every 2 scanlines to create that effect. The laserline cube effect shown on the password entry screen is also demoish.

An interactive 3D demo (it's not a raycaster so I don't really know what to call it) using the V9990 chip expansion, which works on all MSXes. The walls are drawn with single blitter copy commands (the ramps are pre-rendered), and hidden surface removal is done by decomposing the maze into convex cells and portals. By the way, this expansion was also available for Amstrad CPC which also uses a Z80 for its CPU so this engine might also run on Amstrad CPC without much trouble.

An MSX1 version of the above which doesn't require any expansions. It uses TMS9918 text mode in which character patterns are 6x8 pixels instead of 8x8 pixels. Here I used 2x2 blocks of pixels grouped into fat pixels so each pattern represents a tile of 3x4 pixels in a virtual framebuffer. That's 2^12=4096 possible configurations but not all of them are required to render the walls - each required pattern consists of 3 columns of pixels which can be 0, 1, 2, 3 or 4 pixels high. So the required number of patterns if 2(5^3)=250, which fits into the budget of 256 patterns.

An interactive 3D object renderer using the V9990 expansion and the TurboR MSX model (essentially the same computer but with a CPU which can run 8x faster than the other models and has a multiply instruction - although I don't use it here). The calculations for vertex transformation are mostly done in log space, and the polygons are again drawn with blitter copy commands from pre-rendered pieces.

A port of Another World to MSX TurboR which also uses the V9990 expansion, and the OPL4 expansion so it can play all the same sound effects and music that the original Amiga version played. I wrote a custom module player in Z80 for this in addition to re-implementing the whole engine in Z80.

Also a boing ball clone but it's not very good or accurate. I think a perfect recreation of the original is possible.

Pallo, a game for MSX2. This has a custom music player I made in Z80 with a custom format, though the music itself is all converted from public domain MIDI files. It uses the FM-PAC expansion for audio, which contains a YM2413 chip (also known as OPLL). The most demoish part is the rippling reflection effect in the intermission screens. Changing things in H-blank is tricky on this platform due to indirect access to video registers but I managed to change one scroll register and one palette entry every 2 scanlines to create that effect. The laserline cube effect shown on the password entry screen is also demoish.

An interactive 3D demo (it's not a raycaster so I don't really know what to call it) using the V9990 chip expansion, which works on all MSXes. The walls are drawn with single blitter copy commands (the ramps are pre-rendered), and hidden surface removal is done by decomposing the maze into convex cells and portals. By the way, this expansion was also available for Amstrad CPC which also uses a Z80 for its CPU so this engine might also run on Amstrad CPC without much trouble.

An MSX1 version of the above which doesn't require any expansions. It uses TMS9918 text mode in which character patterns are 6x8 pixels instead of 8x8 pixels. Here I used 2x2 blocks of pixels grouped into fat pixels so each pattern represents a tile of 3x4 pixels in a virtual framebuffer. That's 2^12=4096 possible configurations but not all of them are required to render the walls - each required pattern consists of 3 columns of pixels which can be 0, 1, 2, 3 or 4 pixels high. So the required number of patterns if 2(5^3)=250, which fits into the budget of 256 patterns.

An interactive 3D object renderer using the V9990 expansion and the TurboR MSX model (essentially the same computer but with a CPU which can run 8x faster than the other models and has a multiply instruction - although I don't use it here). The calculations for vertex transformation are mostly done in log space, and the polygons are again drawn with blitter copy commands from pre-rendered pieces.

A port of Another World to MSX TurboR which also uses the V9990 expansion, and the OPL4 expansion so it can play all the same sound effects and music that the original Amiga version played. I wrote a custom module player in Z80 for this in addition to re-implementing the whole engine in Z80.

Also a boing ball clone but it's not very good or accurate. I think a perfect recreation of the original is possible.

Very nice!
