Merge pull request #174 from apple2geek/system

SYSTEM space reclamation
This commit is contained in:
Bobbi Webber-Manners 2022-10-10 14:17:46 -04:00 committed by GitHub
commit bcdad1f326
4 changed files with 303 additions and 190 deletions

View File

@ -203,15 +203,6 @@ MAINZP MAC
* Code is all included from PUT files below ...
* ... order matters!
PUT MAINMEM.LDR
PUT MAINMEM.MENU
PUT MAINMEM.FSEQU
PUT MAINMEM.INIT
PUT MAINMEM.SVC
PUT MAINMEM.GFX
PUT MAINMEM.PATH
PUT MAINMEM.WILD
PUT MAINMEM.LISTS
PUT MAINMEM.MISC
PUT AUXMEM.MOSEQU
PUT AUXMEM.INIT
PUT AUXMEM.VDU
@ -221,6 +212,15 @@ MAINZP MAC
PUT AUXMEM.BYTWRD
PUT AUXMEM.CHARIO
PUT AUXMEM.MISC
PUT MAINMEM.MENU
PUT MAINMEM.FSEQU
PUT MAINMEM.INIT
PUT MAINMEM.SVC
PUT MAINMEM.GFX
PUT MAINMEM.PATH
PUT MAINMEM.WILD
PUT MAINMEM.LISTS
PUT MAINMEM.MISC
* Automatically save the object file:
SAV APLCORN.SYSTEM

View File

@ -543,8 +543,9 @@ MOSEND
MOSVEND
* Buffer for one 512 byte disk block in aux mem
AUXBLK ASC '**ENDOFCODE**'
DS $200-13
AUXBLK
;ASC '**ENDOFCODE**'
; DS $200-13

View File

