
Prog8 compiler v10.6-SNAPSHOT by Irmen de Jong (irmen@razorvine.net)
Prerelease version from git commit 7a647300 in branch nextversion
This software is licensed under the GNU GPL 3.0, see https://www.gnu.org/licenses/gpl.html

Compiling program import-all-cx16.p8
Compiler target: cx16


LIBRARY MODULE NAME: anyall
---------------------------

anyall  {
    all  (uword arrayptr, uword num_elements) -> bool 
    allw  (uword arrayptr, uword num_elements) -> bool 
    any  (uword arrayptr, uword num_elements) -> bool 
    anyw  (uword arrayptr, uword num_elements) -> bool 
}


LIBRARY MODULE NAME: bmx
------------------------

bmx  {
    str  FILEID 
    ubyte  bitsperpixel 
    ubyte  border 
    ubyte  compression 
    uword  error_message 
    ubyte[]  header 
    uword  height 
    ubyte  old_drivenumber 
    uword @shared  palette_buffer_ptr 
    uword  palette_entries 
    ubyte  palette_start 
    ubyte  vera_colordepth 
    uword  width 
    build_header  () 
    bytes_per_scanline  (uword w) -> uword 
    close  () 
    continue_load  (ubyte vbank, uword vaddr) -> bool 
    continue_load_only_palette  () -> bool 
    continue_load_stamp  (ubyte vbank, uword vaddr, uword screenwidth) -> bool 
    open  (ubyte drivenumber, str filename) -> bool 
    parse_header  () -> bool 
    read_bitmap  (ubyte vbank, uword vaddr) -> bool 
    read_bitmap_padded  (ubyte vbank, uword vaddr, uword screenwidth) -> bool 
    read_header  () -> bool 
    read_palette  () -> bool 
    read_scanline  (uword size) 
    save  (ubyte drivenumber, str filename, ubyte vbank, uword vaddr, uword screenwidth) -> bool 
    set_bpp  (ubyte bpp) 
    set_vera_colordepth  (ubyte depth) 
    write_bitmap  (ubyte vbank, uword vaddr, uword screenwidth) -> bool 
    write_header  () -> bool 
    write_palette  () -> bool 
}


LIBRARY MODULE NAME: buffers
----------------------------

smallringbuffer  {
    ubyte[]  buffer 
    ubyte  fill 
    ubyte  head 
    ubyte  tail 
    get  () -> ubyte 
    getw  () -> uword 
    init  () 
    put  (ubyte value) -> bool 
    putw  (uword value) -> bool 
}

ringbuffer  {
    uword  buffer_ptr 
    uword  fill 
    uword  head 
    uword  tail 
    get  () -> ubyte 
    getw  () -> uword 
    inc_head  () 
    inc_tail  () 
    init  () 
    put  (ubyte value) -> bool 
    putw  (uword value) -> bool 
}


LIBRARY MODULE NAME: compression
--------------------------------

compression  {
    decode_rle  (uword compressed @AY, uword target @R0, uword maxsize @R1) -> clobbers (X) -> uword @AY 
    decode_rle_srcfunc  (uword source_function @AY, uword target @R0, uword maxsize @R1) -> clobbers (X) -> uword @AY 
    encode_rle  (uword data, uword size, uword target, bool is_last_block) -> uword 
    encode_rle_outfunc  (uword data, uword size, uword output_function, bool is_last_block) 
}


LIBRARY MODULE NAME: conv
-------------------------

conv  {
    str @shared  string_out 
    any2uword  (str string @AY) -> clobbers (Y) -> ubyte @A 
    bin2uword  (str string @AY) -> uword @AY 
    hex2uword  (str string @AY) -> uword @AY 
    internal_byte2decimal  (byte value @A) -> ubyte @Y, ubyte @A, ubyte @X 
    internal_ubyte2decimal  (ubyte value @A) -> ubyte @Y, ubyte @X, ubyte @A 
    internal_ubyte2hex  (ubyte value @A) -> clobbers (X) -> ubyte @A, ubyte @Y 
    internal_uword2decimal  (uword value @AY) -> ubyte @Y, ubyte @A, ubyte @X 
    internal_uword2hex  (uword value @AY) -> clobbers (A,Y) 
    str2byte  (str string @AY) -> clobbers (Y) -> byte @A 
    str2ubyte  (str string @AY) -> clobbers (Y) -> ubyte @A 
    str2uword  (str string @AY) -> uword @AY 
    str2word  (str string @AY) -> word @AY 
    str_b  (byte value @A) -> clobbers (X) -> str @AY 
    str_ub  (ubyte value @A) -> clobbers (X) -> str @AY 
    str_ub0  (ubyte value @A) -> clobbers (X) -> str @AY 
    str_ubbin  (ubyte value @A) -> clobbers (X) -> str @AY 
    str_ubhex  (ubyte value @A) -> clobbers (X) -> str @AY 
    str_uw  (uword value @AY) -> clobbers (X) -> str @AY 
    str_uw0  (uword value @AY) -> clobbers (X) -> str @AY 
    str_uwbin  (uword value @AY) -> clobbers (X) -> str @AY 
    str_uwhex  (uword value @AY) -> str @AY 
    str_w  (word value @AY) -> clobbers (X) -> str @AY 
}


LIBRARY MODULE NAME: cx16logo
-----------------------------

cx16logo  {
    uword[]  logo_lines 
    logo  () 
    logo_at  (ubyte column, ubyte row) 
}


LIBRARY MODULE NAME: diskio
---------------------------

diskio  {
    const ubyte  READ_IO_CHANNEL 
    const ubyte  WRITE_IO_CHANNEL 
    ubyte @shared  drivenumber 
    bool  iteration_in_progress 
    uword  list_blocks 
    str  list_filename 
    str  list_filetype 
    uword  list_pattern 
    bool  list_skip_disk_name 
    bool  write_iteration_in_progress 
    chdir  (str path) 
    curdir  () -> uword 
    delete  (uword filenameptr) 
    directory  () -> bool 
    diskname  () -> uword 
    exists  (str filename) -> bool 
    f_close  () 
    f_close_w  () 
    f_open  (str filenameptr) -> bool 
    f_open_w  (str filename) -> bool 
    f_open_w_seek  (str filename) -> bool 
    f_read  (uword bufferpointer, uword num_bytes) -> uword 
    f_read_all  (uword bufferpointer) -> uword 
    f_readline  (uword bufptr @AY) -> clobbers (X) -> ubyte @Y, ubyte @A 
    f_seek  (uword pos_hiword, uword pos_loword) 
    f_seek_w  (uword pos_hiword, uword pos_loword) 
    f_tell  () -> uword @R0, uword @R1, uword @R2, uword @R3 
    f_write  (uword bufferpointer, uword num_bytes) -> bool 
    fastmode  (ubyte mode) -> bool 
    internal_f_open_w  (str filename, bool open_for_seeks) -> bool 
    internal_f_tell  () 
    internal_load_routine  (uword filenameptr, uword address_override, bool headerless) -> uword 
    internal_save_routine  (uword filenameptr, uword startaddress, uword savesize, bool headerless) -> bool 
    lf_end_list  () 
    lf_next_entry  () -> bool 
    lf_start_list  (uword pattern_ptr) -> bool 
    list_filenames  (uword pattern_ptr, uword filenames_buffer, uword filenames_buf_size) -> ubyte 
    load  (uword filenameptr, uword address_override) -> uword 
    load_raw  (uword filenameptr, uword startaddress) -> uword 
    load_size  (ubyte startbank, uword startaddress, uword endaddress) -> uword 
    mkdir  (str name) 
    read4hex  () -> uword 
    relabel  (str name) 
    rename  (uword oldfileptr, uword newfileptr) 
    reset_read_channel  () 
    reset_write_channel  () 
    rmdir  (str name) 
    save  (uword filenameptr, uword startaddress, uword savesize) -> bool 
    save_raw  (uword filenameptr, uword startaddress, uword savesize) -> bool 
    send_command  (uword commandptr) 
    status  () -> uword 
    status_code  () -> ubyte 
    vload  (str name @R0, ubyte bank @A, uword startaddress @R1) -> clobbers (X,Y) -> bool @A 
    vload_raw  (str name @R0, ubyte bank @A, uword startaddress @R1) -> clobbers (X,Y) -> bool @A 
}


LIBRARY MODULE NAME: emudbg
---------------------------

