Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>
#include <bio.h>

#include "pci.h"
#include "vga.h"

/*
 * IBM 8514/A Graphics Coprocessor.
 */
enum {
        Subsys          = 0x42E8,       /* Subsystem Status (R), Control (W) */
        Advfunc         = 0x4AE8,       /* Advanced Function Control */
        CurY            = 0x82E8,       /* Current Y Position */
        CurX            = 0x86E8,       /* Current X Position */
        DestyAxstp      = 0x8AE8,       /* Destination Y Position/Axial Step Constant */
        DestxDiastp     = 0x8EE8,       /* Destination X Position/Diagonal Step Constant */
        ErrTerm         = 0x92E8,       /* Error Term */
        MajAxisPcnt     = 0x96E8,       /* Major Axis Pixel Count */
        GPstat          = 0x9AE8,       /* Graphics Processor Status (R) */
        Cmd             = 0x9AE8,       /* Drawing Command (W) */
        ShortStroke     = 0x9EE8,       /* Short Stroke Vector (W) */
        BkgdColor       = 0xA2E8,       /* Background Colour */
        FrgdColor       = 0xA6E8,       /* Foreground Colour */
        WrtMask         = 0xAAE8,       /* Bitplane Write Mask */
        RdMask          = 0xAEE8,       /* Bitplane Read Mask */
        ColorCmp        = 0xB2E8,       /* Colour Compare */
        BkgdMix         = 0xB6E8,       /* Background Mix */
        FrgdMix         = 0xBAE8,       /* Foreground Mix */
        Multifunc       = 0xBEE8,       /* Multifunction Control */
        PixTrans        = 0xE2E8,       /* Pixel Data Transfer */
};

enum {                                  /* Multifunc Index */
        MinAxisPcnt     = 0x0000,       /* Minor Axis Pixel Count */
        ScissorsT       = 0x1000,       /* Top Scissors */
        ScissorsL       = 0x2000,       /* Left Scissors */
        ScissorsB       = 0x3000,       /* Bottom Scissors */
        ScissorsR       = 0x4000,       /* Right Scissors */
        MemCntl         = 0x5000,       /* Memory Control */
        PixCntl         = 0xA000,       /* Pixel Control */
        MultMisc        = 0xE000,       /* Miscellaneous Multifunction Control (S3) */
        ReadSel         = 0xF000,       /* Read Register Select (S3) */
};

static void
load(Vga* vga, Ctlr*)
{
        outportw(Pixmask, 0x00);
        outportw(Subsys, 0x8000|0x1000);
        outportw(Subsys, 0x4000|0x1000);
        outportw(Pixmask, 0xFF);

        outportw(FrgdMix, 0x47);
        outportw(BkgdMix, 0x07);

        outportw(Multifunc, ScissorsT|0x000);
        outportw(Multifunc, ScissorsL|0x000);
        outportw(Multifunc, ScissorsB|(vga->vmz/vga->mode->x-1));
        outportw(Multifunc, ScissorsR|(vga->mode->x-1));

        outportw(WrtMask, 0xFFFF);
        outportw(Multifunc, PixCntl|0x0000);
}

static void
dump(Vga*, Ctlr* ctlr)
{
        printitem(ctlr->name, "Advfunc");
        Bprint(&stdout, "%9.4uX\n", inportw(Advfunc));
        printitem(ctlr->name, "Subsys");
        Bprint(&stdout, "%9.4uX\n", inportw(Subsys));
}

Ctlr ibm8514 = {
        "ibm8514",                      /* name */
        0,                              /* snarf */
        0,                              /* options */
        0,                              /* init */
        load,                           /* load */
        dump,                           /* dump */
};