Further cleanup

This commit is contained in:
Bobbi Webber-Manners 2021-07-31 17:33:08 -04:00
parent aa992200c0
commit 3781e74425
3 changed files with 30 additions and 95 deletions

Binary file not shown.

View File

@ -122,6 +122,16 @@ XFRECVR MAC
PLA PLA
EOM EOM
* Macro called on entry to main memory
ENTMAIN MAC
LDX $0100 ; Recover SP
TXS
PHA ; Preserve parm in A
LDA $C081 ; Bank in ROM
LDA $C081
PLA
EOM
* Code is all included from PUT files below ... * Code is all included from PUT files below ...
PUT LOADER PUT LOADER
PUT MAINMEM PUT MAINMEM

115
mainmem.s
View File

@ -1,8 +1,9 @@
* MAINMEM.S * MAINMEM.S
* (c) Bobbi 2021 GPL v3 * (c) Bobbi 2021 GPL v3
* Code that runs on the Apple //e in main memory *
* Code that runs on the Apple //e in main memory.
* This code is mostly glue between the BBC Micro code * This code is mostly glue between the BBC Micro code
* running in aux mem and ProDOS * which runs in aux mem and Apple II ProDOS.
* Set prefix if not already set * Set prefix if not already set
SETPRFX LDA #GPFXCMD SETPRFX LDA #GPFXCMD
@ -107,14 +108,8 @@ COPYAUXBLK
* ProDOS file handling for MOS OSFIND OPEN call * ProDOS file handling for MOS OSFIND OPEN call
* Options in A: $40 'r', $80 'w', $C0 'rw' * Options in A: $40 'r', $80 'w', $C0 'rw'
OFILE LDX $0100 ; Recover SP OFILE >>> ENTMAIN
TXS PHA ; Preserve arg for later
PHA ; Option
LDA $C081 ; ROM, please
LDA $C081
PLA ; Get option back
PHA
CMP #$80 ; Write mode CMP #$80 ; Write mode
BNE :S0 BNE :S0
@ -187,37 +182,27 @@ OFILE LDX $0100 ; Recover SP
DW OPENPL2 DW OPENPL2
BCS :NOTFND BCS :NOTFND
LDA OPENPL2+5 ; File ref number LDA OPENPL2+5 ; File ref number
PHA
LDX BUFIDX LDX BUFIDX
CPX #$FF CPX #$FF
BEQ FINDEXIT BEQ FINDEXIT
STA FILEREFS,X ; Record ref number STA FILEREFS,X ; Record the ref number
BRA FINDEXIT BRA FINDEXIT
:NOTFND LDA #$00 :NOTFND LDA #$00
PHA
FINDEXIT >>> XFADDR,OSFINDRET FINDEXIT >>> XFADDR,OSFINDRET
PLA
>>> XFAUX >>> XFAUX
BUFIDX DB $00 BUFIDX DB $00
* ProDOS file handling for MOS OSFIND CLOSE call * ProDOS file handling for MOS OSFIND CLOSE call
CFILE LDX $0100 ; Recover SP CFILE >>> ENTMAIN
TXS
LDA $C081 ; ROM, please
LDA $C081
LDA MOSFILE ; File ref number LDA MOSFILE ; File ref number
STA CLSPL+1 STA CLSPL+1
JSR CLSFILE JSR CLSFILE
LDA MOSFILE LDA MOSFILE
JSR FINDBUF JSR FINDBUF
CPX #$FF CPX #$FF
BEQ :S1 BEQ :S1
LDA #$00 LDA #$00
STA FILEREFS,X STA FILEREFS,X
:S1 JMP FINDEXIT :S1 JMP FINDEXIT
* Map of file reference numbers to IOBUF1..4 * Map of file reference numbers to IOBUF1..4
@ -235,11 +220,7 @@ FINDBUF LDX #$00
* ProDOS file handling for MOS OSBGET call * ProDOS file handling for MOS OSBGET call
* Returns with char read in A and error num in X (or 0) * Returns with char read in A and error num in X (or 0)
FILEGET LDX $0100 ; Recover SP FILEGET >>> ENTMAIN
TXS
LDA $C081 ; ROM, please
LDA $C081
LDA MOSFILE ; File ref number LDA MOSFILE ; File ref number
STA READPL2+1 STA READPL2+1
JSR MLI JSR MLI
@ -247,21 +228,16 @@ FILEGET LDX $0100 ; Recover SP
DW READPL2 DW READPL2
BCC :NOERR BCC :NOERR
TAY ; Error number in Y TAY ; Error number in Y
BRA GETEXIT BRA :EXIT
:NOERR LDX #$00 :NOERR LDX #$00
LDA BLKBUF LDA BLKBUF
PHA :EXIT >>> XFADDR,OSBGETRET
GETEXIT >>> XFADDR,OSBGETRET
PLA
>>> XFAUX >>> XFAUX
* ProDOS file handling for MOS OSBPUT call * ProDOS file handling for MOS OSBPUT call
* Enters with char to write in A * Enters with char to write in A
FILEPUT LDX $0100 ; Recover SP FILEPUT >>> ENTMAIN
TXS
STA BLKBUF ; Char to write STA BLKBUF ; Char to write
LDA $C081 ; ROM, please
LDA $C081
LDA MOSFILE ; File ref number LDA MOSFILE ; File ref number
STA WRITEPL+1 STA WRITEPL+1
@ -270,18 +246,12 @@ FILEPUT LDX $0100 ; Recover SP
LDA #$00 LDA #$00
STA WRITEPL+5 STA WRITEPL+5
JSR WRTFILE JSR WRTFILE
* There is no way to report an error it seems!
>>> XFADDR,OSBPUTRET >>> XFADDR,OSBPUTRET
>>> XFAUX >>> XFAUX
* ProDOS file handling for OSBYTE $7F EOF * ProDOS file handling for OSBYTE $7F EOF
* Returns EOF status in A ($FF for EOF, $00 otherwise) * Returns EOF status in A ($FF for EOF, $00 otherwise)
FILEEOF LDX $0100 ; Recover SP FILEEOF >>> ENTMAIN
TXS
LDA $C081 ; ROM, please
LDA $C081
LDA MOSFILE ; File ref number LDA MOSFILE ; File ref number
STA GEOFPL+1 STA GEOFPL+1
@ -316,24 +286,17 @@ FILEEOF LDX $0100 ; Recover SP
:ISEOF LDA #$FF :ISEOF LDA #$FF
BRA :EXIT BRA :EXIT
:NOTEOF LDA #$00 :NOTEOF LDA #$00
:EXIT PHA ; Preserve return code :EXIT >>> XFADDR,CHKEOFRET
>>> XFADDR,CHKEOFRET
PLA ; Recover return code
>>> XFAUX >>> XFAUX
:REMAIN DS 3 ; Remaining bytes :REMAIN DS 3 ; Remaining bytes
* ProDOS file handling for OSARGS flush commands * ProDOS file handling for OSARGS flush commands
FLUSH LDX $0100 ; Recover SP FLUSH >>> ENTMAIN
TXS
LDA $C081 ; ROM, please
LDA $C081
LDA MOSFILE ; File ref number LDA MOSFILE ; File ref number
STA FLSHPL+1 STA FLSHPL+1
JSR MLI JSR MLI
DB FLSHCMD DB FLSHCMD
DW FLSHPL DW FLSHPL
>>> XFADDR,OSARGSRET >>> XFADDR,OSARGSRET
>>> XFAUX >>> XFAUX
@ -341,11 +304,7 @@ FLUSH LDX $0100 ; Recover SP
* Return A=0 if successful * Return A=0 if successful
* A=1 if file not found * A=1 if file not found
* A=2 if read error * A=2 if read error
LOADFILE LDX $0100 ; Recover SP LOADFILE >>> ENTMAIN
TXS
LDA $C081 ; Gimme the ROM!
LDA $C081
STZ :BLOCKS STZ :BLOCKS
LDA #<MOSFILE LDA #<MOSFILE
STA OPENPL+1 STA OPENPL+1
@ -360,17 +319,14 @@ LOADFILE LDX $0100 ; Recover SP
CMP #$4C ; EOF CMP #$4C ; EOF
BEQ :EOF BEQ :EOF
BRA :READERR BRA :READERR
:S1 LDA #<BLKBUF :S1 LDA #<BLKBUF
STA A1L STA A1L
LDA #>BLKBUF LDA #>BLKBUF
STA A1H STA A1H
LDA #<BLKBUFEND LDA #<BLKBUFEND
STA A2L STA A2L
LDA #>BLKBUFEND LDA #>BLKBUFEND
STA A2H STA A2H
LDA FBLOAD LDA FBLOAD
STA A4L STA A4L
LDA FBLOAD+1 LDA FBLOAD+1
@ -382,26 +338,20 @@ LOADFILE LDX $0100 ; Recover SP
DEX DEX
BRA :L2 BRA :L2
:S2 STA A4H :S2 STA A4H
SEC ; Main -> AUX SEC ; Main -> AUX
JSR AUXMOVE JSR AUXMOVE
INC :BLOCKS INC :BLOCKS
BRA :L1 BRA :L1
:NOTFND LDA #$01 ; Nothing found :NOTFND LDA #$01 ; Nothing found
PHA PHA
BRA :EXIT BRA :EXIT
:READERR LDA #$02 ; Read error :READERR LDA #$02 ; Read error
PHA
BRA :EOF2 BRA :EOF2
:EOF LDA #$00 ; Success :EOF LDA #$00 ; Success
PHA
:EOF2 LDA OPENPL+5 ; File ref num :EOF2 LDA OPENPL+5 ; File ref num
STA CLSPL+1 STA CLSPL+1
JSR CLSFILE JSR CLSFILE
:EXIT >>> XFADDR,OSFILERET :EXIT >>> XFADDR,OSFILERET
PLA
>>> XFAUX >>> XFAUX
:BLOCKS DB $00 :BLOCKS DB $00
@ -409,11 +359,7 @@ LOADFILE LDX $0100 ; Recover SP
* Return A=0 if successful * Return A=0 if successful
* A=1 if unable to create/open * A=1 if unable to create/open
* A=2 if error during save * A=2 if error during save
SAVEFILE LDX $0100 ; Recover SP SAVEFILE >>> ENTMAIN
TXS
LDA $C081 ; Gimme the ROM!
LDA $C081
LDA #<MOSFILE ; Attempt to destroy file LDA #<MOSFILE ; Attempt to destroy file
STA DESTPL+1 STA DESTPL+1
LDA #>MOSFILE LDA #>MOSFILE
@ -421,7 +367,6 @@ SAVEFILE LDX $0100 ; Recover SP
JSR MLI JSR MLI
DB DESTCMD DB DESTCMD
DW DESTPL DW DESTPL
STZ :BLOCKS STZ :BLOCKS
LDA #<MOSFILE LDA #<MOSFILE
STA CREATEPL+1 STA CREATEPL+1
@ -451,7 +396,6 @@ SAVEFILE LDX $0100 ; Recover SP
BCS :FWD1 ; :CANTOPEN error BCS :FWD1 ; :CANTOPEN error
JSR OPENFILE JSR OPENFILE
BCS :FWD1 ; :CANTOPEN error BCS :FWD1 ; :CANTOPEN error
SEC ; Compute file length SEC ; Compute file length
LDA FBEND LDA FBEND
SBC FBSTRT SBC FBSTRT
@ -459,7 +403,6 @@ SAVEFILE LDX $0100 ; Recover SP
LDA FBEND+1 LDA FBEND+1
SBC FBSTRT+1 SBC FBSTRT+1
STA :LEN+1 STA :LEN+1
:L1 LDA FBSTRT ; Setup for first block :L1 LDA FBSTRT ; Setup for first block
STA A1L STA A1L
STA A2L STA A2L
@ -489,7 +432,6 @@ SAVEFILE LDX $0100 ; Recover SP
:S1 LDA :LEN+1 ; MSB of length remaining :S1 LDA :LEN+1 ; MSB of length remaining
CMP #$02 CMP #$02
BCS :S2 ; MSB of len >= 2 (not last) BCS :S2 ; MSB of len >= 2 (not last)
CMP #$00 ; If no bytes left ... CMP #$00 ; If no bytes left ...
BNE :S3 BNE :S3
LDA :LEN LDA :LEN
@ -548,9 +490,7 @@ SAVEFILE LDX $0100 ; Recover SP
LDA #$00 ; Success! LDA #$00 ; Success!
BCC :EXIT ; If close OK BCC :EXIT ; If close OK
LDA #$02 ; Write error LDA #$02 ; Write error
:EXIT PHA :EXIT >>> XFADDR,OSFILERET
>>> XFADDR,OSFILERET
PLA
>>> XFAUX >>> XFAUX
:LEN DW $0000 :LEN DW $0000
:BLOCKS DB $00 :BLOCKS DB $00
@ -564,10 +504,7 @@ QUIT INC $3F4 ; Invalidate powerup byte
RTS RTS
* Obtain catalog of current PREFIX dir * Obtain catalog of current PREFIX dir
CATALOG LDX $0100 ; Recover SP CATALOG >>> ENTMAIN
TXS
LDA $C081 ; Select ROM
LDA $C081
JSR MLI ; Fetch prefix into BLKBUF JSR MLI ; Fetch prefix into BLKBUF
DB GPFXCMD DB GPFXCMD
@ -589,40 +526,28 @@ CATREENTRY
CMP #$4C ; EOF CMP #$4C ; EOF
BEQ :EOF BEQ :EOF
BRA :READERR BRA :READERR
:S1 JSR COPYAUXBLK :S1 JSR COPYAUXBLK
>>> XFADDR,PRONEBLK >>> XFADDR,PRONEBLK
>>> XFAUX >>> XFAUX
:READERR :READERR
:EOF LDA OPENPL+5 ; File ref num :EOF LDA OPENPL+5 ; File ref num
STA CLSPL+1 STA CLSPL+1
JSR CLSFILE JSR CLSFILE
CATEXIT >>> XFADDR,STARCATRET CATEXIT >>> XFADDR,STARCATRET
PLA
>>> XFAUX >>> XFAUX
* PRONEBLK call returns here ... * PRONEBLK call returns here ...
CATALOGRET CATALOGRET
LDX #0100 ; Recover SP >>> ENTMAIN
TXS
LDA $C081 ; ROM please
LDA $C081
BRA CATREENTRY BRA CATREENTRY
* Set the prefix * Set the prefix
SETPFX LDX $0100 ; Recover SP SETPFX >>> ENTMAIN
TXS
LDA $C081 ; ROM, ta!
LDA $C081
JSR MLI JSR MLI
DB SPFXCMD DB SPFXCMD
DW SPFXPL DW SPFXPL
BCC :S1 BCC :S1
JSR BELL ; Beep on error JSR BELL ; Beep on error
:S1 >>> XFADDR,STARDIRRET :S1 >>> XFADDR,STARDIRRET
>>> XFAUX >>> XFAUX