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 / TTYR1.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  5KB  |  201 lines

  1.     ORG    100H
  2. LOOP    IN    04
  3.     ANI    01
  4.     JNZ    LOOP
  5.     CALL    ASCRCV
  6.     CPI    0FFH
  7.     JZ    LOOP
  8.     OUT    1
  9.     PUSH    B
  10.     MOV    C,A
  11.     IN    0FFH
  12.     CPI    80H
  13.     JNZ    LOOP1
  14.     CALL    0E000H
  15. LOOP1    POP    B
  16.     IN    01
  17.     ANI    7FH
  18.     CPI    1BH
  19.     JZ    0
  20.     JMP    LOOP
  21. ;    ASCRCV(4), VER. 2
  22. ; BY KEITH PETERSEN, W8SDZ.  10/30/78.
  23. ; THIS IS A PROGRAM TO CHANGE
  24. ; ASCII-CODED-BAUDOT TO ASCII.
  25. ; THE ROUTINE RETURNS WITH A 0FFH
  26. ; IN THE 'A' REGISTER IF CHARACTER
  27. ; IS TO BE IGNORED.  OTHERWISE IT
  28. ; RETURNS WITH THE ASCII CHARACTER
  29. ; IN THE 'A' REGISTER.  IT IS ASSUMED
  30. ; THAT A STATUS TEST HAS BEEN DONE BEFORE
  31. ; CALLING THIS ROUTINE TO DETERMINE THAT
  32. ; A BAUDOT CHARACTER IS AVAILABLE.
  33. ; EQUATES
  34. BTTY:    EQU    05H    ;BAUDOT UART DATA PORT
  35. CR:    EQU    0DH    ;ASCII CARRIAGE RETURN
  36. LF:    EQU    0AH    ;ASCII LINE FEED
  37. BELL:    EQU    07H    ;ASCII BELL
  38. LTRS:    EQU    1FH    ;BAUDOT 'LTRS'
  39. SPACE:    EQU    04H    ;BAUDOT 'SPACE'
  40. FIGS:    EQU    1BH    ;BAUDOT 'FIGS'
  41. APOS:    EQU    27H    ;APOSTROPHE
  42. CNTC:    EQU    03H    ;CONTROL C
  43. LARW:    EQU    5FH    ;LEFT ARROW
  44. ASPC:    EQU    20H    ;ASCII SPACE
  45. ATSN:    EQU    40H    ;"AT" SIGN
  46. CNTV:    EQU    16H    ;CONTROL V
  47. CNTO:    EQU    0FH    ;CONTROL O
  48. RUBT:    EQU    7FH    ;RUBOUT
  49. CNTE:    EQU    05H    ;CONTROL E
  50. PCT:    EQU    25H    ;PERCENT SIGN
  51. EQUL:    EQU    3DH    ;EQUALS SIGN
  52. GRTH:    EQU    3EH    ;GREATER-THAN SIGN
  53. CNTH:    EQU    08H    ;CONTROL H
  54. LETH:    EQU    3CH    ;LESS-THAN SIGN
  55. CNTB:    EQU    02H    ;CONTROL B
  56. STAR:    EQU    2AH    ;ASTERISK
  57. CNTI:    EQU    09H    ;CONTROL I
  58. CNTZ:    EQU    1AH    ;CONTROL Z
  59. CNTA:    EQU    01H    ;CONTROL A
  60. CNTX:    EQU    18H    ;CONTROL X
  61. UARW:    EQU    5EH    ;UP-ARROW
  62. PLUS:    EQU    2BH    ;PLUS SIGN
  63. RESL:    EQU    5CH    ;REVERSE SLANT
  64. LBKT:    EQU    5BH    ;LEFT BRACKET
  65. RBKT:    EQU    5DH    ;RIGHT BRACKET
  66. ESCP:    EQU    1BH    ;ESCAPE KEY
  67. ALMD:    EQU    7DH    ;ALTERNATE MODE KEY
  68. BEGIN:    EQU    0200H    ;MY ADDRESS FOR THIS PROGRAM
  69. ; PROGRAM STARTS HERE
  70. ASCRCV:    PUSH    H    ;SAVE HL REGISTERS
  71.     LHLD    CASAVE    ;GET PRESENT CASE
  72. START:    IN    BTTY    ;GET BAUDOT CHARACTER
  73.     ANI    1FH    ;BAUDOT CHARACTERS ONLY
  74.     CPI    FIGS
  75.     JZ    UCASE
  76.     CPI    LTRS
  77.     JZ    LCASE
  78.     ORA    A    ;BAUDOT 'BLANK' ?
  79.     JZ    TCASE
  80.     CPI    SPACE
  81.     JNZ    START1
  82.     LXI    H,LTABLE ;SPACE GIVES LOWER CASE
  83. START1:    SHLD    CASAVE    ;SAVE PRESENT CASE
  84.     ADD    L    ;ADD CHAR. TO TABLE ADRS.
  85.     MOV    L,A    ;L POINTS TO ASCII CHAR.
  86.     MOV    A,H    ;GET H FOR CORRECTION
  87.     ACI    0    ;SEE IF CORRECTION NEEDED
  88.     MOV    H,A    ;H IS CORRECT NOW
  89.     XRA    A    ;PUT ZERO IN A REG.
  90.     STA    FLAG    ;CLEAR LTRS-FIGS LAST FLAG
  91.     MOV    A,M    ;GET ASCII EQUIVALENT
  92.     POP    H    ;RESTORE HL REGISTERS
  93.     ORA    A    ;IS IT PRINTABLE?
  94.     RNZ        ;YES, VALID CHAR. RETURN
  95.     CMA        ;MAKE 0FFH 'IGNORE FLAG'
  96.     RET        ;RETURN TO CALLING PROGRAM
  97. LCASE:    LXI    H,LTABLE ;LOWER CASE TABLE ADDRESS
  98.     JMP    SETFLG    ;SET LTRS LAST FLAG, EXIT
  99. UCASE:    LXI    H,UTABLE ;UPPER CASE TABLE ADDRESS
  100.     JMP    SETFLG    ;SET FIGS LAST FLAG, EXIT
  101. TCASE:    LDA    FLAG    ;GET SHIFT REMINDER FLAG
  102.     CPI    FIGS
  103.     JNZ    FCASE
  104.     LXI    H,TTABLE ;THIRD CASE TABLE ADDRESS
  105.     JMP    CLRFLG
  106. FCASE:    CPI    LTRS    ;CHECK FOR LTRS LAST
  107.     JNZ    CLRFLG
  108.     LXI    H,FTABLE ;FOURTH CASE TABLE ADDRESS
  109. CLRFLG:    XRA    A    ;READY TO CLEAR FLAG
  110. SETFLG:    STA    FLAG    ;LTRS-FIGS LAST FLAG
  111.     SHLD    CASAVE    ;SAVE PRESENT CASE
  112.     MVI    A,0FFH    ;'IGNORE FLAG'
  113.     POP    H    ;RESTORE HL REGS.
  114.     RET        ;RETURN TO CALLING PROGRAM
  115. ; THIS IS THE LOWER-CASE TABLE.
  116. LTABLE:    DB    0,'E',LF,'A SIU',CR,'DRJNFCK'
  117.     DB    'TZLWHYPQOBG',FIGS,'MXV'
  118. ; THIS IS THE UPPER-CASE TABLE.
  119. UTABLE:    DB    0,'3',LF,'- ',BELL,'87',CR,'$4'
  120.     DB    APOS,',!:(5")2#6019?&',FIGS,'./;'
  121. ; THIS IS THE THIRD-CASE TABLE.
  122. ; IT IS USED FOR SPECIAL CHARACTERS.
  123. ; THE FIRST COLUMN IN THE TABLE
  124. ; THE ASCII CHARACTER EQUIVALENT.
  125. ; THE SECOND COLUMN IS THE SPECIAL
  126. ; CASE BAUDOT CHARACTER FROM WHICH
  127. ; THE CONVERSION IS MADE.
  128. TTABLE:    DB    0,CNTC,LF    ;BL  3   LF
  129.     DB    LARW,ASPC,ATSN    ;-   SP  BELL
  130.     DB    CNTV,CNTO,CR    ;8   7   CR
  131.     DB    ALMD,CNTE,PCT    ;$   4   '
  132.     DB    RUBT,EQUL,ESCP    ;,   !   :
  133.     DB    LETH,CNTH,LBKT    ;(   5   "
  134.     DB    GRTH,CNTB,STAR    ;)   2   #
  135.     DB    CNTI,CNTZ,CNTA    ;6   0   1
  136.     DB    CNTX,UARW,PLUS    ;9   ?   &
  137.     DB    0,RBKT,RESL    ;FIG .   /
  138.     DB    0            ;;
  139. ; THIS IS THE FOURTH CASE TABLE
  140. ; FOR LOWER-CASE ALPHA CHARACTERS.
  141. FTABLE:    DB    0,65H,LF,61H,ASPC,73H
  142.     DB    69H,75H,CR,64H,72H,6AH
  143.     DB    6EH,66H,63H,6BH,74H,7AH
  144.     DB    6CH,77H,68H,79H,70H,71H
  145.     DB    6FH,62H,67H,FIGS,6DH,78H
  146.     DB    76H
  147. ; TEMPORARY STORAGE AREA
  148. CASAVE:    DW    LTABLE    ;PRESENT CASE REMINDER
  149. FLAG:    DB    0    ;FIGS/LTRS LAST FLAG
  150.     END
  151.   
  152. ; THIS IS A SAMPLE OF THE POLLING ROUTINE
  153. ; USED TO ALLOW INPUT FROM EITHER THE ASCII
  154. ; OR BAUDOT KEYBOARD INPUT PORTS.  IT CAN
  155. ; BE LINKED TO ANY PROGRAM WHICH USES A
  156. ; NORMAL INPUT ROUTINE WHICH RETURNS WITH
  157. ; THE ASCII CHARACTER IN THE ACCUMULATOR.
  158. POLL:    IN    BSTATUS    ;BAUDOT UART STATUS PORT
  159.     ANI    RDA    ;TEST FOR RCVE DATA AVAIL FLAG
  160.     JZ    POLL2    ;NO CHAR. TEST ASCII (MAY NEED JNZ HERE)
  161.     CALL    ASCRCV4    ;CHARACTER THERE, GET AND CONVERT
  162.     CPI    0FFH    ;IGNORE FLAG THERE?
  163.     RNZ        ;NO, RETURN WITH ASCII CHARACTER
  164. POLL2:    IN    ASTATUS    ;GET ASCII UART STATUS
  165.     ANI    RDA    ;TEST DATA AVAIL. FLAG
  166.     JZ    POLL    ;NO CHAR., RESUME POLLING (MAY NEED JNZ HERE)
  167.     IN    ADATA    ;GET ASCII UART DATA
  168.     ANI    7FH    ;STRIP PARITY BIT
  169.     RET        ;ASCII CHAR. IN ACCUMULATOR
  170. ; END OF SAMPLE POLLING ROUTINE.
  171.  
  172.