; ; K. SAVE FILE COMMAND ; SAVFIL DB 'SAVE:filename,start,end(,init(,run))',$9B,0 JSR GETFN STY IBUF+$10 STA IBUF+1+$10 LDA OPT PHA JSR GETNO2 CPX #HIGH[DUPEND] LDY #$70 BCS DSLMFG LDY #$60 ;FORCE MEM.SAV TO MEMORY BEFORE SAVING IMAGE DSLMFG JSR D2B8A JSR GETNO2 STA HDBUF+2 STX HDBUF+3 SEC SBC HDBUF STA HDBUF+4 TXA SBC HDBUF+1 BPL ADDOK JSR ERRXIT DB 'Invalid START-END range!',$9B,0 ADDOK STA HDBUF+5 INC HDBUF+4 BNE INCOK INC HDBUF+5 INCOK LDA #0 CPY #CR BEQ NINTAD JSR GETNO2 STA INITAD STX INITAD+1 ORA INITAD+1 BEQ NINTAD LDA #1 ;SET 'GOT INIT' FLAG NINTAD STA TEMP CPY #CR BEQ NRUNAD JSR GETNO2 STA RUNAD STX RUNAD+1 ORA RUNAD+1 BEQ NRUNAD INC TEMP INC TEMP ;SET 'GOT RUN' FLAG NRUNAD PLA WRDUP LDY #0 STY OPT DEY STY VECTOR STY VECTOR+1 ; ; OPEN THE PROGRAM FILE ; LDY #8 CMP #'A' BNE OPTOK1 DEC OPT INY OPTOK1 STY IAUX+$10 LDX #$10 JSR ANYDEN ;OPEN FILE 'OUTPUT/ANY DENSITY' BMI KIOERR LDA OPT BEQ FULHDR ;IF NO 'APPEND' JSR DOIO ;WRITE SHORT HEADER DB $10 DW 4 DB PUTCHR DW VECTOR+2 BMI KIOERR KEXIT LDA HDBUF+4 STA ILEN+$10 LDA HDBUF+5 STA ILEN+1+$10 LDA HDBUF STA IBUF+$10 LDA HDBUF+1 STA IBUF+1+$10 BIT STATE BMI KMSAV JMP WDR1 KMSAV JMP WDR ; FULHDR JSR WR6BYT BPL KEXIT KIOERR JMP CIOER1 ; D2B8A STA HDBUF STX HDBUF+1 STY STATE RTS ; ; N. LOAD PROGRAM INTO MEM.SAV ; MEMSAV DB 'Load MEM.SAV from what file?',$9B,0 LDA STATE ORA #$80 ;TURN ON MEM.SAV FLAG BMI LOADIT TOMEN JMP MENUSL ; ; L. LOAD USER FILE FUNCTION ; BDLDFL LDY #180 BLOWUP JMP CIOER1 ; LDFIL DB 'Load from what file?',$9B,0 LDA STATE AND #$7F ;TURN OFF MEM.SAV FLAG LOADIT STA STATE JSR GETFN STY IBUF+$10 STA IBUF+1+$10 LDX DATA+3 ;JUST A CR? BEQ TOMEN LDA #4 STA IAUX+$10 LDX #$10 JSR ANYDEN JSR DOIO DB $10 DW 2 DB GETCHR DW DATA BMI BLOWUP LDA DATA AND DATA+1 CMP #$FF BNE BDLDFL LDA DATA+3 BEQ TOMEN LDA OPT EOR #'N' BEQ GOTN LDA #0 STA WARMST LDA #3 GOTN EOR #7 STA IAUX+$10 LDA #39 STA ICMD+$10 LDA #LOW[CIOV] LDX #HIGH[CIOV] BNE BRUN1 ; ; B. RUN CARTRIDGE ; STCAR DB 0 LDA $BFFD EOR #$AA STA $BFFD CMP $BFFD BNE NORAM ;IF ADDRESS SPACE IS NOT RAM EOR #$AA STA $BFFD ;IF RAM, NO CARTRIDGE NOCART JSR ERRXIT DB 'NO CARTRIDGE!',$9B,0 ; NORAM LDX $BFFC BNE NOCART ;IF NOT ATARI CARTRIDGE LDA CARTST LDX CARTST+1 BRUN1 STA VECTOR STX VECTOR+1 LDA INISAV STA DOSINI LDA INISAV+1 STA DOSINI+1 LDA STATE AND #$BF STA STATE JMP LDFILE ; ; M. RUN AT ADDRESS ; BRUN DB 'Run from what address?',0 JSR GETLIN LDA (FNPTR),Y CMP #$9B ;NO ADDRESS? BEQ BRUN2 ;IF SO, ABORT JSR GETNO2 CPY #$9B BNE BRUN2 LDY #0 STY WARMST BEQ BRUN1 BRUN2 JSR ERRXIT DB 'Address must be 1-4 hex digits!',$9B,0