From 3659a31790d4e4462bd8ed0bdd0db69f805511f5 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Thu, 23 Sep 2021 16:19:35 -0400 Subject: [PATCH] Broke out gfx into mainmem.gfx.s --- applecorn.po | Bin 819200 -> 819200 bytes applecorn.s | 1 + auxmem.vdu.s | 38 +++++++++++++++++---- mainmem.gfx.s | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ mainmem.svc.s | 85 ----------------------------------------------- 5 files changed, 123 insertions(+), 91 deletions(-) create mode 100644 mainmem.gfx.s diff --git a/applecorn.po b/applecorn.po index 0b051bbbc2cba813371579b021c206633a2d00cc..a6702c55c7a062c2ca196a57ba71eaff7ec0758d 100644 GIT binary patch delta 3333 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 diff --git a/applecorn.s b/applecorn.s index fbcaa6a..55b2e25 100644 --- a/applecorn.s +++ b/applecorn.s @@ -179,6 +179,7 @@ MAINZP MAC PUT MAINMEM.FSEQU PUT MAINMEM.INIT PUT MAINMEM.SVC + PUT MAINMEM.GFX PUT MAINMEM.PATH PUT MAINMEM.WILD PUT MAINMEM.LISTS diff --git a/auxmem.vdu.s b/auxmem.vdu.s index 3852acf..f5f6362 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -110,11 +110,20 @@ SCNTYPE DB 1,0,128,1 * b0=40COL/80COL * = +******************************************************************** +* Note that we use PAGE2 80 column mode ($800-$BFF in main and aux) +* and PAGE1 HGR mode ($2000-$23ff in main only) +******************************************************************** + * Addresses of start of text rows in PAGE2 SCNTAB DW $800,$880,$900,$980,$A00,$A80,$B00,$B80 DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8 DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0 +* Addresses of start of pixel rows in PAGE1 +HGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380 + DW $2028,$20A8,$2128,$21A8,$2228,$22A8,$2328,$23A8 + DW $2050,$20D0,$2150,$21D0,$2250,$22D0,$2350,$23D0 * Output character to VDU driver ******************************** @@ -311,10 +320,7 @@ PRCHRC PHA ; Save character :RESUME PLA * Put character to screen -PUTCHRC LDY VDUBYTES - DEY ; If VDUBYTE=1, text mode - BNE PRCHRSOFT ; Graphics mode - EOR #$80 ; Convert character +PUTCHRC EOR #$80 ; Convert character TAY AND #$A0 BNE PRCHR4 @@ -336,8 +342,15 @@ PRCHR4 PHY PRCHR6 STA (VDUADDR),Y ; Store it STA $C005 ; Back to aux memory PLP ; Restore IRQs - RTS -PRCHRSOFT RTS ; *TODO* Jump to gfx + + LDY VDUBYTES + DEY ; If VDUBYTE=1, text mode + BEQ :DONE + + JSR HCHARADDR +* TODO: GRAPHICS! + +:DONE RTS * Fetch character from screen at (TEXTX,TEXTY) and return MODE in Y BYTE87 @@ -389,6 +402,19 @@ CHARADDR40 TAY ; Y=offset into this row * CC=auxmem * CS=mainmem +* Calculate character address in HGR mode +* This is the address of the first pixel row of the char +* Add $0400 for each subsequent row of the char +HCHARADDR LDA VDUTEXTY + ASL + TAX + LDA HGRTAB+0,X ; LSB of row address + STA VDUADDR+0 + LDA HGRTAB+1,X ; MSB of row address + STA VDUADDR+1 + LDY VDUTEXTX + RTS +* (VDUADDR),Y=>character address * Move cursor left VDU08 LDA VDUTEXTX ; COL diff --git a/mainmem.gfx.s b/mainmem.gfx.s new file mode 100644 index 0000000..e023eeb --- /dev/null +++ b/mainmem.gfx.s @@ -0,0 +1,90 @@ +* MAINMEM.GFX.S +* (c) Bobbi 2021 GPLv3 +* +* Main memory HGR graphics routines. + +* Call FDraw Clear routine +CLRHGR >>> ENTMAIN + LDA BGCOLOR + STA FDRAWADDR+5 + JSR FDRAWADDR+16 ; FDRAW: SetColor + JSR FDRAWADDR+22 ; FDRAW: Clear + LDA FGCOLOR + STA FDRAWADDR+5 + JSR FDRAWADDR+16 ; FDRAW: SetColor + >>> XF2AUX,VDU16RET + +* Call FDraw SetLineMode routine +SETLINE >>> ENTMAIN + JSR FDRAWADDR+43 ; FDRAW: SetLineMode + >>> XF2AUX,VDU18RET1 + +* Call FDraw DrawLine routine +DRAWLINE >>> ENTMAIN + LDA PLOTMODE + AND #$03 + CMP #$01 ; Draw in foreground colour + BNE :S1 + LDA FGCOLOR + BRA :SETCOLOR +:S1 CMP #$02 ; Draw in inverse colour + BNE :S2 + SEC + LDA #$07 + SBC FGCOLOR + BRA :SETCOLOR +:S2 LDA BGCOLOR ; Draw in background colour +:SETCOLOR STA FDRAWADDR+5 + JSR FDRAWADDR+16 ; FDRAW: SetColor + JSR FDRAWADDR+28 ; FDRAW: DrawLine + >>> XF2AUX,VDU25RET + +* Call FDraw DrawPoint routine +DRAWPNT >>> ENTMAIN + LDA PLOTMODE + AND #$03 + CMP #$01 ; Draw in foreground colour + BNE :S1 + LDA FGCOLOR + BRA :SETCOLOR +:S1 CMP #$02 ; Draw in inverse colour + BNE :S2 + SEC + LDA #$07 + SBC FGCOLOR + BRA :SETCOLOR +:S2 LDA BGCOLOR ; Draw in background colour +:SETCOLOR STA FDRAWADDR+5 + JSR FDRAWADDR+16 ; FDRAW: SetColor + JSR FDRAWADDR+25 ; FDRAW: DrawPoint + >>> XF2AUX,VDU25RET + +* Reset colours and linetype +GFXINIT JSR FDRAWADDR+0 ; Initialize FDRAW library + LDA #$20 + STA FDRAWADDR+5 + JSR FDRAWADDR+19 ; FDRAW: Set page $2000 + STZ LINETYPE + STZ FDRAWADDR+5 + JSR FDRAWADDR+43 ; FDRAW: SetLineMode + LDA #$07 + STA FGCOLOR + STA FDRAWADDR+5 + JSR FDRAWADDR+16 ; FDRAW: SetColor + STZ BGCOLOR + JSR FDRAWADDR+22 ; FDRAW: clear HGR screen + RTS + +FGCOLOR DB $00 ; Foreground colour +BGCOLOR DB $00 ; Background colour +LINETYPE DB $00 ; 0 normal, 1 XOR +PLOTMODE DB $00 ; K value for PLOT K,X,Y + + + + + + + + + diff --git a/mainmem.svc.s b/mainmem.svc.s index 664d566..91e7457 100644 --- a/mainmem.svc.s +++ b/mainmem.svc.s @@ -1057,88 +1057,3 @@ MAINRDMEM STA A1L LDA (A1L) MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS -* Call FDraw Clear routine -CLRHGR >>> ENTMAIN - LDA BGCOLOR - STA FDRAWADDR+5 - JSR FDRAWADDR+16 ; FDRAW: SetColor - JSR FDRAWADDR+22 ; FDRAW: Clear - LDA FGCOLOR - STA FDRAWADDR+5 - JSR FDRAWADDR+16 ; FDRAW: SetColor - >>> XF2AUX,VDU16RET - -* Call FDraw SetLineMode routine -SETLINE >>> ENTMAIN - JSR FDRAWADDR+43 ; FDRAW: SetLineMode - >>> XF2AUX,VDU18RET1 - -* Call FDraw DrawLine routine -DRAWLINE >>> ENTMAIN - LDA PLOTMODE - AND #$03 - CMP #$01 ; Draw in foreground colour - BNE :S1 - LDA FGCOLOR - BRA :SETCOLOR -:S1 CMP #$02 ; Draw in inverse colour - BNE :S2 - SEC - LDA #$07 - SBC FGCOLOR - BRA :SETCOLOR -:S2 LDA BGCOLOR ; Draw in background colour -:SETCOLOR STA FDRAWADDR+5 - JSR FDRAWADDR+16 ; FDRAW: SetColor - JSR FDRAWADDR+28 ; FDRAW: DrawLine - >>> XF2AUX,VDU25RET - -* Call FDraw DrawPoint routine -DRAWPNT >>> ENTMAIN - LDA PLOTMODE - AND #$03 - CMP #$01 ; Draw in foreground colour - BNE :S1 - LDA FGCOLOR - BRA :SETCOLOR -:S1 CMP #$02 ; Draw in inverse colour - BNE :S2 - SEC - LDA #$07 - SBC FGCOLOR - BRA :SETCOLOR -:S2 LDA BGCOLOR ; Draw in background colour -:SETCOLOR STA FDRAWADDR+5 - JSR FDRAWADDR+16 ; FDRAW: SetColor - JSR FDRAWADDR+25 ; FDRAW: DrawPoint - >>> XF2AUX,VDU25RET - -* Reset colours and linetype -GFXINIT JSR FDRAWADDR+0 ; Initialize FDRAW library - LDA #$20 - STA FDRAWADDR+5 - JSR FDRAWADDR+19 ; FDRAW: Set page $2000 - STZ LINETYPE - STZ FDRAWADDR+5 - JSR FDRAWADDR+43 ; FDRAW: SetLineMode - LDA #$07 - STA FGCOLOR - STA FDRAWADDR+5 - JSR FDRAWADDR+16 ; FDRAW: SetColor - STZ BGCOLOR - JSR FDRAWADDR+22 ; FDRAW: clear HGR screen - RTS - -FGCOLOR DB $00 ; Foreground colour -BGCOLOR DB $00 ; Background colour -LINETYPE DB $00 ; 0 normal, 1 XOR -PLOTMODE DB $00 ; K value for PLOT K,X,Y - - - - - - - - -