pico9918-core 1.3.0
TMS9918A / F18A video display processor emulation in C99
Loading...
Searching...
No Matches
platform_pico.h File Reference

pico9918-core - Platform Abstraction (RP2040 / RP2350) More...

#include <stdint.h>
#include "hardware/dma.h"
#include "hardware/gpio.h"
#include "pico/divider.h"
+ Include dependency graph for platform_pico.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define PICO9918_HOST_SET_INT(active)   gpio_put(PICO9918_INT_GPIO, !(active))
 
#define PICO9918_SECTION_SCRATCH_X(name)   __attribute__((section(".scratch_x." #name)))
 
#define PICO9918_SECTION_SCRATCH_Y(name)   __attribute__((section(".scratch_y." #name)))
 
#define PICO9918_UNINITIALIZED(decl)   __uninitialized_ram(decl)
 
#define PICO9918_IN_FLASH_FUNC(fn)   fn
 
#define PICO9918_FILL_BORDER   2u
 
#define PICO9918_FILL32_INIT(inst, srcPtr)
 
#define PICO9918_FILL32_SET_COUNT(inst, n)   dma_channel_set_trans_count((inst), (n), false)
 
#define PICO9918_FILL32_TRIGGER(inst, dstPtr)   dma_channel_set_write_addr((inst), (dstPtr), true)
 
#define PICO9918_FILL32_WAIT(inst)   dma_channel_wait_for_finish_blocking(inst)
 
#define PICO9918_FILL_MASKS   5u
 
#define PICO9918_FILL_LINE   6u
 
#define PICO9918_COPY   7u
 
#define PICO9918_COPY_STATE()
 
#define PICO9918_COPY_INIT(inst)
 
#define PICO9918_COPY_SET_WIDTH(inst, wordAligned)    dma_channel_set_config((inst), (wordAligned) ? &pico9918_copy_word : &pico9918_copy_byte, false)
 
#define PICO9918_COPY_SET_SRC(inst, srcPtr)   dma_channel_set_read_addr((inst), (srcPtr), false)
 
#define PICO9918_COPY_SET_DST(inst, dstPtr)   dma_channel_set_write_addr((inst), (dstPtr), false)
 
#define PICO9918_COPY_TRIGGER(inst, n)   dma_channel_set_trans_count((inst), (n), true)
 
#define PICO9918_COPY_WAIT(inst)   dma_channel_wait_for_finish_blocking(inst)
 
#define PICO9918_DIVMOD_U32(n, d, q, r)
 
#define PICO9918_DMA_CLAIM()
 
#define PICO9918_PIXEL_FROM_RGB12(rgb)   ((PICO9918_PIXEL_T)(((rgb) & 0xFF0F) | ((((rgb) & 0xFF0F) >> 12) << 4)))
 
#define PICO9918_PIXEL_FROM_RGB12_PAIR(packed)    ((packed) ^ (((packed) ^ ((packed) >> 8)) & 0x00F000F0u))
 
#define PICO9918_PIXEL_PAIR(p)   ((uint32_t)(p) * 0x10001u)
 
#define PICO9918_LOW16(x)   ((uint32_t)(uint16_t)(x))
 
#define PICO9918_PIXEL_DARKEN(p)   ((PICO9918_PIXEL_T)(((p) >> 2) & 0x333))
 
#define PICO9918_PIXEL_PAIR_DIM(w)   (((w) >> 1) & 0x07770777u)
 
#define PICO9918_INK_PIXELS   2
 
#define PICO9918_INK_FILL(fg)   PICO9918_PIXEL_PAIR(fg)
 
#define PICO9918_INK_DARKEN(w)   (((w) >> 2) & 0x03330333u)
 
#define PICO9918_INK_ONE(k)   (0xffffu << ((k) * 16))
 
#define PICO9918_EXPAND_INIT(lut)   ((void)0)
 
#define PICO9918_EXPAND_INDEXED(dst, src, n, lut)
 
#define PICO9918_EXPAND_INDEXED_WIDE(dst, src, n, lut)
 

Typedefs

typedef uint16_t PICO9918_PIXEL_T
 
typedef uint32_t PICO9918_INK_T
 
typedef uint32_t PICO9918_PALETTE_LUT_T
 

Variables

dma_channel_config pico9918_copy_byte
 
dma_channel_config pico9918_copy_word
 

Detailed Description

pico9918-core - Platform Abstraction (RP2040 / RP2350)

Copyright (c) 2021 Troy Schrapel

This code is licensed under the MIT license

https://github.com/visrealm/pico9918-core

Included by impl/platform.h when PICO_BUILD is defined. Do not include directly.

Definition in file platform_pico.h.

Macro Definition Documentation

◆ PICO9918_HOST_SET_INT

#define PICO9918_HOST_SET_INT (   active)    gpio_put(PICO9918_INT_GPIO, !(active))

Definition at line 47 of file platform_pico.h.

◆ PICO9918_SECTION_SCRATCH_X

#define PICO9918_SECTION_SCRATCH_X (   name)    __attribute__((section(".scratch_x." #name)))