emudbg  {
    const uword  EMU_BASE 
    &ubyte  EMU_CHROUT 
    &ubyte  EMU_CMDKEYS_DISABLED 
    &ubyte  EMU_CPUCLK_H 
    &ubyte  EMU_CPUCLK_L 
    &ubyte  EMU_CPUCLK_M 
    &ubyte  EMU_CPUCLK_RESET 
    &ubyte  EMU_CPUCLK_U 
    &ubyte  EMU_DBGOUT1 
    &ubyte  EMU_DBGOUT2 
    &ubyte  EMU_DBG_HOTKEY_ENABLED 
    &ubyte  EMU_ECHO_MODE 
    &ubyte  EMU_EMU_DETECT1 
    &ubyte  EMU_EMU_DETECT2 
    &ubyte  EMU_KEYMAP 
    &ubyte  EMU_LOG_KEYBOARD 
    &ubyte  EMU_LOG_VIDEO 
    &ubyte  EMU_RECORD_GIF 
    &ubyte  EMU_RECORD_WAV 
    &ubyte  EMU_SAVE_ON_EXIT 
    console_chrout  (ubyte char) 
    console_value1  (ubyte value) 
    console_value2  (ubyte value) 
    console_write  (str isoString) 
    cpu_cycles  () -> uword @R0, uword @R1 
    is_emulator  () -> bool 
    reset_cpu_cycles  () 
}


LIBRARY MODULE NAME: floats
---------------------------

floats  {
    const float  E 
    const float  EPSILON 
    const float  PI 
    const float  TWOPI 
    const float  π 
    ABS  () -> clobbers (A,X,Y)  = $fe4e
    ATN  () -> clobbers (A,X,Y)  = $fe48
    AYINT  () -> clobbers (A,X,Y)  = $fe00
    AYINT2  () -> clobbers (X) -> word @AY 
    CONUPK  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe5a
    COS  () -> clobbers (A,X,Y)  = $fe3f
    DIV10  () -> clobbers (A,X,Y)  = $fe7e
    EXP  () -> clobbers (A,X,Y)  = $fe3c
    FADD  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe18
    FADDH  () -> clobbers (A,X,Y)  = $fe6f
    FADDT  () -> clobbers (A,X,Y)  = $fe1b
    FCOMP  (uword mflpt @AY) -> clobbers (X,Y) -> ubyte @A  = $fe54
    FDIV  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe24
    FDIVT  () -> clobbers (A,X,Y)  = $fe27
    FINLOG  (byte value @A) -> clobbers (A,X,Y)  = $fe90
    FLOAT  () -> clobbers (A,X,Y)  = $fe87
    FLOATC  () -> clobbers (A,X,Y)  = $fe0f
    FLOATS  () -> clobbers (A,X,Y)  = $fe8a
    FMULT  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe1e
    FMULTT  () -> clobbers (A,X,Y)  = $fe21
    FOUT  () -> clobbers (X) -> uword @AY  = $fe06
    FPWR  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe36
    FPWRT  () -> clobbers (A,X,Y)  = $fe39
    FREADSA  (byte value @A) -> clobbers (A,X,Y) 
    FREADU24AXY  (ubyte lo @A, ubyte mid @X, ubyte hi @Y) -> clobbers (A,X,Y) -> float @FAC1 
    FREADUY  (ubyte value @Y) 
    FSUB  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe12
    FSUBT  () -> clobbers (A,X,Y)  = $fe15
    GETADR  () -> clobbers (X) -> ubyte @Y, ubyte @A  = $fe0c
    GETADRAY  () -> clobbers (X) -> uword @AY 
    GIVAYF  (ubyte lo @Y, ubyte hi @A) -> clobbers (A,X,Y)  = $fe03
    GIVAYFAY  (uword value @AY) -> clobbers (A,X,Y) 
    GIVUAYFAY  (uword value @AY) -> clobbers (A,X,Y) 
    INT  () -> clobbers (A,X,Y)  = $fe2d
    LOG  () -> clobbers (A,X,Y)  = $fe2a
    MOVAF  () -> clobbers (A,X)  = $fe6c
    MOVEF  () -> clobbers (A,X)  = $fe81
    MOVFA  () -> clobbers (A,X)  = $fe69
    MOVFM  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe63
    MOVFRM  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe60
    MOVMF  (uword mflpt @XY) -> clobbers (A,X,Y)  = $fe66
    MUL10  () -> clobbers (A,X,Y)  = $fe7b
    NEGFAC  () -> clobbers (A)  = $fe78
    NEGOP  () -> clobbers (A)  = $fe33
    NORMAL  () -> clobbers (A,X,Y)  = $fe75
    QINT  () -> clobbers (A,X,Y)  = $fe8d
    RND  () -> clobbers (A,X,Y)  = $fe57
    RND_0  () -> clobbers (A,X,Y)  = $fe57
    ROMUPK  (uword mflpt @AY) -> clobbers (A,X,Y)  = $fe5d
    ROUND  () -> clobbers (A,X,Y)  = $fe4b
    SGN  () -> clobbers (A,X,Y)  = $fe84
    SIGN  () -> clobbers (X,Y) -> ubyte @A  = $fe51
    SIN  () -> clobbers (A,X,Y)  = $fe42
    SQR  () -> clobbers (A,X,Y)  = $fe30
    TAN  () -> clobbers (A,X,Y)  = $fe45
    VAL_1  (uword string @XY, ubyte length @A) -> clobbers (A,X,Y) -> float @FAC1  = $fe09
    ZEROFC  () -> clobbers (A,X,Y)  = $fe72
    atan  (float value) -> float 
    atan2  (float y, float x) -> float 
    ceil  (float value) -> float 
    clampf  (float value, float minimum, float maximum) -> float 
    cos  (float angle) -> float 
    cot  (float value) -> float 
    csc  (float value) -> float 
    deg  (float angle) -> float 
    floor  (float value) -> float 
    lerp  (float v0, float v1, float t) -> float 
    lerp_fast  (float v0, float v1, float t) -> float 
    ln  (float value) -> float 
    log2  (float value) -> float 
    maxf  (float f1, float f2) -> float 
    minf  (float f1, float f2) -> float 
    normalize  (float value @FAC1) -> float @FAC1 
    parse  (str value @AY) -> float @FAC1 
    pop  () -> float @FAC1 
    pow  (float value, float power) -> float 
    print  (float value @FAC1) -> clobbers (A,X,Y) 
    push  (float value @FAC1) 
    rad  (float angle) -> float 
    rnd  () -> float 
    rndseed  (float seed) 
    round  (float value) -> float 
    secant  (float value) -> float 
    sin  (float angle) -> float 
    tan  (float value) -> float 
    time  () -> float @FAC1 
    tostr  (float value @FAC1) -> clobbers (X) -> str @AY 
}


LIBRARY MODULE NAME: gfx_hires
------------------------------

gfx_hires  {
    const uword  HEIGHT 
    const uword  WIDTH 
    const uword  charset_addr 
    const ubyte  charset_bank 
    addr_mul_24_for_highres_4c  (uword yy @R2, uword xx @R3) -> clobbers (A,Y) -> uword @R0, uword @R1 
    circle  (uword xcenter, uword ycenter, ubyte radius, ubyte color) 
    clear_screen  (ubyte color) 
    cs_innerloop640  (ubyte color @A) -> clobbers (Y) 
    disc  (uword xcenter, uword ycenter, ubyte radius, ubyte color) 
    fill  (uword x, uword y, ubyte new_color) 
    fillrect  (uword xx, uword yy, uword rwidth, uword rheight, ubyte color) 
    graphics_mode  () 
    horizontal_line  (uword xx, uword yy, uword length, ubyte color) 
    line  (uword x1, uword y1, uword x2, uword y2, ubyte color) 
    next_pixel  (ubyte color @A) 
    next_pixels  (uword pixels @AY, uword amount @R0) -> clobbers (A,X,Y) 
    pget  (uword xx, uword yy) -> ubyte 
    plot  (uword xx, uword yy, ubyte color) 
    position  (uword xx, uword yy) 
    position2  (uword xx, uword yy, bool also_port_1) 
    rect  (uword xx, uword yy, uword rwidth, uword rheight, ubyte color) 
    safe_circle  (uword xcenter, uword ycenter, ubyte radius, ubyte color) 
    safe_disc  (uword xcenter, uword ycenter, ubyte radius, ubyte color) 
    safe_fillrect  (uword xx, uword yy, uword rwidth, uword rheight, ubyte color) 
    safe_horizontal_line  (uword xx, uword yy, uword length, ubyte color) 
    safe_plot  (uword xx, uword yy, ubyte color) 
    safe_rect  (uword xx, uword yy, uword rwidth, uword rheight, ubyte color) 
    safe_vertical_line  (uword xx, uword yy, uword lheight, ubyte color) 
    set_8_pixels_from_bits  (ubyte bits @R0, ubyte oncolor @A, ubyte offcolor @Y) -> clobbers (X) 
    text  (uword xx, uword yy, ubyte color, uword sctextptr) 
    text_charset  (ubyte charset) 
    text_mode  () 
    vertical_line  (uword xx, uword yy, uword lheight, ubyte color) 
}


LIBRARY MODULE NAME: gfx_lores
------------------------------

