From 97be525f28edc11eec471feef8e308a5296cb30a Mon Sep 17 00:00:00 2001 From: Quinn Dunki Date: Thu, 12 Feb 2015 08:00:41 -0800 Subject: [PATCH] More efficient even/odd checking --- Documentation.md | 23 +++++++++++++++--- ReadMe.md | 2 -- mouse.s | 4 ++-- painting.s | 4 ++-- rects.s | 60 +++++++++++++++++++++++------------------------ views.s | 8 +++---- weegui.dsk | Bin 143360 -> 143360 bytes 7 files changed, 58 insertions(+), 43 deletions(-) diff --git a/Documentation.md b/Documentation.md index f0c22ea..2d489fa 100644 --- a/Documentation.md +++ b/Documentation.md @@ -44,7 +44,7 @@ Place the WeeGUI library in the same ProDOS folder as your program. Then, at the 10 PRINT CHR$ (4)"BRUN WEEGUI" -That's it! WeeGUI will load itself at address $7E00 of main memory, just below ProDOS. +That's it! WeeGUI will load itself into memory and it's ready for use. ####Assembly Language @@ -65,12 +65,29 @@ When using assembly language, you can install WeeGUI by loading the *WEEGUI* lib .byte "BRUN WEEGUI",$8d,0 -If you load the library some other way, make sure you load it at $7E00, and perform a JSR to that address in order to prepare the library for use. +If you load the library some other way, make sure you load it at the base address specified in the memory map below, and perform a JSR to that address in order to prepare the library for use. You also need to include the file *WeeGUI_MLI.s* in your program. This is the WeeGUI Machine Language Interface, and it provides all the constants, entry points, etc that you'll need for WeeGUI. -With either language, WeeGUI protects itself using ProDOS's memory page reservation scheme. This prevents it from being overwritten by ProDOS file operations, or Applesoft BASIC. +With either language, WeeGUI protects itself using ProDOS's memory page reservation scheme, and Applesoft's HIMEM. This prevents it from being overwritten by ProDOS file operations, or Applesoft code/variables. + + +####Memory Map + +WeeGUI is 6k in size, and lives at the top of main memory, right under ProDOS. For an experimental version that lives primarily in the auxiliary memory bank, see Appendix A. + + + + + + + + + + + +
$FFFF
...
$BFFFProDOS
$9600ProDOS
$95FFWeeGUI
$7D00WeeGUI
$7CFFHIMEM
...
$0000

