PICO-8 Wiki
Advertisement

For more precise timing, the SERIAL() command can be used. GPIO writes are buffered and dispatched at the end of each frame, allowing clock cycling at higher and/or more regular speeds than is possible by manually bit-banging using POKE() calls.


SERIAL(CHANNEL, ADDRESS, LENGTH)

CHANNEL:

  0x000..0x0fe    corresponds to gpio pin numbers; send 0x00 for LOW or 0xFF for HIGH

  0x0ff           delay; length is taken to mean "duration" in microseconds (excl. overhead)

  0x400..0x401    ws281x LED string (experimental)

ADDRESS: The PICO-8 memory location to read from / write to.

LENGTH: Number of bytes to send. 1/8ths are allowed to send partial bit strings.

For example, to send a byte one bit at a time to a typical APA102 LED string:

VAL = 42          -- VALUE TO SEND

DAT = 16 CLK = 15 -- DATA AND CLOCK PINS DEPEND ON DEVICE

POKE(0X4300,0)    -- DATA TO SEND (SINGLE BYTES: 0 OR 0XFF)

POKE(0X4301,0XFF)

FOR B=0,7 DO

  -- SEND THE BIT (HIGH FIRST)

  SERIAL(DAT, BAND(VAL, SHL(1,7-B))>0 AND 0X4301 OR 0X4300, 1)

  -- CYCLE THE CLOCK

  SERIAL(CLK, 0X4301)

  SERIAL(0XFF, 5) -- DELAY 5

  SERIAL(CLK, 0X4300)

  SERIAL(0XFF, 5) -- DELAY 5

END

Additional channels are available for bytestreams to and from the host operating system. These are intended to be most useful for UNIX-like environments while developing toolchains, and are not available while running a BBS or exported cart [1]. Maximum transfer rate in all cases is 64k/sec (blocks cpu).

0x800  dropped file   //  stat(120) returns TRUE when data is available

0x802  dropped image  //  stat(121) returns TRUE when data is available

0x804  stdin

0x805  stdout

0x806  file specified with: pico8 -i filename

0x807  file specified with: pico8 -o filename

0x808 [undocumented] pcm audio (see here)

Image files dropped into PICO-8 show up on channel 0x802 as a bytestream with a special format: The first 4 bytes are the image's width and height (2 bytes each little-endian, like PEEK2), followed by the image in reading order, one byte per pixel, colour-fitted to the display palette at the time the file was dropped.

[1] Channels 0x800 and 0x802 are available in the BBS and exported carts but with a maximum file size of 256k, or 128x128 for images.

Advertisement