Definition at line 54 of file platform_pico.h.

◆ PICO9918_SECTION_SCRATCH_Y

#define PICO9918_SECTION_SCRATCH_Y (   name)    __attribute__((section(".scratch_y." #name)))

Definition at line 55 of file platform_pico.h.

◆ PICO9918_UNINITIALIZED

#define PICO9918_UNINITIALIZED (   decl)    __uninitialized_ram(decl)

Definition at line 59 of file platform_pico.h.

◆ PICO9918_IN_FLASH_FUNC

#define PICO9918_IN_FLASH_FUNC (   fn)    fn

Definition at line 68 of file platform_pico.h.

◆ PICO9918_FILL_BORDER

#define PICO9918_FILL_BORDER   2u

Definition at line 121 of file platform_pico.h.

◆ PICO9918_FILL32_INIT

#define PICO9918_FILL32_INIT (   inst,
  srcPtr 
)
Value:
do \
{ \
dma_channel_config _cfg = dma_channel_get_default_config(inst); \
channel_config_set_read_increment(&_cfg, false); \
channel_config_set_write_increment(&_cfg, true); \
channel_config_set_transfer_data_size(&_cfg, DMA_SIZE_32); \
dma_channel_set_config((inst), &_cfg, false); \
dma_channel_set_read_addr((inst), (srcPtr), false); \
} while (0)

Definition at line 124 of file platform_pico.h.

◆ PICO9918_FILL32_SET_COUNT

#define PICO9918_FILL32_SET_COUNT (   inst,
 
)    dma_channel_set_trans_count((inst), (n), false)

Definition at line 135 of file platform_pico.h.

◆ PICO9918_FILL32_TRIGGER

#define PICO9918_FILL32_TRIGGER (   inst,
  dstPtr 
)    dma_channel_set_write_addr((inst), (dstPtr), true)

Definition at line 136 of file platform_pico.h.

◆ PICO9918_FILL32_WAIT

#define PICO9918_FILL32_WAIT (   inst)    dma_channel_wait_for_finish_blocking(inst)

Definition at line 137 of file platform_pico.h.

◆ PICO9918_FILL_MASKS

#define PICO9918_FILL_MASKS   5u

Definition at line 151 of file platform_pico.h.

◆ PICO9918_FILL_LINE

#define PICO9918_FILL_LINE   6u

Definition at line 155 of file platform_pico.h.

◆ PICO9918_COPY

#define PICO9918_COPY   7u

Definition at line 159 of file platform_pico.h.

◆ PICO9918_COPY_STATE

#define PICO9918_COPY_STATE ( )
Value:
dma_channel_config pico9918_copy_byte; \
dma_channel_config pico9918_copy_word;

Definition at line 166 of file platform_pico.h.

◆ PICO9918_COPY_INIT

#define PICO9918_COPY_INIT (   inst)
Value:
do \
{ \
dma_channel_config _cfg = dma_channel_get_default_config(inst); \
channel_config_set_write_increment(&_cfg, true); \
channel_config_set_high_priority(&_cfg, true); \
channel_config_set_transfer_data_size(&_cfg, DMA_SIZE_8); \
pico9918_copy_byte = _cfg; \
channel_config_set_transfer_data_size(&_cfg, DMA_SIZE_32); \
pico9918_copy_word = _cfg; \
dma_channel_set_config((inst), &pico9918_copy_byte, false); \
} while (0)

Definition at line 170 of file platform_pico.h.

◆ PICO9918_COPY_SET_WIDTH

#define PICO9918_COPY_SET_WIDTH (   inst,
  wordAligned 
)     dma_channel_set_config((inst), (wordAligned) ? &pico9918_copy_word : &pico9918_copy_byte, false)

Definition at line 183 of file platform_pico.h.

◆ PICO9918_COPY_SET_SRC

#define PICO9918_COPY_SET_SRC (   inst,
  srcPtr 
)    dma_channel_set_read_addr((inst), (srcPtr), false)

Definition at line 186 of file platform_pico.h.

◆ PICO9918_COPY_SET_DST

#define PICO9918_COPY_SET_DST (   inst,
  dstPtr 
)    dma_channel_set_write_addr((inst), (dstPtr), false)

Definition at line 187 of file platform_pico.h.

◆ PICO9918_COPY_TRIGGER

#define PICO9918_COPY_TRIGGER (   inst,
 
)    dma_channel_set_trans_count((inst), (n), true)

Definition at line 188 of file platform_pico.h.

◆ PICO9918_COPY_WAIT

#define PICO9918_COPY_WAIT (   inst)    dma_channel_wait_for_finish_blocking(inst)

Definition at line 189 of file platform_pico.h.

◆ PICO9918_DIVMOD_U32

#define PICO9918_DIVMOD_U32 (   n,
  d,
  q,
 
)
Value:
do \
{ \
divmod_result_t _dm = divmod_u32u32((n), (d)); \
(q) = to_quotient_u32(_dm); \
(r) = to_remainder_u32(_dm); \
} while (0)

Definition at line 193 of file platform_pico.h.

