Annotation of previous_trunk/src/dimension/dimension.hpp, revision 1.1.1.1

1.1       root        1: #pragma once
                      2: 
                      3: #ifndef __DIMENSION_H__
                      4: #define __DIMENSION_H__
                      5: 
                      6: #include <SDL_stdinc.h>
                      7: #include "nd_sdl.hpp"
                      8: 
                      9: /* NeXTdimension memory controller revision (0 and 1 allowed) */
                     10: #define ND_STEP 1
                     11: 
                     12: #define ND_SLOT(num) ((num)*2+2)
                     13: #define ND_NUM(slot) ((slot)/2-1)
                     14: 
                     15: #ifdef __cplusplus
                     16: extern "C" {
                     17: #endif /* __cplusplus */
                     18:     
                     19:     typedef void (*i860_run_func)(int);
                     20:     extern i860_run_func i860_Run;
                     21:     void nd_start_debugger(void);
                     22:     const char* nd_reports(int num, double realTime, double hostTime);
                     23:     Uint32* nd_vram_for_slot(int slot);
                     24:     
                     25: #define ND_LOG_IO_RD LOG_NONE
                     26: #define ND_LOG_IO_WR LOG_NONE
                     27: 
                     28: #ifdef __cplusplus
                     29: }
                     30: #endif /* __cplusplus */
                     31: 
                     32: #ifdef __cplusplus
                     33: 
                     34: #include "NextBus.hpp"
                     35: #include "i860.hpp"
                     36: #include "nd_nbic.hpp"
                     37: #include "nd_mem.hpp"
                     38: #include "ramdac.h"
                     39: 
                     40: class NextDimension;
                     41: 
                     42: class MC {
                     43:     NextDimension* nd;
                     44: public:
                     45:     Uint32 csr0;
                     46:     Uint32 csr1;
                     47:     Uint32 csr2;
                     48:     Uint32 sid;
                     49:     Uint32 dma_csr;
                     50:     Uint32 dma_start;
                     51:     Uint32 dma_width;
                     52:     Uint32 dma_pstart;
                     53:     Uint32 dma_pwidth;
                     54:     Uint32 dma_sstart;
                     55:     Uint32 dma_swidth;
                     56:     Uint32 dma_bsstart;
                     57:     Uint32 dma_bswidth;
                     58:     Uint32 dma_top;
                     59:     Uint32 dma_bottom;
                     60:     Uint32 dma_line_a;
                     61:     Uint32 dma_curr_a;
                     62:     Uint32 dma_scurr_a;
                     63:     Uint32 dma_out_a;
                     64:     Uint32 vram;
                     65:     Uint32 dram;
                     66:     
                     67:     MC(NextDimension* nd);
                     68:     void init(void);
                     69:     Uint32 read(Uint32 addr);
                     70:     void   write(Uint32 addr, Uint32 val);
                     71: };
                     72: 
                     73: class DP {
                     74:     NextDimension* nd;
                     75: public:
                     76:     Uint8  iic_addr;
                     77:     Uint8  iic_msg;
                     78:     Uint32 iic_msgsz;
                     79:     int    iic_busy;
                     80:     Uint32 doff; // (SC) wild guess - vram offset in pixels?
                     81:     Uint32 csr;
                     82:     Uint32 alpha;
                     83:     Uint32 dma;
                     84:     Uint32 cpu_x;
                     85:     Uint32 cpu_y;
                     86:     Uint32 dma_x;
                     87:     Uint32 dma_y;
                     88:     Uint32 iic_stat_addr;
                     89:     Uint32 iic_data;
                     90:     
                     91:     DP(NextDimension* nd);
                     92:     void init(void);
                     93:     Uint32 lget(Uint32 addr);
                     94:     void   lput(Uint32 addr, Uint32 val);
                     95:     void   iicmsg(void);
                     96: };
                     97: 
                     98: #define ND_DMCD_NUM_REG 25
                     99: class DMCD {
                    100:     NextDimension* nd;
                    101: public:
                    102:     Uint8 addr;
                    103:     Uint8 reg[ND_DMCD_NUM_REG];
                    104: 
                    105:     DMCD(NextDimension* nd);
                    106:     
                    107:     void write(Uint32 step, Uint8 data);
                    108: };
                    109: 
                    110: class DCSC {
                    111:     NextDimension* nd;
                    112:     int dev;
                    113: public:
                    114:     Uint8 addr;
                    115:     Uint8 ctrl;
                    116:     Uint8 lut[256];
                    117:     
                    118:     DCSC(NextDimension* nd, int dev);
                    119:     
                    120:     void write(Uint32 step, Uint8 data);
                    121: };
                    122: 
                    123: class NextDimension : public NextBusBoard {
                    124:     /* Message port for host->dimension communication */
                    125:     volatile int    m_port;
                    126:     lock_t          m_port_lock;
                    127: public:
                    128:     NDSDL           sdl;
                    129:     i860_cpu_device i860;
                    130:     NBIC            nbic;
                    131:     MC              mc;
                    132:     DP              dp;
                    133:     DMCD            dmcd;
                    134:     DCSC            dcsc0;
                    135:     DCSC            dcsc1;
                    136:     bt463           ramdac;
                    137: 
                    138:     ND_Addrbank*    mem_banks[65536];
                    139:     Uint8           ram[64*1024*1024];
                    140:     Uint8           vram[4*1024*1024];
                    141:     Uint8           rom[128*1024];
                    142:     Uint8           rom_command;
                    143:     Uint32          rom_last_addr;;
                    144:     Uint8           dmem[512];
                    145:     Uint32          bankmask[4];
                    146: 
                    147:     NextDimension(int slot);
                    148:     void mem_init(void);
                    149:     void init_mem_banks(void);
                    150:     void map_banks (ND_Addrbank *bank, int start, int size);
                    151: 
                    152:     virtual Uint32 board_lget(Uint32 addr);
                    153:     virtual Uint16 board_wget(Uint32 addr);
                    154:     virtual Uint8  board_bget(Uint32 addr);
                    155:     virtual void   board_lput(Uint32 addr, Uint32 val);
                    156:     virtual void   board_wput(Uint32 addr, Uint16 val);
                    157:     virtual void   board_bput(Uint32 addr, Uint8 val);
                    158: 
                    159:     virtual Uint32 slot_lget(Uint32 addr);
                    160:     virtual Uint16 slot_wget(Uint32 addr);
                    161:     virtual Uint8  slot_bget(Uint32 addr);
                    162:     virtual void   slot_lput(Uint32 addr, Uint32 val);
                    163:     virtual void   slot_wput(Uint32 addr, Uint16 val);
                    164:     virtual void   slot_bput(Uint32 addr, Uint8 val);
                    165: 
                    166:     virtual void   reset(void);
                    167:     virtual void   pause(bool pause);
                    168: 
                    169:     static Uint8  i860_cs8get  (NextDimension* nd, Uint32 addr);
                    170:     static void   i860_rd8_be  (NextDimension* nd, Uint32 addr, Uint32* val);
                    171:     static void   i860_rd16_be (NextDimension* nd, Uint32 addr, Uint32* val);
                    172:     static void   i860_rd32_be (NextDimension* nd, Uint32 addr, Uint32* val);
                    173:     static void   i860_rd64_be (NextDimension* nd, Uint32 addr, Uint32* val);
                    174:     static void   i860_rd128_be(NextDimension* nd, Uint32 addr, Uint32* val);
                    175:     static void   i860_wr8_be  (NextDimension* nd, Uint32 addr, const Uint32* val);
                    176:     static void   i860_wr16_be (NextDimension* nd, Uint32 addr, const Uint32* val);
                    177:     static void   i860_wr32_be (NextDimension* nd, Uint32 addr, const Uint32* val);
                    178:     static void   i860_wr64_be (NextDimension* nd, Uint32 addr, const Uint32* val);
                    179:     static void   i860_wr128_be(NextDimension* nd, Uint32 addr, const Uint32* val);
                    180:     static void   i860_rd8_le  (NextDimension* nd, Uint32 addr, Uint32* val);
                    181:     static void   i860_rd16_le (NextDimension* nd, Uint32 addr, Uint32* val);
                    182:     static void   i860_rd32_le (NextDimension* nd, Uint32 addr, Uint32* val);
                    183:     static void   i860_rd64_le (NextDimension* nd, Uint32 addr, Uint32* val);
                    184:     static void   i860_rd128_le(NextDimension* nd, Uint32 addr, Uint32* val);
                    185:     static void   i860_wr8_le  (NextDimension* nd, Uint32 addr, const Uint32* val);
                    186:     static void   i860_wr16_le (NextDimension* nd, Uint32 addr, const Uint32* val);
                    187:     static void   i860_wr32_le (NextDimension* nd, Uint32 addr, const Uint32* val);
                    188:     static void   i860_wr64_le (NextDimension* nd, Uint32 addr, const Uint32* val);
                    189:     static void   i860_wr128_le(NextDimension* nd, Uint32 addr, const Uint32* val);
                    190: 
                    191:     Uint8  rom_read(Uint32 addr);
                    192:     void   rom_write(Uint32 addr, Uint8 val);
                    193:     void   rom_load();
                    194:         
                    195:     bool   handle_msgs(void);  /* i860 thread message handler */
                    196:     void   send_msg(int msg);
                    197: 
                    198:     void   set_blank_state(int src, bool state);
                    199:     void   video_dev_write(Uint8 addr, Uint32 step, Uint8 data);
                    200: 
                    201:     bool   dbg_cmd(const char* buf);
                    202: 
                    203:     virtual ~NextDimension();
                    204: };
                    205: 
                    206: #endif /* __cplusplus */
                    207: 
                    208: #endif /* __DIMENSION_H__ */

unix.superglobalmegacorp.com

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