A Fast Terminal Program


A communication software for the serial interface card with transfer speeds up to 38400 baud (16 Bit RAM required). Additional 80 column card required.


       AORG >3000
       REF  VMBW,VWTR,KSCAN
SCHNIT EQU  >1540         * RS232/3
CHRCRU EQU  >1000         * CHAR-DEFINITIONEN
DSRROM EQU  >0            * CS DSR-ROM
 
SPACE  BYTE >20           * BLANK-CHAR
FLASH  BYTE >00           * FLASH-COLOR
TITLE  BYTE >0F           * TITLE-SCREEN-TASTE
 
CNTRL  BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>9D
       BYTE >98,>97,>93,>B2,>9F,>8F,>8C,>9B
       BYTE >83,>85,>84,>B3,>9E,>89,>8B,>80
       BYTE >96,>92,>86,>B4,>B7,>95,>8A,>8D
       BYTE >82,>94,>87,>B5,>B6,>99,>88,>8E
       BYTE >9A,>91,>81,>B1,>B0,>90,>9C,>BB
FCTN   BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>05
       BYTE >0A,>7E,>08,>04,>0F,>27,>C2,>B9
       BYTE >60,>0B,>09,>07,>06,>3F,>C1,>B8
       BYTE >7F,>5B,>7B,>02,>01,>5F,>C0,>C3
       BYTE >BE,>5D,>7D,>0E,>0C,>C6,>BF,>C4
       BYTE >5C,>B9,>7C,>03,>BC,>22,>BD,>BA
SHIFT  BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>2B
       BYTE >58,>57,>53,>40,>28,>4F,>4C,>3E
       BYTE >43,>45,>44,>23,>2A,>49,>4B,>3C
       BYTE >56,>52,>46,>24,>26,>55,>4A,>4D
       BYTE >42,>54,>47,>25,>5E,>59,>48,>4E
       BYTE >5A,>51,>41,>21,>29,>50,>3A,>2D
NORM   BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>3D
       BYTE >78,>77,>73,>32,>39,>6F,>6C,>2E
       BYTE >63,>65,>64,>33,>38,>69,>6B,>2C
       BYTE >76,>72,>66,>34,>37,>75,>6A,>6D
       BYTE >62,>74,>67,>35,>36,>79,>68,>6E
       BYTE >7A,>71,>61,>31,>30,>70,>3B,>2F
       EVEN
JMPLST DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA BCKSPC
       DATA HTAB
       DATA LNFEED
       DATA VTAB
       DATA CLS
       DATA CARRET
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA DCTRL2
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
       DATA NUL
REGDAT DATA >0004,>0170,>0203,>032F          * 80 ZEICHEN KARTE
       DATA >0402,>07F1,>088A,>0982
       DATA >0A00,>0CF5,>0DF0,>0E00
       DATA >0F00,>1000,>122D,>1300
       DATA >1700,>0000
TEXT0  TEXT '                                '
BLANK  TEXT '                                '
       TEXT '    1:  1200 Baud               '
       TEXT '    2:  9600 Baud               '
       TEXT '    3: 19200 Baud               '
       TEXT '    4: 38400 Baud               '
       TEXT '                                '
       TEXT ' 8 Datenbits, No Parrity, 1 Stop'
       TEXT '                                '
       EVEN
OLDKEY BSS  >2
MYWS   BSS  >20
*-----------------------------+
*      MAIN-PROG FOLLOW       !
*-----------------------------+
START  LWPI MYWS
       LI   0,>0040
       MOVB 0,@>8C02
       SWPB 0
       MOVB 0,@>8C02
       LI   2,>870
CLR    MOVB @SPACE,@>8C00
       DEC  2
       JNE  CLR
       LI   0,>4000
       MOVB 0,@>8C02
       LI   1,TEXT0
       MOVB 0,@>8C02
       LI   2,>100
TXLOP  MOVB *1+,@>8C00
       DEC  2
       JNE  TXLOP
       CLR  @>8374
TASTE  BLWP @KSCAN
       MOVB @>837C,@>837C
       JEQ  TASTE
       MOVB @>8375,1
       SRL  1,8
       CI   1,>31
       JLT  TASTE
       CI   1,>34
       JGT  TASTE
       AI   1,>FFCF
       SLA  1,1
       BL   @RS232            * INIT DER RS232/1
       LI   1,REGDAT          * 80-ZEICHEN-DISPLAY
