Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 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 -noregvar -reduceopt -debug -norev A 4 ; -alias A 5 DEFINE servo_TEXT,SPACE=ROM A 6 FILE ".\SERVO.C" A 7 .debug "C" A 8 SEGMENT ROM_DATA A 9 A 10 A 11 ;**************************** _clockin ******** A 12 ;Name Addr/Register S A 13 A 14 A 15 ; Aggregate Stack Size: 0 (words) A 16 A 17 A 18 .FRAME _n_clockin,?_n_clockin,RDATA A 19 SEGMENT servo_TEXT 000000 A 20 _clockin: A 21 .define "_clockin" A 22 .value _clockin A 23 .class 2 A 24 .type 65 A 25 .type 0 A 26 .endef A 27 .begfunc "clockin",7,"_clockin" 000000 70EF A 28 PUSH R15 000002 84FFFF A 29 LDX R15,4095 A 30 ; 1 #include A 31 ; 2 A 32 ; 3 // Servo Controller Data Comm A 33 ; 4 A 34 ; 5 // Clock in data to async port A 35 ; 6 void clockin(void) A 36 ; 7 { A 37 ; 8 PBOUT &=0xDF; //clock low A 38 .line 8 000005 59DF0FD7 A 39 ANDX 4055,#223 A 40 ; 9 while((PBIN &0x10)==0x10); // wait 000009 A 41 _1_L_0: A 42 .line 9 000009 840FD6 A 43 LDX R0,4054 00000C 56E010 A 44 AND R0,#16 00000F E4E0E1 A 45 LD R1,R0 000012 A6E010 A 46 CP R0,#16 000015 6B F2 A 47 JR Z,_1_L_0 A 48 ; 10 PBOUT |= 0x20; A 49 .line 10 000017 49200FD7 A 50 ORX 4055,#32 A 51 ; 11 while((PBIN &0x10)==0); //wait 00001B A 52 _1_L_3: Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 2 PC Object I Line Source servo.src A 53 .line 11 00001B 79100FD6 A 54 TMX 4054,#16 00001F 6B FA A 55 JR Z,_1_L_3 A 56 ; 12 } A 57 .line 12 000021 50EF A 58 POP R15 000023 AF A 59 RET A 60 .endfunc "clockin",12,"_clockin" A 61 SEGMENT ROM_DATA A 62 A 63 A 64 ;**************************** _servo_out ****** A 65 ;Name Addr/Register S A 66 ;i R15-3 A 67 ;motcom R15-1 A 68 ;param R15+7 A 69 ;com R15+5 A 70 ;mot R15+3 A 71 A 72 A 73 ; Aggregate Stack Size: -3 (words) A 74 A 75 A 76 .FRAME _n_servo_out,?_n_servo_out,RDATA A 77 .FCALL _n_clockin A 78 SEGMENT servo_TEXT 000024 A 79 _servo_out: A 80 .define "_servo_out" A 81 .value _servo_out A 82 .class 2 A 83 .type 65 A 84 .type 0 A 85 .endef A 86 .begfunc "servo_out",15,"_servo_out" A 87 .define "mot" A 88 .class 17 A 89 .reg -1 A 90 .type 3 A 91 .type 0 A 92 .endef A 93 .define "com" A 94 .class 9 A 95 .value 5 A 96 .type 3 A 97 .type 0 A 98 .endef A 99 .define "param" A 100 .class 17 A 101 .reg -1 A 102 .type 3 A 103 .type 0 A 104 .endef Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 3 PC Object I Line Source servo.src A 105 ; 13 A 106 ; 14 void servo_out(int mot,int com,int para A 107 ; 15 { A 108 .define "motcom" A 109 .class 1 A 110 .value -1 A 111 .type 2 A 112 .type 0 A 113 .endef A 114 .define "i" A 115 .class 1 A 116 .value -3 A 117 .type 3 A 118 .type 0 A 119 .endef 000024 70EF A 120 PUSH R15 000026 84FFFF A 121 LDX R15,4095 000029 29030FFF A 122 SUBX 4095,#3 A 123 ; 16 A 124 ; 17 A 125 ; 18 char motcom; A 126 ; 19 int i; A 127 ; 20 A 128 ; 21 // select servo driver IC A 129 ; 22 A 130 ; 23 if(mot<9) PBOUT &= 0xFE; A 131 .line 23 00002D C70F03 A 132 LD R0,3(R15) 000030 C71F04 A 133 LD R1,4(R15) 000033 A6E109 A 134 CP R1,#9 000036 1FA6E000 A 135 CPC R0,#-0 00003A 9B 04 A 136 JR GE,_2_L_9 00003C 59FE0FD7 A 137 ANDX 4055,#254 000040 A 138 _2_L_9: A 139 ; 24 A 140 ; 25 if(mot>=9) A 141 .line 25 000040 C70F03 A 142 LD R0,3(R15) 000043 C71F04 A 143 LD R1,4(R15) 000046 A6E109 A 144 CP R1,#9 000049 1FA6E000 A 145 CPC R0,#-0 00004D 1B 25 A 146 JR LT,_2_L_12 A 147 ; 26 if(mot<17) A 148 .line 26 00004F C70F03 A 149 LD R0,3(R15) 000052 C71F04 A 150 LD R1,4(R15) 000055 A6E111 A 151 CP R1,#17 000058 1FA6E000 A 152 CPC R0,#-0 00005C 9B 16 A 153 JR GE,_2_L_12 A 154 ; 27 { A 155 ; 28 PBOUT &=0xFD; A 156 .line 28 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 4 PC Object I Line Source servo.src 00005E 59FD0FD7 A 157 ANDX 4055,#253 A 158 ; 29 mot=mot-8; A 159 .line 29 000062 C71F03 A 160 LD R1,3(R15) 000065 C70F04 A 161 LD R0,4(R15) 000068 06E0F8 A 162 ADD R0,#248 00006B 16E1FF A 163 ADC R1,#255 00006E D71F03 A 164 LD 3(R15),R1 000071 D70F04 A 165 LD 4(R15),R0 A 166 ; 30 } 000074 A 167 _2_L_12: A 168 .line 30 A 169 ; 31 if(mot>=17) A 170 .line 31 000074 C70F03 A 171 LD R0,3(R15) 000077 C71F04 A 172 LD R1,4(R15) 00007A A6E111 A 173 CP R1,#17 00007D 1FA6E000 A 174 CPC R0,#-0 000081 1B 25 A 175 JR LT,_2_L_14 A 176 ; 32 if(mot<25) A 177 .line 32 000083 C70F03 A 178 LD R0,3(R15) 000086 C71F04 A 179 LD R1,4(R15) 000089 A6E119 A 180 CP R1,#25 00008C 1FA6E000 A 181 CPC R0,#-0 000090 9B 16 A 182 JR GE,_2_L_14 A 183 ; 33 { A 184 ; 34 PBOUT &=0xFB; A 185 .line 34 000092 59FB0FD7 A 186 ANDX 4055,#251 A 187 ; 35 mot=mot-16; A 188 .line 35 000096 C71F03 A 189 LD R1,3(R15) 000099 C70F04 A 190 LD R0,4(R15) 00009C 06E0F0 A 191 ADD R0,#240 00009F 16E1FF A 192 ADC R1,#255 0000A2 D71F03 A 193 LD 3(R15),R1 0000A5 D70F04 A 194 LD 4(R15),R0 A 195 ; 36 } 0000A8 A 196 _2_L_14: A 197 .line 36 A 198 ; 37 if(mot>= 25) A 199 .line 37 0000A8 C70F03 A 200 LD R0,3(R15) 0000AB C71F04 A 201 LD R1,4(R15) 0000AE A6E119 A 202 CP R1,#25 0000B1 1FA6E000 A 203 CPC R0,#-0 0000B5 1B 16 A 204 JR LT,_2_L_15 A 205 ; 38 { A 206 ; 39 PBOUT &=0xF7; A 207 .line 39 0000B7 59F70FD7 A 208 ANDX 4055,#247 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 5 PC Object I Line Source servo.src A 209 ; 40 mot=mot-24; A 210 .line 40 0000BB C71F03 A 211 LD R1,3(R15) 0000BE C70F04 A 212 LD R0,4(R15) 0000C1 06E0E8 A 213 ADD R0,#232 0000C4 16E1FF A 214 ADC R1,#255 0000C7 D71F03 A 215 LD 3(R15),R1 0000CA D70F04 A 216 LD 4(R15),R0 A 217 ; 41 } 0000CD A 218 _2_L_15: A 219 .line 41 A 220 ; 42 A 221 ; 43 //merge command and motor number A 222 ; 44 motcom=mot; A 223 .line 44 0000CD C70F04 A 224 LD R0,4(R15) 0000D0 D70FFF A 225 LD -1(R15),R0 A 226 ; 45 motcom <<=4; // transfer to A 227 .line 45 0000D3 C70FFF A 228 LD R0,-1(R15) 0000D6 56E00F A 229 AND R0,#15 0000D9 F0E0 A 230 SWAP R0 0000DB D70FFF A 231 LD -1(R15),R0 A 232 ; 46 motcom &= 0xF0; A 233 .line 46 0000DE C70FFF A 234 LD R0,-1(R15) 0000E1 56E0F0 A 235 AND R0,#240 0000E4 D70FFF A 236 LD -1(R15),R0 A 237 ; 47 motcom = motcom | com; // add comma A 238 .line 47 0000E7 C71F06 A 239 LD R1,6(R15) 0000EA C70FFF A 240 LD R0,-1(R15) 0000ED 4201 A 241 OR R0,R1 0000EF D70FFF A 242 LD -1(R15),R0 0000F2 8B 11 A 243 JR _2_L_19 A 244 ; 48 A 245 ; 49 for(i=1;i<9;++i) 0000F4 A 246 _2_L_20: A 247 .line 49 0000F4 C70FFD A 248 LD R0,-3(R15) 0000F7 C71FFE A 249 LD R1,-2(R15) 0000FA A6E109 A 250 CP R1,#9 0000FD 1FA6E000 A 251 CPC R0,#-0 000101 1B 0E A 252 JR LT,_2_L_22 000103 8B 52 A 253 JR _2_L_26 000105 A 254 _2_L_19: 000105 B0E0 A 255 CLR R0 000107 1C01 A 256 LD R1,#1 000109 D70FFD A 257 LD -3(R15),R0 00010C D71FFE A 258 LD -2(R15),R1 00010F 8B E3 A 259 JR _2_L_20 000111 A 260 _2_L_22: Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 6 PC Object I Line Source servo.src A 261 ; 50 { A 262 ; 51 if((param & 0x01)==1) A 263 .line 51 000111 C70F08 A 264 LD R0,8(R15) 000114 66E001 A 265 TCM R0,#1 000117 EB 06 A 266 JR NE,_2_L_17 A 267 ; 52 PDOUT |= 0x01; A 268 .line 52 000119 49010FDF A 269 ORX 4063,#1 A 270 ; 53 else A 271 .line 53 00011D 8B 04 A 272 JR _2_L_18 00011F A 273 _2_L_17: A 274 ; 54 PDOUT &= 0xFE; A 275 .line 54 00011F 59FE0FDF A 276 ANDX 4063,#254 000123 A 277 _2_L_18: A 278 ; 55 param >>=1; A 279 .line 55 000123 C70F07 A 280 LD R0,7(R15) 000126 C71F08 A 281 LD R1,8(R15) 000129 D0E0 A 282 SRA R0 00012B C0E1 A 283 RRC R1 00012D D70F07 A 284 LD 7(R15),R0 000130 D71F08 A 285 LD 8(R15),R1 A 286 ; 56 clockin(); A 287 .line 56 000133 D6 0000 A 288 CALL _clockin A 289 .line 49 000136 C70FFD A 290 LD R0,-3(R15) 000139 C71FFE A 291 LD R1,-2(R15) 00013C A0E0 A 292 INCW RR0 00013E D70FFD A 293 LD -3(R15),R0 000141 D71FFE A 294 LD -2(R15),R1 A 295 ; 57 A 296 ; 58 } A 297 .line 58 000144 8B AE A 298 JR _2_L_20 A 299 ; 59 A 300 ; 60 for(i=1;i<9;++i) 000146 A 301 _2_L_27: A 302 .line 60 000146 C70FFD A 303 LD R0,-3(R15) 000149 C71FFE A 304 LD R1,-2(R15) 00014C A6E109 A 305 CP R1,#9 00014F 1FA6E000 A 306 CPC R0,#-0 000153 1B 0E A 307 JR LT,_2_L_29 000155 8B 39 A 308 JR _2_L_31 000157 A 309 _2_L_26: 000157 B0E0 A 310 CLR R0 000159 1C01 A 311 LD R1,#1 00015B D70FFD A 312 LD -3(R15),R0 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 7 PC Object I Line Source servo.src 00015E D71FFE A 313 LD -2(R15),R1 000161 8B E3 A 314 JR _2_L_27 000163 A 315 _2_L_29: A 316 ; 61 { A 317 ; 62 if((motcom &0x01)==0x01) A 318 .line 62 000163 C70FFF A 319 LD R0,-1(R15) 000166 66E001 A 320 TCM R0,#1 000169 EB 06 A 321 JR NE,_2_L_24 A 322 ; 63 PDOUT |= 0x01; A 323 .line 63 00016B 49010FDF A 324 ORX 4063,#1 A 325 ; 64 else A 326 .line 64 00016F 8B 04 A 327 JR _2_L_25 000171 A 328 _2_L_24: A 329 ; 65 PDOUT &= 0xFE; A 330 .line 65 000171 59FE0FDF A 331 ANDX 4063,#254 000175 A 332 _2_L_25: A 333 ; 66 A 334 ; 67 motcom >>=1; A 335 .line 67 000175 C70FFF A 336 LD R0,-1(R15) 000178 D0E0 A 337 SRA R0 00017A D70FFF A 338 LD -1(R15),R0 A 339 ; 68 clockin(); A 340 .line 68 00017D D6 0000 A 341 CALL _clockin A 342 .line 60 000180 C70FFD A 343 LD R0,-3(R15) 000183 C71FFE A 344 LD R1,-2(R15) 000186 A0E0 A 345 INCW RR0 000188 D70FFD A 346 LD -3(R15),R0 00018B D71FFE A 347 LD -2(R15),R1 A 348 ; 69 } A 349 .line 69 00018E 8B B6 A 350 JR _2_L_27 000190 A 351 _2_L_31: A 352 ; 70 A 353 ; 71 PBOUT |= 0x0F; A 354 .line 71 000190 490F0FD7 A 355 ORX 4055,#15 A 356 ; 72 } A 357 .line 72 000194 94FFFF A 358 LDX 4095,R15 000197 50EF A 359 POP R15 000199 AF A 360 RET A 361 .endfunc "servo_out",72,"_servo_out" A 362 SEGMENT ROM_DATA A 363 A 364 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 8 PC Object I Line Source servo.src A 365 ;**************************** _move *********** A 366 ;Name Addr/Register S A 367 ;speed R15+7 A 368 ;pos R15+5 A 369 ;mot R15+3 A 370 A 371 A 372 ; Aggregate Stack Size: 0 (words) A 373 A 374 A 375 .FRAME _n_move,?_n_move,RDATA A 376 .FCALL _n_servo_out A 377 SEGMENT servo_TEXT 00019A A 378 _move: A 379 .define "_move" A 380 .value _move A 381 .class 2 A 382 .type 65 A 383 .type 0 A 384 .endef A 385 .begfunc "move",77,"_move" A 386 .define "mot" A 387 .class 9 A 388 .value 3 A 389 .type 3 A 390 .type 0 A 391 .endef A 392 .define "pos" A 393 .class 17 A 394 .reg -1 A 395 .type 3 A 396 .type 0 A 397 .endef A 398 .define "speed" A 399 .class 17 A 400 .reg -1 A 401 .type 3 A 402 .type 0 A 403 .endef 00019A 70EF A 404 PUSH R15 00019C 84FFFF A 405 LDX R15,4095 A 406 ; 73 A 407 ; 74 //// move to position //// A 408 ; 75 A 409 ; 76 void move(int mot,int pos,int speed) A 410 ; 77 { A 411 ; 78 speed=speed+128; //speed 129 A 412 .line 78 00019F C71F07 A 413 LD R1,7(R15) 0001A2 C70F08 A 414 LD R0,8(R15) 0001A5 06E080 A 415 ADD R0,#128 0001A8 16E100 A 416 ADC R1,#0 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 9 PC Object I Line Source servo.src 0001AB D71F07 A 417 LD 7(R15),R1 0001AE D70F08 A 418 LD 8(R15),R0 A 419 ; 79 A 420 ; 80 pos=(pos*100/90)+150; // convert A 421 .line 80 0001B1 B0E2 A 422 CLR R2 0001B3 3C64 A 423 LD R3,#100 0001B5 C70F05 A 424 LD R0,5(R15) 0001B8 C71F06 A 425 LD R1,6(R15) 0001BB D6 0000 A 426 CALL __b_swmul 0001BE 1FE8EE2E E0 A 427 LDWX RR0,RR2 0001C3 B0E2 A 428 CLR R2 0001C5 3C5A A 429 LD R3,#90 0001C7 D6 0000 A 430 CALL __b_swdiv 0001CA B0E3 A 431 CLR R3 0001CC 2C96 A 432 LD R2,#150 0001CE 0221 A 433 ADD R2,R1 0001D0 1230 A 434 ADC R3,R0 0001D2 D73F05 A 435 LD 5(R15),R3 0001D5 D72F06 A 436 LD 6(R15),R2 A 437 ; 81 A 438 ; 82 servo_out(mot,2,pos); A 439 .line 82 0001D8 C70F05 A 440 LD R0,5(R15) 0001DB C71F06 A 441 LD R1,6(R15) 0001DE 70E1 A 442 PUSH R1 0001E0 70E0 A 443 PUSH R0 0001E2 1F7002 A 444 PUSH #2 0001E5 1F7000 A 445 PUSH #0 0001E8 C70F03 A 446 LD R0,3(R15) 0001EB C71F04 A 447 LD R1,4(R15) 0001EE 70E1 A 448 PUSH R1 0001F0 70E0 A 449 PUSH R0 0001F2 D6 0024 A 450 CALL _servo_out 0001F5 09060FFF A 451 ADDX 4095,#6 A 452 ; 83 servo_out(mot,1,speed); A 453 .line 83 0001F9 C70F07 A 454 LD R0,7(R15) 0001FC C71F08 A 455 LD R1,8(R15) 0001FF 70E1 A 456 PUSH R1 000201 70E0 A 457 PUSH R0 000203 1F7001 A 458 PUSH #1 000206 1F7000 A 459 PUSH #0 000209 C70F03 A 460 LD R0,3(R15) 00020C C71F04 A 461 LD R1,4(R15) 00020F 70E1 A 462 PUSH R1 000211 70E0 A 463 PUSH R0 000213 D6 0024 A 464 CALL _servo_out 000216 09060FFF A 465 ADDX 4095,#6 A 466 ; 84 } A 467 .line 84 00021A 50EF A 468 POP R15 Zilog Z8 Encore! Macro Assembler Version 2.52 (10101401) 24-Mar-11 14:41:53 page: 10 PC Object I Line Source servo.src 00021C AF A 469 RET A 470 .endfunc "move",84,"_move" A 471 XREF __b_swdiv:ROM A 472 XREF __b_swmul:ROM A 473 XDEF _move A 474 XDEF _servo_out A 475 XDEF _clockin A 476 END Errors: 0 Warnings: 0 Lines Assembled: 477