"CSAVEM" FOR MC-10 V.2 rls (DOCUMENTATION) 'CSAVEM.MC' IS A PATCH ROUTINE TO FILL THE GAP LEFT BY THE ABSENCE OF "CSAVEM" ON THE MC-10. IT'S POSITION INDEPENDENT AND USEABLE FROM BASIC. ** EXCEPT FOR USING "EXEC", THE SYNTAX IS IDENTICAL TO THE "CSAVEM" COMMAND ON THE CO-CO. THAT IS: EXEC(ADDRESS)"FILENAME",START ADDR.,END ADDR. <,OPTIONAL 'LOAD' ADDRESS> ADDRESS= ADDRESS OF 'CSAVEM' ROUTINE. USING THE 'CSAVEM.MC' PROGRAM, THIS ADDRESS WILL BE 20410 FOR 4K OR 36794 FOR 20K. FILENAME= 1 TO 8 CHARACTERS. MAY BE A LITERAL (IN QUOTES) OR IT MAY BE A STRING VARIABLE (STILL 1 TO 8 CHARACTERS). START ADDR.=STARTING ADDRESS OF MEMORY TO SAVE (IN DECIMAL). THIS MAY ALSO BE A NUMERIC VARIABLE OR EXPRESSION AS: INT(A-B/2) END ADDR.= ENDING ADDRESS OF MEMORY TO SAVE. MAY BE VARIABLE OR EXPRESSION. LOAD ADDR.= THIS IS OPTIONAL AND IS USED WHEN YOU WISH THE BINARY FILE TO "CLOADM" AT AN ADDRESS OTHER THAN THAT ORIGINALLY SAVED. THIS ALSO IS NUMERIC: LITERAL, VARIABLE, OR EXPRESSION. ASSUME THE ROUTINE IS LOADED AT ADDRESS 36794 (20K) AND YOU ARE SAVING A ML PROGRAM THAT STARTS AT 17222 AND EXTENDS TO 17299. YOU WISH THE PROGRAM TO "CLOADM" AT THE SAME ADDRESS. YOU TYPE: EXEC(36794)"CRUD",17222,17299 IF YOU WISH THE PROGRAM TO AUTOMATICALLY LOAD AT A DIFFER- ENT ADDRESS (SAY 20000), YOU WOULD USE THE OPTIONAL "LOAD ADDRESS" PARAMETER: EXEC(36794)"CRUD",17222,17299,20000 MOST ERRORS IN THE STATEMENT LIST GIVE AN 'SN' (SYNTAX) ERROR. HOWEVER, IF YOU ENTER AN ENDING ADDRESS LOWER THAN THE STARTING ADDRESS YOU WILL GET AN 'OV' ERROR. THE USE OF THAT ERROR MESSAGE IS NOT ACTUALLY CORRECT BUT IT MAY HELP FLAG AN UNNOTICED BLUNDER (ESPECIALLY IF YOU USE NUMERIC VARIABLES). ** THE ASSEMBLY SOURCE CODE FOLLOWS: ** ( THIS LISTING DENOTES HEX NUMBERS WITH A PRECEEDING '$') * PROGRAM ADDRESS LABELS (EQUATES) CHRGOT EQU $F3 ;READ AND STORE ;CURRENT BASIC CHAR/ TOKEN -> 'A' REG. GETADR EQU $EF4C ;EVALUATES NUMERIC ;EXPRESSION, RETURNS 16 BIT INTEGER ;RESULT IN 'X' REGISTER CHKCOM EQU $EA2F ;CHECKS THAT CURRENT ;BASIC CHAR = COMMA ELSE 'SN' ERROR. * NAMEFILE BLOCK BUFFER ($425F-$426D) FILTYP EQU $4267 ;FILE TYPE MLSTRT EQU $426A ;STARTING ADDRESS OF ML MLLOAD EQU $426C ;LOADING " " " * TAPE WORK ADDRESSES FOR CSAVE ROUTINES DTSTRT EQU $426F ;START OF DATA DTEND EQU $4271 ;END OF DATA -1 * CSAVE ROUTINES (OR SEGMENTS) DODATA EQU $FC5D ;PART OF 'CSAVE' CODE DONFLB EQU $FC8E ;SAVE NAMEFILE BLK GTNAM EQU $FD33 ;GET FILENAME AND ;STORE IN BUFFER ($425F-$4266) * BASIC ERROR ROUTINES SNERR EQU $EA3C ;'SN' ERROR ERROR EQU $E238 ;MAIN ERROR ROUTINE ;ON ENTRY, REG. 'B' = ERROR CODE * START CODE ORG $00 ;ANY ADDRESS BEQ SERR ;NO PARMS= ERROR LDAA #02 ;ML FILE TYPE STAA FILTYP JSR GTNAM ;EVALUATE FILENAME BSR GVAL ;EVAL. START ADDRRESS STX MLSTRT STX DTSTRT STX MLLOAD ;DEFAULT LOAD ADDR. BSR GVAL ;EVAL. END ADDR. INX ;AND INCREMENT VALUE TO INCLUDE LAST BYTE. STX DTEND ;STORE LDD DTEND ;AND XFER FOR NEXT OPERATION SUBD DTSTRT ;CHECK RANGE. END >= START? BCC OK ;YES- CONTINUE. LDAB #$0A ;ELSE- SET FOR 'OV' ERROR AND JMP ERROR ;CRASH IT! OK JSR CHRGOT ;CHK FOR 'LOAD' PARM BEQ DOIT ;BRANCH IF DONE BSR GVAL2 ;ELSE GET LOAD ADDR. STX MLLOAD ;AND STORE IT. DOIT JSR DONFLB ;SEND THE NAMFILE BLK JMP DODATA ;SAVE THE DATA AND END SERR JMP SNERR ;CRASH IT W/'SN' ERR GVAL JSR CHRGOT ;NO PARMS? BEQ SERR ;OFF W/HEAD GVAL2 JSR CHKCOM ;BETTER BE COMMA! JSR GETADR ;GET NUMERIC EXPR. RTS