UrForth: redesigned compilation words to look nicer, and being easier to use
[urasm.git] / samples / allo / allo_main.zas
blob45eded4c29fc214a8f8688c2148168e6c2a247ae
1 ; code by AlCo
3 ;×ÓÅ ËÏÏÒÄÉÎÁÔÙ - ÜÔÏ ËÏÏÒÄ-ÔÙ ÎÏÇ ÓÐÒÁÊÔÁ
4 scrwd   equ 24
5 brim    equ 32-scrwd
6 chels   equ 200 ;ÞÉÓÌÏ ÐÅÒÓÎÁÖÅÊ
7 lpf     equ 220 ;ÓÔÒÏË ÓÐÒÁÊÔÏ× ÚÁ ÆÒÅÊÍ
8 onebyte equ #5c01
9 shadscr equ #a000
10 scr     equ #4000
11 sprs    equ #7000
12 imer    equ #5d5d
13 imtab   equ #5b00
14 adrbuf  equ #b800 ;7 bytes=1 sprite on scr
15 maxspr  equ 255
16 arwbuf  equ #5d39
19   ld    a,201
20   ld    (prsp),a
21   call  inimous
22   call  muz
23   ld    hl,chelbuf
24   ld    b,chels
25 setch0:
26   call  rnd
27   and   #c0
28   ld    (hl),a
29   inc   hl
30   call  rnd
31   and   #39
32   cp    48
33   jr    c,$+4
34   sub   48
35   add   a,sprs/256
36   ld    (hl),a
37   inc   hl
38   call  rnd
39   ld    (hl),a
40   inc   hl
41   call  rnd
42   ld    (hl),a
43   inc   hl
44   djnz  setch0
45   ld    (hl),-1
46   ld    de,sprs
47   ld    hl,sc1
48   call  getsprs
49   ld    hl,sc2
50   call  getsprs
51   call  7766
53   ld    hl,adrbuf
54   ld    de,adrbuf+1
55   ld    bc,maxspr*7-1
56   ld    (hl),b ;disable "sub b:jp c"
57   ldir
58   call  setim
59 beg:
60   call  newpict
61   ld    ix,chelbuf
62 st:
63   ld    l,(ix)
64   inc   l
65   jr    z,stq
66   dec   l
67   ld    h,(ix+1)
68   ld    e,(ix+2)
69   ld    d,(ix+3)
70   push  bc
71   ld    a,h
72   add   a,2
73   xor   h
74   and   6
75   xor   h
76   ld    h,a
77   push  hl
78   ld    a,h
79   sub   sprs/256
80   ld    h,a
81   dup   3
82   add   hl,hl
83   edup
84   ld    a,h
85   and   14
86   ld    l,a
87   ld    h,0
88   ld    bc,dirs
89   add   hl,bc
90   ld    a,(hl)
91   add   a,a
92   add   a,e
93   ld    e,a
94   inc   hl
95   ld    a,(hl)
96   add   a,a
97   add   a,d
98   ld    d,a
99   pop   hl
100   call  rnd
101   cp    8
102   jr    nc,non
103   ld    l,0
104   srl   a
105   rr    l
106   rra
107   rr    l
108   xor   h
109   and   1
110   xor   h
111   ld    h,a
112 non:
113   ld    (ix+0),l
114   ld    (ix+1),h
115   ld    (ix+2),e
116   ld    (ix+3),d
117   ld    a,h
118   and   6
119   cp    6
120   jr    nz,$+4
121   res   2,h
122   call  priy
123   ld    bc,4
124   add   ix,bc
125   pop   bc
126   jr    st
127 stq:
128   call  endpict
129   call  8020
130   jp    c,beg
131 quit:
132   ld    iy,23610
133   ld    hl,10072
134   exx
135   im    1
136   call  muz
137   ei
138   ret
140 dirs:
141   defb  0, 1
142   defb -1, 1
143   defb -1, 0
144   defb -1,-1
145   defb  0,-1
146   defb  1,-1
147   defb  1, 0
148   defb  1, 1
150 newpict:
151   ld    (clshsp+1),sp
152   ld    sp,shadscr+6144
153   ld    hl,-1;#2222
154   ld    de,-1;#8888
155   ld    b,88
156 clshad0:
157   DUP 16
158     push  hl
159   EDUP
160   DUP 16
161     push  de
162   EDUP
163   djnz  clshad0
164 clshsp:
165   ld    sp,0
166   ld    hl,shadscr+512
167   ld    de,shadscr
168   ld    bc,512
169   ldir
170   ld    iy,adrbuf
171   ld    (rloksp+1),iy;begin new picture
172   ld    a,237
173   ld    (prsp),a
174   ret
176 endpict:
177   ld    de,prspqq
178   ld    a,e
179   call  ldiy
180 noepic:
181   ld    a,2
182   out   (#fe),a
183   halt
184   ld    a,(prsp)
185   cp    201
186   jr    nz,noepic
187   xor   a
188   out   (#fe),a
189 arxyold:
190   ld    bc,0
191   call  armap+4
192   ld    hl,prshadf
193   inc   (hl)
194   push  hl
195   ld    hl,2+shadscr
196   ld    de,scr
197   ld    c,24
198 prshad0:
199   ld    b,4
200 prshad1:
201   push  bc
202   DUP scrwd-1
203     ldi
204   EDUP
205   ld    a,(hl)
206   ld    (de),a
207   inc   d
208   set   5,l
209   DUP scrwd-1
210     ldd
211   EDUP
212   ld    a,(hl)
213   ld    (de),a
214   inc   d
215   ld    bc,32
216   add   hl,bc
217   pop   bc
218   djnz  prshad1
219   ld    a,e
220   add   a,32
221   ld    e,a
222   jr    c,$+6
223   ld    a,d
224   sub   8
225   ld    d,a
226   dec   c
227   jr    nz,prshad0
228   pop   hl
229   ld    (hl),c
230   ret
232 priy:
233   ld    b,16
234   ld    a,d
235   cp    b
236   jr    nc,$+4
237   ld    b,d
238   inc   b
239   sub   192
240   jr    c,pr16c
241   cp    b
242   ret   nc
243   ld    c,a
244   cp    l
245   add   a,b
246   ret   z
247   ld    b,0
248   inc   c
249   sla   c
250   add   hl,bc
251   add   hl,bc
252   ld    b,a
253   ld    d,191
254 pr16c:
255   ld    a,e
256   cp    scrwd*8+16
257   ret   nc
258   ld    (iy+3),l
259   ld    (iy+4),h
260   DUP 3
261     srl   d
262     rr    e
263   EDUP
264   ld    hl,shadscr
265   add   hl,de
266   ld    (iy),b
267   ld    (iy+1),l
268   ld    (iy+2),h
269   and   7
270   add   a,a
271   ld    hl,tabrls
272   add   a,l
273   ld    l,a
274   jr    nc,$+3
275   inc   h
276   ld    a,(hl)
277   inc   hl
278   ld    d,(hl)
279 ldiy:
280   ld    (iy+5),a
281   ld    (iy+6),d
282   ld    bc,7
283   add   iy,bc
284   cp    (iy-2)
285   ret   z
286   ;ÓÌÕÞÉÌÏÓØ ÐÒÅÒÙ×ÁÎÉÅ
287   ld    (iy-2),a
288   ld    (iy-1),d
289   ret
291 tabrls:
292   defw rl0,rl7,rl6,rl5,rl4,rl3,rl2,rl1
294 prsp:
295   ld    (prspq+1),sp;call every frame
296   ld    de,-34
297   ld    c,lpf
298   jp    rloksp
299 prspqq:
300   ld    a,201        ;last sprite
301   ld    (prsp),a ;"pict finished" sign
302 prspq:
303   ld    sp,0 ;every lpf lines
304   ret
306 rl1:
307   ld    (rloksp+1),sp
308   ld    sp,hl
309   exx
310 rl10:
311   ld    a,(hl)
312   exx
313   pop   bc
314   pop   hl
315   ld    de,-#80
316   add   hl,hl
317   rl    e
318   rl    c
319   rl    b
320   rl    d
321   and   d
322   xor   e
323   exx
324   ld    (hl),a
325   inc   l
326   ld    a,(hl)
327   exx
328   and   b
329   xor   h
330   exx
331   ld    (hl),a
332   inc   l
333   ld    a,(hl)
334   exx
335   and   c
336   xor   l
337   exx
338   ld    (hl),a
339   add   hl,de
340   djnz  rl10
341   jp    rloksp
342 rl4:
343   ld    (rloksp+1),sp
344   ld    sp,hl
345   ld    hl,onebyte
346   exx
347   ld    (rl4c+1),a
348 rl40:
349   ld    a,d
350   exx
351   pop   bc
352   pop   de
353   ld    (hl),c
354   rld
355   ld    c,(hl)
356   ld    (hl),b
357   rld
358   ld    b,(hl)
359   exx
360   and   (hl)
361   ld    c,a
362   exx
363   xor   a
364   ld    (hl),e
365   rld
366   ld    e,(hl)
367   ld    (hl),d
368   rld
369   exx
370   xor   c
371   ld    (hl),a
372   inc   l
373   ld    a,(hl)
374   exx
375   and   b
376   xor   (hl)
377   exx
378   ld    (hl),a
379   inc   l
380   ld    a,(hl)
381   exx
382   and   c
383   xor   e
384   exx
385   ld    (hl),a
386   add   hl,de
387   djnz  rl40
388 rl4c:
389   ld    c,0
390   jp    rloksp
391 rl7:
392   ld    (rloksp+1),sp
393   ld    sp,hl
394   exx
395 rl70:
396   ld    a,(hl)
397   exx
398   pop   bc
399   pop   hl
400   ld    de,#ff01
401   srl   h
402   rr    l
403   rr    e
404   rr    b
405   rr    c
406   rr    d
407   and   b
408   xor   h
409   exx
410   ld    (hl),a
411   inc   l
412   ld    a,(hl)
413   exx
414   and   c
415   xor   l
416   exx
417   ld    (hl),a
418   inc   l
419   ld    a,(hl)
420   exx
421   and   d
422   xor   e
423   exx
424   ld    (hl),a
425   add   hl,de
426   djnz  rl70
427   jp    rloksp
428 rl6:
429   ld    (rloksp+1),sp
430   ld    sp,hl
431   exx
432   scf
433   ld    e,-30
434   inc   l
435   inc   l
436 rl60:
437   ld    a,(hl)
438   exx
439   ld    e,a
440   pop   bc
441   pop   hl
442   sbc   a,a
443   DUP 2
444     rr    b
445     rr    c
446     rra
447   EDUP
448   and   e
449   ld    e,a
450   xor   a
451   DUP 2
452     rr    h
453     rr    l
454     rra
455   EDUP
456   xor   e
457   exx
458   ld    (hl),a
459   dec   l
460   ld    a,(hl)
461   exx
462   and   c
463   xor   l
464   exx
465   ld    (hl),a
466   dec   l
467   ld    a,(hl)
468   exx
469   and   b
470   xor   h
471   exx
472   ld    (hl),a
473   add   hl,de
474   djnz  rl60
475   jp    rloke
476 rl3:
477   ld    (rloksp+1),sp
478   ld    sp,hl
479   exx
480   scf
481 rl30:
482   ld    a,(hl)
483   exx
484   ld    c,a
485   pop   hl
486   sbc   a,a
487   DUP 3
488     add  hl,hl
489     inc  l
490     rla
491   EDUP
492   ex    de,hl
493   and   c
494   ld    c,a
495   pop   hl
496   xor   a
497   DUP 3
498     add   hl,hl
499     rla
500   EDUP
501   xor   c
502   exx
503   ld    (hl),a
504   inc   l
505   ld    a,(hl)
506   exx
507   and   d
508   xor   h
509   exx
510   ld    (hl),a
511   inc   l
512   ld    a,(hl)
513   exx
514   and   e
515   xor   l
516   exx
517   ld    (hl),a
518   add   hl,de
519   djnz  rl30
520   jp    rloksp
521 rl2:
522   ld    (rloksp+1),sp
523   ld    sp,hl
524   exx
525   scf
526 rl20:
527   ld    a,(hl)
528   exx
529   ld    c,a
530   pop   hl
531   sbc   a,a
532   DUP 2
533     add   hl,hl
534     inc   l
535     rla
536   EDUP
537   ex    de,hl
538   and   c
539   ld    c,a
540   pop   hl
541   xor   a
542   DUP 2
543     add   hl,hl
544     rla
545   edup
546   xor   c
547   exx
548   ld    (hl),a
549   inc   l
550   ld    a,(hl)
551   exx
552   and   d
553   xor   h
554   exx
555   ld    (hl),a
556   inc   l
557   ld    a,(hl)
558   exx
559   and   e
560   xor   l
561   exx
562   ld    (hl),a
563   add   hl,de
564   djnz  rl20
565   jp    rloksp
566 rl5:
567   ld    (rloksp+1),sp
568   ld    sp,hl
569   exx
570   scf
571   ld    e,-30
572   inc   l
573   inc   l
574 rl50:
575   ld    a,(hl)
576   exx
577   ld    e,a
578   pop   bc
579   pop   hl
580   sbc   a,a
581   DUP 3
582     rr    b
583     rr    c
584     rra
585   EDUP
586   and   e
587   ld    e,a
588   xor   a
589   DUP 3
590     rr    h
591     rr    l
592     rra
593   EDUP
594   xor   e
595   exx
596   ld    (hl),a
597   dec   l
598   ld    a,(hl)
599   exx
600   and   c
601   xor   l
602   exx
603   ld    (hl),a
604   dec   l
605   ld    a,(hl)
606   exx
607   and   b
608   xor   h
609   exx
610   ld    (hl),a
611   add   hl,de
612   djnz  rl50
613 rloke:
614   ld    e,-34
615 rloksp:
616   ld    sp,0
617   dec   sp
618   ld    a,c
619   pop   bc ;height
620   sub   b
621   jp    c,prspq
622   ld    c,a
623   pop   hl ;screen addr
624   exx
625   pop   hl ;sprite addr
626   ret  ;prog addr (or quit)
627 rl0:
628   ld    (rloksp+1),sp
629   ld    sp,hl
630   exx
631   inc   e
632 rl00:
633   ld    a,(hl)
634   exx
635   pop   bc
636   pop   hl
637   and   b
638   xor   h
639   exx
640   ld    (hl),a
641   inc   l
642   ld    a,(hl)
643   exx
644   and   c
645   xor   l
646   exx
647   ld    (hl),a
648   add   hl,de
649   djnz  rl00
650   dec   e
651   jp    rloksp
652 getsprs:
653   push  de
654   ld    de,#4000
655   push  de
656   ld    bc,#1800
657   ldir
658   pop   hl
659   pop   de
660   ld    b,96
661 gsprs1:
662   push  bc
663   push  hl
664   call  getspr
665   pop   hl
666   ld    a,l
667   add   a,4
668   ld    l,a
669   and   31
670   jr    nz,gsprse
671   ld    a,l
672   add   a,32
673   ld    l,a
674   jr    nz,gsprse
675   ld    a,h
676   add   a,8
677   ld    h,a
678 gsprse:
679   pop   bc
680   djnz  gsprs1
681   ret
683 getspr:
684   ld    bc,#720
685   add   hl,bc
686   ld    bc,#10ff
687 getspr0:
688   push  hl
689   ld    a,(hl)
690   inc   l
691   ex    af,af'
692   ld    a,(hl)
693   inc   l
694   inc   l
695   xor   (hl)
696   dec   l
697   ld    (de),a
698   inc   de
699   ex    af,af'
700   xor   (hl)
701   ld    (de),a
702   inc   de
703   ld    a,(hl)
704   inc   l
705   ldi
706   ld    (de),a
707   inc   de
708   pop   hl
709   call  uhl
710   djnz  getspr0
711   ret
713 dhl:
714   inc   h
715   ld    a,h
716   and   7
717   ret   nz
718   ld    a,l
719   add   a,32
720   ld    l,a
721   ret   c
722   ld    a,h
723   sub   8
724   ld    h,a
725   ret
727 uhl:
728   ld    a,h
729   dec   h
730   and   7
731   ret   nz
732   ld    a,l
733   sub   32
734   ld    l,a
735   ret   c
736   ld    a,h
737   sub   -8
738   ld    h,a
739   ret
741 rnd:
742   push  hl
743   ld    hl,(23670)
744   ld    a,h
745   and   31
746   add   a,7
747   ld    h,a
748   inc   l
749   ld    (23670),hl
750   ld    a,r
751   xor   (hl)
752   pop   hl
753   ret
755 ; 0xfefe: V C X Z s    0xeffe: 6 7 8 9 0
756 ; 0xfdfe: G F D S A    0xdffe: Y U I O P
757 ; 0xfbfe: T R E W Q    0xbffe: H J K L e
758 ; 0xf7fe: 5 4 3 2 1    0x7ffe: B N M y _
760 inkey:
761   ; sinclair 2
762   ; bit 0: fire
763   ; bit 1: up
764   ; bit 2: down
765   ; bit 3: right
766   ; bit 4: left
767   ;
768   ; sinclair 2
769   ld    a,#ef
770   in    a,(#fe)
771   rrca
772   rla
773   rla
774   or    #c2
775   ld    c,a
776   ; bit 0: fire? (unused?)
777   ; bit 1: set
778   ; bit 2: up
779   ; bit 3: down
780   ; bit 4: right
781   ; bit 5: left
782   ;
783   ld    a,#df
784   in    a,(#fe)
785   rra           ; 'P'
786   jr    c,$+4
787   res   4,c      ; 'right' flag
788   ;
789   rra           ; 'O'
790   jr    c,$+4
791   res   5,c      ; 'left' flag
792   ;
793   ld    a,#fb
794   in    a,(#fe)
795   rra           ; 'Q'
796   jr    c,$+4
797   res   2,c      ; 'up' flag
798   ;
799   ld    a,#fd
800   in    a,(#fe)
801   rra           ; 'A'
802   jr    c,$+4
803   res   3,c      ; 'down' flag
804   ;
805   ld    a,#fe
806   in    a,(#fe)
807   rra           ; 'SHIFT'
808   jr    c,$+4
809   res   0,c      ; 'fire' flag
810   ; wtf? bnmyp
811   ld    a,#7f
812   in    a,(#fe)
813   cpl
814   and   31
815   jr    z,$+4
816   res   1,c      ; unknown flag
817   ;
818   ld    a,#fa
819 mousef:
820   in    a,(#df)
821   rra
822   jr    c,$+4
823   res   1,c
824   ;
825   rra
826   jr    c,$+4
827   res   0,c
828   ;
829 inkeyf:
830   ; kempston joystick
831   ld    a,(kj_is_here)
832   or    a
833   ret   z
834   in    a,(#1f)
835   ; right
836   rra
837   jr    nc,$+4
838   res   4,c
839   ; left
840   rra
841   jr    nc,$+4
842   res   5,c
843   ; down
844   rra
845   jr    nc,$+4
846   res   3,c
847   ; up
848   rra
849   jr    nc,$+4
850   res   2,c
851   ; fire
852   rra
853   jr    nc,$+4
854   res   0,c
855   ;
856   ret
857   ;rr   c
858   ;ex   af,af'
859   ;rr   c
860   ;ex   af,af'
861   ;rl   c
862   ;ex   af,af'
863   ;rl   c
864   ;ret
866 manage:
867   call  inkey
868   ld    hl,(prar+1)
869   ld    (arxyold+1),hl
870 arvel:
871   ld    de,0
872   ld    a,c
873 key: equ  $+1
874   cp    0
875   ld    (key),a
876   rra
877   rra
878   cpl
879   jr    nz,mantorm
880   and   15
881   jr    nz,mannot
882 mantorm:
883   sra   d
884   inc   d
885   jr    z,$+3
886   dec   d
887   sra   e
888   inc   e
889   jr    z,$+3
890   dec   e
891 mannot:
892   rra
893   jr    nc,$+3
894   dec   d
895   rra
896   jr    nc,$+3
897   inc   d
898   rra
899   jr    nc,$+3
900   inc   e
901   rra
902   jr    nc,$+3
903   dec   e
904   ld    a,d
905   cp    1
906   jr    z,manyok
907   cp    -1
908   jr    z,manyok
909   inc   a
910   jp    p,$+4
911   inc   a
912   sra   a
913   ;sra   a
914   jr    z,verok+1
915 manyok:
916   add   a,h
917   cp    192
918   jr    c,verok
919   xor   a
920   bit   7,d
921   ld    d,a
922   jr    nz,verok
923   ld    a,191
924 verok:
925   ld    h,a
926   ld    a,e
927   cp    1
928   jr    z,manxok
929   cp    -1
930   jr    z,manxok
931   inc   a
932   jp    p,$+4
933   inc   a
934   sra   a
935   ;sra   a
936   jr    z,horok+1
937 manxok:
938   add   a,l
939   bit   7,e
940   jr    z,hornol
941   jr    c,horok
942   xor   a
943   ld    e,a
944 hornol:
945   jr    nc,horok
946   xor   a
947   ld    e,a
948   dec   a
949 horok:
950   ld    l,a
951   ld    (arvel+1),de
952   ld    (prar+1),hl
953 managef:
954   ld    a,-5
955   in    a,(#df)
956 oldx:
957   ld    e,0
958   ld    (oldx+1),a
959   sub   e
960   jp    p,mpx
961   add   a,l
962   jr    c,mxq
963   xor   a
964   ld    l,a
965 mpx:
966   add   a,l
967   jr    nc,$+3
968   sbc   a,a
969 mxq:
970   ld    l,a
971   ld    a,-1
972   in    a,(#df)
973 oldy:
974   ld    d,0
975   ld    (oldy+1),a
976   sub   d
977   neg
978   jp    p,mpy
979   add   a,h
980   jr    c,myq
981   xor   a
982   ld    h,a
983 mpy:
984   add   a,h
985   ld    h,191
986   cp    h
987   jr    nc,$+3
988 myq:
989   ld    h,a
990   ld    (prar+1),hl
991   ret
993 prar:
994   ld    bc,0
995   ld    a,b
996   call  8881
997   inc   a
998   ld    b,a
999   ld    a,-1
1000   add   a,a
1001   djnz  $-1
1002   ld    (arrown+1),a
1003   ld    (re+1),hl
1004   ld    de,sprar
1005   ex    de,hl
1006   ld    ix,arwbuf
1007   ld    b,12
1008 arrow0:
1009   ld    c,(hl);mask
1010   inc   hl
1011   push  hl
1012   ld    l,(hl);sprite
1013 arrown:
1014   ld    h,0
1015   ld    a,(de)
1016   ld    (ix),a
1017   scf
1018   sbc   a,a
1019 arrow1:
1020   rl    c
1021   rla
1022   add   hl,hl
1023   jr    c,arrow1
1024   and   (ix)
1025   or    h
1026   ld    (de),a
1027   inc   e
1028   ld    a,e
1029   and   31
1030   ld    a,(de)
1031   ld    (ix+15),a
1032   jr    z,arrow3
1033   and   c
1034   or    l
1035   ld    (de),a
1036 arrow3:
1037   pop   hl
1038   inc   hl
1039   inc   ix
1040   dec   e
1041   call  dde
1042   ld    a,d
1043   cp    88
1044   ret   z
1045   djnz  arrow0
1046   ret
1048 armap:
1049   ld    bc,(prar+1)
1050   ld    a,c
1051   and   7
1052   DUP 3
1053     srl   b
1054     rr    c
1055   EDUP
1056   ld    hl,2+shadscr
1057   add   hl,bc
1058   inc   a
1059   ld    b,a
1060   ld    a,-1
1061   add   a,a
1062   djnz  $-1
1063   ld    (armapn+1),a
1064   ld    (remap+1),hl
1065   ld    a,c
1066   and   31
1067   cp    scrwd
1068   ret   nc
1069   ld    de,sprar
1070   ex    de,hl
1071   ld    ix,arwbuf
1072   ld    b,12
1073 armap0:
1074   ld    c,(hl);mask
1075   inc   hl
1076   push  hl
1077   ld    l,(hl);sprite
1078 armapn:
1079   ld    h,0
1080   ld    a,(de)
1081   ld    (ix),a
1082 armapn1:
1083   scf
1084   sbc   a,a
1085 armap1:
1086   rl    c
1087   rla
1088   add   hl,hl
1089   jr    c,armap1
1090   and   (ix)
1091   or    h
1092   ld    (de),a
1093   ld    a,e
1094   inc   de
1095   dec   a
1096   and   31
1097   cp    scrwd
1098   jr    nc,armap3
1099   ld    a,(de)
1100   ld    (ix+15),a
1101   and   c
1102   or    l
1103   ld    (de),a
1104 armap3:
1105   ld    hl,31
1106   add   hl,de
1107   ex    de,hl
1108   pop   hl
1109   inc   hl
1110   inc   ix
1111   ld    a,d
1112   cp    24+shadscr/256
1113   ret   z
1114   djnz  armap0
1115   ret
1118   ld    hl,0
1119   ld    ix,arwbuf
1120   ld    bc,#c1f
1121 re0:
1122   ld    a,(ix)
1123   ld    (hl),a
1124   inc   l
1125   ld    a,l
1126   and   c
1127   jr    z,re2
1128   ld    a,(ix+15)
1129   ld    (hl),a
1130 re2:
1131   inc   ix
1132   dec   l
1133   call  dhl
1134   ld    a,h
1135   cp    88
1136   ret   z
1137   djnz  re0
1138   ret
1140 remap:
1141   ld    hl,0
1142   ld    de,31
1143   ld    a,l
1144   sub   2
1145   and   e
1146   cp    scrwd
1147   ret   nc
1148   ld    ix,arwbuf
1149   ld    b,12
1150 remap0:
1151   ld    a,(ix)
1152   ld    (hl),a
1153   inc   hl
1154   ld    a,(ix+15)
1155   ld    (hl),a
1156   inc   ix
1157   add   hl,de
1158   ld    a,h
1159   cp    24+shadscr/256
1160   ret   z
1161   djnz  remap0
1162   ret
1164 inimous:
1165   ei
1166   halt
1167   in    a,(#1f)
1168   inc   a
1169   jr    z,.nokj
1170   ld    (kj_is_here),a
1171 .nokj:
1172   in    a,(#ff)
1173   inc   a
1174   jr    z,inimofs
1175   in    a,(#df)
1176   ld    (oldy+1),a
1177   ld    b,a
1178   ld    a,-5
1179   in    a,(#df)
1180   ld    (oldx+1),a
1181   cp    b
1182   ret   nz
1183   ld    a,-6
1184   in    a,(#df)
1185   cp    b
1186   ret   nz
1187 inimofs:
1188   ld    a,62
1189   ld    (mousef),a
1190   ld    a,201
1191   ld    (managef),a
1192   ret
1194 dde:
1195   inc   d
1196   ld    a,d
1197   and   7
1198   ret   nz
1199   ld    a,e
1200   add   a,32
1201   ld    e,a
1202   ret   c
1203   ld    a,d
1204   add   a,-8
1205   ld    d,a
1206   ret
1208 kj_is_here: db 0
1210 sprar:
1211   db %0011_1111, %0000_0000
1212   db %0001_1111, %0100_0000
1213   db %0000_1111, %0110_0000
1214   db %0000_0111, %0111_0000
1215   db %0000_0011, %0101_1000
1216   db %0000_0001, %0100_1100
1217   db %0000_0000, %0100_0110
1218   db %0000_0001, %0110_1000
1219   db %0000_0011, %0101_1000
1220   db %1010_0001, %0000_1100
1221   db %1110_0011, %0000_1000
1222   db %1111_0111, %0000_0000
1223   ;
1224   ;defw #3f,#401f,#600f,#5007,#4803,#4401
1225   ;defw #4e00,#7801,#5803,#ca1,#8e3,#f7
1226 end:
1227 chelbuf: ds chels*4,0
1229 setim:
1230   di
1231   ld    hl,on_int
1232   ld    de,imer
1233   ld    a,d
1234   ld    bc,onintl
1235   ldir
1236   ld    hl,imtab
1237   ld    (hl),a
1238   inc   b
1239   ld    d,h
1240   ld    e,b
1241   ld    a,h
1242   ldir
1243   ld    i,a
1244   im    2
1245   ei
1246   ret
1248 on_int: disp imer
1249 tmpxtmp:
1250   push  af
1251   ld    a,4
1252   out   (#fe),a
1253   push  bc
1254   push  de
1255   push  hl
1256   exx
1257   ex    af,af'
1258   push  af
1259   push  bc
1260   push  de
1261   push  hl
1262   push  ix
1263   push  iy
1264   ld    (iy+5),prspq%256
1265   ld    (iy+6),prspq/256
1266   call  muz+5
1267   call  re
1268 prshadf:equ $+1
1269   ld    a,0
1270   dec   a
1271   push  af
1272   call  z,remap
1273   call  prar
1274   pop   af
1275   call  z,armap
1276   call  manage
1277   xor   a
1278   out   (#fe),a
1279   call  prsp
1280   pop   iy
1281   pop   ix
1282   pop   hl
1283   pop   de
1284   pop   bc
1285   pop   af
1286   exx
1287   ex    af,af'
1288   pop   hl
1289   pop   de
1290   pop   bc
1291   pop   af
1292   ei
1293   ret
1294 onintl: equ  $-tmpxtmp
1295   ;disp on_int+onintl
1296   enddisp