home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG041.ARK / TTYX.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  166 lines

  1. ;        ASCXMT(4) REV. 2
  2. ;    BY KEITH PETERSEN, W8SDZ.  10/29/78.
  3. ; THIS PROGRAM IS FOR TRANSMITTING ASCII
  4. ; THROUGH A BAUDOT MEDIUM USE A SPECIAL
  5. ; FORMAT OF FIGURES BLANK (X) - WHERE (X)
  6. ; IS A SPECIAL BAUDOT CHARACTER USED TO
  7. ; CONVEY THE ASCII EQUIVALENT CHARACTER TO THE
  8. ; RECEIVING END WHERE IT IS THEN CONVERTED BACK
  9. ; TO ASCII AGAIN.  LOWER CASE ALPHA CHARACTERS
  10. ; ARE TRANSMITTED VIA A 4TH CASE, LTRS BLANK (X).
  11. ;
  12. ; EQUATES
  13. LTRS:    EQU    1FH
  14. FIGS:    EQU    1BH
  15. CR:    EQU    48H
  16. LF:    EQU    42H
  17. STATUS:    EQU    0AH    ;BAUDOT UART STATUS PORT
  18. TBE:    EQU    80H    ;UART TRANS. BUF. EMPTY FLAG
  19. BTTY:    EQU    0BH    ;BAUDOT UART DATA PORT
  20. ALTMOD:    EQU    7DH    ;ALTERNATE MODE KEY
  21. BEGIN:    EQU    0FA00H    ;MY ADDRESS FOR THIS PROGRAM
  22. ;          PROGRAM STARTS HERE.
  23. ; CALL WITH ASCII CHARACTER IN ACCUMULATOR.
  24.     ORG    BEGIN    ;PUT STARTING ADDRESS HERE
  25. START:    PUSH    PSW    ;SAVE REGISTERS USED
  26.     PUSH    B
  27.     PUSH    H
  28. BAUDOT:    MVI    C,0    ;SET UP COUNTER
  29.     ANI    7FH    ;STRIP PARITY BIT
  30.     CPI    ALTMOD    ;ALTERNATE MODE KEY?
  31.     JNZ    BAUD2    ;NO, IGNORE NEXT ROUTINE
  32.     MVI    A,09H    ;BAUDOT '$'
  33.     JMP    BAUD3
  34. BAUD2:    CPI    7BH    ;ABOVE L.C. 'Z' ?
  35.     JNC    TTY0    ;IF SO, IGNORE IT
  36.     LXI    H,BTABLE ;POINT TO TABLE START
  37.     ADD    L    ;ADD CHARACTER VALUE
  38.     MOV    L,A    ;L POINTS TO BAUDOT CHAR.
  39.     MOV    A,H    ;GET H FOR CORRECTION
  40.     ACI    0    ;CORRECT IF NECESSARY
  41.     MOV    H,A    ;H IS NOW CORRECT
  42.     MOV    A,M    ;GET BAUDOT CHARACTER
  43.     ORA    A    ;IS IT A NON-PRINTING CHAR?
  44.     JZ    TTY0    ;IF SO IGNORE IT
  45.     CPI    CR    ;IS IT A CARRIAGE RETURN?
  46.     JZ    TTYOUT-1 ;YES, HANDLE WITHOUT CASE TEST
  47.     CPI    LF    ;IS IT A LINE FEED?
  48.     JNZ    BAUD3    ;NO, IGNORE NEXT ROUTINE
  49.     MVI    A,LTRS    
  50.     PUSH    PSW    ;SAVE IT ON STACK
  51.     MVI    A,LF
  52.     LXI    H,SCASE    ;POINT TO PRESENT CASE REG.
  53.     MVI    M,40H    ;SET IT TO LOWER CASE
  54.     JMP    TTYOUT-2 ;SEND LF AND LTRS
  55. BAUD3:    PUSH    PSW    ;SAVE CHARACTER
  56.     ANI    0C0H    ;STRIP ALL BUT CASE BITS
  57.     LXI    H,SCASE    ;POINT TO PRESENT CASE REG.
  58.     CMP    M    ;SAME CASE AS PREVIOUS CHARACTER?
  59.     JZ    TTYOUT    ;YES NO CHANGE NECESSARY
  60.     MOV    M,A    ;UPDATE CASE REGISTER
  61.     ORA    A
  62.     JZ    TCASE
  63.     CPI    80H
  64.     JZ    UCASE
  65.     CPI    0C0H
  66.     JNZ    LCASE
  67. FCASE:    XRA    A    ;GET A BAUDOT 'BLANK'
  68.     PUSH    PSW    ;SAVE IT ON THE STACK
  69.     INR    C    ;INCREMENT CHARACTER COUNT
  70. LCASE:    MVI    A,LTRS
  71.     JMP    TTYOUT-2
  72. TCASE:    XRA    A    ;GET A BAUDOT 'BLANK'
  73.     PUSH    PSW    ;SAVE IT ON THE STACK
  74.     INR    C    ;INCREMENT CHARACTER COUNT
  75. UCASE:    MVI    A,FIGS
  76.     INR    C    ;INCREMENT CHARACTER COUNT
  77.     PUSH    PSW    ;SAVE IT ON THE STACK
  78. TTYOUT:    IN    STATUS    ;BAUDOT UART STATUS
  79.     ANI    TBE    ;TRANS. BUFFER EMPTY?
  80.     JZ    TTYOUT    ;IF NOT, LOOP AND WAIT
  81.     POP    PSW    ;GET CHARACTER
  82. ; OMIT NEXT THREE LINES IF NO LIGHTS.
  83.     CMA        ;INVERT FOR LIGHTS
  84.     OUT    0FFH    ;PUT ON FRONT PANEL LIGHTS
  85.     CMA        ;INVERT BACK TO NORMAL
  86. ;
  87. ; OMIT ABOVE THREE LINES IF NO LIGHTS.
  88.     ORI    0E0H    ;MAKE UPPER 3 BITS MARKING
  89.     OUT    BTTY    ;SEND TO BAUDOT UART PORT
  90.     DCR    C    ;MORE TO SEND?
  91.     JP    TTYOUT    ;YES, CONTINUE SENDING
  92. TTY0:    POP    H    ;RESTORE REGISTERS
  93.     POP    B
  94.     POP    PSW
  95.     RET        ;RETURN TO CALLING PROGRAM
  96. BTABLE:    DB    5FH,17H,13H    ;NUL SOH STX
  97.     DB    1,0,0AH        ;ETX EOT ENQ
  98.     DB    0,85H,10H    ;ACK BEL BS
  99.     DB    15H,42H,0C2H    ;HT  LF  VT
  100.     DB    2,48H,0        ;FF  CR  SO
  101.     DB    7,0,0        ;SI  DLE DC1
  102.     DB    0,0,0        ;DC2 DC3 DC4
  103.     DB    0,6,0        ;NAK SYN ETB
  104.     DB    18H,0,16H    ;CAN EM  SUB
  105.     DB    0EH,0,0        ;ESC FS  GS
  106.     DB    0,0,44H        ;RS  US  SPACE
  107.     DB    8DH,91H,94H    ;!   "   #
  108.     DB    89H,0BH,9AH    ;$   PCT &
  109.     DB    8BH,8FH,92H    ;'   (   )
  110.     DB    14H,1AH,8CH    ;AS  PL  ,
  111.     DB    83H,9CH,9DH    ;-   .   /
  112.     DB    96H,97H,93H    ;0   1   2
  113.     DB    81H,8AH,90H    ;3   4   5
  114.     DB    95H,87H,86H    ;6   7   8
  115.     DB    98H,8EH,9EH    ;9   :   ;
  116.     DB    0FH,0DH,12H    ;LT  EQ  GT
  117.     DB    99H,5,43H    ;?   AT  A
  118.     DB    59H,4EH,49H    ;B   C   D
  119.     DB    41H,4DH,5AH    ;E   F   G
  120.     DB    54H,46H,4BH    ;H   I   J
  121.     DB    4FH,52H,5CH    ;K   L   M
  122.     DB    4CH,58H,56H    ;N   O   P
  123.     DB    57H,4AH,45H    ;Q   R   S
  124.     DB    50H,47H,5EH    ;T   U   V
  125.     DB    53H,5DH,55H    ;W   X   Y
  126.     DB    51H,11H,1DH    ;Z   LB  LS
  127.     DB    1CH,19H,3    ;RB  UA  LA
  128. ; THESE ARE THE LOWER CASE ALPHA CHARACTERS
  129.     DB    0,0C3H,0D9H    ;'   A   B
  130.     DB    0CEH,0C9H,0C1H    ;C   D   E
  131.     DB    0CDH,0DAH,0D4H    ;F   G   H
  132.     DB    0C6H,0CBH,0CFH    ;I   J   K
  133.     DB    0D2H,0DCH,0CCH    ;L   M   N
  134.     DB    0D8H,0D6H,0D7H    ;O   P   Q
  135.     DB    0CAH,0C5H,0D0H    ;R   S   T
  136.     DB    0C7H,0DEH,0D3H    ;U   V   W
  137.     DB    0DDH,0D5H,0D1H    ;X   Y   Z
  138. ; TEMPORARY STORAGE AREA
  139. SCASE:    DB    40H    ;PRESENT CASE REGISTER
  140.     END
  141.   
  142.