erikmb@cd.chalmers.se (Erik Bryntse) (12/03/90)
Hello! Since there are many people that are interested in having their 48's as learning remote controls, I am posting a little test program I wrote some weeks ago. It reads the IR input diode, and times each period (at the low-high transition). The result is returned as a string. This is only intended to help if someone out there is struggling to make a remote control program for the 48, so I only include the source code. It is not very well commented (remember it's a test program...). Hope this helps someone! Erik Bryntse erikmb@cd.chalmers.se ; ---- source code begins here ---- SaveR:=#679B LoadR:=#67D2 DispOff:=#1BBD DispOn:=#1B8F ; Test program that reads the IR-diode ; Written by Erik Bryntse ; Returns 1: "string" that contains 3 nibbles per period time ; Parts taken from INPRT by William C Wickes call.a SaveR ; save RPL regs call.a #613E clrb 15,ST call.a #6806 ; space bw RSTK & TOS -> C move.a c,a move.p5 #10F,c subn.a a,c ; C := space - #200 brcs OutOfMem ; If not enough exit move.w c,r1 ; Save away in R1 call.a #1115 ; toggles b 0 of #10E intoff call.a DispOff move.w r1,c ; Alloc all mem - #200 nibs srb.a c ; in bytes! call.a #5B79 ; alloc C bytes string -> D0 move.w r1,c swap.a a,d0 move.a a,d0 add.a c,a move.w a,r1 ; R1 highest allowed addr clr.w c move.w c,r4 ; R4 := 0 move.1 4,p move.p1 #6,c ; C := #60000 move.1 0,p brcc Begin ; If alloc OK start prog OutOfMem: call.a #10E5 jump.a #65AA ; load regs, Out Of Mem! ; Not out of memory error Begin: call.3 MainProc call.a #16671 move.5 #10B,d1 move.b @d1,c clrb #5,c move.b c,@d1 ; clrb 5 of #10B call.a DispOn call.a #10E5 move.w r0,a call.a #54266 move.a @d0,a add.a 5,d0 jump @a ; bye bye ;======================================================== MainProc: call.3 Wait1st ; Wait until IR toggle or timeout retcs ; Timeout: return OneMor: move.x a,@d0 ; Store period time in string (3 nibs) add.a 3,d0 swap.a a,d0 move.a a,d0 move.a r1,c retle.a c,a clr.a a call.3 WaitL ; Time one more pulse brcc OneMor retclrc ; Timeout ; Wait until first IR pulse is received Wait1st: clr.w a move.p5 #20000,c ; Timeout counter move.5 #0011A,d1 NoIR: dec.a c brcs TimeOut move.s @d1,c add.s c,c brcc NoIR ; Wait until first IR pulse recvd ; Wait until IR goes low WaitL: inc.x a retcs move.s @d1,c add.s c,c brcs WaitL ; Wait until bit 3 of 11A low ; Wait until IR goes high again WaitH: inc.x a retcs move.s @d1,c add.s c,c brcc WaitH ; Wait until bit 3 of 11A high retclrc TimeOut: pop.a c retsetc ; ---- souce code ends here ----