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 / CPMUG042.ARK / CT82.Z80 < prev    next >
Text File  |  1984-04-29  |  6KB  |  220 lines

  1.     TITLE    "A 'STAT' LIKE ROUTINE TO CHANGE MODE OF THE CT-82"
  2. ;    WRITTEN 4 FEBRUARY, 1979 BY KEN TALBOTT
  3. ;    COPYRIGHT WAIVED FOR NON-COMMERCIAL, HOBBYIST USE.
  4. ;    THIS PROGRAM ALLOWS CHANGING THE CONFIGURATION
  5. ;    OF THE CT-82 BY SWTPC WITHOUT LEAVING THE CP/M
  6. ;    OPERATING SYSTEM.
  7. ;    THE SOURCE CODE IS FOR CROMEMCO'S Z80 ASSEMBLER
  8. ;    AND WILL REQUIRE MODIFICATION FOR 8080 SYSTEMS.
  9. ;    TO CALL THE ROUTINE, TYPE:
  10. ;        'CT82 {C1: C2: C3: .... CN:}'
  11. ;    WHERE {C1: C2: C3: .... CN:} IS A NON-EMPTY
  12. ;    STRING OF VALID ASSIGNMENTS AS DEFINED BELOW
  13. ;    IN THE LOOK-UP TABLE.
  14. ;    IF YOU DON'T HAVE THE OPTIONAL CHARACTER OR
  15. ;    GRAPHICS ROM USE OF THE RELATED COMMANDS WILL
  16. ;    RESULT IN UNPREDICTABLE RESULTS (USUALLY A
  17. ;    SCREEN FULL OF VERTICAL WHITE LINES).
  18. ;    NOTE THAT ON MY CT-82 THE DISPLAY CURSOR (^^ ^E)
  19. ;    AND SUPPRESS CURSOR DISPLAY (^^ ^U) FUNCTIONS
  20. ;    ARE REVERSED.
  21. ;    ORG    0100H    DON'T SET ORIGIN IN SOURCE FILE
  22. ;            USE 'HEX = ' OPTION WHEN CALLING ASSM
  23. TBUFF    EQU    0080H    ; THIS IS WHERE WE WILL FIND THE
  24.             ; COMMAND STRING.  LOC 80H WILL
  25.             ; CONTAIN THE LENGTH OF THE STRING
  26. BEGIN:    LD    (SAVSP),SP    ; SAVE CCP'S STACK
  27.     LD    SP,STACK    ; SET ONE FOR US
  28.     LD    A,(TBUFF)
  29.     LD    C,A        ; GET NUMBER CHARS IN C
  30.     LD    HL,TBUFF+1    ; POINT TO CMND STRING
  31. ;    THIS IS THE MAIN WORK LOOP.  FIRST WE FIND THE NEXT
  32. ;    COMMAND (TERMINATED BY A ':').  IF NO COLON IS FOUND,
  33. ;    WE EXIT BACK TO THE CCP
  34. WORK:    LD    A,':'
  35.     CPIR
  36.     JR    NZ,FINIS    ; NO COLON, THEN FINISHED
  37. ;    WE HAVE A COLON, SO NOW PUT A $ THERE IN CASE WE
  38. ;    NEED TO PRINT IT AND DECREMENT HL TO POINT TO THE
  39. ;    FIRST CHAR OF THE COMMAND
  40.     DEC    HL        ; BACK UP TO ':'
  41.     LD    (HL),'?'    ; CHANGE IT FOR ERROR
  42.     DEC    HL
  43.     DEC    HL
  44.     DEC    HL
  45. ;    NOW GO LOOK IN THE TABLE FOR THE THREE CHARACTER
  46. ;    STRING POINTED TO BY HL
  47.     CALL    LOOK
  48. ;    IF NOT FOUND, TELL THE FOLKS, DISPLAYING THE
  49. ;    INVALID COMMAND
  50.     CALL    NZ,ERROR
  51. ;    IF IT WAS A VALID COMMAND, OUTPUT THE CONTROL CHAR'S
  52.     CALL    Z,COUT
  53. ;    NOW LOOP AND DO IT ALL AGAIN
  54.     LD    A,C        ; WE COULD BE AGAINST THE END
  55.     AND    A
  56.     JR    NZ,WORK
  57. ;    THIS IS THE POINT AT WHICH WE EXIT BACK TO CP/M
  58. FINIS:    LD    SP,(SAVSP)    ; GET CCP'S STACK
  59.     RET            ; TO CCP
  60. ;    THIS IS THE LOOK-UP ROUTINE FOR VALID COMMANDS.
  61. ;    HL POINTS TO THE FIRST BYTE OF THE THREE BYTE
  62. ;    STRING SOUGHT.  REG'S BC (NUMBER OF CHARACTERS
  63. ;    LEFT IN THE COMMAND STRING) MUST BE PRESERVED
  64. ;    AND HL MUST BE INCREMENTED A TOTAL OF FOUR TIMES
  65. ;    TO KEEP IT IN SYNC WITH BC FOR SEARCHES FOR
  66. ;    SUBSEQUENT COLONS.  IF FOUND, RETURN ZERO SET.
  67. LOOK:    PUSH    BC        ; SAVE CMND STRING POINTER
  68.     LD    BC,TBLLEN    ; LENGTH TO SEARCH
  69.     LD    DE,TABLE    ; POINT TO TABLE
  70.     EX    DE,HL
  71. LOOP:    LD    A,(DE)    ; 1ST CHAR OF COMMAND STRING
  72.     CPIR        ; LOOK FOR 1ST CHAR IN TABLE
  73.     JR    NZ,EXIT1    ; IT'S NOT THERE
  74.     INC    DE    ; 2ND CHAR OF COMMAND STRING
  75.     LD    A,(DE)    ; ...INTO THE ACC
  76.     CP    (HL)    ; EQUAL 2ND CHAR OF TABLE?
  77.     DEC    DE    ; IN CASE NOT EQUAL
  78.     JR    NZ,LOOP    ; CONTINUE LOOK FOR 1ST CHAR
  79.     INC    DE    ; NOW POINT TO....
  80.     INC    DE    ; ....3RD CHAR OF COMMAND
  81.     LD    A,(DE)    ; GET IT IN ACC
  82.     INC    HL    ; 3RD CHAR OF TABLE
  83.     CP    (HL)    ; ARE THEY EQUAL?
  84.     DEC    DE
  85.     DEC    DE    ; BACK TO COMMAND CHAR1
  86.     DEC    HL    ; BACK TO TABLE CHAR2
  87.     JR    NZ,LOOP    ; ....AND CONTINUE LOOK
  88. ;    MAYBE WE HAVE A MATCH, MAYBE NOT.  REGARDLESS
  89. ;    RESET HL TO CONTINUE SEARCH FOR COLON AND RET.
  90. EXIT1:    INC    DE
  91.     INC    DE
  92.     INC    DE
  93.     INC    DE
  94.     EX    DE,HL
  95.     POP    BC    ; GET BACK REMAINING COMMAND LENGTH
  96.     RET
  97. ;    THIS IS THE ERROR ROUTINE.  IT PRINTS THE
  98. ;    UNDEFINED COMMAND AT THE CONSOLE FOLLOWED
  99. ;    BY A '?'.
  100. ERROR:    DEC    HL
  101.     DEC    HL
  102.     DEC    HL
  103.     DEC    HL
  104.     PUSH    BC
  105.     PUSH    DE
  106.     LD    A,4        ; NUMBER TO PRINT
  107.     CALL    LOOP1
  108.     POP    DE
  109.     POP    BC
  110.     INC    A
  111.     RET
  112. LOOP1:    LD    E,(HL)
  113.     PUSH    HL
  114.     LD    C,02    ; CP/M CONSOLE OUT COMMAND
  115.     PUSH    AF    ; SAVE COUNT & STATUS
  116.     CALL    5    ; BDOS ENTRY
  117.     POP    AF    ; GET BACK COUNT
  118.     DEC    A
  119.     POP    HL
  120.     INC    HL        ; POINT TO NEXT CHAR
  121.     JR    NZ,LOOP1    ; DO IT AGAIN
  122.     RET
  123. ;    THIS IS THE ROUTINE WHICH OUTPUTS THE CONTROL CHAR'S
  124. ;    TO THE CT-82.
  125. COUT:    EX    DE,HL        ; TABLE POINTER TO HL
  126.     INC    HL
  127.     INC    HL        ; POINT TO CONTROL CHAR
  128.     PUSH    BC
  129.     PUSH    DE
  130.     LD    A,02
  131.     CALL    LOOP1
  132.     POP    DE
  133.     POP    BC
  134.     EX    DE,HL
  135.     RET
  136. ;    THIS IS THE TABLE OF VALID COMMANDS.  THE COLON (:)
  137. ;    IS NOT PART OF THE TABLE BUT IS USED AS THE DELIMITER
  138. ;    IN THE COMMAND STRING.  EACH COMMAND IS FOLLOWED BY
  139. ;    A TWO CHARACTER STRING TO BE OUTPUT TO THE CT-82
  140. ;    (STRING IS PADDED WITH NULLS AS REQUIRED).
  141. TABLE:    DB    'CES',1EH,01H    ; CLEAR ESCAPE DATA MODE
  142.     DB    'KOF',00H,05H    ; CURSOR OFF
  143.     DB    'KON',00H,15H    ; CURSOR ON
  144.     DB    'DLF',1EH,09H    ; DISABLE AUTO LF ON CR
  145.     DB    'DNL',1EH,1AH    ; DISABLE AUTO NEW LINE ON OVFL
  146.     DB    'DES',1EH,00H    ; DISABLE ESCAPE CHAR
  147.     DB    'DRO',1EH,1BH    ; DISABLE RUBOUT AS DATA
  148.     DB    'DSC',1EH,18H    ; DISABLE SCROLL ON LF
  149.     DB    'DSH',1EH,1DH    ; DISABLE SHIFT INVERT
  150.     DB    'DPR',1DH,07H    ; DISABLE PRINTER PASS THRU
  151.     DB    'DCN',1CH,00H    ; DISPLAY CONTROL CHAR
  152.     DB    'ELF',1EH,19H    ; ENABLE AUTO LF ON CR
  153.     DB    'ENL',1EH,0AH    ; ENABLE AUTO NL ON OVFL
  154.     DB    'EES',1EH,10H    ; ENABLE ESCAPE CHAR
  155.     DB    'ERO',1EH,0BH    ; ENABLE RUB AS DATA
  156.     DB    'ESC',1EH,08H    ; ENABLE SCROLL ON LF
  157.     DB    'ESH',1EH,0DH    ; ENABLE SHIFT INVERT
  158.     DB    'EPR',1DH,0BH    ; ENABLE PRINTER PASS THRU
  159.     DB    'EUL',1EH,0CH    ; ENABLE UPPER & LOWER CASE
  160.     DB    'POF',00H,14H    ; PUNCH OFF
  161.     DB    'PON',00H,12H    ; PUNCH ON
  162.     DB    'ROF',00H,13H    ; READER OFF
  163.     DB    'RON',00H,11H    ; READER ON
  164.     DB    'KBK',1EH,03H    ; SET BLINKING CURSOR
  165.     DB    'BKK',1EH,04H    ; SET BLOCK CURSOR
  166.     DB    '16L',1CH,11H    ; SET CRT FORMAT I
  167.     DB    '20L',1CH,12H    ; SET CRT FORMAT II
  168.     DB    '16A',1CH,13H    ; SET CRT FORMAT III
  169.     DB    '20A',1CH,14H    ; SET CRT FORMAT IV
  170.     DB    'CON',1EH,0FH    ; SET CONVERSATIONAL
  171.     DB    'FUL',1EH,0EH    ; SET FULL DUPLEX
  172.     DB    'SES',1EH,11H    ; SET ESCAPE DATA MODE
  173.     DB    'GRA',1DH,16H    ; SET GRAPHICS DISPLAY
  174.     DB    'HAF',1EH,1EH    ; SET HALF DUPLEX
  175.     DB    'NBK',1EH,13H    ; SET NON-BLINKING CURSOR
  176.     DB    'PED',1EH,1FH    ; SET PAGE EDIT MODE
  177.     DB    'ULK',1EH,14H    ; SET UNDERLINE CURSOR
  178.     DB    'UCO',1EH,1CH    ; SET UPPER CASE ONLY
  179. TBLLEN    EQU    $-TABLE
  180.     DS    16
  181. STACK    EQU    $
  182. SAVSP:    DS    2
  183.     END    BEGIN
  184.