****************************************************** *** *** *** comp.binaries.cbm is a moderated binaries- *** *** only newsgroup (no discussion or *** *** crossposting allowed) for Commodore 8-bits *** *** *** *** For information on comp.binaries.cbm visit *** *** http://stockholm.ptloma.edu/comp.binaries.cbm/ *** *** *** *** This file is also available via FTP from *** *** ftp://videocam.net.au/cbm/incoming *** *** (allow time for submission to be received) *** *** *** ****************************************************** * One from the Vault is a collection of frequently requested, useful or just plain interesting past posts sent to comp.binaries.cbm, as archived by the moderators. If you have a request, please send it to the address in the headers. Take care when replying to these messages, as many were posted years ago. >From: Cameron Kaiser >Reply-to: Cameron Kaiser >X-Original-Posting-Date: In the comp.sys.cbm (now largely outdated: Jim, where are you?) FAQ, Jim Brain mentions a tip for converting a PETSCII text file into a program file as if you had typed it in yourself. It works, but it involves some typing, and you must close the file yourself. It's also a little ugly. :-) Hernan Vergara suggested I write a new one, so I did. The following program, which is very small and public domain, reads in a PETSCII program file on the disk that you created (like this: open1,device,2,"filename,s,w":cmd1:list [cursor comes back] print#1:close1 where device is 8-11 and filename is the name of the text file), and enters it into memory for you. There *must* be a READY. as the last line of that text file, which the code above does as a side effect. To use this program, LOAD it into memory ,8,1 and type NEW to clear pointers. Then: sys49152,"filename",device The program will flash the border as it loads the text file into memory and enters it. It will then say "FINISHED!" and close the file when done, giving you a READY. prompt. (If you type a wrong filename or device number in by mistake, hit RUN/STOP-RESTORE to recover.) If there is a program in memory, it will have the lines appended to it (unless line numbers conflict, in which case the new lines will overwrite the old ones). To execute this merge, LOAD this program first, type NEW, LOAD the first program, and then do the command above. Since $c000-$cfff is a common area for machine language routines, the source code in xa crossassembler format is below. It requires 121 bytes of free RAM. -- Cameron Kaiser .word $c000 *=$c000 /* tokenise a basic program from disk, by cameron kaiser, in xa format */ jsr $aefd /* skip comma */ jsr 57812 /* grab filename and device */ lda #1 ldx $ba ldy #2 jsr $ffba /* setlfs */ jsr 65472 /* open */ lda 768 sta esto lda 769 sta estp lda #ehand sta 768 stx 769 /* move basic ierror vector to our handler */ ldx #1 lda 812 sta iclsav /* save iclall vector */ lda #73 sta 812 /* iclall */ jmp 65478 /* chkin and exit */ /* error handler -- works on the principle that the last line will make a syntax error */ ehand inc $d020 pha /* save accumulator just in case */ cpx #11 /* is it a syntax error? if so, we're done! */ beq *+5 pla jmp (esto) /* nope, use default handler and fergeddaboudit */ lda #1 jsr $ffc3 /* close */ jsr $ffcc /* clrchn */ lda #mes jsr $ab1e /* strut our stuff */ ldx #255 /* throw error message away */ ejump lda esto sta 768 lda estp sta 769 /* restore ierror vector */ lda iclsav /* restore iclall vector */ sta 812 pla jmp (esto) /* bye */ esto .byte 00 estp .byte 00 iclsav .byte 00 mes .asc "FINISHED!",$0d,00