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
*COPYBUFEND EQU $9400
* Location of FDraw library in main memory
FDRAWADDR EQU $9400
* Address in aux memory where ROM will be loaded
AUXADDR EQU $8000
@ -177,10 +180,6 @@ MAINZP MAC
PUT MAINMEM.WILD
PUT MAINMEM.LISTS
PUT MAINMEM.MISC
PUT FDRAW
PUT FDRAW.LINE
PUT FDRAW.CIRCLE
PUT FDRAW.TABLES
PUT AUXMEM.MOSEQU
PUT AUXMEM.INIT
PUT AUXMEM.VDU

View File

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

View File

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

View File

@ -16,8 +16,19 @@ START JSR CROUT
TRB $C035
JSR ROMMENU
JSR LOADROM
JSR LOADFDRAW
LDA #>AUXADDR ; Address in aux
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
STA A1L
@ -57,27 +68,46 @@ START JSR CROUT
STA $C004 ; Write to main
>>> XF2AUX,AUXMOS1
:FDFILE STR 'FDRAW.FAST' ; Filename for FDraw lib
* Load ROM image from file and copy to aux RAM
LOADROM STZ :BLOCKS
* Load image from file into memory
* 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
BCC :S2
BCC :S1
LDX #$00
:L2 LDA :CANTOPEN,X
BEQ :ER1
:L1A LDA :CANTOPEN,X ; Part one of error msg
BEQ :S0
JSR COUT1
INX
BRA :L2
BRA :S2
:ER1 JSR CROUT
BRA :L1A
:S0 LDA OPENPL+1 ; Print filename
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
:SPIN BRA :SPIN
:S2 LDA OPENPL+5 ; File reference number
:S1 LDA OPENPL+5 ; File reference number
STA READPL+1
:L3 LDA #'.'+$80 ; Read file block by block
:L2 LDA #'.'+$80 ; Read file block by block
JSR COUT1
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
STA A1L
LDA #>BLKBUF
@ -86,53 +116,35 @@ LOADROM STZ :BLOCKS
STA A2L
LDA #>BLKBUFEND
STA A2H
LDA #<AUXADDR ; Dest in aux -> A4L, A4H
LDA :ADDRL ; Dest in aux -> A4L, A4H
STA A4L
LDA #>AUXADDR
LDA :ADDRH
LDX :BLOCKS
:L4 CPX #$00
BEQ :S25
:L3 CPX #$00
BEQ :S2
INC
INC
DEX
BRA :L4
:S25 STA A4H
SEC ; Copy Main -> Aux
JSR AUXMOVE
INC :BLOCKS
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
JSR CLSFILE
JSR CROUT
PLP
RTS
:BLOCKS DB 0 ; Counter for blocks read
:CANTOPEN ASC "Unable to open ROM file"
: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
LOADFDRAW
RTS

View File

@ -3,6 +3,28 @@
*
* 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
COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
LDY #$00

View File

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