gfx_lores  {
    const ubyte  HEIGHT 
    const uword  WIDTH 
    const uword  charset_addr 
    const ubyte  charset_bank 
    bool  eor_mode 
    circle  (uword xcenter, ubyte ycenter, ubyte radius, ubyte color) 
    clear_screen  (ubyte color) 
    disc  (uword xcenter, ubyte ycenter, ubyte radius, ubyte color) 
    drawmode_eor  (bool enabled) 
    fill  (uword x, ubyte y, ubyte new_color) 
    fillrect  (uword xx, ubyte yy, uword rwidth, ubyte rheight, ubyte color) 
    graphics_mode  () 
    horizontal_line  (uword xx, ubyte yy, uword length, ubyte color) 
    line  (uword x1, ubyte y1, uword x2, ubyte y2, ubyte color) 
    next_pixel  (ubyte color @A) 
    next_pixels  (uword pixels @AY, uword amount @R0) -> clobbers (A,X,Y) 
    pget  (uword x @AX, ubyte y @Y) -> ubyte @A 
    plot  (uword x @AX, ubyte y @Y, ubyte color @R0) 
    position  (uword x @AX, ubyte y @Y) 
    rect  (uword xx, ubyte yy, uword rwidth, ubyte rheight, ubyte color) 
    safe_circle  (uword xcenter, uword ycenter, ubyte radius, ubyte color) 
    safe_disc  (uword xcenter, uword ycenter, ubyte radius, ubyte color) 
    safe_fillrect  (uword xx, ubyte yy, uword rwidth, ubyte rheight, ubyte color) 
    safe_horizontal_line  (uword xx, ubyte yy, uword length, ubyte color) 
    safe_plot  (uword xx, ubyte yy, ubyte color) 
    safe_rect  (uword xx, ubyte yy, uword rwidth, ubyte rheight, ubyte color) 
    safe_vertical_line  (uword xx, ubyte yy, ubyte lheight, ubyte color) 
    set_8_pixels_from_bits  (ubyte bits @R0, ubyte oncolor @A, ubyte offcolor @Y) -> clobbers (X) 
    text  (uword xx, uword yy, ubyte color, uword textptr) 
    text_charset  (ubyte charset) 
    text_mode  () 
    vertical_line  (uword xx, ubyte yy, ubyte lheight, ubyte color) 
}


LIBRARY MODULE NAME: graphics
-----------------------------

graphics  {
    const ubyte  HEIGHT 
    const uword  WIDTH 
    ubyte  background_color 
    ubyte  stroke_color 
    FB_cursor_position2  () -> clobbers (A,X,Y)  = $feff
    circle  (uword xcenter, ubyte ycenter, ubyte radius) 
    clear_screen  (ubyte pixelcolor, ubyte bgcolor) 
    colors  (ubyte stroke, ubyte fill) 
    disable_bitmap_mode  () 
    disc  (uword xcenter, ubyte ycenter, ubyte radius) 
    enable_bitmap_mode  () 
    filled_oval  (uword xcenter, ubyte ycenter, uword h_radius, ubyte v_radius) 
    fillrect  (uword xx, uword yy, uword width, uword height) 
    horizontal_line  (uword xx, uword yy, uword length) 
    line  (uword x1, ubyte y1, uword x2, ubyte y2) 
    oval  (uword xcenter, ubyte ycenter, uword h_radius, ubyte v_radius) 
    plot  (uword plotx @R0, uword ploty @R1) -> clobbers (A,X,Y) 
    rect  (uword xx, uword yy, uword width, uword height) 
    vertical_line  (uword xx, uword yy, uword height) 
}


LIBRARY MODULE NAME: math
-------------------------

math  {
    atan2  (ubyte x1 @R0, ubyte y1 @R1, ubyte x2 @R2, ubyte y2 @R3) -> ubyte @A 
    cos8  (ubyte angle @A) -> clobbers (Y) -> byte @A 
    cos8u  (ubyte angle @A) -> clobbers (Y) -> ubyte @A 
    cosr8  (ubyte radians @A) -> clobbers (Y) -> byte @A 
    cosr8u  (ubyte radians @A) -> clobbers (Y) -> ubyte @A 
    crc16  (uword data, uword length) -> uword 
    crc16_end  () -> uword 
    crc16_start  () 
    crc16_update  (ubyte value @A) 
    crc32  (uword data, uword length) 
    crc32_end  () 
    crc32_start  () 
    crc32_update  (ubyte value @A) 
    diff  (ubyte v1 @A, ubyte v2 @Y) -> ubyte @A 
    diffw  (uword w1 @R0, uword w2 @AY) -> uword @AY 
    direction  (ubyte x1, ubyte y1, ubyte x2, ubyte y2) -> ubyte 
    direction_qd  (ubyte quadrant @A, ubyte xdelta @X, ubyte ydelta @Y) -> ubyte @A 
    direction_sc  (byte x1, byte y1, byte x2, byte y2) -> ubyte 
    lerp  (ubyte v0, ubyte v1, ubyte t) -> ubyte 
    lerpw  (uword v0, uword v1, uword t) -> uword 
    log2  (ubyte value @A) -> ubyte @Y 
    log2w  (uword value @AY) -> ubyte @Y 
    mul16_last_upper  () -> uword @AY 
    randrange  (ubyte n) -> ubyte 
    randrangew  (uword n) -> uword 
    rnd  () -> clobbers (Y) -> ubyte @A 
    rndseed  (uword seed1 @AY, uword seed2 @R0) -> clobbers (A,Y) 
    rndw  () -> uword @AY 
    sin8  (ubyte angle @A) -> clobbers (Y) -> byte @A 
    sin8u  (ubyte angle @A) -> clobbers (Y) -> ubyte @A 
    sinr8  (ubyte radians @A) -> clobbers (Y) -> byte @A 
    sinr8u  (ubyte radians @A) -> clobbers (Y) -> ubyte @A 
}


LIBRARY MODULE NAME: monogfx
----------------------------

monogfx  {
    const ubyte  MODE_INVERT 
    const ubyte  MODE_NORMAL 
    const ubyte  MODE_STIPPLE 
    const uword  charset_addr 
    const ubyte  charset_bank 
    uword  height 
    ubyte  mode 
    uword  width 
    circle  (uword xcenter, uword ycenter, ubyte radius, bool draw) 
    clear_screen  (bool draw) 
    cs_innerloop640  (bool draw @A) -> clobbers (Y) 
    disc  (uword xcenter, uword ycenter, ubyte radius, bool draw) 
    drawmode  (ubyte dm) 
    fill  (uword x, uword y, bool draw) 
    fillrect  (uword xx, uword yy, uword rwidth, uword rheight, bool draw) 
    hires  () 
    horizontal_line  (uword xx, uword yy, uword length, bool draw) 
    line  (uword x1, uword y1, uword x2, uword y2, bool draw) 
    lores  () 
    pget  (uword xx, uword yy) -> bool 
    plot  (uword xx, uword yy, bool draw) 
    position  (uword xx, uword yy) 
    position2  (uword xx, uword yy, bool also_port_1) 
    rect  (uword xx, uword yy, uword rwidth, uword rheight, bool draw) 
    safe_circle  (uword xcenter, uword ycenter, ubyte radius, bool draw) 
    safe_disc  (uword xcenter, uword ycenter, ubyte radius, bool draw) 
    safe_horizontal_line  (uword xx, uword yy, uword length, bool draw) 
    safe_plot  (uword xx, uword yy, bool draw) 
    text  (uword xx, uword yy, bool draw, str sctextptr) 
    text_charset  (ubyte charset) 
    textmode  () 
    vertical_line  (uword xx, uword yy, uword lheight, bool draw) 
}


LIBRARY MODULE NAME: palette
----------------------------

palette  {
    uword  vera_palette_ptr 
    channel8to4  (ubyte channelvalue) -> ubyte 
    color8to4  (uword colorpointer) -> uword 
    fade_step  (ubyte index, uword target_rgb) -> bool 
    fade_step_colors  (ubyte startindex, ubyte endindex, uword target_colors) -> bool 
    fade_step_multi  (ubyte startindex, ubyte endindex, uword target_rgb) -> bool 
    get_color  (ubyte index) -> uword 
    set_all_black  () 
    set_all_white  () 
    set_c64ntsc  () 
    set_c64pepto  () 
    set_color  (ubyte index, uword color) 
    set_default16  () 
    set_grayscale  () 
    set_monochrome  (uword screencolorRGB, uword drawcolorRGB) 
    set_rgb  (uword palette_words_ptr, uword num_colors) 
    set_rgb8  (uword palette_bytes_ptr, uword num_colors) 
    set_rgb_be  (uword palette_ptr, uword num_colors) 
}


LIBRARY MODULE NAME: psg
------------------------

psg  {
    const ubyte  LEFT 
    const ubyte  NOISE 
    const ubyte  PULSE 
    const ubyte  RIGHT 
    const ubyte  SAWTOOTH 
    const ubyte  TRIANGLE 
    ubyte[]  envelope_attacks 
    ubyte[]  envelope_maxvolumes 
    ubyte[]  envelope_releases 
    ubyte[]  envelope_states 
    ubyte[]  envelope_sustains 
    @split uword[]  envelope_volumes 
    envelope  (ubyte voice_num, ubyte maxvolume, ubyte attack, ubyte sustain, ubyte release) 
    envelopes_irq  () -> bool 
    freq  (ubyte voice_num, uword vera_freq) 
    pulse_width  (ubyte voice_num, ubyte pw) 
    silent  () 
    voice  (ubyte voice_num, ubyte channel, ubyte vol, ubyte waveform, ubyte pulsewidth) 
    volume  (ubyte voice_num, ubyte vol) 
}


