home *** CD-ROM | disk | FTP | other *** search
/ Best Objectech Shareware Selections / UNTITLED.iso / boss / grap / util / 020 / register.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-21  |  2.3 KB  |  85 lines

  1. /*
  2.     Register.hpp version 1.0
  3.     by Robert Schmidt of Ztiff Zox Softwear 1993
  4.  
  5.     Declares the Register class, members defined in Register.cpp.
  6. */
  7.  
  8. #ifndef _Register_HPP
  9. #define _Register_HPP
  10.  
  11. #include <iostream.h>
  12.  
  13. /*
  14.     xxxxADDR defines the base port number used to access VGA component xxxx,
  15.     and is defined for xxxx =
  16.         ATTRCON        -    Attribute Controller
  17.         MISC        -    Miscellaneous Register
  18.         VGAENABLE    -    VGA Enable Register
  19.         SEQ            -    Sequencer
  20.         GRACON        -    Graphics Controller
  21.         CRTC        -    Cathode Ray Tube Controller
  22.         STATUS        -    Status Register
  23. */
  24.  
  25. #define ATTRCON_ADDR    0x3c0
  26. #define MISC_ADDR        0x3c2
  27. #define VGAENABLE_ADDR    0x3c3
  28. #define SEQ_ADDR        0x3c4
  29. #define GRACON_ADDR        0x3ce
  30. #define CRTC_ADDR        0x3d4
  31. #define STATUS_ADDR        0x3da
  32.  
  33.  
  34. class    Register
  35.     {
  36.     unsigned        port;
  37.     unsigned char    index;
  38.     unsigned char    value;
  39. public:
  40.     Register(unsigned p=0, unsigned char i=0, unsigned char v=0)
  41.         { init(p,i,v); }
  42.     unsigned char init(unsigned p, unsigned char i, unsigned char v)
  43.         { port = p; index = i; return value = v; }
  44.     unsigned char init(Register& r)
  45.         { port = r.port; index = r.index; return value = r.value; }
  46.     void setPort(unsigned p)        { port = p; }
  47.     void setIndex(unsigned char i)    { index = i; }
  48.     void setValue(unsigned char v)    { value = v; }
  49.     unsigned getPort(void)            { return port; }
  50.     unsigned char getIndex(void)    { return index; }
  51.     unsigned char getValue(void)    { return value; }
  52.     unsigned char operator++(void)    { return value++; }
  53.     unsigned char operator--(void)    { return value--; }
  54.     unsigned char operator++(int)    { return ++value; }
  55.     unsigned char operator--(int)    { return --value; }
  56.     unsigned char& operator*()        { return value; }
  57.  
  58.     void out();
  59.     unsigned char in();
  60.  
  61.     friend istream& operator>> (istream&, Register&);
  62.     friend ostream& operator<< (ostream&, Register&);
  63.     };
  64.  
  65.  
  66. class NamedRegister : public Register
  67.     {
  68.     char             *name;
  69.     char            enableFlag;
  70. public:
  71.     NamedRegister()                    { doEnable(); }
  72.     ~NamedRegister()                { delete name; }
  73.     void doEnable()                    { enableFlag = 1; }
  74.     void doDisable()                { enableFlag = 0; }
  75.     void toggleEnable()                { enableFlag = !enableFlag; }
  76.     char isEnabled()                { return enableFlag; }
  77.     char *getName()                    { return name; }
  78.     void printCon();
  79.     unsigned char operator=(Register &r)
  80.         { return Register::init(r); }
  81.  
  82.     friend istream& operator>> (istream&, NamedRegister&);
  83.     };
  84.  
  85. #endif