From 8a960f018b290da981ed51a8fdb4bccded1bf992 Mon Sep 17 00:00:00 2001
From: David Schmenk <dschmenk@gmail.com>
Date: Fri, 27 Dec 2019 17:51:31 -0800
Subject: [PATCH] Fix lines in all directions

---
 src/libsrc/apple/hgrlib.pla | 11 +++--------
 src/libsrc/lines.pla        | 16 ++++++++++++----
 src/samplesrc/hgrtest.pla   | 18 +++++++++++++-----
 3 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/src/libsrc/apple/hgrlib.pla b/src/libsrc/apple/hgrlib.pla
index 8397da7..5ff84f7 100644
--- a/src/libsrc/apple/hgrlib.pla
+++ b/src/libsrc/apple/hgrlib.pla
@@ -655,17 +655,12 @@ export asm hgrHLin(x1, x2, y)#0
         LDA     ESTKH+1
         CMP     ESTKH+2
         BNE     +
-        LDA     ESTKL+0
-        STA     ESTKL+1
-        LDA     ESTKH+0
-        STA     ESTKH+1
-        INX
 end
 asm     _hgrHLinA
-        JMP     $F000
+        JSR     $F000
+        INX
+        RTS
 +       LDY     ESTKL+0,X   ; Y COORD
-        CPY     #192
-        BCS     +
 end
 asm     _hgrHLinB
         LDA     $8000,Y     ; HGRSCANL
diff --git a/src/libsrc/lines.pla b/src/libsrc/lines.pla
index 183d2e3..ce2f256 100644
--- a/src/libsrc/lines.pla
+++ b/src/libsrc/lines.pla
@@ -174,7 +174,9 @@ export def linespans(x1, y1, x2, y2)#0
     fin
     if dx >= dy
         if sx < 0
-            x1, x2 = x2, x1; sy = -sy
+            y1, y2 = y2, y1
+            x1, x2 = x2, x1
+            sy = -sy
         fin
         if dy == 0
             hspan(x1, x2, y1)#0; return
@@ -205,7 +207,9 @@ export def linespans(x1, y1, x2, y2)#0
         majorline(x1, x1 + halflen, x2, y1, sy, hspan)
     else
         if sy < 0
-            x1, x2 = x2, x1; sx = -sx
+            x1, x2 = x2, x1
+            y1, y2 = y2, y1
+            sx = -sx
         fin
         if dx == 0
             vspan(y1, y2, x1)#0; return
@@ -251,7 +255,9 @@ export def line(x1, y1, x2, y2)#0
     fin
     if dx2 >= dy2
         if sx < 0
-            sy = -sy; x1, x2 = x2, x1
+            x1, x2 = x2, x1
+            y1, y2 = y2, y1
+            sy = -sy
         fin
         err = dy2 - dx2 / 2
         for x = x1 to x2
@@ -264,7 +270,9 @@ export def line(x1, y1, x2, y2)#0
         next
     else
         if sy < 0
-            sx = -sx; y1, y2 = y2, y1
+            y1, y2 = y2, y1
+            x1, x2 = x2, x1
+            sx = -sx
         fin
         err = dx2 - dy2 / 2
         for y = y1 to y2
diff --git a/src/samplesrc/hgrtest.pla b/src/samplesrc/hgrtest.pla
index e695993..d8a9b6b 100644
--- a/src/samplesrc/hgrtest.pla
+++ b/src/samplesrc/hgrtest.pla
@@ -21,11 +21,11 @@ def testline#0
 
   setlinespans(@hgrHlin, @hgrVlin)
   hgrColor(7)
-  for i = 0 to 191 step 8
-    linespans(0, 0, 279, i)
+  for i = 0 to 191 step 16
+    linespans(0, i, 279, 191 - i)
   next
-  for i = 0 to 279 step 8
-    linespans(0, 0, i, 191)
+  for i = 0 to 279 step 14
+    linespans(i, 0, 279 - i, 191)
   next
 end
 def testblt(sprtnum)#0
@@ -78,7 +78,15 @@ spriteAdd(4, spriteDup(sprtBall))
 spriteAdd(5, spriteDup(sprtBall))
 spriteAdd(6, spriteDup(sprtBall))
 spriteAdd(7, spriteDup(sprtBall))
-testblt(8)
+spriteAdd(8, spriteDup(sprtBall))
+spriteAdd(9, spriteDup(sprtBall))
+spriteAdd(10, spriteDup(sprtBall))
+spriteAdd(11, spriteDup(sprtBall))
+spriteAdd(12, spriteDup(sprtBall))
+spriteAdd(13, spriteDup(sprtBall))
+spriteAdd(14, spriteDup(sprtBall))
+spriteAdd(15, spriteDup(sprtBall))
+testblt(16)
 getc
 txtMode
 done