DECLARE SUB toneGrayscale () DECLARE SUB toneSepia () CONST DAC.PELMask = &H3C6 ' DAC (Digital/Analog Converter) PEL Mask Register CONST DAC.READ = &H3C7 ' DAC Read Port/DAC State Register CONST DAC.WRITE = &H3C8 ' DAC Write Port/DAC State Register CONST DAC.DATA = &H3C9 ' DAC Data Port ' Enter Mode 13 (320x200, 256 colors) SCREEN 13 ' Display the whole color palette FOR y% = 0 TO 15 FOR x% = 0 TO 15 LINE (x% * 10, y% * 10)-STEP(9, 9), x% + (y% * 16), BF NEXT x% NEXT y% ' Wait for user input COLOR 15: LOCATE 3, 25: PRINT "Press a key - 1": SLEEP toneSepia ' Wait for user input COLOR 15: LOCATE 3, 25: PRINT "Press a key - 2": SLEEP toneGrayscale ' Convert palette to Grayscale SUB toneGrayscale DIM clr(0 TO 767) AS INTEGER ' Palette buffer DIM grey AS INTEGER ' Grayscale ' Read original palette OUT DAC.PELMask, &HFF ' Mask all registers OUT DAC.READ, 0 ' Select first attribute FOR i% = 0 TO 767 ' Read all 768 components clr(i%) = INP(DAC.DATA) NEXT i% ' Write Grayscale palette OUT DAC.WRITE, 0 FOR i% = 0 TO 767 STEP 3 grey = clr(i%) * .299 + clr(i% + 1) * .587 + clr(i% + 2) * .114 OUT DAC.DATA, grey OUT DAC.DATA, grey OUT DAC.DATA, grey NEXT i% END SUB ' Convert palette to sepia SUB toneSepia DIM clr(0 TO 767) AS INTEGER ' Palette buffer DIM r AS INTEGER, g AS INTEGER, b AS INTEGER ' Sepia tone ' Read original palette OUT DAC.PELMask, &HFF ' Mask all registers OUT DAC.READ, 0 ' Select first attribute FOR i% = 0 TO 767 ' Read all 768 components clr(i%) = INP(DAC.DATA) NEXT i% ' Write sepia palette OUT DAC.WRITE, 0 FOR i% = 0 TO 767 STEP 3 r = clr(i%) * .393 + clr(i% + 1) * .769 + clr(i% + 2) * .189 g = clr(i%) * .349 + clr(i% + 1) * .686 + clr(i% + 2) * .168 b = clr(i%) * .272 + clr(i% + 1) * .534 + clr(i% + 2) * .131 IF (r > 63) THEN r = 63 IF (g > 63) THEN g = 63 IF (b > 63) THEN b = 63 OUT DAC.DATA, r OUT DAC.DATA, g OUT DAC.DATA, b NEXT i% END SUB