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

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


BUILTIN FUNCTIONS
-----------------
abs  (ubyte|byte|uword|word|long|float value) -> undefined
call  (pointer address) -> uword
callfar  (ubyte bank, pointer address, uword arg) -> uword
callfar2  (ubyte bank, pointer address, ubyte argA, ubyte argX, ubyte argY, bool argC) -> uword
clamp  (byte value, byte minimum, byte maximum) -> undefined
cmp  (ubyte|byte|uword|word|long value1, ubyte|byte|uword|word|long|float value2)
divmod  (ubyte|uword dividend, ubyte|uword divisor) -> undefined, undefined
len  (str|array|array_splitw values) -> uword
lmh  (long value) -> ubyte, ubyte, ubyte
lsb  (uword|word|long value) -> ubyte
lsw  (uword|word|long value) -> uword
max  (byte val1, byte val2) -> undefined
memory  (str name, uword size, uword alignment) -> pointer
min  (byte val1, byte val2) -> undefined
mklong  (ubyte msb, ubyte b2, ubyte b1, ubyte lsb) -> long
mklong2  (uword msw, uword lsw) -> long
mkword  (ubyte msb, ubyte lsb) -> uword
msb  (uword|word|long value) -> ubyte
msw  (uword|word|long value) -> uword
offsetof  (ubyte field) -> ubyte
peek  (uword|long|pointer address) -> ubyte
peekbool  (uword|long|pointer address) -> bool
peekf  (uword|long|pointer address) -> float
peekl  (uword|long|pointer address) -> long
peekp  (pointer|uword|long address) -> pointer
peekw  (uword|long|pointer address) -> uword
poke  (uword|long|pointer address, ubyte|byte value)
pokebool  (uword|long|pointer address, bool value)
pokebowl  (uword|long|pointer address, bool value)
pokef  (uword|long|pointer address, float value)
pokel  (uword|long|pointer address, long value)
pokemon  (uword|long|pointer address, ubyte value) -> ubyte
pokep  (pointer|uword|long address, pointer value)
pokew  (uword|long|pointer address, uword|word value)
pop  () -> ubyte
popf  () -> float
popl  () -> long
popp  () -> pointer
popw  () -> uword
push  (ubyte|byte|bool value)
pushf  (float value)
pushl  (long value)
pushp  (pointer value)
pushw  (uword|word|pointer value)
rol  (ubyte|uword|long item)
rol2  (ubyte|uword|long item)
ror  (ubyte|uword|long item)
ror2  (ubyte|uword|long item)
rrestore  ()
rsave  ()
setlsb  (word|uword|long variable, byte|ubyte value)
setmsb  (word|uword|long variable, byte|ubyte value)
sgn  (ubyte|byte|uword|word|long|float value) -> byte
sizeof  (ubyte|byte|uword|word|long|float|bool|str|array|array_splitw|pointer|undefined object) -> ubyte
sqrt  (ubyte|byte|uword|word|long|float value) -> undefined


LIBRARY MODULE NAME: bcd
------------------------

bcd  {
    addb  (byte a, byte b) -> byte
    addl  (long a, long b) -> long
    addtol  (^^long a, long b)
    addub  (ubyte a, ubyte b) -> ubyte
    adduw  (uword a, uword b) -> uword
    addw  (word a, word b) -> word
    clearbcd  ()
    setbcd  ()
    subb  (byte a, byte b) -> byte
    subfroml  (^^long a, long b)
    subl  (long a, long b) -> long
    subub  (ubyte a, ubyte b) -> ubyte
    subuw  (uword a, uword b) -> uword
}


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

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

smallstack  {
    ubyte[]  buffer
    ubyte  sp
    free  () -> ubyte
    init  ()
    isempty  () -> bool
    isfull  () -> bool
    pop_b  () -> ubyte
    pop_w  () -> uword
    push_b  (ubyte value)
    push_w  (uword value)
    size  () -> ubyte
}

