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 ... * Code is all included from PUT files below ...
* ... order matters! * ... order matters!
PUT MAINMEM.LDR 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.MOSEQU
PUT AUXMEM.INIT PUT AUXMEM.INIT
PUT AUXMEM.VDU PUT AUXMEM.VDU
@ -221,6 +212,15 @@ MAINZP MAC
PUT AUXMEM.BYTWRD PUT AUXMEM.BYTWRD
PUT AUXMEM.CHARIO PUT AUXMEM.CHARIO
PUT AUXMEM.MISC 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: * Automatically save the object file:
SAV APLCORN.SYSTEM SAV APLCORN.SYSTEM

View File

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

View File

@ -111,44 +111,7 @@ DISCONN LDA MACHID
STA DEVADR32+1 STA DEVADR32+1
DEC DEVCNT DEC DEVCNT
:S1 :S1
JMP START JSR ROMMENU ; This really needs to happen elsewhere
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
LDA #<:FDFILE LDA #<:FDFILE
STA OPENPL+1 STA OPENPL+1
@ -198,155 +161,174 @@ START
LDA #>GSBRK LDA #>GSBRK
STA $3F0+1 STA $3F0+1
JSR GFXINIT ; Initialize FDraw graphics JMP START
TSX ; Save SP at $0100 in aux * Filenames for loaded binaries - we're gonna address these later
>>> ALTZP
STX $0100
>>> MAINZP
>>> XF2AUX,AUXMOS1
:FDFILE STR "FDRAW.FAST" ; Filename for FDraw lib :FDFILE STR "FDRAW.FAST" ; Filename for FDraw lib
:FNTFILE STR "FONT.DAT" ; Filename for bitmap font :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 * Load image from file into memory
* On entry: OPENPL set up to point to leafname of file to load * On entry: OPENPL set up to point to leafname of file to load
* Loads file from directory applecorn started from * Loads file from directory applecorn started from
* Uses BLKBUF at loading buffer * Uses BLKBUF at loading buffer
* Load address in A,X * Load address in A,X
* Carry set->load to aux, carry clear->load to main * Carry set->load to aux, carry clear->load to main
LOADCODE PHP ; Save carry flag *LOADCODE PHP ; Save carry flag
STA :ADDRH ; MSB of load address * STA :ADDRH ; MSB of load address
STX :ADDRL ; LSB of load address * STX :ADDRL ; LSB of load address
STZ :BLOCKS * STZ :BLOCKS
*
LDX #0 * LDX #0
:LP1 LDA CMDPATH+1,X ; Copy Applecorn path to MOSFILE *:LP1 LDA CMDPATH+1,X ; Copy Applecorn path to MOSFILE
STA MOSFILE2+1,X * STA MOSFILE2+1,X
INX * INX
CPX CMDPATH * CPX CMDPATH
BCC :LP1 * BCC :LP1
:LP2 DEX *:LP2 DEX
LDA MOSFILE2+1,X * LDA MOSFILE2+1,X
CMP #'/' * CMP #'/'
BNE :LP2 * BNE :LP2
LDA OPENPL+1 * LDA OPENPL+1
STA A1L * STA A1L
LDA OPENPL+2 * LDA OPENPL+2
STA A1H * STA A1H
LDY #1 * LDY #1
LDA (A1L),Y * LDA (A1L),Y
CMP #'/' * CMP #'/'
BEQ :L4 ; Already absolute path * BEQ :L4 ; Already absolute path
:LP3 LDA (A1L),Y *:LP3 LDA (A1L),Y
STA MOSFILE2+2,X * STA MOSFILE2+2,X
INX * INX
INY * INY
TYA * TYA
CMP (A1L) * CMP (A1L)
BCC :LP3 * BCC :LP3
BEQ :LP3 * BEQ :LP3
INX * INX
STX MOSFILE2+0 * STX MOSFILE2+0
LDA #<MOSFILE2 ; Point to absolute path * LDA #<MOSFILE2 ; Point to absolute path
STA OPENPL+1 * STA OPENPL+1
LDA #>MOSFILE2 * LDA #>MOSFILE2
STA OPENPL+2 * STA OPENPL+2
*
:L4 JSR OPENFILE ; Open ROM file *:L4 JSR OPENFILE ; Open ROM file
BCC :S1 * BCC :S1
PLP * PLP
BCC :L1A ; Load to main, report error * BCC :L1A ; Load to main, report error
RTS ; Load to aux, return CS=Failed * RTS ; Load to aux, return CS=Failed
:L1A LDX #$00 *:L1A LDX #$00
:L1B LDA :CANTOPEN,X ; Part one of error msg *:L1B LDA :CANTOPEN,X ; Part one of error msg
BEQ :S0 * BEQ :S0
JSR COUT1 * JSR COUT1
INX * INX
BRA :L1B * BRA :L1B
:S0 LDA OPENPL+1 ; Print filename *:S0 LDA OPENPL+1 ; Print filename
STA A1L * STA A1L
LDA OPENPL+2 * LDA OPENPL+2
STA A1H * STA A1H
LDY #$00 * LDY #$00
LDA (A1L),Y * LDA (A1L),Y
STA :LEN * STA :LEN
:L1C CPY :LEN *:L1C CPY :LEN
BEQ :ERR1 * BEQ :ERR1
INY * INY
LDA (A1L),Y * LDA (A1L),Y
JSR COUT1 * JSR COUT1
BRA :L1C * BRA :L1C
:ERR1 JSR CROUT *:ERR1 JSR CROUT
JSR BELL * JSR BELL
:SPIN BRA :SPIN *:SPIN BRA :SPIN
:S1 LDA OPENPL+5 ; File reference number *:S1 LDA OPENPL+5 ; File reference number
STA READPL+1 * STA READPL+1
:L2 PLP *:L2 PLP
PHP * PHP
BCS :L2A ; Loading to aux, skip dots * BCS :L2A ; Loading to aux, skip dots
LDA #'.'+$80 ; Print progress dots * LDA #'.'+$80 ; Print progress dots
JSR COUT1 * JSR COUT1
:L2A JSR RDFILE ; Read file block by block *:L2A JSR RDFILE ; Read file block by block
BCS :CLOSE ; EOF (0 bytes left) or some error * BCS :CLOSE ; EOF (0 bytes left) or some error
LDA #<BLKBUF ; Source start addr -> A1L,A1H * LDA #<BLKBUF ; Source start addr -> A1L,A1H
STA A1L * STA A1L
LDA #>BLKBUF * LDA #>BLKBUF
STA A1H * STA A1H
LDA #<BLKBUFEND ; Source end addr -> A2L,A2H * LDA #<BLKBUFEND ; Source end addr -> A2L,A2H
STA A2L * STA A2L
LDA #>BLKBUFEND * LDA #>BLKBUFEND
STA A2H * STA A2H
LDA :ADDRL ; Dest in aux -> A4L, A4H * LDA :ADDRL ; Dest in aux -> A4L, A4H
STA A4L * STA A4L
LDA :ADDRH * LDA :ADDRH
LDX :BLOCKS * LDX :BLOCKS
:L3 CPX #$00 *:L3 CPX #$00
BEQ :S2 * BEQ :S2
INC * INC
INC * INC
DEX * DEX
BRA :L3 * BRA :L3
:S2 STA A4H *:S2 STA A4H
PLP ; Recover carry flag * PLP ; Recover carry flag
PHP * PHP
BCS :TOAUX * BCS :TOAUX
JSR MEMCPY ; Destination in main mem * JSR MEMCPY ; Destination in main mem
BRA :S3 * BRA :S3
:TOAUX JSR AUXMOVE ; Carry already set (so to aux) *:TOAUX JSR AUXMOVE ; Carry already set (so to aux)
:S3 INC :BLOCKS *:S3 INC :BLOCKS
BRA :L2 * BRA :L2
:CLOSE LDA OPENPL+5 ; File reference number *:CLOSE LDA OPENPL+5 ; File reference number
STA CLSPL+1 * STA CLSPL+1
JSR CLSFILE * JSR CLSFILE
JSR CROUT * JSR CROUT
PLP * PLP
CLC ; CC=Ok * CLC ; CC=Ok
RTS * RTS
:ADDRL DB $00 ; Destination address (LSB) *:ADDRL DB $00 ; Destination address (LSB)
:ADDRH DB $00 ; Destination address (MSB) *:ADDRH DB $00 ; Destination address (MSB)
:BLOCKS DB $00 ; Counter for blocks read *:BLOCKS DB $00 ; Counter for blocks read
:LEN DB $00 ; Length of filename *:LEN DB $00 ; Length of filename
:CANTOPEN ASC "Unable to open " *:CANTOPEN ASC "Unable to open "
DB $00 * DB $00

View File

@ -5,11 +5,20 @@
* 13-Nov-2021 List of selected ROMs kept locally. * 13-Nov-2021 List of selected ROMs kept locally.
ORG ENDSYSTEM+ENDVEC-AUXMOS+MOSEND-MOSAPI+2
ROMTOTL EQU $0382 ; Prevent name clash ROMTOTL EQU $0382 ; Prevent name clash
ROMTHIS EQU $0383 ROMTHIS EQU $0383
ROMADDRS EQU $0384 ; List of ROM filename addresses 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 ROMMENU JSR HOME ; Clear screen
LDX #0 LDX #0
:LP0 LDA TITLE1,X ; Print title :LP0 LDA TITLE1,X ; Print title
@ -137,6 +146,127 @@ ROM9 STR "VIEWA3.0.ROM"
USERSEL DB $00 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