REGLOP MOV  *1+,0
       JEQ  REGFIN
       BLWP @VWTR
       JMP  REGLOP            * KEINE ZUWEISUNG NACH >83D4, ALLE INT'S GESPERRT
REGFIN LI   0,>004A
       MOVB 0,@>8C02
       SWPB 0
       MOVB 0,@>8C02
       LI   2,>10E
COLCLR MOVB @FLASH,@>8C00     * COLOR'S LOESCHEN
       DEC  2
       JNE  COLCLR
       LI   12,CHRCRU         * CHAR'S HOLEN
       SBO  DSRROM
       LI   0,>1000
       LI   1,>4BF8
       LI   2,>800
       BLWP @VMBW
       A    2,1
       LI   2,>8
DCHARL MOV  *1+,0             * DEUTSCHE UMLAUTE
       JEQ  DCHARE
       BLWP @VMBW
       A    2,1
       JMP  DCHARL
DCHARE SBZ  DSRROM
       LI   13,>A000          * SCHREIB-POINTER
       LI   14,>A000          * LESE-POINTER
       BL   @CLS              * BILDSCHIRM LOESCHEN
*-----------------------------+ MAXTIME BIS ZUM NAECHSTEN RX-PART 200uS
TSCAN1 LI   12,SCHNIT         ! MAXIMALE BAUDRATE RELATIV GENAU 38400 BAUD
       TB   21                !
       JNE  SCAN              !
       STCR *13,8             ! PUSH DATA ON FIFO
       SBZ  18                !
       TB   9                 ! PARITY OK ?
       JEQ  SCAN              !
       INC  13                ! SCHREIB-POINTER +1
       CI   13,>FFFE          !
       JNE  SCAN              !
       LI   13,>A000          !
SCAN   CLR  12                !
       SBO  21                ! ALPHA-LOCK AUS
       LI   1,>5              ! FUENF TASTEN REIHEN
       CLR  5                 !
       CLR  7                 !
SCANLP LI   12,>24            !
       SWPB 1                 !
       LDCR 1,3               !
       SWPB 1                 !
       LI   12,>6             !
       SETO 4                 !
       STCR 4,8               !
       INV  4                 !
       MOV  1,1               !
       JNE  NOLAST            !
       MOVB 4,7               ! LETZTE REIHE CONTROL-KEYS IN R7 SICHERN, ABER
       ANDI 4,>0F00           ! KEIN REALE TASTE
NOLAST MOV  4,4               !
       JEQ  KSEND             ! ZEICHEN VON TASTATUR EMPFANGEN?      -> NEIN
       MOV  5,5               !
       JNE  KSEND             ! FALLS ZEICHEN SCHON EMPFANGEN, KEINE WEITEREN
       SETO 5                 ! ERSTE ZEICHEN EMPFANGEN
       MOV  1,6               !
       SLA  6,3               !
       DEC  6                 !
BIT    INC  6                 ! BITS AUSSELKTIEREN
       SLA  4,1               !
       JNC  BIT               !
       MOV  1,1               ! NACH EMPFANGEN ZEICHEN LOOP VERKUERZEN!
       JEQ  KSEND             !
       LI   1,>1              ! NOCH EINE REIHE FUER CONTROL-KEYS! (LETZTE)
KSEND  LI   12,SCHNIT         ! RS232-LESE-ROUTINE
       TB   21                !
       JNE  KSEND1            !
       STCR *13,8             ! PUSH DATA ON FIFO
       SBZ  18                !
       TB   9                 ! PARITY OK ?
       JEQ  KSEND1            !
       INC  13                ! SCHREIB-POINTER +1
       CI   13,>FFFE          !
       JNE  KSEND1            !
       LI   13,>A000          !
KSEND1 DEC  1                 ! NAECHSTE LOOP
       JOC  SCANLP            ! VORZEICHEN-WECHSEL?
*-----------------------------+
       MOV  5,5
       JNE  GETKEY       * EINE TASTE
       SETO @OLDKEY
       JMP  READLB
GETKEY C    6,@OLDKEY
       JEQ  READLB       * GLEICHE TASTE
       MOV  6,@OLDKEY
       LI   1,CNTRL
       SLA  7,2
       JOC  KEYOK
       LI   1,FCTN
       SRL  7,15
       JOC  KEYOK
       LI   1,SHIFT
       DEC  7
       JEQ  KEYOK
       LI   1,NORM
