From 9ca5a702caddbe0df33687471f5114b79da456db Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sun, 8 Jan 2023 00:05:22 -0500 Subject: [PATCH] SHR: slight optimization of stupid line clipping --- applecorn.po | Bin 819200 -> 819200 bytes mainmem.shr.s | 52 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/applecorn.po b/applecorn.po index 047e1cadeb141f22913d42d036672d45c498f528..b44fbac7d74004953c48be8545448a143d6376cb 100644 GIT binary patch delta 5252 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 delta 5275 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 ENTMAIN :S1 CMP #$40 ; Plot point BNE :BAIL ; Other? Bail out + BIT SHRCURROUT ; Point in window? + BMI :S2 ; No - skip drawing PHP ; Disable interrupts SEI CLC ; 65816 native mode XCE SEP #$30 ; 8 bit M & X MX %11 ; Tell Merlin - JSR SHRPOINT + JSR SHRPOINT2 SEC ; 65816 emulation mode XCE MX %11 ; Tell Merlin PLP ; Resume normal service - BRA :S2 :S2 PLA ; Store prev pt in screen coords STA SHRYPIXEL+1 PLA @@ -277,6 +278,8 @@ SHRPLOT >>> ENTMAIN STA SHRXPIXEL+1 PLA STA SHRXPIXEL+0 + LDA SHRCURROUT ; Current 'outside window' flag + STA SHRPREVOUT ; Previous 'outside window' flag :DONE >>> XF2AUX,GFXPLOTRET :BAIL PLA PLA @@ -308,7 +311,13 @@ SHRPLOTCOL LDA SHRGFXFGMASK ; Preserve FG colour * Plot a point * Called in 65816 native mode, 8 bit M & X -SHRPOINT REP #$30 ; 16 bit M & X +SHRPOINT BIT SHRCURROUT ; First point outside? + BMI :CHECK ; If so, check coords + BIT SHRPREVOUT ; Second point outside? + BMI :CHECK ; If so, check coords + BRA SHRPOINT2 ; Neither outside + +:CHECK REP #$30 ; 16 bit M & X MX %00 ; Tell Merlin LDA A2L ; y coordinate CMP SHRWINBTM @@ -719,15 +728,9 @@ SHRCOORD MAC ADC #0 ; Add in carry (9th bit) XBA ; Clever trick: fewer shifts STA A2L ; Into A2L/H - - SEC ; Back to emulation mode - XCE - MX %11 ; Tell Merlin - PLP ; Normal service resumed - BRA SHRCOORDEND + BRA SHRCOORDCHK -SHRCOORDNEG MX %00 ; Tell Merlin we are 16 bit - EOR #$FFFF ; Negate +SHRCOORDNEG EOR #$FFFF ; Negate INC A ASL ; *2 ADC SHRVDUQ+7 ; *3 @@ -751,12 +754,31 @@ SHRCOORDNEG MX %00 ; Tell Merlin we are 16 bit EOR #$FFFF ; Negate INC A STA A2L ; Into A2L/H - - SEC ; Back to emulation mode - XCE + +SHRCOORDCHK CMP SHRWINBTM ; y coordinate + BMI SHRCOORDOUT + CMP SHRWINTOP + BEQ SHRCOORDCHK2 + BPL SHRCOORDOUT +SHRCOORDCHK2 LDA A1L ; x coordinate + CMP SHRWINLFT + BMI SHRCOORDOUT + CMP SHRWINRGT + BPL SHRCOORDOUT + BRA SHRCOORDIN +SHRCOORDOUT SEP #$30 ; 8 bit M & X MX %11 ; Tell Merlin + SEC + ROR SHRCURROUT ; Set SHRCURROUT to $80 + BRA SHRCOORDEND +SHRCOORDIN SEP #$30 ; 8 bit M & X + MX %11 ; Tell Merlin + STZ SHRCURROUT ; Reset SHRCURROUT + +SHRCOORDEND SEC ; Back to emulation mode + XCE PLP ; Normal service resumed -SHRCOORDEND EOM + EOM * Another coordinate transform, used by VDU25