VOGONS


Fun with CGL (Creative Graphics Library) on 3D Blaster

Topic actions

Reply 260 of 270, by sharangad

User metadata
Rank l33t
Rank
l33t
RaVeN-05 wrote on 2026-05-03, 17:36:
Well I tried v2100 as "closest" to v1000. Used Rebel Moon : Unpatched: init_gfx: about to cglLoad […]
Show full quote

Well I tried v2100 as "closest" to v1000.
Used Rebel Moon :
Unpatched:
init_gfx: about to cglLoad

init_gfx() : CGL Load Failed error - - 0
Patched: (xor eax, eax)
init_gfx: about to cglLoad
About to cglQueryScreeb
Failure: Query Screen returned - 122
No CGL Found!!!!!! Using VESA driver.

We need to try to test on non Creative v1000 card owners. I am sure owners here.

What if cglQueryScreen is patched out in exactly the same way as cglboard present?

This is at offset 0x10551. Will give it a go tomorrow, it's time for bed here.

Also the mode numbers might be embedded into the driver. Will check tomorrow.

Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda\
https://patreon.com/Rready

Reply 261 of 270, by sharangad

User metadata
Rank l33t
Rank
l33t

Here's the modified CGL file.

https://nirvtek.com/downloads/VRITB170.V2000.20260504.001.7z
MD5: 80cbef55870aafb41999f52557aef4cb

Unzip and place in game directory. I've put my V1000 board back in and don't really fancy swapping cards at 1 AM.

Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda\
https://patreon.com/Rready

Reply 262 of 270, by sharangad

User metadata
Rank l33t
Rank
l33t

The full function pointers for VRITE170.CGL (Pointer offset is 0xF17C):