KEYOK  A    6,1
       MOVB *1,1         * HIER JETZT RICHTIGE TASTE
       CLR  12
       SBZ  21
       MOV  1,6
       TB   7
       JEQ  NOALPH
       SRL  6,8
       CI   6,>61
       JLT  NOALPH
       CI   6,>7A
       JGT  NOALPH
       AI   1,>E000
NOALPH SBO  21
       CB   1,@TITLE
       JNE  NOTITL
       BLWP @>0000
NOTITL LI   12,SCHNIT
*-----------------------------+
       SBO  16                !
SEND2  TB   22                !
       JNE  SEND2             ! SEND
       LDCR 1,8               !
       SBZ  16                !
       TB   21                ! RECEIVE
       JNE  READLB            !
       STCR *13,8             ! PUSH DATA ON FIFO
       SBZ  18                !
       TB   9                 ! PARITY OK ?
       JEQ  READLB            !
       INC  13                ! SCHREIB-POINTER +1
       CI   13,>FFFE          !
       JNE  READLB            !
       LI   13,>A000          !
READLB C    13,14             ! MAXIMALE ZEIT SEIT LETZTEM RX -> 73 uS
       JEQ  TSCAN2            !
       MOVB *14+,1            ! POP DATA
       CI   14,>FFFE          !
       JNE  NEXT              !
       LI   14,>A000          !
NEXT   CB   1,@SPACE          !
       JHE  ASCKEY            !
       B    @CTRL             !
ASCKEY BL   @CHECK            ! MAXIMAL VERBRAUCHTE ZEIT -> 103 uS
       MOV  2,0               ! MAXIMALE ZEIT AUS CHECK -> 127 uS
       A    3,0               !
       ORI  0,>4000           !
       SWPB 0                 !
       MOVB 0,@>8C02          !
       SWPB 0                 !
       MOVB 0,@>8C02          !
       INC  3                 !
       MOVB 1,@>8C00          !
TSCAN2 B    @TSCAN1           ! MAXIMALE ZEIT -> 175 uS
*-----------------------------+
CHECK  TB   21                !
       JNE  CHECK0            !
       STCR *13,8             ! PUSH DATA ON FIFO
       SBZ  18                !
       TB   9                 ! PARITY OK ?
       JEQ  CHECK0            !
       INC  13                ! SCHREIB-POINTER +1
       CI   13,>FFFE          !
       JNE  CHECK0            !
       LI   13,>A000          !
CHECK0 CI   3,>FFFF           !
       JGT  CHECK1            !
       LI   3,>4F             !
       AI   2,>FFB0           !
CHECK1 CI   3,>50             !
       JLT  CHECK3            !
       CLR  3                 !
       AI   2,>50             !
CHECK3 CI   2,>820            !
       JLT  CHECK4            !
SCROLL LI   2,>820            ! >300 BIS >31F IST EINE BLANKLINE!
       LI   3,>0050           !
       LI   4,>4000           !
SCRLOP TB   21                !
       JNE  NOSCR             !
       STCR *13,8             ! PUSH DATA ON FIFO
       SBZ  18                !
       TB   9                 ! PARITY OK ?
       JEQ  NOSCR             !
       INC  13                ! SCHREIB-POINTER +1
       CI   13,>FFFE          !
       JNE  NOSCR             ! MAXIMALE ZEIT BIS RETURN 127 uS!
       LI   13,>A000          !
NOSCR  SWPB 3                 !
       MOVB 3,@>8C02          !
       SWPB 3                 !
       MOVB 3,@>8C02          !
       INC  3                 !
       MOVB @>8800,6          !
       SWPB 4                 !
       MOVB 4,@>8C02          !
       SWPB 4                 !
       MOVB 4,@>8C02          !
       INC  4                 !
       MOVB 6,@>8C00          !
       DEC  2                 !
       JNE  SCRLOP            !
       LI   2,>7D0            !
       CLR  3                 !
CHECK4 RT                     !
*-----------------------------+
CTRL   SRL  1,7               ! MAXIMAL VERBRAUCHTE ZEIT -> 103 uS
       ANDI 1,>3E             !
       AI   1,JMPLST          !
       MOV  *1,10             !
       BL   *10               !           +-> OHNE SUBROUTINE!
       BL   @CHECK            ! MAXIMAL ZEIT -> 143 + Subx uS (RX IN CHECK)
       B    @TSCAN1           ! MAXIMAL VERBRAUCHTE ZEIT -> 127 uS
