Load FDRAW.FAST from file at runtime.

This commit is contained in:
Bobbi Webber-Manners 2021-09-21 22:05:42 -04:00
parent 78f722db28
commit 7c36bc0010
10 changed files with 128 additions and 95 deletions

Binary file not shown.

View File

@ -55,6 +55,9 @@ BLKBUFEND EQU $9200 ; 'hidden' bytes within screen
COPYBUF EQU $9200 ; File copy needs separate buffer COPYBUF EQU $9200 ; File copy needs separate buffer
*COPYBUFEND EQU $9400 *COPYBUFEND EQU $9400
* Location of FDraw library in main memory
FDRAWADDR EQU $9400
* Address in aux memory where ROM will be loaded * Address in aux memory where ROM will be loaded
AUXADDR EQU $8000 AUXADDR EQU $8000
@ -177,10 +180,6 @@ MAINZP MAC
PUT MAINMEM.WILD PUT MAINMEM.WILD
PUT MAINMEM.LISTS PUT MAINMEM.LISTS
PUT MAINMEM.MISC PUT MAINMEM.MISC
PUT FDRAW
PUT FDRAW.LINE
PUT FDRAW.CIRCLE
PUT FDRAW.TABLES
PUT AUXMEM.MOSEQU PUT AUXMEM.MOSEQU
PUT AUXMEM.INIT PUT AUXMEM.INIT
PUT AUXMEM.VDU PUT AUXMEM.VDU

View File

@ -600,7 +600,7 @@ VDU18 LDA VDUQ+7 ; Argument 'k'
LDA #$01 ; XOR mode LDA #$01 ; XOR mode
:NORM >>> WRTMAIN :NORM >>> WRTMAIN
STA LINETYPE STA LINETYPE
STA Entry+5 STA FDRAWADDR+5
>>> WRTAUX >>> WRTAUX
>>> XF2MAIN,SETLINE >>> XF2MAIN,SETLINE
VDU18RET1 >>> ENTAUX VDU18RET1 >>> ENTAUX
@ -649,28 +649,28 @@ VDU25 JSR CVTCOORD ; Convert coordinate system
LDA VDUQ+4 LDA VDUQ+4
STA PLOTMODE STA PLOTMODE
LDA VDUQ+5 LDA VDUQ+5
STA Entry+6 ; LSB of X1 STA FDRAWADDR+6 ; LSB of X1
LDA VDUQ+6 LDA VDUQ+6
STA Entry+7 ; MSB of X1 STA FDRAWADDR+7 ; MSB of X1
LDA VDUQ+7 LDA VDUQ+7
STA Entry+8 ; Y1 STA FDRAWADDR+8 ; Y1
>>> WRTAUX >>> WRTAUX
>>> XF2MAIN,DRAWPNT >>> XF2MAIN,DRAWPNT
:LINE >>> WRTMAIN :LINE >>> WRTMAIN
LDA VDUQ+4 LDA VDUQ+4
STA PLOTMODE STA PLOTMODE
LDA XPIXEL+0 LDA XPIXEL+0
STA Entry+6 STA FDRAWADDR+6
LDA XPIXEL+1 LDA XPIXEL+1
STA Entry+7 STA FDRAWADDR+7
LDA YPIXEL LDA YPIXEL
STA Entry+8 STA FDRAWADDR+8
LDA VDUQ+5 LDA VDUQ+5
STA Entry+9 ; LSB of X1 STA FDRAWADDR+9 ; LSB of X1
LDA VDUQ+6 LDA VDUQ+6
STA Entry+10 ; MSB of X1 STA FDRAWADDR+10 ; MSB of X1
LDA VDUQ+7 LDA VDUQ+7
STA Entry+11 ; Y1 STA FDRAWADDR+11 ; Y1
>>> WRTAUX >>> WRTAUX
>>> XF2MAIN,DRAWLINE >>> XF2MAIN,DRAWLINE
VDU25RET >>> ENTAUX VDU25RET >>> ENTAUX

View File

@ -19,7 +19,7 @@ NOISE_ON equ 0
lst off lst off
** org $6000 org $9400 ;;; CUSTOMIZED FOR APPLECORN
* *
* Macros. * Macros.
@ -781,25 +781,25 @@ fixrastxor
* include the line functions * include the line functions
** put FDRAW.LINE put FDRAW.LINE
* include the circle functions * include the circle functions
** put FDRAW.CIRCLE put FDRAW.CIRCLE
lst on lst on
CODE_END equ * ;end of code section CODE_END equ * ;end of code section
lst off lst off
* include the data tables * include the data tables
** put FDRAW.TABLES put FDRAW.TABLES
lst on lst on
DAT_END equ * ;end of data / BSS DAT_END equ * ;end of data / BSS
lst off lst off
* Save the appropriate object file. * Save the appropriate object file.
** do USE_FAST do USE_FAST
** sav FDRAW.FAST sav FDRAW.FAST
** else else
** sav FDRAW.SMALL sav FDRAW.SMALL
** fin fin

