I put this program together because I wanted to play around with the direct color DMA trick. I'm sure a lot of you have seen the trick before. My program is a bit different, because it allows you to use unaltered .BMP files. This makes it really easy to display your own image with the color DMA trick.
I initially wanted to write the code for the direct color DMA trick completely from scratch. I actually got pretty close, but the image would jitter left and right. I ended up just basing it off of chilly willy's direct color DMA implementation.
What's kind of cool is that all of the image conversion is done by the Genesis. Regular unaltered bitmap files go in, and the Genesis converts them into a format that can be used for direct color DMA. One big drawback of this is memory limitations. The Genesis only has 64KB of memory, but the images are ~88KB. Because of this, the whole image won't fit and only 2/3rds of the image is displayed. :/ I tried to put half of the image into SRAM backup, and half into 68k RAM. It didn't work though. For some reason, I can't get SRAM writing working correctly on my everdrive. Only the oddly numbered bytes get written. I'm not sure why. I couldn't get it to DMA from SRAM anyway. I might also be able to store the image in the SEGA CD's RAM. This wouldn't be an issue if I pre-converted the images, since I could just store/DMA them from ROM space. Since the Genesis is doing the conversion, the only option is to store it in RAM.
I'll keep playing around with it and see if I can figure something out.
How to:
- Download the program
- Select your desired image. There are some sample images in the img folder to use.
- Change its resolution to 198x224
- Save it as a 16 bit .BMP file. 256 color and 24 bit won't work.
- Save it as "img.bmp" in the program's "image" folder.
- Run the "make.bat" file
- If all goes well, it should make a new ROM image with your picture ready to display!
You can not run this program in most emulators. The only emulator I got it to work in is Exodus. Other than that, it runs fine on real hardware.
You can download the program here.
Here is a screenshot. It was captured from my Genesis model 2 via s-video.
![]()