home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
luxorabc80
/
kerm6.asm
< prev
next >
Wrap
Assembly Source File
|
1990-07-07
|
11KB
|
468 lines
; KERM6.ASM
; Anders Franz`n <5258>
; Stockholm 1987-09-13
;S{nd en eller flera fil med Kermit
SEND INP 58
AND 2
JPNZ TIMEOUT B{rv}g saknas
LD HL,KTXT3
LD BC,KTXT4-KTXT3
CALL WRITE
LD IX,KERMAREA
LD (IX+0),0
LD (IX+23),0 Packetr{knare
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"
LD A,(PARITET)
AND A
JRZ SE1 Paritet NONE
LD A,(QBIN)
LD (IX+7),A Vi beg{r QBIN
SE1 LD A,(CHECK)
LD (IX+8),A
LD A,(REPT)
LD (IX+9),A
CALL RDEFAULT
CALL SPARM
LD C,(IX+8)
PUSH BC
LD (IX+8),1 CH-typ 1
LD (IX+24),9
LD (IX+25),"S"
CALL PPACK S{nd parametrar
POP BC
LD (IX+8),C
JPC TIMEOUT Time out
CALL RPARM
LD A,(PARITET)
AND A
JRZ SE2 Paritet NONE
LD A,(IX+17)
CP (IX+7)
JRZ SE3 B}da vill QBIN
CP "Y"
JRZ SE3
LD (IX+7),0 Mottagaren
JR SE3 klarar ej QBIN
SE2 LD (IX+7),0
LD A,(IX+17)
AND A S{ndare klarar
JRZ SE3 ej QBIN
CP "Y"
JRZ SE3 Ingen vill QBIN
LD (IX+7),A S{ndare vill
SE3 LD A,(IX+8)
CP (IX+18)
JRZ SE4
LD (IX+8),1
LD (IX+18),1
SE4 LD A,(IX+9)
CP (IX+19)
JRZ SE5
LD (IX+9),0
LD (IX+19),0
SE5 LD HL,KTXT4
LD BC,KTXT5-KTXT4
CALL WRITE Skriv filrubrik
SE6 CALL CRLF Ny rad
LD HL,0
LD (PACKNR),HL
LD (ANTBYTES),HL
LD (ANTBUF),HL
LD (NAKNR),HL
LD A,(WILDFLG)
AND A
JRZ SE9 Ej wildcard
BIT 7,(IX+0)
JRNZ SE8 Drive initierad
SET 7,(IX+0)
XOR A
LD (255:212),A Filstorlek
SE7 LD BC,(WILDANT)
DEC B
JPM SE20 Slut p} drivear
LD A,C Drivenummer
INC C
LD (WILDANT),BC
CALL LIBINIT
JRC SE7
CALL FIRSTFIL
JRC SE7
JRZ SE7 Drive tom
JR SE9
SE8 CALL NEXTFIL
JRC SE7
JRZ SE7 N{sta drive
SE9 LD HL,255:132 Fil utan enhet
LD DE,BUFF4
LD (IX+24),-1 L{ngd data
LD BC,(FILPEK)
LD A,(BC)
CP 13
JRZ SE10 Samma fil remote
LD L,C
LD H,B
SE10 RST 32
INC HL
LD (DE),A Kopiera filnamn
INC DE
INC (IX+24) R{kna antal tkn
CP 13
JRNZ SE10
LD HL,255:132 Fil utan enhet
LD BC,12 L{ngd filnamn
CALL WRITE Skriv filnamn
CALL SKRIVFIL
LD A,(WILDFLG)
AND A
JRZ SE11 Ej wildcard
LD A,32+1
LD (253:244),A
LD HL,KTXT9
LD BC,1
CALL WRITE "("
LD A,(DEBUG)
DEC A
LD HL,(255:146)
CALLNZ SKRIVTAL Filstorlek
LD HL,KTXT10
LD BC,1
CALL WRITE ")"
SE11 LD HL,255:128 Filnamn
RST 32
PUSH IX
CALL OPEN
POP IX
JRNC SE12 Det gick bra
CALL SKRIVERR
LD A,(WILDFLG)
AND A Wildcard?
JPNZ SE6 Ja, n{sta fil
JP SE20 S{nd BREAK
SE12 LD (IX+37),0 Ej CTRL-XZ {nnu
SET 5,(IX+0) Till}t CTRL-XZ
LD (IX+27),0 Inget data l{st
LD (IX+29),0 Ok{nd filtyp
LD (IX+25),"F"
CALL PPACK S{nd filhuvud
JPC TIMEOUT Time out
LD HL,1
LD (ANTBUF),HL
CALL SKRIVFIL
SE13 LD A,(IX+37)
AND A
JPNZ SE18 Hoppa om CTRL-XZ
CALL PACK Packa data
JRC SE15 EOF eller ERROR
LD (IX+25),"D"
CALL PPACK S{nd data
JPC TIMEOUT Time out
CALL SKRIVFIL
LD A,(IX+24)
AND A
JRZ SE13 Inget data i ACK
DEC A
JRNZ SE13 Mer {n ett tkn
LD A,(BUFF3)
CP "X"
JRZ SE14 X i ACK
CP "Z"
JRNZ SE13 Ej Z i ACK
SE14 RES 5,(IX+0) F|rbjud CTRL-XZ
LD (IX+37),A
JP SE18
SE15 AND A
JRZ SE16 EOF
CALL SKRIVERR Annat fel
JR SE18
SE16 LD A,(IX+24)
AND A
JRZ SE17 Inget mer data
LD (IX+25),"D"
CALL PPACK S{nd sista data
JPC TIMEOUT Time out
CALL SKRIVFIL
SE17 LD A,32
LD (253:244),A
LD HL,KTXT5
LD BC,KTXT6-KTXT5
CALL WRITE Skriv sluttext
SE18 PUSH IX
LD IX,FIL
LD DE,8:127
CALL FILCONTR Close
POP IX
CALLC SKRIVERR
RES 5,(IX+0) F|rbjud CTRL-XZ
LD (IX+24),0
LD (IX+25),"Z"
LD A,(IX+37)
AND A
JRZ SE19 Ej CTRL-XZ
LD A,32
LD (253:244),A
LD HL,KTXT7
LD BC,KTXT8-KTXT7
CALL WRITE Skriv avbryttext
LD A,"D"
LD (BUFF4),A
INC (IX+24)
SE19 CALL PPACK S{nd EOF
JPC TIMEOUT
LD A,(IX+37)
CP "Z"
JRZ SE20 Skippa batch
LD A,(WILDFLG)
AND A Wildcard?
JPNZ SE6 Ja, n{sta fil
SE20 LD (IX+24),0
LD (IX+25),"B"
CALL PPACK S{nd BRAKE
JPC TIMEOUT
RET Klart!
;H{mta ett tecken fr}n fil
;Carry s{tts om EOF eller ERROR
GETFIL LD A,(IX+27)
AND A
JPNZ GF9 Data i buffert
LD A,(IX+29) Typ av fil
CP 1
JRZ GF1 Textfil
CP 2
JPZ GF7 Bin{rfil
LD A,(FILE)
AND A
JRZ GF1 Textfil
CP 1
JRZ GF7 Bin{rfil
PUSH IX Annars unders|k
LD IX,FIL filen...
LD L,(IX+10)
PUSH HL
LD HL,BUFF7
LD BC,255
LD DE,8:147
CALL FILCONTR L{s rad
POP HL
JRC GF5 Kanske bin{rfil
JR GF2 Annars textfil!
GF1 PUSH IX
LD IX,FIL
LD L,(IX+10)
PUSH HL
LD HL,BUFF7
LD BC,255
LD DE,8:147
CALL FILCONTR L{s rad
POP HL
JRC GF6 End of file
GF2 LD A,L
CP (IX+10)
JRC GF3
LD HL,(ANTBUF)
INC HL
LD (ANTBUF),HL
GF3 POP IX
EX DE,HL
LD A,(IX+20)
AND A
JRZ GF4 Hoppa om DUMP
LD (HL),10 Avsluta med LF
INC HL om Kermit
GF4 LD DE,BUFF7
SBC HL,DE
EX DE,HL
LD (IX+27),E L{ngd p} rad
LD (IX+29),1 Textfil
LD (IX+32),L
LD (IX+33),H
JR GF9
GF5 CP 186
JRZ GF8 Ogiltigt tecken
AND A
JRZ GF8 EOF dvs ABS-fil
GF6 POP IX
SCF
RET EOF eller ERROR
GF7 PUSH IX
LD IX,FIL
LD DE,8:153
CALL FILCONTR L{s buffert
LD HL,(ANTBUF)
INC HL
LD (ANTBUF),HL
JRNC GF8 Inget fel
POP IX
CP 38
SCF
RETNZ
LD A,0
RET Slut p} fil
GF8 LD L,(IX+8) Adress till
LD H,(IX+9) buffert
POP IX
LD (IX+27),253 L{ngd p} rad
LD (IX+29),2 Bin{rfil
LD (IX+32),L
LD (IX+33),H
GF9 LD L,(IX+32)
LD H,(IX+33)
LD A,(HL)
INC HL
LD (IX+32),L
LD (IX+33),H
DEC (IX+27)
LD HL,(ANTBYTES)
INC HL
LD (ANTBYTES),HL
AND A
RET
;S{nd packet, om negativt svar sker
;oms{ndning. Om f|r m}nga f|rs|k eller
;timeout sker retur med carry.
PPACK LD A,(INBUFF)
LD (INPOS),A T|m inputbuffer
LD A,(RETRY)
INC A
LD (IX+20),A Max ant f|rs|k
LD A,(IX+24)
LD (IX+30),A L{ngd data
LD A,(IX+25)
LD (IX+31),A Typ att s{nda
PPK1 BIT 3,(IX+0)
RETNZ ESCAPE
DEC (IX+20)
SCF
RETZ F|r m}nga f|rs|k
LD A,(IX+12)
LD (IX+21),A S{tt tid kvar
LD A,(IX+23)
LD (IX+22),A Packetnr
LD A,(IX+30)
LD (IX+24),A L{ngd data
LD A,(IX+31)
LD (IX+25),A Typ att s{nda
CALL SPACK S{nd packet
JRC PPK1 Fel, f|rs|k igen
CALL RPACK Ta emot svar
JRC PPK5 Fel, r{kna fel
LD A,(IX+25)
CP "Y"
JRZ PPK2
CP "N"
JRZ PPK4
CP "E"
JPZ RERROR
JP FELPACK
PPK2 LD A,(IX+22)
CP (IX+23)
JRNZ PPK5 Fel packetnr
PPK3 LD A,(IX+23)
INC A
AND 63 Clear carry!
LD (IX+23),A
LD HL,(PACKNR)
INC HL
LD (PACKNR),HL
RET
PPK4 LD A,(IX+22)
DEC A NAK n+1 tolkas
CP (IX+23) som ACK n!
JRZ PPK3
INC A
CP (IX+23)
JPNZ FELPACK Fel packetnr
PPK5 LD A,(IX+31) Typ att s{nda
CP "F"
JRZ PPK6
CP "D"
JRZ PPK6
CP "Z"
JPNZ PPK1
PPK6 LD HL,(NAKNR)
INC HL
LD (NAKNR),HL
CALL SKRIVFIL
JP PPK1 Oms{ndning
SKRIVFIL LD A,(DEBUG)
DEC A
RETZ
LD A,13
LD (253:244),A
LD HL,(NAKNR)
LD A,4
LD DE,SPACE
CALL SKRTAL
LD HL,(PACKNR)
LD A,4
LD DE,SPACE
CALL SKRTAL
LD HL,(ANTBYTES)
LD A,6
LD DE,SPACE
CALL SKRTAL
LD HL,(ANTBUF)
LD A,4
LD DE,SPACE
CALL SKRTAL
RET
SKRIVERR AND 127
LD L,A
LD H,0
LD A,(DEBUG)
DEC A
RETZ
PUSH HL
CALL SKRIVFIL
LD A,32
LD (253:244),A
LD HL,KTXT8
LD BC,KTXT9-KTXT8
CALL 0:11 Skriv ERR
POP HL
CALL SKRIVTAL Skriv felkod
RET
WRITE LD A,(DEBUG)
DEC A
CALLNZ 0:11
RET
CRLF LD A,(DEBUG)
DEC A
CALLNZ 7:66
RET
;filename bad pkt bytes blk status
;L]NGRAD .BAC 0 12 1234 12 (15)
;L]NGRAD .BAC 0 13 1235 12 ERR 48
;L]NGRAD .TXT 0 5 234 4 OK