Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 1 PC Object I Line Source A 1 ; Zilog Z8 Encore! ANSI C Compiler Release 3.60 A 2 ; -nolocalcse -optsize -nofastcall -const=RAM -model=L A 3 ; -nooptlink -regvar -reduceopt -debug -norevaa -peephole A 4 ; -alias A 5 DEFINE ollower_TEXT,SPACE=ROM A 6 FILE "..\LINE FOLLOWER.C" A 7 .debug "C" A 8 SEGMENT FAR_BSS 000000 A 9 _d: 000000 A 10 DS 2*1 A 11 .define "d" A 12 .alias "_d" A 13 .class 83 A 14 .value _d A 15 .type 3 A 16 .type 0 A 17 .endef A 18 SEGMENT ROM_DATA A 19 A 20 A 21 ;**************************** _main *************************** A 22 ;Name Addr/Register Size Type A 23 ;_left IMPORT ----- function A 24 ;_rotateL IMPORT ----- function A 25 ;_right IMPORT ----- function A 26 ;_forward IMPORT ----- function A 27 ;_rotateR IMPORT ----- function A 28 ;_reverse IMPORT ----- function A 29 ;input RR0 1 variable A 30 A 31 A 32 ; Aggregate Stack Size: 0 (words) A 33 A 34 A 35 .FRAME _n_main,?_n_main,RDATA A 36 .FCALL _n_reverse A 37 .FCALL _n_rotateR A 38 .FCALL _n_forward A 39 .FCALL _n_right A 40 .FCALL _n_rotateL A 41 .FCALL _n_left A 42 .FRAME _f_main,?_f_main,EDATA A 43 .FCALL _f_reverse A 44 .FCALL _f_rotateR A 45 .FCALL _f_forward A 46 .FCALL _f_right A 47 .FCALL _f_rotateL A 48 .FCALL _f_left A 49 SEGMENT ollower_TEXT 000000 A 50 _main: A 51 .define "_main" A 52 .value _main Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 2 PC Object I Line Source line follower.src A 53 .class 2 A 54 .type 65 A 55 .type 0 A 56 .endef A 57 .begfunc "main",13,"_main" A 58 ; 1 #include A 59 ; 2 A 60 ; 3 void forward(int ontime1, int offtime1); A 61 ; 4 void reverse(int ontime1, int offtime1); A 62 ; 5 void left(int ontime1, int offtime1); A 63 ; 6 void rotateL(int ontime1, int offtime1); A 64 ; 7 void right(int ontime1, int offtime1); A 65 ; 8 void rotateR(int ontime1, int offtime1); A 66 ; 9 A 67 ; 10 int d; A 68 ; 11 A 69 ; 12 void main() A 70 ; 13 { A 71 .define "input" A 72 .class 4 A 73 .reg 17 A 74 .type 3 A 75 .type 0 A 76 .endef 000000 D6 0000 A 77 CALL __b_frameset00 A 78 ; 14 int input; A 79 ; 15 A 80 ; 16 PBADDR=0x01; A 81 .line 16 000003 E9010FD4 A 82 LDX 4052,#1 A 83 ; 17 PBCTL=0x00; A 84 .line 17 000007 E9000FD5 A 85 LDX 4053,#-0 A 86 ; 18 PAADDR=0x01; A 87 .line 18 00000B E9010FD0 A 88 LDX 4048,#1 A 89 ; 19 PACTL=0xff; A 90 .line 19 00000F E9FF0FD1 A 91 LDX 4049,#255 A 92 ; 20 PCADDR=0x01; A 93 .line 20 000013 E9010FD8 A 94 LDX 4056,#1 A 95 ; 21 PCCTL=0xff; A 96 .line 21 000017 E9FF0FD9 A 97 LDX 4057,#255 A 98 ; 22 A 99 ; 23 input=PAIN; A 100 .line 23 00001B 841FD2 A 101 LDX R1,4050 A 102 ; 24 input=input&0x70; A 103 .line 24 00001E 56E170 A 104 AND R1,#112 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 3 PC Object I Line Source line follower.src 000021 B0E0 A 105 CLR R0 A 106 ; 25 A 107 ; 26 /* PB truth table: hex value: A 108 ; 27 0000 = stop 0x00 A 109 ; 28 0010 = left 0x02 A 110 ; 29 1111 = reverse 0x0f A 111 ; 30 1110 = rotateL 0x0e A 112 ; 31 1000 = right 0x08 A 113 ; 32 1011 = rotateR 0x0b A 114 ; 33 1010 = forward 0x0a A 115 ; 34 A 116 ; 35 Sensor truth table: hex value: A 117 ; 36 000 = reverse 0x00 A 118 ; 37 001 = rotateR 0x02 A 119 ; 38 010 = forward 0x04 A 120 ; 39 011 = right 0x06 A 121 ; 40 100 = rotateL 0x08 A 122 ; 41 101 = reverse 0x0a A 123 ; 42 110 = left 0x0c A 124 ; 43 111 = reverse 0x0e A 125 ; 44 */ A 126 ; 45 while(1) 000023 A 127 _1_L_24: A 128 .line 45 A 129 ; 46 { A 130 ; 47 while(input==0x00) 000023 A 131 _1_L_0: A 132 .line 47 000023 E4E0E2 A 133 LD R2,R0 000026 4221 A 134 OR R2,R1 000028 EB 21 A 135 JR NE,_1_L_2 A 136 ; 48 { A 137 ; 49 reverse(100,1100); A 138 .line 49 00002A 1F704C A 139 PUSH #76 00002D 1F7004 A 140 PUSH #4 000030 1F7064 A 141 PUSH #100 000033 1F7000 A 142 PUSH #0 000036 D6 0180 A 143 CALL _reverse 000039 50E0 A 144 POP R0 00003B 50E0 A 145 POP R0 00003D 50E0 A 146 POP R0 00003F 50E0 A 147 POP R0 A 148 ; 50 input=PAIN; A 149 .line 50 000041 841FD2 A 150 LDX R1,4050 A 151 ; 51 input=input&0x70; A 152 .line 51 000044 56E170 A 153 AND R1,#112 000047 B0E0 A 154 CLR R0 A 155 ; 52 } A 156 .line 52 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 4 PC Object I Line Source line follower.src 000049 8B D8 A 157 JR _1_L_0 A 158 ; 53 while(input==0x10) 00004B A 159 _1_L_2: A 160 .line 53 00004B A6E110 A 161 CP R1,#16 00004E 1FA6E000 A 162 CPC R0,#-0 000052 EB 21 A 163 JR NE,_1_L_5 A 164 ; 54 { A 165 ; 55 rotateR(800,400); A 166 .line 55 000054 1F7090 A 167 PUSH #144 000057 1F7001 A 168 PUSH #1 00005A 1F7020 A 169 PUSH #32 00005D 1F7003 A 170 PUSH #3 000060 D6 0304 A 171 CALL _rotateR 000063 50E0 A 172 POP R0 000065 50E0 A 173 POP R0 000067 50E0 A 174 POP R0 000069 50E0 A 175 POP R0 A 176 ; 56 input=PAIN; A 177 .line 56 00006B 841FD2 A 178 LDX R1,4050 A 179 ; 57 input=input&0x70; A 180 .line 57 00006E 56E170 A 181 AND R1,#112 000071 B0E0 A 182 CLR R0 A 183 ; 58 } A 184 .line 58 000073 8B D6 A 185 JR _1_L_2 A 186 ; 59 while(input==0x20) 000075 A 187 _1_L_5: A 188 .line 59 000075 A6E120 A 189 CP R1,#32 000078 1FA6E000 A 190 CPC R0,#-0 00007C EB 21 A 191 JR NE,_1_L_8 A 192 ; 60 { A 193 ; 61 forward(450,750); A 194 .line 61 00007E 1F70EE A 195 PUSH #238 000081 1F7002 A 196 PUSH #2 000084 1F70C2 A 197 PUSH #194 000087 1F7001 A 198 PUSH #1 00008A D6 0365 A 199 CALL _forward 00008D 50E0 A 200 POP R0 00008F 50E0 A 201 POP R0 000091 50E0 A 202 POP R0 000093 50E0 A 203 POP R0 A 204 ; 62 input=PAIN; A 205 .line 62 000095 841FD2 A 206 LDX R1,4050 A 207 ; 63 input=input&0x70; A 208 .line 63 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 5 PC Object I Line Source line follower.src 000098 56E170 A 209 AND R1,#112 00009B B0E0 A 210 CLR R0 A 211 ; 64 } A 212 .line 64 00009D 8B D6 A 213 JR _1_L_5 A 214 ; 65 while(input==0x30) 00009F A 215 _1_L_8: A 216 .line 65 00009F A6E130 A 217 CP R1,#48 0000A2 1FA6E000 A 218 CPC R0,#-0 0000A6 EB 21 A 219 JR NE,_1_L_11 A 220 ; 66 { A 221 ; 67 right(1100,100); A 222 .line 67 0000A8 1F7064 A 223 PUSH #100 0000AB 1F7000 A 224 PUSH #0 0000AE 1F704C A 225 PUSH #76 0000B1 1F7004 A 226 PUSH #4 0000B4 D6 02A3 A 227 CALL _right 0000B7 50E0 A 228 POP R0 0000B9 50E0 A 229 POP R0 0000BB 50E0 A 230 POP R0 0000BD 50E0 A 231 POP R0 A 232 ; 68 input=PAIN; A 233 .line 68 0000BF 841FD2 A 234 LDX R1,4050 A 235 ; 69 input=input&0x70; A 236 .line 69 0000C2 56E170 A 237 AND R1,#112 0000C5 B0E0 A 238 CLR R0 A 239 ; 70 } A 240 .line 70 0000C7 8B D6 A 241 JR _1_L_8 A 242 ; 71 while(input==0x40) 0000C9 A 243 _1_L_11: A 244 .line 71 0000C9 A6E140 A 245 CP R1,#64 0000CC 1FA6E000 A 246 CPC R0,#-0 0000D0 EB 21 A 247 JR NE,_1_L_14 A 248 ; 72 { A 249 ; 73 rotateL(800,400); A 250 .line 73 0000D2 1F7090 A 251 PUSH #144 0000D5 1F7001 A 252 PUSH #1 0000D8 1F7020 A 253 PUSH #32 0000DB 1F7003 A 254 PUSH #3 0000DE D6 0242 A 255 CALL _rotateL 0000E1 50E0 A 256 POP R0 0000E3 50E0 A 257 POP R0 0000E5 50E0 A 258 POP R0 0000E7 50E0 A 259 POP R0 A 260 ; 74 input=PAIN; Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 6 PC Object I Line Source line follower.src A 261 .line 74 0000E9 841FD2 A 262 LDX R1,4050 A 263 ; 75 input=input&0x70; A 264 .line 75 0000EC 56E170 A 265 AND R1,#112 0000EF B0E0 A 266 CLR R0 A 267 ; 76 } A 268 .line 76 0000F1 8B D6 A 269 JR _1_L_11 A 270 ; 77 while(input==0x50) 0000F3 A 271 _1_L_14: A 272 .line 77 0000F3 A6E150 A 273 CP R1,#80 0000F6 1FA6E000 A 274 CPC R0,#-0 0000FA EB 21 A 275 JR NE,_1_L_17 A 276 ; 78 { A 277 ; 79 reverse(100,1100); A 278 .line 79 0000FC 1F704C A 279 PUSH #76 0000FF 1F7004 A 280 PUSH #4 000102 1F7064 A 281 PUSH #100 000105 1F7000 A 282 PUSH #0 000108 D6 0180 A 283 CALL _reverse 00010B 50E0 A 284 POP R0 00010D 50E0 A 285 POP R0 00010F 50E0 A 286 POP R0 000111 50E0 A 287 POP R0 A 288 ; 80 input=PAIN; A 289 .line 80 000113 841FD2 A 290 LDX R1,4050 A 291 ; 81 input=input&0x70; A 292 .line 81 000116 56E170 A 293 AND R1,#112 000119 B0E0 A 294 CLR R0 A 295 ; 82 } A 296 .line 82 00011B 8B D6 A 297 JR _1_L_14 A 298 ; 83 while(input==0x60) 00011D A 299 _1_L_17: A 300 .line 83 00011D A6E160 A 301 CP R1,#96 000120 1FA6E000 A 302 CPC R0,#-0 000124 EB 21 A 303 JR NE,_1_L_20 A 304 ; 84 { A 305 ; 85 left(1100,100); A 306 .line 85 000126 1F7064 A 307 PUSH #100 000129 1F7000 A 308 PUSH #0 00012C 1F704C A 309 PUSH #76 00012F 1F7004 A 310 PUSH #4 000132 D6 01E1 A 311 CALL _left 000135 50E0 A 312 POP R0 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 7 PC Object I Line Source line follower.src 000137 50E0 A 313 POP R0 000139 50E0 A 314 POP R0 00013B 50E0 A 315 POP R0 A 316 ; 86 input=PAIN; A 317 .line 86 00013D 841FD2 A 318 LDX R1,4050 A 319 ; 87 input=input&0x70; A 320 .line 87 000140 56E170 A 321 AND R1,#112 000143 B0E0 A 322 CLR R0 A 323 ; 88 } A 324 .line 88 000145 8B D6 A 325 JR _1_L_17 A 326 ; 89 while(input==0x70) 000147 A 327 _1_L_20: A 328 .line 89 000147 A6E170 A 329 CP R1,#112 00014A 1FA6E000 A 330 CPC R0,#-0 00014E EB 21 A 331 JR NE,_1_L_23 A 332 ; 90 { A 333 ; 91 reverse(100,1100); A 334 .line 91 000150 1F704C A 335 PUSH #76 000153 1F7004 A 336 PUSH #4 000156 1F7064 A 337 PUSH #100 000159 1F7000 A 338 PUSH #0 00015C D6 0180 A 339 CALL _reverse 00015F 50E0 A 340 POP R0 000161 50E0 A 341 POP R0 000163 50E0 A 342 POP R0 000165 50E0 A 343 POP R0 A 344 ; 92 input=PAIN; A 345 .line 92 000167 841FD2 A 346 LDX R1,4050 A 347 ; 93 input=input&0x70; A 348 .line 93 00016A 56E170 A 349 AND R1,#112 00016D B0E0 A 350 CLR R0 A 351 ; 94 } A 352 .line 94 00016F 8B D6 A 353 JR _1_L_20 000171 A 354 _1_L_23: A 355 ; 95 input=PAIN; A 356 .line 95 000171 841FD2 A 357 LDX R1,4050 A 358 ; 96 input=input&0x70; A 359 .line 96 000174 56E170 A 360 AND R1,#112 000177 B0E0 A 361 CLR R0 A 362 ; 97 } A 363 .line 97 000179 8D 00 23 A 364 JR _1_L_24 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 28-Dec-09 14:30:44 page: 8 PC Object I Line Source line follower.src A 365 ; 98 } A 366 .line 98 00017C D6 0000 A 367 CALL __b_framereset 00017F AF A 368 RET A 369 .endfunc "main",98,"_main" A 370 SEGMENT ROM_DATA A 371 A 372 A 373 ;**************************** _reverse *************************** A 374 ;Name Addr/Register Size Type A 375 ;_d STATIC 1 variable A 376 ;offtime1 R15+6 1 parameter A 377 ;ontime1 R15+4 1 parameter A 378 A 379 A 380 ; Aggregate Stack Size: 0 (words) A 381 A 382 A 383 .FRAME _n_reverse,?_n_reverse,RDATA A 384 .FRAME _f_reverse,?_f_reverse,EDATA A 385 SEGMENT ollower_TEXT 000180 A 386 _reverse: A 387 .define "_reverse" A 388 .value _reverse A 389 .class 2 A 390 .type 65 A 391 .type 0 A 392 .endef A 393 .begfunc "reverse",101,"_reverse" A 394 .define "ontime1" A 395 .class 9 A 396 .value 4 A 397 .type 3 A 398 .type 0 A 399 .endef A 400 .define "offtime1" A 401 .class 9 A 402 .value 6 A 403 .type 3 A 404 .type 0 A 405 .endef 000180 D6 0000 A 406 CALL __b_frameset00 A 407 ; 99 A 408 ; 100 void reverse(int ontime1, int offtime1) A 409 ; 101 { A 410 ; 102 PBOUT=0x0f; // reverse A 411 .line 102 000183 E90F0FD7 A 412 LDX 4055,#15 000187 8B 13 A 413 JR _2_L_28 A 414 ; 103 for(d=0;d