home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
luxorabc80.tar.gz
/
luxorabc80.tar
/
kerm5.asm
< prev
next >
Wrap
Assembly Source File
|
1990-07-08
|
15KB
|
629 lines
; KERM5.ASM
; Anders Franz`n <5258>
; Stockholm 1987-09-24
PACKNR DW 0
ANTBYTES DW 0
ANTBUF DW 0
NAKNR DW 0
KERMAREA DS 40
FIL DS 15
DB 0
;Ta emot en fil som s{nds med Kermit
RECEIVE INP 58
AND 2
JPNZ TIMEOUT Ingen b{rv}g
LD HL,KTXT1
LD BC,KTXT2-KTXT1
CALL WRITE
LD IX,KERMAREA
LD (IX+0),0 Inga flaggor
CALL RDEFAULT
LD A,(TIME)
LD (IX+12),A Default maxtid
LD (IX+8),1 Start CH-typ
LD (IX+23),0 Packetr{knare
LD (IX+26),"S"
RE1 LD A,(RETRY)
LD (IX+20),A Max ant f|rs|k
JR RE3
RE2 DEC (IX+20)
JPZ TIMEOUT F|r m}nga f|rs|k
LD A,(IX+26)
CP "D"
JRNZ RE3 V{ntar ej data
LD HL,(NAKNR) R{kna antalet
INC HL felaktiga paket
LD (NAKNR),HL
CALL SKRIVFIL
RE3 BIT 3,(IX+0)
JPNZ TIMEOUT ESCAPE
LD A,(IX+12)
LD (IX+21),A S{tt tid kvar
LD A,(IX+26)
CP "S"
JPZ RINIT Kermitparametrar
CP "F"
JPZ RFIL Filhuvud
CP "D"
JPZ RDATA Data i fil
RET Klart
;V{nta p} Kermitparametrar
RINIT CALL GPACK Ta emot packet
JPC RE2 Fel, f|rs|k igen
LD A,(IX+25)
CP "E"
JPZ RERROR Avbryt!
CP "S"
JPNZ RE2 Fel packettyp
LD HL,KTXT2
LD BC,KTXT3-KTXT2
CALL WRITE
CALL RFIX
LD C,(IX+8)
PUSH BC
LD (IX+8),1 CH-typ 1
LD (IX+24),9
LD (IX+25),"Y"
CALL SPACK Positivt svar
POP BC
LD (IX+8),C
JPC TIMEOUT Time out
LD HL,KTXT4
LD BC,KTXT5-KTXT4
CALL WRITE Filrubrik
LD A,(IX+23)
INC A
AND 63
LD (IX+23),A
LD (IX+26),"F"
JP RE1
;V{nta p} filhuvud
RFIL CALL GPACK Ta emot packet
JPC RE2 Fel, f|rs|k igen
LD A,(IX+25)
CP "S"
JPZ RFIL1 Oms{ndning
CP "Z"
JPZ RFIL5 Oms{ndning
CP "F"
JPZ RFIL6 Filnamn
CP "B"
JPZ RBREAK Break
CP "E"
JPZ RERROR
JP FELPACK
;Behandla oms{ndning parametrar
RFIL1 LD A,(IX+23)
DEC A
CP (IX+22)
JPNZ RE2 Ej oms{ndning
CALL RFIX
LD C,(IX+8)
PUSH BC
LD (IX+8),1 CH-typ 1
LD (IX+24),9
LD (IX+25),"Y"
CALL SPACK Positivt svar
POP BC
LD (IX+8),C
JPNC RE1
JP TIMEOUT
;Fixa parametrar att s{nda
RFIX CALL RPARM
LD A,(LENGTH)
LD (IX+1),A
LD A,(TIME)
LD (IX+2),A
LD A,(NUMPAD)
LD (IX+3),A
LD A,(PADCHAR)
LD (IX+4),A
LD A,(EOL)
LD (IX+5),A
LD A,(QCTL)
LD (IX+6),A
LD (IX+7),"Y" Vi klarar av
LD A,(PARITET) ev QBIN
AND A
JRZ RFIX1 Paritet NONE
LD A,(IX+17)
AND A S{ndare klarar
JRZ RFIX2 ej av QBIN
LD (IX+7),A
CP "Y" S{ndare beg{r
JRNZ RFIX2 QBIN
LD A,(QBIN)
LD (IX+7),A
LD (IX+17),A
JR RFIX2 Vi beg{r QBIN
RFIX1 LD A,(IX+17)
AND A S{ndare klarar
JRZ RFIX2 ej av QBIN
LD (IX+7),A
CP "Y" S{ndare beg{r
JRNZ RFIX2 QBIN
LD (IX+17),0 Ingen vill ha
RFIX2 LD A,(CHECK)
LD (IX+8),A
CP (IX+18)
JRZ RFIX3 B}da har samma
LD (IX+8),1
LD (IX+18),1
RFIX3 LD A,(IX+19)
LD (IX+9),A
CALL SPARM
RET
;Behandla oms{ndning EOF
RFIL5 LD A,(IX+23)
DEC A
CP (IX+22)
JPNZ RE2 Ej oms{ndning
LD (IX+24),0 Inget data
LD (IX+25),"Y"
CALL SPACK Positivt svar
JPNC RE1
JP TIMEOUT
;Filnamn
RFIL6 LD A,(IX+23)
CP (IX+22)
JPNZ RE2 Fel packetnr
LD HL,0
LD (PACKNR),HL
LD (ANTBYTES),HL
LD (ANTBUF),HL
LD (NAKNR),HL
CALL CRLF Ny rad
LD HL,BUFF3 Peka p} data
LD DE,255:128
LD C,(IX+24) L{ngd filnamn
LD B,0
PUSH HL
PUSH DE
CALL 0:65 Fixa filnamn
POP HL
LD BC,8
CALL WRITE
PUSH HL
LD HL,KTXT6
LD BC,1
CALL WRITE "."
POP HL
LD BC,3
CALL WRITE Extension
CALL SKRIVFIL
POP HL
LD (IX+37),0 Ej CTRL-XZ {nnu
SET 5,(IX+0) Till}t CTRL-XZ
PUSH HL
LD E,(IX+24) L{ngd data
LD D,0
ADD HL,DE
LD (HL),13 Slut p} filnamn
POP HL Pekar p} filnamn
LD DE,(FILPEK)
LD A,(DE)
CP 13
JRZ RFIL7
EX DE,HL Lokalt filnamn
RFIL7 LD A,(ACCESS)
AND A Strunta i om
JRZ RFIL8 filen finns
PUSH HL
PUSH IX
CALL OPEN
POP IX
POP HL Pekar p} filnamn
JRNC RFIL9 Filen finns!
AND 127
CP 21
JPNZ FELFIL Annat fel
RFIL8 PUSH IX
CALL PREPARE
POP IX
JPNC RFIL13 Det gick bra
JP FELFIL
RFIL9 LD A,(ACCESS)
CP 1
JRZ RFIL12 Kill
LD HL,RFIL10
LD BC,RFIL12-RFIL10
CALL WRITE
LD HL,RFIL11
LD BC,RFIL12-RFIL11
LD (IX+24),C
LD DE,BUFF4
LDIR
LD (IX+25),"E"
CALL SPACK Error!
JP AVBRYT
RFIL10 DM 13,10,7
RFIL11 DM "File already "
DM "exists on disk"
RFIL12 PUSH HL
PUSH IX
LD IX,FIL
LD DE,8:159
CALL FILCONTR Kill
POP IX
POP HL Pekar p} filnamn
JPNC RFIL8 Forts{tt...
JP FELFIL
RFIL13 LD HL,(ANTBUF)
INC HL
LD (ANTBUF),HL
CALL SKRIVFIL
LD (IX+29),0 Filtyp ok{nd
LD (IX+24),0
LD (IX+25),"Y"
LD A,(IX+37)
AND A
JRZ RFIL14 Ej CTRL-XZ
LD (BUFF4),A S{nd tkn i ACK!
INC (IX+24) L{ngd ett
SET 4,(IX+0) V{nta p} Z-pack
RES 5,(IX+0) F|rbjud CTRL-XZ
RFIL14 CALL SPACK Positivt svar
JPC TIMEOUT
LD HL,(PACKNR)
INC HL
LD (PACKNR),HL
CALL SKRIVFIL
LD A,(IX+23)
INC A
AND 63
LD (IX+23),A
LD (IX+26),"D"
JP RE1
;Break
RBREAK LD A,(IX+23)
CP (IX+22)
JPNZ RE2 Fel packetnr
LD (IX+24),0
LD (IX+25),"Y"
CALL SPACK Positivt svar
JPC TIMEOUT
LD (IX+26),"C"
JP RE1
RDATA CALL GPACK Ta emot packet
JPC RE2 Fel, f|rs|k igen
LD A,(IX+25)
CP "Z"
JPZ REOF EOF
CP "E"
JPZ RERROR
BIT 4,(IX+0) S{ndaren klarar
JPNZ REOF1 inte av CTRL-XZ
CP "D"
JPZ RDATA1 Data
CP "F"
JPZ RDATA3 Oms{ndning
JP FELPACK
;Data i fil
RDATA1 LD A,(IX+23)
CP (IX+22)
JRNZ RDATA3 Fel packetnr
CALL UNPACK Packa upp data
JPC FELFIL Fel vid skrivn
LD HL,(PACKNR)
INC HL
LD (PACKNR),HL
CALL SKRIVFIL
LD (IX+24),0
LD (IX+25),"Y"
LD A,(IX+37)
AND A
JRZ RDATA2 Ej CTRL-XZ
LD (BUFF4),A S{nd tkn i ACK!
INC (IX+24) L{ngd ett
SET 4,(IX+0) V{nta p} Z-pack
RES 5,(IX+0) F|rbjud CTRL-XZ
RDATA2 CALL SPACK Positivt svar
JPC TIMEOUT
LD A,(IX+23)
INC A
AND 63
LD (IX+23),A
JP RE1
;Behandla oms{ndning filnamn el data
RDATA3 LD A,(IX+23)
DEC A
CP (IX+22)
JPNZ RE2 Ej oms{ndning
LD (IX+24),0
LD (IX+25),"Y"
CALL SPACK Positivt svar
JPNC RE1
JP TIMEOUT
;End Of File
REOF LD A,(IX+23)
CP (IX+22)
JPNZ RE2 Fel packetnr
RES 5,(IX+0) F|rbjud CTRL-XZ
BIT 4,(IX+0)
JRZ REOF2 Ej CTRL-XZ
LD A,(IX+24) L{ngd packet
AND A
JRZ REOF1 Tom
DEC A
JRNZ REOF1 Mer {n ett tkn
LD A,(BUFF3) Data i packet
CP "D"
JRNZ REOF1 Ej "avbryt"
RES 4,(IX+0) CTRL-XZ funkade
REOF1 PUSH IX
LD IX,FIL
LD DE,8:159
CALL FILCONTR Kill
POP IX
JPC FELFIL
LD A,32
LD (253:244),A
LD HL,KTXT7
LD BC,KTXT8-KTXT7
CALL WRITE
BIT 4,(IX+0)
JRZ REOF6 CTRL-XZ funkade
LD HL,REOF7
LD BC,REOF8-REOF7
LD DE,BUFF4
LD (IX+24),C
LDIR
LD (IX+25),"E"
CALL SPACK Error!
JP AVBRYT
REOF2 LD A,(IX+29) Typ av fil
PUSH IX
LD IX,FIL
CP 1
JRZ REOF3 Textfil
BIT 7,(IX+14)
JRZ REOF4 Buffert tom
CALL 8:156 Skriv buffert
RES 7,(IX+14) Buffert tom
REOF3 LD HL,(ANTBUF)
INC HL
LD (ANTBUF),HL
REOF4 LD DE,8:127
CALL FILCONTR Close
POP IX
JRNC REOF5
CALL SKRIVERR
JR REOF6
REOF5 LD A,32
LD (253:244),A
LD HL,KTXT5
LD BC,KTXT6-KTXT5
REOF6 CALL WRITE
LD (IX+24),0
LD (IX+25),"Y"
CALL SPACK Positivt svar
JPC TIMEOUT
LD A,(IX+23)
INC A
AND 63
LD (IX+23),A
LD (IX+26),"F"
JP RE1
REOF7 DM "User interrupt"
REOF8
;Skriv data p} fil
PUTFIL LD A,(IX+29) Typ av fil
CP 1
JRZ PF2 Textfil
CP 2
JRZ PF5 Bin{rfil
LD A,(FILE)
AND A
JRZ PF1 Textfil
CP 1
JRZ PF4 Bin{rfil
LD A,(HL) Annars unders|k
AND A byte i filen!
JRZ PF4 ABS-fil
CP 128
JRNC PF4 Annan bin{rfil
PF1 LD (IX+29),1 Typ textfil
PF2 PUSH IX
LD IX,FIL
LD E,(IX+13)
PUSH DE
LD DE,8:150
CALL FILCONTR Skriv rad
POP DE
POP IX
RETC
LD A,(FIL+13)
CP E
CCF
RETNC
LD HL,(ANTBUF)
INC HL
LD (ANTBUF),HL
AND A
RET
PF4 LD (IX+29),2 Typ bin{rfil
PUSH IX
LD IX,FIL
INC (IX+13)
LD A,(IX+9)
POP IX
AND A
LD A,52 ERR 52
SCF
RETZ Buffert saknas
PF5 PUSH IX
LD IX,FIL
LD E,(IX+10) Position i buff
LD D,(IX+11)
PF6 LD A,B
OR C
JRZ PF7
LDI L{gg tkn i buff
SET 7,(IX+14) Data i buffert
DEC (IX+13) Kvar i buffert
JRNZ PF6 Buffert ej full
PUSH HL
PUSH BC
CALL 8:156 Skriv buffert
LD HL,(ANTBUF)
INC HL
LD (ANTBUF),HL
POP BC
POP HL
RES 7,(IX+14) Buffert tom
INC (IX+13)
JR PF6
PF7 LD (IX+10),E
LD (IX+11),D
POP IX
RET
KTXT1 DB 13,10
DM "Waiting for init packet",13
KTXT2 DM "Init packet received ",13
KTXT3 DB 13,10
DM "Sending init packet",13
KTXT4 DM "filename bad "
DM "pkt bytes blk status"
KTXT5 DM "OK "
KTXT6 DM "."
KTXT7 DM "FLUSH "
KTXT8 DM "ERR "
KTXT9 DM "("
KTXT10 DM ")"
;Visa text i errorpacket p} sk{rm
RERROR LD HL,RERR1
LD BC,RERR2-RERR1
CALL WRITE
LD HL,BUFF3 Peka p} data
LD C,(IX+24) L{ngd data
LD B,0
CALL WRITE Skriv text
JP AVBRYT
RERR1 DM 13,10
DM "Received message:"
DM 13,10
RERR2 EQU $
;Fel vid filhantering, s{nd error
FELFIL PUSH AF
CALL SKRIVERR Skriv p} sk{rm
POP AF
LD (IX+24),0
OR 128
LD HL,FELF4
LD BC,FELF5-FELF4
CPIR
JRNZ FELF3
DEC HL Peka p} kod
FELF1 INC HL
BIT 7,(HL)
JRNZ FELF1 Skippa highbyte
PUSH HL
LD BC,0
FELF2 INC HL
INC BC
BIT 7,(HL)
JRZ FELF2
POP HL
LD (IX+24),C
LD DE,BUFF4
LDIR
FELF3 LD (IX+25),"E"
CALL SPACK Error!
JP AVBRYT
FELF4 DM 128+21
DM "Can't find file"
DM 128+35
DM 128+36
DM 128+37
DM 128+38
DM 128+44
DM 128+45
DM 128+46
DM 128+47
DM 128+48
DM 128+49
DM "I/O-error"
DM 128+39
DM 128+43
DM "Writeprotection"
DM 128+41
DM "Disk full"
DM 128+42
DM "Disk not ready"
DM 255
FELF5 EQU $
FELPACK LD HL,FPK1
LD BC,FPK3-FPK1
CALL WRITE
LD HL,FPK2
LD BC,FPK3-FPK1
LD (IX+24),C
LD DE,BUFF4
LDIR
LD (IX+25),"E"
CALL SPACK S{nd error
JR AVBRYT
FPK1 DM 10,13
FPK2 DM "Wrong packet received"
FPK3 EQU $
TIMEOUT INP 58
AND 2
LD HL,TIM2
LD BC,TIM3-TIM2
JRNZ TIM1 Ingen b{rv}g
BIT 3,(IX+0)
LD HL,TIM3
LD BC,TIM4-TIM3
JRNZ TIM1 ESCAPE nedtryckt
LD HL,TIM4
LD BC,TIM5-TIM4
TIM1 CALL 0:11
AVBRYT PUSH IX
LD IX,FIL
LD DE,8:127
CALL FILCONTR Close
POP IX
CALLC SKRIVERR
LD (IX+26),"A"
SCF
RET
TIM2 DM 13,10,7,"No connection"
TIM3 DM 13,10,7,"Abort"
TIM4 DM 13,10,7,"Timeout"
TIM5 EQU $