LIBRARY MODULE NAME: sprites
----------------------------

sprites  {
    const ubyte  COLORS_16 
    const ubyte  COLORS_256 
    const ubyte  SIZE_16 
    const ubyte  SIZE_32 
    const ubyte  SIZE_64 
    const ubyte  SIZE_8 
    const uword  VERA_SPRITEREGS 
    uword @zp  sprite_reg 
    data  (ubyte spritenum, ubyte bank, uword addr) 
    flipx  (ubyte spritenum, bool flipped) 
    flipy  (ubyte spritenum, bool flipped) 
    get_data_ptr  (ubyte spritenum @A) -> ubyte @R1, uword @R0 
    get_data_ptr_internal  (ubyte spritenum) 
    getx  (ubyte spritenum) -> word 
    gety  (ubyte spritenum) -> word 
    hide  (ubyte spritenum) 
    init  (ubyte spritenum, ubyte databank, uword dataaddr, ubyte width_flag, ubyte height_flag, ubyte colors_flag, ubyte palette_offset) 
    move  (ubyte spritenum, word dx, word dy) 
    movex  (ubyte spritenum, word dx) 
    movey  (ubyte spritenum, word dy) 
    pos  (ubyte spritenum, word xpos, word ypos) 
    pos_batch  (ubyte first_spritenum, ubyte num_sprites, uword xpositions_ptr, uword ypositions_ptr) 
    reset  (ubyte spritenum_start, ubyte count) 
    set_mousepointer_hand  () 
    set_mousepointer_image  (uword data, bool compressed) 
    set_palette_offset  (ubyte spritenum, ubyte offset) 
    setx  (ubyte spritenum, word xpos) 
    sety  (ubyte spritenum, word ypos) 
    show  (ubyte spritenum) 
    zdepth  (ubyte spritenum, ubyte depth) 
}


LIBRARY MODULE NAME: strings
----------------------------

strings  {
    append  (uword target @R0, uword suffix @R1) -> clobbers (Y) -> ubyte @A 
    compare  (uword string1 @R0, uword string2 @AY) -> clobbers (Y) -> byte @A 
    contains  (uword string @AY, ubyte character @X) -> bool @Pc 
    copy  (uword source @R0, uword target @AY) -> clobbers (A) -> ubyte @Y 
    endswith  (str st, str suffix) -> bool 
    find  (uword string @AY, ubyte character @X) -> ubyte @A, bool @Pc 
    findstr  (str haystack, str needle) -> ubyte 
    hash  (str string @R0) -> ubyte @A 
    isdigit  (ubyte petsciichar @A) -> bool @Pc 
    isletter  (ubyte petsciichar @A) -> bool @Pc 
    islower  (ubyte petsciichar @A) -> bool @Pc 
    isprint  (ubyte petsciichar @A) -> bool @Pc 
    isspace  (ubyte petsciichar @A) -> bool @Pc 
    isupper  (ubyte petsciichar @A) -> bool @Pc 
    left  (uword source @AX, ubyte length @Y, uword target @R1) -> clobbers (A,Y) 
    length  (uword string @AY) -> clobbers (A) -> ubyte @Y 
    lower  (uword st @AY) -> ubyte @Y 
    lowerchar  (ubyte character @A) -> ubyte @A 
    lstrip  (str s) 
    lstripped  (str s) -> str 
    ltrim  (str s) 
    ltrimmed  (str s) -> str 
    pattern_match  (str string @AY, str pattern @R0) -> clobbers (Y) -> bool @A 
    rfind  (uword string @AY, ubyte character @X) -> ubyte @A, bool @Pc 
    right  (uword source @AY, ubyte length @X, uword target @R1) -> clobbers (A,Y) 
    rstrip  (str s) 
    rtrim  (str s) 
    slice  (uword source @R0, ubyte start @A, ubyte length @Y, uword target @R1) -> clobbers (A,Y) 
    startswith  (str st, str prefix) -> bool 
    strip  (str s) 
    trim  (str s) 
    upper  (uword st @AY) -> ubyte @Y 
    upperchar  (ubyte character @A) -> ubyte @A 
}


LIBRARY MODULE NAME: syslib
---------------------------

cbm  {
    &uword  CBINV 
    &uword  CINV 
    &uword  IBASIN 
    &uword  IBSOUT 
    &uword  ICHKIN 
    &uword  ICKOUT 
    &uword  ICLALL 
    &uword  ICLOSE 
    &uword  ICLRCH 
    &uword  ICRNCH 
    &uword  IERROR 
    &uword  IEVAL 
    &uword  IGETIN 
    &uword  IGONE 
    &uword  ILOAD 
    &uword  IMAIN 
    &uword  IOPEN 
    &uword  IQPLOP 
    &uword  IRQ_VEC 
    &uword  ISAVE 
    &uword  ISTOP 
    &uword  NMINV 
    &uword  NMI_VEC 
    &uword  RESET_VEC 
    &ubyte  SAREG 
    &ubyte  SPREG 
    &ubyte  SXREG 
    &ubyte  SYREG 
    &uword  USRADD 
    ACPTR  () -> ubyte @A  = $ffa5
    CHKIN  (ubyte logical @X) -> clobbers (A,X) -> bool @Pc  = $ffc6
    CHKOUT  (ubyte logical @X) -> clobbers (A,X)  = $ffc9
    CHRIN  () -> clobbers (X,Y) -> ubyte @A  = $ffcf
    CHROUT  (ubyte character @A)  = $ffd2
    CINT  () -> clobbers (A,X,Y)  = $ff81
    CIOUT  (ubyte databyte @A)  = $ffa8
    CLALL  () -> clobbers (A,X)  = $ffe7
    CLEARST  () 
    CLOSE  (ubyte logical @A) -> clobbers (A,X,Y)  = $ffc3
    CLRCHN  () -> clobbers (A,X)  = $ffcc
    GETIN  () -> clobbers (X,Y) -> bool @Pc, ubyte @A  = $ffe4
    GETIN2  () -> clobbers (X,Y) -> ubyte @A 
    IOBASE  () -> uword @XY  = $fff3
    IOINIT  () -> clobbers (A,X)  = $ff84
    LISTEN  (ubyte device @A) -> clobbers (A)  = $ffb1
    LOAD  (ubyte verify @A, uword address @XY) -> bool @Pc, ubyte @A, uword @XY  = $ffd5
    MEMBOT  (uword address @XY, bool dir @Pc) -> uword @XY  = $ff9c
    MEMTOP  (uword address @XY, bool dir @Pc) -> uword @XY, ubyte @A  = $ff99
    OPEN  () -> clobbers (X,Y) -> bool @Pc, ubyte @A  = $ffc0
    PLOT  (ubyte col @Y, ubyte row @X, bool dir @Pc) -> clobbers (A) -> ubyte @X, ubyte @Y  = $fff0
    RAMTAS  () -> clobbers (A,X,Y)  = $ff87
    RDTIM  () -> ubyte @A, ubyte @X, ubyte @Y  = $ffde
    RDTIM16  () -> clobbers (X) -> uword @AY 
    RDTIM_safe  () -> ubyte @A, ubyte @X, ubyte @Y 
    READST  () -> ubyte @A  = $ffb7
    RESTOR  () -> clobbers (A,X,Y)  = $ff8a
    SAVE  (ubyte zp_startaddr @A, uword endaddr @XY) -> clobbers (X,Y) -> bool @Pc, ubyte @A  = $ffd8
    SCNKEY  () -> clobbers (A,X,Y)  = $ff9f
    SCREEN  () -> ubyte @X, ubyte @Y  = $ffed
    SECOND  (ubyte address @A) -> clobbers (A)  = $ff93
    SETLFS  (ubyte logical @A, ubyte device @X, ubyte secondary @Y)  = $ffba
    SETMSG  (ubyte value @A)  = $ff90
    SETNAM  (ubyte namelen @A, str filename @XY)  = $ffbd
    SETTIM  (ubyte low @A, ubyte middle @X, ubyte high @Y)  = $ffdb
    SETTMO  (ubyte timeout @A)  = $ffa2
    STOP  () -> clobbers (X) -> bool @Pz, ubyte @A  = $ffe1
    STOP2  () -> clobbers (A,X) -> bool @Pz 
    TALK  (ubyte device @A) -> clobbers (A)  = $ffb4
    TKSA  (ubyte address @A) -> clobbers (A)  = $ff96
    UDTIM  () -> clobbers (A,X)  = $ffea
    UNLSN  () -> clobbers (A)  = $ffae
    UNTLK  () -> clobbers (A)  = $ffab
    VECTOR  (uword userptr @XY, bool dir @Pc) -> clobbers (A,Y)  = $ff8d
    kbdbuf_clear  () 
}

