Annotation of Gnu-Mach/i386/i386at/blitreg.h, revision 1.1

1.1     ! root        1: /* 
        !             2:  * Mach Operating System
        !             3:  * Copyright (c) 1991,1990,1989 Carnegie Mellon University
        !             4:  * All Rights Reserved.
        !             5:  * 
        !             6:  * Permission to use, copy, modify and distribute this software and its
        !             7:  * documentation is hereby granted, provided that both the copyright
        !             8:  * notice and this permission notice appear in all copies of the
        !             9:  * software, derivative works or modified versions, and any portions
        !            10:  * thereof, and that both notices appear in supporting documentation.
        !            11:  * 
        !            12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !            13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
        !            14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            15:  * 
        !            16:  * Carnegie Mellon requests users of this software to return to
        !            17:  * 
        !            18:  *  Software Distribution Coordinator  or  [email protected]
        !            19:  *  School of Computer Science
        !            20:  *  Carnegie Mellon University
        !            21:  *  Pittsburgh PA 15213-3890
        !            22:  * 
        !            23:  * any improvements or extensions that they make and grant Carnegie Mellon
        !            24:  * the rights to redistribute these changes.
        !            25:  */
        !            26: /* **********************************************************************
        !            27:  File:         blitreg.h
        !            28:  Description:  Bell Tech Blit card hardware description
        !            29: 
        !            30:  $ Header: $
        !            31: 
        !            32:  Copyright Ing. C. Olivetti & C. S.p.A. 1988, 1989.
        !            33:  All rights reserved.
        !            34: ********************************************************************** */
        !            35: /*
        !            36:   Copyright 1988, 1989 by Olivetti Advanced Technology Center, Inc.,
        !            37: Cupertino, California.
        !            38: 
        !            39:                All Rights Reserved
        !            40: 
        !            41:   Permission to use, copy, modify, and distribute this software and
        !            42: its documentation for any purpose and without fee is hereby
        !            43: granted, provided that the above copyright notice appears in all
        !            44: copies and that both the copyright notice and this permission notice
        !            45: appear in supporting documentation, and that the name of Olivetti
        !            46: not be used in advertising or publicity pertaining to distribution
        !            47: of the software without specific, written prior permission.
        !            48: 
        !            49:   OLIVETTI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
        !            50: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
        !            51: IN NO EVENT SHALL OLIVETTI BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
        !            52: CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
        !            53: LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
        !            54: NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUR OF OR IN CONNECTION
        !            55: WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            56: */
        !            57: 
        !            58: /* 
        !            59:  * Some code taken from Bob Glossman's 1987 "minimal Blit Express 
        !            60:  * driver", copyright unknown.  Probably copyright Intel, too.
        !            61:  */
        !            62: 
        !            63: 
        !            64: #ifndef        blitreg_DEFINED
        !            65: #define blitreg_DEFINED
        !            66: 
        !            67: 
        !            68: /* 
        !            69:  * Registers accessible through AT I/O space.  These addresses can be 
        !            70:  * changed by changing bits 4-8 of the Blit's DIP switch.
        !            71:  */
        !            72: 
        !            73: #define BLIT_CONFIG_ADDR       0x304
        !            74: #define BLIT_DIAG_ADDR         0x306
        !            75: 
        !            76: #if    defined(sun386) || defined(i386)
        !            77: 
        !            78: 
        !            79: /* 
        !            80:  * Layout of Blit control register.
        !            81:  */
        !            82: 
        !            83: union blit_config_reg {
        !            84:        struct config_bits {
        !            85:                unsigned dos_segment : 4;
        !            86:                unsigned reset : 1;
        !            87:                unsigned mode : 1;
        !            88: #define BLIT_UNIX_MODE 1
        !            89: #define BLIT_DOS_MODE  0
        !            90:                unsigned invisible : 1;
        !            91: #define BLIT_INVISIBLE 1
        !            92: #define BLIT_VISIBLE   0
        !            93:                unsigned unused : 1;
        !            94:        } reg;
        !            95:        u_char byte;
        !            96: };
        !            97: 
        !            98: 
        !            99: /* 
        !           100:  * Blit Diag register.
        !           101:  * The UNIX base address is currently hardwired to BLIT_BASE_ADDR.
        !           102:  */
        !           103: 
        !           104: #define BLIT_BASE_ADDR 0xd80000        /* base of blit memory (phys addr) */
        !           105: 
        !           106: union blit_diag_reg {
        !           107:        struct diag_bits {
        !           108:                unsigned unix_base_addr : 5; /* phys addr (ignored) */
        !           109:                unsigned led0 : 1;
        !           110:                unsigned led1 : 1;
        !           111:                unsigned led2 : 1;
        !           112: #define BLIT_LED_ON    1
        !           113: #define BLIT_LED_OFF   0
        !           114:        } reg;
        !           115:        u_char byte;
        !           116: };
        !           117: 
        !           118: #endif /* sun386 || i386 */
        !           119: 
        !           120: 
        !           121: /* 
        !           122:  * Graphics memory, 786 registers, static RAM, and EPROM, all 
        !           123:  * accessible through mapped memory.
        !           124:  */
        !           125: 
        !           126: #define BLIT_MONOWIDTH 1664
        !           127: #define BLIT_MONOHEIGHT        1200
        !           128: #define BLIT_MONOFBSIZE        ((BLIT_MONOWIDTH*BLIT_MONOHEIGHT)/8)
        !           129:                                        /* byte size of monochrome fb */
        !           130: 
        !           131: #define BLIT_MEMSIZE   0x100000        /* num bytes mapped graphics memory */
        !           132: 
        !           133: #define BLIT_REGSIZE   128             /* bytes taken by 786 registers */
        !           134: #define BLIT_REGPAD    (0x10000  - BLIT_REGSIZE)
        !           135:                                        /* padding between reg's and SRAM */
        !           136: 
        !           137: #define BLIT_SRAMSIZE  0x4000          /* num bytes mapped for SRAM */
        !           138: #define BLIT_SRAMPAD   (0x10000 - BLIT_SRAMSIZE)
        !           139:                                        /* padding between SRAM and EPROM */
        !           140: 
        !           141: #define BLIT_EPROMSIZE 0x20000         /* num bytes mapped for EPROM */
        !           142: 
        !           143: 
        !           144: /*      
        !           145:  * Layout of the Blit's mapped memory.  The physical address is (or
        !           146:  * will be, eventually) determined by the Diag register (above).
        !           147:  */
        !           148: 
        !           149: struct  blitdev {
        !           150:        u_char graphmem[BLIT_MEMSIZE];
        !           151:        u_char reg786[BLIT_REGSIZE];
        !           152:        u_char pad1[BLIT_REGPAD];
        !           153:        u_char sram[BLIT_SRAMSIZE];
        !           154:        u_char pad2[BLIT_SRAMPAD];
        !           155:        u_char eprom[BLIT_EPROMSIZE];
        !           156: };
        !           157: 
        !           158: #define BLIT_MAPPED_SIZE       sizeof(struct blitdev)
        !           159: 
        !           160: 
        !           161: /*
        !           162:  * Offsets for 786 registers (i.e., indices into reg786[]).
        !           163:  */
        !           164: 
        !           165: #define INTER_RELOC    0x00    /* Internal Relocation Register */
        !           166: #define BIU_CONTROL    0x04    /* BIU Control Register */
        !           167: #define DRAM_REFRESH   0x06    /* DRAM Refresh control register */
        !           168: #define DRAM_CONTROL    0x08   /* DRAM control register */
        !           169: #define DP_PRIORITY    0x0A    /* DP priority register */
        !           170: #define GP_PRIORITY    0x0C    /* GP priority register*/
        !           171: #define EXT_PRIORITY   0x0E    /* External Priority Register*/
        !           172: #define GP_OPCODE_REG  0x20    /* GP opcode register */
        !           173: #define GP_PARM1_REG   0x22    /* GP Parameter 1 Register */
        !           174: #define GP_PARM2_REG   0x24    /* GP Parameter 2 Register*/
        !           175: #define GP_STAT_REG    0x26    /* GP Status Register*/
        !           176: #define DP_OPCODE_REG  0x40    /* DP opcode register */
        !           177: #define DP_PARM1_REG   0x42    /* DP Parameter 1 Register*/
        !           178: #define DP_PARM2_REG   0x44    /* DP Parameter 2 Register*/
        !           179: #define DP_PARM3_REG   0x46    /* DP Parameter 3 Register*/
        !           180: #define DP_STAT_REG    0x48    /* DP Status Register*/
        !           181: #define DEF_VIDEO_REG  0x4A    /* DP Default Video Register*/
        !           182: 
        !           183: 
        !           184: /* 
        !           185:  * 786 BIU Control Register values.
        !           186:  */
        !           187: 
        !           188: #define BIU_WP1                0x02            /* Write Protect One; 1 = on */
        !           189: #define BIU_16BIT      0x10    /* access 786 registers as words; 0 = bytes */
        !           190: 
        !           191: 
        !           192: /* 
        !           193:  * 786 DRAM/VRAM Control Register values.
        !           194:  */
        !           195: 
        !           196: /* RW bits */
        !           197: #define MEMROWS1       0
        !           198: #define MEMROWS2       0x20
        !           199: #define MEMROWS3       0x40
        !           200: #define MEMROWS4       0x60
        !           201: 
        !           202: /* DC bits */
        !           203: #define PG_NONINTERLV          0
        !           204: #define FASTPG_NONINTERLV      0x10
        !           205: #define PG_INTERLV             0x08
        !           206: #define FASTPG_INTERLV         0x18
        !           207: 
        !           208: /* HT bits */
        !           209: #define HEIGHT_8K      0
        !           210: #define HEIGHT_16K     0x1
        !           211: #define HEIGHT_32K     0x2
        !           212: #define HEIGHT_64K     0x3
        !           213: #define HEIGHT_128K    0x4
        !           214: #define HEIGHT_256K    0x5
        !           215: #define HEIGHT_512K    0x6
        !           216: #define HEIGHT_1M      0x7
        !           217: 
        !           218: 
        !           219: /* 
        !           220:  * 786 Graphics Processor opcodes.
        !           221:  */
        !           222: 
        !           223: #define GECL   0x001                   /* end of command list */
        !           224: #define OP_LINK        0x200                   /* LINK - "link next cmd" */
        !           225: 
        !           226: 
        !           227: /* 
        !           228:  * 786 Display Processor opcodes.
        !           229:  */
        !           230: 
        !           231: #define DECL   1                       /* end of list */
        !           232: #define DP_LOADALL     0x500
        !           233: 
        !           234: 
        !           235: /* 
        !           236:  * Macros for accessing 786 registers (see BIU_16BIT) and EPROM.
        !           237:  */
        !           238: 
        !           239: #define WRITEREG8(base,offset,val) \
        !           240:        (base)->reg786[(offset)] = (val) & 0xff, \
        !           241:        (base)->reg786[(offset)+1] = ((val) & 0xff00) >> 8
        !           242: 
        !           243: #define WRITEREG16(base,offset,val) \
        !           244:        (*((u_short *)((base)->reg786+(offset)))) = (val)
        !           245: 
        !           246: #define READREG(base,offset) \
        !           247:        (*((u_short *)(((base)->reg786+(offset)))))
        !           248: 
        !           249: #define WRITEROM(romp,offset,val) \
        !           250:        (*((u_short *)((romp)+(offset)))) = (val)
        !           251: 
        !           252: #define READROM(romp,offset) \
        !           253:        (*((u_short *)(((romp)+(offset)))))
        !           254: 
        !           255: 
        !           256: /* 
        !           257:  * Layout of Display Processor Control Block Registers.  This block is 
        !           258:  * allocated somewhere in the Blit's graphics memory, and a pointer to 
        !           259:  * it is passed to the Display Processor.
        !           260:  * 
        !           261:  * NOTE: The 786 only sees the memory mapped by the Blit.  Thus all 
        !           262:  * addresses passed to the 786 are relative to the start of the Blit's 
        !           263:  * mapped memory.
        !           264:  */
        !           265: 
        !           266: typedef int addr786_t;                 /* 0 = start of Blit mapped memory */
        !           267: 
        !           268: typedef struct {
        !           269:        u_short vidstat;                /* video status */
        !           270:        u_short intrmask;               /* interrupt mask */
        !           271:        u_short trip_point;
        !           272:        u_short frame_intr;             /* frame interrupt */
        !           273:        u_short reserved1;
        !           274:        u_short crtmode;                /* CRT controller mode */
        !           275:        u_short hsyncstop;              /* monitor parameters */
        !           276:        u_short hfldstart;
        !           277:        u_short hfldstop;
        !           278:        u_short linelength;
        !           279:        u_short vsyncstop;
        !           280:        u_short vfldstart;
        !           281:        u_short vfldstop;
        !           282:        u_short vframelen;
        !           283:        u_short descl;                  /* descriptor pointer low part */
        !           284:        u_short desch;                  /* descriptor pointer high part */
        !           285:        u_short reserved2;
        !           286:        u_short xyzoom;
        !           287:        u_short fldcolor;
        !           288:        u_short bordercolor;
        !           289:        u_short bpp_pad1;
        !           290:        u_short bpp_pad2;
        !           291:        u_short bpp_pad4;
        !           292:        u_short csrmode;                /* & CsrPad */
        !           293:        u_short cursorx;                /* cursor x location */
        !           294:        u_short cursory;                /* cursor y location */
        !           295:        u_short cursorpat[16];          /* cursor pattern */
        !           296: } DPCONTROLBLK;
        !           297: 
        !           298: 
        !           299: /* 
        !           300:  * Values for 786 Display Processor Control Block Registers.
        !           301:  */
        !           302: 
        !           303: /* video status */
        !           304: #define DP_DSP_ON      1               /* display on */
        !           305: #define DP_CSR_ON      2               /* cursor on */
        !           306: 
        !           307: /* CRT controller modes */
        !           308: #define CRTM_NONINTER          0       /* non-interlaced */
        !           309: #define CRTM_INTERLCD          0x40    /* interlaced */
        !           310: #define CRTM_INTERSYN          0x60    /* interlaced - sync */
        !           311: #define CRTM_WIN_STAT_ENABLE   0x10    /* window status enable */
        !           312: #define CRTM_SYNC_SLAVE_MODE   0x08    /* on = operate as slave */
        !           313: #define CRTM_BLANK_SLAVE_MODE  0x04    /* on = Blank is input */
        !           314: #define CRTM_NORMAL_SPEED      0x00
        !           315: #define CRTM_HIGH_SPEED                0x01
        !           316: #define CRTM_VRYHIGH_SPEED     0x02
        !           317: #define CRTM_SUPHIGH_SPEED     0x03
        !           318: 
        !           319: /* cursor style */
        !           320: #define DP_CURSOR_16X16                0x8000  /* off = 8x8 */
        !           321: #define DP_CURSOR_CROSSHAIR    0x4000  /* off = block cursor */
        !           322: #define DP_CURSOR_TRANSPRNT    0x2000  /* off = cursor is opaque */
        !           323: 
        !           324: 
        !           325: /* 
        !           326:  * Types for dealing with 786 Display Processor.
        !           327:  */
        !           328: 
        !           329: typedef struct {
        !           330:        u_short lines;                  /* (lines in strip) - 1 */
        !           331:        u_short linkl;                  /* link to next strip low part */
        !           332:        u_short linkh;                  /* link to next strip high part */
        !           333:        u_short tiles;                  /* C bit, (tiles in strip) - 1 */
        !           334: } STRIPHEADER;
        !           335: 
        !           336: /* 
        !           337:  * If the C bit is turned on, the display processor "automatically 
        !           338:  * displays the background color" for areas not defined by the strips.
        !           339:  * See section 3.1.3.2 of the '786 User's Manual.
        !           340:  */
        !           341: #define DP_C_BIT       0x8000
        !           342: 
        !           343: typedef struct {
        !           344:        u_short bitmapw;                /* width of bitmap */
        !           345:        u_short meml;                   /* btb mem address low part */
        !           346:        u_short memh;                   /* btb mem address high part */
        !           347:        u_short bppss;                  /* bpp, start and stop fields */
        !           348:        u_short fetchcnt;               /* fetch count */
        !           349:        u_short flags;                  /* various flags */
        !           350: } TILEDESC;
        !           351: 
        !           352: 
        !           353: /* 
        !           354:  * Macros for encoding addresses for strip headers & tile descriptors.
        !           355:  * addr786 is relative to the start of the Blit's mapped memory.
        !           356:  */
        !           357: 
        !           358: #define DP_ADDRLOW(addr786)            (((int)(addr786)) & 0xffff)
        !           359: #define DP_ADDRHIGH(addr786)           ((((int)(addr786)) >> 16) & 0x3f)
        !           360: 
        !           361: 
        !           362: /*
        !           363:  * Byte offsets to useful data words within the EPROM.
        !           364:  */
        !           365: 
        !           366: #define EP_MAGIC1      0
        !           367: #define EP_MAGIC1_VAL  0x7856
        !           368: #define EP_MAGIC2      2
        !           369: #define EP_MAGIC2_VAL  0x6587
        !           370: #define EP_DPSTART     4               /* start of DP ctl block */
        !           371:                                        /* (0 = start of EPROM) */
        !           372: #define EP_DPLEN       6               /* byte length of DP control block */
        !           373: 
        !           374: #define EP_FONTSTART   8               /* start of font */
        !           375:                                        /* (0 = start of EPROM) */
        !           376: #define EP_FONTLEN     10              /* byte length of font */
        !           377: #define EP_CHARWIDTH   12              /* bit width of each char in font */
        !           378: #define EP_CHARHEIGHT  14
        !           379: #define EP_NUMCHARS    16              /* num chars in font */
        !           380: 
        !           381: /* where in the bitmap the 25x80 console screen starts */
        !           382: #define EP_XSTART      18
        !           383: #define EP_YSTART      20
        !           384: 
        !           385: #define EP_SCREENWIDTH 22              /* pixels per scan line */
        !           386: #define EP_SCREENHEIGHT        24              /* number of scan lines */
        !           387: 
        !           388: #define EP_FIXUP_X     26              /* magic numbers for displaying */
        !           389: #define EP_FIXUP_Y     28              /* hardware cursor */
        !           390: 
        !           391: #define EP_BPP         30              /* bits per pixel */
        !           392: 
        !           393: 
        !           394: /*
        !           395:  * Miscellaneous.
        !           396:  */
        !           397: 
        !           398: #define BLIT_BLACK_BIT 0               /* try saying that 3 times fast */
        !           399: #define BLIT_WHITE_BIT 1
        !           400: #define BLIT_BLACK_BYTE        0
        !           401: #define BLIT_WHITE_BYTE        0xff
        !           402: 
        !           403: 
        !           404: #endif /* blitreg_DEFINED */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.