Random ideas for tweakmodes and other such stuff. #99
Replies: 9 comments 3 replies
-
Pretty interesting ideas, will see what of them can be done. For now these are the things and thoughts that I've learned while working on these modes:
|
Beta Was this translation helpful? Give feedback.
-
After doing some reading, I imagine odd/even mode (what's used to weave both bitmaps) is causing shenanigans there, writing to both plane 0 and plane 2 when you only want to write to plane 0. Does disabling it destroy the dispaly?
Stretch the playfield then! No-one said a pixel in any given mode had to match some pixels in another.
I imagine many resources for the VGA's planar modes (whether that be 16 colors or Mode X, though the former would be more useful for this case) should also be applicable to the EGA, unless it uses something that the EGA doesn't have, but the VGA does. From what I recall, a general rule of thumb is to access the card as little as possible to draw any given frame. Also, I was wrong with the "256 color drawing like 16 colors" thing. That would give up to 4 possible bitplanes: All 0's (both original colors have a 0 in that plane), all 1's (both original colors have a 1), any one bit pattern (defined by where the colors are placed) and its bit complement. You can still use the "flood and mask plane-wise" method though. |
Beta Was this translation helpful? Give feedback.
-
I'll use the idea "Write 8 pixels of the same color using Write Mode 2" for a new optimized EGA mode. Based on the mode 640x200, if we use 8 pixel writes we get a base 80x200 resolution. It has multiple benefits:
|
Beta Was this translation helpful? Give feedback.
-
Already posted this in a youtube comment, but since I want to flesh this out further, I'm posting here as well. Small note on memory locations: I will refer to them as offsets from the CPU's side, and not from the VGA's side, so when I say A theoretical way to get 320x200@24:
Also, about the limits of this technique: Since this uses a base mode of 640x200, and we'll want double buffering (I don't think your run-of-the-mill EGA will be able to race the beam well enough), that will use 32k of address space, leaving another 32k free. PS: From what I recall, 200-line modes do NOT support all 64 colors of the EGA, as the monitor is running in CGA compatibility mode. |
Beta Was this translation helpful? Give feedback.
-
It's time for even more crazy mumblings! CGAFirst, I imagine if you have a Tandy-style graphics adapter, you might be able to display 256 colors in that using composite artifacting and the 640x200@4 graphics mode
EGA/VGAProgress on my idea of transfering 3 planes with 2 card accesses
Also, potential overscan modes with CRTC tweaking?
|
Beta Was this translation helpful? Give feedback.
-
Bonus idea: I wonder if you can fake a slightly higher precision EGA pallete by switching palletes every (displayed, not engine) frame... EDIT 31-10
Bonus idea 3: It might be possible to improve the ansi-from-hell LUT by using a better heuristic that can better preserve low frequency data (such as overall color of the block) even if at some cost to how many pixels are "wrong". PS: I wonder if it could be possible to combine the colorfullnes of the 80x100@136 mode with the sharpness of the ansi-from-hell 320x100@16-ish mode, though I don't even know where to start with making that tranform in real time. |
Beta Was this translation helpful? Give feedback.
-
resurrecting this thread for a new idea i have to speed up planar modes. see, thanks to latches vram-to-vram copies are very fast, requiring 2 accesses (read and write) to fill all planes instead of 4 this could be useful for faster rendering! render a frame in two passes, one storing each unique 4-plane value combination, the other reading each location location, then copying it to all places with the same color. we have a right to read vram however we want, and we better use it! I think this is better explained with a diagram... We want the same sequence of 4 pixels on addresses 0A, 12, 15 and 16. First we find an instance of this value.
This totals 6 accesses instead of the 8 that would be required otherwise. You could also do this with only 2 planes, though it requires more instances to be useful.
Alas, this only useful for 256-color modes, where each plane value is a pixel. |
Beta Was this translation helpful? Give feedback.
-
I had the same thought, I have introduced a new executable for each new screen resolution for #81 and it's unwieldy. I can probably take this on |
Beta Was this translation helpful? Give feedback.
-
I think is possible to unify backbuffered modes in a single executable. The main issue with this approach is that the executable will be bigger, and that causes issues with devices with little RAM. The smaller the executable, the better, as more RAM is available for gamedata, avoiding acceses from disk. An option is to find some way to use dynamic libraries, and load required code as needed. This could very beneficial as sound code also takes a big chunk of executable size. |
Beta Was this translation helpful? Give feedback.
-
CGA
Hercules
and reverse to help with drawing.
EGA
REP MOVSW
away!VGA
2 colors per block would work just like on 16 color planar (if you don't believe me, draw out the bit patterns)Wrong, see commentGeneral considerations
Beta Was this translation helpful? Give feedback.
All reactions