*-----------------------------+
NUL    RT                     !
*-----------------------------+
BACK   BLWP @>0000            ! ZEITEN FUER SUBROUTINES :
*-----------------------------+
BCKSPC MOV  2,0               !        NUL        4 uS Realativer Offset
       A    3,0               !        BCKSPC    58 uS         "
       DEC  0                 !        HTAB       7 uS         "
       ORI  0,>4000           !        LNFEED     9 uS         "
       SWPB 0                 !        VTAB       9 uS         "
       MOVB 0,@>8C02          !        CARRET     7 uS         "
       SWPB 0                 !        CLS       67 uS Absolut! Rx in CLS!
       MOVB 0,@>8C02          !        DCTRL2    84 us Absolut! Rx in DCTRL2!
       DEC  3                 !
       MOVB @SPACE,@>8C00     !
       RT                     !
*-----------------------------+
HTAB   INC  3                 !
       RT                     !
*-----------------------------+
LNFEED AI   2,>50             !
       RT                     !
*-----------------------------+
VTAB   AI   2,>FFB0           !
       RT                     !
*-----------------------------+
CARRET CLR  3                 !
       RT                     !
*-----------------------------+
CLS    LI   0,>0040           !
       MOVB 0,@>8C02          !
       SWPB 0                 !
       MOVB 0,@>8C02          !
       LI   2,>820            !
CLSLOP TB   21                ! AUFRUF SPAETESTENS NACH 178 uS
       JNE  NOCLS             !
       STCR *13,8             ! PUSH DATA ON FIFO
       SBZ  18                !
       TB   9                 ! PARITY OK ?
       JEQ  NOCLS             !
       INC  13                ! SCHREIB-POINTER +1
       CI   13,>FFFE          !
       JNE  NOCLS             !
       LI   13,>A000          !
NOCLS  MOVB @SPACE,@>8C00     !
       DEC  2                 !
       JNE  CLSLOP            !
       CLR  3                 !
       RT                     !
*-----------------------------+
DCTRL2 TB   21                ! DEVICE-CONTROL 2, WIRD HIER BENUTZT UM CURSOR ZU
       JNE  DCTRLN            ! POSITIONIEREN
       STCR *13,8             !
       SBZ  18                ! HIER IST KEIN ABBRUCH MOEGLICH, ES MUESSEN ZWEI
       TB   9                 ! BYTES FOLGEN!!!
       JEQ  DCTRLN            !
       INC  13                !
       CI   13,>FFFE          !
       JNE  DCTRLN            !
       LI   13,>A000          !
DCTRLN C    13,14             ! QUEUE EMPTY? ->WARTEN!
       JEQ  DCTRL2            !
       MOVB *14+,3            ! HIER MUSS DATA EXISTIEREN!
       SRL  3,8               !
       CI   14,>FFFE          !
       JNE  DCTRLW            !
       LI   14,>A000          !
DCTRLW TB   21                ! ZEICHEN VORHANDEN?
       JNE  DCTRLC            !
       STCR *13,8             ! PUSH DATA ON FIFO
       SBZ  18                !
       TB   9                 ! PARITY OK ?
       JEQ  DCTRLC            !
       INC  13                ! SCHREIB-POINTER +1
       CI   13,>FFFE          !
       JNE  DCTRLC            !
       LI   13,>A000          !
DCTRLC C    13,14             ! QUEUE EMPTY?
       JEQ  DCTRLW            !
       MOVB *14+,1            !
       CI   14,>FFFE          !
       JNE  DCTRLE            !
       LI   14,>A000          !
DCTRLE SRL  1,8               ! R2 BERECHNEN
       LI   0,>50             !
       MPY  0,1               !
       RT                     !
*-----------------------------+------------------------------------------------+
BAUD   DATA >01A1        *  1200   FEHLER 0.08 %                               !
       DATA >0034        *  9600   FEHLER 0.16 %                               !
       DATA >001A        * 19200   FEHLER 0.16 %                               !
       DATA >000D        * 38400   FEHLER 0.16 %                               !
RS232  LI   12,SCHNIT                                                          !
       SBO  31                * ALLE BITS 14,13,12,11 AN!                      !
       LI   15,>8300          * 8 DATENBITS PARRITY=NONE 1 STOPBIT //4M-BIT =0 !
       LDCR 15,8                                                               !
       SBZ  13                                                                 !
       LDCR @BAUD(1),12                                                        !
       RT                                                                      !
*==============================================================================+
       END  START
    

eMail:Koplien@TU-Harburg.d400.DE

© Dr. Henry Koplien