cx16  {
    const ubyte  EXTAPI16_stack_enter_kernal_stack 
    const ubyte  EXTAPI16_stack_leave_kernal_stack 
    const ubyte  EXTAPI16_stack_pop 
    const ubyte  EXTAPI16_stack_push 
    const ubyte  EXTAPI16_test 
    const ubyte  EXTAPI_clear_status 
    const ubyte  EXTAPI_cursor_blink 
    const ubyte  EXTAPI_getlfs 
    const ubyte  EXTAPI_iso_cursor_char 
    const ubyte  EXTAPI_joystick_ps2_keycodes 
    const ubyte  EXTAPI_kbd_leds 
    const ubyte  EXTAPI_led_update 
    const ubyte  EXTAPI_mouse_set_position 
    const ubyte  EXTAPI_mouse_sprite_offset 
    const ubyte  EXTAPI_pfkey 
    const ubyte  EXTAPI_ps2data_fetch 
    const ubyte  EXTAPI_ps2data_raw 
    const ubyte  EXTAPI_ps2kbd_typematic 
    const ubyte  EXTAPI_scnsiz 
    &uword  KEYHDL 
    &uword  VERA_ADDR 
    &ubyte  VERA_ADDR_H 
    &ubyte  VERA_ADDR_L 
    &ubyte  VERA_ADDR_M 
    &ubyte  VERA_AUDIO_CTRL 
    &ubyte  VERA_AUDIO_DATA 
    &ubyte  VERA_AUDIO_RATE 
    const uword  VERA_BASE 
    &ubyte  VERA_CTRL 
    &ubyte  VERA_DATA0 
    &ubyte  VERA_DATA1 
    &ubyte  VERA_DC_BORDER 
    &ubyte  VERA_DC_HSCALE 
    &ubyte  VERA_DC_HSTART 
    &ubyte  VERA_DC_HSTOP 
    &ubyte  VERA_DC_VER0 
    &ubyte  VERA_DC_VER1 
    &ubyte  VERA_DC_VER2 
    &ubyte  VERA_DC_VER3 
    &ubyte  VERA_DC_VIDEO 
    &ubyte  VERA_DC_VSCALE 
    &ubyte  VERA_DC_VSTART 
    &ubyte  VERA_DC_VSTOP 
    &ubyte  VERA_FX_ACCUM 
    &ubyte  VERA_FX_ACCUM_RESET 
    &ubyte  VERA_FX_CACHE_H 
    &ubyte  VERA_FX_CACHE_L 
    &ubyte  VERA_FX_CACHE_M 
    &ubyte  VERA_FX_CACHE_U 
    &ubyte  VERA_FX_CTRL 
    &ubyte  VERA_FX_MAPBASE 
    &ubyte  VERA_FX_MULT 
    &uword  VERA_FX_POLY_FILL 
    &ubyte  VERA_FX_POLY_FILL_H 
    &ubyte  VERA_FX_POLY_FILL_L 
    &ubyte  VERA_FX_TILEBASE 
    &uword  VERA_FX_X_INCR 
    &ubyte  VERA_FX_X_INCR_H 
    &ubyte  VERA_FX_X_INCR_L 
    &uword  VERA_FX_X_POS 
    &ubyte  VERA_FX_X_POS_H 
    &ubyte  VERA_FX_X_POS_L 
    &ubyte  VERA_FX_X_POS_S 
    &uword  VERA_FX_Y_INCR 
    &ubyte  VERA_FX_Y_INCR_H 
    &ubyte  VERA_FX_Y_INCR_L 
    &uword  VERA_FX_Y_POS 
    &ubyte  VERA_FX_Y_POS_H 
    &ubyte  VERA_FX_Y_POS_L 
    &ubyte  VERA_FX_Y_POS_S 
    &ubyte  VERA_IEN 
    &ubyte  VERA_IRQLINE_L 
    &ubyte  VERA_ISR 
    &ubyte  VERA_L0_CONFIG 
    &uword  VERA_L0_HSCROLL 
    &ubyte  VERA_L0_HSCROLL_H 
    &ubyte  VERA_L0_HSCROLL_L 
    &ubyte  VERA_L0_MAPBASE 
    &ubyte  VERA_L0_TILEBASE 
    &uword  VERA_L0_VSCROLL 
    &ubyte  VERA_L0_VSCROLL_H 
    &ubyte  VERA_L0_VSCROLL_L 
    &ubyte  VERA_L1_CONFIG 
    &uword  VERA_L1_HSCROLL 
    &ubyte  VERA_L1_HSCROLL_H 
    &ubyte  VERA_L1_HSCROLL_L 
    &ubyte  VERA_L1_MAPBASE 
    &ubyte  VERA_L1_TILEBASE 
    &uword  VERA_L1_VSCROLL 
    &ubyte  VERA_L1_VSCROLL_H 
    &ubyte  VERA_L1_VSCROLL_L 
    &ubyte  VERA_SCANLINE_L 
    &ubyte  VERA_SPI_CTRL 
    &ubyte  VERA_SPI_DATA 
    const uword  VIA1_BASE 
    const uword  VIA2_BASE 
    &ubyte  YM_ADDRESS 
    &ubyte  YM_DATA 
    &ubyte  edkeybk 
    &uword  edkeyvec 
    const uword  extdev 
    &uword  r0 
    &ubyte  r0H 
    &ubyte  r0L 
    &word  r0s 
    &byte  r0sH 
    &byte  r0sL 
    &uword  r1 
    &uword  r10 
    &ubyte  r10H 
    &ubyte  r10L 
    &word  r10s 
    &byte  r10sH 
    &byte  r10sL 
    &uword  r11 
    &ubyte  r11H 
    &ubyte  r11L 
    &word  r11s 
    &byte  r11sH 
    &byte  r11sL 
    &uword  r12 
    &ubyte  r12H 
    &ubyte  r12L 
    &word  r12s 
    &byte  r12sH 
    &byte  r12sL 
    &uword  r13 
    &ubyte  r13H 
    &ubyte  r13L 
    &word  r13s 
    &byte  r13sH 
    &byte  r13sL 
    &uword  r14 
    &ubyte  r14H 
    &ubyte  r14L 
    &word  r14s 
    &byte  r14sH 
    &byte  r14sL 
    &uword  r15 
    &ubyte  r15H 
    &ubyte  r15L 
    &word  r15s 
    &byte  r15sH 
    &byte  r15sL 
    &ubyte  r1H 
    &ubyte  r1L 
    &word  r1s 
    &byte  r1sH 
    &byte  r1sL 
    &uword  r2 
    &ubyte  r2H 
    &ubyte  r2L 
    &word  r2s 
    &byte  r2sH 
    &byte  r2sL 
    &uword  r3 
    &ubyte  r3H 
    &ubyte  r3L 
    &word  r3s 
    &byte  r3sH 
    &byte  r3sL 
    &uword  r4 
    &ubyte  r4H 
    &ubyte  r4L 
    &word  r4s 
    &byte  r4sH 
    &byte  r4sL 
    &uword  r5 
    &ubyte  r5H 
    &ubyte  r5L 
    &word  r5s 
    &byte  r5sH 
    &byte  r5sL 
    &uword  r6 
    &ubyte  r6H 
    &ubyte  r6L 
    &word  r6s 
    &byte  r6sH 
    &byte  r6sL 
    &uword  r7 
    &ubyte  r7H 
    &ubyte  r7L 
    &word  r7s 
    &byte  r7sH 
    &byte  r7sL 
    &uword  r8 
    &ubyte  r8H 
    &ubyte  r8L 
    &word  r8s 
    &byte  r8sH 
    &byte  r8sL 
    &uword  r9 
    &ubyte  r9H 
    &ubyte  r9L 
    &word  r9s 
    &byte  r9sH 
    &byte  r9sL 
    &ubyte  stavec 
    &ubyte  via1acr 
    &ubyte  via1ddra 
    &ubyte  via1ddrb 
    &ubyte  via1ier 
    &ubyte  via1ifr 
    &ubyte  via1ora 
    &ubyte  via1pcr 
    &ubyte  via1pra 
    &ubyte  via1prb 
    &ubyte  via1sr 
    &ubyte  via1t1h 
    &ubyte  via1t1l 
    &ubyte  via1t1lh 
    &ubyte  via1t1ll 
    &ubyte  via1t2h 
    &ubyte  via1t2l 
    &ubyte  via2acr 
    &ubyte  via2ddra 
    &ubyte  via2ddrb 
    &ubyte  via2ier 
    &ubyte  via2ifr 
    &ubyte  via2ora 
    &ubyte  via2pcr 
    &ubyte  via2pra 
    &ubyte  via2prb 
    &ubyte  via2sr 
    &ubyte  via2t1h 
    &ubyte  via2t1l 
    &ubyte  via2t1lh 
    &ubyte  via2t1ll 
    &ubyte  via2t2h 
    &ubyte  via2t2l 
    BSAVE  (ubyte zp_startaddr @A, uword endaddr @XY) -> clobbers (X,Y) -> bool @Pc, ubyte @A  = $feba
    CLOSE_ALL  (ubyte device @A) -> clobbers (A,X,Y)  = $ff4a
    FB_cursor_next_line  (uword x @R0) -> clobbers (A,X,Y)  = $ff02
    FB_cursor_position  (uword x @R0, uword y @R1) -> clobbers (A,X,Y)  = $feff
    FB_fill_pixels  (uword count @R0, uword pstep @R1, ubyte color @A) -> clobbers (A,X,Y)  = $ff17
    FB_filter_pixels  (uword pointer @R0, uword count @R1) -> clobbers (A,X,Y)  = $ff1a
    FB_get_info  () -> clobbers (X,Y) -> byte @A, uword @R0, uword @R1  = $fef9
    FB_get_pixel  () -> clobbers (X,Y) -> ubyte @A  = $ff05
    FB_get_pixels  (uword pointer @R0, uword count @R1) -> clobbers (A,X,Y)  = $ff08
    FB_init  () -> clobbers (A,X,Y)  = $fef6
    FB_move_pixels  (uword sx @R0, uword sy @R1, uword tx @R2, uword ty @R3, uword count @R4) -> clobbers (A,X,Y)  = $ff1d
    FB_set_8_pixels  (ubyte pattern @A, ubyte color @X) -> clobbers (A,X,Y)  = $ff11
    FB_set_8_pixels_opaque  (ubyte pattern @R0, ubyte mask @A, ubyte color1 @X, ubyte color2 @Y) -> clobbers (A,X,Y)  = $ff14
    FB_set_palette  (uword pointer @R0, ubyte index @A, ubyte colorcount @X) -> clobbers (A,X,Y)  = $fefc
    FB_set_pixel  (ubyte color @A) -> clobbers (A,X,Y)  = $ff0b
    FB_set_pixels  (uword pointer @R0, uword count @R1) -> clobbers (A,X,Y)  = $ff0e
    GRAPH_clear  () -> clobbers (A,X,Y)  = $ff23
    GRAPH_draw_image  (uword x @R0, uword y @R1, uword ptr @R2, uword width @R3, uword height @R4) -> clobbers (A,X,Y)  = $ff38
    GRAPH_draw_line  (uword x1 @R0, uword y1 @R1, uword x2 @R2, uword y2 @R3) -> clobbers (A,X,Y)  = $ff2c
    GRAPH_draw_oval  (uword x @R0, uword y @R1, uword width @R2, uword height @R3, bool fill @Pc) -> clobbers (A,X,Y)  = $ff35
    GRAPH_draw_rect  (uword x @R0, uword y @R1, uword width @R2, uword height @R3, uword cornerradius @R4, bool fill @Pc) -> clobbers (A,X,Y)  = $ff2f
    GRAPH_get_char_size  (ubyte baseline @A, ubyte width @X, ubyte height_or_style @Y, bool is_control @Pc) -> clobbers (A,X,Y)  = $ff3e
    GRAPH_init  (uword vectors @R0) -> clobbers (A,X,Y)  = $ff20
    GRAPH_move_rect  (uword sx @R0, uword sy @R1, uword tx @R2, uword ty @R3, uword width @R4, uword height @R5) -> clobbers (A,X,Y)  = $ff32
    GRAPH_put_char  (uword x @R0, uword y @R1, ubyte character @A) -> clobbers (A,X,Y)  = $ff41
    GRAPH_put_next_char  (ubyte character @A) -> clobbers (A,X,Y)  = $ff41
    GRAPH_set_colors  (ubyte stroke @A, ubyte fill @X, ubyte background @Y) -> clobbers (A,X,Y)  = $ff29
    GRAPH_set_font  (uword fontptr @R0) -> clobbers (A,X,Y)  = $ff3b
    GRAPH_set_window  (uword x @R0, uword y @R1, uword width @R2, uword height @R3) -> clobbers (A,X,Y)  = $ff26
    JSRFAR  ()  = $ff6e
    LKUPLA  (ubyte la @A) -> clobbers (A,X,Y)  = $ff59
    LKUPSA  (ubyte sa @Y) -> clobbers (A,X,Y)  = $ff5c
    MACPTR  (ubyte length @A, uword buffer @XY, bool dontAdvance @Pc) -> clobbers (A) -> bool @Pc, uword @XY  = $ff44
    MCIOUT  (ubyte length @A, uword buffer @XY, bool dontAdvance @Pc) -> clobbers (A) -> bool @Pc, uword @XY  = $feb1
    PRIMM  ()  = $ff7d
    audio_init  () -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c09f
    bas_fmchordstring  (ubyte length @A, str string @XY) -> clobbers (A,X,Y) @bank 10 = $c08d
    bas_fmfreq  (ubyte channel @A, uword freq @XY, bool noretrigger @Pc) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c000
    bas_fmnote  (ubyte channel @A, ubyte note @X, ubyte fracsemitone @Y, bool noretrigger @Pc) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c003
    bas_fmplaystring  (ubyte length @A, str string @XY) -> clobbers (A,X,Y) @bank 10 = $c006
    bas_fmvib  (ubyte speed @A, ubyte depth @X) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c009
    bas_playstringvoice  (ubyte channel @A) -> clobbers (Y) @bank 10 = $c00c
    bas_psgchordstring  (ubyte length @A, str string @XY) -> clobbers (A,X,Y) @bank 10 = $c090
    bas_psgfreq  (ubyte voice @A, uword freq @XY) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c00f
    bas_psgnote  (ubyte voice @A, ubyte note @X, ubyte fracsemitone @Y) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c012
    bas_psgplaystring  (ubyte length @A, str string @XY) -> clobbers (A,X,Y) @bank 10 = $c018
    bas_psgwav  (ubyte voice @A, ubyte waveform @X) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c015
    clock_get_date_time  () -> clobbers (A,X,Y) -> uword @R0, uword @R1, uword @R2, uword @R3  = $ff50
    clock_set_date_time  (uword yearmonth @R0, uword dayhours @R1, uword minsecs @R2, uword jiffiesweekday @R3) -> clobbers (A,X,Y)  = $ff4d
    console_get_char  () -> clobbers (X,Y) -> ubyte @A  = $fee1
    console_init  (uword x @R0, uword y @R1, uword width @R2, uword height @R3) -> clobbers (A,X,Y)  = $fedb
    console_put_char  (ubyte character @A, bool wrapping @Pc) -> clobbers (A,X,Y)  = $fede
    console_put_image  (uword pointer @R0, uword width @R1, uword height @R2) -> clobbers (A,X,Y)  = $fed8
    console_set_paging_message  (uword msgptr @R0) -> clobbers (A,X,Y)  = $fed5
    cpu_is_65816  () -> bool @A 
    disable_irq_handlers  () 
    disable_irqs  () -> clobbers (A) 
    enable_irq_handlers  (bool disable_all_irq_sources @Pc) -> clobbers (A,Y) 
    enter_basic  (bool cold_or_warm @Pc) -> clobbers (A,X,Y)  = $ff47
    entropy_get  () -> ubyte @A, ubyte @X, ubyte @Y  = $fecf
    extapi  (ubyte callnumber @A) -> clobbers (A,X,Y)  = $feab
    fetch  (ubyte zp_startaddr @A, ubyte bank @X, ubyte index @Y) -> clobbers (X) -> ubyte @A  = $ff74
    get_chrin_keyhandler  () -> ubyte @R0, uword @R1 
    get_program_args  (uword buffer @R0, ubyte buf_size @R1, bool binary @Pc) 
    get_screen_mode  () -> ubyte @A, ubyte @X, ubyte @Y 
    getlfs  () -> ubyte @X, ubyte @A, ubyte @Y 
    getrambank  () -> ubyte @A 
    getrombank  () -> ubyte @A 
    i2c_batch_read  (ubyte device @X, uword buffer @R0, uword length @R1, bool advance @Pc) -> clobbers (A,Y) -> bool @Pc  = $feb4
    i2c_batch_write  (ubyte device @X, uword buffer @R0, uword length @R1, bool advance @Pc) -> clobbers (A,Y) -> bool @Pc  = $feb7
    i2c_read_byte  (ubyte device @X, ubyte offset @Y) -> clobbers (X,Y) -> ubyte @A, bool @Pc  = $fec6
    i2c_write_byte  (ubyte device @X, ubyte offset @Y, ubyte data @A) -> clobbers (A,X,Y) -> bool @Pc  = $fec9
    iso_cursor_char  (ubyte character @X) -> clobbers (A,X,Y) 
    joystick_get  (ubyte joynr @A) -> uword @AX, bool @Y  = $ff56
    joystick_scan  () -> clobbers (A,X,Y)  = $ff53
    kbdbuf_get_modifiers  () -> ubyte @A  = $fec0
    kbdbuf_peek  () -> ubyte @A, ubyte @X  = $febd
    kbdbuf_put  (ubyte key @A) -> clobbers (X)  = $fec3
    keymap  (uword identifier @XY, bool read @Pc) -> bool @Pc  = $fed2
    memory_copy  (uword source @R0, uword target @R1, uword num_bytes @R2) -> clobbers (A,X,Y)  = $fee7
    memory_crc  (uword address @R0, uword num_bytes @R1) -> clobbers (A,X,Y) -> uword @R2  = $feea
    memory_decompress  (uword input @R0, uword output @R1) -> clobbers (A,X,Y) -> uword @R1  = $feed
    memory_fill  (uword address @R0, uword num_bytes @R1, ubyte value @A) -> clobbers (A,X,Y)  = $fee4
    monitor  () -> clobbers (A,X,Y)  = $fecc
    mouse_config  (byte shape @A, ubyte resX @X, ubyte resY @Y) -> clobbers (A,X,Y)  = $ff68
    mouse_config2  (byte shape @A) -> clobbers (A,X,Y) 
    mouse_get  (ubyte zdataptr @X) -> ubyte @A, byte @X  = $ff6b
    mouse_get_sprite_offset  () -> clobbers (A,X,Y) -> word @R0, word @R1 
    mouse_pos  () -> ubyte @A, uword @R0, uword @R1, byte @X 
    mouse_present  () -> bool 
    mouse_scan  () -> clobbers (A,X,Y)  = $ff71
    mouse_set_pos  (uword xpos @R0, uword ypos @R1) -> clobbers (X) 
    mouse_set_sprite_offset  (word xoffset @R0, word yoffset @R1) -> clobbers (A,X,Y) 
    notecon_bas2fm  (ubyte note @X) -> clobbers (A) -> ubyte @X, bool @Pc @bank 10 = $c01b
    notecon_bas2midi  (ubyte note @X) -> clobbers (A) -> ubyte @X, bool @Pc @bank 10 = $c01e
    notecon_bas2psg  (ubyte note @X, ubyte fracsemitone @Y) -> clobbers (A) -> uword @XY, bool @Pc @bank 10 = $c021
    notecon_fm2bas  (ubyte note @X) -> clobbers (A) -> ubyte @X, bool @Pc @bank 10 = $c024
    notecon_fm2midi  (ubyte note @X) -> clobbers (A) -> ubyte @X, bool @Pc @bank 10 = $c027
    notecon_fm2psg  (ubyte note @X, ubyte fracsemitone @Y) -> clobbers (A) -> uword @XY, bool @Pc @bank 10 = $c02a
    notecon_freq2bas  (uword freqHz @XY) -> clobbers (A) -> ubyte @X, ubyte @Y, bool @Pc @bank 10 = $c02d
    notecon_freq2fm  (uword freqHz @XY) -> clobbers (A) -> ubyte @X, ubyte @Y, bool @Pc @bank 10 = $c030
    notecon_freq2midi  (uword freqHz @XY) -> clobbers (A) -> ubyte @X, ubyte @Y, bool @Pc @bank 10 = $c033
    notecon_freq2psg  (uword freqHz @XY) -> clobbers (A) -> uword @XY, bool @Pc @bank 10 = $c036
    notecon_midi2bas  (ubyte note @X) -> clobbers (A) -> ubyte @X, bool @Pc @bank 10 = $c039
    notecon_midi2fm  (ubyte note @X) -> clobbers (A) -> ubyte @X, bool @Pc @bank 10 = $c03c
    notecon_midi2psg  (ubyte note @X, ubyte fracsemitone @Y) -> clobbers (A) -> uword @XY, bool @Pc @bank 10 = $c03f
    notecon_psg2bas  (uword freq @XY) -> clobbers (A) -> ubyte @X, ubyte @Y, bool @Pc @bank 10 = $c042
    notecon_psg2fm  (uword freq @XY) -> clobbers (A) -> ubyte @X, ubyte @Y, bool @Pc @bank 10 = $c045
    notecon_psg2midi  (uword freq @XY) -> clobbers (A) -> ubyte @X, ubyte @Y, bool @Pc @bank 10 = $c048
    numbanks  () -> clobbers (X) -> uword @AY 
    poweroff_system  () 
    psg_getatten  (ubyte voice @A) -> clobbers (Y) -> ubyte @X @bank 10 = $c093
    psg_getpan  (ubyte voice @A) -> clobbers (Y) -> ubyte @X @bank 10 = $c096
    psg_init  () -> clobbers (A,X,Y) @bank 10 = $c04b
    psg_playfreq  (ubyte voice @A, uword freq @XY) -> clobbers (A,X,Y) @bank 10 = $c04e
    psg_read  (ubyte offset @X, bool cookedVol @Pc) -> clobbers (Y) -> ubyte @A @bank 10 = $c051
    psg_setatten  (ubyte voice @A, ubyte attenuation @X) -> clobbers (A,X,Y) @bank 10 = $c054
    psg_setfreq  (ubyte voice @A, uword freq @XY) -> clobbers (A,X,Y) @bank 10 = $c057
    psg_setpan  (ubyte voice @A, ubyte panning @X) -> clobbers (A,X,Y) @bank 10 = $c05a
    psg_setvol  (ubyte voice @A, ubyte volume @X) -> clobbers (A,X,Y) @bank 10 = $c05d
    psg_write  (ubyte value @A, ubyte offset @X) -> clobbers (Y) @bank 10 = $c060
    psg_write_fast  (ubyte value @A, ubyte offset @X) -> clobbers (Y) @bank 10 = $c0a2
    rambank  (ubyte bank @A) 
    reset_system  () 
    restore_vera_context  () -> clobbers (A) 
    restore_virtual_registers  () -> clobbers (A,Y) 
    rom_version  () -> clobbers (Y) -> ubyte @A, bool @Pc 
    rombank  (ubyte bank @A) 
    save_vera_context  () -> clobbers (A) 
    save_virtual_registers  () -> clobbers (A,Y) 
    scnsiz  (ubyte width @X, ubyte heigth @Y) -> clobbers (A,X,Y) 
    screen_mode  (ubyte mode @A, bool getCurrent @Pc) -> ubyte @A, ubyte @X, ubyte @Y, bool @Pc  = $ff5f
    screen_set_charset  (ubyte charset @A, uword charsetptr @XY) -> clobbers (A,X,Y)  = $ff62
    search_x16edit  () -> ubyte 
    set_aflow_irq_handler  (uword address @AY) -> clobbers (A) 
    set_chrin_keyhandler  (ubyte handlerbank @A, uword handler @XY) -> clobbers (A) 
    set_led_state  (bool on) 
    set_line_irq_handler  (uword rasterline @R0, uword address @AY) -> clobbers (A,Y) 
    set_program_args  (uword args_ptr, ubyte args_size) 
    set_screen_mode  (ubyte mode @A) -> clobbers (A,X,Y) -> bool @Pc 
    set_sprcol_irq_handler  (uword address @AY) -> clobbers (A) 
    set_vsync_irq_handler  (uword address @AY) -> clobbers (A) 
    sprite_set_image  (uword pixels @R0, uword mask @R1, ubyte bpp @R2, ubyte number @A, ubyte width @X, ubyte height @Y, bool apply_mask @Pc) -> clobbers (A,X,Y) -> bool @Pc  = $fef0
    sprite_set_position  (uword x @R0, uword y @R1, ubyte number @A) -> clobbers (A,X,Y)  = $fef3
    stash  (ubyte data @A, ubyte bank @X, ubyte index @Y) -> clobbers (X)  = $ff77
    vaddr  (ubyte bank @A, uword address @R0, ubyte addrsel @R1, byte autoIncrOrDecrByOne @Y) -> clobbers (A) 
    vaddr_autodecr  (ubyte bank @A, uword address @R0, ubyte addrsel @R1, uword autoDecrAmount @R2) -> clobbers (A,Y) 
    vaddr_autoincr  (ubyte bank @A, uword address @R0, ubyte addrsel @R1, uword autoIncrAmount @R2) -> clobbers (A,Y) 
    vaddr_clone  (ubyte port @A) -> clobbers (A,X,Y) 
    vpeek  (ubyte bank @A, uword address @XY) -> ubyte @A 
    vpoke  (ubyte bank @A, uword address @R0, ubyte value @Y) -> clobbers (A) 
    vpoke_and  (ubyte bank @A, uword address @R0, ubyte value @Y) -> clobbers (A) 
    vpoke_mask  (ubyte bank @A, uword address @R0, ubyte mask @X, ubyte value @Y) -> clobbers (A) 
    vpoke_or  (ubyte bank @A, uword address @R0, ubyte value @Y) -> clobbers (A) 
    vpoke_xor  (ubyte bank @A, uword address @R0, ubyte value @Y) -> clobbers (A) 
    x16edit_default  () -> clobbers (A,X,Y)  = $c000
    x16edit_loadfile  (ubyte firstbank @X, ubyte lastbank @Y, str filename @R0, ubyte filenameLength @R1) -> clobbers (A,X,Y)  = $c003
    x16edit_loadfile_options  (ubyte firstbank @X, ubyte lastbank @Y, str filename @R0, uword filenameLengthAndOptions @R1, uword tabstopAndWordwrap @R2, uword disknumberAndColors @R3, uword headerAndStatusColors @R4) -> clobbers (A,X,Y)  = $c006
    ym_get_chip_type  () -> clobbers (X) -> ubyte @A @bank 10 = $c0a5
    ym_getatten  (ubyte channel @A) -> clobbers (Y) -> ubyte @X @bank 10 = $c099
    ym_getpan  (ubyte channel @A) -> clobbers (Y) -> ubyte @X @bank 10 = $c09c
    ym_init  () -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c063
    ym_loaddefpatches  () -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c066
    ym_loadpatch  (ubyte channel @A, uword patchOrAddress @XY, bool what @Pc) -> clobbers (A,X,Y) @bank 10 = $c069
    ym_loadpatchlfn  (ubyte channel @A, ubyte lfn @X) -> clobbers (X,Y) -> ubyte @A, bool @Pc @bank 10 = $c06c
    ym_playdrum  (ubyte channel @A, ubyte note @X) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c06f
    ym_playnote  (ubyte channel @A, ubyte kc @X, ubyte kf @Y, bool notrigger @Pc) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c072
    ym_read  (ubyte register @X, bool cooked @Pc) -> clobbers (Y) -> ubyte @A, bool @Pc @bank 10 = $c081
    ym_release  (ubyte channel @A) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c084
    ym_setatten  (ubyte channel @A, ubyte attenuation @X) -> clobbers (Y) -> bool @Pc @bank 10 = $c075
    ym_setdrum  (ubyte channel @A, ubyte note @X) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c078
    ym_setnote  (ubyte channel @A, ubyte kc @X, ubyte kf @Y) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c07b
    ym_setpan  (ubyte channel @A, ubyte panning @X) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c07e
    ym_trigger  (ubyte channel @A, bool noRelease @Pc) -> clobbers (A,X,Y) -> bool @Pc @bank 10 = $c087
    ym_write  (ubyte value @A, ubyte register @X) -> clobbers (Y) -> bool @Pc @bank 10 = $c08a
}

