Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

View File

@@ -0,0 +1,3 @@
r mcc1 $1.c
r mcc2 -m -o$1.obj $2 $3 $4 $5 $6 $7 $8 $9


View File

@@ -0,0 +1,4 @@
r mcc1 $1.c $1.l
r mcc2 -m -o$1.obj $2 -i >$1.d $3 $4 $5 $6 $7 $8 $9
r cmrg $1.l $1.d >$1.l2


View File

@@ -0,0 +1,23 @@
drc lmain -x
drc lfunc1 -x
drc lfunc2 -x
drc lfunc3 -x
drc lfunc4 -x
drc lfunc5 -x
drc lfunc6 -x
drc lfunc7 -x
drc linit1 -x
drc linit2 -x
drc logo -x
drc lio1 -x
drc lio2 -x
drc lws -x
drc leval -x
drc lparm -x
drc lprim1 -x
drc lprim2 -x
drc lerr -x
drc ledt -x
drc lscr -x
drc ldep -x


View File

@@ -0,0 +1,126 @@
CODE CSEG
CGROUP GROUP CODE
DGROUP GROUP DATA,__pname,__tname,__lname,__xeof,_break
EXTRN _main:NEAR
EXTRN exit:NEAR
PUBLIC brk
PUBLIC __BDOS
PUBLIC _start
PUBLIC _sav
PUBLIC _ret
PUBLIC _swpll
DB 'C runtime library, Copyright 1982,1983by Digital Research 86 V0.8'
DB 01AH
_start: MOV AX,DS
MOV SS,AX
MOV BX,6
MOV SP,[BX] ;set up ss:sp
MOV AX,WORD PTR ?MEMRY
MOV __break,AX ;set up __break for brk()
MOV BX,80H ;offset of command line
MOV AL,BYTE PTR [BX];get length
XOR AH,AH
PUSH AX
MOV AX,81H ;offset of command line data
PUSH AX
CALL _main
CALL exit
_sav: POP DX ;RET ADDR
PUSH BP
MOV BP,SP
PUSH DI
PUSH SI
JMP DX
_ret: POP SI ;FLUSH RET ADDR
LEA SI,0-4[BP]
MOV SP,SI
POP SI
POP DI
POP BP
RET
_swpll:
POP ES ;SAVE RET ADDR
POP DX
POP CX
POP BX
POP AX
PUSH CX
PUSH DX
PUSH AX
PUSH BX
PUSH ES
RET
brk: PUSH BP
MOV BP,SP
PUSH DI
PUSH SI
MOV AX,4[BP] ;GET PARAMETER
MOV BX,SP ;GET STACK POINTER
SUB BX,200H ;LEAVE SOME SLOP
CMP AH,BH ;IN THE GENERAL AREA?
JA BRKOK ;IF NOT THEN OK, LEAVE IT ALONE
MOV AX,-1
JMP BRKXIT
BRKOK: MOV AX,0
BRKXIT: POP SI
POP DI
POP BP
RET
__BDOS: ;(func,long)
PUSH BP
MOV BP,SP
PUSH DI
PUSH SI
MOV CX,4[BP]
MOV DX,6[BP]
PUSH BP
INT 0E0H
POP BP
POP SI
POP DI
POP BP
XOR AH,AH
RET
DATA DSEG BYTE
PUBLIC ?MEMRY
?MEMRY RW 2
_break DSEG BYTE COMMON
__break RW 1
__pname DSEG BYTE COMMON
_pname DB 'Cprogram',0
__tname DSEG BYTE COMMON
_tname DB 'CON:',0
__lname DSEG BYTE COMMON
_lname DB 'LST:',0
__xeof DSEG BYTE COMMON
_xeof DB 01AH
END


View File

@@ -0,0 +1,153 @@
CODE CSEG
DGROUP GROUP DATA,__pname,__tname,__lname,__xeof,_break
PUBLIC brk
PUBLIC __BDOS
PUBLIC _start
PUBLIC _ret
PUBLIC _swpll
JMP _start
DB 'C runtime library, Copyright 1982 by Digital Research 86V0.8'
DB 01AH
brk: PUSH BP
MOV BP,SP
PUSH DI
PUSH SI
MOV AX,6[BP] ;GET PARAMETER
MOV BX,SP ;GET STACK POINTER
SUB BX,200H ;LEAVE SOME SLOP
CMP BH,AH ;IN THE SAME GENERAL AREA?
JA BRKOK ;IS BH <= AH? IF NOT THEN OK, LEAVE IT ALONE
MOV AX,-1
JMP BRKXIT
BRKOK: MOV AX,0
BRKXIT: POP SI
POP DI
POP BP
RETF
_start: MOV AX,DS
MOV BX,6
MOV SS,AX
MOV SP,[BX] ;set up ss:sp
MOV AX,WORD PTR ?MEMRY
MOV __break,AX ;set up __break for brk()
;
; NOW ZERO UN-INIT DATA
;
MOV CX,SP
SUB CX,100H ;LEAVE SOME SLOP
MOV BX,WORD PTR ?MEMRY ;GET STARTING LOCATION
SUB CX,BX ;CALC LENGTH INTO CX
INC CX
SHR CX,1 ;MAKE IT A WORD COUNT
MOV AX,0 ;FILL VALUE
MOV DX,DS
MOV ES,DX ;SET UP DEST SEG
MOV DI,BX ;SET UP DEST OFFSET
REP STOSW ;AND DOIT
MOV BX,80H ;offset of command line
MOV AL,BYTE PTR [BX];get length
XOR AH,AH
PUSH AX
MOV AX,81H ;offset of command line data
PUSH AX
CALLF _main
CALLF exit
_swpll:
POP RET1
POP RET2
POP AX
POP BX
POP CX
POP DX
PUSH BX
PUSH AX
PUSH DX
PUSH CX
PUSH RET2
PUSH RET1
RETF
_ret: POP SI
POP SI ;FLUSH RET ADDR
LEA SI,0-4[BP]
MOV SP,SI
POP SI
POP DI
POP BP
RETF
__BDOS: ;(func,long)
PUSH BP
MOV BP,SP
PUSH DI
PUSH SI
CMP WORD PTR 6[BP],26 ;SET DMA?
JNZ NOTSETDMA ;BR IF NO
;
; OTHERWISE SET SEGMENT BASE EVERY TIME
;
MOV DX,DS
MOV CX,33H
PUSH BP
INT 0E0H
POP BP
NOTSETDMA:
MOV CX,6[BP]
MOV DX,8[BP]
PUSH BP
INT 0E0H
POP BP
POP SI
POP DI
POP BP
XOR AH,AH
RETF
DATA DSEG BYTE
PUBLIC ?MEMRY
?MEMRY RW 2
RET1 RW 1
RET2 RW 1
_break DSEG BYTE COMMON
__break RW 1
__pname DSEG BYTE COMMON
_pname DB 'Cprogram',0
__tname DSEG BYTE COMMON
_tname DB 'CON:',0
__lname DSEG BYTE COMMON
_lname DB 'LST:',0
__xeof DSEG BYTE COMMON
_xeof DB 01AH
_main.c_CODE CSEG
EXTRN _main:FAR
exit.c_CODE CSEG
EXTRN exit:FAR
END


View File

@@ -0,0 +1,3 @@
r mcc1 $1.c
r mcc2 -o$1.obj $2 $3 $4 $5 $6 $7 $8 $9


View File

@@ -0,0 +1,4 @@
r mcc1 $1.c $1.l
r mcc2 -o$1.obj $2 -i >$1.d $3 $4 $5 $6 $7 $8 $9
r cmrg $1.l $1.d >$1.l2


View File

