//----------------------------------------------------------- // // The file function library for 65CM. ( needs >= v0.070 ) // WARNING: THIS LIB IS ONLY FOR USE ON C64/VIC20 // ( Eventually for some other CBM series of // computers that uses 6502 and the kernel // standard. ) // // Provides an interface for the following functions: // // * Open a file in read or write mode. ( SEQ/PRG/USR ) // * Read a pointed block, of given size from an open file. // * Write a pointed block, of given size to an open file. // * Close an open file. // * Load a file ( PRG ) into memory using the files own // load-address or into a given address. // * Save a portion of the memory to a PRG file. //----------------------------------------------------------- ASM lda #$00 ; disable sysmsgs as default jsr lib_setmsg ENDASM GOTO lib_skip_filefunc //----------------------------------------------------------- // General CBM kernel calls: //----------------------------------------------------------- ASM lib_acptr = $ffa5 lib_chkin = $ffc6 lib_chkout = $ffc9 lib_chrin = $ffcf lib_chrout = $ffd2 lib_ciout = $ffa8 lib_cint = $ff81 lib_clall = $ffe7 lib_close = $ffc3 lib_clrchn = $ffcc lib_getin = $ffe4 lib_iobase = $fff3 lib_ioinit = $ff84 lib_listen = $ffb1 lib_load = $ffd5 lib_membot = $ff9c lib_memtop = $ff99 lib_open = $ffc0 lib_plot = $fff0 lib_ramtas = $ff87 lib_rdtim = $ffde lib_readst = $ffb7 lib_restor = $ff8a lib_save = $ffd8 lib_scnkey = $ff9f lib_screen = $ffed lib_second = $ff93 lib_setlfs = $ffba lib_setmsg = $ff90 lib_setnam = $ffbd lib_settim = $ffdb lib_settmo = $ffa2 lib_stop = $ffe1 lib_talk = $ffb4 lib_tksa = $ff96 lib_udtim = $ffea lib_unlsn = $ffae lib_untlk = $ffab lib_vactor = $ff8d ENDASM //----------------------------------------------------------- // Function: fopen. // //----------------------------------------------------------- BYTE lib_fopen_filenr BYTE lib_fopen_devicenr BYTE lib_fopen_secondnr WORD lib_fopen_filenameptr LABEL lib_fopen ASM lda lib_fopen_filenr ldx lib_fopen_devicenr ldy lib_fopen_secondnr jsr lib_setlfs ENDASM LET lib_strlen_strptr GET lib_fopen_filenameptr GOSUB lib_strlen ASM lda lib_strlen_return ldx lib_fopen_filenameptr ldy lib_fopen_filenameptr + 1 jsr lib_setnam jsr lib_open ENDASM SUBEND //----------------------------------------------------------- // Function: fclose. // //----------------------------------------------------------- BYTE lib_fclose_filenr LABEL lib_fclose ASM lda lib_fclose_filenr jsr lib_close ENDASM SUBEND //----------------------------------------------------------- // Function: fwriteblock // //----------------------------------------------------------- BYTE lib_fwriteblock_filenr WORD lib_fwriteblock_blockptr WORD lib_fwriteblock_size LABEL lib_fwriteblock ASM ldx lib_fwriteblock_filenr jsr lib_chkout ENDASM WORD lib_fwriteblock_blkp WORD lib_fwriteblock_sz BYTE lib_fwriteblock_value LET lib_fwriteblock_blkp GET lib_fwriteblock_blockptr LET lib_fwriteblock_sz GET lib_fwriteblock_size WHILE lib_fwriteblock_sz PEEK lib_fwriteblock_blkp GIVING lib_fwriteblock_value ASM lda lib_fwriteblock_value jsr lib_chrout ENDASM INCREMENT lib_fwriteblock_blkp DECREMENT lib_fwriteblock_sz WEND ASM jsr lib_clrchn ENDASM SUBEND //----------------------------------------------------------- // Function: freadblock // //----------------------------------------------------------- BYTE lib_freadblock_filenr WORD lib_freadblock_blockptr WORD lib_freadblock_size LABEL lib_freadblock ASM ldx lib_freadblock_filenr jsr lib_chkin ENDASM WORD lib_freadblock_blkp WORD lib_freadblock_sz BYTE lib_freadblock_value BYTE lib_freadblock_status LET lib_freadblock_blkp GET lib_freadblock_blockptr LET lib_freadblock_sz GET lib_freadblock_size WHILE lib_freadblock_sz ASM jsr lib_chrin sta lib_freadblock_value ENDASM POKE lib_freadblock_blkp WITH lib_freadblock_value INCREMENT lib_freadblock_blkp DECREMENT lib_freadblock_sz ASM jsr lib_readst sta lib_freadblock_status ENDASM IF lib_freadblock_status <> 0 THEN GOTO lib_freadblock_break1 ENDIF WEND LABEL lib_freadblock_break1 SUBTRACT lib_freadblock_sz FROM lib_freadblock_size GIVING lib_freadblock_size ASM jsr lib_clrchn ENDASM SUBEND LABEL lib_skip_filefunc