stack  {
    uword  buffer_ptr
    uword  sp
    free  () -> uword
    init  ()
    isempty  () -> bool
    isfull  () -> bool
    pop_b  () -> ubyte
    pop_w  () -> uword
    push_b  (ubyte value)
    push_w  (uword value)
    size  () -> uword
}

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


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
    decode_tscrunch  (uword compressed @R0, uword target @R1) clobbers (A,X,Y)
    decode_tscrunch_inplace  (uword compressed @R0) clobbers (A,X,Y)
    decode_zx0  (uword compressed @R0, uword target @R1) clobbers (A,X,Y)
    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  {
    ubyte[] @shared  string_out
    any2uword  (str string @AY) -> uword @AY, ubyte @X
    bin2uword  (str string @AY) -> uword @AY
    hex2long  (str string @AY) -> long @R0R1
    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
    str2byte  (str string @AY) clobbers (Y) -> byte @A
    str2long  (str string) -> long
    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_l  (long value) -> str
    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_ulhex  (long value) -> str
    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: coroutines
-------------------------------

coroutines  {
    const ubyte  MAX_TASKS
    ubyte  active_task
    uword  supervisor
    @nosplit uword[]  tasklist
    @nosplit uword[]  userdatas
    add  (uword taskaddress, uword userdata) -> ubyte
    current  () -> ubyte
    kill  (ubyte taskid)
    killall  ()
    run  (uword supervisor_routine)
    termination  ()
    yield  () -> uword
}


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

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


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

diskio  {
    const ubyte  READ_IO_CHANNEL
    const ubyte  STATUS_EOF
    const ubyte  WRITE_IO_CHANNEL
    ubyte @shared  drivenumber
    bool  iteration_in_progress
    uword  list_blocks
    str  list_filename
    str  list_filetype
    ^^ubyte  list_pattern
    bool  list_skip_disk_name
    bool  write_iteration_in_progress
    delete  (str filenameptr)
    directory  () -> bool
    directory_dirs  () -> bool
    directory_files  () -> bool
    diskname  () -> str
    exists  (str filename) -> bool
    f_close  ()
    f_close_w  ()
    f_open  (str filenameptr) -> bool
    f_open_w  (str filenameptr) -> bool
    f_read  (uword bufferpointer, uword num_bytes) -> uword
    f_read_all  (uword bufferpointer) -> uword
    f_readline  (^^ubyte bufptr @AY) clobbers (X) -> ubyte @Y, ubyte @A
    f_write  (uword bufferpointer, uword num_bytes) -> bool
    get_loadaddress  (str filename) -> uword
    lf_end_list  ()
    lf_next_entry  () -> bool
    lf_start_list  (str pattern_ptr) -> bool
    lf_start_list_dirs  (str pattern_ptr) -> bool
    lf_start_list_files  (str pattern_ptr) -> bool
    lf_start_list_having_prefix  (str prefix) -> bool
    list_filenames  (str pattern_ptr, uword filenames_buffer, uword filenames_buf_size) -> ubyte
    load  (str filenameptr, uword address_override) -> uword
    load_raw  (str filenameptr, uword start_address) -> uword
    loadlib  (str libnameptr, uword libaddress) -> uword
    rename  (str oldfileptr, str newfileptr)
    reset_read_channel  ()
    reset_write_channel  ()
    save  (str filenameptr, uword start_address, uword savesize) -> bool
    send_command  (str commandptr)
    status  () -> str
    status_code  () -> ubyte
}


LIBRARY MODULE NAME: lineclip
-----------------------------

lineclip  {
    clip  (word x1, word y1, word x2, word y2) -> bool, word, word, word, word
    inside  (word x, word y) -> bool
    set_cliprect  (word x1, word y1, word x2, word y2)
}


LIBRARY MODULE NAME: lists
--------------------------

lists  {
    struct FullNode
    struct List
    struct Node
    add_head  (uword listptr, uword node)
    add_tail  (uword listptr, uword node)
    enqueue  (uword listptr, uword node)
    find_name  (uword listptr, str name) -> uword
    init  (uword listptr)
    insert  (uword listptr, uword node, uword pred)
    is_empty  (uword listptr) -> bool
    remove  (uword node)
    remove_head  (uword listptr) -> uword
    remove_tail  (uword listptr) -> uword
}


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  (^^ubyte data, uword length, uword initvalue, uword xorout) -> uword
    crc16_end  (uword xorout) -> uword
    crc16_start  (uword initvalue)
    crc16_update  (ubyte value @A)
    crc32  (^^ubyte data, uword length) -> long
    crc32_end  () -> long @R14R15
    crc32_start  ()
    crc32_update  (ubyte value)
    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
    gcd  (uword a, uword b) -> uword
    interpolate  (ubyte v, ubyte inputMin, ubyte inputMax, ubyte outputMin, ubyte outputMax) -> 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
    mul32  (uword a, uword b) -> long
    randrange  (ubyte n) -> ubyte
    randrange_rom  (ubyte n) -> ubyte
    randrangew  (uword n) -> uword
    randrangew_rom  (uword n) -> uword
    rnd  () clobbers (Y) -> ubyte @A
    rnd_rom  () clobbers (Y) -> ubyte @A
    rndseed  (uword seed1 @AY, uword seed2 @R0) clobbers (A,Y)
    rndseed_rom  (uword seed1 @AY, uword seed2 @R0) clobbers (A,Y)
    rndw  () -> uword @AY
    rndw_rom  () -> 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: petgfx
---------------------------

petgfx  {
    hline  (ubyte x, ubyte y, ubyte length)
    plot  (ubyte x, ubyte y)
    vline  (ubyte x, ubyte y, ubyte length)
}


LIBRARY MODULE NAME: sorting
----------------------------

sorting  {
    gnomesort_by_ub  (^^ubyte ub_keys, ^^uword wordvalues, ubyte num_elements)
    gnomesort_by_uw  (uword uw_keys, uword wordvalues, ubyte num_elements)
    gnomesort_ub  (^^ubyte bytearray @AY, ubyte num_elements @X)
    gnomesort_uw  (uword wordvalues, ubyte num_elements)
    shellsort_by_ub  (^^ubyte ub_keys, ^^uword wordvalues, ubyte num_elements)
    shellsort_by_uw  (^^uword uw_keys, ^^uword wordvalues, ubyte num_elements)
    shellsort_pointers  (uword pointers, ubyte num_elements, uword comparefunc)
    shellsort_ub  (^^ubyte values, ubyte num_elements)
    shellsort_uw  (^^uword values, ubyte num_elements)
    string_comparator  (str string1 @R0, str string2 @R1) -> bool @Pc
}


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

strings  {
    ^^ubyte  last_token_source
    append  (str target @R0, str suffix @R1) clobbers (Y) -> ubyte @A
    compare  (str string1 @R0, str string2 @AY) clobbers (Y) -> byte @A
    compare_nocase  (str string1 @R0, str string2 @AY) clobbers (Y) -> byte @A
    compare_nocase_iso  (str string1 @R0, str string2 @AY) clobbers (Y) -> byte @A
    contains  (str string @AY, ubyte character @X) -> bool @Pc
    copy  (str source @R0, str target @AY) clobbers (A) -> ubyte @Y
    endswith  (str st, str suffix) -> bool
    find  (str string @AY, ubyte character @X) -> ubyte @A, bool @Pc
    find_eol  (str string @AY) -> ubyte @A, bool @Pc
    findstr  (str haystack, str needle) -> ubyte
    hash  (str string @AY) -> 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
    isxdigit  (ubyte petsciichar @A) -> bool @Pc
    left  (str source @AX, ubyte length @Y, str target @R1) clobbers (A,Y)
    length  (str string @AY) clobbers (A) -> ubyte @Y
    lower  (str st @AY) -> ubyte @Y
    lower_iso  (str st @AY) -> ubyte @Y
    lowerchar  (ubyte character @A) -> ubyte @A
    lowerchar_iso  (ubyte character @A) -> ubyte @A
    lstrip  (str s)
    lstripped  (str s) -> str
    ltrim  (str s)
    ltrimmed  (str s) -> str
    nappend  (str target @R0, str suffix @R1, ubyte maxlength @X) clobbers (Y) -> ubyte @A
    ncopy  (str source @R0, str target @AY, ubyte maxlength @X) clobbers (A,X) -> ubyte @Y
    next_token  (str source, str delimiters) -> str
    pattern_match  (str string @AY, str pattern @R0) clobbers (Y) -> bool @A
    pattern_match_nocase  (str string @AY, str lowercase_pattern @R0, bool iso @Pc) clobbers (Y) -> bool @A
    rfind  (str string @AY, ubyte character @X) -> ubyte @A, bool @Pc
    right  (str source @AY, ubyte length @X, str target @R1) clobbers (A,Y)
    rstrip  (str s)
    rtrim  (str s)
    slice  (str source @R0, ubyte start @A, ubyte length @Y, str target @R1) clobbers (A,Y)
    split  (str s, ^^uword parts, ubyte maxparts) -> ubyte
    startswith  (str st, str prefix) -> bool
    strip  (str s)
    trim  (str s)
    upper  (str st @AY) -> ubyte @Y
    upper_iso  (str st @AY) -> ubyte @Y
    upperchar  (ubyte character @A) -> ubyte @A
    upperchar_iso  (ubyte character @A) -> ubyte @A
}


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

cbm  {
    &uword  CBINV
    &uword  CINV
    &ubyte  COLOR
    const uword  Colors
    &uword  IBASIN
    &uword  IBSOUT
    &uword  ICHKIN
    &uword  ICKOUT
    &uword  ICLALL
    &uword  ICLOSE
    &uword  ICLRCH
    &uword  ICRNCH
    &uword  ICRNCH2
    &uword  IERROR
    &uword  IEVAL
    &uword  IEXMON
    &uword  IGETIN
    &uword  IGONE
    &uword  IGONE2
    &uword  ILOAD
    &uword  IMAIN
    &uword  IOPEN
    &uword  IQPLOP
    &uword  IQPLOP2
    &uword  IRQ_VEC
    &uword  ISAVE
    &uword  ISTOP
    &uword  NMINV
    &uword  NMI_VEC
    &uword  RESET_VEC
    &ubyte  SFDX
    &ubyte  SHFLAG
    &ubyte  STATUS
    &ubyte  STKEY
    const uword  Screen
    &ubyte  TIME_HI
    &ubyte  TIME_LO
    &ubyte  TIME_MID
    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
    IRQDFEND  () clobbers (A,X,Y) = $ff33
    IRQDFRT  () clobbers (A,X,Y) = $fa65
    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 = $ff99
    OPEN  () clobbers (X,Y) -> bool @Pc, ubyte @A = $ffc0
    PLOT  (ubyte col @Y, ubyte row @X, bool dir @Pc) clobbers (A) -> ubyte @Y, ubyte @X = $fff0
    RAMTAS  () clobbers (A,X,Y) = $ff87
    RDTIM  () -> ubyte @A, ubyte @X, ubyte @Y = $ffde
    RDTIM16  () clobbers (X) -> uword @AY
    RDTIML  () clobbers (X) -> long @R0R1
    READST  () -> ubyte @A = $ffb7
    RESTOR  () clobbers (A,X,Y) = $ff8a
    SAVE  (ubyte zp_startaddr @A, uword endaddr @XY) -> bool @Pc, ubyte @A = $ffd8
    SCNKEY  () clobbers (A,X,Y) = $ff9f
    SCREEN  () -> ubyte @X, ubyte @Y = $ffed
    SCRORG  () -> 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
    SETTIML  (long jiffies @R0R1)
    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  ()
}

c64  {
    &ubyte  AD1
    &ubyte  AD2
    &ubyte  AD3
    &ubyte  BGCOL0
    &ubyte  BGCOL1
    &ubyte  BGCOL2
    &ubyte  BGCOL4
    &ubyte  CIA1CRA
    &ubyte  CIA1CRB
    &ubyte  CIA1DDRA
    &ubyte  CIA1DDRB
    &ubyte  CIA1ICR
    &ubyte  CIA1PRA
    &ubyte  CIA1PRB
    &ubyte  CIA1SDR
    &ubyte  CIA1TAH
    &ubyte  CIA1TAL
    &ubyte  CIA1TBH
    &ubyte  CIA1TBL
    &ubyte  CIA1TOD10
    &ubyte  CIA1TODHR
    &ubyte  CIA1TODMMIN
    &ubyte  CIA1TODSEC
    &ubyte  CIA2CRA
    &ubyte  CIA2CRB
    &ubyte  CIA2DDRA
    &ubyte  CIA2DDRB
    &ubyte  CIA2ICR
    &ubyte  CIA2PRA
    &ubyte  CIA2PRB
    &ubyte  CIA2SDR
    &ubyte  CIA2TAH
    &ubyte  CIA2TAL
    &ubyte  CIA2TBH
    &ubyte  CIA2TBL
    &ubyte  CIA2TOD10
    &ubyte  CIA2TODHR
    &ubyte  CIA2TODMIN
    &ubyte  CIA2TODSEC
    &ubyte  CR1
    &ubyte  CR2
    &ubyte  CR3
    &ubyte  ENV3
    &ubyte  EXTCOL
    &uword  FC
    &ubyte  FCHI
    &ubyte  FCLO
    &uword  FREQ1
    &uword  FREQ2
    &uword  FREQ3
    &ubyte  FREQHI1
    &ubyte  FREQHI2
    &ubyte  FREQHI3
    &ubyte  FREQLO1
    &ubyte  FREQLO2
    &ubyte  FREQLO3
    &ubyte  IREQMASK
    &ubyte  LPENX
    &ubyte  LPENY
    &ubyte  MSIGX
    &ubyte  MVOL
    &ubyte  OSC3
    &ubyte  POTX
    &ubyte  POTY
    &uword  PW1
    &uword  PW2
    &uword  PW3
    &ubyte  PWHI1
    &ubyte  PWHI2
    &ubyte  PWHI3
    &ubyte  PWLO1
    &ubyte  PWLO2
    &ubyte  PWLO3
    &ubyte  RASTER
    &ubyte  RESFILT
    &ubyte  SCROLX
    &ubyte  SCROLY
    &ubyte  SP0COL
    &ubyte  SP0X
    &ubyte  SP0Y
    &ubyte  SP1COL
    &ubyte  SP1X
    &ubyte  SP1Y
    &ubyte  SP2COL
    &ubyte  SP2X
    &ubyte  SP2Y
    &ubyte  SP3COL
    &ubyte  SP3X
    &ubyte  SP3Y
    &ubyte  SP4COL
    &ubyte  SP4X
    &ubyte  SP4Y
    &ubyte  SP5COL
    &ubyte  SP5X
    &ubyte  SP5Y
    &ubyte  SP6COL
    &ubyte  SP6X
    &ubyte  SP6Y
    &ubyte  SP7COL
    &ubyte  SP7X
    &ubyte  SP7Y
    &ubyte  SPBGCL
    &ubyte  SPBGPR
    &ubyte[]  SPCOL
    &ubyte  SPENA
    &ubyte  SPMC
    &ubyte  SPMC0
    &ubyte  SPMC1
    &ubyte[]  SPRPTR
    &ubyte  SPRPTR0
    &ubyte  SPRPTR1
    &ubyte  SPRPTR2
    &ubyte  SPRPTR3
    &ubyte  SPRPTR4
    &ubyte  SPRPTR5
    &ubyte  SPRPTR6
    &ubyte  SPRPTR7
    &ubyte  SPSPCL
    &ubyte[]  SPXY
    &@nosplit uword[]  SPXYW
    &ubyte  SR1
    &ubyte  SR2
    &ubyte  SR3
    &ubyte  VICIRQ
    &ubyte  VMCSB
    &ubyte  XXPAND
    &ubyte  YXPAND
}

c128  {
    &ubyte  MMUCR
    &ubyte  SCREEN_MODE
    &ubyte  VM1
    &ubyte  VM2
    &ubyte  VM3
    &ubyte  VM4
    BOOT_CALL  (ubyte device @X, ubyte drive @A) clobbers (A,X,Y) = $ff53
    C64_MODE  () = $ff4d
    CLOSE_ALL  (ubyte device @X) clobbers (X) = $ff4a
    DLCHR  () clobbers (A,X,Y) = $ff62
    DMA_CALL  (ubyte bank @X, ubyte command @Y) clobbers (A,X) = $ff50
    GETCFG  (ubyte bank @X) -> ubyte @A = $ff6b
    INDCMP  (ubyte value @A, ubyte bank @X, ubyte offset @Y) clobbers (X) -> bool @Pz, bool @Pc, bool @Pv = $ff7a
    INDFET  (ubyte zpaddr @A, ubyte bank @X, ubyte offset @Y) clobbers (X) -> ubyte @A = $ff74
    INDSTA  (ubyte value @A, ubyte bank @X, ubyte offset @Y) clobbers (X) = $ff77
    JMPFAR  () clobbers (A,X) = $ff71
    JSRFAR  () clobbers (A,X) = $ff6e
    LKUPLA  (ubyte lfn @A) -> bool @Pc, ubyte @X = $ff59
    LKUPSA  (ubyte sa @Y) -> bool @Pc, ubyte @A, ubyte @X = $ff5c
    PFKEY  (ubyte zpaddr @A, ubyte key @X, ubyte length @Y) = $ff65
    PHOENIX  () clobbers (A,X,Y) = $ff56
    PRIMM  () = $ff7d
    SETBNK  (ubyte data_bank @A, ubyte filename_bank @X) = $ff68
    SPIN_SPOUT  () clobbers (A) = $ff47
    SWAPPER  () clobbers (A,X,Y) = $ff5f
    banks  (ubyte banks @A)
    disable_basic  () clobbers (A)
    disable_fkey_macros  ()
    enable_fkey_macros  ()
    fast  ()
    getbanks  () -> ubyte @A
    is80  () -> bool
    set40  ()
    set80  ()
    slow  ()
    x16jsrfar  ()
}

sys  {
    const byte  MAX_BYTE
    const long  MAX_LONG
    const ubyte  MAX_UBYTE
    const uword  MAX_UWORD
    const word  MAX_WORD
    const byte  MIN_BYTE
    const long  MIN_LONG
    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_LONG
    const ubyte  SIZEOF_POINTER
    const ubyte  SIZEOF_UBYTE
    const ubyte  SIZEOF_UWORD
    const ubyte  SIZEOF_WORD
    const ubyte  target
    clear_carry  ()
    clear_irqd  ()
    cpu_is_65816  () -> bool
    die  (ubyte code @A, str message @XY)
    disable_caseswitch  ()
    disable_runstop_and_charsetswitch  ()
    enable_caseswitch  ()
    enable_runstop_and_charsetswitch  ()
    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)
    get_as_returnaddress  (uword address @XY) -> uword @AX
    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)
    progend  () -> uword @AY
    progstart  () -> uword @AY
    push_returnaddress  (uword address @XY)
    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)
    update_rasterirq  (uword handler @AY, uword rasterpos @R0) clobbers (A)
    wait  (uword jiffies @AY)
    waitrastborder  ()
    waitrasterline  (uword line @AY)
    waitvsync  () clobbers (A)
}

