home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
luxorabc80.tar.gz
/
luxorabc80.tar
/
kerm2.asm
< prev
next >
Wrap
Assembly Source File
|
1990-07-08
|
14KB
|
568 lines
; KERM2.ASM
; Anders Franz`n <5258>
; Stockholm 1987-09-13
BAUD75 EQU 2:117
BAUD300 EQU 9:213
BAUD1200 EQU 39:82
BAUD2400 EQU 78:165
BAUD4800 EQU 157:74
; Flaggor
; 0 L{mna terminal
; 1 Hoppa till TED
; 2 XOFF mottaget
; 3 XOFF s{nt
; 4 Inbuff full
; 5 Data i TED-buff
; 6 TED full
; 7 Fel p} DUMP/LOG-fil
INIT LD HL,BUFF1
LD (INBUFF),HL
LD A,L Rensa mottagar-
LD (INPOS),A buffert
INIT1 LD HL,BUFF2
INP 56 Undvik
LD (HL),A dubbeltryck!
LD (UTBUFF),HL
LD A,L Rensa tangent-
LD (UTPOS),A buffert
LD H,36
LD (TIMER),HL
LD A,(FLAGG)
AND 00011100B
LD (FLAGG),A
CALL FIXBAUD
CALL FIXTED
RET
TERMINAL LD (RETUR),SP
LD HL,TERMBILD
CALL VISABILD
CALL 2:147
EX DE,HL
SET 7,(HL) T{nd mark|r
CALL INIT1 T|m tangentbuff
CALL INTON Sl} p} interrupt
CALL XON Ev s{nd XON
TERM1 CALL TAN Polla tangenter
LD HL,FLAGG
BIT 0,(HL)
JPNZ EXIT Avsluta!
BIT 2,(HL)
JRNZ TERM2 XOFF mottaget
CALL CHECKTAN Kolla om tangent
CALLC TKNUT Behandla tangent
INP 58
AND 2 B{rv}g?
JRNZ TERM2 Nej, hoppa
CALL TEDSEND S{nda fr}n TED?
CALLC TKNUT Behandla tkn
LD A,(DMP)
AND A
CALLNZ DISK Ev tkn fr}n fil
CALLC TKNUT Behandla tkn
TERM2 CALL MOTTAG L{s inputbuffer
CALLC TKNIN Behandla tkn
INP 58
AND 2 B{rv}g?
JRZ TERM1 Ja, hoppa
LD HL,FLAGG
RES 2,(HL) Inget XOFF
JR TERM1
; L{mna terminalrutinen
EXIT CALL XOFF S{nd XOFF
LD HL,FLAGG
BIT 5,(HL)
CALLNZ TS5 Spar i TED
CALL 2:147
EX DE,HL
RES 7,(HL) Sl{ck mark|r
LD DE,TERMBILD
CALL SPARBILD
CALL INTOFF Sl} av interrupt
LD SP,(RETUR)
RET
;Sl} p} interrupt
INTON DI St{ng interrupt
LD A,I
LD (IREG),A Spara register
LD HL,VEKTOR Interruptvektor
LD A,H H|g byte till
LD I,A CPU:ns I-reg
LD A,L L}g byte till
OUT 57 PIO:ns port A
LD A,4FH Programmera PIO
OUT 57 f|r inputmode
EXX
LD HL,S1
LD DE,R1
EXX
EI Sl} p} interrupt
RET
;Sl} av interrupt
INTOFF LD A,(BITAR) H}ller byte p}
AND A att s{ndas?
JRNZ INTOFF Ja, v{nta
DI
LD A,255
OUT 57 PIO i bitmode
OUT 57 Alla bitar in
LD A,(IREG)
LD I,A ]terst{ll I-reg
LD A,52 L}g byte till
OUT 57 PIO:ns port A
EI Sl} p} interrupt
LD A,200 L}ng tid timer
LD (253:247),A tangentbordet
XOR A
LD (253:245),A Ingen tangent
RET
;Behandla intkn
TKNIN CP 10
JRNZ TKNIN2
LD A,(NEWLINE)
DEC A
JRNZ TKNIN1
LD A,13
CALL SKRIV
TKNIN1 LD A,10
TKNIN2 CALL SKRIV
RET
;Kolla om tkn mottaget
MOTTAG LD DE,(INBUFF)
LD HL,FLAGG
BIT 4,(HL)
JRZ MOT2 Buffer ej full
LD A,(INPOS)
SUB E
JPP MOT1
NEG
MOT1 CP 32
JRNC MOT2 Buffer ej t|md
CALL XON
RES 4,(HL) Ingen panik!
MOT2 LD A,(INPOS)
CP E Mottaget tkn?
RETZ Nej, retur
LD E,A
INC A Detta tkn
LD (INPOS),A behandlat
LD A,(DE) Tag mottaget tkn
SCF
RET
;Polla tangentbordet
CHECKTAN LD HL,(UTBUFF)
LD A,(UTPOS)
CP L Tangent i buff?
RETZ Nej, retur
LD L,A
INC A
LD (UTPOS),A
LD A,(HL)
AND 127
SCF
RET
;Polla tangentbordet
TAN LD HL,(UTBUFF)
INP 56 L{s tangentbord
BIT 7,A Tangent nere?
JRZ TAN4 Nej, hoppa
LD B,18 L}ng tid
CP (HL) Repetering?
JRNZ TAN1 Nej, hoppa
LD BC,(TIMER)
INC B
DJNZ TAN4
LD B,3
TAN1 LD (TIMER),BC
LD C,A
XOR A
OUT 6
LD A,57
OUT 6 Klick
LD A,(ESCAPE)
OR 128
CP C
JRZ TAN2 ESCAPE
LD A,(TEDFLG)
AND A
JRZ TAN3 TED ej i minnet
LD A,(TEDESC)
OR 128
CP C
JRNZ TAN3 Ej TED-escape
SCF
TAN2 LD (HL),C
LD HL,KERMAREA
SET 3,(HL)
LD HL,FLAGG
SET 0,(HL)
RETNC
SET 1,(HL)
RET
TAN3 LD A,C
LD (HL),A
INC L
LD (UTBUFF),HL
TAN4 LD (HL),A Spara nul{get
RET
;Behandla uttkn
TKNUT CP 13
JRNZ TKNUT1 Ej CR
LD C,A
LD A,(NEWLINE)
DEC A
LD A,C
JRNZ TKNUT1
CALL TKNUT1 Tolka <RETURN>
LD A,10 som CRLF
TKNUT1 LD C,A
LD A,(DUPLEX)
AND A Halv duplex?
LD A,C
CALLZ SKRIV Ja, till sk{rm
CALL S[ND S{nd tangenten
RET
;Skriver tkn p} sk{rm
SKRIV AND 127
LD (SLASK),A Spara tkn
CALL 2:147
EX DE,HL
RES 7,(HL) Sl{ck mark|r
LD A,(SLASK)
CP 32
JRNC SKR5
CP 7
JRZ SKR1
CP 8
JRZ SKR2
CP 9
JRZ SKR6
CP 10
JRZ SKR7
CP 12
JRZ SKR3
CP 13
JRNZ SKR9
LD (IX+1),0
JR SKR8
SKR1 XOR A
OUT 6
LD A,131
OUT 6 Pling!
JR SKR9
SKR2 DEC HL
DEC (IX+1) Minska kolumn
JPP SKR9
LD A,(2:111) 39 eller 79
LD (IX+1),A
DEC (IX+0) F|reg}ende rad
JPP SKR8
JR SKR7
SKR3 CALL 2:118
JR SKR8
SKR5 LD (HL),A Skriv p} sk{rm
SKR6 INC HL
INC (IX+1) \ka kolumn
LD A,(2:111) 39 eller 79
CP (IX+1)
JRNC SKR9 Raden ej slut
LD (IX+1),0
SKR7 CALL 2:56 Ny rad ev scroll
SKR8 CALL 2:147
EX DE,HL
SKR9 SET 7,(HL) T{nd mark|r
LD A,(TEDSAVE)
DEC A
CALLZ TEDSPAR Spara text i TED
LD A,(LOG)
AND A
LD A,(SLASK)
RETZ Ingen loggning
CP 10
JRZ SKR10 Rad ska loggas
CP 32
RETC
LD HL,(LOGBUFF)
LD (HL),A
INC L
LD (LOGBUFF),HL
RET
SKR10 LD HL,(LOGBUFF)
LD (HL),13
INC L
LD (HL),10
INC L
LD DE,BUFF3
AND A
SBC HL,DE
LD C,L
LD B,H
EX DE,HL
LD IX,FIL
LD DE,8:150
CALL FILCONTR Skriv rad
JRC SKR12
LD HL,BUFF3
LD (LOGBUFF),HL
LD A,(SLASK) ]terst{ll
RET
SKR12 LD (FELKOD),A
LD HL,FLAGG
SET 0,(HL) L{mna terminal
SET 7,(HL) Fel p} LOG-fil
LD A,(SLASK) ]terst{ll
RET
;S{nder tkn fr}n fil
DISK LD IX,KERMAREA
CALL GETFIL H{mta ett tkn
CCF
RETC Retur om OK
AND A
JRNZ DISK1 Annat fel {n EOF
LD IX,FIL
LD DE,8:144
CALL FILCONTR Close
JRC DISK1
XOR A
LD (DMP),A
RET
DISK1 LD (FELKOD),A
LD HL,FLAGG
SET 0,(HL) L{mna terminal
SET 7,(HL) Fel p} DUMP-fil
RET
;S{nd XOFF om XON {r s{nt
XOFF LD A,(FLOW)
DEC A
RETNZ XOFF anv{nds ej
PUSH HL
LD HL,FLAGG
BIT 3,(HL) XOFF s{nt?
LD A,19
CALLZ S[ND Nej, s{nd XOFF
LD HL,FLAGG
SET 3,(HL)
POP HL
RET
;S{nd XON om XOFF {r s{nt
XON LD A,(FLOW)
DEC A
RETNZ XON anv{nds ej
PUSH HL
LD HL,FLAGG
BIT 3,(HL) XOFF s{nt?
LD A,17
CALLNZ S[ND Ja, s{nd XON
LD HL,FLAGG
RES 3,(HL)
POP HL
RET
;S{nd iv{g tecknet A
S[ND PUSH HL Spara register
PUSH DE
PUSH BC
LD C,A Byte att s{nda
INP 58
AND 2 Finns b{rv}g?
JRZ S[ND1 Ja, hoppa
XOR A
OUT 6
LD A,131 Pling i
OUT 6 h|gtalaren
SCF
JR S[ND7 S{nd inget!
S[ND1 LD B,10 Tio bitar
LD A,(PARITET)
AND A
JRZ S[ND5 S{nd byte "r}"
RES 7,C
DEC A
JRZ S[ND5 Alltid noll
DEC A
JRZ S[ND4 Alltid ett
DEC A
LD A,C
JRZ S[ND3 J{mn paritet
AND A
JPPO S[ND5 Hoppa om udda
JR S[ND4
S[ND3 AND A
JPPE S[ND5 Hoppa om j{mn
S[ND4 SET 7,C
S[ND5 PUSH BC
CALL TAN Polla tangenter
POP BC
LD A,(BITAR) P}g}r s{ndning?
AND A
JRNZ S[ND5 Ja, v{nta
LD (BYTE),BC Spara B och C
S[ND7 POP BC ]terst{ll
POP DE register
POP HL
RET Klart !
;S{nd och ta emot data
TERMINT EX AF
EXX
JP (HL) Hoppa
S1 CALL REC
INP 58
OR 16+8 RTS + ettbit
OUT 58
LD A,(BITAR)
AND A Startbit (NC)
JRZ S1 Inget att s{nda
LD B,A
LD HL,0
LD (S5+7),HL
LD A,(BYTE)
LD C,A Byte att s{nda
S3 LD (S5+16),BC
LD C,58
IN B,(C)
SET 3,B TxD=1
JRC S4 Hoppa om ettbit
RES 3,B TxD=0
S4 OUT (C),B Skicka iv{g bit
S5 CALL REC
LD HL,(BAUDSEND)
LD BC,0
ADD HL,BC
LD (S5+7),HL
JRNC S5
LD BC,0
RR C
DJNZ S3
XOR A
LD (BITAR),A
JR S1
REC EX DE,HL
JP (HL)
R1 CALL END V{nta 128 us
INP 58 L{s V24-porten
RRC A Linjen l}g?
JRNC R1 Ja, b|rja om
R2 CALL END V{nta 128 us
INP 58 L{s V24-porten
RRC A Startbit?
JRC R2 Nej, inte {nnu
LD HL,206:164 19% av bittid
LD (R5+7),HL
R3 CALL END
INP 58 L{s V24-porten
RRC A St|rning?
JRC R2 Ja, b|rja om
LD HL,(BAUDREC)
LD DE,(R5+7)
ADD HL,DE Har halva bit-
LD (R5+7),HL tiden g}tt?
JRNC R3 Nej, v{nta...
LD B,9
R4 RR C Spara bit i C
LD (R5+16),BC
R5 CALL END V{nta 128 us
LD HL,(BAUDREC)
LD DE,0
ADD HL,DE Har n{sta bit
LD (R5+7),HL kommit in nu?
JRNC R5 Nej, v{nta
LD BC,0
INP 58 L{s V24-porten
RRC A Biten till carry
DJNZ R4 Upprepa om fler
JRNC R1 Ej stoppbit
CALL END
LD A,(R5+16)
LD HL,(INBUFF)
LD (HL),A Spara tkn
INC L
LD (INBUFF),HL
LD C,A
LD A,(INPOS)
SUB L
LD HL,FLAGG
JPP R6
NEG
R6 CP 64
JRC R7 Buffer ej full
BIT 4,(HL)
JRNZ R7 Redan noterat
LD A,(BITAR)
AND A
JRNZ R7 Tkn s{nds tyv{rr
CALL XOFF S{nd XOFF
SET 4,(HL) Notera buff full
R7 LD A,(PARITET)
AND A
LD A,C
JRZ R8 Paritet NONE
AND 127 Ev paritet bort
R8 CP 17
JRZ R9 XON
CP 19
JPNZ R2 Ej XOFF
SET 2,(HL) Flagga XOFF
JP R2
R9 RES 2,(HL) Sl{ck flagga
JP R2 f|r XOFF
END LD HL,(TIMER)
DEC HL
LD (TIMER),HL
POP DE Adress i "s{nd"
POP HL Adress i "rec"
EXX ]terst{ll
EX AF registren
EI Sl} p} interrupt
RETI Interrupt klart
ORG $/2*2+2 J{mn adress!
VEKTOR DW TERMINT Interruptvektor
BAUDREC DW BAUD1200 Mottagningsfart
BAUDSEND DW BAUD75 S{ndningsfart
BYTE DB 0 Byte att s{nda
BITAR DB 0 Antal bitar
INBUFF DW 0 Mottaget data
INPOS DW 0 Sista position
UTBUFF DW 0 Tangentdata
UTPOS DW 0 Sista position
TIMER DW 0 Repetition
IREG DB 0 V{rde p} I-reg
FLAGG DB 0
SLASK DB 0
FELKOD DB 0 Felkod LOG/DUMP
LOGBUFF DW 0
RETUR DW 0