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

  1. ; KERM6.ASM
  2. ; Anders Franz`n <5258>
  3. ; Stockholm 1987-09-13
  4.  
  5.  
  6. ;S{nd en eller flera fil med Kermit
  7. SEND     INP  58
  8.          AND  2
  9.          JPNZ TIMEOUT   B{rv}g saknas
  10.          LD   HL,KTXT3
  11.          LD   BC,KTXT4-KTXT3
  12.          CALL WRITE
  13.          LD   IX,KERMAREA
  14.          LD   (IX+0),0
  15.          LD   (IX+23),0 Packetr{knare
  16.          LD   A,(LENGTH)
  17.          LD   (IX+1),A
  18.          LD   A,(TIME)
  19.          LD   (IX+2),A
  20.          LD   A,(NUMPAD)
  21.          LD   (IX+3),A
  22.          LD   A,(PADCHAR)
  23.          LD   (IX+4),A
  24.          LD   A,(EOL)
  25.          LD   (IX+5),A
  26.          LD   A,(QCTL)
  27.          LD   (IX+6),A
  28.          LD   (IX+7),"Y"
  29.          LD   A,(PARITET)
  30.          AND  A
  31.          JRZ  SE1       Paritet NONE
  32.          LD   A,(QBIN)
  33.          LD   (IX+7),A  Vi beg{r QBIN
  34. SE1      LD   A,(CHECK)
  35.          LD   (IX+8),A
  36.          LD   A,(REPT)
  37.          LD   (IX+9),A
  38.          CALL RDEFAULT
  39.          CALL SPARM
  40.          LD   C,(IX+8)
  41.          PUSH BC
  42.          LD   (IX+8),1  CH-typ 1
  43.          LD   (IX+24),9
  44.          LD   (IX+25),"S"
  45.          CALL PPACK     S{nd parametrar
  46.          POP  BC
  47.          LD   (IX+8),C
  48.          JPC  TIMEOUT   Time out
  49.          CALL RPARM
  50.          LD   A,(PARITET)
  51.          AND  A
  52.          JRZ  SE2       Paritet NONE
  53.          LD   A,(IX+17)
  54.          CP   (IX+7)
  55.          JRZ  SE3       B}da vill QBIN
  56.          CP   "Y"
  57.          JRZ  SE3
  58.          LD   (IX+7),0  Mottagaren
  59.          JR   SE3       klarar ej QBIN
  60.  
  61. SE2      LD   (IX+7),0
  62.          LD   A,(IX+17)
  63.          AND  A         S{ndare klarar
  64.          JRZ  SE3       ej QBIN
  65.          CP   "Y"
  66.          JRZ  SE3       Ingen vill QBIN
  67.          LD   (IX+7),A  S{ndare vill
  68. SE3      LD   A,(IX+8)
  69.          CP   (IX+18)
  70.          JRZ  SE4
  71.          LD   (IX+8),1
  72.          LD   (IX+18),1
  73. SE4      LD   A,(IX+9)
  74.          CP   (IX+19)
  75.          JRZ  SE5
  76.          LD   (IX+9),0
  77.          LD   (IX+19),0
  78. SE5      LD   HL,KTXT4
  79.          LD   BC,KTXT5-KTXT4
  80.          CALL WRITE     Skriv filrubrik
  81. SE6      CALL CRLF      Ny rad
  82.          LD   HL,0
  83.          LD   (PACKNR),HL
  84.          LD   (ANTBYTES),HL
  85.          LD   (ANTBUF),HL
  86.          LD   (NAKNR),HL
  87.          LD   A,(WILDFLG)
  88.          AND  A
  89.          JRZ  SE9       Ej wildcard
  90.          BIT  7,(IX+0)
  91.          JRNZ SE8       Drive initierad
  92.          SET  7,(IX+0)
  93.          XOR  A
  94.          LD   (255:212),A Filstorlek
  95. SE7      LD   BC,(WILDANT)
  96.          DEC  B
  97.          JPM  SE20      Slut p} drivear
  98.          LD   A,C       Drivenummer
  99.          INC  C
  100.          LD   (WILDANT),BC
  101.          CALL LIBINIT
  102.          JRC  SE7
  103.          CALL FIRSTFIL
  104.          JRC  SE7
  105.          JRZ  SE7       Drive tom
  106.          JR   SE9
  107.  
  108. SE8      CALL NEXTFIL
  109.          JRC  SE7
  110.          JRZ  SE7       N{sta drive
  111. SE9      LD   HL,255:132 Fil utan enhet
  112.          LD   DE,BUFF4
  113.          LD   (IX+24),-1 L{ngd data
  114.          LD   BC,(FILPEK)
  115.          LD   A,(BC)
  116.          CP   13
  117.          JRZ  SE10      Samma fil remote
  118.          LD   L,C
  119.          LD   H,B
  120. SE10     RST  32
  121.          INC  HL
  122.          LD   (DE),A    Kopiera filnamn
  123.          INC  DE
  124.          INC  (IX+24)   R{kna antal tkn
  125.          CP   13
  126.          JRNZ SE10
  127.          LD   HL,255:132 Fil utan enhet
  128.          LD   BC,12     L{ngd filnamn
  129.          CALL WRITE     Skriv filnamn
  130.          CALL SKRIVFIL
  131.          LD   A,(WILDFLG)
  132.          AND  A
  133.          JRZ  SE11      Ej wildcard
  134.          LD   A,32+1
  135.          LD   (253:244),A
  136.          LD   HL,KTXT9
  137.          LD   BC,1
  138.          CALL WRITE     "("
  139.          LD   A,(DEBUG)
  140.          DEC  A
  141.          LD   HL,(255:146)
  142.          CALLNZ SKRIVTAL Filstorlek
  143.          LD   HL,KTXT10
  144.          LD   BC,1
  145.          CALL WRITE     ")"
  146. SE11     LD   HL,255:128 Filnamn
  147.          RST  32
  148.          PUSH IX
  149.          CALL OPEN
  150.          POP  IX
  151.          JRNC SE12      Det gick bra
  152.          CALL SKRIVERR
  153.          LD   A,(WILDFLG)
  154.          AND  A         Wildcard?
  155.          JPNZ SE6       Ja, n{sta fil
  156.          JP   SE20      S{nd BREAK
  157.  
  158. SE12     LD   (IX+37),0 Ej CTRL-XZ {nnu
  159.          SET  5,(IX+0)  Till}t CTRL-XZ
  160.          LD   (IX+27),0 Inget data l{st
  161.          LD   (IX+29),0 Ok{nd filtyp
  162.          LD   (IX+25),"F"
  163.          CALL PPACK     S{nd filhuvud
  164.          JPC  TIMEOUT   Time out
  165.          LD   HL,1
  166.          LD   (ANTBUF),HL
  167.          CALL SKRIVFIL
  168. SE13     LD   A,(IX+37)
  169.          AND  A
  170.          JPNZ SE18      Hoppa om CTRL-XZ
  171.          CALL PACK      Packa data
  172.          JRC  SE15      EOF eller ERROR
  173.          LD   (IX+25),"D"
  174.          CALL PPACK     S{nd data
  175.          JPC  TIMEOUT   Time out
  176.          CALL SKRIVFIL
  177.          LD   A,(IX+24)
  178.          AND  A
  179.          JRZ  SE13      Inget data i ACK
  180.          DEC  A
  181.          JRNZ SE13      Mer {n ett tkn
  182.          LD   A,(BUFF3)
  183.          CP   "X"
  184.          JRZ  SE14      X i ACK
  185.          CP   "Z"
  186.          JRNZ SE13      Ej Z i ACK
  187. SE14     RES  5,(IX+0)  F|rbjud CTRL-XZ
  188.          LD   (IX+37),A
  189.          JP   SE18
  190.  
  191. SE15     AND  A
  192.          JRZ  SE16      EOF
  193.          CALL SKRIVERR  Annat fel
  194.          JR   SE18
  195.  
  196. SE16     LD   A,(IX+24)
  197.          AND  A
  198.          JRZ  SE17      Inget mer data
  199.          LD   (IX+25),"D"
  200.          CALL PPACK     S{nd sista data
  201.          JPC  TIMEOUT   Time out
  202.          CALL SKRIVFIL
  203. SE17     LD   A,32
  204.          LD   (253:244),A
  205.          LD   HL,KTXT5
  206.          LD   BC,KTXT6-KTXT5
  207.          CALL WRITE     Skriv sluttext
  208. SE18     PUSH IX
  209.          LD   IX,FIL
  210.          LD   DE,8:127
  211.          CALL FILCONTR  Close
  212.          POP  IX
  213.          CALLC SKRIVERR
  214.          RES  5,(IX+0)  F|rbjud CTRL-XZ
  215.          LD   (IX+24),0
  216.          LD   (IX+25),"Z"
  217.          LD   A,(IX+37)
  218.          AND  A
  219.          JRZ  SE19      Ej CTRL-XZ
  220.          LD   A,32
  221.          LD   (253:244),A
  222.          LD   HL,KTXT7
  223.          LD   BC,KTXT8-KTXT7
  224.          CALL WRITE     Skriv avbryttext
  225.          LD   A,"D"
  226.          LD   (BUFF4),A
  227.          INC  (IX+24)
  228. SE19     CALL PPACK     S{nd EOF
  229.          JPC  TIMEOUT
  230.          LD   A,(IX+37)
  231.          CP   "Z"
  232.          JRZ  SE20      Skippa batch
  233.          LD   A,(WILDFLG)
  234.          AND  A         Wildcard?
  235.          JPNZ SE6       Ja, n{sta fil
  236. SE20     LD   (IX+24),0
  237.          LD   (IX+25),"B"
  238.          CALL PPACK     S{nd BRAKE
  239.          JPC  TIMEOUT
  240.          RET            Klart!
  241.  
  242. ;H{mta ett tecken fr}n fil
  243. ;Carry s{tts om EOF eller ERROR
  244. GETFIL   LD   A,(IX+27)
  245.          AND  A
  246.          JPNZ GF9       Data i buffert
  247.          LD   A,(IX+29) Typ av fil
  248.          CP   1
  249.          JRZ  GF1       Textfil
  250.          CP   2
  251.          JPZ  GF7       Bin{rfil
  252.          LD   A,(FILE)
  253.          AND  A
  254.          JRZ  GF1       Textfil
  255.          CP   1
  256.          JRZ  GF7       Bin{rfil
  257.          PUSH IX        Annars unders|k
  258.          LD   IX,FIL    filen...
  259.          LD   L,(IX+10)
  260.          PUSH HL
  261.          LD   HL,BUFF7
  262.          LD   BC,255
  263.          LD   DE,8:147
  264.          CALL FILCONTR  L{s rad
  265.          POP  HL
  266.          JRC  GF5       Kanske bin{rfil
  267.          JR   GF2       Annars textfil!
  268.  
  269. GF1      PUSH IX
  270.          LD   IX,FIL
  271.          LD   L,(IX+10)
  272.          PUSH HL
  273.          LD   HL,BUFF7
  274.          LD   BC,255
  275.          LD   DE,8:147
  276.          CALL FILCONTR  L{s rad
  277.          POP  HL
  278.          JRC  GF6       End of file
  279. GF2      LD   A,L
  280.          CP   (IX+10)
  281.          JRC  GF3
  282.          LD   HL,(ANTBUF)
  283.          INC  HL
  284.          LD   (ANTBUF),HL
  285. GF3      POP  IX
  286.          EX   DE,HL
  287.          LD   A,(IX+20)
  288.          AND  A
  289.          JRZ  GF4       Hoppa om DUMP
  290.          LD   (HL),10   Avsluta med LF
  291.          INC  HL        om Kermit
  292. GF4      LD   DE,BUFF7
  293.          SBC  HL,DE
  294.          EX   DE,HL
  295.          LD   (IX+27),E L{ngd p} rad
  296.          LD   (IX+29),1 Textfil
  297.          LD   (IX+32),L
  298.          LD   (IX+33),H
  299.          JR   GF9
  300.  
  301. GF5      CP   186
  302.          JRZ  GF8       Ogiltigt tecken
  303.          AND  A
  304.          JRZ  GF8       EOF dvs ABS-fil
  305. GF6      POP  IX
  306.          SCF
  307.          RET            EOF eller ERROR
  308.  
  309. GF7      PUSH IX
  310.          LD   IX,FIL
  311.          LD   DE,8:153
  312.          CALL FILCONTR  L{s buffert
  313.          LD   HL,(ANTBUF)
  314.          INC  HL
  315.          LD   (ANTBUF),HL
  316.          JRNC GF8       Inget fel
  317.          POP  IX
  318.          CP   38
  319.          SCF
  320.          RETNZ
  321.          LD   A,0
  322.          RET            Slut p} fil
  323.  
  324. GF8      LD   L,(IX+8)  Adress till
  325.          LD   H,(IX+9)  buffert
  326.          POP  IX
  327.          LD   (IX+27),253 L{ngd p} rad
  328.          LD   (IX+29),2 Bin{rfil
  329.          LD   (IX+32),L
  330.          LD   (IX+33),H
  331. GF9      LD   L,(IX+32)
  332.          LD   H,(IX+33)
  333.          LD   A,(HL)
  334.          INC  HL
  335.          LD   (IX+32),L
  336.          LD   (IX+33),H
  337.          DEC  (IX+27)
  338.          LD   HL,(ANTBYTES)
  339.          INC  HL
  340.          LD   (ANTBYTES),HL
  341.          AND  A
  342.          RET
  343.  
  344. ;S{nd packet, om negativt svar sker
  345. ;oms{ndning. Om f|r m}nga f|rs|k eller
  346. ;timeout sker retur med carry.
  347. PPACK    LD   A,(INBUFF)
  348.          LD   (INPOS),A T|m inputbuffer
  349.          LD   A,(RETRY)
  350.          INC  A
  351.          LD   (IX+20),A Max ant f|rs|k
  352.          LD   A,(IX+24)
  353.          LD   (IX+30),A L{ngd data
  354.          LD   A,(IX+25)
  355.          LD   (IX+31),A Typ att s{nda
  356. PPK1     BIT  3,(IX+0)
  357.          RETNZ          ESCAPE
  358.          DEC  (IX+20)
  359.          SCF
  360.          RETZ           F|r m}nga f|rs|k
  361.          LD   A,(IX+12)
  362.          LD   (IX+21),A S{tt tid kvar
  363.          LD   A,(IX+23)
  364.          LD   (IX+22),A Packetnr
  365.          LD   A,(IX+30)
  366.          LD   (IX+24),A L{ngd data
  367.          LD   A,(IX+31)
  368.          LD   (IX+25),A Typ att s{nda
  369.          CALL SPACK     S{nd packet
  370.          JRC  PPK1      Fel, f|rs|k igen
  371.          CALL RPACK     Ta emot svar
  372.          JRC  PPK5      Fel, r{kna fel
  373.          LD   A,(IX+25)
  374.          CP   "Y"
  375.          JRZ  PPK2
  376.          CP   "N"
  377.          JRZ  PPK4
  378.          CP   "E"
  379.          JPZ  RERROR
  380.          JP   FELPACK
  381.  
  382. PPK2     LD   A,(IX+22)
  383.          CP   (IX+23)
  384.          JRNZ PPK5      Fel packetnr
  385. PPK3     LD   A,(IX+23)
  386.          INC  A
  387.          AND  63        Clear carry!
  388.          LD   (IX+23),A
  389.          LD   HL,(PACKNR)
  390.          INC  HL
  391.          LD   (PACKNR),HL
  392.          RET
  393.  
  394. PPK4     LD   A,(IX+22)
  395.          DEC  A         NAK n+1 tolkas
  396.          CP   (IX+23)   som ACK n!
  397.          JRZ  PPK3
  398.          INC  A
  399.          CP   (IX+23)
  400.          JPNZ FELPACK   Fel packetnr
  401. PPK5     LD   A,(IX+31) Typ att s{nda
  402.          CP   "F"
  403.          JRZ  PPK6
  404.          CP   "D"
  405.          JRZ  PPK6
  406.          CP   "Z"
  407.          JPNZ PPK1
  408. PPK6     LD   HL,(NAKNR)
  409.          INC  HL
  410.          LD   (NAKNR),HL
  411.          CALL SKRIVFIL
  412.          JP   PPK1      Oms{ndning
  413.  
  414. SKRIVFIL LD   A,(DEBUG)
  415.          DEC  A
  416.          RETZ
  417.          LD   A,13
  418.          LD   (253:244),A
  419.          LD   HL,(NAKNR)
  420.          LD   A,4
  421.          LD   DE,SPACE
  422.          CALL SKRTAL
  423.          LD   HL,(PACKNR)
  424.          LD   A,4
  425.          LD   DE,SPACE
  426.          CALL SKRTAL
  427.          LD   HL,(ANTBYTES)
  428.          LD   A,6
  429.          LD   DE,SPACE
  430.          CALL SKRTAL
  431.          LD   HL,(ANTBUF)
  432.          LD   A,4
  433.          LD   DE,SPACE
  434.          CALL SKRTAL
  435.          RET
  436.  
  437. SKRIVERR AND  127
  438.          LD   L,A
  439.          LD   H,0
  440.          LD   A,(DEBUG)
  441.          DEC  A
  442.          RETZ
  443.          PUSH HL
  444.          CALL SKRIVFIL
  445.          LD   A,32
  446.          LD   (253:244),A
  447.          LD   HL,KTXT8
  448.          LD   BC,KTXT9-KTXT8
  449.          CALL 0:11      Skriv ERR
  450.          POP  HL
  451.          CALL SKRIVTAL  Skriv felkod
  452.          RET
  453.  
  454. WRITE    LD   A,(DEBUG)
  455.          DEC  A
  456.          CALLNZ 0:11
  457.          RET
  458.  
  459. CRLF     LD   A,(DEBUG)
  460.          DEC  A
  461.          CALLNZ 7:66
  462.          RET
  463.  
  464. ;filename      bad pkt bytes blk status
  465. ;L]NGRAD .BAC    0  12  1234  12 (15)
  466. ;L]NGRAD .BAC    0  13  1235  12 ERR 48
  467. ;L]NGRAD .TXT    0   5   234   4 OK
  468.