cx16  {
    &uword  r0
    &ubyte  r0H
    &ubyte  r0L
    &bool  r0bH
    &bool  r0bL
    &long  r0r1sl
    &word  r0s
    &byte  r0sH
    &byte  r0sL
    &uword  r1
    &uword  r10
    &ubyte  r10H
    &ubyte  r10L
    &bool  r10bH
    &bool  r10bL
    &long  r10r11sl
    &word  r10s
    &byte  r10sH
    &byte  r10sL
    &uword  r11
    &ubyte  r11H
    &ubyte  r11L
    &bool  r11bH
    &bool  r11bL
    &word  r11s
    &byte  r11sH
    &byte  r11sL
    &uword  r12
    &ubyte  r12H
    &ubyte  r12L
    &bool  r12bH
    &bool  r12bL
    &long  r12r13sl
    &word  r12s
    &byte  r12sH
    &byte  r12sL
    &uword  r13
    &ubyte  r13H
    &ubyte  r13L
    &bool  r13bH
    &bool  r13bL
    &word  r13s
    &byte  r13sH
    &byte  r13sL
    &uword  r14
    &ubyte  r14H
    &ubyte  r14L
    &bool  r14bH
    &bool  r14bL
    &long  r14r15sl
    &word  r14s
    &byte  r14sH
    &byte  r14sL
    &uword  r15
    &ubyte  r15H
    &ubyte  r15L
    &bool  r15bH
    &bool  r15bL
    &word  r15s
    &byte  r15sH
    &byte  r15sL
    &ubyte  r1H
    &ubyte  r1L
    &bool  r1bH
    &bool  r1bL
    &word  r1s
    &byte  r1sH
    &byte  r1sL
    &uword  r2
    &ubyte  r2H
    &ubyte  r2L
    &bool  r2bH
    &bool  r2bL
    &long  r2r3sl
    &word  r2s
    &byte  r2sH
    &byte  r2sL
    &uword  r3
    &ubyte  r3H
    &ubyte  r3L
    &bool  r3bH
    &bool  r3bL
    &word  r3s
    &byte  r3sH
    &byte  r3sL
    &uword  r4
    &ubyte  r4H
    &ubyte  r4L
    &bool  r4bH
    &bool  r4bL
    &long  r4r5sl
    &word  r4s
    &byte  r4sH
    &byte  r4sL
    &uword  r5
    &ubyte  r5H
    &ubyte  r5L
    &bool  r5bH
    &bool  r5bL
    &word  r5s
    &byte  r5sH
    &byte  r5sL
    &uword  r6
    &ubyte  r6H
    &ubyte  r6L
    &bool  r6bH
    &bool  r6bL
    &long  r6r7sl
    &word  r6s
    &byte  r6sH
    &byte  r6sL
    &uword  r7
    &ubyte  r7H
    &ubyte  r7L
    &bool  r7bH
    &bool  r7bL
    &word  r7s
    &byte  r7sH
    &byte  r7sL
    &uword  r8
    &ubyte  r8H
    &ubyte  r8L
    &bool  r8bH
    &bool  r8bL
    &long  r8r9sl
    &word  r8s
    &byte  r8sH
    &byte  r8sL
    &uword  r9
    &ubyte  r9H
    &ubyte  r9L
    &bool  r9bH
    &bool  r9bL
    &word  r9s
    &byte  r9sH
    &byte  r9sL
    restore_virtual_registers  () clobbers (A,Y)
    save_virtual_registers  () clobbers (A,Y)
}

