Prog8 compiler v10.5 by Irmen de Jong (irmen@razorvine.net) 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 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: 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 delete (uword filenameptr) directory () -> bool diskname () -> uword exists (str filename) -> bool f_close () f_close_w () f_open (uword filenameptr) -> bool f_open_w (uword filenameptr) -> 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_write (uword bufferpointer, uword num_bytes) -> 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 start_address) -> uword rename (uword oldfileptr, uword newfileptr) reset_read_channel () reset_write_channel () save (uword filenameptr, uword start_address, uword savesize) -> bool send_command (uword commandptr) status () -> uword status_code () -> ubyte } 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 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: string --------------------------- string { 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 &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 @X, ubyte @Y = $fff0 RAMTAS () -> clobbers (A,X,Y) = $ff87 RDTIM () -> ubyte @A, ubyte @X, ubyte @Y = $ffde RDTIM16 () -> clobbers (X) -> uword @AY 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 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 &uword[] SPXYW &ubyte SR1 &ubyte SR2 &ubyte SR3 &ubyte VICIRQ &ubyte VMCSB &ubyte XXPAND &ubyte YXPAND } c128 { &ubyte VM1 &ubyte VM2 &ubyte VM3 &ubyte VM4 JSRFAR () = $ff6e banks (ubyte banks @A) disable_basic () -> clobbers (A) getbanks () -> ubyte @A x16jsrfar () } sys { 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 () 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) 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 progend () -> 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) wait (uword jiffies @AY) waitrastborder () waitvsync () -> clobbers (A) } cx16 { &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 cpu_is_65816 () -> bool 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 (uword colptr, uword rowptr) 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 (uword 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) row (ubyte rownum @A) -> clobbers (A,X,Y) 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) spc () uppercase () waitkey () -> ubyte @A width () -> clobbers (X,Y) -> ubyte @A }