Driver: C:\DOS\CGL\CGL Drivers\VRITE170.CGL
File size is 102174 (00018F1E)
File version 170.84 (Build #16)
File header offset 115, type [2] at offset 119
Name table read: current offset 126 (0x0000007E)
************************************************
CGL Driver Type: float operands with register based parameters passing
************************************************
File offset is now 05C5
Function cgltfr: pointer 2032C, file offset 2F4A8
Function cglVersionControl_: pointer 2350, file offset 114CC
Function cglSendStream_: pointer 2434, file offset 115B0
Function cglGetPixel_: pointer 3484, file offset 12600
Function cglPutPixel_: pointer 3390, file offset 1250C
Function cglInitScreen_: pointer 1878, file offset 109F4
Function cglQueryScreen_: pointer 1674, file offset 107F0
Function cglClearScreen_: pointer 3958, file offset 12AD4
Function cglCloseScreen_: pointer 1F34, file offset 110B0
Function cglSetWindowClip_: pointer 39F0, file offset 12B6C
Function cglInitPan_: pointer 2040, file offset 111BC
Function cglPanPos_: pointer 21CC, file offset 11348
Function cglSetLineStyle_: pointer 314C, file offset 122C8
Function cglSetFillPattern_: pointer 315C, file offset 122D8
Function cglSetStipplePattern_: pointer 32B8, file offset 12434
Function cglSetDepthMode_: pointer 30CC, file offset 12248
Function cglSetStencilMode_: pointer 337C, file offset 124F8
Function cglSetLogicalOpsMode_: pointer 31AC, file offset 12328
Function cglSetDepthCueColor_: pointer 307C, file offset 121F8
Function cglSetDitherMode_: pointer 3060, file offset 121DC
Function cglLoadTextureMap_: pointer 4E60, file offset 13FDC
Function cglSelectRenderBuffer_: pointer 3CEC, file offset 12E68
Function cglCopyDisplayBuffer_: pointer 3E58, file offset 12FD4
Function cglLockBuffer_: pointer 3FE8, file offset 13164
Function cglClearBuffer_: pointer 3AF0, file offset 12C6C
Function cglSetConstant_: pointer 3770, file offset 128EC
Function cglSwapBuffer_: pointer 3C64, file offset 12DE0
Function cglUpLoad_: pointer 482C, file offset 139A8
Function cglDownLoad_: pointer 4140, file offset 132BC
Function cglSetPalette_: pointer 36E0, file offset 1285C
Function cglGetPalette_: pointer 373C, file offset 128B8
Function cglSetPickRegion_: pointer 7270, file offset 163EC
Function cglGetPickResult_: pointer 7270, file offset 163EC
Function cglSetExtent_: pointer 7270, file offset 163EC
Function cglGetExtentResult_: pointer 7270, file offset 163EC
Function cglGetConfig_: pointer 1F7C, file offset 110F8
Function cglSetCursor_: pointer 6FCC, file offset 16148
Function cglSetCursorPos_: pointer 6F00, file offset 1607C
Function cglSetupInterrupt_: pointer 2360, file offset 114DC
Function cglReleaseInterrupt_: pointer 23A8, file offset 11524
Function cglBoardPresent_: pointer 22A4, file offset 11420
Function cglQueryFeature_: pointer 729C, file offset 16418
Function cglEventRegister_: pointer 7330, file offset 164AC
Function cglEventDeregister_: pointer 73A4, file offset 16520
Number of functions 44

and there was a bug with the VRITB170 pointers. The correct set is available here
(Pointer offset 0xEEDD):

Driver: C:\DOS\CGL\CGL Drivers\VRITB170.CGL
File size is 99399 (00018447)
File version 170.84 (Build #16)
File header offset 115, type [0] at offset 119
Name table read: current offset 126 (0x0000007E)
************************************************
CGL Driver Type: integer operands with register based parameters passing
************************************************
File offset is now 05C5
Function cgltir: pointer 2032C, file offset 2F209
Function cglVersionControl_: pointer 2350, file offset 1122D
Function cglSendStream_: pointer 2434, file offset 11311
Function cglGetPixel_: pointer 3444, file offset 12321
Function cglPutPixel_: pointer 3390, file offset 1226D
Function cglInitScreen_: pointer 1878, file offset 10755
Function cglQueryScreen_: pointer 1674, file offset 10551
Function cglClearScreen_: pointer 38C8, file offset 127A5
Function cglCloseScreen_: pointer 1F34, file offset 10E11
Function cglSetWindowClip_: pointer 3960, file offset 1283D
Function cglInitPan_: pointer 2040, file offset 10F1D
Function cglPanPos_: pointer 21CC, file offset 110A9
Function cglSetLineStyle_: pointer 314C, file offset 12029
Function cglSetFillPattern_: pointer 315C, file offset 12039
Function cglSetStipplePattern_: pointer 32B8, file offset 12195
Function cglSetDepthMode_: pointer 30CC, file offset 11FA9
Function cglSetStencilMode_: pointer 337C, file offset 12259
Function cglSetLogicalOpsMode_: pointer 31AC, file offset 12089
Function cglSetDepthCueColor_: pointer 307C, file offset 11F59
Function cglSetDitherMode_: pointer 3060, file offset 11F3D
Function cglLoadTextureMap_: pointer 4DD0, file offset 13CAD
Function cglSelectRenderBuffer_: pointer 3C5C, file offset 12B39
Function cglCopyDisplayBuffer_: pointer 3DC8, file offset 12CA5
Function cglLockBuffer_: pointer 3F58, file offset 12E35
Function cglClearBuffer_: pointer 3A60, file offset 1293D
Function cglSetConstant_: pointer 36E0, file offset 125BD
Function cglSwapBuffer_: pointer 3BD4, file offset 12AB1
Function cglUpLoad_: pointer 479C, file offset 13679
Function cglDownLoad_: pointer 40B0, file offset 12F8D
Function cglSetPalette_: pointer 3650, file offset 1252D
Function cglGetPalette_: pointer 36AC, file offset 12589
Function cglSetPickRegion_: pointer 6B10, file offset 159ED
Function cglGetPickResult_: pointer 6B10, file offset 159ED
Function cglSetExtent_: pointer 6B10, file offset 159ED
Function cglGetExtentResult_: pointer 6B10, file offset 159ED
Function cglGetConfig_: pointer 1F7C, file offset 10E59
Function cglSetCursor_: pointer 686C, file offset 15749
Function cglSetCursorPos_: pointer 67A0, file offset 1567D
Function cglSetupInterrupt_: pointer 2360, file offset 1123D
Function cglReleaseInterrupt_: pointer 23A8, file offset 11285
Function cglBoardPresent_: pointer 22A4, file offset 11181
Function cglQueryFeature_: pointer 6B3C, file offset 15A19
Function cglEventRegister_: pointer 6BD0, file offset 15AAD
Function cglEventDeregister_: pointer 6C44, file offset 15B21
Number of functions 44

Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda\
https://patreon.com/Rready

Reply 263 of 270, by sharangad

User metadata
Rank l33t
Rank
l33t

The utility for dumping the CGL listings is available here:
https://nirvtek.com/downloads/CGLLOad.20260504.001.7z
MD5: 2135554607f137bb2f5ca0bb3f61a8b6

Run it with the CGL filename to dump contents
cglload <filename>

OR pass two filename for two files to compare
cgload <file1> <file2>

THe source is here. It's very rough and originally AI generated.

Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda\
https://patreon.com/Rready

Reply 265 of 270, by sharangad

User metadata
Rank l33t
Rank
l33t
RaVeN-05 wrote on 2026-05-04, 13:04:

looks like 0 zero is always good sign, and later game crashes, so v2100 and probably v2200 soon of all are no go.
maybe v1000 non creative can work

It does look like it! Thanks RaVeN!

Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda\
https://patreon.com/Rready

Reply 266 of 270, by sharangad

User metadata
Rank l33t
Rank
l33t
RaVeN-05 wrote on 2026-05-04, 13:04:

looks like 0 zero is always good sign, and later game crashes, so v2100 and probably v2200 soon of all are no go.
maybe v1000 non creative can work

I plugged some of the cglQueryScreen code into an Ai. It seems to suggest that it's looking for a specific non-verité chip (conexant) , but it's probably wrong. The 3db pci is a bigger card than the v2100 I have (stealth ii s220) with more chips, though that might be due better integration on the newer card.

Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda\
https://patreon.com/Rready

Reply 270 of 270, by sharangad

User metadata
Rank l33t
Rank
l33t
RaVeN-05 wrote on Today, 11:35:

so i need look closer to card, it could be GLINT at same board where Verite chip, or even unified? that was if true very ridiculous.

That's a pretty stupid idea. I tried to get DeepSeek to disassemble the functions from vritb170 with the offsets and it gave give complete and utter garbage. On manual inspection, It does look for 0x1163 (Creative/Rendition) and 0x001 (V1000) in a BIOS call int 1A from protected mode through the extenders Int 31 dispatcher. It could be looking for something in the ROM BIOS, something unique to the card. I'll look into this once I've got a basic wrapper working.

I had a few problems with that. The function offsets are correct, but for some reason Dosbox mangles the machine code for some instructions, various bytes at random offsets are corrupted. I don't know whether my patching is broken, ICR23 widescreen support is corrupting something OR dosbox's instruction parser (happens with every single type of core) is messing things up.

Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda\
https://patreon.com/Rready