First Commit of my working state
[simh.git] / PDP11 / pdp11_mscp.h
CommitLineData
196ba1fc
PH
1/* pdp11_mscp.h: DEC MSCP and TMSCP definitionsn\r
2\r
3 Copyright (c) 2001-2005, Robert M Supnik\r
4 Derived from work by Stephen F. Shirron\r
5\r
6 Permission is hereby granted, free of charge, to any person obtaining a\r
7 copy of this software and associated documentation files (the "Software"),\r
8 to deal in the Software without restriction, including without limitation\r
9 the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
10 and/or sell copies of the Software, and to permit persons to whom the\r
11 Software is furnished to do so, subject to the following conditions:\r
12\r
13 The above copyright notice and this permission notice shall be included in\r
14 all copies or substantial portions of the Software.\r
15\r
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
19 ROBERT M SUPNIK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
20 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
21 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22\r
23 Except as contained in this notice, the name of Robert M Supnik shall not be\r
24 used in advertising or otherwise to promote the sale, use or other dealings\r
25 in this Software without prior written authorization from Robert M Supnik.\r
26\r
27 09-Jan-03 RMS Tape read/write end pkt is longer than disk read/write\r
28 20-Sep-02 RMS Merged TMSCP definitions\r
29*/\r
30\r
31#ifndef _PDP11_MSCP_H_\r
32#define _PDP11_MSCP_H_ 0\r
33\r
34/* Misc constants */\r
35\r
36#define UID_DISK 2 /* disk class */\r
37#define UID_TAPE 3 /* tape class */\r
38\r
39/* Opcodes */\r
40\r
41#define OP_ABO 1 /* b: abort */\r
42#define OP_GCS 2 /* b: get command status */\r
43#define OP_GUS 3 /* b: get unit status */\r
44#define OP_SCC 4 /* b: set controller char */\r
45#define OP_AVL 8 /* b: available */\r
46#define OP_ONL 9 /* b: online */\r
47#define OP_SUC 10 /* b: set unit char */\r
48#define OP_DAP 11 /* b: det acc paths - nop */\r
49#define OP_ACC 16 /* b: access */\r
50#define OP_CCD 17 /* d: compare - nop */\r
51#define OP_ERS 18 /* b: erase */\r
52#define OP_FLU 19 /* d: flush - nop */\r
53#define OP_ERG 22 /* t: erase gap */\r
54#define OP_CMP 32 /* b: compare */\r
55#define OP_RD 33 /* b: read */\r
56#define OP_WR 34 /* b: write */\r
57#define OP_WTM 36 /* t: write tape mark */\r
58#define OP_POS 37 /* t: reposition */\r
59#define OP_FMT 47 /* d: format */\r
60#define OP_AVA 64 /* b: unit now avail */\r
61#define OP_END 0x80 /* b: end flag */\r
62\r
63/* Modifiers */\r
64\r
65#define MD_EXP 0x8000 /* d: express NI */\r
66#define MD_CMP 0x4000 /* b: compare NI */\r
67#define MD_CSE 0x2000 /* b: clr ser err */\r
68#define MD_ERR 0x1000 /* d: force error NI*/\r
69#define MD_CDL 0x1000 /* t: clr data lost NI*/\r
70#define MD_SCH 0x0800 /* t: supr cache NI */\r
71#define MD_SEC 0x0200 /* b: supr err corr NI */\r
72#define MD_SER 0x0100 /* b: supr err rec NI */\r
73#define MD_DLE 0x0080 /* t: detect LEOT */\r
74#define MD_IMM 0x0040 /* t: immediate NI */\r
75#define MD_EXA 0x0020 /* b: excl access NI */\r
76#define MD_SHD 0x0010 /* d: shadow NI */\r
77#define MD_UNL 0x0010 /* t avl: unload */\r
78#define MD_ERW 0x0008 /* t wr: enb rewrite */\r
79#define MD_REV 0x0008 /* t rd, pos: reverse */\r
80#define MD_SWP 0x0004 /* b suc: enb set wrp */\r
81#define MD_OBC 0x0004 /* t: pos: obj count */\r
82#define MD_IMF 0x0002 /* d onl: ign fmte NI */\r
83#define MD_RWD 0x0002 /* t pos: rewind */\r
84#define MD_ACL 0x0002 /* t avl: all class NI */\r
85#define MD_NXU 0x0001 /* b gus: next unit */\r
86#define MD_RIP 0x0001 /* d onl: allow rip NI */\r
87\r
88/* End flags */\r
89\r
90#define EF_LOG 0x0020 /* b: error log */\r
91#define EF_SXC 0x0010 /* b: serious exc */\r
92#define EF_EOT 0x0008 /* end of tape */\r
93#define EF_PLS 0x0004 /* pos lost */\r
94#define EF_DLS 0x0002 /* cached data lost NI */\r
95\r
96/* Controller flags */\r
97\r
98#define CF_RPL 0x8000 /* ctrl bad blk repl */\r
99#define CF_ATN 0x0080 /* enb attention */\r
100#define CF_MSC 0x0040 /* enb misc msgs */\r
101#define CF_OTH 0x0020 /* enb othr host msgs */ \r
102#define CF_THS 0x0010 /* enb this host msgs */\r
103#define CF_MSK (CF_ATN|CF_MSC|CF_OTH|CF_THS)\r
104\r
105/* Unit flags */\r
106\r
107#define UF_RPL 0x8000 /* d: ctrl bad blk repl */\r
108#define UF_CAC 0x8000 /* t: cache write back */\r
109#define UF_WPH 0x2000 /* b: wr prot hwre */\r
110#define UF_WPS 0x1000 /* b: wr prot swre */\r
111#define UF_SCH 0x0800 /* t: supr cache NI */\r
112#define UF_EXA 0x0400 /* b: exclusive NI */\r
113#define UF_WPD 0x0100 /* b: wr prot data NI */\r
114#define UF_RMV 0x0080 /* d: removable */\r
115#define UF_WBN 0x0040 /* t: write back NI */\r
116#define UF_VSS 0x0020 /* t: supr var speed NI */\r
117#define UF_VSU 0x0010 /* t: var speed unit NI */\r
118#define UF_EWR 0x0008 /* t: enh wr recovery NI */\r
119#define UF_CMW 0x0002 /* cmp writes NI */\r
120#define UF_CMR 0x0001 /* cmp reads NI */\r
121\r
122/* Error log flags */\r
123\r
124#define LF_SUC 0x0080 /* b: successful */\r
125#define LF_CON 0x0040 /* b: continuing */\r
126#define LF_BBR 0x0020 /* d: bad blk repl NI */\r
127#define LF_RCT 0x0010 /* d: err in repl NI */\r
128#define LF_SNR 0x0001 /* b: seq # reset */\r
129\r
130/* Error log formats */\r
131\r
132#define FM_CNT 0 /* b: port lf err */\r
133#define FM_BAD 1 /* b: bad host addr */\r
134#define FM_DSK 2 /* d: disk xfer */\r
135#define FM_SDI 3 /* d: SDI err */\r
136#define FM_SDE 4 /* d: sm disk err */\r
137#define FM_TAP 5 /* t: tape errors */\r
138#define FM_RPL 9 /* d: bad blk repl */\r
139\r
140/* Status codes */\r
141\r
142#define ST_SUC 0 /* b: successful */\r
143#define ST_CMD 1 /* b: invalid cmd */\r
144#define ST_ABO 2 /* b: aborted cmd */\r
145#define ST_OFL 3 /* b: unit offline */\r
146#define ST_AVL 4 /* b: unit avail */\r
147#define ST_MFE 5 /* b: media fmt err */\r
148#define ST_WPR 6 /* b: write prot err */\r
149#define ST_CMP 7 /* b: compare err */\r
150#define ST_DAT 8 /* b: data err */\r
151#define ST_HST 9 /* b: host acc err */\r
152#define ST_CNT 10 /* b: ctrl err */\r
153#define ST_DRV 11 /* b: drive err */\r
154#define ST_FMT 12 /* t: formatter err */\r
155#define ST_BOT 13 /* t: BOT encountered */\r
156#define ST_TMK 14 /* t: tape mark */\r
157#define ST_RDT 16 /* t: record trunc */\r
158#define ST_POL 17 /* t: pos lost */\r
159#define ST_SXC 18 /* b: serious exc */\r
160#define ST_LED 19 /* t: LEOT detect */\r
161#define ST_BBR 20 /* d: bad block */\r
162#define ST_DIA 31 /* b: diagnostic */\r
163#define ST_V_SUB 5 /* subcode */\r
164#define ST_V_INV 8 /* invalid op */\r
165\r
166/* Status subcodes */\r
167\r
168#define SB_SUC_IGN (1 << ST_V_SUB) /* t: unload ignored */\r
169#define SB_SUC_ON (8 << ST_V_SUB) /* b: already online */\r
170#define SB_SUC_EOT (32 << ST_V_SUB) /* t: EOT encountered */\r
171#define SB_SUC_RO (128 << ST_V_SUB) /* t: read only */\r
172#define SB_OFL_NV (1 << ST_V_SUB) /* b: no volume */\r
173#define SB_OFL_INOP (2 << ST_V_SUB) /* t: inoperative */\r
174#define SB_AVL_INU (32 << ST_V_SUB) /* b: in use */\r
175#define SB_WPR_SW (128 << ST_V_SUB) /* b: swre wlk */\r
176#define SB_WPR_HW (256 << ST_V_SUB) /* b: hwre wlk */\r
177#define SB_HST_OA (1 << ST_V_SUB) /* b: odd addr */\r
178#define SB_HST_OC (2 << ST_V_SUB) /* d: odd count */\r
179#define SB_HST_NXM (3 << ST_V_SUB) /* b: nx memory */\r
180#define SB_HST_PAR (4 << ST_V_SUB) /* b: parity err */\r
181#define SB_HST_PTE (5 << ST_V_SUB) /* b: mapping err */\r
182#define SB_DAT_RDE (7 << ST_V_SUB) /* t: read err */\r
183\r
184/* Status invalid command subcodes */\r
185\r
186#define I_OPCD (8 << ST_V_INV) /* inv opcode */\r
187#define I_FLAG (9 << ST_V_INV) /* inv flags */\r
188#define I_MODF (10 << ST_V_INV) /* inv modifier */\r
189#define I_BCNT (12 << ST_V_INV) /* inv byte cnt */\r
190#define I_LBN (28 << ST_V_INV) /* inv LBN */\r
191#define I_VRSN (12 << ST_V_INV) /* inv version */\r
192#define I_FMTI (28 << ST_V_INV) /* inv format */\r
193\r
194/* Tape format flags */\r
195\r
196#define TF_9TK 0x0100 /* 9 track */\r
197#define TF_9TK_NRZ 0x0001 /* 800 bpi */\r
198#define TF_9TK_PE 0x0002 /* 1600 bpi */\r
199#define TF_9TK_GRP 0x0004 /* 6250 bpi */\r
200#define TF_CTP 0x0200 /* TK50 */\r
201#define TF_CTP_LO 0x0001 /* low density */\r
202#define TF_CTP_HI 0x0002 /* hi density */\r
203#define TF_3480 0x0300 /* 3480 */\r
204#define TF_WOD 0x0400 /* RV80 */\r
205\r
206/* Packet formats - note that all packet lengths must be multiples of 4 bytes */\r
207\r
208/* Command packet header */\r
209\r
210#define CMD_REFL 2 /* ref # */\r
211#define CMD_REFH 3\r
212#define CMD_UN 4 /* unit # */\r
213/* 5 /* reserved */\r
214#define CMD_OPC 6 /* opcode */\r
215#define CMD_MOD 7 /* modifier */\r
216\r
217#define CMD_OPC_V_OPC 0 /* opcode */\r
218#define CMD_OPC_M_OPC 0xFF\r
219#define CMD_OPC_V_CAA 8 /* cache NI */\r
220#define CMD_OPC_M_CAA 0xFF\r
221#define CMD_OPC_V_FLG 8 /* flags */\r
222#define CMD_OPC_M_FLG 0xFF\r
223\r
224/* Response packet header */\r
225\r
226#define RSP_LNT 12\r
227#define RSP_REFL 2 /* ref # */\r
228#define RSP_REFH 3\r
229#define RSP_UN 4 /* unit # */\r
230#define RSP_RSV 5 /* reserved */\r
231#define RSP_OPF 6 /* opcd,flg */\r
232#define RSP_STS 7 /* modifiers */\r
233\r
234#define RSP_OPF_V_OPC 0 /* opcode */\r
235#define RSP_OPF_V_FLG 8 /* flags */\r
236\r
237/* Abort packet - 2 W parameter, 2 W status */\r
238\r
239#define ABO_LNT 16\r
240#define ABO_REFL 8 /* ref # */\r
241#define ABO_REFH 9\r
242\r
243/* Avail packet - min size */\r
244\r
245#define AVL_LNT 12\r
246\r
247/* Erase packet - min size */\r
248\r
249#define ERS_LNT 12\r
250\r
251/* Erase gap - min size */\r
252\r
253#define ERG_LNT 12\r
254\r
255/* Flush - 10 W status (8 undefined) */\r
256\r
257#define FLU_LNT 32\r
258/* 8 - 15 /* reserved */\r
259#define FLU_POSL 16 /* position */\r
260#define FLU_POSH 17\r
261\r
262/* Write tape mark - 10W status (8 undefined) */\r
263\r
264#define WTM_LNT 32\r
265/* 8 - 15 /* reserved */\r
266#define WTM_POSL 16 /* position */\r
267#define WTM_POSH 17\r
268\r
269/* Get command status packet - 2 W parameter, 4 W status */\r
270\r
271#define GCS_LNT 20\r
272#define GCS_REFL 8 /* ref # */\r
273#define GCS_REFH 9\r
274#define GCS_STSL 10 /* status */\r
275#define GCS_STSH 11\r
276\r
277/* Format packet - 8 W parameters, none returned */\r
278\r
279#define FMT_LNT 12\r
280#define FMT_IH 17 /* magic bit */\r
281\r
282/* Get unit status packet - 18 W status (disk), 16W status (tape) */\r
283\r
284#define GUS_LNT_D 48\r
285#define GUS_LNT_T 44\r
286#define GUS_MLUN 8 /* mlun */\r
287#define GUS_UFL 9 /* flags */\r
288#define GUS_RSVL 10 /* reserved */\r
289#define GUS_RSVH 11\r
290#define GUS_UIDA 12 /* unit ID */\r
291#define GUS_UIDB 13\r
292#define GUS_UIDC 14\r
293#define GUS_UIDD 15\r
294#define GUS_MEDL 16 /* media ID */\r
295#define GUS_MEDH 17\r
296#define GUS_UVER 23 /* unit version */\r
297\r
298/* Disk specific status */\r
299\r
300#define GUS_SHUN 18 /* shadowing */\r
301#define GUS_SHST 19\r
302#define GUS_TRK 20 /* track */\r
303#define GUS_GRP 21 /* group */\r
304#define GUS_CYL 22 /* cylinder */\r
305#define GUS_RCTS 24 /* RCT size */\r
306#define GUS_RBSC 25 /* RBNs, copies */\r
307\r
308/* Tape specific status */\r
309\r
310#define GUS_FMT 18 /* format */\r
311#define GUS_SPEED 19 /* speed */\r
312#define GUS_MENU 20 /* menu */\r
313#define GUS_CAP 21 /* capacity */\r
314#define GUS_FVER 22 /* fmtr version */\r
315\r
316#define GUS_UIDD_V_MOD 0 /* unit model */\r
317#define GUS_UIDD_V_CLS 8 /* unit class */\r
318#define GUS_RB_V_RBNS 0 /* RBNs/track */\r
319#define GUS_RB_V_RCTC 8 /* RCT copies */\r
320\r
321/* Unit online - 2 W parameter, 16 W status (disk or tape) */\r
322\r
323#define ONL_LNT 44\r
324#define ONL_MLUN 8 /* mlun */\r
325#define ONL_UFL 9 /* flags */\r
326#define ONL_RSVL 10 /* reserved */\r
327#define ONL_RSVH 11\r
328#define ONL_UIDA 12 /* unit ID */\r
329#define ONL_UIDB 13\r
330#define ONL_UIDC 14\r
331#define ONL_UIDD 15\r
332#define ONL_MEDL 16 /* media ID */\r
333#define ONL_MEDH 17\r
334\r
335/* Disk specific status */\r
336\r
337#define ONL_SHUN 18 /* shadowing */\r
338#define ONL_SHST 19\r
339#define ONL_SIZL 20 /* size */\r
340#define ONL_SIZH 21\r
341#define ONL_VSNL 22 /* vol ser # */\r
342#define ONL_VSNH 23\r
343\r
344/* Tape specific status */\r
345\r
346#define ONL_FMT 18 /* format */\r
347#define ONL_SPD 19 /* speed */\r
348#define ONL_MAXL 20 /* max rec size */\r
349#define ONL_MAXH 21\r
350#define ONL_NREC 22 /* noise rec */\r
351#define ONL_RSVE 23 /* reserved */\r
352\r
353#define ONL_UIDD_V_MOD 0 /* unit model */\r
354#define ONL_UIDD_V_CLS 8 /* unit class */\r
355\r
356/* Set controller characteristics packet - 8 W parameters, 10 W status */\r
357\r
358#define SCC_LNT 32\r
359#define SCC_MSV 8 /* MSCP version */\r
360#define SCC_CFL 9 /* flags */\r
361#define SCC_TMO 10 /* timeout */\r
362#define SCC_VER 11 /* ctrl version */\r
363#define SCC_CIDA 12 /* ctrl ID */\r
364#define SCC_CIDB 13\r
365#define SCC_CIDC 14\r
366#define SCC_CIDD 15\r
367#define SCC_MBCL 16 /* max byte count */\r
368#define SCC_MBCH 17\r
369\r
370#define SCC_VER_V_SVER 0 /* swre vrsn */\r
371#define SCC_VER_V_HVER 8 /* hwre vrsn */\r
372#define SCC_CIDD_V_MOD 0 /* ctrl model */\r
373#define SCC_CIDD_V_CLS 8 /* ctrl class */\r
374\r
375/* Set unit characteristics - 2 W parameter, 16 W status - same as ONL */\r
376\r
377#define SUC_LNT 44\r
378\r
379/* Reposition - 4 W parameters, 10 W status */\r
380\r
381#define POS_LNT 32\r
382#define POS_RCL 8 /* record cnt */\r
383#define POS_RCH 9\r
384#define POS_TMCL 10 /* tape mk cnt */\r
385#define POS_TMCH 11\r
386/* reserved 12 - 15 */\r
387#define POS_POSL 16 /* position */\r
388#define POS_POSH 17\r
389\r
390/* Data transfer packet - 10 W parameters (disk), 6W parameters (tape),\r
391 10 W status (disk), 12W status (tape) */\r
392\r
393#define RW_LNT_D 32\r
394#define RW_LNT_T 36\r
395#define RW_BCL 8 /* byte count */\r
396#define RW_BCH 9\r
397#define RW_BAL 10 /* buff desc */\r
398#define RW_BAH 11\r
399#define RW_MAPL 12 /* map table */\r
400#define RW_MAPH 13\r
401/* 14 /* reserved */\r
402/* 15 /* reserved */\r
403\r
404/* Disk specific parameters */\r
405\r
406#define RW_LBNL 16 /* LBN */\r
407#define RW_LBNH 17\r
408#define RW_WBCL 18 /* working bc */\r
409#define RW_WBCH 19\r
410#define RW_WBAL 20 /* working ba */\r
411#define RW_WBAH 21\r
412#define RW_WBLL 22 /* working lbn */\r
413#define RW_WBLH 23\r
414\r
415/* Tape specific status */\r
416\r
417#define RW_POSL 16 /* position */\r
418#define RW_POSH 17\r
419#define RW_RSZL 18 /* record size */\r
420#define RW_RSZH 19\r
421\r
422/* Error log packet header */\r
423\r
424#define ELP_REFL 2 /* ref # */\r
425#define ELP_REFH 3\r
426#define ELP_UN 4 /* unit */\r
427#define ELP_SEQ 5\r
428#define ELP_FF 6 /* fmt,flg */\r
429#define ELP_EVT 7 /* event */\r
430\r
431#define ELP_EV_V_FMT 0 /* format */\r
432#define ELP_EV_V_FLG 8 /* flag */\r
433\r
434/* Port last failure error log packet - 6 W status */\r
435\r
436#define PLF_LNT 24 /* length */\r
437#define PLF_CIDA 8 /* ctrl ID */\r
438#define PLF_CIDB 9\r
439#define PLF_CIDC 10\r
440#define PLF_CIDD 11\r
441#define PLF_VER 12 /* ctrl version */\r
442#define PLF_ERR 13 /* err */\r
443\r
444#define PLF_CIDD_V_MOD 0 /* ctrl model */\r
445#define PLF_CIDD_V_CLS 8 /* ctrl class */\r
446#define PLF_VER_V_SVER 0 /* swre ver */\r
447#define PLF_VER_V_HVER 8 /* hwre ver */\r
448\r
449/* Disk transfer error log packet - 18 W status */\r
450\r
451#define DTE_LNT 48\r
452#define DTE_CIDA 8 /* ctrl ID */\r
453#define DTE_CIDB 9\r
454#define DTE_CIDC 10\r
455#define DTE_CIDD 11\r
456#define DTE_VER 12 /* version */\r
457#define DTE_MLUN 13 /* mlun */\r
458#define DTE_UIDA 14 /* unit ID */\r
459#define DTE_UIDB 15\r
460#define DTE_UIDC 16\r
461#define DTE_UIDD 17\r
462#define DTE_UVER 18\r
463#define DTE_D2 23\r
464#define DTE_D3 24\r
465#define DTE_D4 25\r
466\r
467/* Disk specific status */\r
468\r
469#define DTE_SCYL 19 /* cylinder */\r
470#define DTE_VSNL 20 /* vol ser # */\r
471#define DTE_VSNH 21\r
472#define DTE_D1 22 /* dev params */\r
473\r
474/* Tape specific status */\r
475\r
476#define DTE_RETR 19 /* retry */\r
477#define DTE_POSL 20 /* position */\r
478#define DTE_POSH 21\r
479#define DTE_FVER 22 /* formatter ver */\r
480\r
481#define DTE_CIDD_V_MOD 0 /* ctrl model */\r
482#define DTE_CIDD_V_CLS 8 /* ctrl class */\r
483#define DTE_VER_V_SVER 0 /* ctrl swre ver */\r
484#define DTE_VER_V_HVER 8 /* ctrl hwre ver */\r
485#define DTE_UIDD_V_MOD 0 /* unit model */\r
486#define DTE_UIDD_V_CLS 8 /* unit class */\r
487#define DTE_D2_V_SECT 8\r
488#define DTE_D3_V_SURF 0\r
489#define DTE_D3_V_CYL 8\r
490\r
491/* Host bus error log packet - 8 W status */\r
492\r
493#define HBE_LNT 28\r
494#define HBE_CIDA 8 /* ctrl ID */\r
495#define HBE_CIDB 9\r
496#define HBE_CIDC 10\r
497#define HBE_CIDD 11\r
498#define HBE_VER 12 /* ctrl version */\r
499#define HBE_RSV 13 /* reserved */\r
500#define HBE_BADL 14 /* bad address */\r
501#define HBE_BADH 15\r
502\r
503#define HBE_CIDD_V_MOD 0 /* ctrl model */\r
504#define HBE_CIDD_V_CLS 8 /* ctrl class */\r
505#define HBE_VER_V_SVER 0 /* ctrl swre ver */\r
506#define HBE_VER_V_HVER 8 /* ctrl hwre ver */\r
507\r
508/* Unit now available attention message - 10 W status, same as\r
509 first 10 W of status from get unit status\r
510*/\r
511\r
512#define UNA_LNT 32\r
513\r
514#endif\r