-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcpm.h
214 lines (186 loc) · 7.19 KB
/
cpm.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#ifndef _HTC_CPM_H
#define _HTC_CPM_H
/* Header file for CP/M routines for Z-80 C */
/* get basic definitions */
#ifndef _STDDEF
typedef int ptrdiff_t; /* result type of pointer difference */
typedef unsigned size_t; /* type yielded by sizeof */
#define _STDDEF
#ifndef NULL
#define NULL ((void *)0)
#endif NULL
extern int errno; /* system error number */
#endif _STDDEF
/* hitech.h has definitions for uchar, ushort etc */
#include <hitech.h>
#if z80
#define MAXFILE 8 /* max number of files open */
#else z80
#define MAXFILE 15 /* max number of files open */
#endif z80
#define SECSIZE 128 /* no. of bytes per sector */
extern struct fcb
{
uchar dr; /* 0: drive code */
char name[8]; /* 1: file name */
char ft[3]; /* 9: file type */
uchar ex; /* 12: file extent */
char fil[2]; /* 13: not used */
char rc; /* 15: number of records in present extent */
char dm[16]; /* 16: CP/M disk map */
char nr; /* 32: next record to read or write */
uchar ranrec[3]; /* 35: random record number (24 bit no.) */
long rwp; /* 38: read/write pointer in bytes */
uchar use; /* 42: use flag */
uchar uid; /* 43: user id belonging to this file */
long fsize; /* 44: file length in bytes */
} _fcb[MAXFILE];
extern short bdos(int, ...);
#define bdoshl bdos
#define bdose bdos
extern struct fcb* getfcb(void);
extern char * fcbname(short i);
extern short getuid(void);
extern short setuid(short);
extern uchar setfcb(struct fcb *, char *);
extern char * (*_passwd)(struct fcb *);
extern short bios(short fn, ...);
#define bios3 bios
/* flag values in fcb use */
#define U_READ 1 /* file open for reading */
#define U_WRITE 2 /* file open for writing */
#define U_RDWR 3 /* open for read and write */
#define U_CON 4 /* device is console */
#define U_RDR 5 /* device is reader */
#define U_PUN 6 /* device is punch */
#define U_LST 7 /* list device */
#define U_RSX 8 /* PIPEMGR RSX */
#define U_ERR 9 /* PIPEMGR stderr channel */
/* special character values */
#define CPMETX 032 /* ctrl-Z, CP/M end of file for text */
#define CPMRBT 003 /* ctrl-C, reboot CPM */
/* operating systems */
#define MPM 0x100 /* bit to test for MP/M */
#define CCPM 0x400 /* bit to test for CCP/M */
#define ISMPM() (bdoshl(CPMVERS)&MPM) /* macro to test for MPM */
/* what to do after you hit return */
#define EXIT (*(int (*)())0) /* where to go to reboot CP/M */
/* BDOS calls etc. */
#define CPMRCON 1 /* read console */
#define CPMWCON 2 /* write console */
#define CPMRRDR 3 /* read reader */
#define CPMWPUN 4 /* write punch */
#define CPMWLST 5 /* write list */
#define CPMDCIO 6 /* direct console I/O */
#define CPMGIOB 7 /* get I/O byte */
#define CPMSIOB 8 /* set I/O byte */
#define CPMWCOB 9 /* write console buffered */
#define CPMRCOB 10 /* read console buffered */
#define CPMICON 11 /* interrogate console ready */
#define CPMVERS 12 /* return version number */
#define CPMRDS 13 /* reset disk system */
#define CPMLGIN 14 /* log in and select disk */
#define CPMOPN 15 /* open file */
#define CPMCLS 16 /* close file */
#define CPMFFST 17 /* find first */
#define CPMFNXT 18 /* find next */
#define CPMDEL 19 /* delete file */
#define CPMREAD 20 /* read next record */
#define CPMWRIT 21 /* write next record */
#define CPMMAKE 22 /* create file */
#define CPMREN 23 /* rename file */
#define CPMILOG 24 /* get bit map of logged in disks */
#define CPMIDRV 25 /* interrogate drive number */
#define CPMSDMA 26 /* set DMA address for i/o */
#define CPMGALL 27 /* get allocation vector address */
#define CPMWPRD 28 /* write protect disk */
#define CPMGROV 29 /* get read-only vector */
#define CPMSATT 30 /* set file attributes */
#define CPMDPB 31 /* get disk parameter block */
#define CPMSUID 32 /* set/get user id */
#define CPMRRAN 33 /* read random record */
#define CPMWRAN 34 /* write random record */
#define CPMCFS 35 /* compute file size */
#define CPMSRAN 36 /* set random record */
#define CPMRDRV 37 /* reset drive */
#define CPMACDV 38 /* MP/M access drive */
#define CPMFRDV 39 /* MP/M free drive */
#define CPMWRZF 40 /* write random with zero fill */
#define CPMTWR 41 /* MP/M test and write record */
#define CPMLOKR 42 /* MP/M lock record */
#define CPMUNLR 43 /* MP/M unlock record */
#define CPMSMSC 44 /* CP/M+ set multi-sector count */
#define CPMERRM 45 /* CP/M+ set BDOS error mode */
#define CPMDFS 46 /* CP/M+ get disk free space */
#define CPMCHN 47 /* CP/M+ chain to program */
#define CPMFLSH 48 /* CP/M+ flush buffers */
#define CPMGZSD 48 /* ZSDOS get ZSDOS/ZDDOS version */
#define CPMSCB 49 /* access CP/M+ system control block */
#define CPMBIOS 50 /* CP/M+ direct BIOS call */
#define CPMDSEG 51 /* set DMA segment */
#define CPMGFTM 54 /* Z80DOS/ZPM3 get file time-stamp */
#define CPMSFTM 55 /* Z80DOS/ZPM3 set file time-stamp */
#define CPMLDOV 59 /* CP/M+ Load Overlay - requires LOADER RSX */
#define CPMRSX 60 /* CP/M+ call RSX */
#define CPMLGI 64 /* CP/Net login */
#define CPMLGO 65 /* CP/Net logout */
#define CPMSMSG 66 /* CP/Net send message */
#define CPMRMSG 67 /* CP/Net receive message */
#define CPMNETS 68 /* CP/Net get network status */
#define CPMGCFT 69 /* CP/Net get configuration table address */
#define CPMSCAT 70 /* CP/Net set compatibility attributes */
#define CPMGSVC 71 /* CP/Net get server configuration */
#define CPMFRBL 98 /* CP/M+ free blocks */
#define CPMTRNC 99 /* CP/M+ truncate file */
#define CPMSLBL 100 /* CP/M+ set directory label */
#define CPMDLD 101 /* CP/M+ get directory label data */
#define CPMGFTS 102 /* CP/M+ get file timestamp and password mode */
#define CPMWXFC 103 /* CP/M+ write file XFCB */
#define CPMSDAT 104 /* CP/M+ set date and time */
#define CPMGDAT 105 /* CP/M+ get date and time */
#define CPMSPWD 106 /* CP/M+ set default password */
#define CPMGSER 107 /* CP/M+ get serial number */
#define CPMRCOD 108 /* CP/M+ get/set return code */
#define CPMCMOD 109 /* CP/M+ get/set console mode */
#define CPMODEL 110 /* CP/M+ get/set output delimiter */
#define CPMPBLK 111 /* CP/M+ print block */
#define CPMLBLK 112 /* CP/M+ list block */
#define CPMPARS 152 /* CP/M+ parse filename */
/* CP/M BIOS functions. Numbers above 16 pertain to CP/M 3 only. */
enum BIOSfns
{
_BOOT = 0,
_WBOOT = 1,
_CONST = 2,
_CONIN = 3,
_CONOUT = 4,
_LIST = 5,
_PUNOUT = 6, /* CP/M 2.2 name */
_AUXOUT = 6, /* CP/M 3.1 name */
_RDRIN = 7, /* CP/M 2.2 name */
_AUXIN = 7, /* CP/M 3.1 name */
_LISTST = 15,
_CONOST = 17,
_AUXIST = 18,
_AUXOST = 19,
_DEVTBL = 20,
_DEVINI = 21,
_DRVTBL = 22,
_HOME = 8,
_SELDSK = 9,
_SETTRK = 10,
_SETSEC = 11,
_SETDMA = 12,
_READ = 13,
_WRITE = 14,
_SECTRN = 16,
_MULTIO = 23,
_FLUSH = 24,
_MOVE = 25,
_SELMEM = 27,
_SETBNK = 28,
_XMOVE = 29,
_TIME = 26,
_USERF = 30
};
#endif