330 lines
17 KiB
Plaintext
330 lines
17 KiB
Plaintext
1 ;--------------------------------------------------------
|
|
2 ; File Created by SDCC : free open source ANSI-C Compiler
|
|
3 ; Version 3.5.0 #9253 (Jun 20 2015) (MINGW64)
|
|
4 ; This file was generated Tue Jul 24 12:17:59 2018
|
|
5 ;--------------------------------------------------------
|
|
6 .module lcd
|
|
7 .optsdcc -mz80
|
|
8
|
|
9 ;--------------------------------------------------------
|
|
10 ; Public variables in this module
|
|
11 ;--------------------------------------------------------
|
|
12 .globl _LCD_Port
|
|
13 .globl _delay
|
|
14 .globl _lcd_rs
|
|
15 .globl _lcd_strobe
|
|
16 .globl _lcd_write
|
|
17 .globl _lcd_clear
|
|
18 .globl _lcd_puts
|
|
19 .globl _lcd_putch
|
|
20 .globl _lcd_goto
|
|
21 .globl _lcd_init
|
|
22 ;--------------------------------------------------------
|
|
23 ; special function registers
|
|
24 ;--------------------------------------------------------
|
|
0080 25 _Display = 0x0080
|
|
26 ;--------------------------------------------------------
|
|
27 ; ram data
|
|
28 ;--------------------------------------------------------
|
|
29 .area _DATA
|
|
30 ;--------------------------------------------------------
|
|
31 ; ram data
|
|
32 ;--------------------------------------------------------
|
|
33 .area _INITIALIZED
|
|
0000 34 _LCD_Port::
|
|
0000 35 .ds 1
|
|
36 ;--------------------------------------------------------
|
|
37 ; absolute external ram data
|
|
38 ;--------------------------------------------------------
|
|
39 .area _DABS (ABS)
|
|
40 ;--------------------------------------------------------
|
|
41 ; global & static initialisations
|
|
42 ;--------------------------------------------------------
|
|
43 .area _HOME
|
|
44 .area _GSINIT
|
|
45 .area _GSFINAL
|
|
46 .area _GSINIT
|
|
47 ;--------------------------------------------------------
|
|
48 ; Home
|
|
49 ;--------------------------------------------------------
|
|
50 .area _HOME
|
|
51 .area _HOME
|
|
52 ;--------------------------------------------------------
|
|
53 ; code
|
|
54 ;--------------------------------------------------------
|
|
55 .area _CODE
|
|
56 ;lcd.c:18: void delay(int tempo){
|
|
57 ; ---------------------------------
|
|
58 ; Function delay
|
|
59 ; ---------------------------------
|
|
0000 60 _delay::
|
|
61 ;lcd.c:20: for (i=0;i<=tempo;i++) {
|
|
0000 11 00 00 [10] 62 ld de,#0x0000
|
|
0003 63 00103$:
|
|
0003 21 02 00 [10] 64 ld hl,#2
|
|
0006 39 [11] 65 add hl,sp
|
|
0007 7E [ 7] 66 ld a,(hl)
|
|
0008 93 [ 4] 67 sub a, e
|
|
0009 23 [ 6] 68 inc hl
|
|
000A 7E [ 7] 69 ld a,(hl)
|
|
000B 9A [ 4] 70 sbc a, d
|
|
000C E2r11r00 [10] 71 jp PO, 00116$
|
|
000F EE 80 [ 7] 72 xor a, #0x80
|
|
0011 73 00116$:
|
|
0011 F8 [11] 74 ret M
|
|
75 ;lcd.c:23: __endasm;
|
|
0012 00 [ 4] 76 nop
|
|
77 ;lcd.c:20: for (i=0;i<=tempo;i++) {
|
|
0013 13 [ 6] 78 inc de
|
|
0014 18 ED [12] 79 jr 00103$
|
|
80 ;lcd.c:28: void lcd_rs(unsigned char command){
|
|
81 ; ---------------------------------
|
|
82 ; Function lcd_rs
|
|
83 ; ---------------------------------
|
|
0016 84 _lcd_rs::
|
|
85 ;lcd.c:29: if (command==DATA)
|
|
0016 21 02 00 [10] 86 ld hl, #2+0
|
|
0019 39 [11] 87 add hl, sp
|
|
001A 7E [ 7] 88 ld a, (hl)
|
|
001B 3D [ 4] 89 dec a
|
|
001C 20 09 [12] 90 jr NZ,00102$
|
|
91 ;lcd.c:30: setb(LCD_Port,RS_PIN);
|
|
001E 3Ar00r00 [13] 92 ld a,(#_LCD_Port + 0)
|
|
0021 CB F7 [ 8] 93 set 6, a
|
|
0023 32r00r00 [13] 94 ld (#_LCD_Port + 0),a
|
|
0026 C9 [10] 95 ret
|
|
0027 96 00102$:
|
|
97 ;lcd.c:32: clrb(LCD_Port,RS_PIN);
|
|
0027 3Ar00r00 [13] 98 ld a,(#_LCD_Port + 0)
|
|
002A E6 BF [ 7] 99 and a, #0xBF
|
|
002C 32r00r00 [13] 100 ld (#_LCD_Port + 0),a
|
|
002F C9 [10] 101 ret
|
|
102 ;lcd.c:37: void lcd_strobe(void){
|
|
103 ; ---------------------------------
|
|
104 ; Function lcd_strobe
|
|
105 ; ---------------------------------
|
|
0030 106 _lcd_strobe::
|
|
107 ;lcd.c:38: setb(LCD_Port,EN_PIN);
|
|
0030 3Ar00r00 [13] 108 ld a,(#_LCD_Port + 0)
|
|
0033 CB FF [ 8] 109 set 7, a
|
|
110 ;lcd.c:39: Display=LCD_Port;
|
|
0035 32r00r00 [13] 111 ld (#_LCD_Port + 0),a
|
|
0038 D3 80 [11] 112 out (_Display),a
|
|
113 ;lcd.c:40: clrb(LCD_Port,EN_PIN);
|
|
003A 3Ar00r00 [13] 114 ld a,(#_LCD_Port + 0)
|
|
003D E6 7F [ 7] 115 and a, #0x7F
|
|
116 ;lcd.c:41: Display=LCD_Port;
|
|
003F 32r00r00 [13] 117 ld (#_LCD_Port + 0),a
|
|
0042 D3 80 [11] 118 out (_Display),a
|
|
0044 C9 [10] 119 ret
|
|
120 ;lcd.c:45: void lcd_write(unsigned char c) {
|
|
121 ; ---------------------------------
|
|
122 ; Function lcd_write
|
|
123 ; ---------------------------------
|
|
0045 124 _lcd_write::
|
|
125 ;lcd.c:46: LCD_Port = (LCD_Port & 0xF0) | (c >> 4);
|
|
0045 3Ar00r00 [13] 126 ld a,(#_LCD_Port + 0)
|
|
0048 E6 F0 [ 7] 127 and a, #0xF0
|
|
004A 57 [ 4] 128 ld d,a
|
|
004B 21 02 00 [10] 129 ld hl, #2+0
|
|
004E 39 [11] 130 add hl, sp
|
|
004F 7E [ 7] 131 ld a, (hl)
|
|
0050 07 [ 4] 132 rlca
|
|
0051 07 [ 4] 133 rlca
|
|
0052 07 [ 4] 134 rlca
|
|
0053 07 [ 4] 135 rlca
|
|
0054 E6 0F [ 7] 136 and a,#0x0F
|
|
0056 B2 [ 4] 137 or a, d
|
|
0057 32r00r00 [13] 138 ld (#_LCD_Port + 0),a
|
|
139 ;lcd.c:47: lcd_strobe();
|
|
005A CDr30r00 [17] 140 call _lcd_strobe
|
|
141 ;lcd.c:48: LCD_Port = (LCD_Port & 0xF0) | (c & 0x0F);
|
|
005D 3Ar00r00 [13] 142 ld a,(#_LCD_Port + 0)
|
|
0060 E6 F0 [ 7] 143 and a, #0xF0
|
|
0062 57 [ 4] 144 ld d,a
|
|
0063 21 02 00 [10] 145 ld hl, #2+0
|
|
0066 39 [11] 146 add hl, sp
|
|
0067 7E [ 7] 147 ld a, (hl)
|
|
0068 E6 0F [ 7] 148 and a, #0x0F
|
|
006A B2 [ 4] 149 or a, d
|
|
006B 32r00r00 [13] 150 ld (#_LCD_Port + 0),a
|
|
151 ;lcd.c:49: lcd_strobe();
|
|
006E CDr30r00 [17] 152 call _lcd_strobe
|
|
153 ;lcd.c:50: delay(4);
|
|
0071 21 04 00 [10] 154 ld hl,#0x0004
|
|
0074 E5 [11] 155 push hl
|
|
0075 CDr00r00 [17] 156 call _delay
|
|
0078 F1 [10] 157 pop af
|
|
0079 C9 [10] 158 ret
|
|
159 ;lcd.c:54: void lcd_clear(void) {
|
|
160 ; ---------------------------------
|
|
161 ; Function lcd_clear
|
|
162 ; ---------------------------------
|
|
007A 163 _lcd_clear::
|
|
164 ;lcd.c:55: lcd_rs(CMD);
|
|
007A AF [ 4] 165 xor a, a
|
|
007B F5 [11] 166 push af
|
|
007C 33 [ 6] 167 inc sp
|
|
007D CDr16r00 [17] 168 call _lcd_rs
|
|
0080 33 [ 6] 169 inc sp
|
|
170 ;lcd.c:56: lcd_write(0x1);
|
|
0081 3E 01 [ 7] 171 ld a,#0x01
|
|
0083 F5 [11] 172 push af
|
|
0084 33 [ 6] 173 inc sp
|
|
0085 CDr45r00 [17] 174 call _lcd_write
|
|
0088 33 [ 6] 175 inc sp
|
|
176 ;lcd.c:57: delay(200);
|
|
0089 21 C8 00 [10] 177 ld hl,#0x00C8
|
|
008C E5 [11] 178 push hl
|
|
008D CDr00r00 [17] 179 call _delay
|
|
0090 F1 [10] 180 pop af
|
|
0091 C9 [10] 181 ret
|
|
182 ;lcd.c:61: void lcd_puts(const char * s) {
|
|
183 ; ---------------------------------
|
|
184 ; Function lcd_puts
|
|
185 ; ---------------------------------
|
|
0092 186 _lcd_puts::
|
|
187 ;lcd.c:62: while(*s)
|
|
0092 C1 [10] 188 pop bc
|
|
0093 E1 [10] 189 pop hl
|
|
0094 E5 [11] 190 push hl
|
|
0095 C5 [11] 191 push bc
|
|
0096 192 00101$:
|
|
0096 7E [ 7] 193 ld a,(hl)
|
|
0097 B7 [ 4] 194 or a, a
|
|
0098 C8 [11] 195 ret Z
|
|
196 ;lcd.c:63: lcd_putch(*s++);
|
|
0099 23 [ 6] 197 inc hl
|
|
009A E5 [11] 198 push hl
|
|
009B F5 [11] 199 push af
|
|
009C 33 [ 6] 200 inc sp
|
|
009D CDrA4r00 [17] 201 call _lcd_putch
|
|
00A0 33 [ 6] 202 inc sp
|
|
00A1 E1 [10] 203 pop hl
|
|
00A2 18 F2 [12] 204 jr 00101$
|
|
205 ;lcd.c:67: void lcd_putch(char c) {
|
|
206 ; ---------------------------------
|
|
207 ; Function lcd_putch
|
|
208 ; ---------------------------------
|
|
00A4 209 _lcd_putch::
|
|
210 ;lcd.c:68: lcd_rs(DATA); // write characters
|
|
00A4 3E 01 [ 7] 211 ld a,#0x01
|
|
00A6 F5 [11] 212 push af
|
|
00A7 33 [ 6] 213 inc sp
|
|
00A8 CDr16r00 [17] 214 call _lcd_rs
|
|
00AB 33 [ 6] 215 inc sp
|
|
216 ;lcd.c:69: lcd_write(c);
|
|
00AC 21 02 00 [10] 217 ld hl, #2+0
|
|
00AF 39 [11] 218 add hl, sp
|
|
00B0 7E [ 7] 219 ld a, (hl)
|
|
00B1 F5 [11] 220 push af
|
|
00B2 33 [ 6] 221 inc sp
|
|
00B3 CDr45r00 [17] 222 call _lcd_write
|
|
00B6 33 [ 6] 223 inc sp
|
|
224 ;lcd.c:70: delay(4);
|
|
00B7 21 04 00 [10] 225 ld hl,#0x0004
|
|
00BA E5 [11] 226 push hl
|
|
00BB CDr00r00 [17] 227 call _delay
|
|
00BE F1 [10] 228 pop af
|
|
00BF C9 [10] 229 ret
|
|
230 ;lcd.c:74: void lcd_goto(unsigned char pos) {
|
|
231 ; ---------------------------------
|
|
232 ; Function lcd_goto
|
|
233 ; ---------------------------------
|
|
00C0 234 _lcd_goto::
|
|
235 ;lcd.c:75: lcd_rs(CMD);
|
|
00C0 AF [ 4] 236 xor a, a
|
|
00C1 F5 [11] 237 push af
|
|
00C2 33 [ 6] 238 inc sp
|
|
00C3 CDr16r00 [17] 239 call _lcd_rs
|
|
00C6 33 [ 6] 240 inc sp
|
|
241 ;lcd.c:76: lcd_write(0x80+pos);
|
|
00C7 21 02 00 [10] 242 ld hl, #2+0
|
|
00CA 39 [11] 243 add hl, sp
|
|
00CB 7E [ 7] 244 ld a, (hl)
|
|
00CC C6 80 [ 7] 245 add a, #0x80
|
|
00CE F5 [11] 246 push af
|
|
00CF 33 [ 6] 247 inc sp
|
|
00D0 CDr45r00 [17] 248 call _lcd_write
|
|
00D3 33 [ 6] 249 inc sp
|
|
00D4 C9 [10] 250 ret
|
|
251 ;lcd.c:80: void lcd_init(void) {
|
|
252 ; ---------------------------------
|
|
253 ; Function lcd_init
|
|
254 ; ---------------------------------
|
|
00D5 255 _lcd_init::
|
|
256 ;lcd.c:81: lcd_rs(CMD); // write control bytes
|
|
00D5 AF [ 4] 257 xor a, a
|
|
00D6 F5 [11] 258 push af
|
|
00D7 33 [ 6] 259 inc sp
|
|
00D8 CDr16r00 [17] 260 call _lcd_rs
|
|
00DB 33 [ 6] 261 inc sp
|
|
262 ;lcd.c:82: delay(150); // power on delay
|
|
00DC 21 96 00 [10] 263 ld hl,#0x0096
|
|
00DF E5 [11] 264 push hl
|
|
00E0 CDr00r00 [17] 265 call _delay
|
|
00E3 F1 [10] 266 pop af
|
|
267 ;lcd.c:83: LCD_Port = 0x3; // attention!
|
|
00E4 21r00r00 [10] 268 ld hl,#_LCD_Port + 0
|
|
00E7 36 03 [10] 269 ld (hl), #0x03
|
|
270 ;lcd.c:84: lcd_strobe();
|
|
00E9 CDr30r00 [17] 271 call _lcd_strobe
|
|
272 ;lcd.c:85: delay(500);
|
|
00EC 21 F4 01 [10] 273 ld hl,#0x01F4
|
|
00EF E5 [11] 274 push hl
|
|
00F0 CDr00r00 [17] 275 call _delay
|
|
00F3 F1 [10] 276 pop af
|
|
277 ;lcd.c:86: lcd_strobe();
|
|
00F4 CDr30r00 [17] 278 call _lcd_strobe
|
|
279 ;lcd.c:87: delay(100);
|
|
00F7 21 64 00 [10] 280 ld hl,#0x0064
|
|
00FA E5 [11] 281 push hl
|
|
00FB CDr00r00 [17] 282 call _delay
|
|
00FE F1 [10] 283 pop af
|
|
284 ;lcd.c:88: lcd_strobe();
|
|
00FF CDr30r00 [17] 285 call _lcd_strobe
|
|
286 ;lcd.c:89: delay(500);
|
|
0102 21 F4 01 [10] 287 ld hl,#0x01F4
|
|
0105 E5 [11] 288 push hl
|
|
0106 CDr00r00 [17] 289 call _delay
|
|
0109 F1 [10] 290 pop af
|
|
291 ;lcd.c:90: LCD_Port = 0x2; // set 4 bit mode
|
|
010A 21r00r00 [10] 292 ld hl,#_LCD_Port + 0
|
|
010D 36 02 [10] 293 ld (hl), #0x02
|
|
294 ;lcd.c:91: lcd_strobe();
|
|
010F CDr30r00 [17] 295 call _lcd_strobe
|
|
296 ;lcd.c:92: delay(4);
|
|
0112 21 04 00 [10] 297 ld hl,#0x0004
|
|
0115 E5 [11] 298 push hl
|
|
0116 CDr00r00 [17] 299 call _delay
|
|
300 ;lcd.c:93: lcd_write(0x28); // 4 bit mode, 1/16 duty, 5x8 font
|
|
0119 26 28 [ 7] 301 ld h,#0x28
|
|
011B E3 [19] 302 ex (sp),hl
|
|
011C 33 [ 6] 303 inc sp
|
|
011D CDr45r00 [17] 304 call _lcd_write
|
|
0120 33 [ 6] 305 inc sp
|
|
306 ;lcd.c:94: lcd_write(0x08); // display off
|
|
0121 3E 08 [ 7] 307 ld a,#0x08
|
|
0123 F5 [11] 308 push af
|
|
0124 33 [ 6] 309 inc sp
|
|
0125 CDr45r00 [17] 310 call _lcd_write
|
|
0128 33 [ 6] 311 inc sp
|
|
312 ;lcd.c:95: lcd_write(0x0F); // display on, blink curson on
|
|
0129 3E 0F [ 7] 313 ld a,#0x0F
|
|
012B F5 [11] 314 push af
|
|
012C 33 [ 6] 315 inc sp
|
|
012D CDr45r00 [17] 316 call _lcd_write
|
|
0130 33 [ 6] 317 inc sp
|
|
318 ;lcd.c:96: lcd_write(0x06); // entry mode
|
|
0131 3E 06 [ 7] 319 ld a,#0x06
|
|
0133 F5 [11] 320 push af
|
|
0134 33 [ 6] 321 inc sp
|
|
0135 CDr45r00 [17] 322 call _lcd_write
|
|
0138 33 [ 6] 323 inc sp
|
|
0139 C9 [10] 324 ret
|
|
325 .area _CODE
|
|
326 .area _INITIALIZER
|
|
0000 327 __xinit__LCD_Port:
|
|
0000 00 328 .db #0x00 ; 0
|
|
329 .area _CABS (ABS)
|