p8_sys_startup  {
    cleanup_at_exit  ()
    disable_runstop_and_charsetswitch  () clobbers (A)
    enable_runstop_and_charsetswitch  () clobbers (A)
    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
    bell  ()
    chrout  (ubyte character @A) = $ffd2
    clear_screen  ()
    clear_screenchars  (ubyte char @A) clobbers (Y)
    clear_screencolors  (ubyte color @A) clobbers (Y)
    cls  ()
    color  (ubyte txtcol)
    column  (ubyte col @A) clobbers (A,X,Y)
    fill_screen  (ubyte char @A, ubyte color @Y) clobbers (A)
    get_column  () -> ubyte @Y
    get_cursor  () -> ubyte @X, ubyte @Y
    get_row  () -> ubyte @X
    getchr  (ubyte col @A, ubyte row @Y) clobbers (Y) -> ubyte @A
    getclr  (ubyte col @A, ubyte row @Y) clobbers (Y) -> ubyte @A
    height  () clobbers (X,Y) -> ubyte @A
    home  ()
    input_chars  (^^ubyte buffer @AY) clobbers (A) -> ubyte @Y
    iso2petscii  (ubyte iso_char) -> ubyte
    iso2petscii_str  (str iso_string @AY)
    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_l  (long value)
    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_ulhex  (long value, bool prefix)
    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)
    rvs_off  ()
    rvs_on  ()
    scroll_down  (bool alsocolors @Pc) clobbers (A,X)
    scroll_left  (bool alsocolors @Pc) clobbers (A,X,Y)
    scroll_right  (bool alsocolors @Pc) clobbers (A,X)
    scroll_up  (bool alsocolors @Pc) clobbers (A,X)
    setcc  (ubyte col, ubyte row, ubyte character, ubyte charcolor)
    setchr  (ubyte col @X, ubyte row @Y, ubyte character @A) clobbers (A,Y)
    setclr  (ubyte col @X, ubyte row @Y, ubyte color @A) clobbers (A,Y)
    size  () clobbers (A) -> ubyte @X, ubyte @Y
    spc  ()
    uppercase  ()
    waitkey  () -> ubyte @A
    width  () clobbers (X,Y) -> ubyte @A
}


LIBRARY MODULE NAME: wavfile
----------------------------

wavfile  {
    const ubyte  Format::ADPCM
    const ubyte  Format::ALAW
    const ubyte  Format::DVI_ADPCM
    const ubyte  Format::IEEE_FLOAT
    const ubyte  Format::MULAW
    const ubyte  Format::PCM
    ubyte  bits_per_sample
    uword  block_align
    uword  data_offset
    long  data_size
    ubyte  nchannels
    uword  sample_rate
    ubyte  wavefmt
    parse_header  (^^ubyte wav_data) -> bool
}


