From 3d4c4b2e8596eeba1e356b5a2e87c378398b1f0f Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Thu, 29 Jul 2021 14:43:56 -0400 Subject: [PATCH] Added support for OSBYTE $7F (End of file) --- applecorn.po | Bin 143360 -> 143360 bytes applecorn.s | 4 ++- auxmem.s | 89 +++++++++++++++++++++++++++++++++-------------- mainmem.s | 96 +++++++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 151 insertions(+), 38 deletions(-) diff --git a/applecorn.po b/applecorn.po index e410aa51d0cb7c6d9b8437837f108298ca323886..cc253308d1c276f9e242a3c58f80ad2a35afafe6 100644 GIT binary patch delta 20669 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 HDkuIQ-izTZ delta 16820 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 JSR PRSTR - TSX - LDA $103,X + PLA JSR OUTHEX LDA #OSBM2 @@ -1365,6 +1373,35 @@ OSBYTE80 CPX #$00 ; X=0 Last ADC channel :INPUT LDX #$00 ; Nothing in input buf RTS +* Performs OSBYTE $7F EOF function +* File ref number is in X +CHKEOF LDA STRTL ; Backup STRTL/STRTH + STA TEMP1 + LDA STRTH + STA TEMP2 + STA $C004 ; Write main mem + STX MOSFILE ; File reference number + STA $C005 ; Write aux mem + LDA #FILEEOF + STA STRTH + TSX ; Stash alt SP in $0101 + STX $0101 + CLC ; Use main memory + CLV ; Use main ZP and LC + JMP XFER +CHKEOFRET + LDX $0101 ; Recover alt SP from $0101 + TXS + PHA ; Return code in A + LDA TEMP1 + STA STRTL + LDA TEMP2 + STA STRTH + PLX ; Recover return code -> X + RTS + * Performs OSBYTE $81 INKEY$ function * X,Y has time limit * On exit, CC, Y=$00, X=key - key pressed @@ -1429,7 +1466,7 @@ DELAY PHX :L2 INY ; 2 CPY #$00 ; 2 BNE :L2 ; 3 (taken) - CPX #$05 ; 2 + CPX #$02 ; 2 BNE :L1 ; 3 (taken) PLY PLX diff --git a/mainmem.s b/mainmem.s index 11f7611..f0bd74a 100644 --- a/mainmem.s +++ b/mainmem.s @@ -1,4 +1,5 @@ * MAINMEM.S +* (c) Bobbi 2021 GPL v3 * Code that runs on the Apple //e in main memory * This code is mostly glue between the BBC Micro code * running in aux mem and ProDOS @@ -10,7 +11,7 @@ SETPRFX LDA #GPFXCMD :OPC7 DB $00 DW GSPFXPL LDX $0300 - BNE :S1 + BNE RTSINST LDA $BF30 STA ONLPL+1 ; Device number JSR MLI @@ -25,7 +26,7 @@ SETPRFX LDA #GPFXCMD STA $0301 DEC :OPC7 BNE :L1 -:S1 RTS +RTSINST RTS * Disconnect /RAM ramdrive to avoid aux corruption * Stolen from Beagle Bros Extra K @@ -76,7 +77,7 @@ RESET TSX LDA #>AUXMOS STA STRTH SEC - BIT $FF58 + BIT RTSINST JMP XFER RTS @@ -214,7 +215,7 @@ FINDEXIT LDA $C08B ; R/W RAM, LC bank 1 STA STRTH PLA SEC - BIT $FF58 + BIT RTSINST JMP XFER BUFIDX DB $00 @@ -277,7 +278,7 @@ GETEXIT LDA $C08B ; R/W RAM, LC bank 1 STA STRTH PLA SEC - BIT $FF58 + BIT RTSINST JMP XFER * ProDOS file handling for MOS OSBPUT call @@ -305,9 +306,62 @@ FILEPUT LDX $0100 ; Recover SP LDA #>OSBPUTRET STA STRTH SEC - BIT $FF58 + BIT RTSINST JMP XFER +* ProDOS file handling for OSBYTE $7F EOF +* Returns EOF status in A ($FF for EOF, $00 otherwise) +FILEEOF LDX $0100 ; Recover SP + TXS + LDA $C081 ; ROM, please + LDA $C081 + + LDA MOSFILE ; File ref number + STA GEOFPL+1 + STA GMARKPL+1 + JSR MLI + DB GEOFCMD + DW GEOFPL + BCS :ISEOF ; If error, just say EOF + + JSR MLI + DB GMARKCMD + DW GMARKPL + BCS :ISEOF ; If error, just say EOF + + LDA GEOFPL+2 ; Subtract Mark from EOF + SEC + SBC GMARKPL+2 + STA :REMAIN + LDA GEOFPL+3 + SBC GMARKPL+3 + STA :REMAIN+1 + LDA GEOFPL+4 + SBC GMARKPL+4 + STA :REMAIN+2 + + LDA :REMAIN ; Check bytes remaining + BNE :NOTEOF + LDA :REMAIN+1 + BNE :NOTEOF + LDA :REMAIN+2 + BNE :NOTEOF +:ISEOF LDA #$FF + BRA :EXIT +:NOTEOF LDA #$00 +:EXIT PHA ; Preserve return code + LDA $C08B ; R/W RAM, LC bank 1 + LDA $C08B + LDA #CHKEOFRET + STA STRTH + PLA ; Recover return code + SEC + BIT RTSINST + JMP XFER +:REMAIN DS 3 ; Remaining bytes + * ProDOS file handling for MOS OSFILE LOAD call * Return A=0 if successful * A=1 if file not found @@ -379,7 +433,7 @@ LOADFILE LDX $0100 ; Recover SP STA STRTH PLA SEC - BIT $FF58 + BIT RTSINST JMP XFER :BLOCKS DB $00 @@ -392,6 +446,14 @@ SAVEFILE LDX $0100 ; Recover SP LDA $C081 ; Gimme the ROM! LDA $C081 + LDA #MOSFILE + STA DESTPL+2 + JSR MLI + DB DESTCMD + DW DESTPL + STZ :BLOCKS LDA #PRONEBLK STA STRTH SEC - BIT $FF58 + BIT RTSINST JMP XFER :READERR @@ -592,7 +654,7 @@ CATEXIT LDA $C08B ; R/W LC RAM, bank 1 STA STRTH PLA SEC - BIT $FF58 + BIT RTSINST JMP XFER * PRONEBLK call returns here ... @@ -621,7 +683,7 @@ SETPFX LDX $0100 ; Recover SP LDA #>STARDIRRET STA STRTH SEC - BIT $FF58 + BIT RTSINST JMP XFER * Create disk file @@ -717,6 +779,18 @@ GPFXPL HEX 01 ; Number of parameters SPFXPL HEX 01 ; Number of parameters DW MOSFILE ; Buffer +GMARKPL HEX 02 ; Number of parameters + DB $00 ; File reference number + DB $00 ; Mark (24 bit) + DB $00 + DB $00 + +GEOFPL HEX 02 ; Number of parameters + DB $00 ; File reference number + DB $00 ; EOF (24 bit) + DB $00 + DB $00 + QUITPL HEX 04 ; Number of parameters DB $00 DW $0000