diff --git a/applecorn.po b/applecorn.po index 766ffe7..6aa213c 100644 Binary files a/applecorn.po and b/applecorn.po differ diff --git a/auxmem.s b/auxmem.s index 93cb954..f71db73 100644 --- a/auxmem.s +++ b/auxmem.s @@ -392,34 +392,35 @@ ARGSHND PHA BNE :S2 * TODO: Implement this for *RUN and *command JSR BEEP - BRA :EXIT + BRA :IEXIT :S2 CMP #$FF ; Y=0,A=FF => flush all files + BNE :IEXIT STA $C004 ; Write main memory STZ MOSFILE ; Zero means flush all STA $C005 ; Write aux memory BRA :FLUSH -:HASFILE CMP #$00 ; Y!=0,A=0 => read seq ptr +:HASFILE STA $C004 ; Write main memory + STY MOSFILE ; File ref num + STX MOSFILE+1 ; Pointer to ZP control block + STA $C005 ; Write aux memory + CMP #$00 ; Y!=0,A=0 => read seq ptr BNE :S3 -*TODO READ SEQ PTR - BRA :EXIT + >>> XF2MAIN,TELL +:IEXIT BRA :EXIT :S3 CMP #$01 ; Y!=0,A=1 => write seq ptr BNE :S4 -*TODO WRT SEQ PTR + >>> XF2MAIN,SEEK BRA :EXIT :S4 CMP #$02 ; Y!=0,A=2 => read file len BNE :S5 -*TODO READ FILE LEN + >>> XF2MAIN,STAT :S5 CMP #$FF ; Y!=0,A=FF => flush file BNE :EXIT - STA $C004 ; Write main memory - STY MOSFILE ; File ref num - STA $C005 ; Write aux memory :FLUSH >>> XF2MAIN,FLUSH :EXIT PLY PLX PLA RTS - OSARGSRET >>> ENTAUX PLY diff --git a/mainmem.s b/mainmem.s index d603e83..139d4cc 100644 --- a/mainmem.s +++ b/mainmem.s @@ -294,6 +294,52 @@ FLUSH >>> ENTMAIN DW FLSHPL >>> XF2AUX,OSARGSRET +* ProDOS file handling for OSARGS get len command +STAT >>> ENTMAIN + LDA MOSFILE ; File ref number + >>> XF2AUX,OSARGSRET + +* ProDOS file handling for OSARGS set ptr command +SEEK >>> ENTMAIN + LDA MOSFILE ; File ref number + >>> XF2AUX,OSARGSRET + +* ProDOS file handling for OSARGS get ptr command +TELL >>> ENTMAIN + LDA MOSFILE ; File ref number + STA GMARKPL+1 + JSR MLI + DB GMARKCMD + DW GMARKPL + LDX MOSFILE+1 ; Pointer to ZP control block + BCS :ERR + LDA $C08B ; R/W LC RAM, bank 1 + LDA $C08B + STA $C009 ; Alt ZP on + LDA GMARKPL+2 + STA $00,X + LDA GMARKPL+3 + STA $01,X + LDA GMARKPL+4 + STA $02,X + STZ $03,X + STA $C008 ; Alt ZP off + LDA $C081 ; Bank the ROM back in + LDA $C081 +:EXIT >>> XF2AUX,OSARGSRET +:ERR LDX MOSFILE+1 ; Address of ZP control block + LDA $C08B + LDA $C08B + STA $C009 + STZ $00,X + STZ $01,X + STZ $02,X + STZ $03,X + STZ $C008 + LDA $C081 + LDA $C081 + BRA :EXIT + * ProDOS file handling for MOS OSFILE LOAD call * Return A=0 if successful * A=1 if file not found