diff --git a/applecorn.po b/applecorn.po index 1251e15..82055d1 100644 Binary files a/applecorn.po and b/applecorn.po differ diff --git a/applecorn.s b/applecorn.s index e42c3d3..2421fbc 100644 --- a/applecorn.s +++ b/applecorn.s @@ -122,6 +122,16 @@ XFRECVR MAC PLA 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 ... PUT LOADER PUT MAINMEM diff --git a/mainmem.s b/mainmem.s index 1a22304..3e1f2e0 100644 --- a/mainmem.s +++ b/mainmem.s @@ -1,8 +1,9 @@ * MAINMEM.S * (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 -* running in aux mem and ProDOS +* which runs in aux mem and Apple II ProDOS. * Set prefix if not already set SETPRFX LDA #GPFXCMD @@ -107,14 +108,8 @@ COPYAUXBLK * ProDOS file handling for MOS OSFIND OPEN call * Options in A: $40 'r', $80 'w', $C0 'rw' -OFILE LDX $0100 ; Recover SP - TXS - PHA ; Option - LDA $C081 ; ROM, please - LDA $C081 - - PLA ; Get option back - PHA +OFILE >>> ENTMAIN + PHA ; Preserve arg for later CMP #$80 ; Write mode BNE :S0 @@ -187,37 +182,27 @@ OFILE LDX $0100 ; Recover SP DW OPENPL2 BCS :NOTFND LDA OPENPL2+5 ; File ref number - PHA LDX BUFIDX CPX #$FF BEQ FINDEXIT - STA FILEREFS,X ; Record ref number + STA FILEREFS,X ; Record the ref number BRA FINDEXIT :NOTFND LDA #$00 - PHA FINDEXIT >>> XFADDR,OSFINDRET - PLA >>> XFAUX BUFIDX DB $00 * ProDOS file handling for MOS OSFIND CLOSE call -CFILE LDX $0100 ; Recover SP - TXS - LDA $C081 ; ROM, please - LDA $C081 - +CFILE >>> ENTMAIN LDA MOSFILE ; File ref number STA CLSPL+1 JSR CLSFILE - LDA MOSFILE JSR FINDBUF CPX #$FF BEQ :S1 - LDA #$00 STA FILEREFS,X - :S1 JMP FINDEXIT * Map of file reference numbers to IOBUF1..4 @@ -235,11 +220,7 @@ FINDBUF LDX #$00 * ProDOS file handling for MOS OSBGET call * Returns with char read in A and error num in X (or 0) -FILEGET LDX $0100 ; Recover SP - TXS - LDA $C081 ; ROM, please - LDA $C081 - +FILEGET >>> ENTMAIN LDA MOSFILE ; File ref number STA READPL2+1 JSR MLI @@ -247,21 +228,16 @@ FILEGET LDX $0100 ; Recover SP DW READPL2 BCC :NOERR TAY ; Error number in Y - BRA GETEXIT + BRA :EXIT :NOERR LDX #$00 LDA BLKBUF - PHA -GETEXIT >>> XFADDR,OSBGETRET - PLA +:EXIT >>> XFADDR,OSBGETRET >>> XFAUX * ProDOS file handling for MOS OSBPUT call * Enters with char to write in A -FILEPUT LDX $0100 ; Recover SP - TXS +FILEPUT >>> ENTMAIN STA BLKBUF ; Char to write - LDA $C081 ; ROM, please - LDA $C081 LDA MOSFILE ; File ref number STA WRITEPL+1 @@ -270,18 +246,12 @@ FILEPUT LDX $0100 ; Recover SP LDA #$00 STA WRITEPL+5 JSR WRTFILE - -* There is no way to report an error it seems! - >>> XFADDR,OSBPUTRET >>> XFAUX * 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 +FILEEOF >>> ENTMAIN LDA MOSFILE ; File ref number STA GEOFPL+1 @@ -316,24 +286,17 @@ FILEEOF LDX $0100 ; Recover SP :ISEOF LDA #$FF BRA :EXIT :NOTEOF LDA #$00 -:EXIT PHA ; Preserve return code - >>> XFADDR,CHKEOFRET - PLA ; Recover return code +:EXIT >>> XFADDR,CHKEOFRET >>> XFAUX :REMAIN DS 3 ; Remaining bytes * ProDOS file handling for OSARGS flush commands -FLUSH LDX $0100 ; Recover SP - TXS - LDA $C081 ; ROM, please - LDA $C081 - +FLUSH >>> ENTMAIN LDA MOSFILE ; File ref number STA FLSHPL+1 JSR MLI DB FLSHCMD DW FLSHPL - >>> XFADDR,OSARGSRET >>> XFAUX @@ -341,11 +304,7 @@ FLUSH LDX $0100 ; Recover SP * Return A=0 if successful * A=1 if file not found * A=2 if read error -LOADFILE LDX $0100 ; Recover SP - TXS - LDA $C081 ; Gimme the ROM! - LDA $C081 - +LOADFILE >>> ENTMAIN STZ :BLOCKS LDA #BLKBUF STA A1H - LDA #BLKBUFEND STA A2H - LDA FBLOAD STA A4L LDA FBLOAD+1 @@ -382,26 +338,20 @@ LOADFILE LDX $0100 ; Recover SP DEX BRA :L2 :S2 STA A4H - SEC ; Main -> AUX JSR AUXMOVE - INC :BLOCKS BRA :L1 - :NOTFND LDA #$01 ; Nothing found PHA BRA :EXIT :READERR LDA #$02 ; Read error - PHA BRA :EOF2 :EOF LDA #$00 ; Success - PHA :EOF2 LDA OPENPL+5 ; File ref num STA CLSPL+1 JSR CLSFILE :EXIT >>> XFADDR,OSFILERET - PLA >>> XFAUX :BLOCKS DB $00 @@ -409,11 +359,7 @@ LOADFILE LDX $0100 ; Recover SP * Return A=0 if successful * A=1 if unable to create/open * A=2 if error during save -SAVEFILE LDX $0100 ; Recover SP - TXS - LDA $C081 ; Gimme the ROM! - LDA $C081 - +SAVEFILE >>> ENTMAIN LDA #MOSFILE @@ -421,7 +367,6 @@ SAVEFILE LDX $0100 ; Recover SP JSR MLI DB DESTCMD DW DESTPL - STZ :BLOCKS LDA #= 2 (not last) - CMP #$00 ; If no bytes left ... BNE :S3 LDA :LEN @@ -548,9 +490,7 @@ SAVEFILE LDX $0100 ; Recover SP LDA #$00 ; Success! BCC :EXIT ; If close OK LDA #$02 ; Write error -:EXIT PHA - >>> XFADDR,OSFILERET - PLA +:EXIT >>> XFADDR,OSFILERET >>> XFAUX :LEN DW $0000 :BLOCKS DB $00 @@ -564,10 +504,7 @@ QUIT INC $3F4 ; Invalidate powerup byte RTS * Obtain catalog of current PREFIX dir -CATALOG LDX $0100 ; Recover SP - TXS - LDA $C081 ; Select ROM - LDA $C081 +CATALOG >>> ENTMAIN JSR MLI ; Fetch prefix into BLKBUF DB GPFXCMD @@ -589,40 +526,28 @@ CATREENTRY CMP #$4C ; EOF BEQ :EOF BRA :READERR - :S1 JSR COPYAUXBLK - >>> XFADDR,PRONEBLK >>> XFAUX - :READERR :EOF LDA OPENPL+5 ; File ref num STA CLSPL+1 JSR CLSFILE - CATEXIT >>> XFADDR,STARCATRET - PLA >>> XFAUX * PRONEBLK call returns here ... CATALOGRET - LDX #0100 ; Recover SP - TXS - LDA $C081 ; ROM please - LDA $C081 + >>> ENTMAIN BRA CATREENTRY * Set the prefix -SETPFX LDX $0100 ; Recover SP - TXS - LDA $C081 ; ROM, ta! - LDA $C081 +SETPFX >>> ENTMAIN JSR MLI DB SPFXCMD DW SPFXPL BCC :S1 JSR BELL ; Beep on error - :S1 >>> XFADDR,STARDIRRET >>> XFAUX