mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 08:54:17 +00:00
Upload
Digital Research
This commit is contained in:
410
CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v101/utils/eds.sa
Normal file
410
CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v101/utils/eds.sa
Normal file
@@ -0,0 +1,410 @@
|
||||
/*SPLH*/ /*$TITLE='CP/M-86 2.0 --- ED' */
|
||||
ED:
|
||||
DO;
|
||||
/* MODIFIED FOR .PRL OPERATION MAY, 1979 */
|
||||
/* MODIFIED FOR OPERATION WITH CP/M 2.0 AUGUST 1979 */
|
||||
/* MODIFIED FOR MP/M 2.0 JUNE 1981 */
|
||||
/* MODIFIED FOR CP/M 1.1 OCT 1981 */
|
||||
/* MODIFIED FOR CP/M-68K JULY 1982 BY H.CHAKI */
|
||||
DECLARE
|
||||
MPMPRODUCT LITERALLY '01H', /* REQUIRES MP/M */
|
||||
CPM3 LITERALLY '30H'; /* REQUIRES 3.0 CP/M */
|
||||
|
||||
|
||||
|
||||
/* DECLARE 8080 INTERFACE
|
||||
JMP EDCOMMAND - 3 (TO ADDRESS LXI SP)
|
||||
EDJMP BYTE DATA(0C3H),
|
||||
EDADR ADDRESS DATA(.EDCOMMAND-3); */
|
||||
|
||||
|
||||
/**************************************
|
||||
* *
|
||||
* B D O S INTERFACE *
|
||||
* *
|
||||
**************************************/
|
||||
|
||||
|
||||
MON1:
|
||||
PROCEDURE (FUNC,INFO) EXTERNAL;
|
||||
DECLARE FUNC BYTE;
|
||||
DECLARE INFO ADDRESS;
|
||||
END MON1;
|
||||
|
||||
MON2:
|
||||
PROCEDURE (FUNC,INFO) BYTE EXTERNAL;
|
||||
DECLARE FUNC BYTE;
|
||||
DECLARE INFO ADDRESS;
|
||||
END MON2;
|
||||
|
||||
MON3:
|
||||
PROCEDURE (FUNC,INFO) ADDRESS EXTERNAL;
|
||||
DECLARE FUNC BYTE;
|
||||
DECLARE INFO ADDRESS;
|
||||
END MON3;
|
||||
|
||||
MON5 : PROC(FN,IN) EXT ;
|
||||
DCL FN BYTE;
|
||||
DCL IN POINTER ;
|
||||
END;
|
||||
|
||||
MON6 : PROC(FN,IN) BYTE EXT ;
|
||||
DCL FN BYTE;
|
||||
DCL IN POINTER ;
|
||||
END ;
|
||||
|
||||
MON7 : PROC(FN,IN) ADDR EXT;
|
||||
DCL FN BYTE ;
|
||||
DCL IN POINTER;
|
||||
END ;
|
||||
|
||||
/* DECLARE CMDRV BYTE EXTERNAL; /* COMMAND DRIVE */
|
||||
DECLARE FCB (128) BYTE EXTERNAL; /* 1ST DEFAULT FCB */
|
||||
DECLARE FCB16 (128) BYTE EXTERNAL; /* 2ND DEFAULT FCB */
|
||||
/* DECLARE PASS0 ADDRESS EXTERNAL; /* 1ST PASSWORD PTR */
|
||||
/* DECLARE LEN0 BYTE EXTERNAL; /* 1ST PASSWD LENGTH */
|
||||
/* DECLARE PASS1 ADDRESS EXTERNAL; /* 2ND PASSWORD PTR */
|
||||
/* DECLARE LEN1 BYTE EXTERNAL; /* 2ND PASSWD LENGTH */
|
||||
DECLARE TBUFF (128) BYTE EXTERNAL; /* DEFAULT DMA BUFFER */
|
||||
|
||||
|
||||
DECLARE
|
||||
/* BDISK BYTE EXTERNAL, /* BOOT DISK 0004H */
|
||||
MAXB ADDRESS EXTERNAL, /* MAX BASE 0006H */
|
||||
BUFF (128)BYTE EXTERNAL, /* BUFFER 0080H */
|
||||
SECTSHF LITERALLY '7', /* SHL(1,SECTSHF) = SECTSIZE */
|
||||
SECTSIZE LITERALLY '80H'; /* SECTOR SIZE */
|
||||
|
||||
/* 68K */ DCL DUM1P POINTER,DUM1L LONG AT(@DUM1P);
|
||||
/* 68K */ DCL DUM2P POINTER,DUM2L LONG AT(@DUM2P);
|
||||
|
||||
BOOT: PROCEDURE PUBLIC;
|
||||
CALL MON1(0,0); /* CHANGED FOR MP/M-86 VERSION */
|
||||
/* SYSTEM REBOOT */
|
||||
END BOOT;
|
||||
/*SPLH*/ /*$EJECT */
|
||||
|
||||
/* E D : T H E C P / M C O N T E X T E D I T O R */
|
||||
|
||||
/* COPYRIGHT (C) 1976, 1977, 1978, 1979, 1980, 1981
|
||||
DIGITAL RESEARCH
|
||||
BOX 579 PACIFIC GROVE
|
||||
CALIFORNIA 93950
|
||||
|
||||
REVISED:
|
||||
07 APRIL 81 BY THOMAS ROLANDER
|
||||
21 JULY 81 BY DOUG HUSKEY
|
||||
29 OCT 81 BY DOUG HUSKEY
|
||||
10 NOV 81 BY DOUG HUSKEY
|
||||
31 JULY 81 BY H.CHAKI
|
||||
*/
|
||||
|
||||
/*SPLH*/ /*$EJECT */
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
* * * GLOBAL VARIABLES * * *
|
||||
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
DECLARE /* LIT LITERALLY 'LITERALLY',
|
||||
DCL LIT 'DECLARE',
|
||||
PROC LIT 'PROCEDURE',
|
||||
ADDR LIT 'ADDRESS', */
|
||||
CTLL LIT '0CH',
|
||||
CTLR LIT '12H', /* REPEAT LINE IN INSERT MODE */
|
||||
CTLU LIT '15H', /* LINE DELETE IN INSERT MODE */
|
||||
CTLX LIT '18H', /* EQUIVALENT TO CTLU */
|
||||
CTLH LIT '08H', /* BACKSPACE */
|
||||
TAB LIT '09H', /* TAB CHARACTER */
|
||||
LCA LIT '110$0001B', /* LOWER CASE A */
|
||||
LCZ LIT '111$1010B', /* LOWER CASE Z */
|
||||
ESC LIT '1BH', /* ESCAPE CHARACTER */
|
||||
ENDFILE LIT '1AH'; /* CP/M END OF FILE */
|
||||
|
||||
DECLARE
|
||||
TRUE LITERALLY '1',
|
||||
FALSE LITERALLY '0',
|
||||
FOREVER LITERALLY 'WHILE TRUE',
|
||||
CTRL$C LITERALLY '3',
|
||||
CR LITERALLY '13',
|
||||
LF LITERALLY '10',
|
||||
WHAT LITERALLY '63';
|
||||
|
||||
|
||||
DECLARE
|
||||
US LITERALLY '8', /* FILE FROM USER 0 */
|
||||
RO LITERALLY '9', /* R/O FILE INDICATOR */
|
||||
SY LITERALLY '10', /* SYSTEM FILE ATTRIBUTE */
|
||||
EX LITERALLY '12', /* EXTENT NUMBER POSITION */
|
||||
UB LITERALLY '13', /* UNFILLED BYTES */
|
||||
CK LITERALLY '13', /* CHECKSUM */
|
||||
MD LITERALLY '14', /* MODULE NUMBER POSITION */
|
||||
NR LITERALLY '32', /* NEXT RECORD FIELD */
|
||||
FS LITERALLY '33', /* FCB SIZE */
|
||||
XFERON BYTE EXT INIT, /* TRUE IF XFER ACTIVE */
|
||||
PASSWORD (16) BYTE EXT INIT; /* SOURCE PASSWORD */
|
||||
|
||||
DECLARE
|
||||
LIBFCB (12) BYTE EXT DATA ;/* DEFAULT LIB NAME */
|
||||
|
||||
DECLARE
|
||||
PRINTSUPPR BYTE EXT INIT; /* TRUE IF PRINT SUPPRESSED */
|
||||
|
||||
|
||||
DECLARE
|
||||
COLUMN BYTE EXT; /* CONSOLE COLUMN POSITION */
|
||||
/* COMMAND BUFFER */
|
||||
|
||||
DCL DCNT BYTE EXT ;
|
||||
|
||||
DECLARE (MAXLEN,COMLEN) BYTE EXT, COMBUFF(128) BYTE EXT,
|
||||
(TCBP,CBP) BYTE EXT ;
|
||||
|
||||
/* MP/M PARSE FUNCTION CALL */
|
||||
DECLARE
|
||||
PARSE$FN STRUCTURE(
|
||||
BUFF$ADR POINTER,
|
||||
FCB$ADR POINTER);
|
||||
|
||||
DECLARE
|
||||
LPP LIT '23', /* LINES PER PAGE */
|
||||
FORWARD LIT '1',
|
||||
BACKWARD LIT '0',
|
||||
RUBOUT LIT '07FH',
|
||||
POUND LIT '23H',
|
||||
MACSIZE LIT '128', /* MAX MACRO SIZE */
|
||||
SCRSIZE LIT '100', /* SCRATCH BUFFER SIZE */
|
||||
COMSIZE LIT 'ADDRESS'; /* DETERMINES MAX COMMAND NUMBER*/
|
||||
|
||||
DCL FLAG BYTE EXT;
|
||||
|
||||
DCL RESET LABEL EXT;
|
||||
|
||||
DECLARE
|
||||
EOS LITERALLY '0FFH';
|
||||
|
||||
/*SPLH*/ /*$EJECT */
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
* * * CP/M INTERFACE ROUTINES * * *
|
||||
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
|
||||
/* IO SECTION */
|
||||
|
||||
READCHAR: PROCEDURE BYTE PUBLIC; RETURN MON2(1,0);
|
||||
END READCHAR;
|
||||
|
||||
CONIN:
|
||||
PROCEDURE BYTE PUBLIC;
|
||||
RETURN MON2(6,0FDH);
|
||||
END CONIN;
|
||||
|
||||
PRINTCHAR: PROCEDURE(CHAR) PUBLIC;
|
||||
DECLARE CHAR BYTE;
|
||||
IF PRINTSUPPR THEN RETURN;
|
||||
CALL MON1(2,CHAR);
|
||||
END PRINTCHAR;
|
||||
|
||||
TTYCHAR: PROCEDURE(CHAR) PUBLIC;
|
||||
DECLARE CHAR BYTE;
|
||||
IF CHAR >= ' ' THEN COLUMN = COLUMN + 1;
|
||||
IF CHAR = LF THEN COLUMN = 0;
|
||||
CALL PRINTCHAR(CHAR);
|
||||
END TTYCHAR;
|
||||
|
||||
BACKSPACE: PROCEDURE PUBLIC;
|
||||
/* MOVE BACK ONE POSITION */
|
||||
IF COLUMN = 0 THEN RETURN;
|
||||
CALL TTYCHAR(CTLH); /* COLUMN = COLUMN - 1 */
|
||||
CALL TTYCHAR(' ' ); /* COLUMN = COLUMN + 1 */
|
||||
CALL TTYCHAR(CTLH); /* COLUMN = COLUMN - 1 */
|
||||
COLUMN = COLUMN - 2;
|
||||
END BACKSPACE;
|
||||
|
||||
PRINTABS: PROCEDURE(CHAR) PUBLIC ;
|
||||
DECLARE (CHAR,I,J) BYTE;
|
||||
I = CHAR = TAB AND 7 - (COLUMN AND 7);
|
||||
IF CHAR = TAB THEN CHAR = ' ';
|
||||
DO J = 0 TO I;
|
||||
CALL TTYCHAR(CHAR);
|
||||
END;
|
||||
END PRINTABS;
|
||||
|
||||
GRAPHIC: PROCEDURE(C) BYTE PUBLIC;
|
||||
DECLARE C BYTE;
|
||||
/* RETURN TRUE IF GRAPHIC CHARACTER */
|
||||
IF C >= ' ' THEN RETURN TRUE;
|
||||
RETURN C = CR OR C = LF OR C = TAB;
|
||||
END GRAPHIC;
|
||||
|
||||
PRINTC: PROCEDURE(C) PUBLIC;
|
||||
DECLARE C BYTE;
|
||||
IF NOT GRAPHIC(C) THEN
|
||||
DO; CALL PRINTABS('^');
|
||||
C = C + '@';
|
||||
END;
|
||||
CALL PRINTABS(C);
|
||||
END PRINTC;
|
||||
|
||||
CRLF: PROCEDURE PUBLIC;
|
||||
CALL PRINTC(CR); CALL PRINTC(LF);
|
||||
END CRLF;
|
||||
|
||||
PRINTM: PROCEDURE(A) PUBLIC;
|
||||
DECLARE A POINTER;
|
||||
CALL MON5(9,A);
|
||||
END PRINTM;
|
||||
|
||||
PRINT: PROCEDURE(A) PUBLIC;
|
||||
DECLARE A POINTER;
|
||||
CALL CRLF;
|
||||
CALL PRINTM(A);
|
||||
END PRINT;
|
||||
|
||||
READ: PROCEDURE(A) PUBLIC;
|
||||
DECLARE A POINTER;
|
||||
CALL MON5(10,A);
|
||||
END READ;
|
||||
|
||||
/* USED FOR LIBRARY FILES */
|
||||
OPEN: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
IF MON6(15,FCB) = 255 THEN DO;
|
||||
FLAG = 'O';
|
||||
GO TO RESET;
|
||||
END;
|
||||
END OPEN;
|
||||
|
||||
/* USED FOR MAIN SOURCE FILE */
|
||||
OPEN$FILE: PROCEDURE(FCB) ADDRESS PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
RETURN MON7(15,FCB);
|
||||
END OPEN$FILE;
|
||||
|
||||
CLOSE: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
DCNT = MON6(16,FCB);
|
||||
END CLOSE;
|
||||
|
||||
SEARCH: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
DCNT = MON6(17,FCB);
|
||||
END SEARCH;
|
||||
|
||||
DELETE: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
DCNT = MON6(19,FCB);
|
||||
END DELETE;
|
||||
|
||||
DISKREAD: PROCEDURE(FCB) BYTE PUBLIC ;
|
||||
DECLARE FCB POINTER;
|
||||
RETURN MON6(20,FCB);
|
||||
END DISKREAD;
|
||||
|
||||
DISKWRITE: PROCEDURE(FCB) BYTE PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
RETURN MON6(21,FCB);
|
||||
END DISKWRITE;
|
||||
|
||||
MAKE: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
DCNT = MON6(22,FCB);
|
||||
END MAKE;
|
||||
|
||||
RENAME: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
CALL MON5(23,FCB);
|
||||
END RENAME;
|
||||
|
||||
READCOM: PROCEDURE PUBLIC;
|
||||
MAXLEN = 128; CALL READ(@MAXLEN);
|
||||
END READCOM;
|
||||
|
||||
BREAK$KEY: PROCEDURE BYTE PUBLIC;
|
||||
IF MON2(11,0) THEN
|
||||
DO; /* CLEAR CHAR */
|
||||
IF MON2(1,0) = CTRL$C THEN
|
||||
RETURN TRUE;
|
||||
END;
|
||||
RETURN FALSE;
|
||||
END BREAK$KEY;
|
||||
|
||||
CSELECT: PROCEDURE BYTE PUBLIC;
|
||||
/* RETURN CURRENT DRIVE NUMBER */
|
||||
RETURN MON2(25,0);
|
||||
END CSELECT;
|
||||
|
||||
SELECT: PROCEDURE(DISK) PUBLIC;
|
||||
DECLARE DISK BYTE;
|
||||
/* SET DRIVE NUMBER */
|
||||
CALL MON1(14,DISK);
|
||||
END SELECT;
|
||||
|
||||
SETDMA: PROCEDURE(A) PUBLIC;
|
||||
DECLARE A POINTER;
|
||||
/* SET DMA ADDRESS */
|
||||
CALL MON5(26,A);
|
||||
END SETDMA;
|
||||
|
||||
SET$ATTRIBU: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
CALL MON5(30,FCB);
|
||||
END SET$ATTRIBU;
|
||||
|
||||
/* THIS ROUTINE IS INCLUDED SOLELY FOR
|
||||
ENCONOMY OF SPACE OVER THE USE OF THE
|
||||
EQUIVALENT (IN-LINE) CODE GENERATED BY
|
||||
THE BUILT-IN FUNCTION */
|
||||
MOVE: PROC(C,S,D) PUBLIC;
|
||||
DCL (S,D) POINTER, C BYTE;
|
||||
DCL A BASED DUM1P BYTE, B BASED DUM2P BYTE;
|
||||
DUM1P=S;DUM2P=D;
|
||||
DO WHILE (C:=C-1)<>255;
|
||||
B=A; DUM1L=DUM1L+1;DUM2L=DUM2L+1;
|
||||
END;
|
||||
END MOVE;
|
||||
|
||||
WRITE$XFCB: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
CALL MOVE(8,@PASSWORD,@PASSWORD(8));
|
||||
IF MON6(103,FCB)= 0FFH THEN
|
||||
CALL PRINT(@('ERROR CREATING PASSWORD$'));
|
||||
END WRITE$XFCB;
|
||||
|
||||
READ$XFCB: PROCEDURE(FCB) PUBLIC;
|
||||
DECLARE FCB POINTER;
|
||||
CALL MON5(102,FCB);
|
||||
END READ$XFCB;
|
||||
|
||||
/* 0FF => RETURN BDOS ERRORS */
|
||||
RETURN$ERRO:
|
||||
PROCEDURE(MODE) PUBLIC;
|
||||
DECLARE MODE BYTE;
|
||||
CALL MON1 (45,MODE);
|
||||
END RETURN$ERRO;
|
||||
|
||||
REBOOT: PROCEDURE PUBLIC;
|
||||
IF XFERON THEN
|
||||
CALL DELETE(@LIBFCB);
|
||||
CALL BOOT;
|
||||
END REBOOT;
|
||||
|
||||
|
||||
VERSION: PROCEDURE ADDRESS PUBLIC;
|
||||
/* RETURNS CURRENT CP/M VERSION # */
|
||||
RETURN MON7(12,0);
|
||||
END VERSION;
|
||||
|
||||
PARSE: PROCEDURE PUBLIC;
|
||||
CALL MON5(152,@PARSE$FN);
|
||||
END PARSE;
|
||||
END;
|
||||
|
||||
Reference in New Issue
Block a user