@@ -0,0 +1,121 @@
1 Out of memory. Allocate function returns NULL.
2 Identifier not specified in type or storage class declaration.
3 A public function definition is declared external.
4 Parentheses () missing in function declaration.
5 <identifier> ... not declared as a function.
6 Two functions have the same name.
7 Conflicting data type specified for a function.
8 Data type not specified in variable declaration.
9 Global variable declared with "register" storage class.
10 Conflicting data type specified for a function.
11 Conflicting storage class keywords in declaration.
12 Conflicting data type keywords in declaration.
13 Use the keywords "unsigned/long/short" with int only.
14 Do not use the "unsigned long" type declaration.
15 Conflicting type qualifiers "short/long" in declaration.
16 Conflicting definitions for structure tag identifier.
17 Identifier or left brace { missing in struct or union declaration.
18 Storage class specified in struct or union declaration.
19 Data type not specified in struct or union declaration.
20 Use integer constants to define bit field width.
21 Conflicting offsets or data type declared for <identifier>
22 A comma or semicolon is missing.
23 Internal compiler error.
24 Do not use "static" or "extern" to declare parameters.
25 Data type not specified in parameter declaration.
26 Do not use abstract declarator in parameter declaration.
27 <identifier> ... not specified as a parameter.
28 <identifier> ... must be pointer or scalar.
29 Identifier not specified in parameter declaration.
30 A function body is specified as a parameter.
31 Use integer constant expression to specify array bounds.
32 <identifier> ... undefined for "goto" statement.
33 WARNING: <identifier> is declared, but not referenced.
34 <identifier> ... struct or union referenced before declaration.
35 Cannot initialize a function.
36 Do not initialize variables with "extern".
37 Array dimensions are extended automatically.
38 Switch expression cannot be floating-point.
39 Cannot read switch statement. "case <const>" ignored.
40 Constant in "case" construct cannot be floating-point.
41 Cannot read switch statement. "default:" ignored.
42 Break location undefined. No loop or switch.
43 Continue location undefined. No loop or switch.
44 Identifier not specified in "goto" statement.
45 Same statement label used more than once.
46 <identifier> ... defined more than once.
47 <identifier> ... Undefined identifier.
48 Unexpected end-of-file (EOF) on input file.
49 Comma or semicolon is missing.
50 Right brace } is missing.
51 Left brace { is missing.
52 Right parenthesis ) is missing.
53 Right square bracket ] is missing in array declaration.
54 Function parameters cannot have parameters.
55 Right parenthesis ) is missing.
56 Do not list parameters in the function declaration.
57 Comma or semicolon is missing.
58 Right brace } is missing.
59 Comma or semicolon is missing.
61 Too many initializers. Right brace } is missing.
62 Left parenthesis ( is missing.
63 Keyword "while" is missing in "do...while" construct.
64 Colon is missing.
65 Internal compiler error. Bad constant load.
66 Internal compiler error. Unknown pointer size.
67 Use operators ++ and -- on "int/char/long/short" only.
68 MESSAGE SPACE RESERVED
69 MESSAGE SPACE RESERVED
70 MESSAGE SPACE RESERVED
71 Cannot return certain types of expressions.
72 Internal compiler error.
73 Use constant expression to initialize static and extern variables.
74 MESSAGE SPACE RESERVED
75 MESSAGE SPACE RESERVED
76 Variable is not large enough to hold a pointer.
77 Variable too large to hold initial value.
78 Offsets into other segments not implemented.
79 Use operators + - ++ -- with pointers only.
80 MESSAGE SPACE RESERVED
81 Invalid parameter expression.
82 MESSAGE SPACE RESERVED
83 WARNING: Indirection for non-pointers is not portable.
84 Cannot add arrays or structures. Do not use + operator with arrays.
85 MESSAGE SPACE RESERVED
86 Use only += or -= operators wirh pointers.
87 Colon is missing.
88 Cannot add pointers. Do not use + operator with pointers.
89 Incorrect expression syntax.
90 Comma or right parenthesis expected in parameter list.
91 Expression is missing before [ operator.
92 An lvalue is required before [ operator.
93 Array or pointer required on left of [ operator.
94 Array or pointer required. Cannot subscript.
95 WARNING: Subscript is truncated to short int.
96 Right square bracket ] is missing.
97 Identifier missing on right of . operator.
98 Expression missing on left of . operator.
99 Left operand for . operator must be a struct.
100 WARNING: Non-local structure field assumed.
101 Identifier missing on right of -> operator.
102 Expression missing on left of -> operator.
103 Left operand of -> operator must be a pointer.
104 WARNING: Non-local structure field assumed.
105 Division by the constant 0.
106 Operand types do not match. Cannot coerce to compatible types.
107 Cannot coerce operand type to double.
108 Cannot coerce operand type to long.
109 Cannot coerce operand type to unsigned.
110 WARNING: Indirection for non-pointers is not portable.
111 WARNING: & operator (address of) used redundantly.
112 The & operator (address of) requires an lvalue.
113 An lvalue is required with ++ or -- operator.
114 Incorrect operand type for ++ or -- operator.
115 Data type not specified for expression after sizeof operator.
116 An lvalue is required with ++ or -- operator.
117 Incorrect operand type for ++ or -- operator.
118 MESSAGE SPACE RESERVED
119 Output file write error. Disk is probably full.
120 WARNING: Not enough registers available for variables.
121 WARNING: Additional registers available for variables.


View File

@@ -0,0 +1,40 @@
;****************************************************************
;* *
;* DRC to GSX interface *
;* *
;****************************************************************
;
;The following code is an assembler interface to the GSX for DRC
;
CGROUP GROUP CODE
;
PUBLIC GSX
;
CSEG
;
GSX:
Mov BX,SP ;get address of arguments from C
Add BX,0AH ;point at the other end
Push SI
Push DI
Push BP
Push ES
Pushf
Mov CX,5 ;5 arguments
MAKE_LONG:
Push DS ;make them long word pointers
Push word ptr [BX] ;data also
Sub BX,2 ;point at the next
Loop MAKE_LONG
Mov DX,SP ;point at the list
Mov CX,0473H ;layer 0, GDOS 4, function 115
Int 0E0H ;ring the BDOS bell
Add SP,014H ;unstack the longwords
Popf
Pop ES
Pop BP
Pop DI
Pop SI
Ret


View File

@@ -0,0 +1,192 @@
;
; ECHO - Resident System Process
; Print Command tail to console
;
;
; DEFININTIONS
;
mpmint equ 224 ;mpm entry interrupt
mpm_conwrite equ 9 ;print string
mpm_qmake equ 134 ;create queue
mpm_qopen equ 135 ;open queue
mpm_qread equ 137 ;read queue
mpm_qwrite equ 139 ;write queue
mpm_setprior equ 145 ;set priority
mpm_condetach equ 147 ;detach console
mpm_setdefcon equ 148 ;set default console
pdlen equ 48 ;length of Process
; Descriptor
p_cns equ byte ptr 020h ;default cns
p_disk equ byte ptr 012h ;default disk
p_user equ byte ptr 013h ;default user
p_list equ byte ptr 024h ;default list
ps_run equ 0 ;PD run status
pf_keep equ 2 ;PD nokill flag
rsp_top equ 0 ;rsp offset
rsp_pd equ 010h ;PD offset
rsp_uda equ 040h ;UDA offset
rsp_bottom equ 140h ;end rsp header
qf_rsp equ 08h ;queue RSP flag
;
; CODE SEGMENT
;
CSEG
org 0
mpm: int mpmint
ret
main: ;create ECHO queue
mov cl,mpm_qmake ! mov dx,offset qd
call mpm
;open ECHO queue
mov cl,mpm_qopen ! mov dx,offset qpb
call mpm
;set priority to normal
mov cl,mpm_setprior ! mov dx,200
call mpm
;ES points to SYSDAT
mov es,sdatseg
loop: ;forever
;read cmdtail from queue
mov cl,mpm_qread ! mov dx,offset qpb
call mpm
;set default values from PD
mov bx,pdadr
; mov dl,es:p_disk[bx] ;p_disk=0-15
; inc dl ! mov disk,dl ;make disk=1-16
; mov dl,es:p_user[bx]
; mov user,dl
; mov dl,es:p_list[bx]
; mov list,dl
mov dl,es:p_cns[bx]
mov console,dl
;set default console
; mov dl,console
mov cl,mpm_setdefcon ! call mpm
;scan cmdtail and look for '$' or 0.
;when found, replace w/ cr,lf,'$'
lea bx,cmdtail ! mov al,'$' ! mov ah,0
mov dx,bx ! add dx,131
nextchar:
cmp bx,dx ! ja endcmd
cmp [bx],al ! je endcmd
cmp [bx],ah ! je endcmd
inc bx ! jmps nextchar
endcmd:
mov byte ptr [bx],13
mov byte ptr 1[bx],10
mov byte ptr 2[bx],'$'
;write command tail
lea dx,cmdtail ! mov cl,mpm_conwrite
call mpm
;detach console
mov dl,console
mov cl,mpm_condetach ! call mpm
;done, get next command
jmps loop
;
; DATA SEGMENT
;
DSEG
org rsp_top
sdatseg dw 0,0,0
dw 0,0,0
dw 0,0
org rsp_pd
pd dw 0,0 ; link,thread
db ps_run ; status
db 190 ; priority
dw pf_keep ; flags
db 'ECHO ' ; name
dw offset uda/10h ; uda seg
db 0,0 ; disk,user
db 0,0 ; load dsk,usr
dw 0 ; mem
dw 0,0 ; dvract,wait
db 0,0
dw 0
db 0 ; console
db 0,0,0
db 0 ; list
db 0,0,0
dw 0,0,0,0
org rsp_uda
uda dw 0,offset dma,0,0 ;0
dw 0,0,0,0
dw 0,0,0,0 ;10h
dw 0,0,0,0
dw 0,0,0,0 ;20h
dw 0,0,0,0
dw 0,0,offset stack_tos,0 ;30h
dw 0,0,0,0
dw 0,0,0,0 ;40h
dw 0,0,0,0
dw 0,0,0,0 ;50h
dw 0,0,0,0
dw 0,0,0,0 ;60h
org rsp_bottom
qbuf rb 131 ;Queue buffer
qd dw 0 ;link
db 0,0 ;net,org
dw qf_rsp ;flags
db 'ECHO ' ;name
dw 131 ;msglen
dw 1 ;nmsgs
dw 0,0 ;dq,nq
dw 0,0 ;msgcnt,msgout
dw offset qbuf ;buffer addr.
dma rb 128
stack dw 0cccch,0cccch,0cccch
dw 0cccch,0cccch,0cccch
dw 0cccch,0cccch,0cccch
dw 0cccch,0cccch,0cccch
dw 0cccch,0cccch,0cccch
stack_tos dw offset main ; start offset
dw 0 ; start seg
dw 0 ; init flags
pdadr rw 1 ; QPB Buffer
cmdtail rb 129 ; starts here
db 13,10,'$'
qpb db 0,0 ;must be zero
dw 0 ;queue ID
dw 1 ;nmsgs
dw offset pdadr ;buffer addr.
db 'ECHO ' ;name to open
console db 0
;disk db 0
;user db 0
;list db 0
end


Binary file not shown.

View File

@@ -0,0 +1,6 @@
gpr=crt0.med,
gpr,
oscrt.med[search,libsyms],
machdep.med[search,libsyms],
edata[data[max[800]]
e

View File

@@ -0,0 +1,25 @@
cpip prn:=e:ldep.c
cpip prn:=e:ledt.c
cpip prn:=e:leval.c
cpip prn:=e:lfunc1.c
cpip prn:=e:lfunc2.c
cpip prn:=e:lfunc3.c
cpip prn:=e:lfunc4.c
cpip prn:=e:lfunc5.c
cpip prn:=e:lfunc6.c
cpip prn:=e:lfunc7.c
cpip prn:=e:linit1.c
cpip prn:=e:linit2.c
cpip prn:=e:lio1.c
cpip prn:=e:lio2.c
cpip prn:=e:lmain.c
cpip prn:=e:logo.c
cpip prn:=e:logo.h
cpip prn:=e:logopt.c
cpip prn:=e:lparm.c
cpip prn:=e:lprim1.c
cpip prn:=e:lprim2.c
cpip prn:=e:lscr.c
cpip prn:=e:lvdi.c
cpip prn:=e:lws.c


View File

@@ -0,0 +1,80 @@
?General
The MAIL facility
Syntax:
Sending mail: MAIL [<sendfile] [NAMELIST namefile]
[ALL] user1 ...
Receiving mail: MAIL [-R] [-A]
Checking mail: MAIL -C
Sending mail:
"sendfile" is the name of the file containing the information you wish
to send. "namefile" is the name of the file containing a list of
users; the file contains each name on a separate line. The ALL keyword
causes the message to be sent to all users on the system.
Receiving mail:
The -R option causes your mail to be typed out in reverse order (the
last message you receive is typed first). The -A option causes all
mail to be typed out without prompting you for options about letter.
When you are reviewing mail, your options are:
N Leave letter in mailbox, read next letter
P Leave letter in mailbox, read previous letter
R Retype current letter
D Delete current letter, read next letter
S fn Save current letter in file fn with postmark
W fn Save current letter in file fn without postmark
F Forward current letter to users listed
H Type this help file
! execute a command
Q Quit from MAIL
X Exit from MAIL, but do not delete marked messages
?syntax
The syntax of the MAIL command is:
Sending mail: MAIL [<sendfile] [NAMELIST namefile]
[ALL] user1 ...
Receiving mail: MAIL [-R] [-A]
Checking mail: MAIL -C
?send
Sending mail:
MAIL [<sendfile] [NAMELIST namefile] [ALL] user1 ...
"sendfile" is the name of the file containing the information you wish
to send. "namefile" is the name of the file containing a list of
users; the file contains each name on a separate line. The ALL keyword
causes the message to be sent to all users on the system.
?receive
Receiving mail:
MAIL [-R] [-A]
The -R option causes your mail to be typed out in reverse order (the
last message you receive is typed first). The -A option causes all
mail to be typed out without prompting you for options about letter.
?subcommands
Subcommands you can use when receiving mail are:
N Leave letter in mailbox, read next letter
P Leave letter in mailbox, read previous letter
R Retype current letter
D Delete current letter, read next letter
S fn Save current letter in file fn with postmark
W fn Save current letter in file fn without postmark
F Forward current letter to users listed
H Type this help file
! execute a command
Q Quit from MAIL
X Exit from MAIL, but do not delete marked messages
 of the file containing the information you wish
to send. "namefile" is the name of the file containing a list

View File

@@ -0,0 +1,7 @@
length 000083
general 10
receive 1811
send 1456
subcommands 2071
syntax 1241
<1A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -0,0 +1,658 @@
#include "cpyrt.h" /* DRI copyright message */
/****************************************************************************/
/* */
/* The source code contained in this listing is a proprietary trade */
/* secret of Digital Research Inc., Pacific Grove, California and is */
/* copyrighted as an unpublished work pursuant to Section 408 of */
/* Title 17 of the United States Code. Unauthorized copying, */
/* adaptation, distribution, use or display is prohibited by law. */
/* */
/* Author: xxxxxxxxxxx */
/* PRODUCT: MAZE VidLink Program */
/* Module: mazefn */
/* */
/****************************************************************************/
/****************************************************************************/
/* */
/* MAZE Module: MAZEFN, Maze Function */
/* ----------------------------- */
/* */
/* This is the MAZE function module. This module */
/* provides the VidLink Maze Program functions. */
/* */
/* The following routines are present: */
/* */
/* maze MAZE function */
/* */
/* The following routines are called: */
/* */
/* xxxxxxxxx xxxxxxxxxxxxxxxx */
/* */
/* Revision History: */
/* */
/* 06/20/84 by xxxxxxxxxxxx */
/* */
/****************************************************************************/
/*
* Include Files
*/ /****************************/
#include "portab.h" /* DRI portable coding conv */
/****************************/
#include "ascii.h" /* ASCII character defines */
/****************************/
#include "color.h" /* color defines */
/****************************/
#include "graph.h" /* graphics chars */
/****************************/
/*#page*/
/*
* External Data/Functions:
*/
#include "vcrt.d"
#include "mazex.d" /* maze function extrnl data*/
EXTERN WORD vdpiof();
EXTERN WORD VIOSTAT();
/*#page*/
/*
* Local Data/Functions:
*/
#define MAX_PLAYERS 6
#define QMAX 4000 /* size of question buffer */
#define AMAX 40 /* size of answer buffer */
#define RETURN 0x0d /* carriage return */
#define BACKSP 0x09 /* backspace ?? */
struct scene =
{
UWORD start;
UWORD finish;
BYTE right;
BYTE wrong;
};
struct scene intro [] =
{
/* 01 */ 00150, 01482, 02, 00,
/* 02 */ 01800, 02120, 00, 00
};
struct scene nightmare_castle [] =
{
/ * 01 */ 02138, 02202, 02, 01
};
struct scene blast_off [] =
{
/* 01 */ 00000, 00000, 00, 00
};
struct scene first_and_ten [] =
{
/* 01 */ 00000, 00000, 00, 00
};
struct scene shoot_out [] =
{
/* 01 */ 00000, 00000, 00, 00
};
struct player_state =
{
BYTE score;
UBYTE adventure;
UBYTE scene;
UBYTE group;
BOOLEAN bonus;
};
struct player_state player [MAX_PLAYERS];
BYTE c_scene; /* current scene */
BYTE c_player; /* current player */
BYTE last_player; /* last player number */
UBYTE row; /* current row */
UBYTE q_buffer[QMAX]; /* question buffer */
UBYTE eoq; /* TRUE if end of question file */
UWORD q_size; /* size of q_buffer (normally QMAX) */
UWORD q_next; /* next q_buffer to fill */
UWORD g_next; /* next group number */
UWORD g_count; /* group count */
UWORD g_base; /* group base */
UBYTE g_max; /* used to find next question */
UBYTE ans[AMAX]; /* answer buffer */
UBYTE a_size; /* current answer size */
/*#page*/
/****************************************************************************/
/* */
/* xxxxxxxx */
/* -------- */
/* */
/* This subroutine performs the xxxxxxxxxxxxxxxxxxxxxxxx. */
/* */
/****************************************************************************/
GLOBAL maze(argc,argv)
/****************************/
WORD argc; /* cmd tail argument count */
CHAR *argv[]; /* cmd tail string pointers */
{ /***** begin maze *****/
CHAR c;
#ifdef CPU_65
d_ouchar(14); /* switch to lower case */
#endif
clear();
sign_on();
vdpiof("VC");
p_inchar();
clear();
set_row(5);
l_outstr(" Do you want to see");
set_row(6);
l_outstr(" the Introduction (y/n)? ");
c = p_inchar();
if ((c == 'Y') || (c == 'y'))
{
clear();
set_row(5);
l_outstr(" Insert Maze Mania Side #1 ");
set_row(6);
l_outstr(" Strike any key to continue ");
c = p_inchar();
vdpiof("FR1SE");
if (VIOSTAT())
{ /* not in play mode */
while (!VIOSTAT())
;
while (vdpiof("PL"))
{
set_row(8);
l_outstr(" Please insert disc.");
}
set_row(9);
l_outstr(" Thank-you.");
while (!VIOSTAT())
;
vdpiof("PA");
}
else
while (!VIOSTAT())
;
clear();
set_row(5);
l_outstr(" Introduction Part #1 ");
vdpiof("VOVP");
if (!sequence((UWORD)150,(UWORD)1482))
{
vdpiof("VC");
p_move(6,0);
l_outstr(" Introduction Part #2 ");
vdpiof("VP");
sequence((UWORD)1800,(UWORD)2120);
}
vdpiof("VC");
}
init_players();
c_scene = 1;
c_player = 0;
g_next = 0;
g_count = 0;
q_size = QMAX;
while (select_player())
ask_question();
/* saved for reference
p_clear();
p_move(9,0);
l_outstr(" Sequence test.");
p_move(10,0);
l_outstr(" Strike any key to abort.");
vdpiof("VP");
while (!sequence((UWORD)12450,(UWORD)12500))
;
*/
#ifdef CPU_65
d_ouchar(142); /* switch to upper case */
#endif
} /***** end maze *****/
/*#page*/
/****************************************************************************/
/* */
/* xxxxxxxx */
/* -------- */
/* */
/* This subroutine performs the xxxxxxxxxxxxxxxxxxxxxxxx. */
/* */
/****************************************************************************/
MLOCAL sign_on()
{
UBYTE i;
UBYTE j;
UBYTE k;
p_color(BLUE);
i = 0;
j = (p_crt.rows - h_so_maze) >> 1;
k = (p_crt.cols - w_so_maze) >> 1;
while (so_maze[i])
{
p_move(i+j,k);
l_outstr(so_maze[i++]);
}
}
GLOBAL l_outstr(s)
CHAR *s;
{
#ifdef CPU_65
CHAR c;
while (c = *s++)
{
if ((c >= 'a') && (c <= 'z')) /* if lower case */
c = c & 0xdf; /* then to upper */
else
if ((c >= 'A') && (c <= 'Z')) /* if upper case */
c = c | 0x20; /* then to lower */
d_ouchar(c);
}
#else
p_outstr(s);
#endif
}
newline()
{
set_row(row+1);
}
set_row(r)
UBYTE r;
{
p_move(row = r, 0);
}
clear()
{
row = 0;
p_clear();
}
stop_display()
{
UWORD i;
for (i = 0; i < 30000; i++);
}
BOOLEAN read_group()
{
UWORD q, k, k_loc;
UBYTE n, n1, n2;
if (eoq || (eoq = !(n = gn_num())))
return;
q_next = g_next;
put_q(n);
while (n--)
{
n1 = gn_num();
n2 = gn_num();
k_loc = q_next;
put_q(0);
put_q(0);
k = 0;
while (n1--)
k += gn_nstr();
put_q('\0');
while (n2--)
k += gn_nstr();
put_q('\0');
k += 2;
put_nq(k_loc, k & 0xff);
put_nq(k_loc+1, k >> 16);
if (q_next >= q_size - 2)
return (FALSE);
g_next = q_next;
g_count++;
return (TRUE);
}
}
UBYTE gn_num()
{
UBYTE x, d;
x = 0;
while ((d = gnc()) == ' ' || d == ',')
;
while (d = d - '0') <= 9)
x = x * 10 + d;
return (x);
}
UWORD gn_nstr()
{
UWORD d;
UBYTE c;
d = 1;
while (gnc() != '"')
;
while ((c = gnc()) != '"')
{
put_q(c);
d++;
}
put_q('\n');
return (d);
}
UBYTE gnc()
{
if (eoq)
return ('"');
/* note: read next character */
return ('#');
}
put_q(x)
UBYTE x;
{
put_nq(q_next,x);
}
put_nq(loc,x)
UWORD loc;
UBYTE x;
{
if (loc >= q_size)
return;
q_buffer[loc] = x;
if (loc >= q_next)
q_next = loc + 1;
}
UBYTE rand_q(g)
UBYTE g;
{
/* return random number between 1 and g */
return (1);
}
next_question()
{
UWORD q;
q = rand_q(g_max = get_q(g_base));
q_next = 1;
while (q--)
gn_qpos();
for (q = 1; q < g_max; q++)
{
if (!(get_q(q_base+1) & 0x80))
break;
gn_qpos();
}
if (q >= g_max)
{
for (q = 1; q < g_count; q++)
{
put_q(q_base+1,get_q(q_base+1) | 0x80);
gn_qpos();
}
}
}
gn_qpos()
{
q_base +=
gnq(q_base) | ((gnq(q_base+1) & 0x7f) << 8);
if (++q_next > g_max)
{
q_base = g_base + 1;
q_next = 1;
}
}
display_question()
{
set_row(4);
l_outstr(" Here's the question:");
newline();
write_q(&q_buffer[q_base]);
}
write_q(q)
UBYTE *q;
{
while (*q)
{
if (*q == '\n')
{
newline();
l_outstr(" ");
}
else
d_outchar(*q);
q++;
}
}
BOOLEAN get_answer()
{
UBYTE c;
newline();
newline();
l_outstr(" What's your answer?");
a_size = 0;
while ((c = p_inchar()) != RETURN)
if (c == BACKSP)
{
if (a_size > 0)
{
d_outchar(BACKSP);
d_outchar(' ');
d_outchar(BACKSP);
}
}
else
if (a_size < AMAX)
d_outchar(ans[a_size++] = c);
while (get_q(q_base))
{
if match_q()
return (TRUE);
while (get_q(q_base++) != '\n')
;
}
return (FALSE);
}
BOOLEAN match_q()
{
UBYTE a;
for (a = 0; a < a_size; a++)
if (toupper(get_q(q_base)) != toupper(ans[a]))
if (get_q(q_base) == '\n')
return (FALSE);
return (get_q(q_base) == '\n');
}
ask_question()
{
UBYTE p, g, r, w;
BOOLEAN a;
UWORD s;
if (player.bonus[c_player])
vdpiof("ST");
else
vdpiof("AL");
clear();
set_row(3);
l_outstr(" Player ");
outBYTE(c_player);
l_outstr(" has ");
outBYTE(p = player.score[c_player]);
l_outstr(" points");
g = player.group[c_player];
a = TRUE;
while (a)
{
/* select next question from group */
if (g > g_count)
if (!read_group())
g = 1;
/* note: make g_base absolute q_buffer address from group g */
next_question();
display_question();
if (a = get_answer())
{
g += 1;
if ((p += 5) > 100)
p = 100;
s = nightmare.right[scene];
}
else
{
if ((p -= 3) < 0)
p = 0;
s = nightmare.wrong[scene];
}
/* set frame display for bonus questions later */
play_scene(scene);
clear();
set_row(3);
if ((r = nightmare.right[scene]) + (w = nightmare.wrong[scene]) == 0)
{
l_outstr(" Congratulations! You made");
newline();
l_outstr(" it through the maze");
s = 0;
a = FALSE;
}
else
if (r == 0)
{
l_outstr(" Sorry, DEAD END");
s = w;
}
if (a)
{
l_outstr(" Correct!");
/* display bonus question info later */
s = r;
}
else
{
l_outstr(" Oops! You got the");
newline();
l_outstr(" question wrong");
}
stop_display();
}
player.score[c_player] = p;
player.scene[c_player] = s;
player.group[c_player] = g;
}
play_scene(s)
UBYTE s;
{
/* should test for abort from sequence */
while (TRUE)
{
sequence(nightmare.start[s],nightmare.finish[s]);
if (nightmare.wrong[s] != 0)
return;
if ((s = nightmare.right[s]) == 0)
return;
}
}
GLOBAL BOOLEAN sequence(start,stop)
UWORD start;
UWORD stop;
{
UBYTE str[10];
UBYTE stp[10];
BOOLEAN key;
sprintf(str,"%d",start);
sprintf(stp,"%d",stop-1);
vdpiof("VO");
vdpiof("FR");
vdpiof(str);
vdpiof("SE");
while (!VIOSTAT())
;
vdpiof("MF");
vdpiof(stp);
vdpiof("SE");
/*
if (VIOSTAT())
while (VIOSTAT())
;
*/
while (!VIOSTAT())
;
vdpiof("VNPL");
/*
if (VIOSTAT())
while (VIOSTAT())
;
*/
while (!VIOSTAT())
;
key = FALSE;
/*
while (VIOSTAT())
if (key = p_instat())
{
p_inchar();
break;
}
*/
while (1)
{
if (!VIOSTAT())
if (!VIOSTAT())
if (!VIOSTAT())
if (!VIOSTAT())
break;
if (key = p_instat())
{
p_inchar();
break;
}
}
vdpiof("PA");
return(key);
}


View File

@@ -0,0 +1,6 @@
<your_file_name>=crt0.med,
<your_file_name>,
oscrt.med[search,libsyms],
machdep.med[search,libsyms],
edata[data[max[800]]


View File

@@ -0,0 +1,570 @@
?General
General information on MP/M 8-16
MP/M 8-16 is a proprietary implementation of Digital Research's MP/M-86
operating system from Gifford Computer Systems. This implementation of
MP/M-86 enables systems with CompuPro hardware to run both 8- and 16-bit
programs simultaneously in a multi-user, multi-tasking environment.
?sw
The SW feature of MP/M 8-16
The SW program is the most innovative part of Gifford Computer Systems'
enhancements to MP/M-86. This program enables the system's 8- and 16-bit
file access capability.
When the user gives a command on the MP/M 8-16 command line, the shell
first searches the directories for CP/M-86 (16-bit) files with a .CMD
extension. If a .CMD file is not found, the shell automatically
invokes SW, which searches for a CP/M-80 (8-bit) program with the same
file name, but with a .COM extension.
?SUBMIT
Using SUBMIT with MP/M 8-16
Although the SW program is called automatically by the shell when you ask
for an 8-bit program, the SUBMIT facility does not know how to do this.
Thus, you must explicitly give the A:SW command on lines of a SUBMIT file
that call 8-bit programs. For example, if you want to run an 8-bit program
called F80 on a file called BILLING.FOR, and then erase the file called
BILLING.LST, your SUBMIT file would have the following two lines:
A:SW F80 BILLING.FOR
ERA BILLING.LST
?CLOCK
Setting the time with the CLOCK command
MP/M-86 has a TOD command which allows setting the time, but will not work
under MP/M 8-16. MP/M 8-16 uses the real-time clock on the System Support
board to set the time instead of the time derived from the TOD program.
Instead of using TOD command to set the time, use the CLOCK command. TOD
will still return the correct time.
Unless the NiCad battery back-up is disconnected from your System Support
board, you only have to set the time once. The System Support board may be
removed from the computer and reinstalled later as long as the battery is
always connected to the board. The NiCad battery will last for about two
years.
?MPMINIT
MPMINIT.CMD and MPMINIT.SUB
Before giving the user at the system console control of the system, it
first checks for files called MPMINIT.CMD and MPMINIT.SUB on user 0 of disk
A:. If it finds MPMINIT.CMD, it runs the program. It then looks for
MPMINIT.SUB; if it finds it, it runs SUBMIT with the file. For example, you
can use the MPMINIT files to check the status of the disks, and the amount
of disk space available.
?USERINIT
USERINIT.CMD and USERINIT.SUB
When a user gives a correct login name (and password, if necessary), the
system checks user 0 of drive A: for files called USERINIT.CMD and
USERINIT.SUB. If it finds USERINIT.CMD, it runs the program. It then
looks for USERINIT.SUB; if it finds it, it then runs SUBMIT with the file.
These programs are run for all users.
?Passwords
Passwords on the system
There are two types of passwords on MP/M 8-16. You can protect files and
you can prevent unauthorized users from logging onto the system. The file
protection is documented in the "MP/M-86 Operating System User's Guide" in
the section on files. The login protection is documented in the "MP/M 8-16
Reference Manual" in the section on the PASSWD file.
For more information on the PASSWD file, give the command HELP MPM PASSWD.
?PASSWD
The structure of the PASSWD file is:
NAME:PASSWORD:DRIVE:USER:PRINTER:ACCESS:PROGRAM:COMMENTS
|__| |______| |___| |__| |_____| |____| |_____| |_______
\ \ \ \ \ \ \ \
1 2 3 4 5 6 7 8
1. User login name
2. Optional password field
3. Optional default user drive (default = drive A)
4. Optional default user number (default = user 0)
5. Optional default user printer (default = printer 0)
6. Optional selective terminal access numbers. This is a comma separated
list of the console numbers users will be allowed to use. If no assignment
is made in this field, the user has access to any terminal.
7. Optional default application program, such as SuperCalc. Users with an
entry in this field are automatically entered into the program specified.
The system searches for the program exactly as if the user had typed at the
default prompt. Upon exiting the program, the user is automatically logged
out.
8. Optional comments field
?TTYS
The structure of the TTYS file
DEV #:BAUD RATE:HANDSHAKING:PROTOCOL:TTY NAME:COMMENTS
|___| |_______| |_________| |______| |______| |_______
\ \ \ \ \ \
1 2 3 4 5 6
1. Number of terminal, corresponding to connection on computer back panel.
Numbers begin with 0.
2. Terminal baud rate; the default is 9600. Baud rates are selected from
the following:
0 = 9600 1 = 110 2 = 300 3 = 600 4 = 1200
5 = 1800 6 = 2400 7 = 4800 8 = 9600 9 = 19200
A = automatic baud rate detection for modems
3. Optional RS-232 hardware handshaking. Hardware handshaking is generally
not required for terminals; if not specified, the default is 0. If
handshaking is necessary, enter the number corresponding to the type of
handshaking needed from the following:
0 = No handshaking
1 = Hardware handshaking (DTR) (RS-232 pin 20)
2 = Software handshaking (XON XOFF)
3 = Reserved for custom application
4. Optional communications protocol. This is a three character entry. The
default protocol is 8 data bits, 2 stop bits, and no parity, which are the
settings for most common terminals. If you need to change this, select the
configuration you need from the table below and enter the three characters
without any spaces. For example, if your terminal requires a protocol of 7
data bits, 2 stop bits, even parity, enter 72E in field 4.
Data bits Stop bits Parity
8 2 N (none)
7 1 O (odd)
E (even)
5. Optional terminal name of up to 8 characters with no spaces. The
terminal name is often entered as "console" for the system console, "tty1"
for terminal 1, "tty2" for terminal 2, etc. This field is used to identify
the location on the system of a user in the WHO facility, and will be used
in future MP/M 8-16 utilities. More than one terminal name can be listed,
separated by commas with no spaces.
6. Optional comments field.
?LPRS
The structure of the LPRS file.
DEV #:BAUD RATE:HANDSHAKING:PROTOCOL:LPR NAME:COMMENT
|___| |_______| |_________| |______| |______| |______
\ \ \ \ \ \
1 2 3 4 5 6
1. Number of printer, corresponding to connection on computer back panel.
Printer 0 is the default printer for users.
2. Printer baud rate. The default and options are listed in the help for
TTYS.
3. Optional RS-232 hardware handshaking. The default and options listed in
the help for TTYS.
4. Optional communications protocol. The default and options are listed in
the help for TTYS.
5. Optional printer name. This field is described in the previous
section. The value here is used in the MPM-86 PRINTER command, which
changes the default printer for a user.
6. Optional comment field.
?WTMP
The structure of the WTMP file
A sample entry is:
tty2 david 2 16642132392034 7221982 4
The first two fields are the terminal name and user name. The contents
of the other fields are:
2 1664 21 32 39 203 4 7 22 1982 4
\ \ \ \ \ \ \ \ \
1 2 3 4 5 6 7 8 9
1. Console number.
2. Days since January 1st, 1978.
3. Hour of the day (24 hour clock).
4. Minute of the hour.
5. Second of the minute.
6. Julian day of the year (1-365)
7. Day of the week (Sunday = 0, Monday = 1, Tuesday = 3, etc.)
8. Date in month-day-year.
9. Program file link number; the first entry defines the length of the
file.
?MAIL
The MAIL Utility
The MAIL utility lets you send mail to, and receive mail from, other users.
For more information on MAIL, give the command HELP MAIL or HELP MAIL ALL.
?Reminder
Reminder files
Each time you log on the system, MP/M 8-16 checks user area 15 on disk A:
for a file called name.REM, where "name" is the name being logged in. If
it finds the file, it types it on your screen.
?MOTD
The Message of the Day
Each time a user logs in, the system types out the message of the day. The
message is kept in the file called MOTD on user 0 on drive. This file can
contain anything you wish, including escape sequences to control the user's
screen. Create and update the MOTD file with an editor such as ED or
WordStar.
?FORMAT
Formatting diskettes and disks
Floppy diskettes used with the MP/M 8-16 system must be formatted before
being used to transfer or store information. The FORMAT program included
on your system diskette formats both single and double density diskettes,
and the recommended format is double density diskettes formatted for 1024
byte sectors.
It is extremely unlikely that you will need to format your hard disk once
it is in use. Formatting a disk erases all of the information on it. It
is also unlikely that you will want to run the destructive disk test, since
this also destroys the information on your disk.
?help
The HELP facility
The HELP command gives you more information about the system, or about
programs supplied with the system. You can also make your own help files,
or modify the ones we supply.
To get general information on a subject, simply type HELP and the program
name. The HELP program will access that help file, and the subject of
GENERAL. To get a list of the subjects in a help file, give the command
"HELP filename ALL".
?TOD
The TOD Command in MP/M 8-16
The TOD command prints out the current time of day. Under MP/M 8-16, it
does not set the system clock. This is done with the CLOCK program. For
more information, type HELP MPM CLOCK.
?PRINTER
The PRINTER Command in MP/M 8-16
The PRINTER command takes the names of printers, as well as their number,
as arguments in MP/M 8-16. For more information on printer names, type
HELP MPM LPRS.
?COPY
The COPY command
To make an exact copy of the system diskette, use one of the formatted
diskettes supplied by Gifford Computer Systems, or format a diskette with
the FORMAT program, choosing 1024 byte sectors. You must boot the system
with CP/M 2.2, then give the COPY command.
?SYSGEN
The SYSGEN command
Use the SYSGEN command to copy the system tracks of a boot diskette to
another diskette.
?Shutdown
Shutting down your system
It is important that you follow these procedures each time you turn off
your system or reset it (re-initialize by pressing the reset button),
especially if you are running your system with a hard disk. These steps
ensure that data is written from the hard disk cache. Failure to follow
them may result in loss of valuable data.
1. All users (except system console) log off of the system by giving the
LOGOUT command.
2. After all the other users have logged out, the user at the system
console gives the DOWN command. This turns off all terminals except the
system console.
3. Release the system diskette from the floppy disk drive. Hold in the red
reset button on the front of the Enclosure 2, turn off power to the
computer by pressing the bottom part of the power switch down, and release
the reset button.
?DOWN
The DOWN command
The DOWN command turns off all terminals except the system console. For
more information, type HELP MPM SHUTDOWN.
?MAKE
The MAKE command
The MAKE command creates an empty file on your disk. This is useful if you
need to make a file that does not contain any information, but the
existence of the file is important to other programs. To make a file, give
the MAKE command and the file name at the system prompt. For example, to
create the file TEST.FIL, type MAKE TEST.FIL at the system prompt.
?WHO
The WHO command
The WHO command lists the users on the system, their consoles, and the
time they logged on.
?TIMELOG
The TIMELOG utilities
Gifford Computer Systems provides dBASE II utilities to get login histories
of users and terminals on your MP/M 8-16 system. These utilities read from
the WTMP file, and write out a dBASE II data base.
?SuperCalc
SuperCalc
Your system includes a copy of SuperCalc, which is a financial spread-sheet
program which is used to forecast costs and benefits for businesses. To
run SuperCalc, give the SC command.
If you need help when running SuperCalc, type the question mark (?) key.
?dBASE
dBASE II
Your system includes a copy of dBASE II, which is a complete data base
management system. To run dBASE II, give the DBASE command.
?SYNC
The SYNC command
The SYNC command copies the cache disk buffers to the hard disk. MP/M 8-16
systems with hard disks use cache memory to improve the speed of accessing
the disk. This means, however, that there are times when RAM memory
contains information that has not been written on the hard disk.
The system does an automatic SYNC command every 30 seconds. If you want to
flush the cache memory before then, give the SYNC command.
?languages
Programming languages
Gifford Computer Systems sells the following computer languages:
Assemblers -- SORCIM ACT-80, ACT-86, Trans86. Digital Research SID (8- and
16-bit), MAC, RMAC
BASIC -- Microsoft's BASIC interpreter and compiler (8-bit); Digital
Research's CBASIC (8- and 16-bit) interpreter, and CB80 compiler (8-bit)
C -- Computer Innovations C86 (16-bit); Whitesmith's C (8-bit)
Pascal -- SORCIM's Pascal/M (8- and 16-bit); Digital Research's Pascal MT+
(8- and 16-bit, Speed Programming Package available)
FORTRAN -- Microsoft FORTRAN (8-bit)
PL/1 -- Digital Research PL/1 (8-bit)
?ABORT
The ABORT command
ABORT stops execution of a process. The syntax is:
ABORT process n
where process is the name of the program to be aborted, and n is the
terminal number that the program is running on.
?ASM86
The MP/M-86 Assembler
The ASM86 assembles assembly language statements, and produces an object
file in hexadecimal format. It is documented in the MP/M-86 Operating
System Programmer's Guide.
?ATTACH
The ATTACH command
The ATTACH command attaches a detached program. The syntax is:
ATTACH process
where process is the name of the detached program.
?CONSOLE
The CONSOLE command types the number of the user's console.
?DDT86
The dynamic debugger
The DDT86 program aids the dynamic debugging of MP/M-86 programs. It is
documented in the MP/M-86 Operating System Programmer's Guide.
?DIR
The DIR command
The DIR command displays a list of files that are on a disk. The name
specified to the DIR command can have wildcards. For more information on
wildcards in file names, type HELP MPM WILDCARDS. You can also use the
[SYS] option of DIR to list files with the system attribute.
To list files on a user number other than the one you are connected to, use
the [G] option with the number of the area. For example, to list all of
the files on user 6, give the command "DIR *.*[G6]".
?DSKRESET
The DSKRESET command
Give the DSKRESET command before removing a floppy diskette from a drive.
This prevents you from destroying another person's data if they are also
accessing that diskette. If you do not give an argument to DSKRESET, all
drives are reset. You can specify the individual drives that you want to
reset.
?ED
The ED editor
The ED command allows you to edit files. It is documented in the MP/M-86
Operating System User's Guide. The ED editor is not very sophisticated, and
Gifford Computer Systems recommends the use of other editors, such as
WordStar, instead of ED for most applications.
?ERA
The ERA command
Erase files from your disk with the ERA command. The ERA command accepts
wildcard specifications (for more information on wildcards, give the HELP
MPM WILDCARDS command).
?ERAQ
The ERAQ command
Selectively erase files from your disk with the ERAQ command. This command
is similar to the ERA command, except that it prompts you before each file,
so that you can erase only some of a given group.
?GENCMD
The GENCMD Command
Use GENCMD to create .CMD command files from hex file (such as ones created
with the ASM86 command). The GENCMD command is documented in the MP/M-86
Operating System Programmer's Guide.
?MPMSTAT
The MPMSTAT command
The MPMSTAT command displays information about the internal status of your
MP/M 8-16 system. The information displayed by MPMSTAT take up more than a
full screen, and generally is not useful to the casual user.
?wildcards
Using wildcard characters in file specifications
An asterisk (*) in the filename or filetype is replaced by any number of
characters in the filename that is searched. A question mark (?) in the
filename or filetype is replaced by one character in the filename that is
searched.
For example, the command "DIR BA*.TXT" will list BANNER.TXT and BAD.TXT,
but not BURNER.TXT. The command "DIR BA?.TXT" will list BAD.TXT, but not
BANNER.TXT.
?PIP
The PIP command
The PIP command moves files from a disk to another file, or to an external
device (such as a printer). The format of the command is:
PIP destination=source
You can use wildcard characters in the filename. For an explanation of
wildcard specifications, type HELP MPM WILDCARDS.
The destination is the name of a file to be created, the name of a disk
(the same file name as the source will be used), or LST: (to print out the
file).
There are many options that you can specify to modify the PIP command.
When copying a file from one disk to another, you should always use the V
and O options. If you are copying all of the files from one disk to
another, and want to update files that are on the destination disk, use the
options V, R, O, and W. To copy all of the files from A: to B:, give the
command:
PIP B:=A:*.*[VROW]
The options that are most commonly used are:
A - archive
Gn - "Goto" user n. If this is specified on the destination file, this
writes the file to user n. If it is specified on the source file,
it reads the file from user n.
K - Kill console display during a wildcard file transfer.
O - Object file transfers. This option should always be used.
R - Read files that have the system attribute set.
Tn - Expand TAB characters to n spaces. This is useful when listing programs
on printers.
V - Verify that the data is copied correctly after each record is written.
This option should always be used when transferring files from one disk
to another.
W - Write over files that have the read-only attribute.
?REN
The REN command
Rename files on a disk with the REN command. The format is:
REN newname=oldname
The command will accept wildcards if they appear in the same place in both
the new and old names (e.g., REN MYPROG.*=YOURPROG.*). For more
information on wildcards, type HELP MPM WILDCARDS.
?SDIR
The SDIR command
The SDIR command displays a list of files that are on a disk. The name
specified to the SDIR command can have wildcards. For more information on
wildcards in file names, type HELP MPM WILDCARDS.
The SDIR command is different than the DIR command since it takes many more
options, displays more information about each file, and sorts the file by
filename and file type. The options most commonly used are:
SYS - list all files with the system attribute
DIR - list all files with the directory attribute
RO - list all files with the read-only attribute
RW - list all files with the read-write attribute
USER=n - list the files from user number n
USER=ALL - list the files from all user numbers
USER=(n1,n2,...) - list the files from user number n1, n2,...
DRIVE=d - list the files from drive d
DRIVE=ALL - list the files from all connected drives
DRIVE=(d1,d2,...) - list the files from drives d1, d2,...
EXCLUDE - list all files except those specified in the command
The default is to list all RW, RO, SYS, and DIR files.
You can get help for the SDIR command by giving the command SDIR HELP.
?SET
The SET command
The SET command is used to set the attributes on files and disks. The
name specified to the SET command can have wildcards. For more
information on wildcards in file names, type HELP MPM WILDCARDS.
The options are:
Disks:
SET d: [RO or RW] - set the disk read-only or read-write
SET d: [NAME=name] - give a name to the disk
SET d: [PASSWORD = password, PROTECT=ON, DEFAULT=password] - password
protection
SET d: [MAKE=ON, CREATE=ON, ACCESS=ON, UPDATE=ON] - XFCB creation
Files:
SET filespec [RO or RW, DIR or SYS] - set the file(s) read-only or
read-write, and directory or system
SET filespec [PASSWORD = password, TIME = ON] - set the password and
timestamping
SET filespec [PROTECT = READ or WRITE or DELETE or NONE] - set the protection
You can get help for the SET command by giving the command SET HELP.
?SHOW
The SHOW command
The SHOW command displays information about disks on your MP/M 8-16 system.
If no argument is given, the amount of space left on the drive is displayed.
The options are:
USERS - displays each user and the files on the disk that are allocated to
them.
DRIVES - lists extended information for each drive, such as the number
of directory entries.
LABEL - displays the label, password protection, XFCB status, timestamp
status, and update time of the disk.
You can get help for the SHOW command by giving the command SHOW HELP.
?SPOOL
The SPOOL command
The SPOOL command sends files to the printer. The syntax is:
SPOOL file1, file2, ...
The spooler can be stopped with the STOPSPLR command.
?STAT
The STAT command gives information about disks and files, and sets the
read-only protection on files. In MP/M 8-16, it is superseded by the
SET and SHOW commands.
?STOPSPLR
The STOPSPLR command stops the print spooler. For information on using
the print spooler, type HELP MPM SPOOL.
?TYPE
The TYPE command
The TYPE command types files on your terminal.
?USER
The USER command
The USER command changes your user number.
tions are:
USERS - displays each user and the files on the disk that are allocated to

View File

@@ -0,0 +1,54 @@
length 000683
abort 14052
asm86 14273
attach 14480
clock 1406
console 14649
copy 10353
dbase 12819
ddt86 14718
dir 14885
down 11637
dskreset 15401
ed 15737
era 16032
eraq 16233
format 8830
gencmd 16467
general 10
help 9465
languages 13429
lprs 6519
mail 8077
make 11781
motd 8484
mpminit 2106
mpmstat 16690
passwd 3394
passwords 2922
pip 17395
printer 10146
reminder 8261
ren 19021
sdir 19327
set 20473
show 21362
shutdown 10771
spool 21953
stat 22128
stopsplr 22306
submit 876
supercalc 12534
sw 340
sync 12972
sysgen 10647
timelog 12292
tod 9916
ttys 4440
type 22427
user 22502
userinit 2548
who 12169
wildcards 16940
wtmp 7389
<1A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

Binary file not shown.

View File

@@ -0,0 +1,6 @@
<your_file_name>=crt0.sml,
<your_file_name>,
oscrt.sml[search,libsyms],
machdep.sml[search,libsyms],
edata[data[max[800]]


View File

@@ -0,0 +1,38 @@
sort:
proc options(main);
dcl
(input_file, output_file) file;
open file (input_file) stream title ('b:x.lib');
open file (output_file) stream output title ('b:y.lib');
dcl
b char (64) var,
i fixed,
switching bit,
buff (250) char (64) var,
bp fixed;
on endfile(input_file)
go to sort_buff;
bp = 0;
do while ('1'b);
get file(input_file) edit(buff(bp+1))(a);
bp = bp + 1;
end;
sort_buff:
switching = '1'b;
do while (switching);
switching = '0'b;
do i = 1 to bp - 1;
if (buff(i) < buff(i + 1)) then
do;
switching = '1'b;
b = buff(i);
buff(i) = buff(i+1);
buff(i+1) = b;
end;
end;
end;
do i = 1 to bp;
put file(output_file) edit(buff(i),'')(a,skip,a);
end;
end sort;


View File

@@ -0,0 +1,6 @@
ZWTMP
A:SW DBASE TIMELOGX
A:SW DBASE TIMELOGY
ERA WTMPX.DBF
A:SW DBASE TIMELOGZ


View File

@@ -0,0 +1,567 @@
;*****************************************************
;*
;* Terminal Message Processor
;*
;* The TMP determines the user interface to MPM.
;* Much of the interface is available though
;* system calls. This TMP takes advantage of
;* as much as possible for simplicity. The TMP
;* could, for instance, be easily modified to
;* force logins and have non-standard defaults.
;*
;* With a little more work, The TMP could do all
;* command parsing and File Loading instead of
;* using the CLI COMMAND FUNCTION. This is also
;* the place to AUTOLOAD programs for specific
;* users. Suggestions are given in the MP/M-86
;* SYSTEM'S GUIDE.
;*
;*****************************************************
true equ 0ffh
false equ 0
unknown equ 0
mpmint equ 224 ; int vec for mpm
; mpm86 equ false ; CCP/M if false
mpm86 equ true ; MP/M if true
cr equ 13
lf equ 10
mpm_conout equ 2
mpm_conwrite equ 9
mpm_conread equ 10
mpm_diskselect equ 14
mpm_openfile equ 15
mpm_closefile equ 16
mpm_readfile equ 20
mpm_getdefdisk equ 25
mpm_setdma equ 26
mpm_usercode equ 32
mpm_freedrive equ 39
mpm_conattach equ 146
mpm_condetach equ 147
mpm_setdefcon equ 148
mpm_clicmd equ 150
mpm_parse equ 152
mpm_setdeflst equ 160
mpm_getdeflst equ 164
ps_run equ 00 ; on ready list root
pf_sys equ 001h ; system process
pf_keep equ 002h ; do not terminate
s_mpmseg equ word ptr 40H ;begin MPM segment
s_sysdisk equ byte ptr 04bh ;system disk
s_ncns equ byte ptr 47H ;sys. consoles
s_version equ word ptr 78h ;ofst ver. str in SUP
rsp_top equ 0
rsp_md equ 008h
rsp_pd equ 010h
rsp_uda equ 040h
rsp_bottom equ 140h
e_no_memory equ 3 ; cant find memory
e_no_pd equ 12 ; no free pd's
e_q_full equ 15 ; full queue
e_illdisk equ 23 ; illegal disk #
e_badfname equ 24 ; illegal filename
e_badftype equ 25 ; illegal filetype
e_bad_load equ 28 ; bad ret. from BDOS load
e_bad_read equ 29 ; bad ret. from BDOS read
e_bad_open equ 30 ; bad ret. from BDOS open
e_nullcmd equ 31 ; null command sent
e_ill_lst equ 37 ; illegal list device
e_ill_passwd equ 38 ; illegal password
e_abort equ 40 ; aborted in CLI
;*****************************************************
;*
;* TMP Shared Code and Constant Area
;*
;*****************************************************
cseg
org 0
;===
mpm: ; INTERFACE ROUTINE FOR SYSTEM ENTRY POINTS
;===
int mpmint ! ret
;===
tmp: ; PROGRAM MAIN - INITIALIZATION
;===
; set default console # = TMP#
mov dl,defconsole ! call setconsole
; set default disk = system drive if MP/M, A: if CCP/M
if mpm86
push ds ! mov ds,sysdatseg
mov dl,.s_sysdisk ! pop ds
endif
if not mpm86
xor dl,dl
endif
call setdisk
if mpm86
mov dl,defconsole ;set default user # = console
endif
if not mpm86
xor dl,dl ;all TMPs come up user 0
endif ;in CCP/M
call setuser
call attach ;print version
push ds ! mov ds,sysdatseg
mov dx,.s_version
mov ds,.s_mpmseg
call print_ds_string ! pop ds
call detach
mov al,defconsole ;look for startup file
add tmpnum,al ;works for 1st 10 TMPS
mov dx,offset fcb
mov cl,mpm_openfile
call mpm
cmp al,0ffh
je nostartup
mov dx,offset clicb_cmd
mov cl,mpm_setdma
call mpm
mov dx,offset fcb
mov cl,mpm_readfile
call mpm
push ax
mov dx,offset fcb
mov cl,mpm_closefile
call mpm
pop ax
test al,al
jnz nostartup
mov ax,ds
mov es,ax
mov al,cr
mov cx, 128
mov di,offset clicb_cmd
repne scasb
inc di ;include cr lf in line
mov byte ptr [di],'$'
sub di,offset clicb_cmd
mov ax,di
sub ax, 2
mov read_blen, al
mov dx,offset supmsg
call printstring
mov dx,offset clicb_cmd
call print_ds_string
jmps startup
nostartup:
; THIS IS WHERE A LOGIN ROUTINE MIGHT
; BE IMPLEMENTED. THE DATA FILE THAT
; CONTAINS THE USER NAME AND PASSWORD
; MIGHT ALSO CONTAIN AN INITIAL DEFAULT
; DISK AND USER NUMBER FOR THAT USER.
;===========
nextcommand: ; LOOP FOREVER
;===========
; free drive
mov dx,0ffffh ! call freedrive
; attach console
call attach
; print CR,LF if we just sent command
cmp cmdsent,false ! je noclearline
mov cmdsent,false
call crlf
noclearline:
; set up and print user prompt
; get current default user # and disk
; this call should be made on every
; loop in case the last command
; has changed the default.
mov dl,cr ! call prchar
call getuser
mov dl,bl ! call prnum
call getdisk
mov dl,'A' ! add dl,bl
call prchar
mov dx,offset prompt
call print_string
; Read Command from Console
mov dx,offset read_buf ! call conread
startup:
; echo newline
mov dl,lf ! call prchar
; make sure not a null command
lea bx,clicb_cmd
cmp read_blen,0 ! je gonextcmd
cmp byte ptr [bx],';' ! je gonextcmd
; see if disk change
; if 'X:' change def disk to X
cmp read_blen,2 ! jne clicall
cmp byte ptr 1[bx],':'
jne clicall
; change default disk
mov dl,[bx] ;get disk name
and dl,5fh ;Upper Case
sub dl,'A' ;disk number
; check bounds
cmp dl,0 ! jb gonextcmd
cmp dl,15 ! ja gonextcmd
; select default disk
call setdisk
gonextcmd: jmp nextcommand
;=======
clicall: ; SEND CLI COMMAND
;=======
; put null at end of input
mov bx,offset clicb_cmd
mov al,read_blen ! mov ah,0
add bx,ax ! mov byte ptr [bx],0
; copy command string for error
; reporting later and to check
; for built in commands...
mov cx,64
mov si,offset clicb_cmd
mov di,offset savebuf
push ds ! pop es
rep movsw
; parse front to see if
; built in command
mov si,offset fcb
mov di,offset savebuf
call parsefilename
jcxz goodparse
sub bx,bx ! mov bl,read_blen
add bx,offset savebuf
mov byte ptr [bx],'$'
jmp clierror
goodparse: mov parseret,bx
cmp bx,0 ! jne haveatail
mov bl,read_blen
add bx,offset savebuf
haveatail: mov byte ptr [bx],'$' ! inc bx
cmp fcb,0 ! je try_builtin
jmp not_builtin
; is it USER command?
try_builtin: mov si,offset fcb ! inc si
mov di,offset usercmd
push cs ! pop es
mov cx,4 ! repz cmpsw
jnz notuser
mov si,offset fcb
mov di,parseret
cmp di,0 ! je pruser
inc di
call parsefilename
cmp cx,0 ! jne pruser
mov si,offset fcb
inc si
mov dx,[si]
call a_to_b
cmp bl,15 ! ja usererr
mov dl,bl
call setuser
jmp pruser
usererr: mov dx,offset usererrmsg
call printstring
pruser: mov dx,offset usermsg
call printstring
call getuser
mov dl,bl ! call prnum
call crlf
jmp nextcommand
notuser:
mov si,offset fcb ! inc si
mov di,offset printercmd
push cs ! pop es
mov cx,4 ! repz cmpsw
jnz notprinter
mov si,offset fcb
mov di,parseret
cmp di,0 ! je prprinter
inc di
call parsefilename
cmp cx,0 ! jne prprinter
mov si,offset fcb
inc si
mov dx,[si]
call a_to_b
cmp bl,0ffh
je printererr
mov dl,bl
call setlist
jcxz prprinter
printererr: mov dx,offset printemsg
call printstring
prprinter: mov dx,offset printermsg
call printstring
call getlist
mov dl,bl ! call prnum
call crlf
jmp nextcommand
notprinter:
not_builtin:
; initialize Cli Control Block
mov clicb_net,0
; make cli call
mov cmdsent,true
lea dx,clicb ! mov cl,mpm_clicmd
call mpm
cmp bx,0 ! jne clierror
jmp nextcommand
;========
clierror:
;========
; Cli call unsuccesful, analyze and display err msg
; input: CX = ERROR CODE
mov si,(offset clierrtab)-4
nexterr:
add si,4
cmp word ptr [si],0ffffh ! je unknownerr
cmp cx,[si] ! jne nexterr
unknownerr:
mov dx,2[si]
; jmps showerr
showerr: ; Print Error String
;------- ; input: DX = address of Error
; string in CSEG
; if DX=0 then NULL COMMAND
cmp dx,0 ! jne perr
mov cmdsent,false ! jmp nextcommand
perr: push dx
mov dx,offset savebuf ! call print_ds_string
mov dl,':' ! call prchar
mov dl,' ' ! call prchar
pop dx
call printstring ! call crlf
jmp nextcommand
parsefilename: ; SI = fcb DI = string
mov cx,mpm_parse
mov bx,offset pcb
mov [bx],di ! mov 2[bx],si
mov dx,bx ! jmp mpm
a_to_b: ;dl = 1st char, dh = 2nd char
cmp dh,' ' ! jne atob2char
mov dh,dl ! mov dl,'0'
atob2char: cmp dh,'0' ! jb atoberr
cmp dh,'9' ! ja atoberr
cmp dl,'0' ! jb atoberr
cmp dl,'9' ! ja atoberr
sub dh,'0' ! sub dl,'0'
mov ax,0 ! mov al,dl
push dx ! mov cl,10
mul cl ! pop dx
mov dl,dh ! mov dh,0
add ax,dx
mov bx,ax ! ret
atoberr: mov bl,0ffh ! ret
prnum: ; dl = num (0-15)
cmp dl,10 ! jb prnum_one
push dx
mov dl,'1' ! call prchar
pop dx ! sub dl,10
prnum_one: add dl,'0'
; jmp prchar
prchar: mov cl,mpm_conout ! jmp mpm1
getuser: mov dl,0ffh
setuser: mov cl,mpm_usercode ! jmp mpm1
crlf: mov dx,offset crlfstr
;jmp printstring
printstring: push ds ! mov ax,cs ! mov ds,ax
call print_ds_string ! pop ds ! ret
print_ds_string:mov cl,mpm_conwrite ! jmps mpm1
setconsole: mov cl,mpm_setdefcon ! jmps mpm1
setdisk: mov cl,mpm_diskselect ! jmps mpm1
getdisk: mov cl,mpm_getdefdisk ! jmps mpm1
setlist: mov cl,mpm_setdeflst ! jmps mpm1
getlist: mov cl,mpm_getdeflst ! jmps mpm1
attach: mov cl,mpm_conattach ! jmps mpm1
detach: mov cl,mpm_condetach ! jmps mpm1
conread: mov cl,mpm_conread ! jmps mpm1
freedrive: mov cl,mpm_freedrive ! jmps mpm1
mpm1: jmp mpm
;*****************************************************
;*
;* CONSTANTS (IN SHARED CODE SEGMENT)
;*
;*****************************************************
clierrtab dw e_nullcmd, 0 ;null command
dw e_no_memory, memerr ;No memory
dw e_no_pd, pderr ;No unused PD
dw e_badfname, fnameerr;Ill. command
dw e_illdisk, fnameerr;Ill. disk
dw e_ill_passwd, fnameerr;Ill. password
dw e_badftype, fnameerr;Ill. type
dw e_bad_load, loaderr ;
dw e_bad_read, loaderr ;
dw e_bad_open, openerr ;
dw e_q_full, qfullerr;
dw e_abort, aborterr;
; a few extra entries for future errors
dw 0ffffh, catcherr;
dw 0ffffh, catcherr;
dw 0ffffh, catcherr;
dw 0ffffh, catcherr;
prompt db '>$'
crlfstr db 13,10,'$'
memerr db '?Not Enough Memory$'
pderr db '?PD Table Full$'
fnameerr db '?Bad File Spec$'
catcherr rb 0 ;Unknown Errs give
loaderr db '?Load Error$' ; Load Error Msg
openerr db '?Can''t Find Command$'
qfullerr db '?RSP Command Que Full$'
aborterr db '?CLI Abort$'
usererrmsg db 13,10,'Invalid User Number,'
db ' IGNORED',13,10,'$'
usermsg db 13,10,'User Number = $'
printemsg db 13,10,'Invalid Printer Number,'
db ' IGNORED',13,10,'$'
printermsg db 13,10,'Printer Number = $'
usercmd db 'USER '
printercmd db 'PRINTER '
supmsg db 'Start up command: $'
;*****************************************************
;*
;* TMP Data Area - this area is copied once for
;* each system console. The 'defconsole'
;* field is unique for each copy
;* - Each Data Area is run by a common
;* shared code segment.
;*
;*****************************************************
DSEG
org rsp_top
sysdatseg dw 0
sdatvar dw s_ncns
defconsole db 0,0
dw 0,0,0,0,0
org rsp_pd
pd dw 0,0 ; link fields
db ps_run ; status
db 198 ; priority
dw pf_sys+pf_keep ; flags
db 'Tmp ' ; Name
dw offset uda/10h ; uda seg
db 0,0 ; disk,user
db 0,0 ; ldisk,luser
dw 0ffffh ; mem
dw 0,0 ; dvract,wait
db 0,0 ; org,net
dw 0 ; parent
db 0,0 ; cns,abort
db 0,0 ; cin,cout
db 0,0 ; lst,sf3
db 0,0 ; sf4,sf5
dw 0,0 ; reserved
dw 0,0 ; pret,scratch
org rsp_uda
uda dw 0,offset dma,0,0 ;0-7
dw 0,0,0,0 ;8-fh
dw 0,0,0,0 ;10-17
dw 0,0,0,0 ;18-1f
dw 0,0,0,0 ;20-27
dw 0,0,0,0 ;28-2f
dw 0,0,offset stack_top,0 ;30-37
dw 0,0,0,0 ;38-3f
dw 0,0,0,0 ;40-47
dw 0,0,0,0 ;48-4f
dw 0,0,0,0 ;50-57
dw 0,0,0,0 ;58-5f
dw 0,0,0,0 ;60-67
org rsp_bottom
dma rb 128
stack dw 0cccch,0cccch,0cccch
dw 0cccch,0cccch,0cccch
dw 0cccch,0cccch,0cccch
dw 0cccch,0cccch,0cccch
stack_top dw offset tmp ; code offset
dw unknown ; code seg
dw unknown ; init. flags
maxcmdlen equ 128
; the Read Console Buffer and the
; Cli Control Block share the same memory
read_buf rb 0
read_maxcmd db 128
clicb rb 0
clicb_net rb 0
read_blen rb 1
clicb_cmd rb maxcmdlen + 1
cmdsent db false
parseret dw 0
pcb dw offset savebuf
dw offset fcb
fcb db 0, '$'
tmpnum db '0'
db '$ SUP'
rb 20
db 0 ;current record
savebuf rb 128
db 0 ;make sure hex is formed
end


View File

@@ -0,0 +1,3 @@
0:8:0:81n:console:System support
1:8:0:81n:tty1:Interfacer 3 port 0


View File

@@ -0,0 +1,2 @@
0:8:0:81n:console:System support


View File

@@ -0,0 +1,9 @@
wind=a:crt0.sml,
wind,
windout,
logo2,
bios,
a:oscrt.sml[search,libsyms],
a:machdep.sml[search,libsyms],
a:edata


View File

@@ -0,0 +1,11 @@
wind=a:crt0.sml,
wind,
winded,
windsc,
windout,
logo2,
bios,
a:oscrt.sml[search,libsyms],
a:machdep.sml[search,libsyms],
a:edata


View File

@@ -0,0 +1,62 @@
VIDEO MODE SUMMARY (TYPE ^J FOR NEXT FRAME)
^O INSERTION ON/OFF RUB DELETE CHR LEFT
^S CURSOR LEFT CHAR ^G DELETE CHR RIGHT
^D CURSOR RIGHT CHAR ^\ DELETE WORD LEFT
^A CURSOR LEFT WORD ^T DELETE WORD RIGHT
^F CURSOR RIGHT WORD ^U DELETE LINE LEFT
^Q CURSOR RIGHT TAB ^K DELETE LINE RIGHT
^E CURSOR UP LINE ^Y DELETE WHOLE LINE
^X CURSOR DOWN LINE ^I PUT TAB IN FILE
^^ CURSOR TOP/BOT (^HOME) ^N PUT CRLF IN FILE
^B CURSOR RIGHT/LEFT ^@ DO NEXT CHR 4X
^W FILE DOWN 1 LINE ^P NEXT CHR IN FILE
^Z FILE UP 1 LINE ^V VIO CONTROL
^R FILE DOWN SCREEN ESC EXIT VIDEO MODE
^C FILE UP SCREEN ^J DISPLAY THIS
 COMMAND MODE SUMMARY (TYPE ^J FOR NEXT FRAME)
+- MEANS + OR - ALLOWED HERE, + ASSUMED IF OMITTED
@ MEANS CARRIAGE RETURN OR LINE FEED NECESSARY HERE
$ MEANS ESC OR ^Z OR CARRIAGE RETURN NECESSARY HERE
n MEANS A NUMBER, 1 ASSUMED IF OMITTED, # = 65535
+-nC MOVE n CHARACTERS +-nD DELETE n CHARACTERS
+-nL MOVE n LINES +-nK KILL(DELETE) n LINES
+-nT TYPE n LINES nZ SLEEP n SECONDS
+-nP MOVE, TYPE n PAGES +-n@ MOVE n LINES, TYPE 1
nItext$ INSERT text n TIMES
I@ ENTER INSERT MODE (ESC OR ^Z EXITS MODE)
A@, nAtext$ (APPEND) DO 1L THEN JUST LIKE INSERT
n<....> LOOP: REPEAT .... n TIMES (DEFAULT = 65535)
 COMMAND MODE SUMMARY (TYPE ^J FOR NEXT FRAME)
+-nFkey$ (FIND) SHORT SEARCH FOR key n TIMES
+-nNkey$ (NEXT) LONG SEARCH FOR key n TIMES
+-nSkey$text$ SUBSTITUTE AFTER SHORT SEARCH n TIMES
+-nRkey$text$ (REPLACE) SUBSTITUTE AFTER LONG SEARCH
/F,/N,/S,/R SAME, EXCEPT EXIT <..> OR QX IF NOT FOUND
Y[d:]name.typ$ (YANK) READS FILE IN AT CURSOR
nW[d:]name.typ$ WRITE n LINES INTO THE FILE NAMED
^N CRLF INSIDE TEXT OR KEY ^Y ESC INSIDE TEXT OR KEY
^A MATCHES ANY IN KEY ^A MATCHES SEPERATOR IN KEY
^OX MATCHES NOT X IN KEY
 COMMAMD MODE SUMMARY (TYPE ^J TO RETURN TO EDITING)
nQP PUT n LINES INTO Q BUFFER, DELETE FROM FILE
n/QP APPEND n LINES TO Q BUFFER, DELETE FROM FILE
nQG (GET) COPY Q BUFFER INTO FILE n TIMES
QT TYPE Q BUFFER
QK (KILL) CLEAR Q BUFFER
QX EXECUTE COMMANDS IN Q BUFFER
QLtext$ (LOAD) PUT text INTO Q BUFFER
n/QLtext$ APPEND text TO Q BUFFER n TIMES
V ENTER VIDEO MODE N! PUT CHR CODE N INTO FILE
; ALL FOLLOWING IS COMMENT E END EDIT
H END EDIT AND START OVER Q (QUIT) ABANDON EDIT
O RETURN TO ORIGINAL FILE ^J DISPLAY HELP FILE


Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
pip ttys=ttysxfr.off
;
; remember to SYNC
; --- BEFORE ___
; hitting "RESET"
;


View File

@@ -0,0 +1,12 @@
pip ttys=ttysxfr.on
;
; remember to SYNC
; --- BEFORE ___
; hitting "RESET"
;
; after rebooting
; remember to PSOFTCOM
; ----- BEFORE -----
; running SOFTCOM
;