home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / satshit2.lha / ADULT.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-01-09  |  16.2 KB  |  1,086 lines

  1.     list    P=16C84,R=DEC
  2.  
  3. ;version jan 5,1995    additional comments added
  4.  
  5. INDIR    EQU    0x00
  6. RTCC    EQU    0x01    ; in bank 0
  7. OPTREG    EQU    0x01    ; in bank 1
  8. PC    EQU    0x02
  9. STATUS    EQU    0x03    ; F3 Reg is STATUS Reg.
  10. RP0    EQU    5
  11. ZBIT    EQU    2
  12. CARRY    EQU    0
  13.  
  14. FSR    EQU    0x04
  15. Port_A    EQU    0x05    ; in bank 0
  16. TRISA    EQU    0x05    ; in bank 1
  17. Port_B    EQU    0x06    ; in bank 0
  18. TRISB    EQU    0x06    ; in bank 1
  19. EEDATA    EQU    0x08    ; in bank 0
  20. EECON1    EQU    0x08    ; in bank 1
  21. EEADR    EQU    0x09    ; in bank 0
  22. EECON2    EQU    0x09    ; in bank 1
  23. PCLATH    EQU    0x0A
  24. INTCON    EQU    0x0B
  25.  
  26. REG0C    EQU    0x0C
  27. REG0D    EQU    0x0D
  28. REG0E    EQU    0x0E    ;byte 1 in 74 mess
  29. REG0F    EQU    0x0F    ;byte 2 in 74 mess
  30.  
  31. REG10    EQU    0x10    ;next 10 bytes used as buffer
  32.  
  33. REG12    EQU    0x12
  34. REG13    EQU    0x13
  35. REG14    EQU    0x14
  36.  
  37. REG1A    EQU    0x1A    ;8 bytes key buffer
  38. REG1B    EQU    0x1B
  39. REG1C    EQU    0x1C
  40. REG1D    EQU    0x1D
  41. REG1E    EQU    0x1E
  42. REG1F    EQU    0x1F
  43. REG20    EQU    0x20
  44. REG21    EQU    0x21
  45.  
  46. REG22    EQU    0x22
  47. REG23    EQU    0x23
  48. REG24    EQU    0x24
  49. REG25    EQU    0x25    ;length to xmit or rec
  50. REG26    EQU    0x26
  51. REG27    EQU    0x27
  52. REG28    EQU    0x28
  53. REG29    EQU    0x29
  54.  
  55.     ORG    0
  56. START    GOTO    BEGIN
  57.  
  58. S1      RETLW    0x01
  59. S2      RETLW    0xFF
  60. S3    RETLW    0xFF
  61.     RETURN
  62.  
  63. S5    CLRF    PCLATH
  64.     ADDWF    PC
  65.     GOTO    F70    ;function 70
  66.     GOTO    F72    ;72
  67.     GOTO    F74    ;74
  68.     GOTO    F76    ;76
  69.     GOTO    F78    ;78
  70.     GOTO    F7A    ;7A
  71.     GOTO    F7C    ;7C
  72.     GOTO    F7E    ;7E
  73.     GOTO    F80    ;80
  74.     GOTO    F7E    ;82
  75.  
  76. S11    CLRF    PCLATH
  77.     ADDWF    PC
  78.     RETLW    0x06    ;function 70
  79.     RETLW    0x10    ;72
  80.     RETLW    0x20    ;74
  81.     RETLW    0x01    ;76
  82.     RETLW    0x08    ;78
  83.     RETLW    0x19    ;7A
  84.     RETLW    0x10    ;7C
  85.     RETLW    0x40    ;7E
  86.     RETLW    0x01    ;80
  87.     RETLW    0x40    ;82
  88.  
  89. RTR    CLRF    PCLATH
  90.     ADDWF    PC
  91.     RETLW    0x3F
  92.     RETLW    0x67
  93.     RETLW    0x05
  94.     RETLW    0x05
  95.     RETLW    'M'
  96.     RETLW    'A'
  97.     RETLW    'S'
  98.     RETLW    'T'
  99.     RETLW    'E'
  100.     RETLW    'M'
  101.     RETLW    'Y'
  102.  
  103. S2A    CLRF    PCLATH
  104.     ADDWF    PC
  105. MESS0    RETLW    'M'
  106.     RETLW    'A'
  107.     RETLW    'S'
  108.     RETLW    'T'
  109.     RETLW    'E'
  110.     RETLW    'R'
  111.  
  112. MESS2    RETLW    0xC0
  113.     RETLW    0x53
  114.     RETLW    0xF5
  115.     RETLW    0x86
  116.     RETLW    0x7D
  117.     RETLW    0x83
  118.     RETLW    0x53
  119.     RETLW    0x6B
  120.     RETLW    0xBC
  121.     RETLW    0x6E
  122.     RETLW    0x9E
  123.     RETLW    0x8C
  124.     RETLW    0x53
  125.     RETLW    0xEF
  126.     RETLW    0xE0
  127.     RETLW    0xC2
  128.     RETLW    0xE9
  129.     RETLW    0xDD
  130.     RETLW    0xCE
  131.     RETLW    0xC8
  132.     RETLW    0x74
  133.     RETLW    0xD7
  134.     RETLW    0xB6
  135.     RETLW    0xDA
  136.     RETLW    0xDA
  137.  
  138.     ORG    0x050
  139. MESS3    RETLW    0xF8
  140.     RETLW    'T'
  141.     RETLW    'H'
  142.     RETLW    'I'
  143.     RETLW    'S'
  144.     RETLW    ' '
  145.     RETLW    'S'
  146.     RETLW    'H'
  147.     RETLW    'O'
  148.     RETLW    'W'
  149.     RETLW    ' '
  150.     RETLW    'I'
  151.     RETLW    'S'
  152.     RETLW    ' '
  153.     RETLW    ' '
  154.     RETLW    'C'
  155.     RETLW    'O'
  156.     RETLW    'M'
  157.     RETLW    'P'
  158.     RETLW    'L'
  159.     RETLW    'E'
  160.     RETLW    'T'
  161.     RETLW    'E'
  162.     RETLW    ' '
  163.     RETLW    ' '
  164.  
  165. MESS4    RETLW    0xD8
  166.     RETLW    'T'
  167.     RETLW    'H'
  168.     RETLW    'I'
  169.     RETLW    'S'
  170.     RETLW    ' '
  171.     RETLW    'C'
  172.     RETLW    'H'
  173.     RETLW    'A'
  174.     RETLW    'N'
  175.     RETLW    'N'
  176.     RETLW    'E'
  177.     RETLW    'L'
  178.     RETLW    ' '
  179.     RETLW    'I'
  180.     RETLW    'S'
  181.     RETLW    ' '
  182.     RETLW    'B'
  183.     RETLW    'L'
  184.     RETLW    'O'
  185.     RETLW    'C'
  186.     RETLW    'K'
  187.     RETLW    'E'
  188.     RETLW    'D'
  189.     RETLW    ' '
  190.  
  191. MESS5    RETLW    0xD8
  192.     RETLW    ' '
  193.     RETLW    ' '
  194.     RETLW    ' '
  195.     RETLW    ' '
  196.     RETLW    'N'
  197.     RETLW    'O'
  198.     RETLW    'T'
  199.     RETLW    ' '
  200.     RETLW    ' '
  201.     RETLW    ' '
  202.     RETLW    ' '
  203.     RETLW    ' '
  204.     RETLW    ' '
  205.     RETLW    'A'
  206.     RETLW    'U'
  207.     RETLW    'T'
  208.     RETLW    'H'
  209.     RETLW    'O'
  210.     RETLW    'R'
  211.     RETLW    'I'
  212.     RETLW    'Z'
  213.     RETLW    'E'
  214.     RETLW    'D'
  215.     RETLW    ' '
  216.  
  217. MESS6    RETLW    0xCC
  218.     RETLW    ' '
  219.     RETLW    ' '
  220.     RETLW    'S'
  221.     RETLW    'C'
  222.     RETLW    'A'
  223.     RETLW    'N'
  224.     RETLW    'N'
  225.     RETLW    'I'
  226.     RETLW    'N'
  227.     RETLW    'G'
  228.     RETLW    ' '
  229.     RETLW    ' '
  230.     RETLW    ' '
  231.     RETLW    ' '
  232.     RETLW    ' '
  233.     RETLW    ' '
  234.     RETLW    'W'
  235.     RETLW    'A'
  236.     RETLW    'I'
  237.     RETLW    'T'
  238.     RETLW    ' '
  239.     RETLW    ' '
  240.     RETLW    ' '
  241.     RETLW    ' '
  242.  
  243. MESS7    RETLW    0xD8
  244.     RETLW    ' '
  245.     RETLW    'D'
  246.     RETLW    'E'
  247.     RETLW    'C'
  248.     RETLW    'R'
  249.     RETLW    'Y'
  250.     RETLW    'P'
  251.     RETLW    'T'
  252.     RETLW    'I'
  253.     RETLW    'O'
  254.     RETLW    'N'
  255.     RETLW    ' '
  256.     RETLW    'N'
  257.     RETLW    'O'
  258.     RETLW    'T'
  259.     RETLW    ' '
  260.     RETLW    'P'
  261.     RETLW    'O'
  262.     RETLW    'S'
  263.     RETLW    'S'
  264.     RETLW    'I'
  265.     RETLW    'B'
  266.     RETLW    'L'
  267.     RETLW    'E'
  268.  
  269. SCD    CLRF    PCLATH
  270.     ADDWF    PC
  271.     RETLW    0x35
  272.     RETLW    0x1C
  273.     RETLW    0x62
  274.     RETLW    0x0D
  275.     RETLW    0x81
  276.     RETLW    0x76
  277.     RETLW    0x5A
  278.     RETLW    0xE2
  279.     RETLW    0xA8
  280.     RETLW    0x28
  281.     RETLW    0x05
  282.     RETLW    0xE6
  283.     RETLW    0x61
  284.     RETLW    0x9C
  285.     RETLW    0x09
  286.     RETLW    0xF7
  287.     RETLW    0xBD
  288.     RETLW    0xA8
  289.     RETLW    0xF6
  290.     RETLW    0x54
  291.     RETLW    0x28
  292.     RETLW    0xD9
  293.     RETLW    0x7A
  294.     RETLW    0xCC
  295.     RETLW    0x1F
  296.     RETLW    0x93
  297.     RETLW    0x0F
  298.     RETLW    0x36
  299.     RETLW    0xBF
  300.     RETLW    0xE8
  301.     RETLW    0x00
  302.     RETLW    0x92
  303.     RETLW    0xD2
  304.     RETLW    0x7B
  305.     RETLW    0x87
  306.     RETLW    0x0E
  307.     RETLW    0xAC
  308.     RETLW    0xE4
  309.     RETLW    0xA8
  310.     RETLW    0x96
  311.     RETLW    0xB6
  312.  
  313. BEGIN    CLRF    STATUS
  314.     CLRF    FSR
  315.     BSF    STATUS,RP0    ;select bank 1
  316.     MOVLW    0xFF
  317.     MOVWF    Port_A    ;RA is input
  318.     MOVWF    Port_B    ;RB is input
  319.     MOVLW    0x5F    ;OPTION REG=5F
  320.     MOVWF    OPTREG
  321.     BCF    Port_B,4    ;RB4 output
  322.     BCF    STATUS,RP0    ;select bank 0
  323.     CLRF    Port_A
  324.     CLRF    Port_B
  325.     CLRF    PCLATH
  326.     CLRF    INTCON
  327.     CLRF    REG23
  328.     CLRF    REG22
  329.     BSF    REG23,0
  330.     MOVLW    11    ;RTR 11 long
  331.     MOVWF    REG25
  332. L10B    MOVF    REG25,W
  333.     SUBLW    11
  334.     CALL    RTR    ;get next char from RTR
  335.     CALL    XMIT    ;send char
  336.     DECFSZ    REG25
  337.     GOTO    L10B    ;loop if not all char send
  338.  
  339. L111    CALL    RCHAR    ;read 1st char
  340.     ADDLW    0xAD
  341.     BTFSS    STATUS,ZBIT
  342.     GOTO    L111    ;loop if not 53
  343.     CALL    RCHAR    ;get function code
  344.     MOVWF    REG26    ;save possible function code
  345.     CALL    RCHAR    ;get 1st addr byte
  346.     BTFSS    STATUS,ZBIT
  347.     GOTO    L111    ;restart if not 00
  348.     CALL    RCHAR    ;get 2nd addr byte
  349.     BTFSS    STATUS,ZBIT
  350.     GOTO    L111    ;restart if not 00
  351.     CALL    RCHAR    ;get length
  352.     MOVWF    REG25
  353.     BCF    STATUS,CARRY
  354.     RRF    REG26,W
  355.     BTFSC    STATUS,CARRY    ;if function code bit0=1
  356.     GOTO    O9001    ;respond with 9001
  357.  
  358.     ADDLW    0xC8
  359.     BTFSS    STATUS,CARRY
  360.     GOTO    O9001
  361.  
  362.     ADDLW    0xF6
  363.     BTFSC    STATUS,CARRY
  364.     GOTO    O9001
  365.  
  366.     ADDLW    0x0A
  367.     MOVWF    FSR
  368.     CALL    S11    ;check length byte
  369.     XORWF    REG25,W
  370.     BTFSS    STATUS,ZBIT
  371.     GOTO    O9001    ;exit if not ok
  372.  
  373.     MOVF    REG26,W
  374.     CALL    XMIT    ;respond with function code
  375.     MOVF    FSR,W
  376.     CALL    S5
  377.     MOVLW    0x90    ;respond with ok
  378.     CALL    XMIT
  379.     MOVLW    0x00
  380.     CALL    XMIT
  381.     GOTO    L111
  382.  
  383. O9001    MOVLW    0x90    ;error response
  384.     CALL    XMIT
  385.     MOVLW    0x01
  386.     CALL    XMIT
  387.     GOTO    L111
  388.  
  389. ;response to function 74 (read key message)
  390. F74    CALL    CLRBUF    ;clear key buffer
  391.     BCF    REG23,6
  392.     BCF    REG23,1
  393.     CALL    RCHAR    ;get 1st char
  394.     MOVWF    REG0E
  395.     CALL    RCHAR    ;get 2nd char
  396.     MOVWF    REG0F
  397.     
  398.     CALL    S1D8    ;process bytes 1-2
  399.     MOVWF    REG27
  400.     MOVLW    REG1A
  401.     MOVWF    FSR
  402.     MOVF    REG0E,W
  403.     CALL    S203
  404.     MOVF    REG0F,W
  405.     CALL    S203
  406.  
  407.     MOVLW    REG10    ;process bytes 3-12
  408.     MOVWF    REG25
  409. L14E    MOVF    FSR,W
  410.     MOVWF    REG26
  411.     MOVF    REG25,W
  412.     MOVWF    FSR
  413.     CALL    RCHAR
  414.     MOVWF    INDIR
  415.     MOVWF    REG0C
  416.     MOVF    REG26,W
  417.     MOVWF    FSR
  418.     MOVF    REG0C,W
  419.     CALL    S203
  420.     INCF    REG25
  421.     MOVLW    REG1A    ;10 bytes processed?
  422.     XORWF    REG25,W
  423.     BTFSS    STATUS,ZBIT
  424.     GOTO    L14E    ;loop if not
  425.  
  426.     MOVLW    15    ;process bytes 13-27
  427.     MOVWF    REG25
  428.     BTFSC    REG23,4
  429.     INCF    REG25
  430. L162    CALL    RCHAR
  431.     CALL    S203
  432.     DECFSZ    REG25
  433.     GOTO    L162
  434.  
  435.     MOVLW    4    ;process bytes 28-31
  436.     MOVWF    REG25
  437.     BTFSC    REG23,4
  438.     DECF    REG25
  439.     CLRF    REG26
  440. L16B    BTFSC    REG23,4
  441.     GOTO    L171
  442.     MOVF    REG26,W
  443.     CALL    S203
  444.     MOVF    REG26,W
  445.     CALL    S203
  446. L171    CALL    RCHAR
  447.     MOVWF    REG26
  448.     XORWF    INDIR,W
  449.     BTFSS    STATUS,ZBIT
  450.     BSF    REG23,6
  451.     BTFSS    REG23,4
  452.     GOTO    L17D
  453.     MOVF    REG26,W
  454.     CALL    S203
  455.     MOVF    REG26,W
  456.     CALL    S203
  457.     GOTO    L182
  458. L17D    INCF    FSR
  459.     MOVLW    0x1A
  460.     SUBWF    FSR
  461.     BCF    FSR,3
  462.     ADDWF    FSR
  463. L182    DECFSZ    REG25
  464.     GOTO    L16B
  465.  
  466.     MOVLW    0x15    ;process byte 32
  467.     BTFSS    REG23,4
  468.     MOVLW    0x40
  469.     MOVWF    REG25
  470.     CALL    RCHAR
  471.     MOVWF    REG26
  472. L18A    MOVF    REG26,W
  473.     CALL    S203
  474.     DECFSZ    REG25
  475.     GOTO    L18A
  476.     INCF    REG22
  477.     BTFSC    STATUS,ZBIT
  478.     BSF    REG22,7
  479.     BTFSS    REG23,6
  480.     CLRF    REG22
  481.     BTFSS    REG23,4
  482.     GOTO    L1A9
  483.     BTFSC    REG23,6
  484.     GOTO    L1A0
  485.     BSF    REG23,5
  486.     CLRW
  487.     CALL    REPR    ;read eeprom
  488.     XORWF    REG27,W
  489.     BTFSC    STATUS,ZBIT
  490.     RETLW    0x00
  491.  
  492.     MOVF    REG27,W
  493.     CALL    WEPR    ;write eeprom
  494.     RETLW    0x00
  495.  
  496. L1A0    BTFSC    REG23,5
  497.     BCF    REG24,0
  498.     INCF    REG27
  499.     MOVLW    0x19
  500.     SUBWF    REG27,W
  501.     BTFSC    STATUS,CARRY
  502.     CLRF    REG27
  503.     CALL    S237    ;key buf=FF00...00
  504.     RETLW    0x00
  505.  
  506. L1A9    CALL    S1
  507.     BTFSC    STATUS,ZBIT
  508.     GOTO    L1B6
  509.     MOVWF    REG26
  510.     BTFSS    REG22,1
  511.     GOTO    L1B6
  512.     MOVLW    8
  513.     XORWF    REG23
  514.     BCF    REG23,2
  515.     BTFSS    REG26,1
  516.     GOTO    L1B6
  517.     BTFSC    REG23,3
  518.     BSF    REG23,2
  519. L1B6    BTFSC    REG23,6
  520.     GOTO    L231    ;key buf=0100...00
  521.  
  522.     BTFSC    REG23,2
  523.     GOTO    L235    ;key buf=5F5F...5F
  524.  
  525.     BTFSC    REG0E,5
  526.     BTFSC    REG10,7
  527.     RETLW    0x00
  528.  
  529.     BTFSC    REG14,5
  530.     GOTO    CLRBUF    ;key buf=0000...00
  531.  
  532.     MOVF    REG12,W
  533.     IORWF    REG13,W
  534.     BTFSC    REG14,4
  535.     IORLW    1
  536.     BTFSC    STATUS,ZBIT
  537.     GOTO    L231    ;key buf=0100...00
  538.  
  539.     BTFSC    REG23,3
  540.     RETLW    0x00
  541.  
  542.     CALL    S3    ;W=FF
  543.     BTFSC    REG14,3
  544.     CALL    S2    ;W=FF
  545.     MOVWF    REG0C
  546.     BTFSC    REG14,2
  547.     SWAPF    REG0C
  548.     BTFSC    REG14,1
  549.     RRF    REG0C
  550.     BTFSC    REG14,1
  551.     RRF    REG0C
  552.     BTFSC    REG14,0
  553.     RRF    REG0C
  554.     BTFSS    REG0C,0
  555.     BSF    REG23,1
  556.     BTFSS    REG0C,0
  557.     GOTO    L235    ;key buf=5F5F...5F
  558.     RETLW    0x00
  559.  
  560. S1D8    CALL    S1    ;W=01
  561.     MOVWF    REG26
  562.     MOVF    REG0F,W    ;W=2nd byte
  563.     ADDLW    0xD5
  564.     BTFSC    STATUS,CARRY
  565.     GOTO    L1EE    ;if >2A
  566.     BTFSS    REG26,0
  567.     GOTO    L1F1
  568.     BSF    REG23,4
  569.     BTFSC    REG24,0
  570.     GOTO    L1EC
  571.     BCF    REG23,5
  572.     BSF    REG24,0
  573.     CLRW
  574.     CALL    REPR    ;read eeprom
  575.     MOVWF    REG27
  576.     MOVLW    0x19
  577.     SUBWF    REG27,W
  578.     BTFSC    STATUS,CARRY
  579.     CLRF    REG27
  580. L1EC    MOVF    REG27,W
  581.     RETURN
  582.  
  583. L1EE    BCF    REG23,4
  584.     ADDLW    0xF8
  585.     BTFSS    STATUS,CARRY
  586. L1F1    RETLW    0x60
  587.     BTFSS    REG26,0
  588.     GOTO    L1F6
  589.     BTFSC    REG23,3
  590.     GOTO    L1FA
  591. L1F6    ADDLW    0xF8
  592.     BTFSS    STATUS,CARRY
  593.     RETLW    0x68
  594.     RETLW    0x78
  595.  
  596. L1FA    BTFSS    REG26,0
  597.     GOTO    L1F6
  598.     ADDLW    0xF8
  599.     BTFSS    STATUS,CARRY
  600.     RETLW    0x00
  601.  
  602.     ADDLW    0xF8
  603.     BTFSS    STATUS,CARRY
  604.     RETLW    0x20
  605.     RETLW    0x40
  606.  
  607. S203    MOVWF    REG0C
  608.     XORWF    INDIR
  609.     BTFSS    REG23,4
  610.     GOTO    L210
  611.     INCF    INDIR
  612.     MOVF    INDIR,W
  613.     ANDLW    0x0F
  614.     ADDWF    REG27,W
  615.     MOVWF    REG0C
  616.     CALL    SCD
  617.     ADDLW    0x2A
  618.     MOVWF    REG0C
  619.     GOTO    L21D
  620.  
  621. L210    SWAPF    INDIR,W
  622.     ANDLW    0x0F
  623.     ADDWF    REG27,W
  624.     CALL    S320
  625.     ADDLW    0x3D
  626.     MOVWF    REG0D
  627.     MOVF    INDIR,W
  628.     ANDLW    0x0F
  629.     ADDLW    0x10
  630.     ADDWF    REG27,W
  631.     CALL    S320
  632.     ADDLW    0x3D
  633.     ADDWF    REG0D
  634.  
  635. L21D    INCF    FSR
  636.     MOVLW    0x1A
  637.     SUBWF    FSR
  638.     BCF    FSR,3
  639.     ADDWF    FSR
  640.     BTFSS    REG23,4
  641.     GOTO    L228
  642.     MOVF    REG0C,W
  643.     XORWF    INDIR
  644.     INCF    INDIR
  645.     RETURN
  646.  
  647. L228    COMF    REG0D
  648.     RLF    REG0D,W
  649.     RLF    REG0D,W
  650.     ADDWF    REG0C
  651.     SWAPF    REG0C
  652.     RLF    REG0C,W
  653.     RLF    REG0C,W
  654.     XORWF    INDIR
  655.     RETLW    0x00
  656.  
  657. L231    MOVLW    1    ;key buf=0100...00
  658.     MOVWF    REG1A
  659.     CLRW
  660.     GOTO    L23D    ;clr key buffer except byte 0
  661.  
  662. L235    MOVLW    0x5F
  663.     GOTO    L23C    ;set key buffer to 5f
  664.  
  665. S237    MOVLW    0xFF    ;key buf=FF00...00
  666.     MOVWF    REG1A
  667.     CLRW
  668.     GOTO    L23D    ;clr key buffer except byte 0
  669.  
  670. ;clear key buffer
  671. CLRBUF    CLRW
  672. L23C    MOVWF    REG1A
  673. L23D    MOVWF    REG1B
  674.     MOVWF    REG1C
  675.     MOVWF    REG1D
  676.     MOVWF    REG1E
  677.     MOVWF    REG1F
  678.     MOVWF    REG20
  679.     MOVWF    REG21
  680.     RETURN
  681.  
  682. ;response to function 78 (xmit key)
  683. F78    MOVLW    REG1A
  684.     MOVWF    FSR
  685. L247    MOVF    INDIR,W
  686.     CALL    XMIT
  687.     INCF    FSR
  688.     DECFSZ    REG25
  689.     GOTO    L247
  690.     BSF    REG23,0
  691.     RETLW    0x00
  692.  
  693. ;response to function 76 (read 1 byte)
  694. F76    BTFSS    REG23,2
  695.     BSF    REG23,7
  696.     BCF    REG23,2
  697.  
  698. ;response to function 80 (read 1 byte)
  699. F80    CALL    RCHAR
  700.     DECFSZ    REG25
  701.     GOTO    F80
  702.     RETLW    0x00
  703.  
  704. ;response to function 72 (read 16 bytes)
  705. F72    CALL    RCHAR
  706.     MOVWF    REG0C
  707.     DECF    REG25
  708.     BTFSC    REG0C,0
  709.     BCF    REG23,0
  710.     GOTO    F80
  711.  
  712. ;response to function 7C (xmit 16 bytes cardnr)
  713. F7C    MOVF    REG23,W
  714.     GOTO    L25E
  715.  
  716. ;response to function 7E & 82 (xmit 64 bytes 00)
  717. F7E    CLRW
  718. L25E    CALL    XMIT
  719.     DECFSZ    REG25
  720.     GOTO    F7E
  721.     RETLW    0x00
  722.  
  723. ;response to function 70 (xmit 6 bytes cardnr)
  724. F70    MOVLW    0
  725. L263    MOVWF    FSR
  726.     CALL    S2A
  727.     CALL    XMIT
  728.     INCF    FSR,W
  729.     DECFSZ    REG25
  730.     GOTO    L263
  731.     RETLW    0x00
  732.  
  733. ;response to function 7A (xmit 25 bytes message)
  734. F7A    MOVLW    MESS2-MESS0
  735.     BTFSS    REG23,0
  736.     MOVLW    MESS3-MESS0    ;this show is complete
  737.     BTFSC    REG23,2
  738.     MOVLW    MESS5-MESS0    ;not authorized
  739.     BTFSC    REG23,1
  740.     MOVLW    MESS4-MESS0    ;this channel is blocked
  741.     MOVF    REG22
  742.     BTFSC    STATUS,ZBIT
  743.     GOTO    L27D
  744.     BTFSS    REG0E,5
  745.     GOTO    L27D
  746.     MOVF    REG22,W
  747.     BTFSC    REG23,4
  748.     ADDLW    0x0D
  749.     SUBLW    0x0D
  750.     MOVLW    MESS6-MESS0    ;scanning wait
  751.     BTFSS    STATUS,CARRY
  752.     MOVLW    MESS7-MESS0    ;decryption not possible
  753. L27D    GOTO    L263
  754.  
  755. ;read eeprom addr(W) into W
  756. REPR    BSF    STATUS,RP0    ;select bank 1
  757. L27F    BTFSC    EECON1,1
  758.     GOTO    L27F    ;wait until write complete
  759.     BCF    STATUS,RP0    ;select bank 0
  760.     MOVWF    EEADR    ;store address
  761.     BSF    STATUS,RP0    ;select bank 1
  762.     BSF    EECON1,0    ;set read
  763.     BCF    STATUS,RP0    ;select bank 0
  764.     MOVF    EEDATA,W    ;read eeprom data
  765.     RETURN
  766.  
  767. ;write W to eeprom
  768. WEPR    BSF    STATUS,RP0    ;select bank 1
  769. L289    BTFSC    EECON1,1
  770.     GOTO    L289    ;wait until write complete
  771.     BCF    STATUS,RP0    ;select bank 0
  772.     MOVWF    EEDATA    ;store data
  773.     BSF    STATUS,RP0    ;select bank 1
  774.     BSF    EECON1,2    ;enable write
  775.     MOVLW    0x55
  776.     MOVWF    EECON2
  777.     MOVLW    0xAA
  778.     MOVWF    EECON2
  779.     BSF    EECON1,1    ;start write
  780.     BCF    EECON1,2    ;disable write
  781.     BCF    STATUS,RP0    ;select bank 0
  782.     RETLW    0x00
  783.  
  784. L297    BSF    STATUS,RP0    ;select bank 1
  785.     MOVLW    0xFF
  786.     MOVWF    TRISA    ;port=input
  787.     MOVWF    TRISB
  788.     MOVWF    OPTREG
  789.     CLRF    EECON1
  790.     BCF    STATUS,RP0    ;select bank 0
  791.     CLRF    INTCON
  792.     SLEEP
  793.  
  794. ;xmit data from W
  795. XMIT    MOVWF    REG0C    ;put char to xmit in REG0c
  796.     CALL    GENPAR    ;get parity in W
  797.     MOVWF    REG29    ;save parity
  798.     BCF    Port_B,7    ;data is low
  799.     MOVLW    15    ;retry cnt
  800.     MOVWF    REG28
  801.  
  802. L2A6    MOVLW    4    ;startbit
  803.     MOVWF    REG0D
  804. L2A8    NOP        ;delay
  805.     NOP
  806.     MOVLW    0x17
  807. L2AB    ADDLW    0xFF
  808.     BTFSS    STATUS,ZBIT
  809.     GOTO    L2AB
  810.     DECFSZ    REG0D
  811.     GOTO    L2A8
  812.  
  813.     BSF    STATUS,RP0    ;select bank 1
  814.     BCF    Port_B,7    ;RB7 is output
  815.     NOP        ;delay
  816.     MOVLW    0x16
  817. L2B4    ADDLW    0xFF
  818.     BTFSS    STATUS,ZBIT
  819.     GOTO    L2B4
  820.  
  821.     MOVLW    9    ;8bits+parity to xmit
  822.     MOVWF    REG0D
  823.     RRF    REG29,W    ;get parity
  824. L2BA    RLF    REG0C    ;data to xmit
  825.     BTFSS    STATUS,CARRY
  826.     BSF    Port_B,7    ;send 1
  827.     BTFSC    STATUS,CARRY
  828.     BCF    Port_B,7    ;send 0
  829.     NOP        ;bit delay
  830.     MOVLW    0x16
  831. L2C1    ADDLW    0xFF
  832.     BTFSS    STATUS,ZBIT
  833.     GOTO    L2C1
  834.  
  835.     DECFSZ    REG0D
  836.     GOTO    L2BA    ;loop until 9 bits send
  837.     NOP
  838.     NOP
  839.     NOP
  840.     BSF    Port_B,7    ;RB7 is input
  841.     BCF    STATUS,RP0    ;select bank 0
  842.     MOVLW    0x0C    ;delay
  843. L2CC    ADDLW    0xFF
  844.     BTFSS    STATUS,ZBIT
  845.     GOTO    L2CC
  846.  
  847.     BTFSC    6,7    ;retry if data=low
  848.     RETLW    0x00    ;else return
  849.  
  850.     DECFSZ    REG28    ;sleep if max retry
  851.     GOTO    L2A6    ;else retry
  852.  
  853.     GOTO    L297
  854.  
  855. ;receive char into W
  856. RCHAR    MOVLW    15    ;retry cnt
  857.     MOVWF    REG28
  858. L2D6    BTFSC    6,7
  859.     GOTO    L2D6    ;loop if RB7=high
  860.  
  861.     NOP        ;delay 1.5 bit
  862.     NOP
  863.     MOVLW    0x22
  864. L2DB    ADDLW    0xFF
  865.     BTFSS    STATUS,ZBIT
  866.     GOTO    L2DB
  867.  
  868.     MOVLW    8    ;8 bits to receive
  869.     MOVWF    REG0D
  870. L2E0    BCF    STATUS,CARRY    ;preset to 0
  871.     BTFSS    Port_B,7    ;skip if 1 received
  872.     BSF    STATUS,CARRY    ;set to 1
  873.     RLF    REG0C    ;shift received bit in REG0C
  874.     NOP        ;delay 1 bit
  875.     NOP
  876.     MOVLW    0x16
  877. L2E7    ADDLW    0xFF
  878.     BTFSS    STATUS,ZBIT
  879.     GOTO    L2E7
  880.  
  881.     DECFSZ    REG0D
  882.     GOTO    L2E0    ;loop if not 8 bits received
  883.  
  884.     NOP
  885.     CLRF    REG0D
  886.     BTFSS    6,7
  887.     BSF    REG0D,0
  888.     CALL    GENPAR
  889.     XORWF    REG0D
  890.     MOVF    REG0C,W
  891.     BTFSS    REG0D,0    ;check if parity ok
  892.     RETURN        ;return if so
  893.  
  894.     MOVLW    0x0C    ;delay
  895. L2F6    ADDLW    0xFF
  896.     BTFSS    STATUS,ZBIT
  897.     GOTO    L2F6
  898.  
  899.     BCF    Port_B,7    ;data=low
  900.     BSF    STATUS,RP0    ;select bank 1
  901.     BCF    Port_B,7    ;RB7=output
  902.     NOP        ;delay
  903.     MOVLW    0x24
  904. L2FE    ADDLW    0xFF
  905.     BTFSS    STATUS,ZBIT
  906.     GOTO    L2FE
  907.  
  908.     BSF    Port_B,7    ;xmit data high
  909.     BCF    STATUS,RP0    ;select bank 0
  910.     DECFSZ    REG28    ;sleep if max retry
  911.     GOTO    L2D6    ;else retry
  912.     GOTO    L297
  913.  
  914. ; even parity in W
  915. GENPAR    CLRW
  916.     CALL    S308
  917. S308    SWAPF    REG0C
  918.     BTFSC    REG0C,0
  919.     ADDLW    1
  920.     BTFSC    REG0C,1
  921.     ADDLW    1
  922.     BTFSC    REG0C,2
  923.     ADDLW    1
  924.     BTFSC    REG0C,3
  925.     ADDLW    1
  926.     RETURN
  927.  
  928.     ORG    0x320
  929. S320    BSF    PCLATH,0
  930.     BSF    PCLATH,1
  931.     ADDWF    PC
  932.     RETLW    0x9C
  933.     RETLW    0x08
  934.     RETLW    0xCB
  935.     RETLW    0x9E
  936.     RETLW    0x3F
  937.     RETLW    0xBC
  938.     RETLW    0x19
  939.     RETLW    0xBA
  940.     RETLW    0x1B
  941.     RETLW    0xDB
  942.     RETLW    0xE5
  943.     RETLW    0x17
  944.     RETLW    0xFB
  945.     RETLW    0x90
  946.     RETLW    0x00
  947.     RETLW    0x57
  948.     RETLW    0xCC
  949.     RETLW    0xA9
  950.     RETLW    0x51
  951.     RETLW    0xD0
  952.     RETLW    0x5D
  953.     RETLW    0x49
  954.     RETLW    0xBF
  955.     RETLW    0xDF
  956.     RETLW    0x63
  957.     RETLW    0xDC
  958.     RETLW    0x52
  959.     RETLW    0x7F
  960.     RETLW    0xC0
  961.     RETLW    0x50
  962.     RETLW    0x94
  963.     RETLW    0x1A
  964.     RETLW    0x19
  965.     RETLW    0xB5
  966.     RETLW    0x79
  967.     RETLW    0x12
  968.     RETLW    0x8C
  969.     RETLW    0x80
  970.     RETLW    0xED
  971.     RETLW    0x76
  972.     RETLW    0x60
  973.     RETLW    0x44
  974.     RETLW    0x20
  975.     RETLW    0xA3
  976.     RETLW    0xC8
  977.     RETLW    0x78
  978.     RETLW    0x7C
  979.     RETLW    0xE9
  980.     RETLW    0x2A
  981.     RETLW    0xFF
  982.     RETLW    0x28
  983.     RETLW    0x63
  984.     RETLW    0x7D
  985.     RETLW    0xFC
  986.     RETLW    0x8A
  987.     RETLW    0x72
  988.     RETLW    0xF6
  989.     RETLW    0xE7
  990.     RETLW    0x0A
  991.     RETLW    0x69
  992.     RETLW    0xE3
  993.     RETLW    0xE1
  994.     RETLW    0xD7
  995.     RETLW    0x32
  996.     RETLW    0x0B
  997.     RETLW    0x5E
  998.     RETLW    0x10
  999.     RETLW    0x69
  1000.     RETLW    0xBC
  1001.     RETLW    0x9C
  1002.     RETLW    0xA2
  1003.     RETLW    0x31
  1004.     RETLW    0x6F
  1005.     RETLW    0x47
  1006.     RETLW    0xBD
  1007.     RETLW    0x4E
  1008.     RETLW    0xF1
  1009.     RETLW    0x79
  1010.     RETLW    0x39
  1011.     RETLW    0xDC
  1012.     RETLW    0x84
  1013.     RETLW    0x73
  1014.     RETLW    0x66
  1015.     RETLW    0x7E
  1016.     RETLW    0xCF
  1017.     RETLW    0xC0
  1018.     RETLW    0x33
  1019.     RETLW    0x35
  1020.     RETLW    0x8D
  1021.     RETLW    0x18
  1022.     RETLW    0xB2
  1023.     RETLW    0x63
  1024.     RETLW    0x42
  1025.     RETLW    0x82
  1026.     RETLW    0x1C
  1027.     RETLW    0x70
  1028.     RETLW    0x28
  1029.     RETLW    0xAA
  1030.     RETLW    0x34
  1031.     RETLW    0xDD
  1032.     RETLW    0x77
  1033.     RETLW    0x4B
  1034.     RETLW    0x9A
  1035.     RETLW    0x39
  1036.     RETLW    0xEB
  1037.     RETLW    0x93
  1038.     RETLW    0x0F
  1039.     RETLW    0x31
  1040.     RETLW    0x49
  1041.     RETLW    0x4F
  1042.     RETLW    0x8B
  1043.     RETLW    0x06
  1044.     RETLW    0x6C
  1045.     RETLW    0xAF
  1046.     RETLW    0x23
  1047.     RETLW    0x05
  1048.     RETLW    0xC8
  1049.     RETLW    0xB5
  1050.     RETLW    0x00
  1051.     RETLW    0xDF
  1052.     RETLW    0x2F
  1053.     RETLW    0x7F
  1054.     RETLW    0x72
  1055.     RETLW    0x86
  1056.     RETLW    0xEE
  1057.     RETLW    0x78
  1058.     RETLW    0x9F
  1059.     RETLW    0x53
  1060.     RETLW    0xBC
  1061.     RETLW    0xC8
  1062.     RETLW    0xAD
  1063.     RETLW    0x14
  1064.     RETLW    0x09
  1065.     RETLW    0x60
  1066.     RETLW    0xA5
  1067.     RETLW    0x23
  1068.     RETLW    0x33
  1069.     RETLW    0x15
  1070.     RETLW    0x2A
  1071.     RETLW    0xE9
  1072.     RETLW    0x24
  1073.     RETLW    0x0C
  1074.     RETLW    0x05
  1075.     RETLW    0xCC
  1076.     RETLW    0x13
  1077.     RETLW    0x5C
  1078.     RETLW    0x53
  1079.     RETLW    0x65
  1080.     RETLW    0xF9
  1081.     RETLW    0xD1
  1082.     RETLW    0xC0
  1083.     RETLW    0xFC
  1084.     END
  1085.  
  1086.