mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-09-30 20:55:29 +00:00
Re-order files so MOSSHIM block occupies HGR1 during load/initialize process.
This eliminates the gap/slack space between the .SYSTEM stub loader and the MAIN memory resident code.
This commit is contained in:
parent
6f6e03060e
commit
d0ad3dde43
18
applecorn.s
18
applecorn.s
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
251
mainmem.ldr.s
251
mainmem.ldr.s
@ -193,141 +193,142 @@ UNSUPMSG ASC "APPLECORN REQUIRES AN APPLE IIGS, APPLE", 8D
|
|||||||
ASC "80-COLUMN CARD AND AT LEAST 128K", 8D, 8D
|
ASC "80-COLUMN CARD AND AT LEAST 128K", 8D, 8D
|
||||||
ASC "PRESS ANY KEY TO QUIT TO PRODOS", 00
|
ASC "PRESS ANY KEY TO QUIT TO PRODOS", 00
|
||||||
|
|
||||||
PADDING DS $4000-*
|
ENDSYSTEM
|
||||||
|
*PADDING DS $4000-*
|
||||||
|
|
||||||
; Original APPLECORN.BIN code starts here
|
; Original APPLECORN.BIN code starts here
|
||||||
|
|
||||||
START
|
*START
|
||||||
* LDA #>AUXADDR ; Address in aux
|
* LDA #>AUXADDR ; Address in aux
|
||||||
* LDX #<AUXADDR
|
* LDX #<AUXADDR
|
||||||
* SEC ; Load into aux
|
* SEC ; Load into aux
|
||||||
* JSR LOADCODE ; Load lang ROM
|
* JSR LOADCODE ; Load lang ROM
|
||||||
|
*
|
||||||
JSR GFXINIT ; Initialize FDraw graphics
|
* JSR GFXINIT ; Initialize FDraw graphics
|
||||||
|
*
|
||||||
TSX ; Save SP at $0100 in aux
|
* TSX ; Save SP at $0100 in aux
|
||||||
>>> ALTZP
|
* >>> ALTZP
|
||||||
STX $0100
|
* STX $0100
|
||||||
>>> MAINZP
|
* >>> MAINZP
|
||||||
>>> XF2AUX,AUXMOS1
|
* >>> 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
|
||||||
|
130
mainmem.menu.s
130
mainmem.menu.s
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user