250 lines
9.9 KiB
Diff
250 lines
9.9 KiB
Diff
From c3a397c28c4c0f2502e038b58bc4d282242f22a9 Mon Sep 17 00:00:00 2001
|
|
From: xopr <xopr@ackspace.nl>
|
|
Date: Mon, 20 Jan 2020 13:30:17 +0100
|
|
Subject: [PATCH] Added SYS_VDrawWord function
|
|
|
|
---
|
|
Core/dev.py | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
1 file changed, 216 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/Core/dev.py b/Core/dev.py
|
|
index 76a18881..4c3ef583 100755
|
|
--- a/Core/dev.py
|
|
+++ b/Core/dev.py
|
|
@@ -815,9 +815,23 @@ ld(hi('REENTER'),Y) #15 slot 0xc8
|
|
jmp(Y,'REENTER') #16
|
|
ld(-20/2) #17
|
|
|
|
-ld(hi('REENTER'),Y) #15 slot 0xcb
|
|
-jmp(Y,'REENTER') #16
|
|
-ld(-20/2) #17
|
|
+#-----------------------------------------------------------------------
|
|
+# Extension SYS_VDrawWord_134
|
|
+#-----------------------------------------------------------------------
|
|
+
|
|
+# Draw 3x5 glyph from word
|
|
+# sysArgs[0] Color 0 (background)
|
|
+# sysArgs[1] Color 1 (pen)
|
|
+# sysArgs[2:3] 16 bits (word) (destructive), bit (14, 9, 4),(13, 8, 3),(12, 7, 2),(11, 6, 1),(10, 5, 0)
|
|
+# they are grouped in chunks of 5 bits from top left to bottom right (with special case: MSB=offset)
|
|
+# for example: bit 14 is column 1 row 1, ..., bit 10 is column 1 row 5
|
|
+# bit 9 is column 2 row 1, ..., bit 0 is column 3 row 5
|
|
+# sysArgs[4:5] Position on screen
|
|
+
|
|
+label('SYS_VDrawWord_134')
|
|
+ld(hi('sys_VDrawWord'),Y);C('Draw a 3x5 glyph') #15 slot 0xcb
|
|
+jmp(Y,'sys_VDrawWord') #16
|
|
+ld([sysArgs+4], X) #17
|
|
|
|
ld(hi('REENTER'),Y) #15 slot 0xce
|
|
jmp(Y,'REENTER') #16
|
|
@@ -5349,6 +5363,205 @@ ld([sysArgs+2]) # Decrement byte count and loop
|
|
bne('.slb1') #
|
|
suba(1) #
|
|
|
|
+# SYS_VDrawWord_134 implementation
|
|
+label('sys_VDrawWord')
|
|
+
|
|
+# Line 1
|
|
+ld([sysArgs+5], Y) #18 store arg5 in Y
|
|
+
|
|
+#TODO: MSB set means empty line (bmi)
|
|
+ld([sysArgs+3]) #19 load (high) byte
|
|
+anda(0x40) #20 mask bit (r1c1)
|
|
+bne('.fgc1') #21 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl1') #22 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #23a select BG color
|
|
+label('.fgc1')
|
|
+ld([sysArgs+1]) #23b select FG color
|
|
+label('.drawpxl1')
|
|
+st([Y,Xpp]) #24 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+3]) #25 load (high) byte
|
|
+anda(0x02) #26 mask bit (r1c2)
|
|
+bne('.fgc2') #27 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl2') #28 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #29a select BG color
|
|
+label('.fgc2')
|
|
+ld([sysArgs+1]) #29b select FG color
|
|
+label('.drawpxl2')
|
|
+st([Y,Xpp]) #30 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #31 load (low) byte
|
|
+anda(0x10) #32 mask bit (r1c3)
|
|
+bne('.fgc3') #33 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl3') #34 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #35a select BG color
|
|
+label('.fgc3')
|
|
+ld([sysArgs+1]) #35b select FG color
|
|
+label('.drawpxl3')
|
|
+st([Y,Xpp]) #36 Draw pixel, increase X
|
|
+
|
|
+
|
|
+ld([sysArgs+5]) #37 load arg5 (vert)
|
|
+adda(1) #38 increase by one
|
|
+st([sysArgs+5]) #39 store result (destructive)
|
|
+
|
|
+
|
|
+# Line 2
|
|
+ld(AC, Y) #40 load (new) Y position
|
|
+ld([sysArgs+4], X) #41 store arg4 in X (reset X)
|
|
+
|
|
+ld([sysArgs+3]) #42 load (high) byte
|
|
+anda(0x20) #43 mask bit (r1c1)
|
|
+bne('.fgc4') #44 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl4') #45 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #46a select BG color
|
|
+label('.fgc4')
|
|
+ld([sysArgs+1]) #46b select FG color
|
|
+label('.drawpxl4')
|
|
+st([Y,Xpp]) #47 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+3]) #48 load (high) byte
|
|
+anda(0x01) #49 mask bit (r1c2)
|
|
+bne('.fgc5') #50 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl5') #51 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #52a select BG color
|
|
+label('.fgc5')
|
|
+ld([sysArgs+1]) #52b select FG color
|
|
+label('.drawpxl5')
|
|
+st([Y,Xpp]) #53 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #54 load (low) byte
|
|
+anda(0x08) #55 mask bit (r1c3)
|
|
+bne('.fgc6') #56 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl6') #57 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #58a select BG color
|
|
+label('.fgc6')
|
|
+ld([sysArgs+1]) #58b select FG color
|
|
+label('.drawpxl6')
|
|
+st([Y,Xpp]) #59 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+5]) #60 load arg5 (vert)
|
|
+adda(1) #61 increase by one
|
|
+st([sysArgs+5]) #62 store result (destructive)
|
|
+
|
|
+
|
|
+# Line 3
|
|
+ld(AC, Y) #63 load (new) Y position
|
|
+ld([sysArgs+4], X) #64 store arg4 in X (reset X)
|
|
+
|
|
+ld([sysArgs+3]) #65 load (high) byte
|
|
+anda(0x10) #66 mask bit (r1c1)
|
|
+bne('.fgc7') #67 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl7') #68 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #69a select BG color
|
|
+label('.fgc7')
|
|
+ld([sysArgs+1]) #69b select FG color
|
|
+label('.drawpxl7')
|
|
+st([Y,Xpp]) #70 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #71 load (low) byte
|
|
+anda(0x80) #72 mask bit (r1c2)
|
|
+bne('.fgc8') #73 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl8') #74 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #75a select BG color
|
|
+label('.fgc8')
|
|
+ld([sysArgs+1]) #75b select FG color
|
|
+label('.drawpxl8')
|
|
+st([Y,Xpp]) #76 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #77 load (low) byte
|
|
+anda(0x04) #78 mask bit (r1c3)
|
|
+bne('.fgc9') #79 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl9') #80 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #81 select BG color
|
|
+label('.fgc9')
|
|
+ld([sysArgs+1]) #82a select FG color
|
|
+label('.drawpxl9')
|
|
+st([Y,Xpp]) #82b Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+5]) #83 load arg5 (vert)
|
|
+adda(1) #84 increase by one
|
|
+st([sysArgs+5]) #85 store result (destructive)
|
|
+
|
|
+
|
|
+# Line 4
|
|
+ld(AC, Y) #86 load (new) Y position
|
|
+ld([sysArgs+4], X) #87 store arg4 in X (reset X)
|
|
+
|
|
+ld([sysArgs+3]) #88 load (high) byte
|
|
+anda(0x08) #89 mask bit (r1c1)
|
|
+bne('.fgc10') #90 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl10') #91 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #92a select BG color
|
|
+label('.fgc10')
|
|
+ld([sysArgs+1]) #92b select FG color
|
|
+label('.drawpxl10')
|
|
+st([Y,Xpp]) #93 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #94 load (low) byte
|
|
+anda(0x40) #95 mask bit (r1c2)
|
|
+bne('.fgc11') #96 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl11') #97 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #98a select BG color
|
|
+label('.fgc11')
|
|
+ld([sysArgs+1]) #98b select FG color
|
|
+label('.drawpxl11')
|
|
+st([Y,Xpp]) #99 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #100 load (low) byte
|
|
+anda(0x02) #101 mask bit (r1c3)
|
|
+bne('.fgc12') #102 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl12') #103 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #104a select BG color
|
|
+label('.fgc12')
|
|
+ld([sysArgs+1]) #104b select FG color
|
|
+label('.drawpxl12')
|
|
+st([Y,Xpp]) #105 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+5]) #106 load arg5 (vert)
|
|
+adda(1) #107 increase by one
|
|
+st([sysArgs+5]) #108 store result (destructive)
|
|
+
|
|
+
|
|
+# Line 5
|
|
+ld(AC, Y) #109 load (new) Y position
|
|
+ld([sysArgs+4], X) #110 store arg4 in X (reset X)
|
|
+
|
|
+ld([sysArgs+3]) #111 load (high) byte
|
|
+anda(0x04) #112 mask bit (r1c1)
|
|
+bne('.fgc13') #113 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl13') #114 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #115a select BG color
|
|
+label('.fgc13')
|
|
+ld([sysArgs+1]) #115b select FG color
|
|
+label('.drawpxl13')
|
|
+st([Y,Xpp]) #116 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #117 load (low) byte
|
|
+anda(0x20) #118 mask bit (r1c2)
|
|
+bne('.fgc14') #119 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl14') #120 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #121a select BG color
|
|
+label('.fgc14')
|
|
+ld([sysArgs+1]) #121b select FG color
|
|
+label('.drawpxl14')
|
|
+st([Y,Xpp]) #122 Draw pixel, increase X
|
|
+
|
|
+ld([sysArgs+2]) #123 load (low) byte
|
|
+anda(0x01) #124 mask bit (r1c3)
|
|
+bne('.fgc15') #125 branch if bit set (AC not equal 0)
|
|
+bra('.drawpxl15') #126 jump to "draw pixel"
|
|
+ld([sysArgs+0]) #127a select BG color
|
|
+label('.fgc15')
|
|
+ld([sysArgs+1]) #127b select FG color
|
|
+label('.drawpxl15')
|
|
+st([Y,Xpp]) #128 Draw pixel, increase X
|
|
+
|
|
+# Return to interpreter
|
|
+ld(hi('REENTER'), Y) #129
|
|
+jmp(Y,'REENTER') #130
|
|
+ld(-134/2) #131
|
|
+
|
|
# XXX Unfinished
|
|
|
|
#-----------------------------------------------------------------------
|
|
--
|
|
2.17.1
|
|
|