from machine import Pin, mem32
from utime import sleep

SIO_BASE = 0xd0000000 #SIO base address 
GPIO_OUT = 0x010      #Offset for GPIO output value
GPIO_OUT_SET = 0x014  #Offset for GPIO output value set 
GPIO_OUT_CLR = 0x018  #Offset for GPIO output value clear
GPIO_OUT_XOR = 0x01c  #Offset for GPIO output value xor
FIRST_GPIO = 0        #First GPIO Pin

def gpio_out(value):
    mem32[SIO_BASE + GPIO_OUT] = value << FIRST_GPIO

def gpio_out_set(value):
    mem32[SIO_BASE + GPIO_OUT_SET] = value << FIRST_GPIO

def gpio_out_clr(value):
    mem32[SIO_BASE + GPIO_OUT_CLR] = value << FIRST_GPIO

def gpio_out_xor(value):
    mem32[SIO_BASE + GPIO_OUT_XOR] = value << FIRST_GPIO 

for i in range(8):
    Pin(i, Pin.OUT)

gpio_out(0b00001111)
sleep(1)
gpio_out(0b11110000)
sleep(1)
gpio_out_set(0b00001111)
sleep(1)
gpio_out_clr(0b10101010)
sleep(1)
while True:
    gpio_out_xor(0b11111111)
    sleep(1)