Files
SyncHome/trunk/workspace/Z80/lcd.lst
2023-03-13 08:36:51 +00:00

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)