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

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


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 
}

stack  {
    uword  buffer_ptr 
    uword  sp 
    free  () -> uword 
    init  () 
    isempty  () -> bool 
    isfull  () -> bool 
    pop  () -> ubyte 
    popw  () -> uword 
    push  (ubyte value) 
    pushw  (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) -> 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: coroutines
-------------------------------

coroutines  {
    const ubyte  MAX_TASKS 
    ubyte  active_task 
    uword  supervisor 
    uword[]  tasklist 
    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  {
    uword[]  logo_lines 
    logo  () 
    logo_at  (ubyte column, ubyte row) 
}


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 
    crc16_end  () -> uword 
    crc16_start  () 
    crc16_update  (ubyte value @A) 
    crc32  (^^ubyte data, uword length) 
    crc32_end  () 
    crc32_end_result  () -> uword @R15, uword @R14 
    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 
    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 
    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: 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  {
    append  (str target @R0, str suffix @R1) -> clobbers (Y) -> ubyte @A 
    compare  (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 
    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 
    lowerchar  (ubyte character @A) -> ubyte @A 
    lstrip  (str s) 
    lstripped  (str s) -> str 
    ltrim  (str s) 
    ltrimmed  (str s) -> str 
    ncompare  (str string1 @R0, str string2 @AY, ubyte length @X) -> clobbers (X,Y) -> byte @A 
    pattern_match  (str string @AY, str pattern @R0) -> 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) 
    startswith  (str st, str prefix) -> bool 
    strip  (str s) 
    trim  (str s) 
    upper  (str st @AY) -> ubyte @Y 
    upperchar  (ubyte character @A) -> ubyte @A 
}


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

cbm  {
    &uword  CBINV 
    &uword  CINV 
    &uword  IRQ_VEC 
    &uword  NMINV 
    &uword  NMI_VEC 
    &uword  RESET_VEC 
    &ubyte  STATUS 
    const uword  Screen 
    &ubyte  TIME_HI 
    &ubyte  TIME_LO 
    &ubyte  TIME_MID 
    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
    CLALL  () -> clobbers (A,X)  = $ffe7
    CLRCHN  () -> clobbers (A,X)  = $ffcc
    GETIN  () -> clobbers (X,Y) -> bool @Pc, ubyte @A  = $ffe4
    GETIN2  () -> clobbers (X,Y) -> ubyte @A 
    RDTIM  () -> ubyte @A, ubyte @X, ubyte @Y 
    RDTIM16  () -> clobbers (X) -> uword @AY 
    SETTIM  (ubyte low @A, ubyte middle @X, ubyte high @Y) 
    STOP  () -> clobbers (X) -> bool @Pz, ubyte @A  = $ffe1
    STOP2  () -> clobbers (A,X) -> bool @Pz 
    UDTIM  () -> clobbers (A,X)  = $ffea
    kbdbuf_clear  () 
}

sys  {
    const byte  MAX_BYTE 
    const ubyte  MAX_UBYTE 
    const uword  MAX_UWORD 
    const word  MAX_WORD 
    const byte  MIN_BYTE 
    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  () 
    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) 
    get_as_returnaddress  (uword address @XY) -> uword @AX 
    internal_stringcopy  (str source @R0, str 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 
    progend  () -> uword @AY 
    progstart  () -> uword @AY 
    push  (ubyte value @A) 
    push_returnaddress  (uword address @XY) 
    pushw  (uword value @AY) 
    read_flags  () -> ubyte @A 
    reset_system  () 
    restore_prog8_internals  () 
    save_prog8_internals  () 
    set_carry  () 
    set_irqd  () 
    wait  (uword jiffies @AY) 
    waitvsync  () -> clobbers (A) 
}

cx16  {
    &uword  r0 
    &ubyte  r0H 
    &ubyte  r0L 
    &bool  r0bH 
    &bool  r0bL 
    &word  r0s 
    &byte  r0sH 
    &byte  r0sL 
    &uword  r1 
    &uword  r10 
    &ubyte  r10H 
    &ubyte  r10L 
    &bool  r10bH 
    &bool  r10bL 
    &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 
    &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 
    &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 
    &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 
    &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 
    &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 
    &word  r8s 
    &byte  r8sH 
    &byte  r8sL 
    &uword  r9 
    &ubyte  r9H 
    &ubyte  r9L 
    &bool  r9bH 
    &bool  r9bL 
    &word  r9s 
    &byte  r9sH 
    &byte  r9sL 
    cpu_is_65816  () -> bool 
    restore_virtual_registers  () -> clobbers (A,Y) 
    save_virtual_registers  () -> clobbers (A,Y) 
}

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 
    bell  () 
    chrout  (ubyte character @A)  = $ffd2
    clear_screen  () 
    clear_screenchars  (ubyte character @A) -> clobbers (Y) 
    clear_screencolors  (ubyte color) 
    cls  () 
    color  (ubyte txtcol) 
    fill_screen  (ubyte character @A, ubyte color @Y) -> clobbers (A) 
    getchr  (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 
    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_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) 
    rvs_off  () 
    rvs_on  () 
    scroll_down  () -> clobbers (A,X) 
    scroll_left  () -> clobbers (A,X,Y) 
    scroll_right  () -> clobbers (A,X) 
    scroll_up  () -> clobbers (A,X) 
    setcc  (ubyte col, ubyte row, ubyte character, ubyte charcolor_ignored) 
    setchr  (ubyte col @X, ubyte row @Y, ubyte character @A) -> clobbers (A,Y) 
    setclr  (ubyte col, ubyte row, ubyte color) 
    spc  () 
    uppercase  () 
    waitkey  () -> ubyte @A 
    width  () -> clobbers (X,Y) -> ubyte @A 
}