sys  {
    const byte  MAX_BYTE 
    const float  MAX_FLOAT 
    const ubyte  MAX_UBYTE 
    const uword  MAX_UWORD 
    const word  MAX_WORD 
    const byte  MIN_BYTE 
    const float  MIN_FLOAT 
    const ubyte  MIN_UBYTE 
    const uword  MIN_UWORD 
    const word  MIN_WORD 
    const ubyte  SIZEOF_BOOL 
    const ubyte  SIZEOF_BYTE 
    const ubyte  SIZEOF_FLOAT 
    const ubyte  SIZEOF_UBYTE 
    const ubyte  SIZEOF_UWORD 
    const ubyte  SIZEOF_WORD 
    const ubyte  target 
    clear_carry  () 
    clear_irqd  () 
    disable_caseswitch  () 
    enable_caseswitch  () 
    exit  (ubyte returnvalue @A) 
    exit2  (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y) 
    exit3  (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y, bool carry @Pc) 
    internal_stringcopy  (uword source @R0, uword target @AY) -> clobbers (A,Y) 
    irqsafe_clear_irqd  () 
    irqsafe_set_irqd  () 
    memcmp  (uword address1 @R0, uword address2 @R1, uword size @AY) -> byte @A 
    memcopy  (uword source @R0, uword target @R1, uword count @AY) -> clobbers (A,X,Y) 
    memset  (uword mem @R0, uword numbytes @R1, ubyte value @A) -> clobbers (A,X,Y) 
    memsetw  (uword mem @R0, uword numwords @R1, uword value @AY) -> clobbers (A,X,Y) 
    pop  () -> ubyte @A 
    popw  () -> uword @AY 
    poweroff_system  () 
    progend  () -> uword @AY 
    progstart  () -> uword @AY 
    push  (ubyte value @A) 
    pushw  (uword value @AY) 
    read_flags  () -> ubyte @A 
    reset_system  () 
    restore_irq  () -> clobbers (A) 
    restore_prog8_internals  () 
    save_prog8_internals  () 
    set_carry  () 
    set_irq  (uword handler @AY) -> clobbers (A) 
    set_irqd  () 
    set_rasterirq  (uword handler @AY, uword rasterpos @R0) -> clobbers (A) 
    set_rasterline  (uword line @AY) 
    wait  (uword jiffies @AY) -> clobbers (X) 
    waitvsync  () 
}