@ -111,44 +111,7 @@ DISCONN LDA MACHID
STA DEVADR32+1
DEC DEVCNT
:S1
JMP START
GETPFXPARM HEX 01 ; One parameter
DW CMDPATH ; Get prefix to CMDPATH
UNSUPPORTED JSR HOME
LDX #$00
UNSUPLP LDA UNSUPMSG,X
BEQ UNSUPWAIT
JSR COUT1
INX
BNE UNSUPLP
UNSUPWAIT STA $C010
UNSUPKEY LDA $C000
BPL UNSUPKEY
STA $C010
JSR MLI
DB QUITCMD
DW UNSUPQPARM
UNSUPQPARM DB $04,$00,$00,$00,$00,$00,$00
UNSUPMSG ASC "APPLECORN REQUIRES AN APPLE IIGS, APPLE", 8D
ASC "//C, OR ENHANCED APPLE //E WITH AN", 8D
ASC "80-COLUMN CARD AND AT LEAST 128K", 8D, 8D
ASC "PRESS ANY KEY TO QUIT TO PRODOS", 00
PADDING ASC '***THISISPROTOTYPECODE***'
DS $4000-*
; Original APPLECORN.BIN code starts here
START
JSR ROMMENU
* LDA #>AUXADDR ; Address in aux
* LDX #<AUXADDR
* SEC ; Load into aux
* JSR LOADCODE ; Load lang ROM
JSR ROMMENU ; This really needs to happen elsewhere
LDA #<:FDFILE
STA OPENPL+1
@ -198,155 +161,174 @@ START
LDA #>GSBRK
STA $3F0+1
JSR GFXINIT ; Initialize FDraw graphics
JMP START
TSX ; Save SP at $0100 in aux
>>> ALTZP
STX $0100
>>> MAINZP
>>> XF2AUX,AUXMOS1
* Filenames for loaded binaries - we're gonna address these later
:FDFILE STR "FDRAW.FAST" ; Filename for FDraw lib
:FNTFILE STR "FONT.DAT" ; Filename for bitmap font
GETPFXPARM HEX 01 ; One parameter
DW CMDPATH ; Get prefix to CMDPATH
UNSUPPORTED JSR HOME
LDX #$00
UNSUPLP LDA UNSUPMSG,X
BEQ UNSUPWAIT
JSR COUT1
INX
BNE UNSUPLP
UNSUPWAIT STA $C010
UNSUPKEY LDA $C000
BPL UNSUPKEY
STA $C010
JSR MLI
DB QUITCMD
DW UNSUPQPARM
UNSUPQPARM DB $04,$00,$00,$00,$00,$00,$00
UNSUPMSG ASC "APPLECORN REQUIRES AN APPLE IIGS, APPLE", 8D
ASC "//C, OR ENHANCED APPLE //E WITH AN", 8D
ASC "80-COLUMN CARD AND AT LEAST 128K", 8D, 8D
ASC "PRESS ANY KEY TO QUIT TO PRODOS", 00
ENDSYSTEM
*PADDING DS $4000-*
; Original APPLECORN.BIN code starts here
*START
* LDA #>AUXADDR ; Address in aux
* LDX #<AUXADDR
* SEC ; Load into aux
* JSR LOADCODE ; Load lang ROM
*
* JSR GFXINIT ; Initialize FDraw graphics
*
* TSX ; Save SP at $0100 in aux
* >>> ALTZP
* STX $0100
* >>> MAINZP
* >>> XF2AUX,AUXMOS1
*
* Load image from file into memory
* On entry: OPENPL set up to point to leafname of file to load
* Loads file from directory applecorn started from
* Uses BLKBUF at loading buffer
* Load address in A,X
* Carry set->load to aux, carry clear->load to main
LOADCODE PHP ; Save carry flag
STA :ADDRH ; MSB of load address
STX :ADDRL ; LSB of load address
STZ :BLOCKS
LDX #0
:LP1 LDA CMDPATH+1,X ; Copy Applecorn path to MOSFILE
STA MOSFILE2+1,X
INX
CPX CMDPATH
BCC :LP1
:LP2 DEX
LDA MOSFILE2+1,X
CMP #'/'
BNE :LP2
LDA OPENPL+1
STA A1L
LDA OPENPL+2
STA A1H
LDY #1
LDA (A1L),Y
CMP #'/'
BEQ :L4 ; Already absolute path
:LP3 LDA (A1L),Y
STA MOSFILE2+2,X
INX
INY
TYA
CMP (A1L)
BCC :LP3
BEQ :LP3
INX
STX MOSFILE2+0
LDA #<MOSFILE2 ; Point to absolute path
STA OPENPL+1
LDA #>MOSFILE2
STA OPENPL+2
:L4 JSR OPENFILE ; Open ROM file
BCC :S1
PLP
BCC :L1A ; Load to main, report error
RTS ; Load to aux, return CS=Failed
:L1A LDX #$00
:L1B LDA :CANTOPEN,X ; Part one of error msg
BEQ :S0
JSR COUT1
INX
BRA :L1B
:S0 LDA OPENPL+1 ; Print filename
STA A1L
LDA OPENPL+2
STA A1H
LDY #$00
LDA (A1L),Y
STA :LEN
:L1C CPY :LEN
BEQ :ERR1
INY
LDA (A1L),Y
JSR COUT1
BRA :L1C
:ERR1 JSR CROUT
JSR BELL
:SPIN BRA :SPIN
:S1 LDA OPENPL+5 ; File reference number
STA READPL+1
:L2 PLP
PHP
BCS :L2A ; Loading to aux, skip dots
LDA #'.'+$80 ; Print progress dots
JSR COUT1
:L2A JSR RDFILE ; Read file block by block
BCS :CLOSE ; EOF (0 bytes left) or some error
LDA #<BLKBUF ; Source start addr -> A1L,A1H
STA A1L
LDA #>BLKBUF
STA A1H
LDA #<BLKBUFEND ; Source end addr -> A2L,A2H
STA A2L
LDA #>BLKBUFEND
STA A2H
LDA :ADDRL ; Dest in aux -> A4L, A4H
STA A4L
LDA :ADDRH
LDX :BLOCKS
:L3 CPX #$00
BEQ :S2
INC
INC
DEX
BRA :L3
:S2 STA A4H
PLP ; Recover carry flag
PHP
BCS :TOAUX
JSR MEMCPY ; Destination in main mem
BRA :S3
:TOAUX JSR AUXMOVE ; Carry already set (so to aux)
:S3 INC :BLOCKS
BRA :L2
:CLOSE LDA OPENPL+5 ; File reference number
STA CLSPL+1
JSR CLSFILE
JSR CROUT
PLP
CLC ; CC=Ok
RTS
:ADDRL DB $00 ; Destination address (LSB)
:ADDRH DB $00 ; Destination address (MSB)
:BLOCKS DB $00 ; Counter for blocks read
:LEN DB $00 ; Length of filename
:CANTOPEN ASC "Unable to open "
DB $00
*LOADCODE PHP ; Save carry flag
* STA :ADDRH ; MSB of load address
* STX :ADDRL ; LSB of load address
* STZ :BLOCKS
*
* LDX #0
*:LP1 LDA CMDPATH+1,X ; Copy Applecorn path to MOSFILE
* STA MOSFILE2+1,X
* INX
* CPX CMDPATH
* BCC :LP1
*:LP2 DEX
* LDA MOSFILE2+1,X
* CMP #'/'
* BNE :LP2
* LDA OPENPL+1
* STA A1L
* LDA OPENPL+2
* STA A1H
* LDY #1
* LDA (A1L),Y
* CMP #'/'
* BEQ :L4 ; Already absolute path
*:LP3 LDA (A1L),Y
* STA MOSFILE2+2,X
* INX
* INY
* TYA
* CMP (A1L)
* BCC :LP3
* BEQ :LP3
* INX
* STX MOSFILE2+0
* LDA #<MOSFILE2 ; Point to absolute path
* STA OPENPL+1
* LDA #>MOSFILE2
* STA OPENPL+2
*
*:L4 JSR OPENFILE ; Open ROM file
* BCC :S1
* PLP
* BCC :L1A ; Load to main, report error
* RTS ; Load to aux, return CS=Failed
*:L1A LDX #$00
*:L1B LDA :CANTOPEN,X ; Part one of error msg
* BEQ :S0
* JSR COUT1
* INX
* BRA :L1B
*:S0 LDA OPENPL+1 ; Print filename
* STA A1L
* LDA OPENPL+2
* STA A1H
* LDY #$00
* LDA (A1L),Y
* STA :LEN
*:L1C CPY :LEN
* BEQ :ERR1
* INY
* LDA (A1L),Y
* JSR COUT1
* BRA :L1C
*:ERR1 JSR CROUT
* JSR BELL
*:SPIN BRA :SPIN
*:S1 LDA OPENPL+5 ; File reference number
* STA READPL+1
*:L2 PLP
* PHP
* BCS :L2A ; Loading to aux, skip dots
* LDA #'.'+$80 ; Print progress dots
* JSR COUT1
*:L2A JSR RDFILE ; Read file block by block
* BCS :CLOSE ; EOF (0 bytes left) or some error
* LDA #<BLKBUF ; Source start addr -> A1L,A1H
* STA A1L
* LDA #>BLKBUF
* STA A1H
* LDA #<BLKBUFEND ; Source end addr -> A2L,A2H
* STA A2L
* LDA #>BLKBUFEND
* STA A2H
* LDA :ADDRL ; Dest in aux -> A4L, A4H
* STA A4L
* LDA :ADDRH
* LDX :BLOCKS
*:L3 CPX #$00
* BEQ :S2
* INC
* INC
* DEX
* BRA :L3
*:S2 STA A4H
* PLP ; Recover carry flag
* PHP
* BCS :TOAUX
* JSR MEMCPY ; Destination in main mem
* BRA :S3
*:TOAUX JSR AUXMOVE ; Carry already set (so to aux)
*:S3 INC :BLOCKS
* BRA :L2
*:CLOSE LDA OPENPL+5 ; File reference number
* STA CLSPL+1
* JSR CLSFILE
* JSR CROUT
* PLP
* CLC ; CC=Ok
* RTS
*:ADDRL DB $00 ; Destination address (LSB)
*:ADDRH DB $00 ; Destination address (MSB)
*:BLOCKS DB $00 ; Counter for blocks read
*:LEN DB $00 ; Length of filename
*:CANTOPEN ASC "Unable to open "
* DB $00

