66 Commits
Author SHA1 Message Date
giomba 7a546ad391 Add proper timer_cleanup routine. 2025-09-14 17:29:04 +02:00
giomba 6548b4f5f6 Update Makefile to compile new modules for the demo. 2025-09-14 17:29:04 +02:00
giomba 12d6c3e503 Update main to exploit string and demo module. 2025-09-14 17:28:59 +02:00
giomba 0bbe5e4b50 Add dedicated module to simulate stdlib strings. 2025-09-14 17:28:59 +02:00
giomba cb581b9082 Add dedicated "demo" module to enable/disable parts at runtime. 2025-09-14 17:28:59 +02:00
giomba d463234500 Update CGE demo to use music too. 2025-09-14 17:28:59 +02:00
giomba b9e9aeef8d Add basic VGM player which uses interrupts. 2025-09-14 17:28:59 +02:00
giomba 4b8c986fe7 Run interrupt timer at 300Hz.
300Hz is good because it allows you to run both 50Hz and 60Hz songs with
the same interrupt.
VGM uses a sample rate of 44100Hz (totally unrealistic for the original
hardware on which the SN76489 actually ran, but that's it).
Of course we cannot use the timer at 44100Hz, because that would mean
only 90 Z80 clock cycles in between interrupts, so we use instead a
300Hz interrupt.
One 300Hz interrupt is the same as 147 samples at 44100Hz, which is 5
interrupts (or 147 × 5 = 735 VGM samples) for 60 Hz songs, and 6
interrupts (or 147 x 6 = 882 VGM samples) for 50 Hz songs.
2025-09-14 17:08:13 +02:00
giomba d44d9c902f Add "Rudolph, the red-nosed reindeer" song asset. 2025-09-14 17:07:26 +02:00
giomba 149cdfa872 Properly preserve all registers when entering the ISR. 2025-09-14 17:07:26 +02:00
giomba fb99ec2703 Move IVT to $0100 2025-09-14 17:07:26 +02:00
giomba 3a07150771 Embed timer's assembly routines in the CRT.
This is not The Right Way to do it, but I lost the fight with the
linker, and This Just Works (tm).
2025-09-14 16:44:26 +02:00
giomba b0e303325f Add CTC module to use timer interrupts. 2025-09-14 16:44:26 +02:00
giomba a9599ca8c5 Have CGE demo present the custom charset for a bit more. 2025-08-27 21:54:17 +02:00
giomba d963c98788 Setup proper memory map when running demo under CP/M. 2025-08-27 21:35:28 +02:00
giomba 6a7b55e45f Update README.md 2025-08-27 21:35:19 +02:00
giomba 68a211ffea Add CGE w/ Christams demo. 2024-12-28 19:14:01 +01:00
giomba 7e83a551db Add demo part for CGE mod. 2024-12-28 19:14:01 +01:00
giomba 0d9b24a423 Add infrastructure to enable/disable demo parts at runtime. 2024-12-28 19:14:01 +01:00
giomba 50f0ffb22b Add Christmas tree image. 2024-12-28 19:14:01 +01:00
giomba 7840e66fda Add hello.c image. 2024-12-28 19:14:01 +01:00
giomba 1530fbdf2d Add falling snow module effect (first draft). 2024-12-28 19:13:52 +01:00
giomba 1a0f5354a2 Use linear memory for stack when running with BIOS only. 2024-12-28 11:39:30 +01:00
giomba 733a670eb1 Add mmap_get() API to retrieve current memory bank configuration. 2024-12-28 11:39:30 +01:00
giomba dfee9008b2 Add video_get() API to get char from video memory. 2024-12-28 11:39:30 +01:00
giomba dd0fc88c08 Add video_enableUnderline text interface. 2024-12-28 11:39:30 +01:00
giomba 6a8afc5802 Embed magic cursor demo in main one. 2024-12-15 11:13:34 +01:00
giomba f5b601f204 Add magic cursor demo part. 2024-12-15 11:13:02 +01:00
giomba 85bcb4f339 Add CRT_FRAMES_PER_SECOND define. 2024-12-15 11:12:36 +01:00
giomba e2d3ccd317 Add API to enable cursor blink. 2024-12-15 11:11:50 +01:00
giomba 66d5a6187e Exploit mmap module to bank memory. 2024-12-14 19:36:21 +01:00
giomba d270985dba Add mmap module to bank various memory in and out. 2024-12-14 19:35:15 +01:00
giomba b461731f45 Add CRT to run under CP/M.
The Makefile now builds the demo with $100 as its entry point, then it
is linked both against the bios-only crt, and the CP/M-aware crt.
The bios-only version can be run without the operating system, but needs
to be loaded via serial directly using a BIOS rom with a custom loading
routine.
The CP/M-aware version, instead, can be run as a normal executable from
a diskette, but keep in mind that this is a demo, so it is not designed
in such a way that it is safe to go back to CP/M at the end of the demo.
It may be possible, but I won't make any effort to guarantee it.
2024-12-14 18:58:42 +01:00
giomba a943cbe5c3 Loop demo forever. 2023-11-24 20:49:47 +01:00
giomba ae4a6eea8a Import FVB banner, decent cleanup for this release. 2023-11-20 21:16:31 +01:00
giomba 41174485b8 Add some attribute handling for video module. 2023-11-20 21:16:13 +01:00
giomba e70a9b9cc4 Add Firenze Vintage Bit flip flap display. 2023-11-19 21:33:50 +01:00
giomba 60e40fe77d Display both matrix effect and GLG intro. 2023-11-19 21:21:30 +01:00
giomba 3c0c65c0d4 Update Makefile and main.c to use new modules. 2023-10-22 22:08:37 +02:00
giomba 7a9e33e352 Add flip-flap display effect. 2023-10-22 22:08:21 +02:00
giomba 4016014641 Expose video memory address. 2023-10-22 22:08:06 +02:00
giomba be4f7c628f Improve The Matrix effect. 2023-10-22 22:07:11 +02:00
giomba 98d7a5c00a Update Makefile and main.c to use new modules. 2023-10-22 11:42:03 +02:00
giomba 9668db9853 Add matrix effect. 2023-10-22 11:41:47 +02:00
giomba 1156e03305 Add small performance test to compute Z80 actual speed. 2023-10-22 11:41:16 +02:00
giomba a80c52bedd Add compiler.h specific macros. 2023-10-22 11:40:57 +02:00
giomba 21c4c1eb98 Remove ceda_* generic module. 2023-10-22 11:40:46 +02:00
giomba 9d8bede050 Add method to wait for some frames in CRT. 2023-10-22 11:40:28 +02:00
giomba a49102fbac Add method to disable cursor. 2023-10-22 11:40:03 +02:00
giomba d3e2651212 Add linear feedback shift register to generate "random" numbers. 2023-10-22 11:39:02 +02:00