diff --git a/applecorn.po b/applecorn.po index 89cb730..fc0c0e5 100644 Binary files a/applecorn.po and b/applecorn.po differ 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