home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / luxorabc80 / kerm5.asm < prev    next >
Assembly Source File  |  2020-01-01  |  15KB  |  629 lines

  1. ; KERM5.ASM
  2. ; Anders Franz`n <5258>
  3. ; Stockholm 1987-09-24
  4.  
  5. PACKNR   DW 0
  6. ANTBYTES DW 0
  7. ANTBUF   DW 0
  8. NAKNR    DW 0
  9. KERMAREA DS 40
  10. FIL      DS 15
  11.          DB 0
  12.  
  13. ;Ta emot en fil som s{nds med Kermit
  14. RECEIVE  INP  58
  15.          AND  2
  16.          JPNZ TIMEOUT   Ingen b{rv}g
  17.          LD   HL,KTXT1
  18.          LD   BC,KTXT2-KTXT1
  19.          CALL WRITE
  20.          LD   IX,KERMAREA
  21.          LD   (IX+0),0  Inga flaggor
  22.          CALL RDEFAULT
  23.          LD   A,(TIME)
  24.          LD   (IX+12),A Default maxtid
  25.          LD   (IX+8),1  Start CH-typ
  26.          LD   (IX+23),0 Packetr{knare
  27.          LD   (IX+26),"S"
  28. RE1      LD   A,(RETRY)
  29.          LD   (IX+20),A Max ant f|rs|k
  30.          JR   RE3
  31.  
  32. RE2      DEC  (IX+20)
  33.          JPZ  TIMEOUT   F|r m}nga f|rs|k
  34.          LD   A,(IX+26)
  35.          CP   "D"
  36.          JRNZ RE3       V{ntar ej data
  37.          LD   HL,(NAKNR) R{kna antalet
  38.          INC  HL         felaktiga paket
  39.          LD   (NAKNR),HL
  40.          CALL SKRIVFIL
  41. RE3      BIT  3,(IX+0)
  42.          JPNZ TIMEOUT   ESCAPE
  43.          LD   A,(IX+12)
  44.          LD   (IX+21),A S{tt tid kvar
  45.          LD   A,(IX+26)
  46.          CP   "S"
  47.          JPZ  RINIT     Kermitparametrar
  48.          CP   "F"
  49.          JPZ  RFIL      Filhuvud
  50.          CP   "D"
  51.          JPZ  RDATA     Data i fil
  52.          RET            Klart
  53.  
  54. ;V{nta p} Kermitparametrar
  55. RINIT    CALL GPACK     Ta emot packet
  56.          JPC  RE2       Fel, f|rs|k igen
  57.          LD   A,(IX+25)
  58.          CP   "E"
  59.          JPZ  RERROR    Avbryt!
  60.          CP   "S"
  61.          JPNZ RE2       Fel packettyp
  62.          LD   HL,KTXT2
  63.          LD   BC,KTXT3-KTXT2
  64.          CALL WRITE
  65.          CALL RFIX
  66.          LD   C,(IX+8)
  67.          PUSH BC
  68.          LD   (IX+8),1  CH-typ 1
  69.          LD   (IX+24),9
  70.          LD   (IX+25),"Y"
  71.          CALL SPACK     Positivt svar
  72.          POP  BC
  73.          LD   (IX+8),C
  74.          JPC  TIMEOUT   Time out
  75.          LD   HL,KTXT4
  76.          LD   BC,KTXT5-KTXT4
  77.          CALL WRITE     Filrubrik
  78.          LD   A,(IX+23)
  79.          INC  A
  80.          AND  63
  81.          LD   (IX+23),A
  82.          LD   (IX+26),"F"
  83.          JP   RE1
  84.  
  85. ;V{nta p} filhuvud
  86. RFIL     CALL GPACK     Ta emot packet
  87.          JPC  RE2       Fel, f|rs|k igen
  88.          LD   A,(IX+25)
  89.          CP   "S"
  90.          JPZ  RFIL1     Oms{ndning
  91.          CP   "Z"
  92.          JPZ  RFIL5     Oms{ndning
  93.          CP   "F"
  94.          JPZ  RFIL6     Filnamn
  95.          CP   "B"
  96.          JPZ  RBREAK    Break
  97.          CP   "E"
  98.          JPZ  RERROR
  99.          JP   FELPACK
  100.  
  101. ;Behandla oms{ndning parametrar
  102. RFIL1    LD   A,(IX+23)
  103.          DEC  A
  104.          CP   (IX+22)
  105.          JPNZ RE2       Ej oms{ndning
  106.          CALL RFIX
  107.          LD   C,(IX+8)
  108.          PUSH BC
  109.          LD   (IX+8),1  CH-typ 1
  110.          LD   (IX+24),9
  111.          LD   (IX+25),"Y"
  112.          CALL SPACK     Positivt svar
  113.          POP  BC
  114.          LD   (IX+8),C
  115.          JPNC RE1
  116.          JP   TIMEOUT
  117.  
  118. ;Fixa parametrar att s{nda
  119. RFIX     CALL RPARM
  120.          LD   A,(LENGTH)
  121.          LD   (IX+1),A
  122.          LD   A,(TIME)
  123.          LD   (IX+2),A
  124.          LD   A,(NUMPAD)
  125.          LD   (IX+3),A
  126.          LD   A,(PADCHAR)
  127.          LD   (IX+4),A
  128.          LD   A,(EOL)
  129.          LD   (IX+5),A
  130.          LD   A,(QCTL)
  131.          LD   (IX+6),A
  132.          LD   (IX+7),"Y" Vi klarar av
  133.          LD   A,(PARITET) ev QBIN
  134.          AND  A
  135.          JRZ  RFIX1     Paritet NONE
  136.          LD   A,(IX+17)
  137.          AND  A         S{ndare klarar
  138.          JRZ  RFIX2     ej av QBIN
  139.          LD   (IX+7),A
  140.          CP   "Y"       S{ndare beg{r
  141.          JRNZ RFIX2     QBIN
  142.          LD   A,(QBIN)
  143.          LD   (IX+7),A
  144.          LD   (IX+17),A
  145.          JR   RFIX2     Vi beg{r QBIN
  146.  
  147. RFIX1    LD   A,(IX+17)
  148.          AND  A         S{ndare klarar
  149.          JRZ  RFIX2     ej av QBIN
  150.          LD   (IX+7),A
  151.          CP   "Y"       S{ndare beg{r
  152.          JRNZ RFIX2     QBIN
  153.          LD   (IX+17),0 Ingen vill ha
  154. RFIX2    LD   A,(CHECK)
  155.          LD   (IX+8),A
  156.          CP   (IX+18)
  157.          JRZ  RFIX3     B}da har samma
  158.          LD   (IX+8),1
  159.          LD   (IX+18),1
  160. RFIX3    LD   A,(IX+19)
  161.          LD   (IX+9),A
  162.          CALL SPARM
  163.          RET
  164.  
  165. ;Behandla oms{ndning EOF
  166. RFIL5    LD   A,(IX+23)
  167.          DEC  A
  168.          CP   (IX+22)
  169.          JPNZ RE2       Ej oms{ndning
  170.          LD   (IX+24),0 Inget data
  171.          LD   (IX+25),"Y"
  172.          CALL SPACK     Positivt svar
  173.          JPNC RE1
  174.          JP   TIMEOUT
  175.  
  176. ;Filnamn
  177. RFIL6    LD   A,(IX+23)
  178.          CP   (IX+22)
  179.          JPNZ RE2       Fel packetnr
  180.          LD   HL,0
  181.          LD   (PACKNR),HL
  182.          LD   (ANTBYTES),HL
  183.          LD   (ANTBUF),HL
  184.          LD   (NAKNR),HL
  185.          CALL CRLF      Ny rad
  186.          LD   HL,BUFF3  Peka p} data
  187.          LD   DE,255:128
  188.          LD   C,(IX+24) L{ngd filnamn
  189.          LD   B,0
  190.          PUSH HL
  191.          PUSH DE
  192.          CALL 0:65      Fixa filnamn
  193.          POP  HL
  194.          LD   BC,8
  195.          CALL WRITE
  196.          PUSH HL
  197.          LD   HL,KTXT6
  198.          LD   BC,1
  199.          CALL WRITE     "."
  200.          POP  HL
  201.          LD   BC,3
  202.          CALL WRITE     Extension
  203.          CALL SKRIVFIL
  204.          POP  HL
  205.          LD   (IX+37),0 Ej CTRL-XZ {nnu
  206.          SET  5,(IX+0)  Till}t CTRL-XZ
  207.          PUSH HL
  208.          LD   E,(IX+24) L{ngd data
  209.          LD   D,0
  210.          ADD  HL,DE
  211.          LD   (HL),13   Slut p} filnamn
  212.          POP  HL        Pekar p} filnamn
  213.          LD   DE,(FILPEK)
  214.          LD   A,(DE)
  215.          CP   13
  216.          JRZ  RFIL7
  217.          EX   DE,HL     Lokalt filnamn
  218. RFIL7    LD   A,(ACCESS)
  219.          AND  A         Strunta i om
  220.          JRZ  RFIL8     filen finns
  221.          PUSH HL
  222.          PUSH IX
  223.          CALL OPEN
  224.          POP  IX
  225.          POP  HL        Pekar p} filnamn
  226.          JRNC RFIL9     Filen finns!
  227.          AND  127
  228.          CP   21
  229.          JPNZ FELFIL    Annat fel
  230. RFIL8    PUSH IX
  231.          CALL PREPARE
  232.          POP  IX
  233.          JPNC RFIL13    Det gick bra
  234.          JP   FELFIL
  235.  
  236. RFIL9    LD   A,(ACCESS)
  237.          CP   1
  238.          JRZ  RFIL12    Kill
  239.          LD   HL,RFIL10
  240.          LD   BC,RFIL12-RFIL10
  241.          CALL WRITE
  242.          LD   HL,RFIL11
  243.          LD   BC,RFIL12-RFIL11
  244.          LD   (IX+24),C
  245.          LD   DE,BUFF4
  246.          LDIR
  247.          LD   (IX+25),"E"
  248.          CALL SPACK     Error!
  249.          JP   AVBRYT
  250.  
  251. RFIL10   DM 13,10,7
  252. RFIL11   DM "File already "
  253.          DM "exists on disk"
  254.  
  255. RFIL12   PUSH HL
  256.          PUSH IX
  257.          LD   IX,FIL
  258.          LD   DE,8:159
  259.          CALL FILCONTR  Kill
  260.          POP  IX
  261.          POP  HL        Pekar p} filnamn
  262.          JPNC RFIL8     Forts{tt...
  263.          JP   FELFIL
  264.  
  265. RFIL13   LD   HL,(ANTBUF)
  266.          INC  HL
  267.          LD   (ANTBUF),HL
  268.          CALL SKRIVFIL
  269.          LD   (IX+29),0 Filtyp ok{nd
  270.          LD   (IX+24),0
  271.          LD   (IX+25),"Y"
  272.          LD   A,(IX+37)
  273.          AND  A
  274.          JRZ  RFIL14    Ej CTRL-XZ
  275.          LD   (BUFF4),A S{nd tkn i ACK!
  276.          INC  (IX+24)   L{ngd ett
  277.          SET  4,(IX+0)  V{nta p} Z-pack
  278.          RES  5,(IX+0)  F|rbjud CTRL-XZ
  279. RFIL14   CALL SPACK     Positivt svar
  280.          JPC  TIMEOUT
  281.          LD   HL,(PACKNR)
  282.          INC  HL
  283.          LD   (PACKNR),HL
  284.          CALL SKRIVFIL
  285.          LD   A,(IX+23)
  286.          INC  A
  287.          AND  63
  288.          LD   (IX+23),A
  289.          LD   (IX+26),"D"
  290.          JP   RE1
  291.  
  292. ;Break
  293. RBREAK   LD   A,(IX+23)
  294.          CP   (IX+22)
  295.          JPNZ RE2       Fel packetnr
  296.          LD   (IX+24),0
  297.          LD   (IX+25),"Y"
  298.          CALL SPACK     Positivt svar
  299.          JPC  TIMEOUT
  300.          LD   (IX+26),"C"
  301.          JP   RE1
  302.  
  303. RDATA    CALL GPACK     Ta emot packet
  304.          JPC  RE2       Fel, f|rs|k igen
  305.          LD   A,(IX+25)
  306.          CP   "Z"
  307.          JPZ  REOF      EOF
  308.          CP   "E"
  309.          JPZ  RERROR
  310.          BIT  4,(IX+0)  S{ndaren klarar
  311.          JPNZ REOF1     inte av CTRL-XZ
  312.          CP   "D"
  313.          JPZ  RDATA1    Data
  314.          CP   "F"
  315.          JPZ  RDATA3    Oms{ndning
  316.          JP   FELPACK
  317.  
  318. ;Data i fil
  319. RDATA1   LD   A,(IX+23)
  320.          CP   (IX+22)
  321.          JRNZ RDATA3    Fel packetnr
  322.          CALL UNPACK    Packa upp data
  323.          JPC  FELFIL    Fel vid skrivn
  324.          LD   HL,(PACKNR)
  325.          INC  HL
  326.          LD   (PACKNR),HL
  327.          CALL SKRIVFIL
  328.          LD   (IX+24),0
  329.          LD   (IX+25),"Y"
  330.          LD   A,(IX+37)
  331.          AND  A
  332.          JRZ  RDATA2    Ej CTRL-XZ
  333.          LD   (BUFF4),A S{nd tkn i ACK!
  334.          INC  (IX+24)   L{ngd ett
  335.          SET  4,(IX+0)  V{nta p} Z-pack
  336.          RES  5,(IX+0)  F|rbjud CTRL-XZ
  337. RDATA2   CALL SPACK     Positivt svar
  338.          JPC  TIMEOUT
  339.          LD   A,(IX+23)
  340.          INC  A
  341.          AND  63
  342.          LD   (IX+23),A
  343.          JP   RE1
  344.  
  345. ;Behandla oms{ndning filnamn el data
  346. RDATA3   LD   A,(IX+23)
  347.          DEC  A
  348.          CP   (IX+22)
  349.          JPNZ RE2       Ej oms{ndning
  350.          LD   (IX+24),0
  351.          LD   (IX+25),"Y"
  352.          CALL SPACK     Positivt svar
  353.          JPNC RE1
  354.          JP   TIMEOUT
  355.  
  356. ;End Of File
  357. REOF     LD   A,(IX+23)
  358.          CP   (IX+22)
  359.          JPNZ RE2       Fel packetnr
  360.          RES  5,(IX+0)  F|rbjud CTRL-XZ
  361.          BIT  4,(IX+0)
  362.          JRZ  REOF2     Ej CTRL-XZ
  363.          LD   A,(IX+24) L{ngd packet
  364.          AND  A
  365.          JRZ  REOF1     Tom
  366.          DEC  A
  367.          JRNZ REOF1     Mer {n ett tkn
  368.          LD   A,(BUFF3) Data i packet
  369.          CP   "D"
  370.          JRNZ REOF1     Ej "avbryt"
  371.          RES  4,(IX+0)  CTRL-XZ funkade
  372. REOF1    PUSH IX
  373.          LD   IX,FIL
  374.          LD   DE,8:159
  375.          CALL FILCONTR  Kill
  376.          POP  IX
  377.          JPC  FELFIL
  378.          LD   A,32
  379.          LD   (253:244),A
  380.          LD   HL,KTXT7
  381.          LD   BC,KTXT8-KTXT7
  382.          CALL WRITE
  383.          BIT  4,(IX+0)
  384.          JRZ  REOF6     CTRL-XZ funkade
  385.          LD   HL,REOF7
  386.          LD   BC,REOF8-REOF7
  387.          LD   DE,BUFF4
  388.          LD   (IX+24),C
  389.          LDIR
  390.          LD   (IX+25),"E"
  391.          CALL SPACK     Error!
  392.          JP   AVBRYT
  393.  
  394. REOF2    LD   A,(IX+29) Typ av fil
  395.          PUSH IX
  396.          LD   IX,FIL
  397.          CP   1
  398.          JRZ  REOF3     Textfil
  399.          BIT  7,(IX+14)
  400.          JRZ  REOF4     Buffert tom
  401.          CALL 8:156     Skriv buffert
  402.          RES  7,(IX+14) Buffert tom
  403. REOF3    LD   HL,(ANTBUF)
  404.          INC  HL
  405.          LD   (ANTBUF),HL
  406. REOF4    LD   DE,8:127
  407.          CALL FILCONTR  Close
  408.          POP  IX
  409.          JRNC REOF5
  410.          CALL SKRIVERR
  411.          JR   REOF6
  412.  
  413. REOF5    LD   A,32
  414.          LD   (253:244),A
  415.          LD   HL,KTXT5
  416.          LD   BC,KTXT6-KTXT5
  417. REOF6    CALL WRITE
  418.          LD   (IX+24),0
  419.          LD   (IX+25),"Y"
  420.          CALL SPACK     Positivt svar
  421.          JPC  TIMEOUT
  422.          LD   A,(IX+23)
  423.          INC  A
  424.          AND  63
  425.          LD   (IX+23),A
  426.          LD   (IX+26),"F"
  427.          JP   RE1
  428.  
  429. REOF7    DM "User interrupt"
  430. REOF8
  431.  
  432. ;Skriv data p} fil
  433. PUTFIL   LD   A,(IX+29) Typ av fil
  434.          CP   1
  435.          JRZ  PF2       Textfil
  436.          CP   2
  437.          JRZ  PF5       Bin{rfil
  438.          LD   A,(FILE)
  439.          AND  A
  440.          JRZ  PF1       Textfil
  441.          CP   1
  442.          JRZ  PF4       Bin{rfil
  443.          LD   A,(HL)    Annars unders|k
  444.          AND  A         byte i filen!
  445.          JRZ  PF4       ABS-fil
  446.          CP   128
  447.          JRNC PF4       Annan bin{rfil
  448. PF1      LD   (IX+29),1 Typ textfil
  449. PF2      PUSH IX
  450.          LD   IX,FIL
  451.          LD   E,(IX+13)
  452.          PUSH DE
  453.          LD   DE,8:150
  454.          CALL FILCONTR  Skriv rad
  455.          POP  DE
  456.          POP  IX
  457.          RETC
  458.          LD   A,(FIL+13)
  459.          CP   E
  460.          CCF
  461.          RETNC
  462.          LD   HL,(ANTBUF)
  463.          INC  HL
  464.          LD   (ANTBUF),HL
  465.          AND  A
  466.          RET
  467.  
  468. PF4      LD   (IX+29),2 Typ bin{rfil
  469.          PUSH IX
  470.          LD   IX,FIL
  471.          INC  (IX+13)
  472.          LD   A,(IX+9)
  473.          POP  IX
  474.          AND  A
  475.          LD   A,52      ERR 52
  476.          SCF
  477.          RETZ           Buffert saknas
  478. PF5      PUSH IX
  479.          LD   IX,FIL
  480.          LD   E,(IX+10) Position i buff
  481.          LD   D,(IX+11)
  482. PF6      LD   A,B
  483.          OR   C
  484.          JRZ  PF7
  485.          LDI            L{gg tkn i buff
  486.          SET  7,(IX+14) Data i buffert
  487.          DEC  (IX+13)   Kvar i buffert
  488.          JRNZ PF6       Buffert ej full
  489.          PUSH HL
  490.          PUSH BC
  491.          CALL 8:156     Skriv buffert
  492.          LD   HL,(ANTBUF)
  493.          INC  HL
  494.          LD   (ANTBUF),HL
  495.          POP  BC
  496.          POP  HL
  497.          RES  7,(IX+14) Buffert tom
  498.          INC  (IX+13)
  499.          JR   PF6
  500.  
  501. PF7      LD   (IX+10),E
  502.          LD   (IX+11),D
  503.          POP  IX
  504.          RET
  505.  
  506. KTXT1    DB 13,10
  507.          DM "Waiting for init packet",13
  508. KTXT2    DM "Init packet received   ",13
  509. KTXT3    DB 13,10
  510.          DM "Sending init packet",13
  511. KTXT4    DM "filename      bad "
  512.          DM "pkt bytes blk status"
  513. KTXT5    DM "OK    "
  514. KTXT6    DM "."
  515. KTXT7    DM "FLUSH "
  516. KTXT8    DM "ERR "
  517. KTXT9    DM "("
  518. KTXT10   DM ")"
  519.  
  520.  
  521. ;Visa text i errorpacket p} sk{rm
  522. RERROR   LD   HL,RERR1
  523.          LD   BC,RERR2-RERR1
  524.          CALL WRITE
  525.          LD   HL,BUFF3  Peka p} data
  526.          LD   C,(IX+24) L{ngd data
  527.          LD   B,0
  528.          CALL WRITE     Skriv text
  529.          JP   AVBRYT
  530.  
  531. RERR1    DM 13,10
  532.          DM "Received message:"
  533.          DM 13,10
  534. RERR2    EQU  $
  535.  
  536. ;Fel vid filhantering, s{nd error
  537. FELFIL   PUSH AF
  538.          CALL SKRIVERR  Skriv p} sk{rm
  539.          POP  AF
  540.          LD   (IX+24),0
  541.          OR   128
  542.          LD   HL,FELF4
  543.          LD   BC,FELF5-FELF4
  544.          CPIR
  545.          JRNZ FELF3
  546.          DEC  HL        Peka p} kod
  547. FELF1    INC  HL
  548.          BIT  7,(HL)
  549.          JRNZ FELF1     Skippa highbyte
  550.          PUSH HL
  551.          LD   BC,0
  552. FELF2    INC  HL
  553.          INC  BC
  554.          BIT  7,(HL)
  555.          JRZ  FELF2
  556.          POP  HL
  557.          LD   (IX+24),C
  558.          LD   DE,BUFF4
  559.          LDIR
  560. FELF3    LD   (IX+25),"E"
  561.          CALL SPACK     Error!
  562.          JP   AVBRYT
  563.  
  564. FELF4    DM 128+21
  565.          DM "Can't find file"
  566.          DM 128+35
  567.          DM 128+36
  568.          DM 128+37
  569.          DM 128+38
  570.          DM 128+44
  571.          DM 128+45
  572.          DM 128+46
  573.          DM 128+47
  574.          DM 128+48
  575.          DM 128+49
  576.          DM "I/O-error"
  577.          DM 128+39
  578.          DM 128+43
  579.          DM "Writeprotection"
  580.          DM 128+41
  581.          DM "Disk full"
  582.          DM 128+42
  583.          DM "Disk not ready"
  584.          DM 255
  585. FELF5    EQU  $
  586.  
  587. FELPACK  LD   HL,FPK1
  588.          LD   BC,FPK3-FPK1
  589.          CALL WRITE
  590.          LD   HL,FPK2
  591.          LD   BC,FPK3-FPK1
  592.          LD   (IX+24),C
  593.          LD   DE,BUFF4
  594.          LDIR
  595.          LD   (IX+25),"E"
  596.          CALL SPACK     S{nd error
  597.          JR   AVBRYT
  598.  
  599. FPK1     DM 10,13
  600. FPK2     DM "Wrong packet received"
  601. FPK3     EQU  $
  602.  
  603. TIMEOUT  INP  58
  604.          AND  2
  605.          LD   HL,TIM2
  606.          LD   BC,TIM3-TIM2
  607.          JRNZ TIM1      Ingen b{rv}g
  608.          BIT  3,(IX+0)
  609.          LD   HL,TIM3
  610.          LD   BC,TIM4-TIM3
  611.          JRNZ TIM1      ESCAPE nedtryckt
  612.          LD   HL,TIM4
  613.          LD   BC,TIM5-TIM4
  614. TIM1     CALL 0:11
  615. AVBRYT   PUSH IX
  616.          LD   IX,FIL
  617.          LD   DE,8:127
  618.          CALL FILCONTR  Close
  619.          POP  IX
  620.          CALLC SKRIVERR
  621.          LD   (IX+26),"A"
  622.          SCF
  623.          RET
  624.  
  625. TIM2     DM 13,10,7,"No connection"
  626. TIM3     DM 13,10,7,"Abort"
  627. TIM4     DM 13,10,7,"Timeout"
  628. TIM5     EQU $
  629.