Thanks for your help. Got it working.
Now what wideo mode should work with go329?
I tried to force amstrad but it gave garbled mono image.
I compiled version 1.1.0-5-g18db8d9
there is no olivetti mode to select.
The green picture is quite easy to explain:
Until now, only mode setting, fade-in and tile plotting were implemented for the GO329 board, and on top of that, I forgot to change the fade-in entry in that mode's copy-pasted call table.
I just fixed that and added all the other missing functionality.
It should™ now work.
Turns out that I misremembered how the GO329 addressing works:
It always arranges the bit planes in a 128 KiB block needed for the 640x400 pixel 16-color mode, even for the 640x200 pixel 16-color mode.
There was also a mismatch between the frame buffer base addresses:
The base address configured in the block of video mode specific variables was a0000h (first GO329 bit plane), but the tile drawing code still expected b8000h (original M24 VRAM).
Everything should work better, now, but I did not look into the bit plane ordering mismatches, yet.
Apologies for the inconveniences. Writing video code blindly tends to be a bit error prone.
I haven't red the manual so I don't know how to enter radar mode 😁... or different text modes.
You build a radar station, select it and tell it to do a particular type of scan:
Hydro scan is supposed to be blue, metal scan yellow, mineral scan dark gray and thermal scan red.
(In easy mode, you have enough resources to build the radar station right away.)
There is no “different text mode”. Various text elements simply have a (non-black) background color.
Do menu screen and game window look right, now?
P.S.: It would be very helpful if that video card's documentation made sense. 😒
Well... different 🙃...
Btw picture shows what driver I'm using, can't quite remember where I got it or why I'm using it 🤷♂️
I built radar station, but to scan you need power so I built power station and solar panels, but then something started attacking my buildings, so I did the only reasonable thing and rage quited the game 🤪
Since you are clearly already building everything from source, can you play around with the segment shifting in i_plot_tile_go329 in the file src/video/scrdraw.s and then just tell me what works?
That function essentially just calls i_plot_tile_cga four times and shifts the target segment to different 32 KiB blocks of the frame buffer (i.e. a000h, a800h, b000h and b800h) between the calls.
The next call of i_plot_tile_cga will reuse the source pointer (si) of the previous call and thus continue with the bitmap for the next bit plane.
Note: The target segment (es, initialized with a000h) must be restored to its original value before the function returns.
Sorry, can't make heads or tales of it.
Addresses have to correlate somehow each other, don't know how, and can't do the math.
I looked into setmode.s you seem to set card to 640x200 mode by
Mov ax,0041h
Int 10h
Programmer's guide uses
MOV AH,0
MOV AL,41H
INT 10H
What's the difference?
Also programmer's guide seems to set lut to different values depending on if one is using premade cga? Palette or custom palette, is it needed?
Then it says that in 16 color mode driver will combine three deb planes A0000:0, A8000:0 and B8000:0 with vdc plane B8000:0. Is this automatic and does the driver also automatically write to these locations?
Kekkulawrote on 2026-01-25, 15:19:I looked into setmode.s you seem to set card to 640x200 mode by
Mov ax,0041h
Int 10h
Programmer's guide uses
MOV AH,0
MOV AL,41H […] Show full quote
I looked into setmode.s you seem to set card to 640x200 mode by
Mov ax,0041h
Int 10h
Programmer's guide uses
MOV AH,0
MOV AL,41H
INT 10H
What's the difference?
The difference is that setting both halves of the register in one go is more efficient.
Maybe my tile plotting code is unnecessarily flexible and therefore unnecessarily confusing. Let's write it like this, instead:
1i_plot_tile_go329: 2 mov ax,a000h ; 1st bit plane 3 mov es,ax 4 call i_plot_tile_cga 5 sub di,4 6 mov ax,a800h ; 2nd bit plane 7 mov es,ax 8 call i_plot_tile_cga 9 sub di,4 10 mov ax,b000h ; 3rd bit plane 11 mov es,ax 12 call i_plot_tile_cga 13 sub di,4 14 mov ax,b800h ; 4th bit plane 15 mov es,ax 16 call i_plot_tile_cga 17 ; make sure that es is a000h, again (needed by other functions) 18 mov ax,a000h 19 mov es,ax 20 ret
With this variant, you can just swap the lines with the “bit plane” comments as needed, namely until the in-game tiles have the expected colors.
Well... start screen is always pink no matter how the addresses are set... but I managed get few colours match.
By setting
1. plane 0b000h
2. plane 0a000h
3. plane 0a800h
4. plane 0b800h
How ever water is pink, I can get water kinda blue but then everything else is screwed.