View File

@ -16,8 +16,19 @@ START JSR CROUT
TRB $C035 TRB $C035
JSR ROMMENU JSR ROMMENU
JSR LOADROM LDA #>AUXADDR ; Address in aux
JSR LOADFDRAW LDX #<AUXADDR
SEC ; Load into aux
JSR LOADCODE ; Load lang ROM
LDA #<:FDFILE
STA OPENPL+1
LDA #>:FDFILE
STA OPENPL+2
LDA #>FDRAWADDR ; Address in main
LDX #<FDRAWADDR
CLC ; Load into main
JSR LOADCODE
LDA #<MOSSHIM ; Start address of MOS shim LDA #<MOSSHIM ; Start address of MOS shim
STA A1L STA A1L
@ -57,27 +68,46 @@ START JSR CROUT
STA $C004 ; Write to main STA $C004 ; Write to main
>>> XF2AUX,AUXMOS1 >>> XF2AUX,AUXMOS1
:FDFILE STR 'FDRAW.FAST' ; Filename for FDraw lib
* Load ROM image from file and copy to aux RAM * Load image from file into memory
LOADROM STZ :BLOCKS * On entry: OPENPL set up to point to file to load
* 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
JSR OPENFILE ; Open ROM file JSR OPENFILE ; Open ROM file
BCC :S2 BCC :S1
LDX #$00 LDX #$00
:L2 LDA :CANTOPEN,X :L1A LDA :CANTOPEN,X ; Part one of error msg
BEQ :ER1 BEQ :S0
JSR COUT1 JSR COUT1
INX INX
BRA :L2 BRA :L1A
BRA :S2 :S0 LDA OPENPL+1 ; Print filename
:ER1 JSR CROUT STA A1L
LDA OPENPL+2
STA A1H
LDY #$00
LDA (A1L),Y
STA :LEN
:L1B CPY :LEN
BEQ :ERR1
INY
LDA (A1L),Y
JSR COUT1
BRA :L1B
:ERR1 JSR CROUT
JSR BELL JSR BELL
:SPIN BRA :SPIN :SPIN BRA :SPIN
:S2 LDA OPENPL+5 ; File reference number :S1 LDA OPENPL+5 ; File reference number
STA READPL+1 STA READPL+1
:L3 LDA #'.'+$80 ; Read file block by block :L2 LDA #'.'+$80 ; Read file block by block
JSR COUT1 JSR COUT1
JSR RDFILE JSR RDFILE
BCS :S3 ; 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
@ -86,53 +116,35 @@ LOADROM STZ :BLOCKS
STA A2L STA A2L
LDA #>BLKBUFEND LDA #>BLKBUFEND
STA A2H STA A2H
LDA #<AUXADDR ; Dest in aux -> A4L, A4H LDA :ADDRL ; Dest in aux -> A4L, A4H
STA A4L STA A4L
LDA #>AUXADDR LDA :ADDRH
LDX :BLOCKS LDX :BLOCKS
:L4 CPX #$00 :L3 CPX #$00
BEQ :S25 BEQ :S2
INC INC
INC INC
DEX DEX
BRA :L4
:S25 STA A4H
SEC ; Copy Main -> Aux
JSR AUXMOVE
INC :BLOCKS
BRA :L3 BRA :L3
:S3 LDA OPENPL+5 ; File reference number :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 STA CLSPL+1
JSR CLSFILE JSR CLSFILE
JSR CROUT
PLP
RTS RTS
:BLOCKS DB 0 ; Counter for blocks read :ADDRL DB $00 ; Destination address (LSB)
:CANTOPEN ASC "Unable to open ROM file" :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 DB $00
LOADFDRAW
RTS

View File

