Updated 7 November 2026

API versions

api->version tells the plugin which C8B_API version the running firmware provides. The current version is 7.

Contents

Version history

Version Function pointers Added
1 36 alloc, free, get_free_mem, file_open, file_read, file_write, file_seek, file_tell, file_size, file_close, get_framebuffer, present, clear, fill_rect, get_buttons, get_buttons_pressed, get_buttons_released, get_axis_x, get_axis_y, audio_queue, audio_get_free, audio_get_sample_rate, get_ticks_ms, delay_ms, log, request_exit, exit_requested, blit_indexed8, profile_begin, profile_end, profile_report, get_axis_rx, get_axis_ry, file_mkdir, file_rename, file_remove
2 51 get_fast_buffer, get_fast_buffer_size, invalidate_icache, fast_buffer_prefetch, fast_buffer_wait, fill_rect_blend, blit_indexed8_blend, alloc_lock, alloc_unlock, alloc_is_locked, alloc_get_used, dir_open, dir_read, dir_close, set_working_directory
3 58 set_fast_buffer_mode and list_entries (inserted in the middle of the table); fill_rect_dma, get_cycles, is_valid_code_ptr, get_dep_buffer, fast_buffer_prefetch_to
4 59 load_itcm_overlay, constants C8B_PLUGIN_ITCM_OVERLAY_VMA / _SIZE
5 60 frame_scratch_prefetch_to
6 61 get_depth_strip
7 64 present_set_async, present_wait, bios_debug

Compatibility

  • Rebuild v2 plugins. Version 3 inserted set_fast_buffer_mode and list_entries in the middle of the table, which moved every later field. A plugin built against v2 calls the wrong functions for everything after get_fast_buffer_size on v3 or newer firmware.

  • Since v3, fields are only appended. A plugin built for v3 to v6 runs on v7 firmware. A v7 plugin runs on older v3+ firmware if it checks the version and the pointer before calling newer functions:

    if (api->version >= 6u && api->get_depth_strip) {
        uint32_t size;
        uint16_t* depth = (uint16_t*)api->get_depth_strip(&size);
    }
    
  • The first 41 fields (version to get_fast_buffer_size) have never moved.

  • Firmware does not reject plugins by version. The header version field is always 0x00010000; checking api->version is the plugin's job.

  • Platform-only functions: set_working_directory is NULL on the console and fill_rect_dma is NULL in the emulator. Check these pointers in every version.