UrForth: added "almost ANS test suite" (and UrForth passes it ;-)
[urasm.git] / samples / sprites0 / maincode.zas
blob4766b524205de2a34a9fe0f4b42d5c8d3a875527
1 ; original code (c) Nick Fleming, 2000; all rights reserved
2 ; modified and rewritten a little by Ketmar // Invisible Vector
4 ; start by initialising the
5 ; system variables area
6   di
7   ld   hl,default_sys_vars
8   ld   de,0x5B00
9   ld   bc,0x8C
10   ldir
11   ei
12   jp start
14 default_sys_vars:
15   defb 0xF5,0xC5,0x01,0xFD,0x7F,0x3A,0x5C,0x5B
16   defb 0xEE,0x10,0xF3,0X32,0x5C,0x5B,0xED,0x79
17   defb 0xFB,0xC1,0xF1,0xC9,0xcd,0x00,0x5B,0xE5
18   defb 0x2A,0x5A,0x5B,0xE3,0xC9,0xF3,0x3A,0x5C
19   defb 0x5B,0xE6,0xEF,0x32,0x5C,0x5B,0x01,0xFD
20   defb 0x7F,0xED,0x79,0xFB,0xC3,0xC3,0x00,0x21
21   defb 0xD8,0x06,0x18,0x03,0x21,0xCA,0x07,0x08
22   defb 0x01,0xFD,0x7F,0x3A,0x5c,0x5B,0xF5,0xE6
23   defb 0xEF,0xF3,0x32,0x5C,0x5B,0xED,0x79,0xC3
24   defb 0xE6,0x05,0x08,0xF1,0x01,0xFD,0x7f,0xF3
25   defb 0x32,0x5C,0x5B,0xED,0x79,0xFB,0x08,0xC9
26   defb 0x10,0x00
27   defb 0x22,0x37
29   defb 0x07               ; 5B5C
31   defb 0xCF
32   defb 0x00
33   defb 0x0B,0x00
34   defb 0x00,0x00
35   defb 0x00
36   defb 0x50       ; 5B64
37   defb 0x00
38   defb 0x00
39   defb 0x00
40   defb 0x00
41   defb 0x00
42   defb 0x00
43   defb 0x00
45   defb 0x00,0x00,0x00,0x00,0x00       ; 5B6E
46   defb 0x00,0x00
47   defb 0x00,0x00
48   defb 0x00,0x00
49   defb 0x00
50   defb 0x00
51   defb 0x00
52   defb 0x00,0x00,0x00,0x00,0x00,0x58,0xFF,0xEC
53   defb 0xEB,0xEC,0x2B,0x01,0x01,0x4C,0x00,0x00
56 hello_world:
57   defz "Hello World"
59 lastkey: defb 32
62 start:
63   ld   a,007
64   call ClearScreen
66   call InitRowTable
68   ld   de,hello_world
69   ld   hl,0x40b0
70   call DrawString
72 lp4:
73   ;ld   a,(SPRY1)
74   ;inc  a
75   ;inc  a
76   ;and  127
77   ;ld   (SPRY1),a
79   ;ld   a,(SPRX1)
80   ;inc  a
81   ;ld   (SPRX1),a
83   ld   a,(SPRY2)
84   add  a,2
85   and  127
86   ld   (SPRY2),a
88   ld   a,(SPRY3)
89   dec  a
90   and  127
91   ld   (SPRY3),a
93   ld   a,(SPRY4)
94   inc  a
95   and  127
96   ld   (SPRY4),a
98   ld   a,(SPRX4)
99   inc  a
100   and  127
101   ld   (SPRX4),a
103   ld   a,(SPRY5)
104   add  a,2
105   and  127
106   ld   (SPRY5),a
108   ld   a,(SPRY6)
109   dec  a
110   dec  a
111   dec  a
112   and  127
113   ld   (SPRY6),a
115   ld   a,(SPRY8)
116   inc  a
117   and  127
118   ld   (SPRY8),a
120   ld   a,(SPRX5)
121   add  a,2
122   ld   (SPRX5),a
124   ld   a,(SPRX6)
125   dec  a
126   dec  a
127   ld   (SPRX6),a
129   ld   a,(SPRX7)
130   add  a,2
131   ld   (SPRX7),a
133   ld   a,(SPRX8)
134   inc  a
135   ld   (SPRX8),a
137   call GetKey
138   jr   c,.nokey
139   ld   (lastkey),a
140   ld   hl,SPRX1
142   ld   c,(hl)
143   cp   'O'
144   jr   nz,.noleft
145   dec  c
146 .noleft:
147   cp   'P'
148   jr   nz,.noright
149   inc  c
150 .noright:
151   ld   (hl),c
153   dec  hl
154   dec  hl
155   ld   c,(hl)
156   cp   'Q'
157   jr   nz,.noup
158   dec  c
159 .noup:
160   cp   'A'
161   jr   nz,.nodown
162   inc  c
163 .nodown:
164   ld   a,c
165   and  #7F
166   ld   c,a
167   ld   (hl),c
169 .nokey:
170   halt
172   ld   hl,TestSprite1
173   call DrawSprite
174   ld   hl,TestSprite2
175   call DrawSprite
176   ld   hl,TestSprite3
177   call DrawSprite
178   ld   hl,TestSprite4
179   call DrawSprite
180   ld   hl,TestSprite5
181   call DrawSprite
182   ld   hl,TestSprite6
183   call DrawSprite
184   ld   hl,TestSprite7
185   call DrawSprite
186   ld   hl,TestSprite8
187   call DrawSprite
189   ld   a,(lastkey)
190   ld   hl,0x4000
191   call DrawChar
193   jp   lp4
196 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
197 ; clear screen
198 ; IN:
199 ;   A = attr color
200 ; OUT:
201 ;   BC,DE,HL,AF -- dead
202 ClearScreen:
203   push af
204   ld   hl,#4000
205   ld   de,#4001
206   ld   bc,6144
207   ld   (hl),0
208   ldir
209   pop  af
210   ld   bc,767
211   halt
212   ld   (hl),a
213   rrca
214   rrca
215   rrca
216   and  #07
217   out  (254),a
218   ldir
219   ret
222 ; ==============================================
223 ;      Screen Address Routines
224 ; ==============================================
226 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
227 ; Row Table Routines - generate a table of
228 ; addresses to allow easy working out of
229 ; screen address.
230 InitRowTable:
231   ld   bc,192
232   ld   hl,screenRowTable
233   ld   de,16384
234 .IRT0:
235   ld   (hl),e
236   inc  hl
237   ld   (hl),d
238   inc  hl
239   ex   de,hl
240   call IncRow
241   ex   de,hl
242   dec  c
243   jr   nz,.IRT0
244   ret
246 screenRowTable: defs 200*2,0
249 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
250 ; in:
251 ;   HL: scrAddr
252 ; out:
253 ;   HL: scrAddrNext -- next y line
254 ;   AF: dead
255 IncRow:
256   INC  H
257   LD   A,H
258   AND  #07
259   RET  NZ
260   LD   A,L
261   SUB  #E0
262   LD   L,A
263   SBC  A,A
264   AND  #F8
265   ADD  A,H
266   LD   H,A
267   RET
269 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
270 ; in:
271 ;   HL: scrAddr
272 ; out:
273 ;   HL: scrAddrNext -- next y line
274 ;   AF: dead
275 DecRow:
276   LD   A,H
277   DEC  H
278   AND  #07
279   RET  NZ
280   LD   A,L
281   ADD  A,#E0
282   LD   L,A
283   SBC  A,A
284   AND  #08
285   ADD  A,H
286   LD   H,A
287   RET
289 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
290 ; moves screen address down one entire character (8 pixels)
291 ; on entry: hl = screen address
292 ; on exit : hl = screen address, one character below
293 IncChr:
294   ld   a,l
295   add  a,32
296   ld   l,a
297   ret  nc
298   ld   a,h
299   add  a,8
300   ld   h,a
301   ret
303 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
304 ; moves screen address up one entire character (8 pixels)
305 ; on entry: hl = screen address
306 ; on exit : hl = screen address, one character above
307 DecChr:
308   ld   a,l
309   sub  32
310   ld   l,a
311   ret  nc
312   ld   a,h
313   sub  8
314   ld   h,a
315   ret
317 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
318 ; converts a screen address to an attribute address
319 ; on entry: de = screen address
320 ; on exit : de = attr address
321 ScreenToAttr:
322   ld   a,d
323   rra
324   rra
325   rra
326   and  3
327   or   88
328   ld   d,a
329   ret
331 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
332 ; converts an attribute address to screen address
333 ; on entry: de = attribute address
334 ; on exit : de = screen address
335 AttrToScreen:
336   ld   a,d
337   rla
338   rla
339   rla
340   and  24
341   or   64
342   ld  d,a
343   ret
346 ; ==================================================
347 ;      Spectrum GFX Library Routines:
349 ;      DrawPixel
350 ;      DrawChar
351 ;      DrawString
352 ;      DrawSprite
353 ; =================================================
355 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
356 ; call with bc = x, de = y
357 DrawPixel:
358   ; do tests to see if pixel is on screen
359   ld   a,d
360   and  a
361   ret  nz
362   ld   a,b
363   and  a
364   ret  nz
365   ld   a,e
366   cp   200
367   ret  nc
369   ; calculate row to start drawing at
370   ld   hl,screenRowTable
371   add  hl,de
372   add  hl,de
373   ld   e,(hl)
374   inc  hl
375   ld   d,(hl)
377   push bc
378   ld   hl,.bit_table
379   ld   a,c
380   and  7
381   ld   b,0
382   ld   c,a
383   add  hl,bc
385   ld   a,(hl)
386   pop  bc
387   push af
389   ld   a,c
390   srl  a
391   srl  a
392   srl  a
393   ld   h,0
394   ld   l,a
395   add  hl,de  ; hl = screen address to draw pixel at
397   pop  af
398   or   (hl)
399   ld   (hl),a
400   ret
402 .bit_table:
403   defb  0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01
405 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
406 ; call with a = ascii character code
407 ; hl = screen address
408 DrawChar:
409   sub  32     ; 32 = space = first char = 0, so sub 32!
410   push hl
411   ld   h,0
412   ld   l,a
413   add  hl,hl  ; multiply by 8.
414   add  hl,hl
415   add  hl,hl
417   ld   de,charset
418   add  hl,de
419   ex   de,hl  ; de = address of char data.
421   pop  hl
422   ld   b,8
423 .dc0:
424   ld   a,(de)
425   ld   (hl),a
426   inc  h
427   inc  de
428   djnz .dc0
429   ret
431 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
432 ; call with de = address of string
433 ;      hl = screen address
434 ; hl should be on a boundry so that (y&7) = 0
435 ; (ie lowest 3 bits of h should be 0)
436 DrawString:
437   push de
438   push hl
440   ld   a,(de)
441   call DrawChar
442   pop  hl
443   pop  de
444   inc  de
445   ld   a,(de)
446   inc  hl
447   or   a
448   jr   nz,DrawString
449   ret
451 ; ----------------------------------------------------------------
452 ; sprite drawing routines
453 ; ----------------------------------------------------------------
455 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
456 ; call with hl pointing to a sprite record.
458 ; Draws a 16 pixel wide sprite (variable height)
459 ; directly onto the spectrum screen. In order to achieve
460 ; 'smooth' graphics, the sprite is erased and redrawn
461 ; a line at a time. Although this may seem wasteful, it
462 ; does appear to work well as glitching and flicker are
463 ; kept to a minimum.
465 ; A sprite record has the following format:
466 ; Byte  Description
468 ; 0     Sprite id (0 = sprite disabled)
469 ; 1     Sprite Status (0 = off, 1 = on, 2 = erase (no drawing))
470 ; 2     Sprite Colour
471 ; 3-4   Sprite Y
472 ; 5-6   Sprite X
473 ; 7     Last X
474 ; 8-9   Last Screen Address
475 ; 10-11 Graphic Data Address
476 ; 12-13 Last Graphic Address
477 ; 14    Sprite Height
478 ; 15    Reserved
479 ; 16    Reserved
481 DrawSprite:
482   ld   a,(hl)
483   and  a
484   ret  z
485   inc  hl      ; for now, skip status
486   inc  hl
488   ld   a,(hl)  ; store colour for later
489   ld   (_Sprite_Ink),a
490   inc  hl
492   ld   e,(hl)  ; de = y
493   inc  hl
494   ld   d,(hl)
495   inc  hl
497   ld   a,e
498   ld   (_Sprite_Attr_Height),a
500   ld   c,(hl)  ; bc = x
501   inc  hl
502   ld   b,(hl)  ; assume b = 0 for now
503   inc  hl
505   ld   a,c
506   ld   (_Sprite_Attr_Width),a
508   ld   a,(hl)  ; a = last x
509   ld   (hl),c
510   inc  hl
512   push hl
513   push af
515   ; generate screen address without using tables :)
516   ; store result in hl?
517   ld   a,e
518   srl  a
519   srl  a
520   srl  a
521   and  24
522   or   64
523   ld   h,a
524   ld   a,e
525   and  7
526   or   h
527   ld   h,a
529   ld   a,e
530   sla  a
531   sla  a
532   and  224
533   ld   l,a
534   ld   a,c
535   srl  a
536   srl  a
537   srl  a
538   or   l
539   ld   l,a     ; at this point hl = screen address
541   ld   (_Sprite_ScreenAddr),hl
543   ex   de,hl   ; store newly calculated screen address in de
545   ; ---- Set the attributes (rough experimental version) ----
546   ; for now it draws attrs only for 16x16 sprites
547   push de
548   push hl
550   call ScreenToAttr
551   ex   de,hl
553   ld   a,(_Sprite_Attr_Width)
554   and  7
555   jp   nz,.draw_wide_attr
557   ld   de,31
558   ld   a,(_Sprite_Ink)
560   ld   (hl),a
561   inc  hl
562   ld   (hl),a
563   add  hl,de
565   ld   (hl),a
566   inc  hl
567   ld   (hl),a
568   add  hl,de
570   ld   a,(_Sprite_Attr_Height)
571   and  7
572   jp   z,.done_draw_attr
573   ld   a,(_Sprite_Ink)
575   ld   (hl),a
576   inc  hl
577   ld   (hl),a
578   jp   .done_draw_attr
580 .draw_wide_attr:
581   ld   a,(_Sprite_Ink)
582   ld   de,30
584   ld   (hl),a
585   inc  hl
586   ld   (hl),a
587   inc  hl
588   ld   (hl),a
589   add  hl,de
591   ld   (hl),a
592   inc  hl
593   ld   (hl),a
594   inc  hl
595   ld   (hl),a
596   add  hl,de
598   and  7
599   jp   z,.done_draw_attr
600   ld   a,(_Sprite_Ink)
602   ld   (hl),a
603   inc  hl
604   ld   (hl),a
605   inc  hl
606   ld   (hl),a
608 .done_draw_attr:
609   pop  hl
610   pop  de
612   ; ----- calculate rotate addresses -----
613   ld   hl,RotateTable
614   ld   a,c
615   and  7
616   ld   b,0
617   ld   c,a
618   add  hl,bc
619   add  hl,bc
620   ld   c,(hl)
621   inc  hl
622   ld   b,(hl)
623   ld   (Sprite_RotateAddr),bc
625   pop  af
626   ld   hl,LastRotateTable
627   and  7
628   ld   b,0
629   ld   c,a
630   add  hl,bc
631   add  hl,bc
632   ld   c,(hl)
633   inc  hl
634   ld   b,(hl)
636   ld   (Sprite_LastRotateAddr),bc
638   ; -----
639   pop  hl      ; hl = last screen address item (in sprite data)
641   ld   c,(hl)  ; get last screen address and store new one in its place.
642   ld   (hl),e
643   inc  hl
644   ld   b,(hl)
645   ld   (hl),d
646   inc  hl      ; bc = last screen address.
648   ld   (_Sprite_LastScreenAddr),bc
650   ld   e,(hl)  ; get new graphic address
651   inc  hl
652   ld   d,(hl)
653   inc  hl
655   ld   c,(hl)  ; get last graphic address and store new one in its place
656   ld   (hl),e
657   inc  hl
658   ld   b,(hl)
659   ld   (hl),d
660   inc  hl
662   ld   (_Sprite_Gfx),de
663   ld   (_Sprite_Last_Gfx),bc
665   ld   a,(hl)  ; get sprite height + store
666   ld   (_SpriteLoop),A
668   ; snippet : load up gfx data.
670 .DrawSpr0:
671   ld   hl,(_Sprite_Gfx)
673   ; load up registers with a line of sprite graphic data
674   ld   d,(hl)
675   inc  hl
676   ld   e,(hl)
677   inc  hl
679   ld   (_Sprite_Gfx),hl
681   ex   de,hl  ; a,h,l = gfx addr
683   ; load up alternative registers with a line of sprite graphic data to erase with
684   exx   ; load u
685   ex   af,afx
687   ld   hl,(_Sprite_Last_Gfx)
689   ld   d,(hl)
690   inc  hl
691   ld   e,(hl)
692   inc  hl
693   ld   (_Sprite_Last_Gfx),hl
694   ex   de,hl  ; a',h',l' = gfx addr
696   exx
697   ex   af,afx
699   ; push rotate address onto stack then
700   ; do ret - cheats way of doing jp (bc)
701   ; (which doesnt exist..)
702   ld   bc,.EraseRow
703   push bc
704   ld   bc,(Sprite_RotateAddr)
705   push bc
707   ld   de,(_Sprite_ScreenAddr)
708   xor  a
709   ret
711 .EraseRow:
712   ld   (_Sprite_ScreenAddr),de
713   ld   bc,.NextRow
714   push bc
715   ld   bc,(Sprite_LastRotateAddr)
716   push bc
717   exx
718   ld   de,(_Sprite_LastScreenAddr)
719   xor  a
720   ret
722 .NextRow:
723   ld   (_Sprite_LastScreenAddr),de
725   exx
726   ld   a,(_SpriteLoop)
727   dec  a
728   ld   (_SpriteLoop),a
729   and  a
730   jp   nz,.DrawSpr0
731   ret
733   ; Draw left-rotated line of sprite data.
734   ; Call with h and l holding the sprite data to display.
735   ; de = screen address to draw at.
736   ; a MUST be zero.
738 DrawSubRotLeft4:
739   add  hl,hl
740   adc  a,a
741 DrawSubRotLeft3:
742   add  hl,hl
743   adc  a,a
744 DrawSubRotLeft2:
745   add  hl,hl
746   adc  a,a
747 DrawSubRotLeft1:
748   add  hl,hl
749   adc  a,a
751 NoRotateLeft:
752   ex   de,hl
754   ;ld   hl,(_Sprite_ScreenAddr)
756   xor  (hl)
757   ld   (hl),a
758   inc  l
759   ld   a,d
760   xor  (hl)
761   ld   (hl),a
762   inc  l
763   ld   a,e
764   xor  (hl)
765   ld   (hl),a
767   dec  l
768   dec  l
769   call IncRow
771   ex   de,hl
772   ;ld   (_Sprite_ScreenAddr),hl
773   ret
775   ; Draw right-rotated line of sprite data
776   ; Call with h and l holding the sprite data to display.
777   ; a MUST be zero.
779 DrawSubRotRight4:
780   srl  h
781   rr   l
782   rr   a
783 DrawSubRotRight3: 
784   srl  h
785   rr   l
786   rr   a
787 DrawSubRotRight2:
788   srl  h
789   rr   l
790   rr   a
791 DrawSubRotRight1:
792   srl  h
793   rr   l
794   rr   a
796 DrawSubRotNo:
797 ;NoRotateRight:
798   ex   de,hl
800   ld   b,a  ; rotate so order is a,d,e as with left rotate.
801   ld   a,d
802   ld   d,e
803   ld   e,b
805   ;ld   hl,(_Sprite_ScreenAddr)
807   xor  (hl)
808   ld   (hl),a
809   inc  l
810   ld   a,d
811   xor  (hl)
812   ld   (hl),a
813   inc  l
814   ld   a,e
815   xor  (hl)
816   ld   (hl),a
818   dec  l
819   dec  l
820   call IncRow
822   ex   de,hl
823   ;ld   (_Sprite_ScreenAddr),hl
824 DrawSubRotNo2:
825   ret
827 RotateTable:
828 LastRotateTable:
829   DEFW DrawSubRotNo
830   DEFW DrawSubRotRight1
831   DEFW DrawSubRotRight2
832   DEFW DrawSubRotRight3
833   DEFW DrawSubRotLeft4
834   DEFW DrawSubRotLeft3
835   DEFW DrawSubRotLeft2
836   DEFW DrawSubRotLeft1
838 ;LastRotateTable:
839 ;  DEFW NoRotate2
840 ;  DEFW Rght1
841 ;  DEFW Rght2
842 ;  DEFW Rght3
843 ;  DEFW Lft4
844 ;  DEFW Lft3
845 ;  DEFW Lft2
846 ;  DEFW Lft1
848 ; memory stores to make life easier.
850 Sprite_RotateAddr:      DEFW  0              ; address to 'jump to' to do rotating with
851 Sprite_LastRotateAddr:  DEFW  DrawSubRotNo2  ; address to 'jump to' to do rotating with
853 _Sprite_Attr_Width:     DEFB  0  ; 0 -> width = 2, otherwise = 3
854 _Sprite_Attr_Height:    DEFB  0  ; 0 -> height= 2 otherwise = 3.
856 _Sprite_Ink:            DEFB  0
857 _Sprite_ScreenAddr:     DEFW  0
858 _Sprite_LastScreenAddr: DEFW  0
859 _Sprite_Gfx:            DEFW  0  ; address of sprite data
860 _Sprite_Last_Gfx:       DEFW  0  ; address of 'old' sprite data
861 _SpriteLoop:            DEFW  0  ; sprite loop size.
863 ; ---------------------------------------------------------------
864 ;   End of Sprite Drawing Routines.
865 ; ---------------------------------------------------------------
867 ; ===========================================
868 ;      Keyboard Reading Routines.
869 ; ===========================================
870 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
871 ; carry set if no key pressed,
872 ; otherwise returns ascii key code in A
874 ; ** under construction **
875 GetKey:
876   ld   e,0
877   ld   hl,.in_port_table
878   ld   b,8
879 .GK0:
880   ld   a,(hl)
881   in   a,(254)
882   cpl
883   and  31
884   ld   c,a
885   jr   nz,.gotkey
886   ld   a,e
887   add  a,5
888   ld   e,a
889   inc  hl
890   djnz .GK0
891   scf
892   ret
893 .gotkey:
894   ld   hl,.ascii_table
895   ld   d,0
896   add  hl,de
897 .GK1:
898   rra
899   jp   c,.GK2
900   inc  hl
901   jp   .GK1
902 .GK2:
903   ld   a,(hl)
904   and  a
905   ret
907 .in_port_table:
908   defb 0xfe
909   defb 0xfd
910   defb 0xfb
911   defb 0xf7
912   defb 0xef
913   defb 0xdf
914   defb 0xbf
915   defb 0x7f
917 .ascii_table:
918   defm "*ZXCVASDFGQWERT1234509876POIUY+LKJH;#MNB"
920 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
921 charset:
922   defb %00000000  ; space
923   defb %00000000
924   defb %00000000
925   defb %00000000
926   defb %00000000
927   defb %00000000
928   defb %00000000
929   defb %00000000
931   defb %00000000  ; !
932   defb %00011000
933   defb %00011000
934   defb %00011000
935   defb %00011000
936   defb %00000000
937   defb %00011000
938   defb %00000000
940   defb %00000000  ; ""
941   defb %01100110
942   defb %01100110
943   defb %01000100
944   defb %00000000
945   defb %00000000
946   defb %00000000
947   defb %00000000
949   defb %00000000  ; #
950   defb %00100100
951   defb %01111110
952   defb %00100100
953   defb %00100100
954   defb %01111110
955   defb %00100100
956   defb %00000000
958   defb %00000000  ; $
959   defb %00011000
960   defb %00111110
961   defb %01011000
962   defb %00111100
963   defb %00011010
964   defb %01111100
965   defb %00011000
967   defb %00000000  ; %
968   defb %01100110
969   defb %01101110
970   defb %00011100
971   defb %00111000
972   defb %01110110
973   defb %01100110
974   defb %00000000
976   defb %00000000  ; &
977   defb %00110000
978   defb %01001000
979   defb %00110000
980   defb %01001010
981   defb %01001100
982   defb %00110010
983   defb %00000000
985   defb %00110000  ; ''
986   defb %00110000
987   defb %00011000
988   defb %00000000
989   defb %00000000
990   defb %00000000
991   defb %00000000
992   defb %00000000
994   defb %00000000  ; (
995   defb %00001100
996   defb %00011000
997   defb %00011000
998   defb %00011000
999   defb %00011000
1000   defb %00001100
1001   defb %00000000
1003   defb %00000000  ; )
1004   defb %00110000
1005   defb %00011000
1006   defb %00011000
1007   defb %00011000
1008   defb %00011000
1009   defb %00110000
1010   defb %00000000
1012   defb %00000000  ; *
1013   defb %01010100
1014   defb %00111000
1015   defb %01111100
1016   defb %00111000
1017   defb %01010100
1018   defb %00000000
1019   defb %00000000
1021   defb %00000000  ; +
1022   defb %00011000
1023   defb %00011000
1024   defb %01111110
1025   defb %01111110
1026   defb %00011000
1027   defb %00011000
1028   defb %00000000
1030   defb %00000000  ; ,
1031   defb %00000000
1032   defb %00000000
1033   defb %00000000
1034   defb %00000000
1035   defb %00011000
1036   defb %00011000
1037   defb %00110000
1039   defb %00000000  ; - (minus)
1040   defb %00000000
1041   defb %00000000
1042   defb %01111110
1043   defb %01111110
1044   defb %00000000
1045   defb %00000000
1046   defb %00000000
1048   defb %00000000  ; . (full stop)
1049   defb %00000000
1050   defb %00000000
1051   defb %00000000
1052   defb %00000000
1053   defb %00000000
1054   defb %00011000
1055   defb %00011000
1057   defb %00000000  ; /    (forward slash)
1058   defb %00000110
1059   defb %00001110
1060   defb %00011100
1061   defb %00111000
1062   defb %01110000
1063   defb %01100000
1064   defb %00000000
1066   defb %00000000  ; 0
1067   defb %00111100
1068   defb %01100110
1069   defb %01101110
1070   defb %01110110
1071   defb %01100110
1072   defb %00111100
1073   defb %00000000
1075   defb %00000000  ; 1
1076   defb %00011000
1077   defb %00111000
1078   defb %00011000
1079   defb %00011000
1080   defb %00011000
1081   defb %01111110
1082   defb %00000000
1084   defb %00000000  ; 2
1085   defb %00111100
1086   defb %01100110
1087   defb %00000110
1088   defb %00011100
1089   defb %00111000
1090   defb %01111110
1091   defb %00000000
1093   defb %00000000  ; 3
1094   defb %00111100
1095   defb %01100110
1096   defb %00001100
1097   defb %00000110
1098   defb %01100110
1099   defb %00111100
1100   defb %00000000
1102   defb %00000000  ; 4
1103   defb %01100000
1104   defb %01101100
1105   defb %01101100
1106   defb %01111110
1107   defb %00001100
1108   defb %00001100
1109   defb %00000000
1111   defb %00000000  ; 5
1112   defb %01111110
1113   defb %01100000
1114   defb %01111100
1115   defb %00000110
1116   defb %01100110
1117   defb %00111100
1118   defb %00000000
1120   defb %00000000  ; 6
1121   defb %00111100
1122   defb %01100000
1123   defb %01111100
1124   defb %01100110
1125   defb %01100110
1126   defb %00111100
1127   defb %00000000
1129   defb %00000000  ; 7
1130   defb %01111110
1131   defb %01100110
1132   defb %00001100
1133   defb %00011000
1134   defb %00011000
1135   defb %00011000
1136   defb %00000000
1138   defb %00000000  ; 8
1139   defb %00111100
1140   defb %01100110
1141   defb %00111100
1142   defb %01100110
1143   defb %01100110
1144   defb %00111100
1145   defb %00000000
1147   defb %00000000  ; 9
1148   defb %00111100
1149   defb %01100110
1150   defb %01100110
1151   defb %00111110
1152   defb %00000110
1153   defb %00111100
1154   defb %00000000
1156   defb %00000000  ; :    (colon)
1157   defb %00000000
1158   defb %00011000
1159   defb %00011000
1160   defb %00000000
1161   defb %00011000
1162   defb %00011000
1163   defb %00000000
1165   defb %00000000  ; ;    (semi-colon)
1166   defb %00000000
1167   defb %00011000
1168   defb %00011000
1169   defb %00000000
1170   defb %00011000
1171   defb %00011000
1172   defb %00110000
1174   defb %00000000  ; <
1175   defb %00001100
1176   defb %00011000
1177   defb %00110000
1178   defb %00110000
1179   defb %00011000
1180   defb %00001100
1181   defb %00000000
1183   defb %00000000  ; =
1184   defb %01111110
1185   defb %01111110
1186   defb %00000000
1187   defb %00000000
1188   defb %01111110
1189   defb %01111110
1190   defb %00000000
1192   defb %00000000  ; >
1193   defb %00110000
1194   defb %00011000
1195   defb %00001100
1196   defb %00001100
1197   defb %00011000
1198   defb %00110000
1199   defb %00000000
1201   defb %00000000  ; ?
1202   defb %00111100
1203   defb %01100110
1204   defb %00001100
1205   defb %00011000
1206   defb %00000000
1207   defb %00011000
1208   defb %00000000
1210   defb %00000000  ; @
1211   defb %00111100
1212   defb %01000010
1213   defb %10011010
1214   defb %10101010
1215   defb %10011100
1216   defb %01000000
1217   defb %00111000
1219   defb %00000000  ; A
1220   defb %00111100
1221   defb %01100110
1222   defb %01100110
1223   defb %01111110
1224   defb %01100110
1225   defb %01100110
1226   defb %00000000
1228   defb %00000000  ; B
1229   defb %01111100
1230   defb %01100110
1231   defb %01111100
1232   defb %01100110
1233   defb %01100110
1234   defb %01111100
1235   defb %00000000
1237   defb %00000000  ; C
1238   defb %00111100
1239   defb %01100110
1240   defb %01100000
1241   defb %01100000
1242   defb %01100110
1243   defb %00111100
1244   defb %00000000
1246   defb %00000000  ; D
1247   defb %01111000
1248   defb %01101100
1249   defb %01100110
1250   defb %01100110
1251   defb %01101100
1252   defb %01111000
1253   defb %00000000
1255   defb %00000000  ; E
1256   defb %01111110
1257   defb %01100000
1258   defb %01111100
1259   defb %01100000
1260   defb %01100000
1261   defb %01111110
1262   defb %00000000
1264   defb %00000000  ; F
1265   defb %01111110
1266   defb %01100000
1267   defb %01111100
1268   defb %01100000
1269   defb %01100000
1270   defb %01100000
1271   defb %00000000
1273   defb %00000000  ; G
1274   defb %00111100
1275   defb %01100110
1276   defb %01100000
1277   defb %01101110
1278   defb %01100110
1279   defb %00111100
1280   defb %00000000
1282   defb %00000000  ; H
1283   defb %01100110
1284   defb %01100110
1285   defb %01111110
1286   defb %01100110
1287   defb %01100110
1288   defb %01100110
1289   defb %00000000
1291   defb %00000000  ; I
1292   defb %01111110
1293   defb %00011000
1294   defb %00011000
1295   defb %00011000
1296   defb %00011000
1297   defb %01111110
1298   defb %00000000
1300   defb %00000000  ; J
1301   defb %00000110
1302   defb %00000110
1303   defb %00000110
1304   defb %00000110
1305   defb %01100110
1306   defb %00111100
1307   defb %00000000
1309   defb %00000000  ; K
1310   defb %01100110
1311   defb %01101100
1312   defb %01111000
1313   defb %01111000
1314   defb %01101100
1315   defb %01100110
1316   defb %00000000
1318   defb %00000000  ; L
1319   defb %01100000
1320   defb %01100000
1321   defb %01100000
1322   defb %01100000
1323   defb %01100000
1324   defb %01111110
1325   defb %00000000
1327   defb %00000000  ; M
1328   defb %11000110
1329   defb %11101110
1330   defb %11111110
1331   defb %11010110
1332   defb %11000110
1333   defb %11000110
1334   defb %00000000
1336   defb %00000000  ; N
1337   defb %01100110
1338   defb %01110110
1339   defb %01111110
1340   defb %01101110
1341   defb %01100110
1342   defb %01100110
1343   defb %00000000
1345   defb %00000000  ; O
1346   defb %00111100
1347   defb %01100110
1348   defb %01100110
1349   defb %01100110
1350   defb %01100110
1351   defb %00111100
1352   defb %00000000
1354   defb %00000000  ; P
1355   defb %01111100
1356   defb %01100110
1357   defb %01100110
1358   defb %01111100
1359   defb %01100000
1360   defb %01100000
1361   defb %00000000
1363   defb %00000000  ; Q
1364   defb %00111100
1365   defb %01100110
1366   defb %01100110
1367   defb %01100110
1368   defb %01101100
1369   defb %00110110
1370   defb %00000011
1372   defb %00000000  ; R
1373   defb %01111100
1374   defb %01100110
1375   defb %01100110
1376   defb %01111100
1377   defb %01101100
1378   defb %01100110
1379   defb %00000000
1381   defb %00000000  ; S
1382   defb %00111100
1383   defb %01100000
1384   defb %00111100
1385   defb %00000110
1386   defb %01100110
1387   defb %00111100
1388   defb %00000000
1390   defb %00000000  ; T
1391   defb %01111110
1392   defb %00011000
1393   defb %00011000
1394   defb %00011000
1395   defb %00011000
1396   defb %00011000
1397   defb %00000000
1399   defb %00000000  ; U
1400   defb %01100110
1401   defb %01100110
1402   defb %01100110
1403   defb %01100110
1404   defb %01100110
1405   defb %00111100
1406   defb %00000000
1408   defb %00000000  ; V
1409   defb %01100110
1410   defb %01100110
1411   defb %01100110
1412   defb %01100110
1413   defb %00111100
1414   defb %00011000
1415   defb %00000000
1417   defb %00000000  ; W
1418   defb %11000110
1419   defb %11000110
1420   defb %11010110
1421   defb %11111110
1422   defb %11101110
1423   defb %11000110
1424   defb %00000000
1426   defb %00000000  ; X
1427   defb %01100110
1428   defb %01100110
1429   defb %00111100
1430   defb %00111100
1431   defb %01100110
1432   defb %01100110
1433   defb %00000000
1435   defb %00000000  ; Y
1436   defb %01100110
1437   defb %01100110
1438   defb %00111100
1439   defb %00011000
1440   defb %00011000
1441   defb %00011000
1442   defb %00000000
1444   defb %00000000  ; Z
1445   defb %01111110
1446   defb %00001100
1447   defb %00011000
1448   defb %00110000
1449   defb %01100000
1450   defb %01111110
1451   defb %00000000
1453   defb %00000000  ; [
1454   defb %00111100
1455   defb %00110000
1456   defb %00110000
1457   defb %00110000
1458   defb %00110000
1459   defb %00111100
1460   defb %00000000
1462   defb %00000000  ; '\'
1463   defb %01100000
1464   defb %01110000
1465   defb %00111000
1466   defb %00011100
1467   defb %00001110
1468   defb %00000110
1469   defb %00000000
1471   defb %00000000  ; ]
1472   defb %00111100
1473   defb %00001100
1474   defb %00001100
1475   defb %00001100
1476   defb %00001100
1477   defb %00111100
1478   defb %00000000
1480   defb %00000000  ; ^
1481   defb %00011000
1482   defb %00111100
1483   defb %01100110
1484   defb %01000010
1485   defb %00000000
1486   defb %00000000
1487   defb %00000000
1489   defb %00000000  ; _ (underscore ?)
1490   defb %00000000
1491   defb %00000000
1492   defb %00000000
1493   defb %00000000
1494   defb %00000000
1495   defb %01111111
1496   defb %01111111
1498   defb %00000000  ; `    (funny quote..)
1499   defb %01100000
1500   defb %01100000
1501   defb %00110000
1502   defb %00000000
1503   defb %00000000
1504   defb %00000000
1505   defb %00000000
1507   defb %00000000  ; a
1508   defb %00000000
1509   defb %00111110
1510   defb %01100110
1511   defb %01100110
1512   defb %01100110
1513   defb %00111011
1514   defb %00000000
1516   defb %00110000  ; b
1517   defb %00110000
1518   defb %00111110
1519   defb %00110011
1520   defb %00110011
1521   defb %00110011
1522   defb %01101110
1523   defb %00000000
1525   defb %00000000  ; c
1526   defb %00000000
1527   defb %00111100
1528   defb %01100110
1529   defb %01100000
1530   defb %01100110
1531   defb %00111100
1532   defb %00000000
1534   defb %00000110  ; d
1535   defb %00000110
1536   defb %00111110
1537   defb %01100110
1538   defb %01100110
1539   defb %01100110
1540   defb %00111011
1541   defb %00000000
1543   defb %00000000  ; e
1544   defb %00000000
1545   defb %00111100
1546   defb %01100110
1547   defb %01111110
1548   defb %01100000
1549   defb %00111100
1550   defb %00000000
1552   defb %00001110  ; f
1553   defb %00011000
1554   defb %00011000
1555   defb %01111110
1556   defb %00011000
1557   defb %00011000
1558   defb %00011000
1559   defb %00110000
1561   defb %00000000  ; g
1562   defb %00000000
1563   defb %00111100
1564   defb %01100110
1565   defb %01100110
1566   defb %00111110
1567   defb %00000110
1568   defb %00111100
1570   defb %01100000  ; h
1571   defb %01100000
1572   defb %01111100
1573   defb %01100110
1574   defb %01100110
1575   defb %01100110
1576   defb %01100110
1577   defb %00000000
1579   defb %00000000  ; i
1580   defb %00011100
1581   defb %00000000
1582   defb %00011100
1583   defb %00001100
1584   defb %00001100
1585   defb %00111110
1586   defb %00000000
1588   defb %00000000  ; j
1589   defb %00000110
1590   defb %00000000
1591   defb %00000110
1592   defb %00000110
1593   defb %00000110
1594   defb %01100110
1595   defb %00111100
1597   defb %01100000  ; k
1598   defb %01101100
1599   defb %01111000
1600   defb %01110000
1601   defb %01111000
1602   defb %01101100
1603   defb %01100110
1604   defb %00000000
1606   defb %00011000  ; l
1607   defb %00011000
1608   defb %00011000
1609   defb %00011000
1610   defb %00011000
1611   defb %00011000
1612   defb %00001110
1613   defb %00000000
1615   defb %00000000  ; m
1616   defb %00000000
1617   defb %00110110
1618   defb %01111111
1619   defb %01101011
1620   defb %01100011
1621   defb %01100011
1622   defb %00000000
1624   defb %00000000  ; n
1625   defb %00000000
1626   defb %11011100
1627   defb %01100110
1628   defb %01100110
1629   defb %01100110
1630   defb %01100110
1631   defb %00000000
1633   defb %00000000  ; o
1634   defb %00000000
1635   defb %00111100
1636   defb %01100110
1637   defb %01100110
1638   defb %01100110
1639   defb %00111100
1640   defb %00000000
1642   defb %00000000  ; p
1643   defb %00000000
1644   defb %00111100
1645   defb %01100110
1646   defb %01100110
1647   defb %01111100
1648   defb %01100000
1649   defb %01100000
1651   defb %00000000  ; q
1652   defb %00000000
1653   defb %00011110
1654   defb %00110011
1655   defb %00110011
1656   defb %00011111
1657   defb %00000011
1658   defb %00000011
1660   defb %00000000  ; r
1661   defb %00000000
1662   defb %01101110
1663   defb %00110011
1664   defb %00110000
1665   defb %00110000
1666   defb %00110000
1667   defb %00000000
1669   defb %00000000  ; s
1670   defb %00000000
1671   defb %00011110
1672   defb %00110000
1673   defb %00011110
1674   defb %00000011
1675   defb %00111110
1676   defb %00000000
1678   defb %00000000  ; t
1679   defb %00110000
1680   defb %01111100
1681   defb %00110000
1682   defb %00110000
1683   defb %00110110
1684   defb %00011100
1685   defb %00000000
1687   defb %00000000  ; u
1688   defb %00000000
1689   defb %01100110
1690   defb %01100110
1691   defb %01100110
1692   defb %01100110
1693   defb %00111011
1694   defb %00000000
1696   defb %00000000  ; v
1697   defb %00000000
1698   defb %01100110
1699   defb %01100110
1700   defb %01100110
1701   defb %00111100
1702   defb %00011000
1703   defb %00000000
1705   defb %00000000  ; w
1706   defb %00000000
1707   defb %01100011
1708   defb %01100011
1709   defb %01101011
1710   defb %01111111
1711   defb %00110110
1712   defb %00000000
1714   defb %00000000  ; x
1715   defb %00000000
1716   defb %01100110
1717   defb %00111100
1718   defb %00011000
1719   defb %00111100
1720   defb %01100110
1721   defb %00000000
1723   defb %00000000  ; y
1724   defb %00000000
1725   defb %00110011
1726   defb %00110011
1727   defb %00110011
1728   defb %00011110
1729   defb %00001100
1730   defb %00111000
1732   defb %00000000  ; z
1733   defb %00000000
1734   defb %01111110
1735   defb %00001100
1736   defb %00011000
1737   defb %00110000
1738   defb %01111110
1739   defb %00000000
1741   defb %00000000  ; {
1742   defb %00000000
1743   defb %00000000
1744   defb %00000000
1745   defb %00000000
1746   defb %00000000
1747   defb %00000000
1748   defb %00000000
1750   defb %00011000  ; |
1751   defb %00011000
1752   defb %00011000
1753   defb %00011000
1754   defb %00011000
1755   defb %00011000
1756   defb %00011000
1757   defb %00011000
1759   defb %00000000  ; }
1760   defb %00000000
1761   defb %00000000
1762   defb %00000000
1763   defb %00000000
1764   defb %00000000
1765   defb %00000000
1766   defb %00000000
1768   defb %00000000  ; ~    (squiggle!)
1769   defb %00110110
1770   defb %01101100
1771   defb %00000000
1772   defb %00000000
1773   defb %00000000
1774   defb %00000000
1775   defb %00000000
1778 ; 0     Sprite id (0 = sprite disabled)
1779 ; 1     Sprite Status (0 = off, 1 = on, 2 = erase (no drawing))
1780 ; 2     Sprite Colour
1781 ; 3-4   Sprite Y
1782 ; 5-6   Sprite X
1783 ; 7     Last X
1784 ; 8-9   Last Screen Address
1785 ; 10-11 Graphic Data Address
1786 ; 12-13 Last Graphic Address
1787 ; 14    Sprite Height
1788 ; 15    Reserved
1789 ; 16    Reserved
1791 TestSprite1:
1792        DEFB  1     ; Sprite id
1793        DEFB  1     ; Sprite Status
1794        DEFB  65    ; Sprite Colour
1795 SPRY1: DEFW  40    ; Sprite Y
1796 SPRX1: DEFW  16    ; Sprite X
1797        DEFB  130   ; Last X
1798        DEFW  0     ; Last Screen Address
1799        DEFW  ManWalkingRight0  ; Graphic Data Address.
1800        DEFW  32768 ; Last Graphic Address
1801        DEFB  24    ; Sprite Height
1802        DEFB  0     ; reserved
1803        DEFB  0
1805 TestSprite2:
1806        DEFB  1     ; Sprite id
1807        DEFB  1     ; Sprite Status
1808        DEFB  66    ; Sprite Colour
1809 SPRY2: DEFW  20    ; Sprite Y
1810 SPRX2: DEFW  16    ; Sprite X
1811        DEFB  20    ; Last X
1812        DEFW  0     ; Last Screen Address
1813        DEFW  AlienGFX0 ; Graphic Data Address.
1814        DEFW  32768 ; Last Graphic Address
1815        DEFB  16    ; Sprite Height
1816        DEFB  0     ; reserved
1817        DEFB  0
1819 TestSprite3:
1820        DEFB  1     ; Sprite id
1821        DEFB  1     ; Sprite Status
1822        DEFB  67    ; Sprite Colour
1823 SPRY3: DEFW  70    ; Sprite Y
1824 SPRX3: DEFW  80    ; Sprite X
1825        DEFB  80    ; Last X
1826        DEFW  0     ; Last Screen Address
1827        DEFW  AlienGFX0 ; Graphic Data Address.
1828        DEFW  32768 ; Last Graphic Address
1829        DEFB  16    ; Sprite Height
1830        DEFB  0     ; reserved
1831        DEFB  0
1833 TestSprite4:
1834        DEFB  1     ; Sprite id
1835        DEFB  1     ; Sprite Status
1836        DEFB  68    ; Sprite Colour
1837 SPRY4: DEFW  20    ; Sprite Y
1838 SPRX4: DEFW  170   ; Sprite X
1839        DEFB  170   ; Last X
1840        DEFW  0     ; Last Screen Address
1841        DEFW  AlienGFX1 ; Graphic Data Address.
1842        DEFW  32768 ; Last Graphic Address
1843        DEFB  16    ; Sprite Height
1844        DEFB  0     ; reserved
1845        DEFB  0
1847 TestSprite5:
1848        DEFB  1     ; Sprite id
1849        DEFB  1     ; Sprite Status
1850        DEFB  69    ; Sprite Colour
1851 SPRY5: DEFW  20    ; Sprite Y
1852 SPRX5: DEFW  170   ; Sprite X
1853        DEFB  170   ; Last X
1854        DEFW  0     ; Last Screen Address
1855        DEFW  AlienGFX1 ; Graphic Data Address.
1856        DEFW  32768 ; Last Graphic Address
1857        DEFB  16    ; Sprite Height
1858        DEFB  0     ; reserved
1859        DEFB  0
1861 TestSprite6:
1862        DEFB  1     ; Sprite id
1863        DEFB  1     ; Sprite Status
1864        DEFB  70    ; Sprite Colour
1865 SPRY6: DEFW  64    ; Sprite Y
1866 SPRX6: DEFW  64    ; Sprite X
1867        DEFB  170   ; Last X
1868        DEFW  0     ; Last Screen Address
1869        DEFW  AlienGFX0 ; Graphic Data Address.
1870        DEFW  32768 ; Last Graphic Address
1871        DEFB  16    ; Sprite Height
1872        DEFB  0     ; reserved
1873        DEFB  0
1875 TestSprite7:
1876        DEFB  1     ; Sprite id
1877        DEFB  1     ; Sprite Status
1878        DEFB  71    ; Sprite Colour
1879 SPRY7: DEFW  120   ; Sprite Y
1880 SPRX7: DEFW  0     ; Sprite X
1881        DEFB  170   ; Last X
1882        DEFW  0     ; Last Screen Address
1883        DEFW  AlienGFX1 ; Graphic Data Address.
1884        DEFW  32768 ; Last Graphic Address
1885        DEFB  16    ; Sprite Height
1886        DEFB  0     ; reserved
1887        DEFB  0
1889 TestSprite8:
1890        DEFB  1     ; Sprite id
1891        DEFB  1     ; Sprite Status
1892        DEFB  71    ; Sprite Colour
1893 SPRY8: DEFW  100   ; Sprite Y
1894 SPRX8: DEFW  224   ; Sprite X
1895        DEFB  170   ; Last X
1896        DEFW  0     ; Last Screen Address
1897        DEFW  ManWalkingRight0  ; Graphic Data Address.
1898        DEFW  32768 ; Last Graphic Address
1899        DEFB  24    ; Sprite Height
1900        DEFB  0     ; reserved
1901        DEFB  0
1904 ManWalkingRight0:
1905   ; 24 pixels high, 16 pixels wide.
1906   ; note low and high bytes swapped !
1907   defr %0001111110000000
1908   defr %0011110001000000
1909   defr %1100001110000000
1910   defr %0011110000000000
1911   defr %0100001011000000
1912   defr %1011101010000000
1913   defr %0011101100110000
1914   defr %0111011111100000
1915   defr %0110001110000000
1916   defr %0001110000000000
1917   defr %0011111100000000
1918   defr %0011101100000000
1919   defr %0011100000000000
1920   defr %0011110000000000
1921   defr %0001101000000000
1922   defr %0010011100000000
1923   defr %0011101101000000
1924   defr %0001110011000000
1925   defr %0000111101100000
1926   defr %0010111011000000
1927   defr %0010111000000000
1928   defr %0010110000000000
1929   defr %0000001000000000
1930   defr %0001111100000000
1932 AlienGFX0:
1933   defr %0000001001000000
1934   defr %0000011100100000
1935   defr %0000111110010000
1936   defr %0000111110010000
1937   defr %0000000000000000
1938   defr %0111111111111010
1939   defr %1111111111111101
1940   defr %1111111111111101
1941   defr %0111111111111010
1942   defr %0000000000000000
1943   defr %0000011111100000
1944   defr %0000100000010000
1945   defr %0001000110001000
1946   defr %0010000000000100
1947   defr %1100000000000011
1948   defr %1100000000000011
1950 AlienGFX1:
1951   defr %1000001111000001
1952   defr %1110011111100111
1953   defr %0110111111110110
1954   defr %0001111111111000
1955   defr %0011111111111100
1956   defr %0111101111011110
1957   defr %1111110110111111
1958   defr %1111001001001111
1959   defr %0011001111001100
1960   defr %0001111111111000
1961   defr %0011011111101100
1962   defr %0110000110000110
1963   defr %1100000110000011
1964   defr %1100000110000011
1965   defr %0110000000000110
1966   defr %0001000000001000