Annotation of previous_trunk/src/dimension/nd_vio.cpp, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <limits.h>
                      3: #include <stdlib.h>
                      4: 
                      5: #include "main.h"
                      6: #include "configuration.h"
                      7: #include "m68000.h"
                      8: #include "sysdeps.h"
                      9: #include "dimension.hpp"
                     10: #include "i860cfg.h"
                     11: #include "nd_sdl.hpp"
                     12: #include "host.h"
                     13: 
                     14: 
                     15: #define LOG_VID_LEVEL   LOG_WARN
                     16: 
                     17: /* --------- NEXTDIMENSION VIDEO I/O ---------- *
                     18:  *                                              *
                     19:  * Code for NeXTdimension video I/O. For now    *
                     20:  * only some dummy devices.                     */
                     21: 
                     22: 
                     23: #define ND_VID_DMCD     0x8A
                     24: #define ND_VID_DCSC0    0xE0
                     25: #define ND_VID_DCSC1    0xE2
                     26: 
                     27: 
                     28: /* SAA7191 (Digital Multistandard Colour Decoder - Square Pixel) */
                     29: 
                     30: DMCD::DMCD(NextDimension* nd) : nd(nd) {}
                     31: 
                     32: void DMCD::write(Uint32 step, Uint8 data) {
                     33:     if (step == 0) {
                     34:         addr = data;
                     35:     } else {
                     36:         Log_Printf(LOG_VID_LEVEL, "[ND] Slot %i: DMCD: Writing register %i (%02X)", nd->slot, addr, data);
                     37:         
                     38:         if (addr < ND_DMCD_NUM_REG) {
                     39:             reg[addr] = data;
                     40:             addr++;
                     41:         } else {
                     42:             Log_Printf(LOG_WARN, "[ND] Slot %i: DMCD: Illegal register (%i)", nd->slot, addr);
                     43:         }
                     44:     }
                     45: }
                     46: 
                     47: 
                     48: /* SAA7192 (Digital Colour Space Converter) */
                     49: 
                     50: #define ND_DCSC_CTRL    0x00
                     51: #define ND_DCSC_CLUT    0x01
                     52: 
                     53: DCSC::DCSC(NextDimension* nd, int dev) : nd(nd), dev(dev) {}
                     54: 
                     55: void DCSC::write(Uint32 step, Uint8 data) {
                     56:     switch (step) {
                     57:         case 0:
                     58:             addr = data;
                     59:             break;
                     60:         case 1:
                     61:             if (addr == ND_DCSC_CTRL) {
                     62:                 Log_Printf(LOG_VID_LEVEL, "[ND] Slot %i: DCSC%i: Writing control (%02X)", nd->slot, dev, data);
                     63:                 
                     64:                 ctrl = data;
                     65:                 break;
                     66:             }
                     67:             /* else fall through */
                     68: 
                     69:         default:
                     70:             if (addr == ND_DCSC_CLUT) {
                     71:                 Log_Printf(LOG_VID_LEVEL, "[ND] Slot %i: DCSC%i: Writing LUT at %i (%02X)", nd->slot, dev, step-1, data);
                     72: 
                     73:                 lut[(step-1)&0xFF] = data;
                     74:             } else {
                     75:                 Log_Printf(LOG_WARN, "[ND] Slot %i: DCSC%i: Unknown address (%02X)", nd->slot, dev, addr);
                     76:             }
                     77:             break;
                     78:     }
                     79: }
                     80: 
                     81: 
                     82: /* Receiver function (from IIC bus) */
                     83: 
                     84: void NextDimension::video_dev_write(Uint8 addr, Uint32 step, Uint8 data) {
                     85:     if (addr&0x01) {
                     86:         Log_Printf(LOG_WARN, "[ND] Slot %i: IIC bus: Unimplemented read from video device at %02X", slot, addr);
                     87:     }
                     88:     
                     89:     if (step == 0) {
                     90:         Log_Printf(LOG_VID_LEVEL, "[ND] Slot %i: IIC bus: selecting device at %02X (subaddress: %02X)", slot, addr, data);
                     91:     }
                     92:     
                     93:     switch (addr&0xFE) {
                     94:         case ND_VID_DMCD:
                     95:             dmcd.write(step, data);
                     96:             break;
                     97:         case ND_VID_DCSC0:
                     98:             dcsc0.write(step, data);
                     99:             break;
                    100:         case ND_VID_DCSC1:
                    101:             dcsc1.write(step, data);
                    102:             break;
                    103:             
                    104:         default:
                    105:             Log_Printf(LOG_WARN, "[ND] Slot %i: IIC bus: Unknown device (%02X)", slot, addr);
                    106:             break;
                    107:     }
                    108: }

unix.superglobalmegacorp.com

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