#
# Plus/4 multicolor prg executable exporter
# A Multipaint internal script
#
# Changes by Murphy/Exceed 2026
# Simple viewer: no KERNAL, no IRQ, C16-compatible
# Data order: luminance, color, bitmap
#

# size check: standard 320x200 only
W = PEEK 5
H = PEEK 7
IF W<>40
	MESSAGE Standard 320x200|size required|for PRG export
	STOP
ENDIF
IF H<>25
	MESSAGE Standard 320x200|size required|for PRG export
	STOP
ENDIF

# machine code header

BYTE $01,$10,$0B,$10,$E0,$02,$9E,$34,$31,$30,$39,$00,$00,$00,$78,$A2
BYTE $00,$BD,$66,$10,$8D,$78,$10,$BD,$69,$10,$8D,$79,$10,$BD,$6C,$10
BYTE $8D,$7C,$10,$BD,$6F,$10,$8D,$93,$10,$BD,$72,$10,$8D,$7F,$10,$20
BYTE $75,$10,$E8,$E0,$03,$D0,$DA,$AD,$1D,$FF,$C9,$FF,$D0,$F9,$A9,$3B
BYTE $8D,$06,$FF,$AD,$07,$FF,$09,$10,$8D,$07,$FF,$A9,$18,$8D,$14,$FF
BYTE $A9,$C8,$8D,$12,$FF,$A9

# border color

C = PEEK 0
R = C-1
R = R/15
R = R*15
C = C-R
L = PEEK 0
L = L-1
L = L/15
A = C
L = L*16
A = A+L
BYTE A

# machine code

BYTE $8D,$19,$FF,$A9

# background 1

	C = PEEK 1
	R = C-1
	R = R/15
	R = R*15
	C = C-R
	L = PEEK 1
	L = L-1
	L = L/15
	A = C
	L = L*16
	A = A+L
	BYTE A

# machine code

BYTE $8D,$15,$FF,$A9

# background 2

	C = PEEK 2
	R = C-1
	R = R/15
	R = R*15
	C = C-R
	L = PEEK 2
	L = L-1
	L = L/15
	A = C
	L = L*16
	A = A+L
	BYTE A

# machine code (tables + memcopy)

BYTE $8D,$16,$FF,$4C,$63,$10,$64,$7C,$94,$37,$17,$13,$3F,$1F,$1B,$1F
BYTE $03,$03,$40,$E8,$E8,$A0,$00,$B9,$00,$FF,$99,$00,$FF,$C8,$C0,$00
BYTE $D0,$F5,$A0,$00,$8C,$7F,$10,$CE,$79,$10,$CE,$7C,$10,$CE,$93,$10
BYTE $10,$E5,$60,$00

# luminance

FOR Y=0 TO 24
	FOR X=0 TO 39
		P = Y*40
		P = P+X
		P = P+65536
		H = PEEK P
		P = P+1000
		L = PEEK P
		C = H
		R = C-1
		R = R/15
		IF H=0
			R=0
		ENDIF
		H = R
		C = L
		R = C-1
		R = R/15
		IF L=0
			R=0
		ENDIF
		L = R
		M = H*16
		A = M+L
		BYTE A
	NEXT X
NEXT Y

# colors

FOR Y=0 TO 24
	FOR X=0 TO 39
		P = Y*40
		P = P+X
		P = P+65536
		L = PEEK P
		P = P+1000
		H = PEEK P
		C = H
		R = C-1
		R = R/15
		R = R*15
		IF H=0
			C=0
			R=0
		ENDIF
		H = C-R
		C = L
		R = C-1
		R = R/15
		R = R*15
		IF L=0
			C=0
			R=0
		ENDIF
		L = C-R
		M = H*16
		A = M+L
		BYTE A
	NEXT X
NEXT Y

# bitmap

FOR Y=0 TO 24
	FOR X=0 TO 39
		FOR V=0 TO 7
			C=128
			L=0
			FOR B=0 TO 7
				P=V*320
				P=P+B
				M=X*8
				P=P+M
				M=Y*2560
				P=P+M
				P=P+1024
				O=PEEK P
				M=C*O
				L=L+M
				C=C/2
			NEXT B
			BYTE L
		NEXT V
	NEXT X
NEXT Y

# Write to file

SAVE
