#8088 machine code, IBM PC DOS, 57 bytes

**Listing:**

 	MOV SI, OFFSET PAT 	; load color bar table
 	MOV CL, 12 			; loop through 12 items
 LOOP_BAR:
 	LODSB 					; load next color byte
 	MOV BL, AL				; move to BL
 	CALL DISP_COL 			; display color
 	LOOP LOOP_BAR 			; loop next color byte
 RET 					; exit to DOS
 DISP_COL PROC
 	PUSH CX					; save outer loop
 	MOV CL, 1 				; display 1 char
 	MOV AX, 09DBH 			; AH = 9 (write char with attr), AL= DBH (block char)
 	INT 10H 				; call PC BIOS
 	MOV AH, 3 				; get curson position function
 	INT 10H 				; call BIOS
 	TEST BL, BL 			; if color byte is 0, move to next line
 	JNZ NEXT_COL 			; if not 0, move to next column
 	MOV DL, 0 				; move to first column
 	INC DH 				; move to next row
 	JMP UPD_POS 			; jump to update position
 NEXT_COL:
 	INC DL					; move to next column
 UPD_POS:
 	MOV AH, 2 				; set cursor position function
 	INT 10H 				; call BIOS
 	POP CX 				; restore outer loop
 	RET
 DISP_COL ENDP
 PAT DB 0CH, 0EH, 0DH, 0, 0EH, 0AH, 0BH, 0, 0DH, 0BH, 1, 0 ; color table

This uses the IBM PC BIOS `INT 10H` video services to write the color grid to the screen. Unfortunately the only way to write a specific color attribute requires also writing code to place the cursor in the next correct location, so there's a lot of extra code for that.

Here's the output running on an IBM PC CGA (in 40x25 text mode to make it bigger).

[![enter image description here][1]][1]


 [1]: https://i.sstatic.net/Xc4mq.png