OSARGS 'Get Pointer' function now works (PTR# in BASIC)

This commit is contained in:
Bobbi Webber-Manners 2021-08-01 15:28:10 -04:00
parent f68f268806
commit 6daa528396
3 changed files with 57 additions and 10 deletions

Binary file not shown.

View File

@ -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

View File

@ -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