diff --git a/applecorn.po b/applecorn.po index 0b051bb..a6702c5 100644 Binary files a/applecorn.po and b/applecorn.po differ 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 - - - - - - - - -