home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
archives
/
luxorabc80.zip
/
kerm3.asm
< prev
next >
Wrap
Assembly Source File
|
1990-07-08
|
16KB
|
749 lines
; KERM3.ASM
; Anders Franz`n <5258>
; Stockholm 1987-09-20
KERMIT CALL KERMV
KERM1 LD HL,KERM4
LD BC,KERM5-KERM4
CALL 0:11 Skriv promt
KERM2 CALL 7:66
LD HL,BUFF6
LD BC,39
PUSH HL
CALL GETLINE
POP HL
RST 32
CP 13
JRZ KERM2 Tom rad
LD BC,KERM1
PUSH BC Returadress
LD DE,CMDTAB
PUSH DE
CALL STRSCAN
POP DE
RETC Ambigious
JRNZ KERM3
LD DE,CMDJTB
JP 1:58 Utnyttja ROM!
KERM3 PUSH DE
LD HL,KERM5
LD BC,KERM6-KERM5
CALL 0:11
POP HL
JP HELP1
KERM4 DM 13,10,"KERMIT"
KERM5 DM 13,10,7,"Command must be"
KERM6
GETLINE LD DE,3:78
LD (253:251),DE
PUSH IX
LD B,C
GETL2 CALL 3:91
JRNZ GETL2
GETL3 CALL 3:91
GETL4 CALL 0:2
CP 9
CALLZ 3:72
CP 13
JPZ 2:229
CP 24
JRZ GETL2
CP 8
JRZ GETL3
PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH AF
LD HL,(ESCAPE)
CP L
JRNZ GETL5
CALL CONNECT
JR GETL6
GETL5 LD HL,(TEDESC)
CP L
CALLZ TED
GETL6 POP AF
POP IX
POP BC
POP DE
POP HL
CP 32
JRC GETL4
LD (DE),A
CP 96
JRC GETL7
AND 95
GETL7 LD (HL),A
INC HL
INC (IX+1)
LD A,(2:111)
CP (IX+1)
CALLC 2:52
DJNZ GETL4
JP 2:228
CMDTAB DM 128,"CLOSE"
DM 129,"CONNECT"
DM 130,"DELETE"
DM 131,"DIR"
DM 132,"DUMP"
DM 130,"ERASE"
DM 133,"EXIT"
DM 134,"HELP"
DM 130,"KILL"
DM 135,"LOG"
DM 136,"QUIT"
DM 137,"RECEIVE"
DM 138,"SAVE"
DM 139,"SEND"
DM 140,"SET"
DM 141,"SHOW"
DM 142,"TED" Rensa tabell om
DM 143,"TYPE"
DM 255 TED saknas
CMDJTB DW CLOSE 128
DW CONNECT 129
DW DELETE 130
DW DIRH 131
DW DUMP 132
DW BASIC 133
DW HELP 134
DW LOGG 135
DW QUIT 136
DW KERMREC 137
DW SAVE 138
DW KERMSEND 139
DW SET 140
DW SHOW 141
DW TED 142
DW TYPE 143
CONNECT CALL KERMS
CON1 CALL TERMINAL
LD A,(FLAGG)
BIT 1,A
JPNZ TED1 TED-escape
CALL KERMV
LD A,(FLAGG)
BIT 6,A
JRNZ CON2 TED full
BIT 7,A
RETZ LOG/DUMP-FIL ok
LD A,(FELKOD)
CALL ERROR
CALL CLOSE
LD SP,STACK
JP KERM1
CON2 LD HL,CON3
LD BC,CON4-CON3
CALL 0:11
LD SP,STACK
JP KERM1
CON3 DB 13,10,7
DM "TED filled",13,10
CON4
TED LD A,(TEDFLG)
AND A
RETZ TED ej i minnet!
CALL KERMS
TED1 LD A,(DMP)
LD C,A
LD A,(LOG)
OR C
JRZ TED2 Ingen fil |ppen
CALL KERMV
CALL CLOSE St{ng fil
LD SP,STACK
JP KERM1 Stanna i KERM
TED2 CALL TED3 Anropa TED
LD A,(FLAGG)
BIT 1,A
JPNZ CON1 TED-escape
JP KERMV
TED3 LD (KERMSP),SP
LD SP,(TEDSP)
RET Till TED
TEDFLG DB 0
KERMSEND CALL DRIVEFIX Fixa filnamn
LD A,21
JPC ERROR
CALL CLOSE
CALL INIT Rensa buffertar
CALL INTON Sl} p} interrupt
CALL XON
CALL SEND
CALL XOFF
CALL INTOFF Sl} av interrupt
CALL 7:66
RET
KERMREC LD (FILPEK),HL Ev filnamn
CALL CLOSE
CALL INIT Rensa buffertar
CALL INTON Sl} p} interrupt
CALL XON
CALL RECEIVE
CALL XOFF
CALL INTOFF Sl} av interrupt
CALL 7:66
RET
QUIT PUSH HL Spara ev pgm
CALL CLOSE
CALL KERMS
LD HL,254:64 Inga parametrar
LD (HL),L om QUIT KERM
POP HL
CALL BASIC1 Anropa BASIC
KERMV LD HL,KERMBILD
CALL VISABILD
RET
KERMS LD DE,KERMBILD
CALL SPARBILD
RET
BASIC CALL CLOSE
JP 0:0
BASIC1 LD (KERMSP),SP
LD SP,(254:39)
LD A,(13:76)
CP 231
JPZ 13:76 RUN i BASIC
JP 13:74
;Visar vilka kommandon som finns
HELP LD HL,CMDTAB
HELP1 LD B,1
HELP2 DJNZ HELP3
CALL 7:66
LD B,3
LD A,(1:216)
CP 40
JRZ HELP3
LD B,5
HELP3 LD A,-10
LD DE,SPACE
CALL SKRIVTAB
LD A,(HL)
INC A
JRNZ HELP2
CALL 7:66
RET
;Visa parametrar
SHOW CALL 7:66
LD IX,PARMAREA
LD HL,SHOWTAB
PUSH HL
LD HL,SETTAB
SHOW1 LD B,2 Antal/rad
LD A,(1:216)
CP 40
JRZ SHOW2
LD B,3
SHOW2 LD A,-7 Rak v{nsterkant
LD DE,PUNKTER
CALL SKRIVTAB
EX (SP),HL
PUSH BC
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
PUSH HL
EX DE,HL
LD A,(IX)
INC IX
OR 128
CP 254
JRZ SHOW3
CP 255
JRZ SHOW3
CPIR
JRZ SHOW4
SHOW3 AND 127
LD L,A
LD H,0
LD A,9
LD DE,PUNKTER
CALL SKRTAL
JR SHOW5
SHOW4 DEC HL
LD A,9
LD DE,PUNKTER
CALL SKRIVTAB
SHOW5 POP HL
POP BC
EX (SP),HL
LD A,(HL)
INC A
JRZ SHOW6
PUSH HL
PUSH BC
LD HL,SPACE
LD BC,2
CALL 0:11
POP BC
POP HL
DJNZ SHOW2
CALL 7:66
JR SHOW1
SHOW6 POP HL
CALL 7:66
RET
;IN DE Typ av delare
; A L{ngd f{lt >0 rak h|gerkant
; <0 rak v{nsterkant
SKRIVTAB PUSH BC
LD BC,-1
INC HL Skippa highbyte
PUSH HL
SKRIVT1 BIT 7,(HL)
INC HL
INC BC R{kna l{ngd ord
JRZ SKRIVT1
DEC HL
EX (SP),HL Spara n{sta ord
PUSH DE Spara avskiljare
AND A
JPM SKRIVT2 Rak v{nsterkant
PUSH HL
PUSH BC
EX DE,HL
SUB C
LD C,A
CALLNZ 0:11 Skriv avskiljare
XOR A
POP BC L{ngd p} ord
POP HL Pekar p} ord
SKRIVT2 PUSH AF
PUSH BC
CALL 0:11 Skriv ord
POP BC
POP AF
POP HL Avskiljare
NEG
SUB C
LD C,A
CALLP 0:11 Skriv avskiljare
POP HL N{sta ord
POP BC
RET
PUNKTER DM ".........."
;[ndra parametrar
SET LD DE,SETTAB
PUSH DE
CALL STRSCAN
POP DE
RETC Ambigious
JRNZ SET1
LD DE,SETJTB
JP 1:58 Utnyttja ROM!
SET1 PUSH DE
LD HL,SETF1
LD BC,SETF2-SETF1
CALL 0:11 Felmeddelande
POP HL
JP HELP1
SET2 PUSH DE
LD HL,SETF2
LD BC,SETF3-SETF2
CALL 0:11 Felmeddelande
POP HL
JP HELP1
SETF1 DM 13,10,7,"Parameter must be"
SETF2 DM 13,10,7,"Value must be"
SETF3
SETTAB DM 128,"ACCESS"
DM 129,"BAUD"
DM 130,"CHECK"
DM 131,"DEBUG"
DM 132,"DUPLEX"
DM 133,"EOL"
DM 134,"ESCAPE"
DM 135,"FILE"
DM 136,"FLOW"
DM 137,"LENGTH"
DM 138,"MARKER"
DM 139,"NEWLINE"
DM 140,"NUMPAD"
DM 141,"PADCHAR"
DM 142,"PARITY"
DM 143,"PAUSE"
DM 144,"QBIN"
DM 145,"QCTL"
DM 146,"REPT"
DM 147,"RETRY"
DM 148,"TEDESC"
DM 149,"TEDMODE"
DM 150,"TIMEOUT"
DM 255
SETJTB DW [ACC 128
DW [BAUD 129
DW [CHECK 130
DW [DEBUG 131
DW [DUPL 132
DW [EOL 133
DW [ESCAPE 134
DW [FILE 135
DW [FLOW 136
DW [LENGTH 137
DW [MARKER 138
DW [NEWL 139
DW [NUMPAD 140
DW [PADCHAR 141
DW [PAR 142
DW [PAUSE 143
DW [QBIN 144
DW [QCTL 145
DW [REPT 146
DW [RETRY 147
DW [TEDESC 148
DW [TED 149
DW [TIME 150
[BAUD LD DE,PBAUD
LD BC,BAUD
CALL [TAB
JP FIXBAUD
PBAUD DM 128,"300/300"
DM 129,"1200/75"
DM 130,"75/1200"
DM 131,"1200/1200"
DM 132,"2400/2400"
DM 133,"4800/4800"
DM 255
PBAUDS
[DUPL LD DE,PDUPL
LD BC,DUPLEX
JP [TAB
PDUPL DM 128,"HALF"
DM 129,"FULL"
DM 255
PDUPLS
[PAR LD DE,PPAR
LD BC,PARITET
JP [TAB
PPAR DM 128,"NONE"
DM 129,"SPACE",129,"0"
DM 130,"MARK",130,"1"
DM 131,"EVEN"
DM 132,"ODD"
DM 255
PPARS
[FLOW LD DE,PFLOW
LD BC,FLOW
JP [TAB
PFLOW DM 128,"OFF"
DM 129,"XON/XOFF"
DM 255
PFLOWS
[TIME LD DE,TIME
JR [TAL
[RETRY LD DE,RETRY
[TAL PUSH DE
CALL G\RTAL
POP BC
EX DE,HL
LD DE,PTAL
JPC SET2
LD A,H
AND A
JPNZ SET2
LD A,L
CP 1
JPC SET2
CP 31
JPNC SET2
LD (BC),A
CALL 7:66
AND A
RET
PTAL DM 254,"1-30"
DM 255
PTALS
[FILE LD DE,PFILE
LD BC,FILE
JP [TAB
PFILE DM 128,"TEXT"
DM 129,"BIN"
DM 130,"AUTO"
DM 255
PFILES
[LENGTH CALL G\RTAL
EX DE,HL
LD DE,PLENGTH
JPC SET2
LD A,H
AND A
JPNZ SET2
LD A,L
CP 20
JPC SET2
CP 95
JPNC SET2
LD (LENGTH),A
CALL 7:66
RET
PLENGTH DM 254,"20-94"
DM 255
PLENGTHS
[MARKER LD DE,MARKER
JP [TKN
[CHECK LD DE,PCHECK
LD BC,CHECK
[TAB PUSH DE
PUSH BC
CALL STRSCAN
POP BC
POP DE
RETC Ambigious
JPNZ SET2
AND 127
LD (BC),A
CALL 7:66
RET
PCHECK DM 129,"1"
DM 130,"2"
DM 255
PCHECKS
[EOL LD DE,EOL
JR [TKN
[NUMPAD LD DE,NUMPAD
JR [TKN
[PADCHAR LD DE,PADCHAR
JR [TKN
[QCTL LD DE,QCTL
JR [TKN
[QBIN LD DE,QBIN
JR [TKN
[ESCAPE LD DE,ESCAPE
JR [TKN
[TEDESC LD DE,TEDESC
JR [TKN
[REPT LD DE,REPT
[TKN PUSH DE Spara variabel
CALL G\RTAL
POP BC
EX DE,HL
LD DE,PTKN
JPC SET2
LD A,H
AND A
JPNZ SET2
LD A,L
BIT 7,A
JPNZ SET2
LD (BC),A
CALL 7:66
AND A
RET
PTKN DM 254,"0-127"
DM 255
PTKNS
[ACC LD DE,PACC
LD BC,ACCESS
JP [TAB
PACC DM 128,"PREPARE"
DM 129,"KILL"
DM 130,"STOP"
DM 255
PACCS
[DEBUG LD DE,PDEBUG
LD BC,DEBUG
JP [TAB
PDEBUG DM 128,"OFF"
DM 129,"PACKET"
DM 130,"DUMP"
DM 255
PDEBUGS
[TED LD DE,PTED
LD BC,TEDSAVE
CALL [TAB
RET
PTED DM 128,"OFF"
DM 129,"SAVE"
DM 130,"SEND"
DM 255
PTEDS
[NEWL LD DE,PNEWL
LD BC,NEWLINE
JP [TAB
PNEWL DM 128,"OFF"
DM 129,"ON"
DM 255
PNEWLS
[PAUSE LD DE,PAUSE
JP [TKN
SHOWTAB DW PACC,PACCS-PACC 128
DW PBAUD,PBAUDS-PBAUD 129
DW PCHECK,PCHECKS-PCHECK 130
DW PDEBUG,PDEBUGS-PDEBUG 131
DW PDUPL,PDUPLS-PDUPL 132
DW PTKN,PTKNS-PTKN eol 133
DW PTKN,PTKNS-PTKN escape 134
DW PFILE,PFILES-PFILE 135
DW PFLOW,PFLOWS-PFLOW 136
DW PLENGTH,PLENGTHS-PLENGTH 137
DW PTKN,PTKNS-PTKN marker 138
DW PNEWL,PNEWLS-PNEWL 139
DW PTKN,PTKNS-PTKN numpad 140
DW PTKN,PTKNS-PTKN padchar 141
DW PPAR,PPARS-PPAR 142
DW PTKN,PTKNS-PTKN pause 143
DW PTKN,PTKNS-PTKN qbin 144
DW PTKN,PTKNS-PTKN qctl 145
DW PTKN,PTKNS-PTKN rept 146
DW PTAL,PTALS-PTAL retry 147
DW PTKN,PTKNS-PTKN TEDesc 148
DW PTED,PTEDS-PTED 149
DW PTAL,PTALS-PTAL time 150
FIXBAUD LD A,(BAUD)
INC A
LD HL,FIXBAUD2-5
LD BC,5
FIXBAUD1 ADD HL,BC
DEC A
JRNZ FIXBAUD1
LD A,(HL) Kort tid f|r
INC HL tangentrepeet
LD (TAN1-1),A
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD (BAUDSEND),DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD (BAUDREC),DE
RET
FIXBAUD2 DB 3
DW BAUD300,BAUD300
DB 5
DW BAUD75,BAUD1200
DB 2
DW BAUD1200,BAUD75
DB 2
DW BAUD1200,BAUD1200
DB 2
DW BAUD2400,BAUD2400
DB 2
DW BAUD4800,BAUD4800
FIXTED LD A,(TEDFLG)
AND A
RETZ TED ej i minnet
CALL R[KNA Ant rader i TED
LD (TEDANRAD),DE
INC DE
LD (TEDINRAD),DE
CALL TILLBUFF
XOR A
LD (TEDKOL),A
LD L,A
LD H,A
LD (TEDUTRAD),HL
RET
PARMAREA
ACCESS DB 0 Kolla om fil finns
BAUD DB 1 Baud
CHECK DB 2 Checksummetyp
DEBUG DB 0 Debug-mode
DUPLEX DB 1 Duplex
EOL DB 13 End of packet
ESCAPE DB 27 Esccape-tkn terminal
FILE DB 2 Filtyp
FLOW DB 1 Flow controll
LENGTH DB 94 Packetl{ngd
MARKER DB 1 Start of packet
NEWLINE DB 0 Tolka <RETURN> som CRLF
NUMPAD DB 0 Antal PAD-tkn
PADCHAR DB 0 PAD-tecken
PARITET DB 0 Paritet
PAUSE DB 0 Paus innan packet s{nds
QBIN DB "&"
QCTL DB "#"
REPT DB "~"
RETRY DB 5 Antal omf|rs|k
TEDESC DB 0 Hopp-till-TED-tangent
TEDSAVE DB 0 Spara/s{nda text i TED
TIME DB 10 Timeout
PARMLEN EQU $-PARMAREA
LOG DB 0 Logga p} disk
DMP DB 0 S{nd iv{g fil