home *** CD-ROM | disk | FTP | other *** search
/ ABBUC Magazin 60B / ABBUC_Magazin_60_2000_ABBUC_Side_B.atr / irgscan.m65 < prev    next >
Text File  |  2023-02-26  |  2KB  |  177 lines

  1. ; ---------------------------
  2. ; Infrared gateway code (IRG)
  3. ; Simple version to be used
  4. ; with IRGSCAN.BAS
  5. ; (c) 1993 David Deaven
  6. ; ---------------------------
  7.     include <atarios.h>
  8.  
  9. bufadd = 203 ; and 204
  10. bufsiz = 205
  11. bytbuf = 206
  12. sample = 207
  13.  
  14.     org $600
  15.  
  16.     PROC    ; BASIC "USR" entry
  17. USR    LDA #0
  18.     SEI        ; stop IRQ...
  19.     STA NMIEN    ; ...and NMI
  20.     STA DMACTL    ; prevent DMA
  21.     STA FR0+1    ; zero return
  22.  
  23.     LDA #%0011_1001    ; set up PIA
  24.     STA PACTL    ; bit A0 output
  25.     LDA #%0000_0001
  26.     STA PORTA
  27.     LDA #%0011_1101
  28.     STA PACTL
  29.  
  30.     PLA        ; get # args
  31.     TAY
  32.     CPY #3        ; need 4 args
  33.     BMI :badarg
  34.     
  35.     PLA
  36.     STA bufadd+1
  37.     PLA
  38.     STA bufadd
  39.     DEY
  40.  
  41.     PLA
  42.     PLA
  43.     STA bufsiz
  44.     DEY
  45.  
  46.     PLA
  47.     PLA
  48.     STA sample
  49.     DEY
  50.     BEQ Send ; 3 arg --> SEND
  51.  
  52.     PLA
  53.     STA totime
  54.     PLA
  55.     STA qtime
  56.     DEY
  57.     BEQ Receive ; 4 arg --> RECEIVE
  58.  
  59. :badarg    TYA        ; pop all args
  60.     BEQ Exit     ; and return
  61. :nexta    PLA
  62.     PLA
  63.     DEY
  64.     BNE :nexta
  65.     BEQ Exit
  66.     EPROC
  67.  
  68.     PROC
  69. ;
  70. ; Fill the buffer with data.
  71. ;
  72. Receive    LDY #0        ; detect gap
  73.     LDA #1        ; IR is LSB
  74. :wait    JSR Delay
  75.     BIT TRIG0
  76.     BEQ Receive
  77.     INY
  78.     CPY qtime
  79.     BNE :wait
  80.  
  81.     LDY totime
  82. :mark0    LDX qtime
  83. :mark    BIT TRIG0
  84.     BEQ :start
  85.     JSR Delay ; wait -- first pulse
  86.     DEX
  87.     BNE :mark
  88.     DEY
  89.     BNE :mark0
  90.     LDY #1
  91.     JMP Exit ; timeout
  92.  
  93. :start    LDY #0
  94.     LDX #8
  95. :loop    LDA TRIG0    ; 4
  96.     ROR A        ; 2
  97.     ROL bytbuf    ; 5
  98.     JSR Delay    ; 6 + delay
  99.     DEX        ; 2
  100.     BNE :no        ; 3
  101.     LDA bytbuf    ; 3
  102.     EOR #$FF    ; 2
  103.     STA (bufadd),Y    ; 6
  104.     LDX #8        ; 2
  105.     INY        ; 2
  106.     CPY bufsiz    ; 4
  107.     BNE :loop    ; 3
  108.     LDY #0
  109.     BEQ Exit
  110. :no    JSR adjust    ; 6+10 cycles
  111.     NOP        ; 2
  112.     JMP :loop    ; 3
  113.     EPROC
  114.  
  115. ;
  116. ; Exit -- restart DMA, interrupts
  117. ;
  118. Exit    STY FR0        ; return code
  119.     LDA SDMCTL    ; enable DMA
  120.     STA DMACTL
  121.     LDA #$40    ; enable NMI
  122.     STA NMIEN
  123.     CLI        ; enable IRQ
  124.     RTS
  125.  
  126. ;
  127. ; Send the buffer out
  128. ;
  129.     PROC
  130. Send    LDY #$FF
  131.     LDX #8
  132. :loop    INY        ; 2 cycles
  133.     LDA (bufadd),Y    ; 5
  134.     STA bytbuf    ; 3
  135. :sloop    ROL bytbuf    ; 6
  136.     LDA #0        ; 2
  137.     ROL A        ; 2
  138.     STA PORTA    ; 4
  139.     JSR Delay    ; 6 + delay
  140.     DEX        ; 2
  141.     BNE :no        ; 3
  142.     LDX #8        ; 2
  143.     CPY bufsiz    ; 4
  144.     BNE :loop    ; 3
  145.     LDY #0
  146.     BEQ Exit
  147. :no    JSR adjust    ; 6+10 cycles
  148.     JMP :sloop    ; 3
  149.     EPROC
  150.  
  151. ; waste 10 cycles
  152. adjust    NOP        ; 2 cycles
  153.     NOP        ; 2 cycles
  154.     RTS        ; 6
  155.     
  156.     PROC
  157. ;
  158. ; Wait a delay time, preserve A, X, Y
  159. ; time = (20+5*sample) clock periods
  160. Delay    PHA        ; 3 cycles
  161.     TXA        ; 2
  162.     LDX sample    ; 3
  163. :loop    DEX        ; 2
  164.     BNE :loop    ; 3
  165.     TAX        ; 2
  166.     PLA        ; 4
  167.     RTS        ; 6
  168.     EPROC
  169.  
  170. qtime    DB 0
  171. totime    DB 0
  172.  
  173.     assert * < $700
  174.     END
  175.  
  176.