home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / modem / glasstty.asm < prev    next >
Assembly Source File  |  1985-09-11  |  4KB  |  129 lines

  1.     TITLE    GLASSTTY
  2.     PAGE    60,131
  3.  
  4. ; Test driver for COM_PKG2 -- dumb terminal emulator program of sorts
  5. ; Calls all the entry points
  6. ; Exit with control-break
  7. ; May be copied and used freely -- This is a public domain program
  8. ; Programmed by Richard Gillmann
  9. ; Please send all comments to GILLMANN@USC-ISIB.ARPA
  10.  
  11. STACK   SEGMENT PARA STACK 'STACK'
  12.         DW      100 DUP(0)    ; WORDS RESERVED FOR RUNTIME STACK
  13. STACK   ENDS
  14.  
  15. DATA    SEGMENT PARA PUBLIC 'DATA'
  16. PORT    DB    1        ; CURRENT PORT (COM1 OR COM2)
  17. DATA    ENDS
  18.         PAGE
  19. CODE    SEGMENT PARA PUBLIC 'CODE'
  20.  
  21. ; INTERFACE TO THE COM_PKG2 ASYNCHRONOUS COMMUNICATIONS PACKAGE
  22.     EXTRN    SELECT_PORT:NEAR ; SELECT ACTIVE PORT
  23.     EXTRN    SAVE_COM:NEAR     ; SAVE OLD INTERRUPT VECTOR
  24.         EXTRN   INSTALL_COM:NEAR ; INSTALL INTERRUPT VECTOR
  25.         EXTRN   RESTORE_COM:NEAR ; RESTORE OLD INTERRUPT VECTOR
  26.         EXTRN   OPEN_COM:NEAR    ; RE-INITIALIZE PORT
  27.         EXTRN   CLOSE_COM:NEAR    ; TURN OFF INTERRUPTS FROM PORT
  28.         EXTRN   DTR_OFF:NEAR    ; TURN OFF DTR
  29.         EXTRN   DTR_ON:NEAR    ; TURN ON DTR
  30.         EXTRN   R_COUNT:NEAR    ; RETURN NO. OF CHARACTERS IN INPUT BUFFER
  31.         EXTRN   RECEIVE:NEAR    ; READ NEXT CHARACTER IN INPUT BUFFER
  32.         EXTRN   S_COUNT:NEAR    ; RETURN NO. OF FREE BYTES IN OUTPUT BUFFER
  33.         EXTRN   SEND:NEAR    ; WRITE A CHARACTER TO OUTPUT BUFFER
  34.     EXTRN    SENDI:NEAR    ; SEND IMMEDIATE
  35.         EXTRN   S_LOCAL:NEAR    ; WRITE A CHARACTER TO THE INPUT BUFFER
  36.         EXTRN   BREAK:NEAR    ; SEND A BREAK
  37.     EXTRN    COM_ERRORS:NEAR    ; RETURN POINTER TO ERROR COUNTS
  38.     PAGE
  39.         ASSUME  CS:CODE,SS:STACK,DS:DATA
  40. START    PROC    FAR
  41.     PUSH    DS        ; SAVE PREFIX SEGMENT
  42.     MOV    AX,0        ; ZERO OFFSET IN IT
  43.     PUSH    AX        ; IS WHERE INT 20H IS LOCATED
  44.     MOV    AX,DATA        ; OUR DATA SEGMENT
  45.     MOV    DS,AX        ; TO DS
  46.     MOV    AL,1        ; COM1
  47.     CALL    SELECT_PORT    ; SELECT IT
  48.     CALL    SAVE_COM    ; SAVE OLD INTERRUPT VECTOR
  49.     CALL    INSTALL_COM    ; INSTALL INTERRUPT VECTOR
  50.     JC    OOPS1        ; JUMP IF ERROR
  51.     MOV    AX,1200        ; BAUD RATE
  52.     MOV    BH,'D'        ; MODEM OR DIRECT
  53.     MOV    BL,'N'        ; NO PARITY
  54.     MOV    CH,'1'        ; ONE STOP BIT
  55.     MOV    CL,'E'        ; FLOW CONTROL
  56.     CALL    OPEN_COM    ; INIT COM
  57. OOPS1:    MOV    AL,2        ; COM2
  58.     CALL    SELECT_PORT    ; SELECT IT
  59.     CALL    SAVE_COM    ; SAVE OLD INTERRUPT VECTOR
  60.     CALL    INSTALL_COM    ; INSTALL INTERRUPT VECTORS
  61.     JC    OOPS2        ; JUMP IF ERROR
  62.     MOV    AX,1200        ; BAUD RATE
  63.     MOV    BH,'D'        ; MODEM OR DIRECT
  64.     MOV    BL,'N'        ; NO PARITY
  65.     MOV    CH,'1'        ; ONE STOP BIT
  66.     MOV    CL,'E'        ; FLOW CONTROL
  67.     CALL    OPEN_COM    ; INIT COM
  68. OOPS2:    MOV    AL,PORT        ; CURRENT PORT
  69.     CALL    SELECT_PORT    ; SELECT IT
  70.     CALL    DTR_ON        ; NOT NECESSARY BUT WHAT THE HECK
  71. ; PRINT HERALD
  72.     MOV    AL,'!'        ; I'M GONNA SIT RIGHT DOWN AND WRITE MYSELF A
  73.     CALL    S_LOCAL        ; LETTER AND MAKE BELIEVE IT CAME FROM YOU
  74. ; SEND A CARRIAGE RETURN
  75.     MOV    AL,13        ; CARRIAGE RETURN
  76.     CALL    SENDI        ; SEND IMMEDIATE JUST THIS ONCE
  77. ; MAIN LOOP
  78. TOP:    MOV    AH,1        ; CHARACTER TYPED?
  79.     INT    16H        ; BIOS KBD
  80.     JZ    NOKEY        ; JUMP IF NOT
  81.     MOV    AH,0        ; READ CHAR TYPED
  82.     INT    16H        ; BIOS KBD
  83.     OR    AX,AX        ; CONTROL BREAK?
  84.     JZ    OUT        ; EXIT IF SO
  85.     CMP    AX,4400H    ; F10?
  86.     JNE    NOT_F10        ; JUMP IF NOT
  87.     MOV    AL,3        ; 3
  88.     SUB    AL,PORT        ; - PORT
  89.     MOV    PORT,AL        ; IS NEW PORT
  90.     CALL    SELECT_PORT    ; TOGGLE SELECTED PORT
  91.     JMP    SHORT NOKEY    ; CONTINUE
  92. NOT_F10:CMP    AX,4300H    ; F9?
  93.     JNE    NOT_F9        ; JUMP IF NOT
  94.     CALL    BREAK        ; SEND A BREAK
  95.     JMP    SHORT NOKEY    ; CONTINUE
  96. NOT_F9:    AND    AL,7FH        ; STRIP PARITY
  97.     JZ    NOKEY        ; IGNORE NULS
  98.     PUSH    AX        ; SAVE CHAR
  99.     CALL    S_COUNT        ; GET COUNT OF FREE BUFFER SPACE
  100.     CMP    AX,0        ; TOO FULL?
  101.     POP    AX        ; RESTORE CHAR
  102.     JE    NOKEY        ; IF SO, PUNT
  103.     CALL    SEND        ; SEND CHAR
  104. NOKEY:    CALL    R_COUNT        ; GET READ BUFFER COUNT
  105.     CMP    AX,0        ; ANY CHARS RECEIVED?
  106.     JZ    TOP        ; LOOP IF NOT
  107.     CALL    RECEIVE        ; RECEIVE CHAR
  108.     AND    AL,7FH        ; STRIP PARITY
  109.     JZ    TOP        ; IGNORE NULS
  110.     MOV    AH,14        ; WRITE TTY
  111.     INT    10H        ; BIOS VIDEO
  112.     JMP    TOP        ; BACK FOR MORE
  113. OUT:    MOV    AL,1        ; COM1
  114.     CALL    SELECT_PORT    ; SELECT IT
  115.     CALL    COM_ERRORS    ; ERROR STATISTICS
  116.     CALL    DTR_OFF        ; HANG UP
  117.     CALL    CLOSE_COM    ; TURN OFF INTERRUPTS
  118.     CALL    RESTORE_COM    ; RESTORE VECTOR
  119.     MOV    AL,2        ; COM2
  120.     CALL    SELECT_PORT    ; SELECT IT
  121.     CALL    COM_ERRORS    ; ERROR STATISTICS
  122.     CALL    DTR_OFF        ; HANG UP
  123.     CALL    CLOSE_COM    ; TURN OFF INTERRUPTS
  124.     CALL    RESTORE_COM    ; RESTORE VECTOR
  125.     RET            ; DONE
  126. START    ENDP
  127. CODE    ENDS
  128.     END    START
  129.