◆ PICO9918_DMA_CLAIM

#define PICO9918_DMA_CLAIM ( )
Value:
dma_claim_mask((1u << PICO9918_FILL_BORDER) | (1u << PICO9918_FILL_MASKS) | \
(1u << PICO9918_FILL_LINE) | (1u << PICO9918_COPY))

Definition at line 208 of file platform_pico.h.

◆ PICO9918_PIXEL_FROM_RGB12

#define PICO9918_PIXEL_FROM_RGB12 (   rgb)    ((PICO9918_PIXEL_T)(((rgb) & 0xFF0F) | ((((rgb) & 0xFF0F) >> 12) << 4)))

Definition at line 245 of file platform_pico.h.

◆ PICO9918_PIXEL_FROM_RGB12_PAIR

#define PICO9918_PIXEL_FROM_RGB12_PAIR (   packed)     ((packed) ^ (((packed) ^ ((packed) >> 8)) & 0x00F000F0u))

Definition at line 249 of file platform_pico.h.

◆ PICO9918_PIXEL_PAIR

#define PICO9918_PIXEL_PAIR (   p)    ((uint32_t)(p) * 0x10001u)

Definition at line 269 of file platform_pico.h.

◆ PICO9918_LOW16

#define PICO9918_LOW16 (   x)    ((uint32_t)(uint16_t)(x))

Definition at line 270 of file platform_pico.h.

◆ PICO9918_PIXEL_DARKEN

#define PICO9918_PIXEL_DARKEN (   p)    ((PICO9918_PIXEL_T)(((p) >> 2) & 0x333))

Definition at line 274 of file platform_pico.h.

◆ PICO9918_PIXEL_PAIR_DIM

#define PICO9918_PIXEL_PAIR_DIM (   w)    (((w) >> 1) & 0x07770777u)

Definition at line 280 of file platform_pico.h.

◆ PICO9918_INK_PIXELS

#define PICO9918_INK_PIXELS   2

Definition at line 288 of file platform_pico.h.

◆ PICO9918_INK_FILL

#define PICO9918_INK_FILL (   fg)    PICO9918_PIXEL_PAIR(fg)

Definition at line 289 of file platform_pico.h.

◆ PICO9918_INK_DARKEN

#define PICO9918_INK_DARKEN (   w)    (((w) >> 2) & 0x03330333u)

Definition at line 290 of file platform_pico.h.

◆ PICO9918_INK_ONE

#define PICO9918_INK_ONE (   k)    (0xffffu << ((k) * 16))

Definition at line 291 of file platform_pico.h.

◆ PICO9918_EXPAND_INIT

#define PICO9918_EXPAND_INIT (   lut)    ((void)0)

Definition at line 361 of file platform_pico.h.

◆ PICO9918_EXPAND_INDEXED

#define PICO9918_EXPAND_INDEXED (   dst,
  src,
  n,
  lut 
)
Value:
do \
{ \
const uint8_t* _s = (const uint8_t*)(src); \
const uint8_t* _e = _s + (n); \
uint32_t* _d = (uint32_t*)(dst); \
const PICO9918_PALETTE_LUT_T* _l = (lut); \
while (_s < _e) \
{ \
_d[0] = _l[_s[0]]; \
_d[1] = _l[_s[1]]; \
_d[2] = _l[_s[2]]; \
_d[3] = _l[_s[3]]; \
_d[4] = _l[_s[4]]; \
_d[5] = _l[_s[5]]; \
_d[6] = _l[_s[6]]; \
_d[7] = _l[_s[7]]; \
_d += 8; \
_s += 8; \
} \
} while (0)

Definition at line 363 of file platform_pico.h.

◆ PICO9918_EXPAND_INDEXED_WIDE

#define PICO9918_EXPAND_INDEXED_WIDE (   dst,
  src,
  n,
  lut 
)
Value:
do \
{ \
const uint8_t* _s = (const uint8_t*)(src); \
const uint8_t* _e = _s + (n); \
uint32_t* _d = (uint32_t*)(dst); \
const PICO9918_PALETTE_LUT_T* _l = (lut); \
while (_s < _e) \
{ \
_d[0] = (_l[_s[0]] & 0xffff) | (_l[_s[1]] << 16); \
_d[1] = (_l[_s[2]] & 0xffff) | (_l[_s[3]] << 16); \
_d[2] = (_l[_s[4]] & 0xffff) | (_l[_s[5]] << 16); \
_d[3] = (_l[_s[6]] & 0xffff) | (_l[_s[7]] << 16); \
_d += 4; \
_s += 8; \
} \
} while (0)

Definition at line 392 of file platform_pico.h.

Typedef Documentation

◆ PICO9918_PIXEL_T

typedef uint16_t PICO9918_PIXEL_T

Definition at line 243 of file platform_pico.h.

◆ PICO9918_INK_T

typedef uint32_t PICO9918_INK_T

Definition at line 287 of file platform_pico.h.

◆ PICO9918_PALETTE_LUT_T

typedef uint32_t PICO9918_PALETTE_LUT_T

Definition at line 297 of file platform_pico.h.