home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / program / s / uidread / a next >
Encoding:
Text File  |  1992-04-18  |  13.7 KB  |  554 lines

  1. ; generated by JPT 19 Apr 1991 [0.01]
  2. r0  RN 0
  3. r1  RN 1
  4. r2  RN 2
  5. r3  RN 3
  6. r4  RN 4
  7. r5  RN 5
  8. r6  RN 6
  9. r7  RN 7
  10. r8  RN 8
  11. r9  RN 9
  12. r10 RN 10
  13. r11 RN 11
  14. r12 RN 12
  15. r13 RN 13
  16. r14 RN 14
  17. pc  RN 15
  18.  
  19.    AREA |min$$code|, CODE, READONLY
  20.  
  21. |min$codeseg|
  22.         B       check_min
  23.  
  24.         DCB     "check_min"
  25.         DCB     0
  26.         DCD     &ff00000c
  27.  
  28.         EXPORT check_min
  29.  
  30. check_min
  31.         STMFD   r13!, {r0-r12, r14}
  32.         SWI     &20016
  33.         SWI     &20014
  34.         STMFD   r13!, {r14}
  35.         MOV     r12, #&3200000
  36.         LDRB    r0, [r12, #&50]
  37.         
  38.         STRB    r0, t1l
  39.                         ; Store Timer 1
  40.         LDRB    r0, [r12, #&54]
  41.         STRB    r0, t1h
  42.         LDRB    r0, [r12, #&18]
  43.         STRB    r0, isA
  44.                         ; Store Mask A
  45.         LDRB    r0, [r12, #&28]
  46.         STRB    r0, isB
  47.                         ; Store Mask B
  48.         LDRB    r0, [r12, #&00]
  49.         ORR     r0, r0, #192
  50.         STRB    r0, cr
  51.                         ; Store control register
  52.         LDRB    r0, [r12, #&38]
  53.         STRB    r0, fsk
  54.                         ; Store FIRQ mask
  55.         MOV     r0, #0
  56.         STRB    r0, [r12, #&38]
  57.                         ; Clear FIRQ mask
  58.         STRB    r0, [r12, #&28]
  59.                         ; Clear Mask B
  60.         MOV     r0, #64
  61.         STRB    r0, [r12, #&18]
  62.                         ; Clear Mask A, except TM1
  63.         
  64.         MOV     r8, #3
  65. retrial
  66.         LDR     r0, cr
  67.         BIC     r0, r0, #8
  68.         STRB    r0, [r12, #0]
  69.         MOV     r0, #170
  70.         STRB    r0, [r12, #80]
  71.         MOV     r0, #4
  72.         STRB    r0, [r12, #84]
  73.         MOV     r0, #0
  74.         STRB    r0, [r12, #88]
  75.         MOV     r0, #64
  76.         STRB    r0, [r12, #20]
  77. wait1
  78.         LDRB    r0, [r12, #16]
  79.         TST     r0, #64
  80.         BEQ     wait1
  81.                         ;        FNwrite(0, time_reset)
  82.                         ; Do a reset pulse
  83.         LDR     r0, cr
  84.         ORR     r0, r0, #8
  85.         STRB    r0, [r12, #0]
  86.         MOV     r0, #14
  87.         STRB    r0, [r12, #80]
  88.         MOV     r0, #0
  89.         STRB    r0, [r12, #84]
  90.         MOV     r0, #0
  91.         STRB    r0, [r12, #88]
  92.         MOV     r0, #64
  93.         STRB    r0, [r12, #20]
  94. wait2
  95.         LDRB    r0, [r12, #16]
  96.         TST     r0, #64
  97.         BEQ     wait2
  98.         LDRB    r0, [r12, #0]
  99.         ANDS    r0, r0, #8
  100.         MOVNE   r0, #255
  101.                         ;        FNread(0, 10)
  102.                         ; Check presence
  103.         CMP     r0, #0
  104.         ADREQ   r0, no_detect
  105.         BEQ     recover_e
  106.         LDR     r0, cr
  107.         ORR     r0, r0, #8
  108.         STRB    r0, [r12, #0]
  109.         MOV     r0, #94
  110.         STRB    r0, [r12, #80]
  111.         MOV     r0, #0
  112.         STRB    r0, [r12, #84]
  113.         MOV     r0, #0
  114.         STRB    r0, [r12, #88]
  115.         MOV     r0, #64
  116.         STRB    r0, [r12, #20]
  117. wait3
  118.         LDRB    r0, [r12, #16]
  119.         TST     r0, #64
  120.         BEQ     wait3
  121.         LDRB    r0, [r12, #0]
  122.         ANDS    r0, r0, #8
  123.         MOVNE   r0, #255
  124.                         ;        FNread(0, 50)
  125.                         ; And wait
  126.         CMP     r0, #0
  127.         ADRNE   r0, no_detect
  128.         BNE     recover_e
  129.                         ; Exit if -pd
  130.         B       detectok
  131. no_detect
  132.         DCD     1
  133.         DCB     "MIN not detected"
  134.         DCB     r0
  135.         ALIGN
  136. detectok
  137.         MOV     r0, #34
  138.         STRB    r0, [r12, #80]
  139.         MOV     r0, #5
  140.         STRB    r0, [r12, #84]
  141.         MOV     r0, #0
  142.         STRB    r0, [r12, #88]
  143.         MOV     r0, #64
  144.         STRB    r0, [r12, #20]
  145. wait4
  146.         LDRB    r0, [r12, #16]
  147.         TST     r0, #64
  148.         BEQ     wait4
  149.                         ;        FNwait(660)
  150.         MOV     r6, #3
  151. l2
  152.         LDR     r0, cr
  153.         ORR     r0, r0, #8
  154.         STRB    r0, [r12, #0]
  155.         MOV     r0, #54
  156.         STRB    r0, [r12, #80]
  157.         MOV     r0, #0
  158.         STRB    r0, [r12, #84]
  159.         MOV     r0, #0
  160.         STRB    r0, [r12, #88]
  161.         MOV     r0, #64
  162.         STRB    r0, [r12, #20]
  163. wait5
  164.         LDRB    r0, [r12, #16]
  165.         TST     r0, #64
  166.         BEQ     wait5
  167.                         ;        FNwrite(1, 30)
  168.         LDR     r0, cr
  169.         BIC     r0, r0, #8
  170.         STRB    r0, [r12, #0]
  171.         MOV     r0, #0
  172.         STRB    r0, [r12, #80]
  173.         MOV     r0, #0
  174.         STRB    r0, [r12, #84]
  175.         MOV     r0, #0
  176.         STRB    r0, [r12, #88]
  177.         MOV     r0, #64
  178.         STRB    r0, [r12, #20]
  179. wait6
  180.         LDRB    r0, [r12, #16]
  181.         TST     r0, #64
  182.         BEQ     wait6
  183.                         ;        FNwrite(0, 3)
  184.         LDR     r0, cr
  185.         ORR     r0, r0, #8
  186.         STRB    r0, [r12, #0]
  187.         MOV     r0, #234
  188.         STRB    r0, [r12, #80]
  189.         MOV     r0, #0
  190.         STRB    r0, [r12, #84]
  191.         MOV     r0, #0
  192.         STRB    r0, [r12, #88]
  193.         MOV     r0, #64
  194.         STRB    r0, [r12, #20]
  195. wait7
  196.         LDRB    r0, [r12, #16]
  197.         TST     r0, #64
  198.         BEQ     wait7
  199.                         ;        FNwrite(1, 120)
  200.         SUBS    r6, r6, #1
  201.         BPL     l2
  202.         MOV     r6, #3
  203. l1
  204.         LDR     r0, cr
  205.         ORR     r0, r0, #8
  206.         STRB    r0, [r12, #0]
  207.         MOV     r0, #54
  208.         STRB    r0, [r12, #80]
  209.         MOV     r0, #0
  210.         STRB    r0, [r12, #84]
  211.         MOV     r0, #0
  212.         STRB    r0, [r12, #88]
  213.         MOV     r0, #64
  214.         STRB    r0, [r12, #20]
  215. wait8
  216.         LDRB    r0, [r12, #16]
  217.         TST     r0, #64
  218.         BEQ     wait8
  219.                         ;        FNwrite(1, 30)
  220.         LDR     r0, cr
  221.         BIC     r0, r0, #8
  222.         STRB    r0, [r12, #0]
  223.         MOV     r0, #134
  224.         STRB    r0, [r12, #80]
  225.         MOV     r0, #0
  226.         STRB    r0, [r12, #84]
  227.         MOV     r0, #0
  228.         STRB    r0, [r12, #88]
  229.         MOV     r0, #64
  230.         STRB    r0, [r12, #20]
  231. wait9
  232.         LDRB    r0, [r12, #16]
  233.         TST     r0, #64
  234.         BEQ     wait9
  235.                         ;        FNwrite(0, 70)
  236.         LDR     r0, cr
  237.         ORR     r0, r0, #8
  238.         STRB    r0, [r12, #0]
  239.         MOV     r0, #114
  240.         STRB    r0, [r12, #80]
  241.         MOV     r0, #0
  242.         STRB    r0, [r12, #84]
  243.         MOV     r0, #0
  244.         STRB    r0, [r12, #88]
  245.         MOV     r0, #64
  246.         STRB    r0, [r12, #20]
  247. wait10
  248.         LDRB    r0, [r12, #16]
  249.         TST     r0, #64
  250.         BEQ     wait10
  251.                         ;        FNwrite(1, 60)
  252.         SUBS    r6, r6, #1
  253.         BPL     l1
  254.         MOV     r7, #7
  255.         MOV     r6, #0
  256. read_bits
  257.         LDR     r0, cr
  258.         ORR     r0, r0, #8
  259.         STRB    r0, [r12, #0]
  260.         MOV     r0, #54
  261.         STRB    r0, [r12, #80]
  262.         MOV     r0, #0
  263.         STRB    r0, [r12, #84]
  264.         MOV     r0, #0
  265.         STRB    r0, [r12, #88]
  266.         MOV     r0, #64
  267.         STRB    r0, [r12, #20]
  268. wait11
  269.         LDRB    r0, [r12, #16]
  270.         TST     r0, #64
  271.         BEQ     wait11
  272.                         ;        FNwrite(1, 30)
  273.         LDR     r0, cr
  274.         BIC     r0, r0, #8
  275.         STRB    r0, [r12, #0]
  276.         MOV     r0, #0
  277.         STRB    r0, [r12, #80]
  278.         MOV     r0, #0
  279.         STRB    r0, [r12, #84]
  280.         MOV     r0, #0
  281.         STRB    r0, [r12, #88]
  282.         MOV     r0, #64
  283.         STRB    r0, [r12, #20]
  284. wait12
  285.         LDRB    r0, [r12, #16]
  286.         TST     r0, #64
  287.         BEQ     wait12
  288.                         ;        FNwrite(0, 3)
  289.         LDR     r1, cr
  290.         ORR     r1, r1, #8
  291.         STRB    r1, [r12, #0]
  292.         MOV     r1, #2
  293.         STRB    r1, [r12, #80]
  294.         MOV     r1, #0
  295.         STRB    r1, [r12, #84]
  296.         MOV     r1, #0
  297.         STRB    r1, [r12, #88]
  298.         MOV     r1, #64
  299.         STRB    r1, [r12, #20]
  300. wait13
  301.         LDRB    r1, [r12, #16]
  302.         TST     r1, #64
  303.         BEQ     wait13
  304.         LDRB    r1, [r12, #0]
  305.         ANDS    r1, r1, #8
  306.         MOVNE   r1, #255
  307.                         ;        FNread(1, 4)
  308.         MOV     r0, #18
  309.         STRB    r0, [r12, #80]
  310.         MOV     r0, #1
  311.         STRB    r0, [r12, #84]
  312.         MOV     r0, #0
  313.         STRB    r0, [r12, #88]
  314.         MOV     r0, #64
  315.         STRB    r0, [r12, #20]
  316. wait14
  317.         LDRB    r0, [r12, #16]
  318.         TST     r0, #64
  319.         BEQ     wait14
  320.                         ;        FNwait(140)
  321.         MOV     r6, r6, LSR#1
  322.         CMP     r1, #0
  323.         ORRNE   r6, r6, #128
  324.         MOV     r0, #94
  325.         STRB    r0, [r12, #80]
  326.         MOV     r0, #0
  327.         STRB    r0, [r12, #84]
  328.         MOV     r0, #0
  329.         STRB    r0, [r12, #88]
  330.         MOV     r0, #64
  331.         STRB    r0, [r12, #20]
  332. wait15
  333.         LDRB    r0, [r12, #16]
  334.         TST     r0, #64
  335.         BEQ     wait15
  336.                         ;        FNwait(50)
  337.         SUBS    r7, r7, #1
  338.         BPL     read_bits
  339.         CMP     r6, #1
  340.         ADRNE   r0, no_detect
  341.         BNE     recover_e
  342.         MOV     r7, #32
  343.         MOV     r6, #0
  344. read_32
  345.         LDR     r0, cr
  346.         ORR     r0, r0, #8
  347.         STRB    r0, [r12, #0]
  348.         MOV     r0, #54
  349.         STRB    r0, [r12, #80]
  350.         MOV     r0, #0
  351.         STRB    r0, [r12, #84]
  352.         MOV     r0, #0
  353.         STRB    r0, [r12, #88]
  354.         MOV     r0, #64
  355.         STRB    r0, [r12, #20]
  356. wait16
  357.         LDRB    r0, [r12, #16]
  358.         TST     r0, #64
  359.         BEQ     wait16
  360.                         ;        FNwrite(1, 30)
  361.         LDR     r0, cr
  362.         BIC     r0, r0, #8
  363.         STRB    r0, [r12, #0]
  364.         MOV     r0, #0
  365.         STRB    r0, [r12, #80]
  366.         MOV     r0, #0
  367.         STRB    r0, [r12, #84]
  368.         MOV     r0, #0
  369.         STRB    r0, [r12, #88]
  370.         MOV     r0, #64
  371.         STRB    r0, [r12, #20]
  372. wait17
  373.         LDRB    r0, [r12, #16]
  374.         TST     r0, #64
  375.         BEQ     wait17
  376.                         ;        FNwrite(0, 3)
  377.         LDR     r1, cr
  378.         ORR     r1, r1, #8
  379.         STRB    r1, [r12, #0]
  380.         MOV     r1, #2
  381.         STRB    r1, [r12, #80]
  382.         MOV     r1, #0
  383.         STRB    r1, [r12, #84]
  384.         MOV     r1, #0
  385.         STRB    r1, [r12, #88]
  386.         MOV     r1, #64
  387.         STRB    r1, [r12, #20]
  388. wait18
  389.         LDRB    r1, [r12, #16]
  390.         TST     r1, #64
  391.         BEQ     wait18
  392.         LDRB    r1, [r12, #0]
  393.         ANDS    r1, r1, #8
  394.         MOVNE   r1, #255
  395.                         ;        FNread(1, 4)
  396.         MOV     r0, #18
  397.         STRB    r0, [r12, #80]
  398.         MOV     r0, #1
  399.         STRB    r0, [r12, #84]
  400.         MOV     r0, #0
  401.         STRB    r0, [r12, #88]
  402.         MOV     r0, #64
  403.         STRB    r0, [r12, #20]
  404. wait19
  405.         LDRB    r0, [r12, #16]
  406.         TST     r0, #64
  407.         BEQ     wait19
  408.                         ;        FNwait(140)
  409.         MOV     r6, r6, LSR#1
  410.         CMP     r1, #0
  411.         ORRNE   r6, r6, #1<<31
  412.         SUBS    r7, r7, #1
  413.         BNE     read_32
  414.         STR     r6, min
  415.         MOV     r7, #56-32
  416.         MOV     r6, #0
  417. read_32b
  418.         LDR     r0, cr
  419.         ORR     r0, r0, #8
  420.         STRB    r0, [r12, #0]
  421.         MOV     r0, #54
  422.         STRB    r0, [r12, #80]
  423.         MOV     r0, #0
  424.         STRB    r0, [r12, #84]
  425.         MOV     r0, #0
  426.         STRB    r0, [r12, #88]
  427.         MOV     r0, #64
  428.         STRB    r0, [r12, #20]
  429. wait20
  430.         LDRB    r0, [r12, #16]
  431.         TST     r0, #64
  432.         BEQ     wait20
  433.                         ;        FNwrite(1, 30)
  434.         LDR     r0, cr
  435.         BIC     r0, r0, #8
  436.         STRB    r0, [r12, #0]
  437.         MOV     r0, #0
  438.         STRB    r0, [r12, #80]
  439.         MOV     r0, #0
  440.         STRB    r0, [r12, #84]
  441.         MOV     r0, #0
  442.         STRB    r0, [r12, #88]
  443.         MOV     r0, #64
  444.         STRB    r0, [r12, #20]
  445. wait21
  446.         LDRB    r0, [r12, #16]
  447.         TST     r0, #64
  448.         BEQ     wait21
  449.                         ;        FNwrite(0, 3)
  450.         LDR     r1, cr
  451.         ORR     r1, r1, #8
  452.         STRB    r1, [r12, #0]
  453.         MOV     r1, #2
  454.         STRB    r1, [r12, #80]
  455.         MOV     r1, #0
  456.         STRB    r1, [r12, #84]
  457.         MOV     r1, #0
  458.         STRB    r1, [r12, #88]
  459.         MOV     r1, #64
  460.         STRB    r1, [r12, #20]
  461. wait22                
  462.         LDRB    r1, [r12, #16]
  463.         TST     r1, #64
  464.         BEQ     wait22
  465.         LDRB    r1, [r12, #0]
  466.         ANDS    r1, r1, #8
  467.         MOVNE   r1, #255
  468.                         ;        FNread(1, 4)
  469.         MOV     r0, #18
  470.         STRB    r0, [r12, #80]
  471.         MOV     r0, #1
  472.         STRB    r0, [r12, #84]
  473.         MOV     r0, #0
  474.         STRB    r0, [r12, #88]
  475.         MOV     r0, #64
  476.         STRB    r0, [r12, #20]
  477. wait23
  478.         LDRB    r0, [r12, #16]
  479.         TST     r0, #64
  480.         BEQ     wait23
  481.                         ;        FNwait(140)
  482.         MOV     r6, r6, LSR#1
  483.         CMP     r1, #0
  484.         ORRNE   r6, r6, #1<<31
  485.         SUBS    r7, r7, #1
  486.         BNE     read_32b
  487.         MOV     r6, r6, LSR#8
  488.         STR     r6, min+4
  489.         
  490.                         ; Rest of code
  491.         MOV     r0, #0
  492. recover
  493.         LDRB    r1, t1l
  494.         STRB    r1, [r12, #&50]
  495.                         ; Restore Timer 1
  496.         LDRB    r1, t1h
  497.         STRB    r1, [r12, #&54]
  498.         LDRB    r1, isA
  499.         STRB    r1, [r12, #&18]
  500.                         ; And IRQ Mask A
  501.         LDRB    r1, isB
  502.         STRB    r1, [r12, #&28]
  503.                         ; And IRQ Mask B
  504.         LDRB    r1, fsk
  505.         STRB    r1, [r12, #&38]
  506.                         ; And FIRQ Mask
  507.         LDRB    r1, cr
  508.         STRB    r1, [r12, #&00]
  509.                         ; And control register
  510.         MOV     r1, #127
  511.         STRB    r1, [r12, #&14]
  512.                         ; Clear IRQ A
  513.                         ;LDRB r1, [r12, #kart]
  514.         LDMFD   r13!, {r14}
  515.         TEQP    pc, #0
  516.         MVNNV   r0, r0
  517.         CMP     r0, #0
  518.         STRNE   r0, [r13]
  519.         LDMFD   r13!, {r0-r12, r14}
  520.         SWINE   &0002B
  521.         MOV     pc, r14
  522.         
  523. recover_e
  524.         SUBS    r8, r8, #1
  525.         BPL     retrial
  526.         B       recover
  527.         
  528. bad_crc
  529.         DCD     1
  530.         DCB     "Bad MIN crc"
  531.         DCB     0
  532.         ALIGN
  533.         
  534. t1l
  535.         DCB     0
  536. t1h
  537.         DCB     0
  538. isA
  539.         DCB     0
  540. isB
  541.         DCB     0
  542. fsk
  543.         DCB     0
  544. cr
  545.         DCB     0
  546.         ALIGN
  547. min
  548.         DCD     0
  549.         DCD     0
  550. crc
  551.         DCD     0
  552.  
  553.     END
  554.