Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 1 PC Object I Line Source A 1 ; Zilog Z8 Encore! ANSI C Compiler Release 3.60 A 2 ; -nolocalcse -optsize -fastcall -const=RAM -model=L A 3 ; -nooptlink -regvar -reduceopt -debug -norevaa -peephole 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 Size Type 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 .FRAME _f_clockin,?_f_clockin,EDATA A 20 SEGMENT servo_TEXT 000000 A 21 _clockin: A 22 .define "_clockin" A 23 .value _clockin A 24 .class 2 A 25 .type 65 A 26 .type 0 A 27 .endef A 28 .begfunc "clockin",7,"_clockin" 000000 D6 0000 A 29 CALL __b_frameset00 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 000003 59DF0FD7 A 39 ANDX 4055,#223 A 40 ; 9 while((PBIN &0x10)==0x10); // wait until ack received 000007 A 41 _1_L_0: A 42 .line 9 000007 69100FD6 A 43 TCMX 4054,#16 00000B 6B FA A 44 JR Z,_1_L_0 A 45 ; 10 PBOUT |= 0x20; A 46 .line 10 00000D 49200FD7 A 47 ORX 4055,#32 A 48 ; 11 while((PBIN &0x10)==0); //wait until ack is high 000011 A 49 _1_L_3: A 50 .line 11 000011 79100FD6 A 51 TMX 4054,#16 000015 6B FA A 52 JR Z,_1_L_3 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 2 PC Object I Line Source servo.src A 53 ; 12 } A 54 .line 12 000017 D6 0000 A 55 CALL __b_framereset 00001A AF A 56 RET A 57 .endfunc "clockin",12,"_clockin" A 58 SEGMENT ROM_DATA A 59 A 60 A 61 ;**************************** _servo_out *************************** A 62 ;Name Addr/Register Size Type A 63 ;i RR0 1 variable A 64 ;motcom R2 0 variable A 65 ;param R12 1 parameter A 66 ;com R10 1 parameter A 67 ;mot R8 1 parameter A 68 A 69 A 70 ; Aggregate Stack Size: -5 (words) A 71 A 72 A 73 .FRAME _n_servo_out,?_n_servo_out,RDATA A 74 .FCALL _n_clockin A 75 .FRAME _f_servo_out,?_f_servo_out,EDATA A 76 .FCALL _f_clockin A 77 SEGMENT servo_TEXT 00001B A 78 _servo_out: A 79 .define "_servo_out" A 80 .value _servo_out A 81 .class 2 A 82 .type 65 A 83 .type 0 A 84 .endef A 85 .begfunc "servo_out",15,"_servo_out" A 86 .define "mot" A 87 .class 17 A 88 .reg 9 A 89 .type 3 A 90 .type 0 A 91 .endef A 92 .define "com" A 93 .class 17 A 94 .reg 11 A 95 .type 3 A 96 .type 0 A 97 .endef A 98 .define "param" A 99 .class 17 A 100 .reg 13 A 101 .type 3 A 102 .type 0 A 103 .endef A 104 ; 13 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 3 PC Object I Line Source servo.src A 105 ; 14 void servo_out(int mot,int com,int param) A 106 ; 15 { A 107 .define "motcom" A 108 .class 4 A 109 .reg 3 A 110 .type 2 A 111 .type 0 A 112 .endef A 113 .define "i" A 114 .class 4 A 115 .reg 17 A 116 .type 3 A 117 .type 0 A 118 .endef 00001B 5C05 A 119 LD R5,#5 00001D D6 0000 A 120 CALL __b_frameset0 A 121 ; 16 A 122 ; 17 A 123 ; 18 char motcom; A 124 ; 19 int i; A 125 ; 20 A 126 ; 21 // select servo driver IC A 127 ; 22 A 128 ; 23 if(mot<9) PBOUT &= 0xFE; A 129 .line 23 000020 A6E909 A 130 CP R9,#9 000023 1FA6E800 A 131 CPC R8,#-0 000027 9B 04 A 132 JR GE,_2_L_9 000029 59FE0FD7 A 133 ANDX 4055,#254 00002D A 134 _2_L_9: A 135 ; 24 A 136 ; 25 if(mot>=9) A 137 .line 25 00002D A6E909 A 138 CP R9,#9 000030 1FA6E800 A 139 CPC R8,#-0 000034 1B 13 A 140 JR LT,_2_L_12 A 141 ; 26 if(mot<17) A 142 .line 26 000036 A6E911 A 143 CP R9,#17 000039 1FA6E800 A 144 CPC R8,#-0 00003D 9B 0A A 145 JR GE,_2_L_12 A 146 ; 27 { A 147 ; 28 PBOUT &=0xFD; A 148 .line 28 00003F 59FD0FD7 A 149 ANDX 4055,#253 A 150 ; 29 mot=mot-8; A 151 .line 29 000043 06E9F8 A 152 ADD R9,#248 000046 16E8FF A 153 ADC R8,#255 A 154 ; 30 } 000049 A 155 _2_L_12: A 156 .line 30 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 4 PC Object I Line Source servo.src A 157 ; 31 if(mot>=17) A 158 .line 31 000049 A6E911 A 159 CP R9,#17 00004C 1FA6E800 A 160 CPC R8,#-0 000050 1B 13 A 161 JR LT,_2_L_14 A 162 ; 32 if(mot<25) A 163 .line 32 000052 A6E919 A 164 CP R9,#25 000055 1FA6E800 A 165 CPC R8,#-0 000059 9B 0A A 166 JR GE,_2_L_14 A 167 ; 33 { A 168 ; 34 PBOUT &=0xFB; A 169 .line 34 00005B 59FB0FD7 A 170 ANDX 4055,#251 A 171 ; 35 mot=mot-16; A 172 .line 35 00005F 06E9F0 A 173 ADD R9,#240 000062 16E8FF A 174 ADC R8,#255 A 175 ; 36 } 000065 A 176 _2_L_14: A 177 .line 36 A 178 ; 37 if(mot>= 25) A 179 .line 37 000065 A6E919 A 180 CP R9,#25 000068 1FA6E800 A 181 CPC R8,#-0 00006C 1B 0A A 182 JR LT,_2_L_15 A 183 ; 38 { A 184 ; 39 PBOUT &=0xF7; A 185 .line 39 00006E 59F70FD7 A 186 ANDX 4055,#247 A 187 ; 40 mot=mot-24; A 188 .line 40 000072 06E9E8 A 189 ADD R9,#232 000075 16E8FF A 190 ADC R8,#255 A 191 ; 41 } 000078 A 192 _2_L_15: A 193 .line 41 A 194 ; 42 A 195 ; 43 //merge command and motor number A 196 ; 44 motcom=mot; A 197 .line 44 000078 E4E9E2 A 198 LD R2,R9 A 199 ; 45 motcom <<=4; // transfer to high nibble A 200 .line 45 00007B 56E20F A 201 AND R2,#15 00007E F0E2 A 202 SWAP R2 A 203 ; 46 motcom &= 0xF0; A 204 .line 46 000080 56E2F0 A 205 AND R2,#240 A 206 ; 47 motcom = motcom | com; // add command A 207 .line 47 000083 422B A 208 OR R2,R11 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 5 PC Object I Line Source servo.src 000085 8B 0B A 209 JR _2_L_19 A 210 ; 48 A 211 ; 49 for(i=1;i<9;++i) 000087 A 212 _2_L_20: A 213 .line 49 000087 A6E109 A 214 CP R1,#9 00008A 1FA6E000 A 215 CPC R0,#-0 00008E 1B 08 A 216 JR LT,_2_L_22 000090 8B 49 A 217 JR _2_L_26 000092 A 218 _2_L_19: 000092 B0E0 A 219 CLR R0 000094 1C01 A 220 LD R1,#1 000096 8B EF A 221 JR _2_L_20 000098 A 222 _2_L_22: A 223 ; 50 { A 224 ; 51 if((param & 0x01)==1) A 225 .line 51 000098 66ED01 A 226 TCM R13,#1 00009B EB 06 A 227 JR NE,_2_L_17 A 228 ; 52 PDOUT |= 0x01; A 229 .line 52 00009D 49010FDF A 230 ORX 4063,#1 A 231 ; 53 else A 232 .line 53 0000A1 8B 04 A 233 JR _2_L_18 0000A3 A 234 _2_L_17: A 235 ; 54 PDOUT &= 0xFE; A 236 .line 54 0000A3 59FE0FDF A 237 ANDX 4063,#254 0000A7 A 238 _2_L_18: A 239 ; 55 param >>=1; A 240 .line 55 0000A7 D0EC A 241 SRA R12 0000A9 C0ED A 242 RRC R13 A 243 ; 56 clockin(); A 244 .line 56 0000AB 89EDFF A 245 LDX -1(RR14),R13 0000AE 89ECFE A 246 LDX -2(RR14),R12 0000B1 89E0FD A 247 LDX -3(RR14),R0 0000B4 89E1FC A 248 LDX -4(RR14),R1 0000B7 89E2FB A 249 LDX -5(RR14),R2 0000BA D6 0000 A 250 CALL _clockin 0000BD 882EFB A 251 LDX R2,-5(RR14) 0000C0 881EFC A 252 LDX R1,-4(RR14) 0000C3 880EFD A 253 LDX R0,-3(RR14) 0000C6 88CEFE A 254 LDX R12,-2(RR14) 0000C9 88DEFF A 255 LDX R13,-1(RR14) A 256 ; 57 A 257 ; 58 } A 258 .line 58 0000CC A0E0 A 259 INCW RR0 0000CE 8B B7 A 260 JR _2_L_20 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 6 PC Object I Line Source servo.src A 261 ; 59 A 262 ; 60 for(i=1;i<9;++i) 0000D0 A 263 _2_L_27: A 264 .line 60 0000D0 A6E109 A 265 CP R1,#9 0000D3 1FA6E000 A 266 CPC R0,#-0 0000D7 1B 08 A 267 JR LT,_2_L_29 0000D9 8B 30 A 268 JR _2_L_31 0000DB A 269 _2_L_26: 0000DB B0E0 A 270 CLR R0 0000DD 1C01 A 271 LD R1,#1 0000DF 8B EF A 272 JR _2_L_27 0000E1 A 273 _2_L_29: A 274 ; 61 { A 275 ; 62 if((motcom &0x01)==0x01) A 276 .line 62 0000E1 66E201 A 277 TCM R2,#1 0000E4 EB 06 A 278 JR NE,_2_L_24 A 279 ; 63 PDOUT |= 0x01; A 280 .line 63 0000E6 49010FDF A 281 ORX 4063,#1 A 282 ; 64 else A 283 .line 64 0000EA 8B 04 A 284 JR _2_L_25 0000EC A 285 _2_L_24: A 286 ; 65 PDOUT &= 0xFE; A 287 .line 65 0000EC 59FE0FDF A 288 ANDX 4063,#254 0000F0 A 289 _2_L_25: A 290 ; 66 A 291 ; 67 motcom >>=1; A 292 .line 67 0000F0 D0E2 A 293 SRA R2 A 294 ; 68 clockin(); A 295 .line 68 0000F2 89E0FD A 296 LDX -3(RR14),R0 0000F5 89E1FC A 297 LDX -4(RR14),R1 0000F8 89E2FB A 298 LDX -5(RR14),R2 0000FB D6 0000 A 299 CALL _clockin 0000FE 882EFB A 300 LDX R2,-5(RR14) 000101 881EFC A 301 LDX R1,-4(RR14) 000104 880EFD A 302 LDX R0,-3(RR14) A 303 ; 69 } A 304 .line 69 000107 A0E0 A 305 INCW RR0 000109 8B C5 A 306 JR _2_L_27 00010B A 307 _2_L_31: A 308 ; 70 A 309 ; 71 PBOUT |= 0x0F; A 310 .line 71 00010B 490F0FD7 A 311 ORX 4055,#15 A 312 ; 72 } Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 7 PC Object I Line Source servo.src A 313 .line 72 00010F D6 0000 A 314 CALL __b_framereset 000112 AF A 315 RET A 316 .endfunc "servo_out",72,"_servo_out" A 317 SEGMENT ROM_DATA A 318 A 319 A 320 ;**************************** _move *************************** A 321 ;Name Addr/Register Size Type A 322 ;speed R15-6 1 parameter A 323 ;pos R15-4 1 parameter A 324 ;mot R15-2 1 parameter A 325 A 326 A 327 ; Aggregate Stack Size: -6 (words) A 328 A 329 A 330 .FRAME _n_move,?_n_move,RDATA A 331 .FCALL _n_servo_out A 332 .FRAME _f_move,?_f_move,EDATA A 333 .FCALL _f_servo_out A 334 SEGMENT servo_TEXT 000113 A 335 _move: A 336 .define "_move" A 337 .value _move A 338 .class 2 A 339 .type 65 A 340 .type 0 A 341 .endef A 342 .begfunc "move",77,"_move" 000113 5C06 A 343 LD R5,#6 000115 D6 0000 A 344 CALL __b_frameset0 000118 89E8FE A 345 LDX -2(RR14),R8 00011B 89E9FF A 346 LDX -1(RR14),R9 A 347 .define "mot" A 348 .class 9 A 349 .value -2 A 350 .type 3 A 351 .type 0 A 352 .endef 00011E 89EAFC A 353 LDX -4(RR14),R10 000121 89EBFD A 354 LDX -3(RR14),R11 A 355 .define "pos" A 356 .class 9 A 357 .value -4 A 358 .type 3 A 359 .type 0 A 360 .endef 000124 89ECFA A 361 LDX -6(RR14),R12 000127 89EDFB A 362 LDX -5(RR14),R13 A 363 .define "speed" A 364 .class 9 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 8 PC Object I Line Source servo.src A 365 .value -6 A 366 .type 3 A 367 .type 0 A 368 .endef A 369 ; 73 A 370 ; 74 //// move to position //// A 371 ; 75 A 372 ; 76 void move(int mot,int pos,int speed) A 373 ; 77 { A 374 ; 78 speed=speed+128; //speed 129 minimum A 375 .line 78 00012A 881EFA A 376 LDX R1,-6(RR14) 00012D 880EFB A 377 LDX R0,-5(RR14) 000130 06E080 A 378 ADD R0,#128 000133 16E100 A 379 ADC R1,#0 000136 89E1FA A 380 LDX -6(RR14),R1 000139 89E0FB A 381 LDX -5(RR14),R0 A 382 ; 79 A 383 ; 80 pos=(pos*100/90)+150; // convert to degrees A 384 .line 80 00013C B0E2 A 385 CLR R2 00013E 3C64 A 386 LD R3,#100 000140 880EFC A 387 LDX R0,-4(RR14) 000143 881EFD A 388 LDX R1,-3(RR14) 000146 D6 0000 A 389 CALL __b_swmul 000149 1FE8EE2E E0 A 390 LDWX RR0,RR2 00014E B0E2 A 391 CLR R2 000150 3C5A A 392 LD R3,#90 000152 D6 0000 A 393 CALL __b_swdiv 000155 B0E3 A 394 CLR R3 000157 2C96 A 395 LD R2,#150 000159 0221 A 396 ADD R2,R1 00015B 1230 A 397 ADC R3,R0 00015D 89E3FC A 398 LDX -4(RR14),R3 000160 89E2FD A 399 LDX -3(RR14),R2 A 400 ; 81 A 401 ; 82 servo_out(mot,2,pos); A 402 .line 82 000163 88CEFC A 403 LDX R12,-4(RR14) 000166 88DEFD A 404 LDX R13,-3(RR14) 000169 B0EA A 405 CLR R10 00016B BC02 A 406 LD R11,#2 00016D 888EFE A 407 LDX R8,-2(RR14) 000170 889EFF A 408 LDX R9,-1(RR14) 000173 D6 001B A 409 CALL _servo_out A 410 ; 83 servo_out(mot,1,speed); A 411 .line 83 000176 88CEFA A 412 LDX R12,-6(RR14) 000179 88DEFB A 413 LDX R13,-5(RR14) 00017C B0EA A 414 CLR R10 00017E BC01 A 415 LD R11,#1 000180 888EFE A 416 LDX R8,-2(RR14) Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 9 PC Object I Line Source servo.src 000183 889EFF A 417 LDX R9,-1(RR14) 000186 D6 001B A 418 CALL _servo_out A 419 ; 84 } A 420 .line 84 000189 D6 0000 A 421 CALL __b_framereset 00018C AF A 422 RET A 423 .endfunc "move",84,"_move" A 424 XREF __b_swdiv:ROM A 425 XREF __b_swmul:ROM A 426 XREF __b_framereset:ROM A 427 XREF __b_frameset0:ROM A 428 XREF __b_frameset00:ROM A 429 XDEF _move A 430 XDEF _servo_out A 431 XDEF _clockin A 432 END Errors: 0 Warnings: 0 Lines Assembled: 433