; SAVE#D:MDUP5.M65 ; ; ;*K. SAVE FILE COMMAND ; SAVFIL .BYTE "SAVE:filename," .BYTE "start,end(,ini" .BYTE "t(,run))",$9B,0 JSR GETFN STY IBUF+$10 STA IBUF+1+$10 LDA OPT PHA JSR GETNO2 CPX # >DUPEND LDY #$70 BCS DSLMFG LDY #$80 ; * bit 7=$80 ;* LDY #$60 ; mem.sav fix ; ; Lee ;*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 .BYTE "Invalid START-" .BYTE "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 .BYTE $10 .WORD 4 .BYTE PUTCHR .WORD 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 .BYTE "Load MEM.SAV from " .BYTE "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 ; NOT BINARY ; ; FILE ERR BLOWUP JMP CIOER1 ; LDFIL .BYTE "Load from " .BYTE "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 .BYTE $10 .WORD 2 .BYTE GETCHR .WORD 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 # CIOV BNE BRUN1 ; ;*B. RUN CARTRIDGE ; STCAR .BYTE 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 .BYTE "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 .BYTE "Run from " .BYTE "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 .BYTE "Address must be 1-4 " .BYTE "hex digits!",$9B,0