p8_sys_startup  {
    cleanup_at_exit  () 
    init_system  () 
    init_system_phase2  () 
}


LIBRARY MODULE NAME: test_stack
-------------------------------

test_stack  {
    test  () 
}


LIBRARY MODULE NAME: textio
---------------------------

txt  {
    const ubyte  DEFAULT_HEIGHT 
    const ubyte  DEFAULT_WIDTH 
    const long  VERA_TEXTMATRIX 
    ubyte[]  color_to_charcode 
    bell  () 
    chrout  (ubyte character @A)  = $ffd2
    chrout_lit  (ubyte character @A) 
    clear_screen  () 
    clear_screenchars  (ubyte character @A) -> clobbers (X,Y) 
    clear_screencolors  (ubyte color @A) -> clobbers (X,Y) 
    cls  () 
    color  (ubyte txtcol) 
    color2  (ubyte txtcol, ubyte bgcol) 
    column  (ubyte col @A) -> clobbers (A,X,Y) 
    cp437  () 
    fill_screen  (ubyte character @A, ubyte color @Y) -> clobbers (A,X) 
    get_column  () -> ubyte @Y 
    get_cursor  (uword colptr, uword rowptr) 
    get_row  () -> ubyte @X 
    getchr  (ubyte col @A, ubyte row @Y) -> ubyte @A 
    getclr  (ubyte col @A, ubyte row @Y) -> ubyte @A 
    height  () -> clobbers (X,Y) -> ubyte @A 
    home  () 
    input_chars  (uword buffer @AY) -> clobbers (A) -> ubyte @Y 
    iso  () 
    iso16  () 
    iso5  () 
    iso_off  () 
    kata  () 
    lowercase  () 
    nl  () 
    petscii2scr  (ubyte petscii_char @A) -> ubyte @A 
    petscii2scr_str  (str petscii_string @AY) 
    plot  (ubyte col @Y, ubyte row @X) 
    print  (str text @AY) -> clobbers (A,Y) 
    print_b  (byte value @A) -> clobbers (A,X,Y) 
    print_bool  (bool value) 
    print_lit  (str text @AY) -> clobbers (A,Y) 
    print_ub  (ubyte value @A) -> clobbers (A,X,Y) 
    print_ub0  (ubyte value @A) -> clobbers (A,X,Y) 
    print_ubbin  (ubyte value @A, bool prefix @Pc) -> clobbers (A,X,Y) 
    print_ubhex  (ubyte value @A, bool prefix @Pc) -> clobbers (A,X,Y) 
    print_uw  (uword value @AY) -> clobbers (A,X,Y) 
    print_uw0  (uword value @AY) -> clobbers (A,X,Y) 
    print_uwbin  (uword value @AY, bool prefix @Pc) -> clobbers (A,X,Y) 
    print_uwhex  (uword value @AY, bool prefix @Pc) -> clobbers (A,X,Y) 
    print_w  (word value @AY) -> clobbers (A,X,Y) 
    row  (ubyte rownum @A) -> clobbers (A,X,Y) 
    scroll_down  () -> clobbers (A,X,Y) 
    scroll_left  () -> clobbers (A,X,Y) 
    scroll_right  () -> clobbers (A,X,Y) 
    scroll_up  () -> clobbers (A,X,Y) 
    setcc  (ubyte col, ubyte row, ubyte character, ubyte charcolor) 
    setcc2  (ubyte col, ubyte row, ubyte character, ubyte colors) 
    setchr  (ubyte col @X, ubyte row @Y, ubyte character @A) -> clobbers (A) 
    setclr  (ubyte col @X, ubyte row @Y, ubyte color @A) -> clobbers (A) 
    spc  () 
    uppercase  () 
    waitkey  () -> ubyte @A 
    width  () -> clobbers (X,Y) -> ubyte @A 
}


LIBRARY MODULE NAME: verafx
---------------------------

verafx  {
    available  () -> bool 
    clear  (ubyte vbank, uword vaddr, ubyte data, uword num_longwords) 
    copy  (ubyte srcbank, uword srcaddr, ubyte tgtbank, uword tgtaddr, uword num_longwords) 
    muls  (word value1 @R0, word value2 @R1) -> clobbers (X) -> word @AY, word @R0 
    mult16  (uword value1 @R0, uword value2 @R1) -> clobbers (X) -> uword @AY 
    transparency  (bool enable) 
}


