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_modeandlist_entriesin the middle of the table, which moved every later field. A plugin built against v2 calls the wrong functions for everything afterget_fast_buffer_sizeon 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 (
versiontoget_fast_buffer_size) have never moved. -
Firmware does not reject plugins by version. The header
versionfield is always0x00010000; checkingapi->versionis the plugin's job. -
Platform-only functions:
set_working_directoryis NULL on the console andfill_rect_dmais NULL in the emulator. Check these pointers in every version.