Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 1 PC Object I Line Source A 1 ; Zilog Z8 Encore! ANSI C Compiler Release 3.62 A 2 ; -nolocalcse -optsize -nofastcall -const=RAM - A 3 ; -nooptlink -regvar -reduceopt -debug -norevaa 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 000002 A 18 _runspeed: 000002 A 19 DS 2*1 A 20 .define "runspeed" A 21 .alias "_runspeed" A 22 .class 83 A 23 .value _runspeed A 24 .type 3 A 25 .type 0 A 26 .endef A 27 SEGMENT FAR_DATA 000000 A 28 _runtime: 000000 04B0 A 29 DW 1200 A 30 .define "runtime" A 31 .alias "_runtime" A 32 .class 69 A 33 .value _runtime A 34 .type 3 A 35 .type 0 A 36 .endef A 37 SEGMENT FAR_BSS 000004 A 38 _input: 000004 A 39 DS 1 A 40 .define "input" A 41 .alias "_input" A 42 .class 83 A 43 .value _input A 44 .type 2 A 45 .type 0 A 46 .endef A 47 SEGMENT ROM_DATA A 48 A 49 A 50 ;**************************** _read_line ****** A 51 ;Name Addr/Register S A 52 ;_input STATIC Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 2 PC Object I Line Source line follower.src A 53 A 54 A 55 ; Aggregate Stack Size: 0 (words) A 56 A 57 A 58 .FRAME _n_read_line,?_n_read_line,RDATA A 59 .FRAME _f_read_line,?_f_read_line,EDATA A 60 SEGMENT ollower_TEXT 000000 A 61 _read_line: A 62 .define "_read_line" A 63 .value _read_line A 64 .class 2 A 65 .type 65 A 66 .type 0 A 67 .endef A 68 .begfunc "read_line",16,"_read_line" 000000 D6 0000 A 69 CALL __b_frameset00 A 70 ; 1 #include A 71 ; 2 A 72 ; 3 void forward(int ontime1, int offtime1) A 73 ; 4 void reverse(int ontime1, int offtime1) A 74 ; 5 void left(int ontime1, int offtime1); A 75 ; 6 void rotateL(int ontime1, int offtime1) A 76 ; 7 void right(int ontime1, int offtime1); A 77 ; 8 void rotateR(int ontime1, int offtime1) A 78 ; 9 A 79 ; 10 int d; A 80 ; 11 int runspeed; A 81 ; 12 int runtime = 1200; A 82 ; 13 char input; A 83 ; 14 A 84 ; 15 void read_line(void) A 85 ; 16 { A 86 ; 17 input=PAIN; A 87 .line 17 000003 E8FD2004 A 88 LDX _input,4050 A 89 ; 18 input = input << 3; A 90 .line 18 000007 840004 A 91 LDX R0,_input 00000A 0200 A 92 ADD R0,R0 00000C 0200 A 93 ADD R0,R0 00000E 0200 A 94 ADD R0,R0 000010 940004 A 95 LDX _input,R0 A 96 ; 19 input=input&0x70; A 97 .line 19 000013 59700004 A 98 ANDX _input,#112 A 99 ; 20 input ^= 0x70; A 100 .line 20 000017 B9700004 A 101 XORX _input,#112 A 102 ; 21 } A 103 .line 21 00001B D6 0000 A 104 CALL __b_framereset Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 3 PC Object I Line Source line follower.src 00001E AF A 105 RET A 106 .endfunc "read_line",21,"_read_line" A 107 SEGMENT ROM_DATA A 108 A 109 A 110 ;**************************** _main *********** A 111 ;Name Addr/Register S A 112 ;_right IMPORT -- A 113 ;_rotateR IMPORT -- A 114 ;_left IMPORT -- A 115 ;_forward IMPORT -- A 116 ;_rotateL IMPORT -- A 117 ;_runtime STATIC A 118 ;_reverse IMPORT -- A 119 ;_runspeed STATIC A 120 ;_input STATIC A 121 A 122 A 123 ; Aggregate Stack Size: 0 (words) A 124 A 125 A 126 .FRAME _n_main,?_n_main,RDATA A 127 .FCALL _n_reverse A 128 .FCALL _n_read_line A 129 .FCALL _n_rotateL A 130 .FCALL _n_forward A 131 .FCALL _n_left A 132 .FCALL _n_rotateR A 133 .FCALL _n_right A 134 .FRAME _f_main,?_f_main,EDATA A 135 .FCALL _f_reverse A 136 .FCALL _f_read_line A 137 .FCALL _f_rotateL A 138 .FCALL _f_forward A 139 .FCALL _f_left A 140 .FCALL _f_rotateR A 141 .FCALL _f_right A 142 SEGMENT ollower_TEXT 00001F A 143 _main: A 144 .define "_main" A 145 .value _main A 146 .class 2 A 147 .type 65 A 148 .type 0 A 149 .endef A 150 .begfunc "main",32,"_main" 00001F D6 0000 A 151 CALL __b_frameset00 A 152 ; 22 A 153 ; 23 #define STOP 0x00 //0000 A 154 ; 24 #define L 0x03 //0011 A 155 ; 25 #define REV 0x06 //0110 A 156 ; 26 #define RL 0x07 //0111 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 4 PC Object I Line Source line follower.src A 157 ; 27 #define R 0x0C //1100 A 158 ; 28 #define RR 0x0E //1110 A 159 ; 29 #define FWD 0x0F //1111 A 160 ; 30 A 161 ; 31 void main() A 162 ; 32 { A 163 ; 33 PCDD = 0xF0; //outputs for motor A 164 .line 33 000022 E9010FD8 A 165 LDX 4056,#1 000026 E9F00FD9 A 166 LDX 4057,#240 A 167 ; 34 A 168 ; 35 /* A 169 ; 36 Sensor truth table: hex value: A 170 ; 37 000 = reverse 0x0 A 171 ; 38 001 = rotateL 0x0 A 172 ; 39 010 = forward 0x0 A 173 ; 40 011 = left 0x0 A 174 ; 41 100 = rotateR 0x0 A 175 ; 42 101 = reverse 0x0 A 176 ; 43 110 = right 0x0 A 177 ; 44 111 = reverse 0x0 A 178 ; 45 */ A 179 ; 46 while(1) 00002A A 180 _2_L_24: A 181 .line 46 A 182 ; 47 { A 183 ; 48 // read_line(); A 184 ; 49 while(input==0x00) 00002A A 185 _2_L_1: A 186 .line 49 00002A A9000004 A 187 CPX _input,#-0 00002E EB 30 A 188 JR NE,_2_L_3 A 189 ; 50 { A 190 ; 51 runspeed = 500; A 191 .line 51 000030 E9010002 A 192 LDX _runspeed,#1 000034 E9F40003 A 193 LDX _runspeed+1,#244 A 194 ; 52 reverse(runspeed,runtime - A 195 .line 52 000038 841000 A 196 LDX R1,_runtime 00003B 840001 A 197 LDX R0,_runtime+1 00003E 28 003EE0 A 198 SUBX R0,_runspeed+1 000042 38 002EE1 A 199 SBCX R1,_runspeed 000046 70E0 A 200 PUSH R0 000048 70E1 A 201 PUSH R1 00004A C8 0030 A 202 PUSHX _runspeed+1 00004D C8 0020 A 203 PUSHX _runspeed 000050 D6 01DF A 204 CALL _reverse 000053 50E0 A 205 POP R0 000055 50E0 A 206 POP R0 000057 50E0 A 207 POP R0 000059 50E0 A 208 POP R0 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 5 PC Object I Line Source line follower.src A 209 ; 53 read_line(); A 210 .line 53 00005B D6 0000 A 211 CALL _read_line A 212 ; 54 } A 213 .line 54 00005E 8B CA A 214 JR _2_L_1 A 215 ; 55 while(input==0x10) 000060 A 216 _2_L_3: A 217 .line 55 000060 A9100004 A 218 CPX _input,#16 000064 EB 30 A 219 JR NE,_2_L_6 A 220 ; 56 { A 221 ; 57 runspeed = 500; A 222 .line 57 000066 E9010002 A 223 LDX _runspeed,#1 00006A E9F40003 A 224 LDX _runspeed+1,#244 A 225 ; 58 rotateL(runspeed,runtime - A 226 .line 58 00006E 841000 A 227 LDX R1,_runtime 000071 840001 A 228 LDX R0,_runtime+1 000074 28 003EE0 A 229 SUBX R0,_runspeed+1 000078 38 002EE1 A 230 SBCX R1,_runspeed 00007C 70E0 A 231 PUSH R0 00007E 70E1 A 232 PUSH R1 000080 C8 0030 A 233 PUSHX _runspeed+1 000083 C8 0020 A 234 PUSHX _runspeed 000086 D6 02A1 A 235 CALL _rotateL 000089 50E0 A 236 POP R0 00008B 50E0 A 237 POP R0 00008D 50E0 A 238 POP R0 00008F 50E0 A 239 POP R0 A 240 ; 59 read_line(); A 241 .line 59 000091 D6 0000 A 242 CALL _read_line A 243 ; 60 } A 244 .line 60 000094 8B CA A 245 JR _2_L_3 A 246 ; 61 while(input==0x20) 000096 A 247 _2_L_6: A 248 .line 61 000096 A9200004 A 249 CPX _input,#32 00009A EB 30 A 250 JR NE,_2_L_9 A 251 ; 62 { A 252 ; 63 runspeed = 500; A 253 .line 63 00009C E9010002 A 254 LDX _runspeed,#1 0000A0 E9F40003 A 255 LDX _runspeed+1,#244 A 256 ; 64 forward(runspeed,runtime - A 257 .line 64 0000A4 841000 A 258 LDX R1,_runtime 0000A7 840001 A 259 LDX R0,_runtime+1 0000AA 28 003EE0 A 260 SUBX R0,_runspeed+1 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 6 PC Object I Line Source line follower.src 0000AE 38 002EE1 A 261 SBCX R1,_runspeed 0000B2 70E0 A 262 PUSH R0 0000B4 70E1 A 263 PUSH R1 0000B6 C8 0030 A 264 PUSHX _runspeed+1 0000B9 C8 0020 A 265 PUSHX _runspeed 0000BC D6 03C4 A 266 CALL _forward 0000BF 50E0 A 267 POP R0 0000C1 50E0 A 268 POP R0 0000C3 50E0 A 269 POP R0 0000C5 50E0 A 270 POP R0 A 271 ; 65 read_line(); A 272 .line 65 0000C7 D6 0000 A 273 CALL _read_line A 274 ; 66 } A 275 .line 66 0000CA 8B CA A 276 JR _2_L_6 A 277 ; 67 while(input==0x30) 0000CC A 278 _2_L_9: A 279 .line 67 0000CC A9300004 A 280 CPX _input,#48 0000D0 EB 30 A 281 JR NE,_2_L_12 A 282 ; 68 { A 283 ; 69 runspeed = 800; A 284 .line 69 0000D2 E9030002 A 285 LDX _runspeed,#3 0000D6 E9200003 A 286 LDX _runspeed+1,#32 A 287 ; 70 left(runspeed,runtime - run A 288 .line 70 0000DA 841000 A 289 LDX R1,_runtime 0000DD 840001 A 290 LDX R0,_runtime+1 0000E0 28 003EE0 A 291 SUBX R0,_runspeed+1 0000E4 38 002EE1 A 292 SBCX R1,_runspeed 0000E8 70E0 A 293 PUSH R0 0000EA 70E1 A 294 PUSH R1 0000EC C8 0030 A 295 PUSHX _runspeed+1 0000EF C8 0020 A 296 PUSHX _runspeed 0000F2 D6 0240 A 297 CALL _left 0000F5 50E0 A 298 POP R0 0000F7 50E0 A 299 POP R0 0000F9 50E0 A 300 POP R0 0000FB 50E0 A 301 POP R0 A 302 ; 71 read_line(); A 303 .line 71 0000FD D6 0000 A 304 CALL _read_line A 305 ; 72 } A 306 .line 72 000100 8B CA A 307 JR _2_L_9 A 308 ; 73 while(input==0x40) 000102 A 309 _2_L_12: A 310 .line 73 000102 A9400004 A 311 CPX _input,#64 000106 EB 30 A 312 JR NE,_2_L_15 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 7 PC Object I Line Source line follower.src A 313 ; 74 { A 314 ; 75 runspeed = 500; A 315 .line 75 000108 E9010002 A 316 LDX _runspeed,#1 00010C E9F40003 A 317 LDX _runspeed+1,#244 A 318 ; 76 rotateR(runspeed,runtime - A 319 .line 76 000110 841000 A 320 LDX R1,_runtime 000113 840001 A 321 LDX R0,_runtime+1 000116 28 003EE0 A 322 SUBX R0,_runspeed+1 00011A 38 002EE1 A 323 SBCX R1,_runspeed 00011E 70E0 A 324 PUSH R0 000120 70E1 A 325 PUSH R1 000122 C8 0030 A 326 PUSHX _runspeed+1 000125 C8 0020 A 327 PUSHX _runspeed 000128 D6 0363 A 328 CALL _rotateR 00012B 50E0 A 329 POP R0 00012D 50E0 A 330 POP R0 00012F 50E0 A 331 POP R0 000131 50E0 A 332 POP R0 A 333 ; 77 read_line(); A 334 .line 77 000133 D6 0000 A 335 CALL _read_line A 336 ; 78 } A 337 .line 78 000136 8B CA A 338 JR _2_L_12 A 339 ; 79 while(input==0x50) 000138 A 340 _2_L_15: A 341 .line 79 000138 A9500004 A 342 CPX _input,#80 00013C EB 30 A 343 JR NE,_2_L_18 A 344 ; 80 { A 345 ; 81 runspeed = 500; A 346 .line 81 00013E E9010002 A 347 LDX _runspeed,#1 000142 E9F40003 A 348 LDX _runspeed+1,#244 A 349 ; 82 reverse(runspeed,runtime - A 350 .line 82 000146 841000 A 351 LDX R1,_runtime 000149 840001 A 352 LDX R0,_runtime+1 00014C 28 003EE0 A 353 SUBX R0,_runspeed+1 000150 38 002EE1 A 354 SBCX R1,_runspeed 000154 70E0 A 355 PUSH R0 000156 70E1 A 356 PUSH R1 000158 C8 0030 A 357 PUSHX _runspeed+1 00015B C8 0020 A 358 PUSHX _runspeed 00015E D6 01DF A 359 CALL _reverse 000161 50E0 A 360 POP R0 000163 50E0 A 361 POP R0 000165 50E0 A 362 POP R0 000167 50E0 A 363 POP R0 A 364 ; 83 read_line(); Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 8 PC Object I Line Source line follower.src A 365 .line 83 000169 D6 0000 A 366 CALL _read_line A 367 ; 84 } A 368 .line 84 00016C 8B CA A 369 JR _2_L_15 A 370 ; 85 while(input==0x60) 00016E A 371 _2_L_18: A 372 .line 85 00016E A9600004 A 373 CPX _input,#96 000172 EB 30 A 374 JR NE,_2_L_21 A 375 ; 86 { A 376 ; 87 runspeed = 800; A 377 .line 87 000174 E9030002 A 378 LDX _runspeed,#3 000178 E9200003 A 379 LDX _runspeed+1,#32 A 380 ; 88 right(runspeed,runtime - ru A 381 .line 88 00017C 841000 A 382 LDX R1,_runtime 00017F 840001 A 383 LDX R0,_runtime+1 000182 28 003EE0 A 384 SUBX R0,_runspeed+1 000186 38 002EE1 A 385 SBCX R1,_runspeed 00018A 70E0 A 386 PUSH R0 00018C 70E1 A 387 PUSH R1 00018E C8 0030 A 388 PUSHX _runspeed+1 000191 C8 0020 A 389 PUSHX _runspeed 000194 D6 0302 A 390 CALL _right 000197 50E0 A 391 POP R0 000199 50E0 A 392 POP R0 00019B 50E0 A 393 POP R0 00019D 50E0 A 394 POP R0 A 395 ; 89 read_line(); A 396 .line 89 00019F D6 0000 A 397 CALL _read_line A 398 ; 90 } A 399 .line 90 0001A2 8B CA A 400 JR _2_L_18 A 401 ; 91 while(input==0x70) 0001A4 A 402 _2_L_21: A 403 .line 91 0001A4 A9700004 A 404 CPX _input,#112 0001A8 ED 00 2A A 405 JR NE,_2_L_24 A 406 ; 92 { A 407 ; 93 runspeed = 500; A 408 .line 93 0001AB E9010002 A 409 LDX _runspeed,#1 0001AF E9F40003 A 410 LDX _runspeed+1,#244 A 411 ; 94 forward(runspeed,runtime - A 412 .line 94 0001B3 841000 A 413 LDX R1,_runtime 0001B6 840001 A 414 LDX R0,_runtime+1 0001B9 28 003EE0 A 415 SUBX R0,_runspeed+1 0001BD 38 002EE1 A 416 SBCX R1,_runspeed Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 9 PC Object I Line Source line follower.src 0001C1 70E0 A 417 PUSH R0 0001C3 70E1 A 418 PUSH R1 0001C5 C8 0030 A 419 PUSHX _runspeed+1 0001C8 C8 0020 A 420 PUSHX _runspeed 0001CB D6 03C4 A 421 CALL _forward 0001CE 50E0 A 422 POP R0 0001D0 50E0 A 423 POP R0 0001D2 50E0 A 424 POP R0 0001D4 50E0 A 425 POP R0 A 426 ; 95 read_line(); A 427 .line 95 0001D6 D6 0000 A 428 CALL _read_line A 429 ; 96 } A 430 .line 96 0001D9 8B C9 A 431 JR _2_L_21 A 432 ; 97 } A 433 ; 98 } A 434 .line 98 0001DB D6 0000 A 435 CALL __b_framereset 0001DE AF A 436 RET A 437 .endfunc "main",98,"_main" A 438 SEGMENT ROM_DATA A 439 A 440 A 441 ;**************************** _reverse ******** A 442 ;Name Addr/Register S A 443 ;_d STATIC A 444 ;offtime1 R15+6 A 445 ;ontime1 R15+4 A 446 A 447 A 448 ; Aggregate Stack Size: 0 (words) A 449 A 450 A 451 .FRAME _n_reverse,?_n_reverse,RDATA A 452 .FRAME _f_reverse,?_f_reverse,EDATA A 453 SEGMENT ollower_TEXT 0001DF A 454 _reverse: A 455 .define "_reverse" A 456 .value _reverse A 457 .class 2 A 458 .type 65 A 459 .type 0 A 460 .endef A 461 .begfunc "reverse",101,"_reverse" A 462 .define "ontime1" A 463 .class 9 A 464 .value 4 A 465 .type 3 A 466 .type 0 A 467 .endef A 468 .define "offtime1" Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 21-Feb-12 14:55:32 page: 10 PC Object I Line Source line follower.src A 469 .class 9 A 470 .value 6 A 471 .type 3 A 472 .type 0 A 473 .endef 0001DF D6 0000 A 474 CALL __b_frameset00 A 475 ; 99 A 476 ; 100 void reverse(int ontime1, int offtime1) A 477 ; 101 { A 478 ; 102 PCOUT = REV; // reverse A 479 .line 102 0001E2 E9060FDB A 480 LDX 4059,#6 0001E6 8B 13 A 481 JR _3_L_28 A 482 ; 103 for(d=0;d