winsys: arrow cosmetix
[urasm.git] / libs / winsys / winarrow.zas
bloba28e93d5c9eee47d4f8a6f28da53ee090f6d190e
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 Draw:
108   ; ÓÎÁÞÁÌÁ ÓÏÈÒÁÎÑÅÍ ÜËÒÁÎ
109   ld    hl,arrow_spr_0  ; ÔÉÐÁ ÓÐÒÁÊÔ ÓÔÒÅÌËÉ
110 @sprAddr: equ $-2
111   ld    b,(hl)          ; ×ÙÓÏÔÁ ÓÐÒÁÊÔÁ
112   inc   hl
113   ld    de,(curX)  ; ËÏÏÒÄÉÎÁÔÙ
114   ;call WinMisc.ScrAddrDEH
115   ld    a,d
116   cp    192
117   jp    nc,.badycoord
118   and   a
119   rra
120   scf
121   rra
122   and   a
123   rra
124   xor   d
125   and   #F8
126   xor   d
127   ld    h,a
128   ld    a,e
129   rlca
130   rlca
131   rlca
132   xor   d
133   and   #C7
134   xor   d
135   rlca
136   rlca
137   ld    l,a
138   ld    a,e
139   and   #07
140   ;
141   ld    (restVDestVar),hl
142   ld    (.drawVShiftVar),a
143   ex    de,hl
144   ld    hl,(saveBufAddr)
145   ld    (hl),b
146   inc   hl
147   ex    de,hl
148   ld    c,#ff
149 .saveLoop:
150   dup 3
151   ldi
152   edup
153   dec hl,hl,hl
154   ;call WinMisc.DownHL
155   inc   h
156   ld    a,h
157   and   #07
158   jp    nz,.downHLok
159   ld    a,l
160   sub   #E0
161   ld    l,a
162   sbc   a,a
163   and   #F8
164   add   a,h
165   ld    h,a
166 .downHLok:
167   ;
168   djnz  .saveLoop
169   ; ×Ó£, ÓÏÈÒÁÎÉÌÉ
170   ld    hl,(sprAddr)  ; ÔÉÐÁ ÓÐÒÁÊÔ ÓÔÒÅÌËÉ
171   ld    b,(hl)        ; ×ÙÓÏÔÁ ÓÐÒÁÊÔÁ
172   inc   hl
173   ; ÇÏÔÏ×ÉÍ É ÒÉÓÕÅÍ ÓÔÒÅÌËÕ
174   ; ÉÓÐÏÌØÚÕÅÍ ÓÔÜË ÄÌÑ ÓËÏÒÏÓÔÉ, ÔÁË ÞÔÏ ÌÕÞÛÅ ÂÙÔØ
175   ; Õ×ÅÒÅÎÎÙÍ, ÞÔÏ ÐÒÅÒÙ×ÁÎÉÊ ÎÅ ÂÕÄÅÔ
176   ld    (.oldSPVar),sp
177   ld    sp,hl
178   ld    hl,(restVDestVar)
179   ld    a,b
180 .lineLoop:
181   ex    af,af'
182   pop   de
183   ld    b,#00
184   exx
185   pop   de
186   ld    b,#ff
187   exx
188   ld    a,#07
189 .drawVShiftVar: equ $-1
190   or    a
191   jp    z,.skipShift
192   ; ÓÄ×ÉÇÁÅÍ ÓÔÒÏËÕ ÓÐÒÁÊÔÁ É ÍÁÓËÉ
193 .shiftLoop:
194   srl   e
195   rr    d
196   rr    b
197   exx
198   scf
199   rr    e
200   rr    d
201   rr    b
202   exx
203   dec   a
204   jp    nz,.shiftLoop
205   ; ÆÉÇÁÞÉÍ ÎÁ ÜËÒÁÎ
206 .skipShift:
207   ld    a,l
208   ld    (.drawVXVar),a
209   or    #E0
210   ld    c,a
211   ld    a,(hl)
212   exx
213   and   e
214   exx
215   xor   e
216   ld    (hl),a
217   inc   l
218   inc   c
219   jp    z,.skipX
220   ld    a,(hl)
221   exx
222   and   d
223   exx
224   xor   d
225   ld    (hl),a
226   inc   l
227   inc   c
228   jp    z,.skipX
229   ld    a,(hl)
230   exx
231   and   b
232   exx
233   xor   b
234   ld    (hl),a
235 .skipX:
236   ld   l,#2C
237 .drawVXVar: equ $-1
238   ;call WinMisc.DownHL
239   inc   h
240   ld    a,h
241   and   #07
242   jp    nz,.downHLok1
243   ld    a,l
244   sub   #E0
245   ld    l,a
246   sbc   a,a
247   and   #F8
248   add   a,h
249   cp    #58
250   jp    nc,.done  ; ÚÁ ÜËÒÁΠÎÅ ÍÕÓÏÒÉÍ
251   ld    h,a
252 .downHLok1:
253   ex    af,af'
254   dec   a
255   jp    nz,.lineLoop
256   ; ÏÔÓÔÒÅÌÑÌÉÓØ!
257 .done:
258   ld    sp,0
259 .oldSPVar: equ $-2
260   ret
261 .badycoord:
262   ld    hl,0
263   ld    (restVDestVar),hl
264   ret
267   endmodule