From 7c36bc0010cf75c21a212ba81ce5f52ed534606e Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Tue, 21 Sep 2021 22:05:42 -0400 Subject: [PATCH] Load FDRAW.FAST from file at runtime. --- applecorn.po | Bin 819200 -> 819200 bytes applecorn.s | 7 +- auxmem.vdu.s | 20 ++--- FDRAW.CIRCLE.S => fdraw/FDRAW.CIRCLE.S | 0 FDRAW.LINE.S => fdraw/FDRAW.LINE.S | 0 FDRAW.S => fdraw/FDRAW.S | 18 ++-- FDRAW.TABLES.S => fdraw/FDRAW.TABLES.S | 0 mainmem.ldr.s | 116 ++++++++++++++----------- mainmem.misc.s | 22 +++++ mainmem.svc.s | 40 ++++----- 10 files changed, 128 insertions(+), 95 deletions(-) rename FDRAW.CIRCLE.S => fdraw/FDRAW.CIRCLE.S (100%) rename FDRAW.LINE.S => fdraw/FDRAW.LINE.S (100%) rename FDRAW.S => fdraw/FDRAW.S (95%) rename FDRAW.TABLES.S => fdraw/FDRAW.TABLES.S (100%) diff --git a/applecorn.po b/applecorn.po index 89cb7307f2885d7715cace8ec8afec405fe73d12..fc0c0e593cc8427a6bc03bd9680815ea301c02d2 100644 GIT binary patch delta 6916 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 MO8by{d-R0=1+Vkwl>h($ diff --git a/applecorn.s b/applecorn.s index 73a6596..b983085 100644 --- a/applecorn.s +++ b/applecorn.s @@ -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 diff --git a/auxmem.vdu.s b/auxmem.vdu.s index f9baccd..21f33cf 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -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 diff --git a/FDRAW.CIRCLE.S b/fdraw/FDRAW.CIRCLE.S similarity index 100% rename from FDRAW.CIRCLE.S rename to fdraw/FDRAW.CIRCLE.S diff --git a/FDRAW.LINE.S b/fdraw/FDRAW.LINE.S similarity index 100% rename from FDRAW.LINE.S rename to fdraw/FDRAW.LINE.S diff --git a/FDRAW.S b/fdraw/FDRAW.S similarity index 95% rename from FDRAW.S rename to fdraw/FDRAW.S index 661f8d1..f4118d8 100644 --- a/FDRAW.S +++ b/fdraw/FDRAW.S @@ -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 diff --git a/FDRAW.TABLES.S b/fdraw/FDRAW.TABLES.S similarity index 100% rename from FDRAW.TABLES.S rename to fdraw/FDRAW.TABLES.S diff --git a/mainmem.ldr.s b/mainmem.ldr.s index 0f17e43..37c9c57 100644 --- a/mainmem.ldr.s +++ b/mainmem.ldr.s @@ -16,8 +16,19 @@ START JSR CROUT TRB $C035 JSR ROMMENU - JSR LOADROM - JSR LOADFDRAW + LDA #>AUXADDR ; Address in aux + LDX #:FDFILE + STA OPENPL+2 + LDA #>FDRAWADDR ; Address in main + LDX #>> 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 # A1L,A1H STA A1L LDA #>BLKBUF @@ -86,53 +116,35 @@ LOADROM STZ :BLOCKS STA A2L LDA #>BLKBUFEND STA A2H - LDA # 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 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mainmem.misc.s b/mainmem.misc.s index 6d4f257..84fd62b 100644 --- a/mainmem.misc.s +++ b/mainmem.misc.s @@ -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 diff --git a/mainmem.svc.s b/mainmem.svc.s index 471fd79..91e4723 100644 --- a/mainmem.svc.s +++ b/mainmem.svc.s @@ -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