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

  1. ; KERM2.ASM
  2. ; Anders Franz`n <5258>
  3. ; Stockholm 1987-09-13
  4.  
  5.  
  6. BAUD75   EQU  2:117
  7. BAUD300  EQU  9:213
  8. BAUD1200 EQU  39:82
  9. BAUD2400 EQU  78:165
  10. BAUD4800 EQU  157:74
  11.  
  12. ; Flaggor
  13. ; 0  L{mna terminal
  14. ; 1  Hoppa till TED
  15. ; 2  XOFF mottaget
  16. ; 3  XOFF s{nt
  17. ; 4  Inbuff full
  18. ; 5  Data i TED-buff
  19. ; 6  TED full
  20. ; 7  Fel p} DUMP/LOG-fil
  21.  
  22. INIT     LD   HL,BUFF1
  23.          LD   (INBUFF),HL
  24.          LD   A,L       Rensa mottagar-
  25.          LD   (INPOS),A buffert
  26. INIT1    LD   HL,BUFF2
  27.          INP  56        Undvik
  28.          LD   (HL),A    dubbeltryck!
  29.          LD   (UTBUFF),HL
  30.          LD   A,L       Rensa tangent-
  31.          LD   (UTPOS),A buffert
  32.          LD   H,36
  33.          LD   (TIMER),HL
  34.          LD   A,(FLAGG)
  35.          AND  00011100B
  36.          LD   (FLAGG),A
  37.          CALL FIXBAUD
  38.          CALL FIXTED
  39.          RET
  40.  
  41. TERMINAL LD   (RETUR),SP
  42.          LD   HL,TERMBILD
  43.          CALL VISABILD
  44.          CALL 2:147
  45.          EX   DE,HL
  46.          SET  7,(HL)    T{nd mark|r
  47.          CALL INIT1     T|m tangentbuff
  48.          CALL INTON     Sl} p} interrupt
  49.          CALL XON       Ev s{nd XON
  50. TERM1    CALL TAN       Polla tangenter
  51.          LD   HL,FLAGG
  52.          BIT  0,(HL)
  53.          JPNZ EXIT      Avsluta!
  54.          BIT  2,(HL)
  55.          JRNZ TERM2     XOFF mottaget
  56.          CALL CHECKTAN  Kolla om tangent
  57.          CALLC TKNUT    Behandla tangent
  58.          INP  58
  59.          AND  2         B{rv}g?
  60.          JRNZ TERM2     Nej, hoppa
  61.          CALL TEDSEND   S{nda fr}n TED?
  62.          CALLC TKNUT    Behandla tkn
  63.          LD   A,(DMP)
  64.          AND  A
  65.          CALLNZ DISK    Ev tkn fr}n fil
  66.          CALLC TKNUT    Behandla tkn
  67. TERM2    CALL MOTTAG    L{s inputbuffer
  68.          CALLC TKNIN    Behandla tkn
  69.          INP  58
  70.          AND  2         B{rv}g?
  71.          JRZ  TERM1     Ja, hoppa
  72.          LD   HL,FLAGG
  73.          RES  2,(HL)    Inget XOFF
  74.          JR   TERM1
  75.  
  76. ; L{mna terminalrutinen
  77. EXIT     CALL XOFF      S{nd XOFF
  78.          LD   HL,FLAGG
  79.          BIT  5,(HL)
  80.          CALLNZ TS5     Spar i TED
  81.          CALL 2:147
  82.          EX   DE,HL
  83.          RES  7,(HL)    Sl{ck mark|r
  84.          LD   DE,TERMBILD
  85.          CALL SPARBILD
  86.          CALL INTOFF    Sl} av interrupt
  87.          LD   SP,(RETUR)
  88.          RET
  89.  
  90. ;Sl} p} interrupt
  91. INTON    DI             St{ng interrupt
  92.          LD   A,I
  93.          LD   (IREG),A  Spara register
  94.          LD   HL,VEKTOR Interruptvektor
  95.          LD   A,H       H|g byte till
  96.          LD   I,A       CPU:ns I-reg
  97.          LD   A,L       L}g byte till
  98.          OUT  57        PIO:ns port A
  99.          LD   A,4FH     Programmera PIO
  100.          OUT  57        f|r inputmode
  101.          EXX
  102.          LD   HL,S1
  103.          LD   DE,R1
  104.          EXX
  105.          EI             Sl} p} interrupt
  106.          RET
  107.  
  108. ;Sl} av interrupt
  109. INTOFF   LD   A,(BITAR) H}ller byte p}
  110.          AND  A         att s{ndas?
  111.          JRNZ INTOFF    Ja, v{nta
  112.          DI
  113.          LD   A,255
  114.          OUT  57        PIO i bitmode
  115.          OUT  57        Alla bitar in
  116.          LD   A,(IREG)
  117.          LD   I,A       ]terst{ll I-reg
  118.          LD   A,52      L}g byte till
  119.          OUT  57        PIO:ns port A
  120.          EI             Sl} p} interrupt
  121.          LD   A,200     L}ng tid timer
  122.          LD   (253:247),A tangentbordet
  123.          XOR  A
  124.          LD   (253:245),A Ingen tangent
  125.          RET
  126.  
  127. ;Behandla intkn
  128. TKNIN    CP   10
  129.          JRNZ TKNIN2
  130.          LD   A,(NEWLINE)
  131.          DEC  A
  132.          JRNZ TKNIN1
  133.          LD   A,13
  134.          CALL SKRIV
  135. TKNIN1   LD   A,10
  136. TKNIN2   CALL SKRIV
  137.          RET
  138.  
  139. ;Kolla om tkn mottaget
  140. MOTTAG   LD   DE,(INBUFF)
  141.          LD   HL,FLAGG
  142.          BIT  4,(HL)
  143.          JRZ  MOT2      Buffer ej full
  144.          LD   A,(INPOS)
  145.          SUB  E
  146.          JPP  MOT1
  147.          NEG
  148. MOT1     CP   32
  149.          JRNC MOT2      Buffer ej t|md
  150.          CALL XON
  151.          RES  4,(HL)    Ingen panik!
  152. MOT2     LD   A,(INPOS)
  153.          CP   E         Mottaget tkn?
  154.          RETZ           Nej, retur
  155.          LD   E,A
  156.          INC  A         Detta tkn
  157.          LD   (INPOS),A behandlat
  158.          LD   A,(DE)    Tag mottaget tkn
  159.          SCF
  160.          RET
  161.  
  162. ;Polla tangentbordet
  163. CHECKTAN LD   HL,(UTBUFF)
  164.          LD   A,(UTPOS)
  165.          CP   L         Tangent i buff?
  166.          RETZ           Nej, retur
  167.          LD   L,A
  168.          INC  A
  169.          LD   (UTPOS),A
  170.          LD   A,(HL)
  171.          AND  127
  172.          SCF
  173.          RET
  174.  
  175. ;Polla tangentbordet
  176. TAN      LD   HL,(UTBUFF)
  177.          INP  56        L{s tangentbord
  178.          BIT  7,A       Tangent nere?
  179.          JRZ  TAN4      Nej, hoppa
  180.          LD   B,18      L}ng tid
  181.          CP   (HL)      Repetering?
  182.          JRNZ TAN1      Nej, hoppa
  183.          LD   BC,(TIMER)
  184.          INC  B
  185.          DJNZ TAN4
  186.          LD   B,3
  187. TAN1     LD   (TIMER),BC
  188.          LD   C,A
  189.          XOR  A
  190.          OUT  6
  191.          LD   A,57
  192.          OUT  6         Klick
  193.          LD   A,(ESCAPE)
  194.          OR   128
  195.          CP   C
  196.          JRZ  TAN2      ESCAPE
  197.          LD   A,(TEDFLG)
  198.          AND  A
  199.          JRZ  TAN3      TED ej i minnet
  200.          LD   A,(TEDESC)
  201.          OR   128
  202.          CP   C
  203.          JRNZ TAN3      Ej TED-escape
  204.          SCF
  205. TAN2     LD   (HL),C
  206.          LD   HL,KERMAREA
  207.          SET  3,(HL)
  208.          LD   HL,FLAGG
  209.          SET  0,(HL)
  210.          RETNC
  211.          SET  1,(HL)
  212.          RET
  213.  
  214. TAN3     LD   A,C
  215.          LD   (HL),A
  216.          INC  L
  217.          LD   (UTBUFF),HL
  218. TAN4     LD   (HL),A    Spara nul{get
  219.          RET
  220.  
  221. ;Behandla uttkn
  222. TKNUT    CP   13
  223.          JRNZ TKNUT1    Ej CR
  224.          LD   C,A
  225.          LD   A,(NEWLINE)
  226.          DEC  A
  227.          LD   A,C
  228.          JRNZ TKNUT1
  229.          CALL TKNUT1    Tolka <RETURN>
  230.          LD   A,10      som CRLF
  231. TKNUT1   LD   C,A
  232.          LD   A,(DUPLEX)
  233.          AND  A         Halv duplex?
  234.          LD   A,C
  235.          CALLZ SKRIV    Ja, till sk{rm
  236.          CALL S[ND      S{nd tangenten
  237.          RET
  238.  
  239. ;Skriver tkn p} sk{rm
  240. SKRIV    AND  127
  241.          LD   (SLASK),A Spara tkn
  242.          CALL 2:147
  243.          EX   DE,HL
  244.          RES  7,(HL)    Sl{ck mark|r
  245.          LD   A,(SLASK)
  246.          CP   32
  247.          JRNC SKR5
  248.          CP   7
  249.          JRZ  SKR1
  250.          CP   8
  251.          JRZ  SKR2
  252.          CP   9
  253.          JRZ  SKR6
  254.          CP   10
  255.          JRZ  SKR7
  256.          CP   12
  257.          JRZ  SKR3
  258.          CP   13
  259.          JRNZ SKR9
  260.          LD   (IX+1),0
  261.          JR   SKR8
  262.  
  263. SKR1     XOR  A
  264.          OUT  6
  265.          LD   A,131
  266.          OUT  6         Pling!
  267.          JR   SKR9
  268.  
  269. SKR2     DEC  HL
  270.          DEC  (IX+1)    Minska kolumn
  271.          JPP  SKR9
  272.          LD   A,(2:111) 39 eller 79
  273.          LD   (IX+1),A
  274.          DEC  (IX+0)    F|reg}ende rad
  275.          JPP  SKR8
  276.          JR   SKR7
  277.  
  278. SKR3     CALL 2:118
  279.          JR   SKR8
  280.  
  281. SKR5     LD   (HL),A    Skriv p} sk{rm
  282. SKR6     INC  HL
  283.          INC  (IX+1)    \ka kolumn
  284.          LD   A,(2:111) 39 eller 79
  285.          CP   (IX+1)
  286.          JRNC SKR9      Raden ej slut
  287.          LD   (IX+1),0
  288. SKR7     CALL 2:56      Ny rad ev scroll
  289. SKR8     CALL 2:147
  290.          EX   DE,HL
  291. SKR9     SET  7,(HL)    T{nd mark|r
  292.          LD   A,(TEDSAVE)
  293.          DEC  A
  294.          CALLZ TEDSPAR  Spara text i TED
  295.          LD   A,(LOG)
  296.          AND  A
  297.          LD   A,(SLASK)
  298.          RETZ           Ingen loggning
  299.          CP   10
  300.          JRZ  SKR10     Rad ska loggas
  301.          CP   32
  302.          RETC
  303.          LD   HL,(LOGBUFF)
  304.          LD   (HL),A
  305.          INC  L
  306.          LD   (LOGBUFF),HL
  307.          RET
  308.  
  309. SKR10    LD   HL,(LOGBUFF)
  310.          LD   (HL),13
  311.          INC  L
  312.          LD   (HL),10
  313.          INC  L
  314.          LD   DE,BUFF3
  315.          AND  A
  316.          SBC  HL,DE
  317.          LD   C,L
  318.          LD   B,H
  319.          EX   DE,HL
  320.          LD   IX,FIL
  321.          LD   DE,8:150
  322.          CALL FILCONTR  Skriv rad
  323.          JRC  SKR12
  324.          LD   HL,BUFF3
  325.          LD   (LOGBUFF),HL
  326.          LD   A,(SLASK) ]terst{ll
  327.          RET
  328.  
  329. SKR12    LD   (FELKOD),A
  330.          LD   HL,FLAGG
  331.          SET  0,(HL)    L{mna terminal
  332.          SET  7,(HL)    Fel p} LOG-fil
  333.          LD   A,(SLASK) ]terst{ll
  334.          RET
  335.  
  336. ;S{nder tkn fr}n fil
  337. DISK     LD   IX,KERMAREA
  338.          CALL GETFIL    H{mta ett tkn
  339.          CCF
  340.          RETC           Retur om OK
  341.          AND  A
  342.          JRNZ DISK1     Annat fel {n EOF
  343.          LD   IX,FIL
  344.          LD   DE,8:144
  345.          CALL FILCONTR  Close
  346.          JRC  DISK1
  347.          XOR  A
  348.          LD   (DMP),A
  349.          RET
  350.  
  351. DISK1    LD   (FELKOD),A
  352.          LD   HL,FLAGG
  353.          SET  0,(HL)    L{mna terminal
  354.          SET  7,(HL)    Fel p} DUMP-fil
  355.          RET
  356.  
  357. ;S{nd XOFF om XON {r s{nt
  358. XOFF     LD   A,(FLOW)
  359.          DEC  A
  360.          RETNZ          XOFF anv{nds ej
  361.          PUSH HL
  362.          LD   HL,FLAGG
  363.          BIT  3,(HL)    XOFF s{nt?
  364.          LD   A,19
  365.          CALLZ S[ND     Nej, s{nd XOFF
  366.          LD   HL,FLAGG
  367.          SET  3,(HL)
  368.          POP  HL
  369.          RET
  370.  
  371. ;S{nd XON om XOFF {r s{nt
  372. XON      LD   A,(FLOW)
  373.          DEC  A
  374.          RETNZ          XON anv{nds ej
  375.          PUSH HL
  376.          LD   HL,FLAGG
  377.          BIT  3,(HL)    XOFF s{nt?
  378.          LD   A,17
  379.          CALLNZ S[ND    Ja, s{nd XON
  380.          LD   HL,FLAGG
  381.          RES  3,(HL)
  382.          POP  HL
  383.          RET
  384.  
  385. ;S{nd iv{g tecknet A
  386. S[ND     PUSH HL        Spara register
  387.          PUSH DE
  388.          PUSH BC
  389.          LD   C,A       Byte att s{nda
  390.          INP  58
  391.          AND  2         Finns b{rv}g?
  392.          JRZ  S[ND1     Ja, hoppa
  393.          XOR  A
  394.          OUT  6
  395.          LD   A,131     Pling i
  396.          OUT  6         h|gtalaren
  397.          SCF
  398.          JR   S[ND7     S{nd inget!
  399.  
  400. S[ND1    LD   B,10      Tio bitar
  401.          LD   A,(PARITET)
  402.          AND  A
  403.          JRZ  S[ND5     S{nd byte "r}"
  404.          RES  7,C
  405.          DEC  A
  406.          JRZ  S[ND5     Alltid noll
  407.          DEC  A
  408.          JRZ  S[ND4     Alltid ett
  409.          DEC  A
  410.          LD   A,C
  411.          JRZ  S[ND3     J{mn paritet
  412.          AND  A
  413.          JPPO S[ND5     Hoppa om udda
  414.          JR   S[ND4
  415.  
  416. S[ND3    AND  A
  417.          JPPE S[ND5     Hoppa om j{mn
  418. S[ND4    SET  7,C
  419. S[ND5    PUSH BC
  420.          CALL TAN       Polla tangenter
  421.          POP  BC
  422.          LD   A,(BITAR) P}g}r s{ndning?
  423.          AND  A
  424.          JRNZ S[ND5     Ja, v{nta
  425.          LD   (BYTE),BC Spara B och C
  426. S[ND7    POP  BC        ]terst{ll
  427.          POP  DE        register
  428.          POP  HL
  429.          RET            Klart !
  430.  
  431. ;S{nd och ta emot data
  432. TERMINT  EX   AF
  433.          EXX
  434.          JP   (HL)      Hoppa
  435.  
  436. S1       CALL REC
  437.          INP  58
  438.          OR   16+8      RTS + ettbit
  439.          OUT  58
  440.          LD   A,(BITAR)
  441.          AND  A         Startbit (NC)
  442.          JRZ  S1        Inget att s{nda
  443.          LD   B,A
  444.          LD   HL,0
  445.          LD   (S5+7),HL
  446.          LD   A,(BYTE)
  447.          LD   C,A       Byte att s{nda
  448. S3       LD   (S5+16),BC
  449.          LD   C,58
  450.          IN   B,(C)
  451.          SET  3,B       TxD=1
  452.          JRC  S4        Hoppa om ettbit
  453.          RES  3,B       TxD=0
  454. S4       OUT  (C),B     Skicka iv{g bit
  455. S5       CALL REC
  456.          LD   HL,(BAUDSEND)
  457.          LD   BC,0
  458.          ADD  HL,BC
  459.          LD   (S5+7),HL
  460.          JRNC S5
  461.          LD   BC,0
  462.          RR   C
  463.          DJNZ S3
  464.          XOR  A
  465.          LD   (BITAR),A
  466.          JR   S1
  467.  
  468. REC      EX   DE,HL
  469.          JP   (HL)
  470.  
  471. R1       CALL END       V{nta 128 us
  472.          INP  58        L{s V24-porten
  473.          RRC  A         Linjen l}g?
  474.          JRNC R1        Ja, b|rja om
  475. R2       CALL END       V{nta 128 us
  476.          INP  58        L{s V24-porten
  477.          RRC  A         Startbit?
  478.          JRC  R2        Nej, inte {nnu
  479.          LD   HL,206:164 19% av bittid
  480.          LD   (R5+7),HL
  481. R3       CALL END
  482.          INP  58        L{s V24-porten
  483.          RRC  A         St|rning?
  484.          JRC  R2        Ja, b|rja om
  485.          LD   HL,(BAUDREC)
  486.          LD   DE,(R5+7)
  487.          ADD  HL,DE     Har halva bit-
  488.          LD   (R5+7),HL tiden g}tt?
  489.          JRNC R3        Nej, v{nta...
  490.          LD   B,9
  491. R4       RR   C         Spara bit i C
  492.          LD   (R5+16),BC
  493. R5       CALL END       V{nta 128 us
  494.          LD   HL,(BAUDREC)
  495.          LD   DE,0
  496.          ADD  HL,DE     Har n{sta bit
  497.          LD   (R5+7),HL kommit in nu?
  498.          JRNC R5        Nej, v{nta
  499.          LD   BC,0
  500.          INP  58        L{s V24-porten
  501.          RRC  A         Biten till carry
  502.          DJNZ R4        Upprepa om fler
  503.          JRNC R1        Ej stoppbit
  504.          CALL END
  505.          LD   A,(R5+16)
  506.          LD   HL,(INBUFF)
  507.          LD   (HL),A    Spara tkn
  508.          INC  L
  509.          LD   (INBUFF),HL
  510.          LD   C,A
  511.          LD   A,(INPOS)
  512.          SUB  L
  513.          LD   HL,FLAGG
  514.          JPP  R6
  515.          NEG
  516. R6       CP   64
  517.          JRC  R7        Buffer ej full
  518.          BIT  4,(HL)
  519.          JRNZ R7        Redan noterat
  520.          LD   A,(BITAR)
  521.          AND  A
  522.          JRNZ R7        Tkn s{nds tyv{rr
  523.          CALL XOFF      S{nd XOFF
  524.          SET  4,(HL)    Notera buff full
  525. R7       LD   A,(PARITET)
  526.          AND  A
  527.          LD   A,C
  528.          JRZ  R8        Paritet NONE
  529.          AND  127       Ev paritet bort
  530. R8       CP   17
  531.          JRZ  R9        XON
  532.          CP   19
  533.          JPNZ R2        Ej XOFF
  534.          SET  2,(HL)    Flagga XOFF
  535.          JP   R2
  536.  
  537. R9       RES  2,(HL)    Sl{ck flagga
  538.          JP   R2        f|r XOFF
  539.  
  540. END      LD   HL,(TIMER)
  541.          DEC  HL
  542.          LD   (TIMER),HL
  543.          POP  DE        Adress i "s{nd"
  544.          POP  HL        Adress i "rec"
  545.          EXX            ]terst{ll
  546.          EX   AF        registren
  547.          EI             Sl} p} interrupt
  548.          RETI           Interrupt klart
  549.  
  550.          ORG  $/2*2+2   J{mn adress!
  551.  
  552. VEKTOR   DW TERMINT     Interruptvektor
  553. BAUDREC  DW BAUD1200    Mottagningsfart
  554. BAUDSEND DW BAUD75      S{ndningsfart
  555. BYTE     DB 0           Byte att s{nda
  556. BITAR    DB 0           Antal bitar
  557. INBUFF   DW 0           Mottaget data
  558. INPOS    DW 0           Sista position
  559. UTBUFF   DW 0           Tangentdata
  560. UTPOS    DW 0           Sista position
  561. TIMER    DW 0           Repetition
  562. IREG     DB 0           V{rde p} I-reg
  563. FLAGG    DB 0
  564. SLASK    DB 0
  565. FELKOD   DB 0           Felkod LOG/DUMP
  566. LOGBUFF  DW 0
  567. RETUR    DW 0
  568.