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 >
Wrap
Text File
|
1984-04-29
|
6KB
|
220 lines
TITLE "A 'STAT' LIKE ROUTINE TO CHANGE MODE OF THE CT-82"
;
; WRITTEN 4 FEBRUARY, 1979 BY KEN TALBOTT
; COPYRIGHT WAIVED FOR NON-COMMERCIAL, HOBBYIST USE.
;
;
; THIS PROGRAM ALLOWS CHANGING THE CONFIGURATION
; OF THE CT-82 BY SWTPC WITHOUT LEAVING THE CP/M
; OPERATING SYSTEM.
;
; THE SOURCE CODE IS FOR CROMEMCO'S Z80 ASSEMBLER
; AND WILL REQUIRE MODIFICATION FOR 8080 SYSTEMS.
;
; TO CALL THE ROUTINE, TYPE:
;
; 'CT82 {C1: C2: C3: .... CN:}'
;
; WHERE {C1: C2: C3: .... CN:} IS A NON-EMPTY
; STRING OF VALID ASSIGNMENTS AS DEFINED BELOW
; IN THE LOOK-UP TABLE.
;
; IF YOU DON'T HAVE THE OPTIONAL CHARACTER OR
; GRAPHICS ROM USE OF THE RELATED COMMANDS WILL
; RESULT IN UNPREDICTABLE RESULTS (USUALLY A
; SCREEN FULL OF VERTICAL WHITE LINES).
;
; NOTE THAT ON MY CT-82 THE DISPLAY CURSOR (^^ ^E)
; AND SUPPRESS CURSOR DISPLAY (^^ ^U) FUNCTIONS
; ARE REVERSED.
;
; ORG 0100H DON'T SET ORIGIN IN SOURCE FILE
; USE 'HEX = ' OPTION WHEN CALLING ASSM
;
TBUFF EQU 0080H ; THIS IS WHERE WE WILL FIND THE
; COMMAND STRING. LOC 80H WILL
; CONTAIN THE LENGTH OF THE STRING
;
BEGIN: LD (SAVSP),SP ; SAVE CCP'S STACK
LD SP,STACK ; SET ONE FOR US
LD A,(TBUFF)
LD C,A ; GET NUMBER CHARS IN C
LD HL,TBUFF+1 ; POINT TO CMND STRING
;
; THIS IS THE MAIN WORK LOOP. FIRST WE FIND THE NEXT
; COMMAND (TERMINATED BY A ':'). IF NO COLON IS FOUND,
; WE EXIT BACK TO THE CCP
;
WORK: LD A,':'
CPIR
JR NZ,FINIS ; NO COLON, THEN FINISHED
;
; WE HAVE A COLON, SO NOW PUT A $ THERE IN CASE WE
; NEED TO PRINT IT AND DECREMENT HL TO POINT TO THE
; FIRST CHAR OF THE COMMAND
;
DEC HL ; BACK UP TO ':'
LD (HL),'?' ; CHANGE IT FOR ERROR
DEC HL
DEC HL
DEC HL
;
; NOW GO LOOK IN THE TABLE FOR THE THREE CHARACTER
; STRING POINTED TO BY HL
;
CALL LOOK
;
; IF NOT FOUND, TELL THE FOLKS, DISPLAYING THE
; INVALID COMMAND
;
CALL NZ,ERROR
;
; IF IT WAS A VALID COMMAND, OUTPUT THE CONTROL CHAR'S
;
CALL Z,COUT
;
; NOW LOOP AND DO IT ALL AGAIN
;
LD A,C ; WE COULD BE AGAINST THE END
AND A
JR NZ,WORK
;
; THIS IS THE POINT AT WHICH WE EXIT BACK TO CP/M
;
FINIS: LD SP,(SAVSP) ; GET CCP'S STACK
RET ; TO CCP
;
; THIS IS THE LOOK-UP ROUTINE FOR VALID COMMANDS.
; HL POINTS TO THE FIRST BYTE OF THE THREE BYTE
; STRING SOUGHT. REG'S BC (NUMBER OF CHARACTERS
; LEFT IN THE COMMAND STRING) MUST BE PRESERVED
; AND HL MUST BE INCREMENTED A TOTAL OF FOUR TIMES
; TO KEEP IT IN SYNC WITH BC FOR SEARCHES FOR
; SUBSEQUENT COLONS. IF FOUND, RETURN ZERO SET.
;
LOOK: PUSH BC ; SAVE CMND STRING POINTER
LD BC,TBLLEN ; LENGTH TO SEARCH
LD DE,TABLE ; POINT TO TABLE
EX DE,HL
LOOP: LD A,(DE) ; 1ST CHAR OF COMMAND STRING
CPIR ; LOOK FOR 1ST CHAR IN TABLE
JR NZ,EXIT1 ; IT'S NOT THERE
INC DE ; 2ND CHAR OF COMMAND STRING
LD A,(DE) ; ...INTO THE ACC
CP (HL) ; EQUAL 2ND CHAR OF TABLE?
DEC DE ; IN CASE NOT EQUAL
JR NZ,LOOP ; CONTINUE LOOK FOR 1ST CHAR
INC DE ; NOW POINT TO....
INC DE ; ....3RD CHAR OF COMMAND
LD A,(DE) ; GET IT IN ACC
INC HL ; 3RD CHAR OF TABLE
CP (HL) ; ARE THEY EQUAL?
DEC DE
DEC DE ; BACK TO COMMAND CHAR1
DEC HL ; BACK TO TABLE CHAR2
JR NZ,LOOP ; ....AND CONTINUE LOOK
;
; MAYBE WE HAVE A MATCH, MAYBE NOT. REGARDLESS
; RESET HL TO CONTINUE SEARCH FOR COLON AND RET.
;
EXIT1: INC DE
INC DE
INC DE
INC DE
EX DE,HL
POP BC ; GET BACK REMAINING COMMAND LENGTH
RET
;
; THIS IS THE ERROR ROUTINE. IT PRINTS THE
; UNDEFINED COMMAND AT THE CONSOLE FOLLOWED
; BY A '?'.
;
ERROR: DEC HL
DEC HL
DEC HL
DEC HL
PUSH BC
PUSH DE
LD A,4 ; NUMBER TO PRINT
CALL LOOP1
POP DE
POP BC
INC A
RET
LOOP1: LD E,(HL)
PUSH HL
LD C,02 ; CP/M CONSOLE OUT COMMAND
PUSH AF ; SAVE COUNT & STATUS
CALL 5 ; BDOS ENTRY
POP AF ; GET BACK COUNT
DEC A
POP HL
INC HL ; POINT TO NEXT CHAR
JR NZ,LOOP1 ; DO IT AGAIN
RET
;
; THIS IS THE ROUTINE WHICH OUTPUTS THE CONTROL CHAR'S
; TO THE CT-82.
;
COUT: EX DE,HL ; TABLE POINTER TO HL
INC HL
INC HL ; POINT TO CONTROL CHAR
PUSH BC
PUSH DE
LD A,02
CALL LOOP1
POP DE
POP BC
EX DE,HL
RET
;
; THIS IS THE TABLE OF VALID COMMANDS. THE COLON (:)
; IS NOT PART OF THE TABLE BUT IS USED AS THE DELIMITER
; IN THE COMMAND STRING. EACH COMMAND IS FOLLOWED BY
; A TWO CHARACTER STRING TO BE OUTPUT TO THE CT-82
; (STRING IS PADDED WITH NULLS AS REQUIRED).
;
TABLE: DB 'CES',1EH,01H ; CLEAR ESCAPE DATA MODE
DB 'KOF',00H,05H ; CURSOR OFF
DB 'KON',00H,15H ; CURSOR ON
DB 'DLF',1EH,09H ; DISABLE AUTO LF ON CR
DB 'DNL',1EH,1AH ; DISABLE AUTO NEW LINE ON OVFL
DB 'DES',1EH,00H ; DISABLE ESCAPE CHAR
DB 'DRO',1EH,1BH ; DISABLE RUBOUT AS DATA
DB 'DSC',1EH,18H ; DISABLE SCROLL ON LF
DB 'DSH',1EH,1DH ; DISABLE SHIFT INVERT
DB 'DPR',1DH,07H ; DISABLE PRINTER PASS THRU
DB 'DCN',1CH,00H ; DISPLAY CONTROL CHAR
DB 'ELF',1EH,19H ; ENABLE AUTO LF ON CR
DB 'ENL',1EH,0AH ; ENABLE AUTO NL ON OVFL
DB 'EES',1EH,10H ; ENABLE ESCAPE CHAR
DB 'ERO',1EH,0BH ; ENABLE RUB AS DATA
DB 'ESC',1EH,08H ; ENABLE SCROLL ON LF
DB 'ESH',1EH,0DH ; ENABLE SHIFT INVERT
DB 'EPR',1DH,0BH ; ENABLE PRINTER PASS THRU
DB 'EUL',1EH,0CH ; ENABLE UPPER & LOWER CASE
DB 'POF',00H,14H ; PUNCH OFF
DB 'PON',00H,12H ; PUNCH ON
DB 'ROF',00H,13H ; READER OFF
DB 'RON',00H,11H ; READER ON
DB 'KBK',1EH,03H ; SET BLINKING CURSOR
DB 'BKK',1EH,04H ; SET BLOCK CURSOR
DB '16L',1CH,11H ; SET CRT FORMAT I
DB '20L',1CH,12H ; SET CRT FORMAT II
DB '16A',1CH,13H ; SET CRT FORMAT III
DB '20A',1CH,14H ; SET CRT FORMAT IV
DB 'CON',1EH,0FH ; SET CONVERSATIONAL
DB 'FUL',1EH,0EH ; SET FULL DUPLEX
DB 'SES',1EH,11H ; SET ESCAPE DATA MODE
DB 'GRA',1DH,16H ; SET GRAPHICS DISPLAY
DB 'HAF',1EH,1EH ; SET HALF DUPLEX
DB 'NBK',1EH,13H ; SET NON-BLINKING CURSOR
DB 'PED',1EH,1FH ; SET PAGE EDIT MODE
DB 'ULK',1EH,14H ; SET UNDERLINE CURSOR
DB 'UCO',1EH,1CH ; SET UPPER CASE ONLY
TBLLEN EQU $-TABLE
DS 16
STACK EQU $
SAVSP: DS 2
END BEGIN