                              1 ;--------------------------------------------------------
                              2 ; File Created by SDCC : free open source ANSI-C Compiler
                              3 ; Version 3.8.0 #10562 (Linux)
                              4 ;--------------------------------------------------------
                              5 	.module Horloge
                              6 	.optsdcc -mz80
                              7 	
                              8 ;--------------------------------------------------------
                              9 ; Public variables in this module
                             10 ;--------------------------------------------------------
                             11 	.globl _pause
                             12 	.globl _main
                             13 	.globl _heure
                             14 	.globl _niv_haut_prec
                             15 	.globl _chif_affich
                             16 	.globl _cnt
                             17 	.globl _chif_defs
                             18 ;--------------------------------------------------------
                             19 ; special function registers
                             20 ;--------------------------------------------------------
                     0048    21 _chiff_sel	=	0x0048
                     004C    22 _segm_sel	=	0x004c
                     0040    23 _pio_a_d	=	0x0040
                     0042    24 _pio_a_c	=	0x0042
                             25 ;--------------------------------------------------------
                             26 ; ram data
                             27 ;--------------------------------------------------------
                             28 	.area _DATA
                     1000    29 _cnt	=	0x1000
                     1001    30 _chif_affich	=	0x1001
                     1002    31 _niv_haut_prec	=	0x1002
                     1003    32 _heure	=	0x1003
                             33 ;--------------------------------------------------------
                             34 ; ram data
                             35 ;--------------------------------------------------------
                             36 	.area _INITIALIZED
                             37 ;--------------------------------------------------------
                             38 ; absolute external ram data
                             39 ;--------------------------------------------------------
                             40 	.area _DABS (ABS)
                             41 ;--------------------------------------------------------
                             42 ; global & static initialisations
                             43 ;--------------------------------------------------------
                             44 	.area _HOME
                             45 	.area _GSINIT
                             46 	.area _GSFINAL
                             47 	.area _GSINIT
                             48 ;--------------------------------------------------------
                             49 ; Home
                             50 ;--------------------------------------------------------
                             51 	.area _HOME
                             52 	.area _HOME
                             53 ;--------------------------------------------------------
                             54 ; code
                             55 ;--------------------------------------------------------
                             56 	.area _CODE
                             57 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:37: void main(void) 
                             58 ;	---------------------------------
                             59 ; Function main
                             60 ; ---------------------------------
   0000                      61 _main::
                             62 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:39: pio_a_c = 0x4F;                                       // Configurer le port PIO-A en mode entree (mode 0)
   0000 3E 4F         [ 7]   63 	ld	a, #0x4f
   0002 D3 42         [11]   64 	out	(_pio_a_c), a
                             65 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:40: niv_haut_prec = 0;                                    // Initialiser le statut du niveau haut/bas de l'horloge de 1 Hz
   0004 21 02 10      [10]   66 	ld	hl,#_niv_haut_prec + 0
   0007 36 00         [10]   67 	ld	(hl), #0x00
                             68 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:43: heure[5] = 2;                                         // Dizaine des heure                         
   0009 21 08 10      [10]   69 	ld	hl, #(_heure + 0x0005)
   000C 36 02         [10]   70 	ld	(hl), #0x02
                             71 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:44: heure[4] = 3;                                         // Unité des heure                         
   000E 21 07 10      [10]   72 	ld	hl, #(_heure + 0x0004)
   0011 36 03         [10]   73 	ld	(hl), #0x03
                             74 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:45: heure[3] = 5;                                         // Dizaine des minutes                   
   0013 21 06 10      [10]   75 	ld	hl, #(_heure + 0x0003)
   0016 36 05         [10]   76 	ld	(hl), #0x05
                             77 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:46: heure[2] = 9;                                         // Unité des minutes                     
   0018 21 05 10      [10]   78 	ld	hl, #(_heure + 0x0002)
   001B 36 09         [10]   79 	ld	(hl), #0x09
                             80 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:47: heure[1] = 0;                                         // Dizaine des secondes                        
   001D 21 04 10      [10]   81 	ld	hl, #(_heure + 0x0001)
   0020 36 00         [10]   82 	ld	(hl), #0x00
                             83 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:48: heure[0] = 0;                                         // Unité des secondes                           
   0022 21 03 10      [10]   84 	ld	hl, #_heure
   0025 36 00         [10]   85 	ld	(hl), #0x00
                             86 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:50: while(1)                                              // Boucle principale
   0027                      87 00122$:
                             88 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:52: if ((pio_a_d & 1) && (!niv_haut_prec))             // Niveau haut sur l'hologe détecté pour la première fois dans la seconde?
   0027 DB 40         [11]   89 	in	a, (_pio_a_d)
   0029 0F            [ 4]   90 	rrca
   002A D2rB7r00      [10]   91 	jp	NC,00117$
   002D FD 21 02 10   [14]   92 	ld	iy, #_niv_haut_prec
   0031 FD 7E 00      [19]   93 	ld	a, 0 (iy)
   0034 B7            [ 4]   94 	or	a, a
   0035 C2rB7r00      [10]   95 	jp	NZ, 00117$
                             96 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:54: niv_haut_prec = 1;                              // Lever le fanion du niveau haut détecté
   0038 FD 36 00 01   [19]   97 	ld	0 (iy), #0x01
                             98 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:55: heure[0]++;                                     // Incrémenter le chiffre d'unités des secondes
   003C 01 03 10      [10]   99 	ld	bc, #_heure+0
   003F 0A            [ 7]  100 	ld	a, (bc)
   0040 3C            [ 4]  101 	inc	a
   0041 02            [ 7]  102 	ld	(bc), a
                            103 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:56: if (heure[0] == 10)                             // Besoin de débordement dans les dizaines de secondes
   0042 3A 03 10      [13]  104 	ld	a, (#_heure + 0)
   0045 D6 0A         [ 7]  105 	sub	a, #0x0a
   0047 C2rC7r00      [10]  106 	jp	NZ,00118$
                            107 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:58: heure[0] = 0;
   004A 21 03 10      [10]  108 	ld	hl, #_heure
   004D 36 00         [10]  109 	ld	(hl), #0x00
                            110 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:59: heure[1]++;                                  // Incrémenter le chiffre de dizaines des secondes
   004F 01 04 10      [10]  111 	ld	bc, #_heure+1
   0052 0A            [ 7]  112 	ld	a, (bc)
   0053 3C            [ 4]  113 	inc	a
   0054 02            [ 7]  114 	ld	(bc), a
                            115 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:60: if (heure[1] == 6)                           // Besoin de débordement dans les unités de minutes
   0055 3A 04 10      [13]  116 	ld	a, (#(_heure + 0x0001) + 0)
   0058 D6 06         [ 7]  117 	sub	a, #0x06
   005A 20 6B         [12]  118 	jr	NZ,00118$
                            119 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:62: heure[1] = 0;
   005C 21 04 10      [10]  120 	ld	hl, #(_heure + 0x0001)
   005F 36 00         [10]  121 	ld	(hl), #0x00
                            122 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:63: heure[2]++;                               // Incrémenter le chiffre d'unités des minutes
   0061 01 05 10      [10]  123 	ld	bc, #_heure+2
   0064 0A            [ 7]  124 	ld	a, (bc)
   0065 3C            [ 4]  125 	inc	a
   0066 02            [ 7]  126 	ld	(bc), a
                            127 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:64: if (heure[2] == 10)                       // Besoin de débordement dans les dizaines de minutes
   0067 3A 05 10      [13]  128 	ld	a, (#(_heure + 0x0002) + 0)
   006A D6 0A         [ 7]  129 	sub	a, #0x0a
   006C 20 59         [12]  130 	jr	NZ,00118$
                            131 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:66: heure[2] = 0;
   006E 21 05 10      [10]  132 	ld	hl, #(_heure + 0x0002)
   0071 36 00         [10]  133 	ld	(hl), #0x00
                            134 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:67: heure[3]++;                            // Incrémenter le chiffre de dizaines des minutes
   0073 01 06 10      [10]  135 	ld	bc, #_heure+3
   0076 0A            [ 7]  136 	ld	a, (bc)
   0077 3C            [ 4]  137 	inc	a
   0078 02            [ 7]  138 	ld	(bc), a
                            139 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:68: if (heure[3] == 6)                     // Besoin de débordement dans les unités d'heures
   0079 3A 06 10      [13]  140 	ld	a, (#(_heure + 0x0003) + 0)
   007C D6 06         [ 7]  141 	sub	a, #0x06
   007E 20 47         [12]  142 	jr	NZ,00118$
                            143 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:70: heure[3] = 0;
   0080 21 06 10      [10]  144 	ld	hl, #(_heure + 0x0003)
   0083 36 00         [10]  145 	ld	(hl), #0x00
                            146 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:71: heure[4]++;                         // Incrémenter le chiffre d'unités des heures
   0085 01 07 10      [10]  147 	ld	bc, #_heure+4
   0088 0A            [ 7]  148 	ld	a, (bc)
   0089 3C            [ 4]  149 	inc	a
   008A 02            [ 7]  150 	ld	(bc), a
                            151 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:72: if (heure[4] == 10)                 // Besoin de débordement dans les dizaines d'heures
   008B 3A 07 10      [13]  152 	ld	a, (#(_heure + 0x0004) + 0)
   008E D6 0A         [ 7]  153 	sub	a, #0x0a
   0090 20 0B         [12]  154 	jr	NZ,00102$
                            155 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:74: heure[4] = 0;
   0092 21 07 10      [10]  156 	ld	hl, #(_heure + 0x0004)
   0095 36 00         [10]  157 	ld	(hl), #0x00
                            158 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:75: heure[5]++;                      // Incrémenter le chiffre de dizaines des heures
   0097 01 08 10      [10]  159 	ld	bc, #_heure+5
   009A 0A            [ 7]  160 	ld	a, (bc)
   009B 3C            [ 4]  161 	inc	a
   009C 02            [ 7]  162 	ld	(bc), a
   009D                     163 00102$:
                            164 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:77: if ((heure[5] == 2) && (heure[4] == 4))   // 24ème heure atteinte?
   009D 3A 08 10      [13]  165 	ld	a, (#(_heure + 0x0005) + 0)
   00A0 D6 02         [ 7]  166 	sub	a, #0x02
   00A2 20 23         [12]  167 	jr	NZ,00118$
   00A4 3A 07 10      [13]  168 	ld	a, (#(_heure + 0x0004) + 0)
   00A7 D6 04         [ 7]  169 	sub	a, #0x04
   00A9 20 1C         [12]  170 	jr	NZ,00118$
                            171 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:79: heure[5] = 0;                    // Remettre les heures à 00
   00AB 21 08 10      [10]  172 	ld	hl, #(_heure + 0x0005)
   00AE 36 00         [10]  173 	ld	(hl), #0x00
                            174 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:80: heure[4] = 0;                    //          "
   00B0 21 07 10      [10]  175 	ld	hl, #(_heure + 0x0004)
   00B3 36 00         [10]  176 	ld	(hl), #0x00
   00B5 18 10         [12]  177 	jr	00118$
   00B7                     178 00117$:
                            179 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:87: else if (!pio_a_d & 1) niv_haut_prec = 0;          // Niveau bas sur l'hologe détecté? Si oui, abaisser le fanion du niveau haut détecté
   00B7 DB 40         [11]  180 	in	a, (_pio_a_d)
   00B9 D6 01         [ 7]  181 	sub	a,#0x01
   00BB 3E 00         [ 7]  182 	ld	a, #0x00
   00BD 17            [ 4]  183 	rla
   00BE CB 47         [ 8]  184 	bit	0, a
   00C0 28 05         [12]  185 	jr	Z,00118$
   00C2 21 02 10      [10]  186 	ld	hl,#_niv_haut_prec + 0
   00C5 36 00         [10]  187 	ld	(hl), #0x00
   00C7                     188 00118$:
                            189 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:89: for (chif_affich = 0; chif_affich < 6; chif_affich++)    // Boucle d'affichage des 6 chiffres de l'heure
   00C7 21 01 10      [10]  190 	ld	hl,#_chif_affich + 0
   00CA 36 00         [10]  191 	ld	(hl), #0x00
   00CC                     192 00125$:
   00CC FD 21 01 10   [14]  193 	ld	iy, #_chif_affich
   00D0 FD 7E 00      [19]  194 	ld	a, 0 (iy)
   00D3 D6 06         [ 7]  195 	sub	a, #0x06
   00D5 D2r27r00      [10]  196 	jp	NC, 00122$
                            197 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:91: segm_sel = chif_defs[heure[chif_affich]];  
   00D8 01 03 10      [10]  198 	ld	bc, #_heure+0
   00DB 2A 01 10      [16]  199 	ld	hl, (_chif_affich)
   00DE 26 00         [ 7]  200 	ld	h, #0x00
   00E0 09            [11]  201 	add	hl, bc
   00E1 4E            [ 7]  202 	ld	c, (hl)
   00E2 21r04r01      [10]  203 	ld	hl, #_chif_defs
   00E5 06 00         [ 7]  204 	ld	b, #0x00
   00E7 09            [11]  205 	add	hl, bc
   00E8 7E            [ 7]  206 	ld	a, (hl)
   00E9 D3 4C         [11]  207 	out	(_segm_sel), a
                            208 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:92: chiff_sel = ~(0b00000001<<chif_affich);
   00EB FD 46 00      [19]  209 	ld	b, 0 (iy)
   00EE 0E 01         [ 7]  210 	ld	c, #0x01
   00F0 04            [ 4]  211 	inc	b
   00F1 18 02         [12]  212 	jr	00210$
   00F3                     213 00209$:
   00F3 CB 21         [ 8]  214 	sla	c
   00F5                     215 00210$:
   00F5 10 FC         [13]  216 	djnz	00209$
   00F7 79            [ 4]  217 	ld	a, c
   00F8 2F            [ 4]  218 	cpl
   00F9 D3 48         [11]  219 	out	(_chiff_sel), a
                            220 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:93: pause();
   00FB CDr0Er01      [17]  221 	call	_pause
                            222 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:89: for (chif_affich = 0; chif_affich < 6; chif_affich++)    // Boucle d'affichage des 6 chiffres de l'heure
   00FE 21 01 10      [10]  223 	ld	hl, #_chif_affich+0
   0101 34            [11]  224 	inc	(hl)
                            225 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:96: }
   0102 18 C8         [12]  226 	jr	00125$
   0104                     227 _chif_defs:
   0104 3F                  228 	.db #0x3f	; 63
   0105 06                  229 	.db #0x06	; 6
   0106 5B                  230 	.db #0x5b	; 91
   0107 4F                  231 	.db #0x4f	; 79	'O'
   0108 66                  232 	.db #0x66	; 102	'f'
   0109 6D                  233 	.db #0x6d	; 109	'm'
   010A 7D                  234 	.db #0x7d	; 125
   010B 07                  235 	.db #0x07	; 7
   010C 7F                  236 	.db #0x7f	; 127
   010D 6F                  237 	.db #0x6f	; 111	'o'
                            238 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:99: void pause(void)
                            239 ;	---------------------------------
                            240 ; Function pause
                            241 ; ---------------------------------
   010E                     242 _pause::
                            243 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:101: for (cnt = 0; cnt < 30; cnt++);     // Boucle basse du compteur
   010E 21 00 10      [10]  244 	ld	hl,#_cnt + 0
   0111 36 00         [10]  245 	ld	(hl), #0x00
   0113                     246 00103$:
   0113 FD 21 00 10   [14]  247 	ld	iy, #_cnt
   0117 FD 7E 00      [19]  248 	ld	a, 0 (iy)
   011A D6 1E         [ 7]  249 	sub	a, #0x1e
   011C D0            [11]  250 	ret	NC
   011D FD 34 00      [23]  251 	inc	0 (iy)
                            252 ;/media/4TB_BACKUP/ZAZDISK_D/Proj/Bidouilleur/PRO-83_Plateforme_Z80/Programmes/SDCC/Horloge.c:102: }
   0120 18 F1         [12]  253 	jr	00103$
                            254 	.area _CODE
                            255 	.area _INITIALIZER
                            256 	.area _CABS (ABS)
