UrForth: properly mark scattered colon words
[urasm.git] / libs / winsys / winarrow.zas
blob432fb82a25a266d40f31d5c7d114ad3235aae04e
1   module WinArrow
3 curX: db 0
4 curY: db 0
6 ;sprAddr: dw arrow_spr_0
8 ; used in input driver
9 ; placed here for consistency
10 newX: db 0
11 newY: db 0
13 arrow_spr_0:
14   ; ×ÙÓÏÔÁ. ÍÁËÓÉÍÁÌØÎÁÑ -- ÏËÏÌÏ 80, ÎÏ ÔÏÒÍÏÚÁ ÂÕÄÕÔ ÔÅ ÅÝ£ %-)
15  IF 0
16   db 12
17   ; sprite,sprite,mask,mask
18   db %00000000,%00000000, %00111111,%11111111
19   db %01000000,%00000000, %00011111,%11111111
20   db %01100000,%00000000, %00001111,%11111111
21   db %01110000,%00000000, %00000111,%11111111
22   db %01111000,%00000000, %00000011,%11111111
23   db %01111100,%00000000, %00000001,%11111111
24   db %01111110,%00000000, %00000000,%11111111
25   db %01111111,%00000000, %00000000,%01111111
26   db %01110000,%00000000, %00000000,%01111111
27   db %01100000,%00000000, %00001111,%11111111
28   db %01000000,%00000000, %00011111,%11111111
29   db %00000000,%00000000, %00111111,%11111111
30  ELSE
31   db 8
32   ; sprite,sprite,mask,mask
33   db %11111111,%10000000, %00000000,%01111111
34   db %01000000,%10000000, %10000000,%01111111
35   db %00100000,%10000000, %11000000,%01111111
36   db %00010000,%01100000, %11100000,%00011111
37   db %00001001,%10011000, %11110000,%00000111
38   db %00000110,%01100110, %11111001,%10000001
39   db %00000000,%00011001, %11111111,%11100000
40   db %00000000,%00000110, %11111111,%11111001
41  ENDIF
44 saveBufAddr:
45   defw #5B00  ; ÎÅÔ ÎÉÆÉÇÁ ÐÏ ÜÔÏÍÕ ÁÄÒÅÓÕ. ÂÕÆÅÒ ÐÒÉÎÔÅÒÁ ÏÎ, ÎÁ 256 ÂÁÊÔÏ×
48 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49 ;; init arrow
50 ;; out:
51 ;;   hl: dead
52 Init:
53   ld    hl,(saveBufAddr)
54   ld    (hl),0
55   ret
58 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
59 ;; ×ÏÓÓÔÁÎÏ×ÉÍ ÜËÒÁÎ, ÚÁÇÁÖÅÎÙÊ ÓÔÒÅÌËÏÊ
60 ;; ÜÔÁ ÆÉÇÎÑ ÍÏÖÅÔ ÚÁÐÉÓÁÔØ Ä×Á ÌÉÛÎÉÈ ÂÁÊÔÁ × ÁÔÒÉÂÕÔÙ
61 ;; ÎÅ ÓÔÒÁÛÎÏ, ÎÏ ÓÔÏÉÔ ÐÏÍÎÉÔØ
62 ;; out:
63 ;;   af,bc,de,hl: ÇÁÄÏÓÔØ
64 Rest:
65   ld    de,#0000
66 @restVDestVar: equ $-2
67   ld    a,d
68   or    a
69   ret   z
70   ld    hl,0
71   ld    (restVDestVar),hl
72   ld    hl,(saveBufAddr)
73   ld    a,(hl)     ; ÜÔÏ ×ÙÓÏÔÁ
74   or    a
75   ret   z
76   ld    b,a
77   inc   hl
78   ld    c,#FF
79 .loop:
80   dup 3
81   ldi
82   edup
83   dec de,de,de
84   ; ÏÄÎÁ ÐÉËÓÅÌ-ÓÔÒÏËÁ ×ÎÉÚ (de)
85   inc   d
86   ld    a,d
87   and   #07
88   jp    nz,.downDEok
89   ld    a,e
90   sub   #E0
91   ld    e,a
92   sbc   a,a
93   and   #F8
94   add   a,d
95   cp    #58
96   ret   nc  ; ÚÁ ÜËÒÁΠÎÅ ÍÕÓÏÒÉÍ
97   ld    d,a
98 .downDEok:
99   djnz  .loop
100   ret
103 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
104 ;; ÓÏÈÒÁÎÉÍ ÜËÒÁΠÐÏÄ ÓÔÒÅÌËÏÊ, ÎÁÒÉÓÕÅ͠ţ
105 ;; out:
106 ;;   af,af',bc,de,hl,bc',de': ÇÁÄÏÓÔØ
107 ;; ~7500 tstates for 8 pixel high arrow
108 Draw:
109   ; ÓÎÁÞÁÌÁ ÓÏÈÒÁÎÑÅÍ ÜËÒÁÎ
110   ld    hl,arrow_spr_0  ; ÔÉÐÁ ÓÐÒÁÊÔ ÓÔÒÅÌËÉ
111 @sprAddr: equ $-2
112   ld    b,(hl)          ; ×ÙÓÏÔÁ ÓÐÒÁÊÔÁ
113   inc   hl
114   ld    de,(curX)  ; ËÏÏÒÄÉÎÁÔÙ
115   ;call WinMisc.ScrAddrDEH
116   ld    a,d
117   cp    192
118   jp    nc,.badycoord
119   and   a
120   rra
121   scf
122   rra
123   and   a
124   rra
125   xor   d
126   and   #F8
127   xor   d
128   ld    h,a
129   ld    a,e
130   rlca
131   rlca
132   rlca
133   xor   d
134   and   #C7
135   xor   d
136   rlca
137   rlca
138   ld    l,a
139   ld    a,e
140   and   #07
141   ;
142   ld    (restVDestVar),hl
143   ld    (.drawVShiftVar),a
144   ex    de,hl
145   ld    hl,(saveBufAddr)
146   ld    (hl),b
147   inc   hl
148   ex    de,hl
149   ld    c,#ff
150 .saveLoop:
151   dup 3
152   ldi
153   edup
154   dec hl,hl,hl
155   ;call WinMisc.DownHL
156   inc   h
157   ld    a,h
158   and   #07
159   jp    nz,.downHLok
160   ld    a,l
161   sub   #E0
162   ld    l,a
163   sbc   a,a
164   and   #F8
165   add   a,h
166   ld    h,a
167 .downHLok:
168   ;
169   djnz  .saveLoop
170   ; ×Ó£, ÓÏÈÒÁÎÉÌÉ
171   ld    hl,(sprAddr)  ; ÔÉÐÁ ÓÐÒÁÊÔ ÓÔÒÅÌËÉ
172   ld    b,(hl)        ; ×ÙÓÏÔÁ ÓÐÒÁÊÔÁ
173   inc   hl
174   ; ÇÏÔÏ×ÉÍ É ÒÉÓÕÅÍ ÓÔÒÅÌËÕ
175   ; ÉÓÐÏÌØÚÕÅÍ ÓÔÜË ÄÌÑ ÓËÏÒÏÓÔÉ, ÔÁË ÞÔÏ ÌÕÞÛÅ ÂÙÔØ
176   ; Õ×ÅÒÅÎÎÙÍ, ÞÔÏ ÐÒÅÒÙ×ÁÎÉÊ ÎÅ ÂÕÄÅÔ
177   ld    (.oldSPVar),sp
178   ld    sp,hl
179   ld    hl,(restVDestVar)
180   ld    a,b
181 .lineLoop:
182   ex    af,af'
183   pop   de
184   ld    b,#00
185   exx
186   pop   de
187   ld    b,#ff
188   exx
189   ld    a,#07
190 .drawVShiftVar: equ $-1
191   or    a
192   jp    z,.skipShift
193   ; ÓÄ×ÉÇÁÅÍ ÓÔÒÏËÕ ÓÐÒÁÊÔÁ É ÍÁÓËÉ
194 .shiftLoop:
195   srl   e
196   rr    d
197   rr    b
198   exx
199   scf
200   rr    e
201   rr    d
202   rr    b
203   exx
204   dec   a
205   jp    nz,.shiftLoop
206   ; ÆÉÇÁÞÉÍ ÎÁ ÜËÒÁÎ
207 .skipShift:
208   ld    a,l
209   ld    (.drawVXVar),a
210   or    #E0
211   ld    c,a
212   ld    a,(hl)
213   exx
214   and   e
215   exx
216   xor   e
217   ld    (hl),a
218   inc   l
219   inc   c
220   jp    z,.skipX
221   ld    a,(hl)
222   exx
223   and   d
224   exx
225   xor   d
226   ld    (hl),a
227   inc   l
228   inc   c
229   jp    z,.skipX
230   ld    a,(hl)
231   exx
232   and   b
233   exx
234   xor   b
235   ld    (hl),a
236 .skipX:
237   ld   l,#2C
238 .drawVXVar: equ $-1
239   ;call WinMisc.DownHL
240   inc   h
241   ld    a,h
242   and   #07
243   jp    nz,.downHLok1
244   ld    a,l
245   sub   #E0
246   ld    l,a
247   sbc   a,a
248   and   #F8
249   add   a,h
250   cp    #58
251   jp    nc,.done  ; ÚÁ ÜËÒÁΠÎÅ ÍÕÓÏÒÉÍ
252   ld    h,a
253 .downHLok1:
254   ex    af,af'
255   dec   a
256   jp    nz,.lineLoop
257   ; ÏÔÓÔÒÅÌÑÌÉÓØ!
258 .done:
259   ld    sp,0
260 .oldSPVar: equ $-2
261   ret
262 .badycoord:
263   ld    hl,0
264   ld    (restVDestVar),hl
265   ret
268   endmodule