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

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