1*24434Skarels 2*24434Skarels 3*24434Skarels /* $Header$ */ 4*24434Skarels 5*24434Skarels /* 6*24434Skarels * ACC IF-11/HDH interface 7*24434Skarels */ 8*24434Skarels 9*24434Skarels struct hdhregs { /* device registers */ 10*24434Skarels u_short csr; /* control and status register */ 11*24434Skarels u_char iochn; /* logical channel */ 12*24434Skarels u_char ioadx; /* address extension (A16,A17) */ 13*24434Skarels u_short ioadl; /* buffer address (A0-A15) */ 14*24434Skarels u_short iocnt; /* byte count */ 15*24434Skarels u_char iofcn; /* UMC funciton code */ 16*24434Skarels u_char iosbf; /* UMC subfunction code */ 17*24434Skarels u_char ioini; /* comm regs valid flag */ 18*24434Skarels u_char staack; /* interrupt acknowledge flag */ 19*24434Skarels u_char ionmi; /* NMI routine active flag */ 20*24434Skarels u_char ioxfrg; /* UMR transfer grant flag */ 21*24434Skarels u_char stachn; /* interrupt channel number */ 22*24434Skarels u_char statyp; /* interrupt type code */ 23*24434Skarels u_char stacc; /* completion function code */ 24*24434Skarels u_char stacs; /* completion subfunction code */ 25*24434Skarels u_short stacnt; /* completion byte count */ 26*24434Skarels }; 27*24434Skarels 28*24434Skarels /* defines for CSR */ 29*24434Skarels 30*24434Skarels #define HDH_UER 0100000 /* UMC error condition */ 31*24434Skarels #define HDH_NXM 0040000 /* non-existent memory error */ 32*24434Skarels #define HDH_PER 0020000 /* UNIBUS parity error */ 33*24434Skarels #define HDH_ZRUN 0010000 /* Z80 running */ 34*24434Skarels #define HDH_ZGO 0004000 /* Z80 not in wait state */ 35*24434Skarels #define HDH_MBLK 0000200 /* memory swap state (0=main, 1=srv) */ 36*24434Skarels #define HDH_SRV 0000100 /* select UMC service memory */ 37*24434Skarels #define HDH_MAIN 0000040 /* select UMC main memory */ 38*24434Skarels #define HDH_DMA 0000020 /* DMA enable */ 39*24434Skarels #define HDH_WRT 0000010 /* DMA write enable */ 40*24434Skarels #define HDH_IEN 0000004 /* interrupt enable */ 41*24434Skarels #define HDH_RST 0000002 /* reset */ 42*24434Skarels #define HDH_NMI 0000001 /* cause NMI */ 43*24434Skarels 44*24434Skarels #define HDH_BITS \ 45*24434Skarels "\10\20UER\17NXM\16PER\15ZRUN\14ZGO\10MBLK\7SRV\6MAIN\5DMA\4WRT\3IEN\2RST\1NMI" 46*24434Skarels 47*24434Skarels /* start i/o function code definitions */ 48*24434Skarels 49*24434Skarels #define HDHWRT 0 /* write to if-11 */ 50*24434Skarels #define HDHRDB 1 /* read from if-11 */ 51*24434Skarels #define HDHSTR 2 /* stream flag */ 52*24434Skarels #define HDHEOS 6 /* end of stream flag */ 53*24434Skarels #define HDHABT 8 /* abort flag */ 54*24434Skarels #define HDHUMR 16 /* UMR protocol flag */ 55*24434Skarels 56*24434Skarels /* interrupt type definitions */ 57*24434Skarels 58*24434Skarels #define HDHSACK 0 /* start i/o ack */ 59*24434Skarels #define HDHDONE 1 /* i/o completion */ 60*24434Skarels #define HDHXREQ 2 /* UMR protocol transfer request */ 61*24434Skarels 62*24434Skarels /* i/o completion codes */ 63*24434Skarels 64*24434Skarels #define HDHIOCOK 0001 /* successful completion */ 65*24434Skarels #define HDHIOCOKP 0002 /* successful completion, more data pending */ 66*24434Skarels #define HDHIOCABT 0361 /* i/o aborted */ 67*24434Skarels #define HDHIOCERR 0321 /* program error */ 68*24434Skarels #define HDHIOCOVR 0363 /* overrun error */ 69*24434Skarels #define HDHIOCUBE 0374 /* non-existant memory or unibus error */ 70*24434Skarels 71*24434Skarels /* UMR protocol transfer grant code definitions */ 72*24434Skarels 73*24434Skarels #define HDHXEVN 1 /* start with even address */ 74*24434Skarels #define HDHXODD 2 /* start with odd address */ 75*24434Skarels #define HDHNUMR 4 /* non-UMR transfer */ 76*24434Skarels #define HDHXABT 8 /* abort transfer */ 77*24434Skarels 78*24434Skarels /* HDH supervisor request code definitions */ 79*24434Skarels #define HDHINIT 0x42 /* SYSINIT opcode */ 80*24434Skarels 81*24434Skarels #define HDHSUP 0xf0 /* supervisor HDH status/line control prefix */ 82*24434Skarels #define HDHIMP 0x400 /* IMP line up modifier */ 83*24434Skarels #define HDHREFL 0x800 /* reflect mode modifier */ 84*24434Skarels #define HDHINLB 0x1000 /* internal loopback modifier */ 85*24434Skarels #define HDHEXLP 0x2000 /* external loopback modifier */ 86*24434Skarels #define HDHRQST HDHSUP+0x0000 /* line status request */ 87*24434Skarels #define HDHRQUP HDHSUP+0x0100 /* line up request */ 88*24434Skarels #define HDHRQDN HDHSUP+0x0200 /* line down request */ 89*24434Skarels 90*24434Skarels /* HDH supervisor reply code definitions */ 91*24434Skarels 92*24434Skarels #define HDHIACK HDHSUP+0x4200 /* line init ack */ 93*24434Skarels #define HDHLNUP HDHSUP+0x0100 /* line up reply */ 94*24434Skarels #define HDHLNDN HDHSUP+0x0200 /* line down reply */ 95*24434Skarels #define HDHLNACK HDHSUP+0x0300 /* ack line up request (but line is down now) */ 96*24434Skarels #define HDHTIMO HDHSUP+0x0400 /* line timeout */ 97*24434Skarels #define HDHLOOP HDHSUP+0x0500 /* loopback message */ 98*24434Skarels #define HDHDTERR HDHSUP+0x0600 /* host data error detected */ 99*24434Skarels #define HDHSQRCV HDHSUP+0x0700 /* HDLC sequence error detected by IMP */ 100*24434Skarels #define HDHSQERR HDHSUP+0x0800 /* HDLC sequence error detected by if-11 */ 101