home *** CD-ROM | disk | FTP | other *** search
/ kermit.columbia.edu / kermit.columbia.edu.tar / kermit.columbia.edu / luxorabc80 / kerm7.asm < prev    next >
Assembly Source File  |  1990-07-07  |  15KB  |  704 lines

  1. ; KERM7.ASM
  2. ; Anders Franz`n <5258>
  3. ; Stockholm 1987-09-24
  4. ; Uppdaterad 1990-01-07 J. Westman <5074>
  5. ; Skicka SP i respons paketet om ingen REPT
  6. ; Uppdaterad 1990-01-08 J. Westman <5074>
  7. ; Ingen REPT om ej valt, i s{ndning
  8.  
  9. ;Spara mottagna parametrar
  10. RPARM    CALL RDEFAULT
  11.          LD   A,(IX+24) L{ngd packet
  12.          AND  A
  13.          RETZ           L{ngd = 0
  14.          LD   HL,BUFF3  Mottaget data
  15.          LD   A,(HL)
  16.          INC  HL
  17.          CP   33
  18.          JRC  RPM1
  19.          SUB  32
  20.          LD   (IX+11),A MAXL
  21. RPM1     LD   A,(IX+24)
  22.          CP   2
  23.          RETC           L{ngd < 2
  24.          LD   A,(HL)
  25.          INC  HL
  26.          CP   33
  27.          JRC  RPM2
  28.          SUB  32
  29.          LD   (IX+12),A TIME
  30. RPM2     LD   A,(IX+24)
  31.          CP   3
  32.          RETC           L{ngd < 3
  33.          LD   A,(HL)
  34.          INC  HL
  35.          CP   33
  36.          JRC  RPM3
  37.          SUB  32
  38.          LD   (IX+13),A NPAD
  39. RPM3     LD   A,(IX+24)
  40.          CP   4
  41.          RETC           L{ngd < 4
  42.          LD   A,(HL)
  43.          INC  HL
  44.          CP   33
  45.          JRC  RPM4
  46.          XOR  64
  47.          LD   (IX+14),A PADC
  48. RPM4     LD   A,(IX+24)
  49.          CP   5
  50.          RETC           L{ngd < 5
  51.          LD   A,(HL)
  52.          INC  HL
  53.          CP   33
  54.          JRC  RPM5
  55.          SUB  32
  56.          LD   (IX+15),A EOL
  57. RPM5     LD   A,(IX+24)
  58.          CP   6
  59.          RETC           L{ngd < 6
  60.          LD   A,(HL)
  61.          INC  HL
  62.          CP   33
  63.          JRC  RPM6
  64.          LD   (IX+16),A QCTL
  65. RPM6     LD   A,(IX+24)
  66.          CP   7
  67.          RETC           L{ngd < 7
  68.          LD   A,(HL)
  69.          INC  HL
  70.          CP   33
  71.          JRC  RPM8
  72.          CP   "Y"
  73.          JRZ  RPM7
  74.          CP   127
  75.          JRNC RPM8
  76.          CP   96
  77.          JRNC RPM7
  78.          CP   63
  79.          JRNC RPM8
  80. RPM7     LD   (IX+17),A QBIN
  81. RPM8     LD   A,(IX+24)
  82.          CP   8
  83.          RETC           L{ngd < 8
  84.          LD   A,(HL)
  85.          INC  HL
  86.          SUB  48
  87.          CP   1
  88.          JRC  RPM9
  89.          CP   3
  90.          JRNC RPM9
  91.          LD   (IX+18),A CHKT
  92. RPM9     LD   A,(IX+24)
  93.          CP   9
  94.          RETC           L{ngd < 9
  95.          LD   A,(HL)
  96.          CP   33
  97.          RETC
  98.          CP   127
  99.          RETNC
  100.          CP   96
  101.          JRNC RPM10
  102.          CP   63
  103.          RETNC
  104. RPM10    LD   (IX+19),A REPT
  105.          RET
  106.  
  107. ;Defaultparametrar "andra sidan"
  108. RDEFAULT LD   (IX+11),80 Default MAXL
  109.          LD   (IX+12),5          TIME
  110.          LD   (IX+13),0          NPAD
  111.          LD   (IX+14),0          PADC
  112.          LD   (IX+15),13         EOL
  113.          LD   (IX+16),"#"        QCTL
  114.          LD   (IX+17),0          QBIN
  115.          LD   (IX+18),1          CHKT
  116.          LD   (IX+19),0          REPT
  117.          RET
  118.  
  119. ;S{tt egna parametrar
  120. SPARM    LD   HL,BUFF4
  121.          LD   A,(IX+1)  Maxl{ngd packet
  122.          ADD  32
  123.          LD   (HL),A
  124.          INC  HL
  125.          LD   A,(IX+2)  Timeout
  126.          ADD  32
  127.          LD   (HL),A
  128.          INC  HL
  129.          LD   A,(IX+3)  Antal PAD-tkn
  130.          ADD  32
  131.          LD   (HL),A
  132.          INC  HL
  133.          LD   A,(IX+4)  PAD-tkn
  134.          XOR  64
  135.          LD   (HL),A
  136.          INC  HL
  137.          LD   A,(IX+5)  EOL-tkn
  138.          ADD  32
  139.          LD   (HL),A
  140.          INC  HL
  141.          LD   A,(IX+6)  QCTL-tkn
  142.          LD   (HL),A
  143.          INC  HL
  144.          LD   A,(IX+7)  QBIN-tkn
  145.          LD   (HL),A
  146.          INC  HL
  147.          LD   A,(IX+8)  Checksummetyp
  148.          ADD  48
  149.          LD   (HL),A
  150.          INC  HL
  151.          LD   A,(IX+9)  REPEAT-tkn
  152.          OR   A
  153.          JR   NZ,SPA1
  154.          LD   A,32
  155. SPA1     LD   (HL),A
  156.          RET
  157.  
  158. ;Ta emot en packet. Om checksumman {r
  159. ;fel s{nds negativt svar. Carry vid
  160. ;retur betyder att nytt f|rs|k ska
  161. ;g|ras.
  162. GPACK    CALL RPACK     Ta emot packet
  163.          RETNC          Inget fel
  164.          BIT  3,(IX+0)
  165.          RETNZ          ESCAPE
  166.          LD   A,(IX+20)
  167.          DEC  A
  168.          SCF
  169.          RETZ           Sista f|rs|ket
  170.          LD   A,(IX+23)
  171.          LD   (IX+22),A Packetnr
  172.          LD   (IX+24),0 L{ngd data
  173.          LD   (IX+25),"N"
  174.          CALL SPACK     Negativt svar
  175.          SCF
  176.          RET
  177.  
  178. ;Ta emot en packet
  179. RPACK    CALL RCHAR
  180.          RETC           Time out!
  181.          LD   BC,(MARKER)
  182.          CP   C
  183.          JRNZ RPACK     V{nta p} SOH...
  184.          LD   HL,0      Checksumma
  185.          CALL RCHAR
  186.          RETC           Time out!
  187.          SUB  34
  188.          SUB  (IX+8)
  189.          LD   (IX+24),A L{ngd p} data
  190.          CALL RCHAR
  191.          RETC           Time out!
  192.          SUB  32
  193.          LD   (IX+22),A Packetnr
  194.          CALL RCHAR
  195.          RETC           Time out
  196.          LD   (IX+25),A Typ av packet
  197.          CP   "S"
  198.          JRNZ RPK1
  199.          LD   A,(IX+8)
  200.          CP   1
  201.          JRZ  RPK1
  202.          INC  (IX+24)
  203. RPK1     LD   A,(DEBUG)
  204.          DEC  A
  205.          LD   A,"R"
  206.          CALLZ DEBRUB
  207.          LD   A,(IX+24) L{ngd data
  208.          AND  A
  209.          JRZ  RPK3      Inget data
  210.          LD   B,A
  211.          LD   DE,BUFF3
  212. RPK2     PUSH DE
  213.          PUSH BC
  214.          CALL RCHARD    H{mta datatkn
  215.          POP  BC
  216.          POP  DE
  217.          RETC           Time out!
  218.          LD   (DE),A    Spara tecken
  219.          INC  DE
  220.          DJNZ RPK2
  221. RPK3     PUSH HL
  222.          CALL RCHAR     H{mta checksumma
  223.          POP  HL
  224.          RETC           Time out!
  225.          LD   E,A
  226.          LD   A,(IX+25)
  227.          CP   "S"
  228.          JRZ  RPK4      Packettyp S
  229.          LD   A,(IX+8)
  230.          CP   1
  231.          JRZ  RPK4      CH-typ 1
  232.          PUSH HL        Annars CH-typ 2
  233.          PUSH DE
  234.          CALL RCHAR
  235.          POP  DE
  236.          POP  HL
  237.          RETC           Time out!
  238.          LD   D,A
  239.          LD   A,L
  240.          AND  63
  241.          ADD  32
  242.          CP   D
  243.          SCF
  244.          RETNZ          Fel checksumma
  245.          LD   A,H
  246.          RLC  L
  247.          RLA
  248.          RLC  L
  249.          RLA            A = HL/64
  250.          AND  63
  251.          ADD  32
  252.          CP   E
  253.          JRZ  RPK5
  254.          SCF
  255.          RET            Fel checksumma
  256.  
  257. RPK4     LD   A,L
  258.          AND  192
  259.          RLCA
  260.          RLCA           A = A/64
  261.          AND  3         A = A/64
  262.          ADD  L
  263.          AND  63
  264.          ADD  32
  265.          CP   E
  266.          SCF
  267.          RETNZ          Fel checksumma
  268. RPK5     CALL RCHAR     EOL
  269.          RET
  270.  
  271. RCHARD   CALL RCHAR
  272.          RETC
  273.          LD   A,(DEBUG)
  274.          DEC  A
  275.          LD   A,E
  276.          RETNZ
  277.          LD   (SLASK),A
  278.          CALL DEBCHAR
  279.          LD   A,(SLASK)
  280.          AND  A
  281.          RET
  282.  
  283. ;V{nta p} tecken fr}n V24
  284. RCHAR    LD   B,50
  285.          LD   A,(253:240)
  286.          LD   C,A
  287. RCH1     LD   A,(253:240)
  288.          CP   C
  289.          JRZ  RCH2      Klocka ej r|rd
  290.          LD   C,A
  291.          DJNZ RCH2      Klocka p} 50Hz
  292.          LD   B,50
  293.          XOR  A
  294.          DEC  (IX+21)   Minska tid kvar
  295.          SCF
  296.          RETZ           Maxtid
  297. RCH2     INP  58
  298.          AND  2
  299.          SCF
  300.          RETNZ          B{rv}g saknas!
  301.          CALL EVBRYT    Kolla CTRL-X/Z
  302.          BIT  3,(IX+0)
  303.          SCF
  304.          RETNZ          ESCAPE nedtryckt
  305.          PUSH HL
  306.          CALL MOTTAG    Mottaget tkn?
  307.          POP  HL
  308.          JRNC RCH1      Nej, v{nta...
  309.          LD   E,A
  310.          LD   D,0
  311.          LD   A,(PARITET)
  312.          AND  A
  313.          JRZ  RCH3      Paritet NONE
  314.          RES  7,E       Sl{ck paritet
  315. RCH3     ADD  HL,DE     \ka checksumma
  316.          LD   A,(DEBUG)
  317.          CP   2
  318.          LD   A,E
  319.          CALLZ DITTO
  320.          AND  A         Clear carry
  321.          RET
  322.  
  323. ;S{nd iv{g en packet
  324. SPACK    LD   A,(PAUSE)
  325.          AND  A
  326.          JRZ  SPK4      Ingen paus
  327.          LD   HL,253:240
  328.          LD   C,A       Antal tiondelar
  329. SPK1     LD   B,5
  330. SPK2     LD   A,(HL)
  331. SPK3     CP   (HL)
  332.          JRZ  SPK3    V{nta 1/50 sek
  333.          DJNZ SPK2    V{nta 1/10 sek
  334.          DEC  C
  335.          JRNZ SPK1    Fler tiondelar
  336. SPK4     LD   A,(DEBUG)
  337.          DEC  A
  338.          LD   A,"S"
  339.          CALLZ DEBRUB
  340.          LD   A,(IX+13) Antal PAD-tkn
  341.          AND  A
  342.          JRZ  SPK6      Inga PAD-tkn
  343.          LD   B,A
  344. SPK5     LD   A,(IX+14) PAD-tkn
  345.          CALL SCHAR
  346.          RETC           B{rv}g saknas
  347.          DJNZ SPK5
  348. SPK6     LD   A,(MARKER)
  349.          CALL SCHAR     SOH
  350.          RETC
  351.          LD   A,(IX+24)
  352.          ADD  (IX+8)
  353.          ADD  34
  354.          LD   L,A
  355.          LD   H,0
  356.          CALL SCHAR     L{ngd data
  357.          RETC
  358.          LD   A,(IX+22) Nummer p} packet
  359.          ADD  32
  360.          LD   E,A
  361.          LD   D,0
  362.          ADD  HL,DE
  363.          CALL SCHAR
  364.          RETC
  365.          LD   A,(IX+25) Typ av packet
  366.          LD   E,A
  367.          LD   D,0
  368.          ADD  HL,DE
  369.          CALL SCHAR
  370.          RETC
  371.          LD   A,(IX+24) L{ngd data
  372.          AND  A
  373.          JRZ  SPK8      Inget data
  374.          LD   B,A
  375.          LD   DE,BUFF4  Pekar p} data
  376. SPK7     LD   A,(DE)
  377.          INC  DE
  378.          PUSH DE
  379.          LD   E,A
  380.          LD   D,0
  381.          ADD  HL,DE     R{kna checksumma
  382.          POP  DE
  383.          CALL SCHARD    S{nd datatkn
  384.          RETC
  385.          DJNZ SPK7
  386. SPK8     LD   A,(IX+25)
  387.          CP   "S"
  388.          JRZ  SPK9      Packettyp S
  389.          LD   A,(IX+8)
  390.          CP   1
  391.          JRZ  SPK9      CH-typ 1
  392.          LD   A,H
  393.          LD   H,L
  394.          RLC  L
  395.          RLA
  396.          RLC  L
  397.          RLA            A = HL/64
  398.          AND  63
  399.          ADD  32
  400.          CALL SCHAR
  401.          RETC
  402.          LD   A,H
  403.          AND  63
  404.          ADD  32
  405.          CALL SCHAR
  406.          JRNC SPK10
  407.          RET
  408.  
  409. SPK9     LD   A,L
  410.          AND  192
  411.          RLCA
  412.          RLCA
  413.          AND  3         A = A/64
  414.          ADD  L
  415.          AND  63
  416.          ADD  32
  417.          CALL SCHAR
  418.          RETC
  419. SPK10    LD   A,(IX+15) EOL-tkn
  420.          CALL SCHAR
  421.          RET
  422.  
  423. DEBRUB   LD   (DEB2),A
  424.          PUSH HL
  425.          LD   HL,DEB1
  426.          LD   BC,DEB3-DEB1
  427.          CALL 0:11      Debug-rubrik
  428.          LD   A,12
  429.          LD   (253:244),A
  430.          LD   A,(IX+25) Typ av packet
  431.          LD   (SLASK),A
  432.          LD   HL,SLASK
  433.          LD   BC,1
  434.          CALL 0:11
  435.          LD   A,19
  436.          LD   (253:244),A
  437.          LD   L,(IX+22) Nummer p} packet
  438.          LD   H,0
  439.          CALL SKRIVTAL
  440.          LD   A,30
  441.          LD   (253:244),A
  442.          LD   L,(IX+24) L{ngd data
  443.          LD   H,0
  444.          CALL SKRIVTAL
  445.          CALL 7:66
  446.          POP  HL
  447.          RET
  448.  
  449. DEB1     DB 13,10
  450. DEB2     DM "Spack  type=   "
  451.          DM "seq=    length="
  452. DEB3
  453.  
  454. DEBCHAR  PUSH HL
  455.          PUSH DE
  456.          PUSH BC
  457.          LD   HL,SLASK
  458.          LD   BC,1
  459.          CALL 0:11
  460.          POP  BC
  461.          POP  DE
  462.          POP  HL
  463.          RET
  464.  
  465. SCHARD   LD   (SLASK),A
  466.          LD   A,(DEBUG)
  467.          DEC  A
  468.          CALLZ DEBCHAR
  469.          LD   A,(SLASK)
  470.          CALL SCHAR
  471.          RET
  472.  
  473. SCHAR    LD   C,A
  474.          LD   A,(DEBUG)
  475.          CP   2
  476.          LD   A,C
  477.          CALLZ DITTO
  478.          CALL S[ND
  479.          RETC
  480.          CALL EVBRYT
  481.          AND  A
  482.          RET
  483.  
  484. DITTO    PUSH HL
  485.          LD   HL,(DITTO1)
  486.          LD   (HL),A
  487.          INC  HL
  488.          LD   (DITTO1),HL
  489.          POP  HL
  490.          RET
  491.  
  492. DITTO1   DW 135:0
  493.  
  494. EVBRYT   PUSH HL
  495.          PUSH BC
  496.          CALL TAN       Polla tangenter
  497.          CALL CHECKTAN  H{mta ev tangent
  498.          POP  BC
  499.          POP  HL
  500.          RETNC          Ingen tangent
  501.          BIT  5,(IX+0)
  502.          RETZ           Ignorera!
  503.          CP   24
  504.          JRZ  EVB1      CTRL-X
  505.          CP   26
  506.          RETNZ          Ej CTRL-Z
  507. EVB1     ADD  64
  508.          LD   (IX+37),A
  509.          LD   (EVB3),A
  510.          LD   A,32
  511.          LD   (253:244),A
  512.          PUSH HL
  513.          PUSH DE
  514.          PUSH BC
  515.          LD   HL,EVB2
  516.          LD   BC,EVB4-EVB2
  517.          CALL WRITE
  518.          POP  BC
  519.          POP  DE
  520.          POP  HL
  521.          RET
  522.  
  523. EVB2     DM "CTRL-"
  524. EVB3     DM "x"
  525. EVB4
  526.  
  527. ;Packa upp data
  528. UNPACK   LD   HL,BUFF3  Pekar p} data
  529.          LD   A,(IX+24)
  530.          INC  A
  531.          LD   (IX+28),A
  532.          CALL UPK1
  533.          RETC
  534.          CALL TOFIL
  535.          RET
  536.  
  537. UPK1     LD   DE,BUFF5
  538.          LD   (IX+27),0
  539. UPK2     AND  A         Clear carry
  540.          DEC  (IX+28)
  541.          RETZ           Inget mer data
  542.          LD   A,(HL)
  543.          INC  HL
  544.          LD   BC,1:0
  545.          CP   (IX+19)
  546.          JRNZ UPK3      Ej REPT
  547.          AND  A
  548.          JRZ  UPK3
  549.          DEC  (IX+28)
  550.          RETZ
  551.          DEC  (IX+28)
  552.          RETZ
  553.          LD   A,(HL)
  554.          SUB  32
  555.          LD   B,A
  556.          INC  HL
  557.          LD   A,(HL)
  558.          INC  HL
  559. UPK3     CP   (IX+17)
  560.          JRNZ UPK4      Ej QBIN
  561.          AND  A
  562.          JRZ  UPK4
  563.          DEC  (IX+28)
  564.          RETZ
  565.          LD   C,128
  566.          LD   A,(HL)
  567.          INC  HL
  568. UPK4     CP   (IX+16)
  569.          JRNZ UPK6      Ej QCTL
  570.          AND  A
  571.          JRZ  UPK6
  572.          DEC  (IX+28)
  573.          RETZ
  574.          LD   A,(HL)
  575.          INC  HL
  576.          BIT  7,A
  577.          JRZ  UPK5
  578.          LD   C,128
  579. UPK5     AND  127
  580.          CP   (IX+16)
  581.          JRZ  UPK6      QCTL
  582.          CP   (IX+17)
  583.          JRZ  UPK6      QBIN
  584.          CP   (IX+19)
  585.          JRZ  UPK6      REPT
  586.          XOR  64
  587. UPK6     OR   C
  588. UPK7     LD   (DE),A
  589.          INC  DE
  590.          INC  (IX+27)
  591.          DJNZ UPK7
  592.          JPP  UPK2
  593.          CALL TOFIL
  594.          JRNC UPK1
  595.          RET
  596.  
  597. TOFIL    LD   A,(IX+27)
  598.          AND  A
  599.          RETZ
  600.          PUSH HL
  601.          LD   HL,BUFF5
  602.          LD   C,A
  603.          LD   B,0
  604.          PUSH BC
  605.          CALL PUTFIL
  606.          POP  BC
  607.          LD   HL,(ANTBYTES)
  608.          ADD  HL,BC
  609.          LD   (ANTBYTES),HL
  610.          POP  HL
  611.          RET
  612.  
  613. ;Packa data att s{nda
  614. PACK     LD   HL,BUFF4
  615.          LD   (IX+24),0 L{ngd data
  616.          LD   C,(IX+9)
  617. PK1      LD   A,(IX+11)
  618.          SUB  8
  619.          SUB  (IX+24)
  620.          CCF
  621.          RETNC          Packet full
  622.          PUSH HL
  623.          PUSH BC
  624.          CALL GETFIL    H{mta ett tecken
  625.          POP  BC
  626.          POP  HL
  627.          RETC           EOF eller ERROR
  628.          LD   E,A       Spara tecken
  629.          LD   A,(IX+9)  Kolla om ej REPT
  630.          AND  A
  631.          JR   Z,PK11
  632.          CP   E
  633.          JRZ  PK4       REPT-tkn
  634.          LD   A,E       Tillbaks med tecknet i A
  635.          CP   C
  636.          JRZ  PK2       Samma som f|rut!
  637.  
  638. PK11     LD   C,A       Kom ih}g tecknet
  639.          LD   B,1       Repeatr{knare
  640.          LD   (IX+34),L
  641.          LD   (IX+35),H Spara pekare
  642.          LD   A,(IX+24)
  643.          LD   (IX+36),A Spara l{ngd
  644.          JR   PK4
  645.  
  646. PK2      INC  B         \ka repeatantal
  647.          LD   A,B
  648.          CP   4
  649.          JRC  PK4       Mindre {n 4 lika
  650.          CP   94
  651.          JRC  PK3       Max 94 repeat!
  652.          LD   C,(IX+9)
  653. PK3      LD   L,(IX+34)
  654.          LD   H,(IX+35) ]terst{ll pekare
  655.          LD   A,(IX+36)
  656.          LD   (IX+24),A ]terst{ll l{ngd
  657.          LD   A,(IX+9)
  658.          LD   (HL),A    REPT-tecken
  659.          INC  HL
  660.          INC  (IX+24)
  661.          LD   A,B       Antal repeat
  662.          ADD  32
  663.          LD   (HL),A
  664.          INC  HL
  665.          INC  (IX+24)
  666. PK4      BIT  7,E
  667.          JRZ  PK5       Ej }ttabitsdata
  668.          LD   A,(IX+7)
  669.          AND  A
  670.          JRZ  PK5       Ej QBIN
  671.          LD   (HL),A
  672.          INC  HL
  673.          INC  (IX+24)
  674.          RES  7,E
  675. PK5      LD   A,E
  676.          CP   32
  677.          JRC  PK6       Tecken < 32
  678.          CP   127
  679.          JRZ  PK6
  680.          AND  127
  681.          CP   (IX+6)
  682.          JRZ  PK6       QCTL
  683.          CP   (IX+9)
  684.          JRZ  PK6       REPT
  685.          CP   (IX+7)
  686.          JRNZ PK8       Ej QBIN
  687.          AND  A
  688.          JRZ  PK8       QBIN anv{nds ej
  689. PK6      LD   A,(IX+6)
  690.          LD   (HL),A
  691.          INC  HL
  692.          INC  (IX+24)
  693.          LD   A,E
  694.          CP   32
  695.          JRC  PK7
  696.          CP   127
  697.          JRNZ PK8
  698. PK7      XOR  64
  699.          LD   E,A
  700. PK8      LD   (HL),E
  701.          INC  HL
  702.          INC  (IX+24)
  703.          JP   PK1
  704.