View File

@ -5,11 +5,20 @@
* 13-Nov-2021 List of selected ROMs kept locally.
ORG ENDSYSTEM+ENDVEC-AUXMOS+MOSEND-MOSAPI+2
ROMTOTL EQU $0382 ; Prevent name clash
ROMTHIS EQU $0383
ROMADDRS EQU $0384 ; List of ROM filename addresses
START JSR GFXINIT ; Initialize FDraw graphics
TSX ; Save SP at $0100 in aux
>>> ALTZP
STX $0100
>>> MAINZP
>>> XF2AUX,AUXMOS1
ROMMENU JSR HOME ; Clear screen
LDX #0
:LP0 LDA TITLE1,X ; Print title
@ -137,6 +146,127 @@ ROM9 STR "VIEWA3.0.ROM"
USERSEL DB $00
* Load image from file into memory
* On entry: OPENPL set up to point to leafname of file to load
* Loads file from directory applecorn started from
* Uses BLKBUF at loading buffer
* Load address in A,X
* Carry set->load to aux, carry clear->load to main
LOADCODE PHP ; Save carry flag
STA :ADDRH ; MSB of load address
STX :ADDRL ; LSB of load address
STZ :BLOCKS
LDX #0
:LP1 LDA CMDPATH+1,X ; Copy Applecorn path to MOSFILE
STA MOSFILE2+1,X
INX
CPX CMDPATH
BCC :LP1
:LP2 DEX
LDA MOSFILE2+1,X
CMP #'/'
BNE :LP2
LDA OPENPL+1
STA A1L
LDA OPENPL+2
STA A1H
LDY #1
LDA (A1L),Y
CMP #'/'
BEQ :L4 ; Already absolute path
:LP3 LDA (A1L),Y
STA MOSFILE2+2,X
INX
INY
TYA
CMP (A1L)
BCC :LP3
BEQ :LP3
INX
STX MOSFILE2+0
LDA #<MOSFILE2 ; Point to absolute path
STA OPENPL+1
LDA #>MOSFILE2
STA OPENPL+2
:L4 JSR OPENFILE ; Open ROM file
BCC :S1
PLP
BCC :L1A ; Load to main, report error
RTS ; Load to aux, return CS=Failed
:L1A LDX #$00
:L1B LDA :CANTOPEN,X ; Part one of error msg
BEQ :S0
JSR COUT1
INX
BRA :L1B
:S0 LDA OPENPL+1 ; Print filename
STA A1L
LDA OPENPL+2
STA A1H
LDY #$00
LDA (A1L),Y
STA :LEN
:L1C CPY :LEN
BEQ :ERR1
INY
LDA (A1L),Y
JSR COUT1
BRA :L1C
:ERR1 JSR CROUT
JSR BELL
:SPIN BRA :SPIN
:S1 LDA OPENPL+5 ; File reference number
STA READPL+1
:L2 PLP
PHP
BCS :L2A ; Loading to aux, skip dots
LDA #'.'+$80 ; Print progress dots
JSR COUT1
:L2A JSR RDFILE ; Read file block by block
BCS :CLOSE ; EOF (0 bytes left) or some error
LDA #<BLKBUF ; Source start addr -> A1L,A1H
STA A1L
LDA #>BLKBUF
STA A1H
LDA #<BLKBUFEND ; Source end addr -> A2L,A2H
STA A2L
LDA #>BLKBUFEND
STA A2H
LDA :ADDRL ; Dest in aux -> A4L, A4H
STA A4L
LDA :ADDRH
LDX :BLOCKS
:L3 CPX #$00
BEQ :S2
INC
INC
DEX
BRA :L3
:S2 STA A4H
PLP ; Recover carry flag
PHP
BCS :TOAUX
JSR MEMCPY ; Destination in main mem
BRA :S3
:TOAUX JSR AUXMOVE ; Carry already set (so to aux)
:S3 INC :BLOCKS
BRA :L2
:CLOSE LDA OPENPL+5 ; File reference number
STA CLSPL+1
JSR CLSFILE
JSR CROUT
PLP
CLC ; CC=Ok
RTS
:ADDRL DB $00 ; Destination address (LSB)
:ADDRH DB $00 ; Destination address (MSB)
:BLOCKS DB $00 ; Counter for blocks read
:LEN DB $00 ; Length of filename
:CANTOPEN ASC "Unable to open "
DB $00