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 / CPM / GENASM / DURACODE.AQM / DURACODE.ASM
Assembly Source File  |  2000-06-30  |  5KB  |  170 lines

  1. ;
  2. ;    DURA-SELECTRIC I/O DRIVER
  3. ;
  4. ;    4/21/79    J. A. PREST
  5. ;
  6. ;    THIS IS A SIMPLE CODE CONVERTER FOR THE DURA MACH 10
  7. ;    I/O TYPEWRITER.  THIS MACHINE IS SIMILAR TO THE
  8. ;    IBM SELECTRIC AND USES THE SAME TYPE ELEMENTS.
  9. ;    THE PROGRAM IS SET UP WITH TWO CODE TABLES ONE FOR
  10. ;    THE COURIER 12, 12-PITCH (PART #132) BALL AND ONE FOR
  11. ;    THE MANIFOLD 72, 10-PITCH (PART #019) BALL.  THE
  12. ;    COURIER CAN BE USED FOR CORRESPONDENCE AND REPORT
  13. ;    WRITING.  THE MANIFOLD BALL IS USED FOR HEX PRINTOUTS
  14. ;    SINCE THERE IS NO NEED TO SWITCH CASE WHEN GOING FROM
  15. ;    ALPHA TO NUMERIC.  THIS WILL SAVE WEAR AND TEAR ON THE
  16. ;    PRINTER.  
  17. ;
  18. STATUS:    EQU    2    ;DURA STATUS PORT
  19. SELSTA:    EQU    2    ;DURA READY FLAG
  20. SELDTA:    EQU    1    ;DURA DATA PORT
  21. UCSHFT:    EQU    88H    ;SELECTRIC UP-SHIFT CODE
  22. LCSHFT:    EQU    90H    ;    "    DOWN  "    "
  23. CASE:    EQU    0FB4FH    ;RAM FOR CASE FLAG
  24. COURIER:   EQU    1    ;1=COURIER   0=MANIFOLD
  25. MANIFOLD:  EQU    NOT COURIER
  26. ;
  27. ;    UNIVERSAL SELECTRIC OUTPUT
  28. ;
  29.      ORG    0E100H    ;COURIER 12 ROM
  30. SELCONC: MOV    A,C    ;ENTER HERE WITH DATA IN REG C
  31.      DB    0FEH    ;DUMMY CPI TO GET AROUND NEXT BYTE
  32. SELCONB: MOV    A,B    ;ENTER HERE WITH DATA IN REG B
  33. SELCONA: PUSH    H    ;ENTER HERE WITH DATA IN REG A
  34.      PUSH    B    ;SAVE HL AND BC
  35.      CALL    SELCON    ;CONVERT AND PRINT
  36.      POP    B
  37.      POP    H
  38.      RET        ;BACK WE GO
  39. ;
  40. SELCON:    CPI    ' '+1    ;SPACE IS A CONTROL CHAR
  41.     JC    CTLCHR
  42.     LXI    H,TABLE-20H
  43.     ANI    7FH    ;STRIP OFF MSB
  44.     MVI    B,0
  45.     MOV    C,A
  46.     DAD    B
  47.     MOV    A,M
  48.     ANI    0C0H    ;SAVE 2 MSB'S
  49.     RZ        ;IF BOTH BIT 6&7 ARE 0 NO CONVERSION
  50.     CPI    0C0H
  51.     JZ    NOSHFT    ;PRINT IN ANY CASE
  52.     CPI    80H
  53.     LDA    CASE
  54.     JNZ    UPPER    ;AN UPPER CASE CHAR
  55. LOWER:    CPI    LCSHFT
  56.     JZ    NOSHFT
  57.     MVI    A,LCSHFT
  58. LOWER2:    STA    CASE
  59.     CALL    PRINT
  60. NOSHFT:    MOV    A,M    ;GET THE CHAR BACK
  61.     ORI    0C0H    ;SET 2 MSB = 1
  62. PRINT:    PUSH    H
  63.     PUSH    PSW
  64. PRINT4:    IN    STATUS
  65.     ANI    SELSTA
  66.     JZ    PRINT4
  67. PRINT6:    POP    PSW
  68.     OUT    SELDTA
  69.     POP    H
  70.     RET
  71. ;
  72. CTLCHR:    LXI    H,FNTABL-1
  73. CTLCH2:    INX    H
  74.     CMP    M
  75.     INX    H
  76.     RC
  77.     JNZ    CTLCH2
  78.     MOV    A,M
  79.     JMP    PRINT
  80. ;
  81. UPPER:    CPI    UCSHFT
  82.     JZ    NOSHFT
  83.     MVI    A,UCSHFT
  84.     JMP    LOWER2
  85. ;
  86. ;    FUNCTION TABLE
  87. ;
  88. FNTABL:    DB    9,81H      ;TAB
  89.     DB    0DH,82H      ;RETURN
  90.     DB    1AH,0A0H  ;BACKSPACE
  91.     DB    1CH,88H   ;SHIFT UP
  92.     DB    1DH,90H   ;SHIFT DOWN
  93.     DB    20H,84H   ;SPACE
  94.     DB    0FFH      ;END OF TABLE
  95. ;
  96. ;    LOOK-UP TABLES FOR TYPE ELEMENTS
  97. ;    BIT 6&7 ARE USED AS FLAGS:
  98. ;
  99. ;    BIT 7     BIT 6      CHARACTERISTICS
  100. ;      0       0         NO CONVERSION
  101. ;      0       1         UPPER CASE
  102. ;      1       0         LOWER CASE
  103. ;      1       1         PRINTS IN EITHER CASE
  104. ;
  105.     IF    COURIER
  106. ;
  107. ;    COURIER 12 TYPE ELEMENT
  108. ;    UPPER AND LOWER CASE ALPHA, NUMERALS AND MOST
  109. ;    PUNCTUATION MARKS.  BRACKETS AND BRACES CONVERT
  110. ;    TO ( AND ).
  111. ;
  112. TABLE:    DB    4,7FH,55H,7EH         ;SPACE EX.PT   "     #
  113.     DB    79H,75H,7DH,95H         ;  $     %     &     '
  114.     DB    70H,71H,7CH,46H         ;  (     )     *     +
  115.     DB    0CCH,80H,0D6H,89H    ;  ,     -     .     /
  116.     DB    0B1H,0BFH,0B6H,0BEH  ;  0     1     2     3
  117.     DB    0B9H,0B5H,0B4H,0BDH  ;  4     5     6     7
  118.     DB    0BCH,0B0H,4DH,8DH    ;  8     9     :     ;
  119.     DB    70H,86H,71H,49H         ;  (     =     )     ?
  120.     DB    76H,5CH,60H,6CH         ;  @     A     B     C
  121.     DB    6DH,65H,4EH,4FH         ;  D     E     F     G
  122.     DB    61H,54H,47H,64H      ;  H     I     J     K
  123.     DB    69H,5FH,66H,59H      ;  L     M     N     O
  124.     DB    45H,44H,5DH,51H      ;  P     Q     R     S
  125.     DB    67H,6EH,5EH,50H      ;  T     U     V     W
  126.     DB    6FH,41H,77H,70H         ;  X     Y     Z     (
  127.     DB    89H,71H,97H,40H         ;  /     )    1/2    US
  128.     DB    95H,9CH,0A0H,0ACH    ;  '     A     B     C
  129.     DB    0ADH,0A5H,8EH,8FH    ;  D     E     F     G
  130.     DB    0A1H,94H,87H,0A4H    ;  H     I     J     K
  131.     DB    0A9H,9FH,0A6H,99H    ;  L     M     N     O
  132.     DB    85H,84H,9DH,91H      ;  P     Q     R     S
  133.     DB    0A7H,0AEH,9EH,90H    ;  T     U     V     W
  134.     DB    0AFH,81H,0B7H,70H    ;  X     Y     Z     (
  135.     DB    7FH,71H,57H,0         ;EX.PT   )    1/4    NC
  136.     ENDIF
  137. ;
  138. ;
  139.     IF MANIFOLD
  140. ;
  141. ;    MANIFOLD 72 TYPE ELEMENT
  142. ;    UPPER CASE ALPHA, NUMERALS, AND MOST PUNCTUATION
  143. ;
  144. TABLE:    DB    0,97H,55H,7EH         ;SPACE EX.PT   "     #
  145.     DB    79H,75H,7DH,95H         ;  $     %     &     '
  146.     DB    70H,71H,7CH,46H         ;  (     )     *     +
  147.     DB    0CCH,80H,0D6H,89H    ;  ,     -     .     /
  148.     DB    0B1H,0BFH,0B6H,0BEH  ;  0     1     2     3
  149.     DB    0B9H,0B5H,0B4H,0BDH  ;  4     5     6     7
  150.     DB    0BCH,0B0H,4DH,8DH    ;  8     9     :     ;
  151.     DB    70H,86H,71H,49H         ;  (     =     )     ?
  152.     DB    76H,0DCH,0E0H,0ECH   ;  @     A     B     C
  153.     DB    0EDH,0E5H,0CEH,0CFH  ;  D     E     F     G
  154.     DB    0E1H,0D4H,0C7H,0E4H  ;  H     I     J     K
  155.     DB    0E9H,0DFH,0E6H,0D9H  ;  L     M     N     O
  156.     DB    0C5H,0C4H,0DDH,0D1H  ;  P     Q     R     S
  157.     DB    0E7H,0EEH,0DEH,0D0H  ;  T     U     V     W
  158.     DB    0EFH,0C1H,0F7H,70H   ;  X     Y     Z     (
  159.     DB    89H,71H,57H,40H         ;  /     )    DEG    US
  160.     DB    95H,0DCH,0E0H,0ECH   ;  '     A     B     C
  161.     DB    0EDH,0E5H,0CEH,0CFH  ;  D     E     F     G
  162.     DB    0E1H,0D4H,0C7H,0E4H  ;  H     I     J     K
  163.     DB    0E9H,0DFH,0E6H,0D9H  ;  L     M     N     O
  164.     DB    0C5H,0C4H,0DDH,0D1H  ;  P     Q     R     S
  165.     DB    0E7H,0EEH,0DEH,0D0H  ;  T     U     V     W
  166.     DB    0EFH,0C1H,0F7H,70H   ;  X     Y     Z     (
  167.     DB    97H,71H,7FH,0         ;EX.PT   )     +-    NC
  168.     ENDIF
  169.     END    START
  170.