/* Web64 SDK header printout: web64/sprite-mux.h * Generated by scripts/copy-web64-ide-source.mjs. * The IDE resolves this header as a read-only virtual SDK document. */ #ifndef WEB64_SPRITE_MUX_H #define WEB64_SPRITE_MUX_H #include #define WEB64_SPRITE_MUX_VIDEO_PAL 1 #define WEB64_SPRITE_MUX_VIDEO_NTSC 2 #define WEB64_SPRITE_MUX_OK 0 #define WEB64_SPRITE_MUX_BUSY 1 #define WEB64_SPRITE_MUX_CAPACITY 2 #define WEB64_SPRITE_MUX_INVALID_FRAME 4 #define WEB64_SPRITE_MUX_PALETTE_MISMATCH 8 #define WEB64_SPRITE_MUX_UNSCHEDULABLE 16 #define WEB64_SPRITE_MUX_UNSUPPORTED_STANDARD 32 #define WEB64_SPRITE_MUX_ACTIVE 64 #define WEB64_SPRITE_MUX_INVALID_ARGUMENT 128 #define WEB64_SPRITE_MUX_ENTRY_PAIR 1 #define WEB64_SPRITE_MUX_PAL_LINE_CYCLES 63 #define WEB64_SPRITE_MUX_IRQ_FIXED_CYCLES 300 #define WEB64_SPRITE_MUX_IRQ_LAYER_CYCLES 48 #define WEB64_SPRITE_MUX_SAFETY_CYCLES 63 #define WEB64_SPRITE_MUX_SINGLE_SERVICE_LINES 7 #define WEB64_SPRITE_MUX_PAIR_SERVICE_LINES 8 typedef struct { uint8_t accepted_entries; uint8_t dropped_entries; uint8_t accepted_layers; uint8_t dropped_layers; uint8_t reasons; uint8_t capacity; uint8_t submitted_entries; uint8_t pending; } Web64SpriteMuxStatus; typedef struct { uint16_t x; uint8_t y; uint8_t base_pointer; uint8_t overlay_pointer; uint8_t base_color; uint8_t overlay_color; uint8_t flags; uint8_t priority; uint8_t submission_order; uint8_t layers; uint8_t base_slot; uint8_t overlay_slot; uint16_t event_line; uint16_t end_line; uint8_t accepted; uint8_t vic_x_high; uint8_t vic_expand_x; uint8_t vic_expand_y; uint8_t vic_priority; uint8_t vic_multicolor; uint8_t vic_visible; } Web64SpriteMuxEntry; typedef struct { Web64SpriteMuxEntry *buffer_a; Web64SpriteMuxEntry *buffer_b; Web64SpriteMuxEntry *build_buffer; Web64SpriteMuxEntry *active_buffer; Web64SpriteMuxEntry *pending_buffer; uint16_t pointer_table; uint8_t capacity; uint8_t owned_slots; uint8_t multicolor_1; uint8_t multicolor_2; uint8_t video_standard; uint8_t build_count; uint8_t build_layers; uint8_t pending_count; uint8_t active_count; uint8_t pending; uint8_t activated; uint8_t active_index; uint8_t layout_count; Web64SpriteMuxStatus status; uint16_t slot_end[8]; uint8_t slot_used; uint8_t layout_generation; uint8_t buffer_a_generation; uint8_t buffer_b_generation; uint8_t layout_layers; uint8_t stable_identity_x_low; } Web64SpriteMultiplexer; #define WEB64_SPRITE_MUX_STORAGE(name, capacity) Web64SpriteMultiplexer name; Web64SpriteMuxEntry name##_buffer_a[capacity]; Web64SpriteMuxEntry name##_buffer_b[capacity] _web64_rt uint8_t web64_sprite_mux_init(Web64SpriteMultiplexer *mux, Web64SpriteMuxEntry *buffer_a, Web64SpriteMuxEntry *buffer_b, uint8_t capacity, uint16_t pointer_table, uint8_t owned_slots, uint8_t multicolor_1, uint8_t multicolor_2, uint8_t video_standard); _web64_rt uint8_t web64_sprite_mux_activate(Web64SpriteMultiplexer *mux); _web64_rt void web64_sprite_mux_deactivate(Web64SpriteMultiplexer *mux); _web64_rt uint8_t web64_sprite_mux_begin_frame(Web64SpriteMultiplexer *mux); _web64_rt uint8_t web64_sprite_mux_submit(Web64SpriteMultiplexer *mux, uint16_t x, uint8_t y, uint8_t pointer, uint8_t color, uint8_t flags, uint8_t priority); _web64_rt uint8_t web64_sprite_mux_submit_pair(Web64SpriteMultiplexer *mux, uint16_t x, uint8_t y, uint8_t base_pointer, uint8_t overlay_pointer, uint8_t base_color, uint8_t overlay_color, uint8_t flags, uint8_t priority); _web64_rt uint8_t web64_sprite_mux_submit_asset_pair(Web64SpriteMultiplexer *mux, const Web64SpriteOverlayBinding *binding, uint16_t x, uint8_t y, uint8_t base_frame, uint8_t overlay_frame, uint8_t flags, uint8_t priority); _web64_rt uint8_t web64_sprite_mux_commit(Web64SpriteMultiplexer *mux); void web64_sprite_mux_irq_service(void); void web64_sprite_mux_irq_service_fast(void); #endif