import board
import digitalio

#--| PIN DEFINITIONS |-----------------------------------------------
R1 = digitalio.DigitalInOut(board.D13); R1.switch_to_output(False)

AA = digitalio.DigitalInOut(board.A0); AA.switch_to_output(False)
AB = digitalio.DigitalInOut(board.A1); AB.switch_to_output(False)
AC = digitalio.DigitalInOut(board.A2); AC.switch_to_output(False)
AD = digitalio.DigitalInOut(board.A3); AD.switch_to_output(False)

CLK = digitalio.DigitalInOut(board.SCK); CLK.switch_to_output(False)
LAT = digitalio.DigitalInOut(board.MOSI); LAT.switch_to_output(False)
OE = digitalio.DigitalInOut(board.MISO); OE.switch_to_output(False)
#--------------------------------------------------------------------

# define a bitmap
# 16 rows of 32 columns
# 0=OFF, 1=ON
bmp = (
  (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
  (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
  (0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0),
  (0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0),
  (0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0),
  (0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0),
  (0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0),
  (0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0),
  (0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0),
  (0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0),
  (0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0),
  (0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0),
  (0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0),
  (0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0),
  (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0),
  (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
)

COLS = len(bmp[0])
ROWS = len(bmp)
print(f"ROWS={ROWS}, COLS={COLS}")

while True:
  for row in range(ROWS):

    # clock row data out
    for col in range(COLS):
      # set color bit
      R1.value = bmp[row][col]

      # clock it out
      CLK.value = True
      CLK.value = False

    # disable output
    OE.value = True

    # set row address bits
    AA.value = (row >> 0) & 0x01
    AB.value = (row >> 1) & 0x01
    AC.value = (row >> 2) & 0x01
    AD.value = (row >> 3) & 0x01

    # latch it out
    LAT.value = True
    LAT.value = False

    # enable output
    OE.value = False