Here is one way to convert Aurora mode 16 colours to 24 bit RGB, using a table:
Code: Select all
* Native colour conversion
*
* V0.01, ©pjwitte 2oi8+
*
* Compatible with all GD2 modes
*
section code
xdef ut_cv16to24
xdef cv_16to24
*
ut_cv16to24
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* entry:
* d3.b = grbgrbgx - Aur (mode 16) colour code
*
* exit:
* d3.l = 0 R G B - 24 bit colour code <> mode 64!
* a3 smashed
*
* no errors; always "suceeds"
lea.l tab_aur8rgb,a3
andi.w #$00ff,d3 byte -> word
*
cv_16to24
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* This routine employs a table of all 256 possible Aurora RGB values groups
* of 3 bytes per value, one each for R, G & B.
*
* entry:
* d3.w = 00000000 grbgrbgx - Aur (mode 16) byte in a word
* a3 -> tab_aur8rgb - RGB conversion table
*
* exit:
* d3.l = 0 R G B - 24 bit colour code <> mode 64!
*
* No other registers affected
*
* No errors; always "suceeds"
adda.w d3,a3
adda.w d3,a3
adda.w d3,a3
moveq #0,d3
move.b (a3)+,d3
lsl.w #8,d3
move.b (a3)+,d3
lsl.l #8,d3
move.b (a3)+,d3
rts
*
tab_aur8rgb
dc.b $00,$00,$00,$20,$00,$00,$00,$20,$00,$20,$20,$00,$00,$00,$40,$00,$00,$60,$00,$20,$40,$00,$20,$60
dc.b $40,$00,$00,$60,$00,$00,$40,$20,$00,$60,$20,$00,$40,$00,$40,$60,$00,$60,$40,$20,$40,$60,$20,$60
dc.b $00,$40,$00,$20,$40,$00,$00,$60,$00,$20,$60,$00,$00,$40,$40,$00,$40,$60,$00,$60,$40,$00,$60,$60
dc.b $40,$40,$00,$60,$40,$00,$40,$60,$00,$60,$60,$00,$40,$40,$40,$60,$40,$60,$40,$60,$40,$60,$60,$60
dc.b $00,$00,$80,$00,$00,$A0,$00,$20,$80,$00,$20,$A0,$00,$00,$C0,$00,$00,$E0,$00,$20,$C0,$00,$20,$E0
dc.b $40,$00,$80,$60,$00,$A0,$40,$20,$80,$60,$20,$A0,$40,$00,$C0,$60,$00,$E0,$40,$20,$C0,$60,$20,$E0
dc.b $00,$40,$80,$00,$40,$A0,$00,$60,$80,$00,$60,$A0,$00,$40,$C0,$00,$40,$E0,$00,$60,$C0,$00,$60,$E0
dc.b $40,$40,$80,$60,$40,$A0,$40,$60,$80,$60,$60,$A0,$40,$40,$C0,$60,$40,$E0,$40,$60,$C0,$60,$60,$E0
dc.b $80,$00,$00,$A0,$00,$00,$80,$20,$00,$A0,$20,$00,$80,$00,$40,$A0,$00,$60,$80,$20,$40,$A0,$20,$60
dc.b $C0,$00,$00,$E0,$00,$00,$C0,$20,$00,$E0,$20,$00,$C0,$00,$40,$E0,$00,$60,$C0,$20,$40,$E0,$20,$60
dc.b $80,$40,$00,$A0,$40,$00,$80,$60,$00,$A0,$60,$00,$80,$40,$40,$A0,$40,$60,$80,$60,$40,$A0,$60,$60
dc.b $C0,$40,$00,$E0,$40,$00,$C0,$60,$00,$E0,$60,$00,$C0,$40,$40,$E0,$40,$60,$C0,$60,$40,$E0,$60,$60
dc.b $80,$00,$80,$A0,$00,$A0,$80,$20,$80,$A0,$20,$A0,$80,$00,$C0,$A0,$00,$E0,$80,$20,$C0,$A0,$20,$E0
dc.b $C0,$00,$80,$E0,$00,$A0,$C0,$20,$80,$E0,$20,$A0,$C0,$00,$C0,$E0,$00,$E0,$C0,$20,$C0,$E0,$20,$E0
dc.b $80,$40,$80,$A0,$40,$A0,$80,$60,$80,$A0,$60,$A0,$80,$40,$C0,$A0,$40,$E0,$80,$60,$C0,$A0,$60,$E0
dc.b $C0,$40,$80,$E0,$40,$A0,$C0,$60,$80,$E0,$60,$A0,$C0,$40,$C0,$E0,$40,$E0,$C0,$60,$C0,$E0,$60,$E0
dc.b $00,$80,$00,$20,$80,$00,$00,$A0,$00,$20,$A0,$00,$00,$80,$40,$00,$80,$60,$00,$A0,$40,$00,$A0,$60
dc.b $40,$80,$00,$60,$80,$00,$40,$A0,$00,$60,$A0,$00,$40,$80,$40,$60,$80,$60,$40,$A0,$40,$60,$A0,$60
dc.b $00,$C0,$00,$20,$C0,$00,$00,$E0,$00,$20,$E0,$00,$00,$C0,$40,$00,$C0,$60,$00,$E0,$40,$00,$E0,$60
dc.b $40,$C0,$00,$60,$C0,$00,$40,$E0,$00,$60,$E0,$00,$40,$C0,$40,$60,$C0,$60,$40,$E0,$40,$60,$E0,$60
dc.b $00,$80,$80,$00,$80,$A0,$00,$A0,$80,$00,$A0,$A0,$00,$80,$C0,$00,$80,$E0,$00,$A0,$C0,$00,$A0,$E0
dc.b $40,$80,$80,$60,$80,$A0,$40,$A0,$80,$60,$A0,$A0,$40,$80,$C0,$60,$80,$E0,$40,$A0,$C0,$60,$A0,$E0
dc.b $00,$C0,$80,$00,$C0,$A0,$00,$E0,$80,$00,$E0,$A0,$00,$C0,$C0,$00,$C0,$E0,$00,$E0,$C0,$00,$E0,$E0
dc.b $40,$C0,$80,$60,$C0,$A0,$40,$E0,$80,$60,$E0,$A0,$40,$C0,$C0,$60,$C0,$E0,$40,$E0,$C0,$60,$E0,$E0
dc.b $80,$80,$00,$A0,$80,$00,$80,$A0,$00,$A0,$A0,$00,$80,$80,$40,$A0,$80,$60,$80,$A0,$40,$A0,$A0,$60
dc.b $C0,$80,$00,$E0,$80,$00,$C0,$A0,$00,$E0,$A0,$00,$C0,$80,$40,$E0,$80,$60,$C0,$A0,$40,$E0,$A0,$60
dc.b $80,$C0,$00,$A0,$C0,$00,$80,$E0,$00,$A0,$E0,$00,$80,$C0,$40,$A0,$C0,$60,$80,$E0,$40,$A0,$E0,$60
dc.b $C0,$C0,$00,$E0,$C0,$00,$C0,$E0,$00,$E0,$E0,$00,$C0,$C0,$40,$E0,$C0,$60,$C0,$E0,$40,$E0,$E0,$60
dc.b $80,$80,$80,$A0,$80,$A0,$80,$A0,$80,$A0,$A0,$A0,$80,$80,$C0,$A0,$80,$E0,$80,$A0,$C0,$A0,$A0,$E0
dc.b $C0,$80,$80,$E0,$80,$A0,$C0,$A0,$80,$E0,$A0,$A0,$C0,$80,$C0,$E0,$80,$E0,$C0,$A0,$C0,$E0,$A0,$E0
dc.b $80,$C0,$80,$A0,$C0,$A0,$80,$E0,$80,$A0,$E0,$A0,$80,$C0,$C0,$A0,$C0,$E0,$80,$E0,$C0,$A0,$E0,$E0
dc.b $C0,$C0,$80,$E0,$C0,$A0,$C0,$E0,$80,$E0,$E0,$A0,$C0,$C0,$C0,$E0,$C0,$E0,$C0,$E0,$C0,$E0,$E0,$E0
*
end
You could probably use calculation rather than a table, but I was not very satisfied with the result..