CGA

Share your advanced PureBasic knowledge/code with the community.
wilbert
PureBasic Expert
PureBasic Expert
Posts: 3942
Joined: Sun Aug 08, 2004 5:21 am
Location: Netherlands

Re: CGA

Post by wilbert »

J. Baker wrote:Also, I don't need this code for anything. This is just a "challenge" really. Well, that and I do like 4bit graphics, Dos, ect. ;)
Code challenges are good :)
I noticed you have to output the PNG image as 8 bit or 24 bit. If you output 4 bit, it messes up the palette even if only 16 CGA colors are used.

Here's my previous code altered a bit to now not to use so much black

Code: Select all

Procedure CGA(color)
  !mov ecx, [p.v_color]
  !and ecx, 0xc0e0e0
  !mov eax, ecx
  !shr ecx, 16
  !shr eax, 5
  !or cl, al
  !shr eax, 5
  !or cl, al
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
    !mov eax, [cga_table256bgr + ecx * 4]
  CompilerElse
    !lea rdx, [cga_table256bgr]
    !mov eax, [rdx + rcx * 4]
  CompilerEndIf
  ProcedureReturn
  !cga_table256bgr:
  !dd 0x000000,0x555555,0x0000AA,0x0000AA,0x0000AA,0x0000AA,0x0000AA,0x0000AA
  !dd 0x555555,0x555555,0x555555,0x0000AA,0x0000AA,0x0000AA,0x0000AA,0x0000AA
  !dd 0x00AA00,0x555555,0x555555,0x0055AA,0x0055AA,0x0055AA,0x0055AA,0x0055AA
  !dd 0x00AA00,0x00AA00,0x555555,0x0055AA,0x0055AA,0x0055AA,0x0055AA,0x0055AA
  !dd 0x00AA00,0x00AA00,0x00AA00,0x0055AA,0x0055AA,0x0055AA,0x0055AA,0x0055AA
  !dd 0x00AA00,0x00AA00,0x00AA00,0x00AA00,0x0055AA,0x0055AA,0x0055AA,0x55FFFF
  !dd 0x00AA00,0x00AA00,0x00AA00,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
  !dd 0x00AA00,0x00AA00,0x55FF55,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
  !dd 0xAA0000,0xAA0000,0x555555,0x555555,0x0000AA,0x0000AA,0x5555FF,0x5555FF
  !dd 0xAA0000,0x555555,0x555555,0x555555,0x555555,0x5555FF,0x5555FF,0x5555FF
  !dd 0x555555,0x555555,0x555555,0x555555,0x555555,0x5555FF,0x5555FF,0x5555FF
  !dd 0x555555,0x555555,0x555555,0x555555,0x555555,0x5555FF,0x5555FF,0x5555FF
  !dd 0x00AA00,0x555555,0x555555,0x555555,0x555555,0xAAAAAA,0x5555FF,0x5555FF
  !dd 0x00AA00,0x55FF55,0x55FF55,0x55FF55,0xAAAAAA,0xAAAAAA,0x55FFFF,0x55FFFF
  !dd 0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
  !dd 0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
  !dd 0xAA0000,0xAA0000,0xAA0000,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA
  !dd 0xAA0000,0xAA0000,0xAA0000,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA
  !dd 0xAA0000,0xAA0000,0x555555,0x555555,0xAA00AA,0xAA00AA,0xAA00AA,0x5555FF
  !dd 0xAAAA00,0xAAAA00,0x555555,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0x5555FF
  !dd 0xAAAA00,0xAAAA00,0xAAAA00,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA
  !dd 0xAAAA00,0xAAAA00,0xAAAA00,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA
  !dd 0xAAAA00,0xAAAA00,0xAAAA00,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0x55FFFF
  !dd 0xAAAA00,0xAAAA00,0x55FF55,0x55FF55,0xAAAAAA,0xAAAAAA,0x55FFFF,0x55FFFF
  !dd 0xAA0000,0xAA0000,0xFF5555,0xFF5555,0xAA00AA,0xAA00AA,0xFF55FF,0xFF55FF
  !dd 0xAA0000,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF55FF,0xFF55FF,0xFF55FF
  !dd 0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF55FF,0xFF55FF,0xFF55FF
  !dd 0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF55FF,0xFF55FF,0xFF55FF
  !dd 0xAAAA00,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xAAAAAA,0xFF55FF,0xFF55FF
  !dd 0xAAAA00,0xFFFF55,0xFFFF55,0xFFFF55,0xAAAAAA,0xAAAAAA,0xFFFFFF,0xFFFFFF
  !dd 0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFFFF,0xFFFFFF,0xFFFFFF
  !dd 0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFFFF,0xFFFFFF,0xFFFFFF
EndProcedure
Without a table it would take more time but it would be more flexible.
For each pixel you compute
Sqr((R1-R0)*(R1-R0) + (G1-G0)*(G1-G0)+(B1-B0)*(B1-B0))
for every palette color and take the color that returns the lowest result.
Windows (x64)
Raspberry Pi OS (Arm64)
User avatar
J. Baker
Addict
Addict
Posts: 2185
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: CGA

Post by J. Baker »

Yeah, I noticed that too but didn't know it was because of the 4bit export. That's kind of odd.

New code is looking better. ;)
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
Post Reply