diff --git a/ReadMe.md b/ReadMe.md index 2d6c437..e6981c4 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -9,6 +9,4 @@ Known issues To Do: ------ -- Document final memory map -- Remove references to ORG in docs (except in memory map) - Put sample code in docs diff --git a/mouse.s b/mouse.s index 179a1e0..8794ddf 100644 --- a/mouse.s +++ b/mouse.s @@ -442,8 +442,8 @@ renderPointer: sta BASH lda WG_MOUSEPOS_X ; X even? - and #$01 - bne renderPointer_xOdd + ror + bcs renderPointer_xOdd SETSWITCH PAGE2ON diff --git a/painting.s b/painting.s index dcf329e..cf6cff5 100644 --- a/painting.s +++ b/painting.s @@ -105,8 +105,8 @@ WGPlot: sta BASH lda WG_CURSORX ; X even? - and #$01 - bne WGPlot_xOdd + ror + bcs WGPlot_xOdd SETSWITCH PAGE2ON ; Plot the character pla diff --git a/rects.s b/rects.s index e5dc2cf..97d3708 100644 --- a/rects.s +++ b/rects.s @@ -45,8 +45,8 @@ WGFillRect_vertLoop: sta BASH lda PARAM0 ; Left edge even? - and #$01 - bne WGFillRect_horzLoopOdd + ror + bcs WGFillRect_horzLoopOdd lda PARAM2 cmp #1 ; Width==1 is a special case @@ -81,8 +81,8 @@ WGFillRect_horzLoopEvenAligned1: ; Draw odd columns bpl WGFillRect_horzLoopEvenAligned1 ; Loop for w/2 lda PARAM2 ; Is width even? - and #$01 - beq WGFillRect_horzLoopEvenAlignedEvenWidth + ror + bcc WGFillRect_horzLoopEvenAlignedEvenWidth WGFillRect_horzLoopEvenAlignedOddWidth: ; CASE 1a: Left edge even aligned, odd width @@ -129,8 +129,8 @@ WGFillRect_horzLoopOddAligned1: ; Draw even columns bpl WGFillRect_horzLoopOddAligned1 ; Loop for w/2 lda PARAM2 ; Is width even? - and #$01 - beq WGFillRect_horzLoopOddAlignedEvenWidth + ror + bcc WGFillRect_horzLoopOddAlignedEvenWidth WGFillRect_horzLoopOddAlignedOddWidth: ; CASE 2a: Left edge odd aligned, odd width @@ -220,8 +220,8 @@ WGStrokeRect_horzEdge: sta BASH lda PARAM0 ; Left edge even? - and #$01 - beq WGStrokeRect_horzEdgeEven + ror + bcc WGStrokeRect_horzEdgeEven jmp WGStrokeRect_horzLoopOdd WGStrokeRect_horzEdgeEven: @@ -253,8 +253,8 @@ WGStrokeRect_horzLoopEvenAligned1: ; Draw odd columns bpl WGStrokeRect_horzLoopEvenAligned1 ; Loop for w/2 lda PARAM2 ; Is width even? - and #$01 - beq WGStrokeRect_horzLoopEvenAlignedEvenWidth + ror + bcc WGStrokeRect_horzLoopEvenAlignedEvenWidth WGStrokeRect_horzLoopEvenAlignedOddWidth: ; CASE 1a: Left edge even aligned, odd width @@ -310,8 +310,8 @@ WGStrokeRect_horzLoopOddAligned1: ; Draw even columns bpl WGStrokeRect_horzLoopOddAligned1 ; Loop for w/2 lda PARAM2 ; Is width even? - and #$01 - beq WGStrokeRect_horzLoopOddAlignedEvenWidth + ror + bcc WGStrokeRect_horzLoopOddAlignedEvenWidth WGStrokeRect_horzLoopOddAlignedOddWidth: ; CASE 2a: Left edge odd aligned, odd width @@ -368,8 +368,8 @@ WGStrokeRect_vertLoop: lda PARAM0 ; Left edge even? dec - and #$01 - bne WGStrokeRect_vertLoopOdd + ror + bcs WGStrokeRect_vertLoopOdd ; CASE 1: Left edge even-aligned, even width SETSWITCH PAGE2ON @@ -380,8 +380,8 @@ WGStrokeRect_vertLoop: lda PARAM2 ; Is width even? inc inc - and #$01 - bne WGStrokeRect_vertLoopEvenAlignedOddWidth + ror + bcs WGStrokeRect_vertLoopEvenAlignedOddWidth lda PARAM2 ; Calculate right edge inc @@ -423,8 +423,8 @@ WGStrokeRect_vertLoopOdd: lda PARAM2 ; Is width even? inc inc - and #$01 - bne WGStrokeRect_vertLoopOddAlignedOddWidth + ror + bcs WGStrokeRect_vertLoopOddAlignedOddWidth lda PARAM2 ; Calculate right edge inc @@ -512,8 +512,8 @@ WGFancyRect_horzEdge: sta BASH lda PARAM0 ; Left edge even? - and #$01 - bne WGFancyRect_horzLoopOdd + ror + bcs WGFancyRect_horzLoopOdd ; CASE 1: Left edge even-aligned, even width SETSWITCH PAGE2OFF @@ -539,8 +539,8 @@ WGFancyRect_horzLoopEvenAligned1: ; Draw odd columns bpl WGFancyRect_horzLoopEvenAligned1 ; Loop for w/2 lda PARAM2 ; Is width even? - and #$01 - beq WGFancyRect_horzLoopEvenAlignedEvenWidth + ror + bcc WGFancyRect_horzLoopEvenAlignedEvenWidth WGFancyRect_horzLoopEvenAlignedOddWidth: ; CASE 1a: Left edge even aligned, odd width @@ -588,8 +588,8 @@ WGFancyRect_horzLoopOddAligned1: ; Draw even columns bpl WGFancyRect_horzLoopOddAligned1 ; Loop for w/2 lda PARAM2 ; Is width even? - and #$01 - beq WGFancyRect_horzLoopOddAlignedEvenWidth + ror + bcc WGFancyRect_horzLoopOddAlignedEvenWidth WGFancyRect_horzLoopOddAlignedOddWidth: ; CASE 2a: Left edge odd aligned, odd width @@ -643,8 +643,8 @@ WGFancyRect_vertLoop: lda PARAM0 ; Left edge even? dec - and #$01 - bne WGFancyRect_vertLoopOdd + ror + bcs WGFancyRect_vertLoopOdd ; CASE 1: Left edge even-aligned, even width SETSWITCH PAGE2ON @@ -655,8 +655,8 @@ WGFancyRect_vertLoop: lda PARAM2 ; Is width even? inc inc - and #$01 - bne WGFancyRect_vertLoopEvenAlignedOddWidth + ror + bcs WGFancyRect_vertLoopEvenAlignedOddWidth lda PARAM2 ; Calculate right edge inc @@ -698,8 +698,8 @@ WGFancyRect_vertLoopOdd: lda PARAM2 ; Is width even? inc inc - and #$01 - bne WGFancyRect_vertLoopOddAlignedOddWidth + ror + bcs WGFancyRect_vertLoopOddAlignedOddWidth lda PARAM2 ; Calculate right edge inc diff --git a/views.s b/views.s index 1b6771f..21357c6 100644 --- a/views.s +++ b/views.s @@ -324,8 +324,8 @@ paintCheck: bne paintCheck_selected lda WG_VIEWRECORDS+9,y - and #$01 - beq paintCheck_unselectedUnchecked + ror + bcc paintCheck_unselectedUnchecked lda #'D' bra paintCheck_plot @@ -336,8 +336,8 @@ paintCheck_unselectedUnchecked: paintCheck_selected: lda WG_VIEWRECORDS+9,y - and #$01 - beq paintCheck_selectedUnchecked + ror + bcc paintCheck_selectedUnchecked lda #'E' bra paintCheck_plot diff --git a/weegui.dsk b/weegui.dsk index b093b3f7fc24dabab968801e853fe565cbb0eb70..9d8e611072b6bdb50cb061cadc015c2c4ea5a77c 100644 GIT binary patch delta 4943 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 a96pBe8B9LAuuz|g>4)&4p|^%~{{I4`02W&S