10 '
20 '     Listing source
30 '       assembleur
40 '           de
50 '    A M S P R I T E
60 '
70 '       (c) 1985
80 '   SEBAN Research Ltd.
90 '
100 ' 8000     ORG &8000
110 ' 4000 tbl EQU &4000
120 ' 0002 spt EQU &02
130 '
140 ' 8000 21 00 40       LD HL,tbl
150 ' 8003 06 02          LD B,spt
160 ' 8005 E5             PUSH HL
170 ' 8006 C5             PUSH BC
180 ' 8007 C5      #L2    PUSH BC
190 ' 8008 23             INC HL
200 ' 8009 23             INC HL
210 ' 800A 23             INC HL
220 ' 800B 56             LD D,(HL)
230 ' 800C 23             INC HL
240 ' 800D 5E             LD E,(HL)
250 ' 800E CD B9 80       CALL 80B9
260 ' 8011 06 08          LD B,08
270 ' 8013 23             INC HL
280 ' 8014 7E             LD A,(HL)
290 ' 8015 12             LD (DE),A
300 ' 8016 7A             LD A,D
310 ' 8017 C6 08          ADD A,08
320 ' 8019 57             LD D,A
330 ' 801A 10 F7          DJNZ 0013
340 ' 801C 0E 0A          LD C,0A
350 ' 801E 09             ADD HL,BC
360 ' 801F C1             POP BC
370 ' 8020 10 E5          DJNZ 0007
380 ' 8022 C1             POP BC
390 ' 8023 E1             POP HL
400 ' 8024 E5             PUSH HL
410 ' 8025 C5             PUSH BC
420 ' 8026 C5             PUSH BC
430 ' 8027 7E             LD A,(HL)
440 ' 8028 23             INC HL
450 ' 8029 56             LD D,(HL)
460 ' 802A 23             INC HL
470 ' 802B 5E             LD E,(HL)
480 ' 802C CB 47          BIT 0,A
490 ' 802E 28 01          JR Z,0031
500 ' 8030 15             DEC D
510 ' 8031 CB 4F          BIT 1,A
520 ' 8033 28 01          JR Z,0036
530 ' 8035 14             INC D
540 ' 8036 CB 57          BIT 2,A
550 ' 8038 28 01          JR Z,003B
560 ' 803A 1D             DEC E
570 ' 803B CB 5F          BIT 3,A
580 ' 803D 28 01          JR Z,0040
590 ' 803F 1C             INC E
600 ' 8040 CB 67          BIT 4,A
610 ' 8042 28 02          JR Z,0046
620 ' 8044 14             INC D
630 ' 8045 1C             INC E
640 ' 8046 CB 6F          BIT 5,A
650 ' 8048 28 02          JR Z,004C
660 ' 804A 15             DEC D
670 ' 804B 1D             DEC E
680 ' 804C CB 77          BIT 6,A
690 ' 804E 28 02          JR Z,0052
700 ' 8050 15             DEC D
710 ' 8051 1C             INC E
720 ' 8052 CB 7F          BIT 7,A
730 ' 8054 28 02          JR Z,0058
740 ' 8056 14             INC D
750 ' 8057 1D             DEC E
760 ' 8058 7A             LD A,D
770 ' 8059 FE 19          CP 19
780 ' 805B 38 0A          JR C,0067
790 ' 805D FE 82          CP 82
800 ' 805F 38 04          JR C,0065
810 ' 8061 16 18          LD D,18
820 ' 8063 18 02          JR 0067
830 ' 8065 16 00          LD D,00
840 ' 8067 7B             LD A,E
850 ' 8068 FE 50          CP 50
860 ' 806A 38 0A          JR C,0076
870 ' 806C FE 82          CP 82
880 ' 806E 38 04          JR C,0074
890 ' 8070 1E 4F          LD E,4F
900 ' 8072 18 02          JR 0076
910 ' 8074 1E 00          LD E,00
920 ' 8076 2B             DEC HL
930 ' 8077 72             LD (HL),D
940 ' 8078 23             INC HL
950 ' 8079 73             LD (HL),E
960 ' 807A 23             INC HL
970 ' 807B 72             LD (HL),D
980 ' 807C 23             INC HL
990 ' 807D 73             LD (HL),E
1000 ' 807E CD B9 80      CALL 80B9
1010 ' 8081 06 08         LD B,08
1020 ' 8083 23            INC HL
1030 ' 8084 1A            LD A,(DE)
1040 ' 8085 77            LD (HL),A
1050 ' 8086 7A            LD A,D
1060 ' 8087 C6 08         ADD A,08
1070 ' 8089 57            LD D,A
1080 ' 808A 10 F7         DJNZ 0083
1090 ' 808C 0E 0A         LD C,0A
1100 ' 808E 09            ADD HL,BC
1110 ' 808F C1            POP BC
1120 ' 8090 10 94         DJNZ 0026
1130 ' 8092 C1            POP BC
1140 ' 8093 E1            POP HL
1150 ' 8094 C5            PUSH BC
1160 ' 8095 23            INC HL
1170 ' 8096 56            LD D,(HL)
1180 ' 8097 23            INC HL
1190 ' 8098 5E            LD E,(HL)
1200 ' 8099 01 0B 00      LD BC,000B
1210 ' 809C 09            ADD HL,BC
1220 ' 809D 7E            LD A,(HL)
1230 ' 809E B7            OR A
1240 ' 809F 28 11         JR Z,00B2
1250 ' 80A1 CD B9 80      CALL 80B9
1260 ' 80A4 06 08         LD B,08
1270 ' 80A6 23            INC HL
1280 ' 80A7 7E            LD A,(HL)
1290 ' 80A8 12            LD (DE),A
1300 ' 80A9 7A            LD A,D
1310 ' 80AA C6 08         ADD A,08
1320 ' 80AC 57            LD D,A
1330 ' 80AD 10 F7         DJNZ 00A6
1340 ' 80AF 23            INC HL
1350 ' 80B0 18 03         JR 00B5
1360 ' 80B2 0E 09         LD C,09
1370 ' 80B4 09            ADD HL,BC
1380 ' 80B5 C1            POP BC
1390 ' 80B6 10 DC         DJNZ 0094
1400 ' 80B8 C9            RET
1410 ' 80B9 E5            PUSH HL
1420 ' 80BA 26 00         LD H,00
1430 ' 80BC 6A            LD L,D
1440 ' 80BD 29            ADD HL,HL
1450 ' 80BE 7B            LD A,E
1460 ' 80BF 54            LD D,H
1470 ' 80C0 5D            LD E,L
1480 ' 80C1 29            ADD HL,HL
1490 ' 80C2 29            ADD HL,HL
1500 ' 80C3 19            ADD HL,DE
1510 ' 80C4 29            ADD HL,HL
1520 ' 80C5 29            ADD HL,HL
1530 ' 80C6 29            ADD HL,HL
1540 ' 80C7 85            ADD A,L
1550 ' 80C8 5F            LD E,A
1560 ' 80C9 7C            LD A,H
1570 ' 80CA CE C0         ADC A,C0
1580 ' 80CC 57            LD D,A
1590 ' 80CD E1            POP HL
1600 ' 80CE C9            RET
1610 ' 
1620 '
1630 ' Routine AMSINIT
1640 '
1650 '80E8     ORG &80E8
1660 '
1670 ' 8000 21 00 40       LD HL,tbl
1680 ' 8003 06 02          LD B,spt
1690 ' 8005 C5             PUSH BC
1700 ' 8006 23             INC HL
1710 ' 8007 56             LD D,(HL)
1720 ' 8008 23             INC HL
1730 ' 8009 5E             LD E,(HL)
1740 ' 800A CD B9 80       CALL 80B9
1750 ' 800D 23             INC HL
1760 ' 800E 23             INC HL
1770 ' 800F 06 08          LD B,08
1780 ' 8011 23             INC HL
1790 ' 8012 1A             LD A,(DE)
1800 ' 8013 77             LD (HL),A
1810 ' 8014 7A             LD A,D
1820 ' 8015 C6 08          ADD A,08
1830 ' 8017 57             LD D,A
1840 ' 8018 10 F7          DJNZ 0011
1850 ' 801A 0E 0A          LD C,0A
1860 ' 801C 09             ADD HL,BC
1870 ' 801D C1             POP BC
1880 ' 801E 10 E5          DJNZ 0005
1890 ' 8020 C9             RET
1900 '
1910 ' NOTA: Ces routines ont ete assemblees sur ZX SPECTRUM 48Ko
1920 ' le 24 AOUT 1985, grace a l'editeur assembleur PROFISOFT.
1930 '
1940 '
1950 ' A R C H E T Y P E  du  S P R I T E
1960 '
1970 ' N.B. :Les donnees du lutin Peuvent (ou doivent) etre P1acees
1980 ' dans des lignes DATA.
1990 ' Ex:
2000 '9000 RESTORE 9100
2010 '9010 tbl=&4000
2020 '9020 spt=1
2030 '9030 POKE &8001,ABS(tbl MOD 256)
2040 '9040 POKE &8002,ABS(tbl\256)
2050 '9050 POKE &8004,spt
2060 '9060 POKE &80E9,ABS(tbl MOD 256)
2070 '9070 POKE &80EA,ABS(tbl\25b)
2080 '9080 POKE &80EC,spt
2090 '9090 FOR f=tbl TO tbl+22*spt-1:READ byte:POKE f,byte:next f
2100 '9100 DATA 4,10,40,10,40,9,0,0,0,9,9,0,0
2110 '9110 DATA 1,255,129,129,24,24,129,129,255
2120 '
2130 ' Quelle est la Signification de chaque donnee ?
2140 ' Archetype:
2150 ' DATA mvt,l,c,l,c,0,0,0,0,0,0,0,0
2160 ' DATA switch,a,b,c,d,e,f,g,h
2170 '
2180 'Signification:
2190 '- MVt : Mouvement, le sens etant selectionne dans les bits ainsi:
2200 ' bit 0=Monter ; bit 1-=descendre ; bit 2=a gauche; bit 3=a droit.
2210 ' bit 4=chute+drte ; bit 5=monte+gche , bit 6=mone.+drt.
2220 ' bit 7=chute+gche
2230 '  dans tous les cas il y a mouvement que lorsque le bit concerne
2240 '  est a 1.
2250 '
2260 ' - l : ligne, comprise entre 0 et 24, a laquelle doit apparaitre
2270 '  le lutin. Notez que 'l' et 'c' sont Mis 2 fois, Pour la
2280 ' simple raison que le decor ne peut effacer le lutin
2290 ' ailleurs qu'a sa position actuelle.
2300 '
2310 ' - c : colonne, Comprise entre 0 et 79. meme rem. que 'l'.
2320 '
2330 '- 0,...,0 , Cette suite de 8 zeros n'est autre que la matrice
2340 ' du decor. Elle sera correctement ajustee Par 1a
2350 ' routine AMSINIT (CALL &80E8) que vous lancerez
2360 ' une fois le decore mis en Place.
2370 '
2380 ' - switch : Comme son nom l'indique. cet octet indique si le
2390 '            lutin doit etre ou non affiche. Il fonctionne
2400 ' ainsi:
2410 ' switch=0, le lutin n'est pas affiche
2420 ' switch<>0, est affiche
2430 '
2440 '- a,...,h : Ces 8 octets vous sont reserves. Ils representent
2450 ' la matrice de votre lutin, qui si vous connaissez
2460 ' le systeme d'affichage de l'AMSTRAD,vous donnera
2470 ' les cartes bits suivantes :
2480 '
2490 ' 1) MODE 2:la carte bits sera affichee telle qu'elle aura
2500 '      ete definie par la matrice, mais vous n'aurez
2510 '      droit qu'a une couleur en tout et pour tout.
2520 '
2530 ' 2) MODE 1:la carte bits affichera une grille de 4*8
2540 '      points au lieu de 8*8, mais permetera l'utili-
2550 '      sation de 3 couleurs pour chaque points. Ce
2560 '      qui signifie que le lutin est tricolore.
2570 '      NB: Pour obtenir les memes resultats qu'en
2580 '      MODE 2, il faudra 2 lutins au lieu d'un, ce
2590 '      qui reduit le nombre a 128.
2600 '      
2610 ' 3) MODE 0:la carte bits affichera une grille de 2*8
2620 '           Points au lieu de 8*8, Mais permettra l'utili-
2630 '           sation de 15 couleurs simultannees adressables
2640 '           a chaque point de la grille. A ce stade le
2650 '           lutin devient multico1ore, mais comme la rem.
2660 '           du 2) le dit, il faudra 4 lutins au lieu d'un,
2670 '           Ce qui reduit le nombre a 64 lutins.
2680 '
2690 ' *** REPRESENTATION BINAIRE d'un octet de MATRICE seton le MODE
2700 '
2710 '              M O D E  2
2720 ' bits de PEN : 0 0 0 0 0 0 0 0 ; Donc PEN 0 ou 1 cad fond ou encre
2730 '   octet     : 0 1 1 1 0 1 1 0 
2740 ' Pixel no.   : 1 2 3 4 5 6 7 8
2750 '
2760 '              M O D E  1
2770 ' bits de PEN : 0 0 0 0 1 1 1 1 ; Donc PEN 0 a 3 cad fond +3 couleurs
2780 '   octet     : 0 1 1 1 0 1 1 0 
2790 ' Pixel no.   : 1 2 3 4 1 2 3 4
2800 '
2810 ' Pixel no.! Bit 0 de PEN! bit 1! representation !
2820 '
2830 '    1     !      0      !   0  !    fond
2840 '    2     !      1      !   1  !    PEN 3
2850 '    3     !      1      !   1  !    PEN 3
2860 '    4     !      1      !   0  !    PEN 1                
2870 '                
2880 '               M O D E  0             
2890 ' bits de PEN :  0 0 2 2 1 1 3 3 ; PEN 0 a 15 cad fond +15 couleurs
2900 '   octet     :  0 1 1 1 0 1 1 0
2910 '  Pixel no.  :  1 2 1 2 1 2 1 2
2920 ' pixe1 no.: bit 0 de PEN: bit 1: bit 2: bit 3: representation:
2930 '
2940 '     1            0         0      1      1        PEN 12
2950 '     2            1         1      1      0        PEN  7
2960 '
2970 '
2980 '
2990 '
3000 ' Nous souhaitons que ces quelques informations vous aurons permis
3010 '    de comprendre le fonctionnement(certes complexe) du fichier
3020 '       d'affichage de votre A M S T R A D  C P C - 4 6 4
3030 '
3040 ' Dans l'attente d'un prochain utilitaire nous vous saluons,
3050 '
3060 '                             la SEBAN Reasearch.
3070 '
3080 '
5000 PAPER 0:PEN 1
5010 INK 0,13:INK 1,0
5020 BORDER 13:MODE 2
5030 LIST