@ -3,6 +3,28 @@
* *
* Miscellaneous routines used by main memory code. * Miscellaneous routines used by main memory code.
* Copy a block of main memory
* A1L/A1H: Start address
* A2L/A2H: End address
* A4L/A4H: Destination start address
MEMCPY LDA (A1L)
STA (A4L)
LDA A1H
CMP A2H
BNE :S1
LDA A1L
CMP A2L
BNE :S1
BRA :DONE
:S1 INC A1L
BNE :S2
INC A1H
:S2 INC A4L
BNE :S3
INC A4H
:S3 BRA MEMCPY
:DONE RTS
* Copy 512 bytes from BLKBUF to AUXBLK in aux LC * Copy 512 bytes from BLKBUF to AUXBLK in aux LC
COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
LDY #$00 LDY #$00

View File

@ -1060,17 +1060,17 @@ MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS
* Call FDraw Clear routine * Call FDraw Clear routine
CLRHGR >>> ENTMAIN CLRHGR >>> ENTMAIN
LDA BGCOLOR LDA BGCOLOR
STA Entry+5 STA FDRAWADDR+5
JSR Entry+16 ; FDRAW: SetColor JSR FDRAWADDR+16 ; FDRAW: SetColor
JSR Entry+22 ; FDRAW: Clear JSR FDRAWADDR+22 ; FDRAW: Clear
LDA FGCOLOR LDA FGCOLOR
STA Entry+5 STA FDRAWADDR+5
JSR Entry+16 ; FDRAW: SetColor JSR FDRAWADDR+16 ; FDRAW: SetColor
>>> XF2AUX,VDU16RET >>> XF2AUX,VDU16RET
* Call FDraw SetLineMode routine * Call FDraw SetLineMode routine
SETLINE >>> ENTMAIN SETLINE >>> ENTMAIN
JSR Entry+43 ; FDRAW: SetLineMode JSR FDRAWADDR+43 ; FDRAW: SetLineMode
>>> XF2AUX,VDU18RET1 >>> XF2AUX,VDU18RET1
* Call FDraw DrawLine routine * Call FDraw DrawLine routine
@ -1088,9 +1088,9 @@ DRAWLINE >>> ENTMAIN
SBC FGCOLOR SBC FGCOLOR
BRA :SETCOLOR BRA :SETCOLOR
:S2 LDA BGCOLOR ; Draw in background colour :S2 LDA BGCOLOR ; Draw in background colour
:SETCOLOR STA Entry+5 :SETCOLOR STA FDRAWADDR+5
JSR Entry+16 ; FDRAW: SetColor JSR FDRAWADDR+16 ; FDRAW: SetColor
JSR Entry+28 ; FDRAW: DrawLine JSR FDRAWADDR+28 ; FDRAW: DrawLine
>>> XF2AUX,VDU25RET >>> XF2AUX,VDU25RET
* Call FDraw DrawPoint routine * Call FDraw DrawPoint routine
@ -1108,25 +1108,25 @@ DRAWPNT >>> ENTMAIN
SBC FGCOLOR SBC FGCOLOR
BRA :SETCOLOR BRA :SETCOLOR
:S2 LDA BGCOLOR ; Draw in background colour :S2 LDA BGCOLOR ; Draw in background colour
:SETCOLOR STA Entry+5 :SETCOLOR STA FDRAWADDR+5
JSR Entry+16 ; FDRAW: SetColor JSR FDRAWADDR+16 ; FDRAW: SetColor
JSR Entry+25 ; FDRAW: DrawPoint JSR FDRAWADDR+25 ; FDRAW: DrawPoint
>>> XF2AUX,VDU25RET >>> XF2AUX,VDU25RET
* Reset colours and linetype * Reset colours and linetype
GFXINIT JSR Entry+0 ; Initialize FDRAW library GFXINIT JSR FDRAWADDR+0 ; Initialize FDRAW library
LDA #$20 LDA #$20
STA Entry+5 STA FDRAWADDR+5
JSR Entry+19 ; FDRAW: Set page $2000 JSR FDRAWADDR+19 ; FDRAW: Set page $2000
STZ LINETYPE STZ LINETYPE
STZ Entry+5 STZ FDRAWADDR+5
JSR Entry+43 ; FDRAW: SetLineMode JSR FDRAWADDR+43 ; FDRAW: SetLineMode
LDA #$07 LDA #$07
STA FGCOLOR STA FGCOLOR
STA Entry+5 STA FDRAWADDR+5
JSR Entry+16 ; FDRAW: SetColor JSR FDRAWADDR+16 ; FDRAW: SetColor
STZ BGCOLOR STZ BGCOLOR
JSR Entry+22 ; FDRAW: clear HGR screen JSR FDRAWADDR+22 ; FDRAW: clear HGR screen
RTS RTS
FGCOLOR DB $00 ; Foreground colour FGCOLOR DB $00 ; Foreground colour