more cleanup

This commit is contained in:
Jonathan Campbell 2017-12-19 12:43:46 -08:00
parent ae98781236
commit 1aa269035b
6 changed files with 108 additions and 65 deletions

24
include/pc98_dac.h Normal file
View File

@ -0,0 +1,24 @@
void pc98_update_palette(void);
void pc98_update_digpal(unsigned char ent);
void pc98_set_digpal_entry(unsigned char ent,unsigned char grb);
void pc98_set_digpal_pair(unsigned char start,unsigned char pair);
unsigned char pc98_get_digpal_pair(unsigned char start);
void VGA_DAC_UpdateColor( Bitu index );
extern uint32_t pc98_text_palette[8];
extern uint8_t pc98_16col_analog_rgb_palette_index;
extern uint8_t pc98_pal_analog[256*3]; /* G R B 0x0..0xF */
extern uint8_t pc98_pal_digital[8]; /* G R B 0x0..0x7 */
/* 4-bit to 6-bit expansion */
static inline unsigned char dac_4to6(unsigned char c4) {
/* a b c d . .
*
* becomes
*
* a b c d a b */
return (c4 << 2) | (c4 >> 2);
}

View File

@ -120,6 +120,8 @@ struct PC98_GDC_state {
typedef union pc98_tile egc_quad[4];
extern bool gdc_analog;
extern uint32_t pc98_text_palette[8];
extern struct PC98_GDC_state pc98_gdc[2];

View File

@ -12,6 +12,6 @@ libhardware_a_SOURCES = adlib.cpp dma.cpp gameblaster.cpp hardware.cpp iohandler
vga.cpp vga_attr.cpp vga_crtc.cpp vga_dac.cpp vga_draw.cpp vga_gfx.cpp vga_other.cpp \
vga_memory.cpp vga_misc.cpp vga_seq.cpp vga_xga.cpp vga_s3.cpp vga_tseng.cpp vga_paradise.cpp \
cmos.cpp disney.cpp gus.cpp mpu401.cpp ipx.cpp ipxserver.cpp ne2000.cpp hardopl.cpp dbopl.cpp innova.cpp dongle.cpp \
voodoo.cpp voodoo_interface.cpp voodoo_emu.cpp ps1_sound.cpp sn76496.h ide.cpp floppy.cpp voodoo_vogl.cpp voodoo_opengl.cpp nukedopl.cpp pc98.cpp vga_pc98_gdc.cpp
voodoo.cpp voodoo_interface.cpp voodoo_emu.cpp ps1_sound.cpp sn76496.h ide.cpp floppy.cpp voodoo_vogl.cpp voodoo_opengl.cpp nukedopl.cpp pc98.cpp vga_pc98_gdc.cpp vga_pc98_dac.cpp

View File

@ -115,7 +115,8 @@ am_libhardware_a_OBJECTS = adlib.$(OBJEXT) dma.$(OBJEXT) \
dongle.$(OBJEXT) voodoo.$(OBJEXT) voodoo_interface.$(OBJEXT) \
voodoo_emu.$(OBJEXT) ps1_sound.$(OBJEXT) ide.$(OBJEXT) \
floppy.$(OBJEXT) voodoo_vogl.$(OBJEXT) voodoo_opengl.$(OBJEXT) \
nukedopl.$(OBJEXT) pc98.$(OBJEXT) vga_pc98_gdc.$(OBJEXT)
nukedopl.$(OBJEXT) pc98.$(OBJEXT) vga_pc98_gdc.$(OBJEXT) \
vga_pc98_dac.$(OBJEXT)
libhardware_a_OBJECTS = $(am_libhardware_a_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@ -347,7 +348,7 @@ libhardware_a_SOURCES = adlib.cpp dma.cpp gameblaster.cpp hardware.cpp iohandler
vga.cpp vga_attr.cpp vga_crtc.cpp vga_dac.cpp vga_draw.cpp vga_gfx.cpp vga_other.cpp \
vga_memory.cpp vga_misc.cpp vga_seq.cpp vga_xga.cpp vga_s3.cpp vga_tseng.cpp vga_paradise.cpp \
cmos.cpp disney.cpp gus.cpp mpu401.cpp ipx.cpp ipxserver.cpp ne2000.cpp hardopl.cpp dbopl.cpp innova.cpp dongle.cpp \
voodoo.cpp voodoo_interface.cpp voodoo_emu.cpp ps1_sound.cpp sn76496.h ide.cpp floppy.cpp voodoo_vogl.cpp voodoo_opengl.cpp nukedopl.cpp pc98.cpp vga_pc98_gdc.cpp
voodoo.cpp voodoo_interface.cpp voodoo_emu.cpp ps1_sound.cpp sn76496.h ide.cpp floppy.cpp voodoo_vogl.cpp voodoo_opengl.cpp nukedopl.cpp pc98.cpp vga_pc98_gdc.cpp vga_pc98_dac.cpp
all: all-recursive
@ -439,6 +440,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vga_misc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vga_other.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vga_paradise.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vga_pc98_dac.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vga_pc98_gdc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vga_s3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vga_seq.Po@am__quote@

View File

@ -130,6 +130,7 @@
#include "util_units.h"
#include "control.h"
#include "pc98_cg.h"
#include "pc98_dac.h"
#include "pc98_gdc.h"
#include "pc98_gdc_const.h"
#include "mixer.h"
@ -705,9 +706,6 @@ void VGA_UnsetupSEQ(void);
#define seq(blah) vga.seq.blah
#define crtc(blah) vga.crtc.blah
void VGA_DAC_UpdateColor( Bitu index );
uint32_t pc98_text_palette[8];
uint8_t pc98_gdc_tile_counter=0;
uint8_t pc98_gdc_modereg=0;
uint8_t pc98_egc_access=0;
@ -718,17 +716,6 @@ uint8_t pc98_egc_maskef[2]; /* effective (Neko: egc.mask2) *
uint8_t pc98_egc_mask[2]; /* host given (Neko: egc.mask) */
bool GDC_vsync_interrupt = false;
uint8_t GDC_display_plane = false;
uint8_t pc98_16col_analog_rgb_palette_index = 0;
/* 4-bit to 6-bit expansion */
static inline unsigned char dac_4to6(unsigned char c4) {
/* a b c d . .
*
* becomes
*
* a b c d a b */
return (c4 << 2) | (c4 >> 2);
}
void pc98_crtc_write(Bitu port,Bitu val,Bitu iolen) {
switch (port&0xE) {
@ -781,28 +768,6 @@ uint8_t pc98_egc_rop = 0xF0;
uint8_t pc98_egc_foreground_color = 0;
uint8_t pc98_egc_background_color = 0;
void pc98_update_digpal(unsigned char ent);
uint8_t pc98_pal_analog[256*3]; /* G R B 0x0..0xF */
uint8_t pc98_pal_digital[8]; /* G R B 0x0..0x7 */
void pc98_update_palette(void) {
if (pc98_gdc_vramop & (1 << VOPBIT_ANALOG)) {
for (unsigned int i=0;i < 16;i++) {
vga.dac.rgb[i].green = dac_4to6(pc98_pal_analog[(3*i) + 0]&0xF); /* re-use VGA DAC */
vga.dac.rgb[i].red = dac_4to6(pc98_pal_analog[(3*i) + 1]&0xF); /* re-use VGA DAC */
vga.dac.rgb[i].blue = dac_4to6(pc98_pal_analog[(3*i) + 2]&0xF); /* re-use VGA DAC */
VGA_DAC_UpdateColor(i);
}
}
else {
for (unsigned int i=0;i < 8;i++) {
pc98_update_digpal(i);
VGA_DAC_UpdateColor(i);
}
}
}
/* Port 0x6A command handling */
void pc98_port6A_command_write(unsigned char b) {
switch (b) {
@ -918,32 +883,6 @@ void pc98_a1_write(Bitu port,Bitu val,Bitu iolen) {
};
}
void pc98_update_digpal(unsigned char ent) {
unsigned char grb = pc98_pal_digital[ent];
vga.dac.rgb[ent].green = (grb & 4) ? 0x3F : 0x00;
vga.dac.rgb[ent].red = (grb & 2) ? 0x3F : 0x00;
vga.dac.rgb[ent].blue = (grb & 1) ? 0x3F : 0x00;
VGA_DAC_UpdateColor(ent);
}
void pc98_set_digpal_entry(unsigned char ent,unsigned char grb) {
pc98_pal_digital[ent] = grb;
if (!gdc_analog)
pc98_update_digpal(ent);
}
void pc98_set_digpal_pair(unsigned char start,unsigned char pair) {
/* assume start 0..3 */
pc98_set_digpal_entry(start, pair >> 4);
pc98_set_digpal_entry(start+4,pair & 0xF);
}
unsigned char pc98_get_digpal_pair(unsigned char start) {
return (pc98_pal_digital[start] << 4) + pc98_pal_digital[start+4];
}
void pc98_wait_write(Bitu port,Bitu val,Bitu iolen) {
unsigned int wait_cycles = (unsigned int)(CPU_CycleMax * 0.0006); /* 0.6us = 0.0006ms */

View File

@ -0,0 +1,76 @@
#include "dosbox.h"
#include "setup.h"
#include "video.h"
#include "pic.h"
#include "vga.h"
#include "inout.h"
#include "programs.h"
#include "support.h"
#include "setup.h"
#include "timer.h"
#include "mem.h"
#include "util_units.h"
#include "control.h"
#include "pc98_cg.h"
#include "pc98_dac.h"
#include "pc98_gdc.h"
#include "pc98_gdc_const.h"
#include "mixer.h"
#include <string.h>
#include <stdlib.h>
#include <string>
#include <stdio.h>
using namespace std;
uint32_t pc98_text_palette[8];
uint8_t pc98_16col_analog_rgb_palette_index = 0;
uint8_t pc98_pal_analog[256*3]; /* G R B 0x0..0xF */
uint8_t pc98_pal_digital[8]; /* G R B 0x0..0x7 */
void pc98_update_palette(void) {
if (pc98_gdc_vramop & (1 << VOPBIT_ANALOG)) {
for (unsigned int i=0;i < 16;i++) {
vga.dac.rgb[i].green = dac_4to6(pc98_pal_analog[(3*i) + 0]&0xF); /* re-use VGA DAC */
vga.dac.rgb[i].red = dac_4to6(pc98_pal_analog[(3*i) + 1]&0xF); /* re-use VGA DAC */
vga.dac.rgb[i].blue = dac_4to6(pc98_pal_analog[(3*i) + 2]&0xF); /* re-use VGA DAC */
VGA_DAC_UpdateColor(i);
}
}
else {
for (unsigned int i=0;i < 8;i++) {
pc98_update_digpal(i);
VGA_DAC_UpdateColor(i);
}
}
}
void pc98_update_digpal(unsigned char ent) {
unsigned char grb = pc98_pal_digital[ent];
vga.dac.rgb[ent].green = (grb & 4) ? 0x3F : 0x00;
vga.dac.rgb[ent].red = (grb & 2) ? 0x3F : 0x00;
vga.dac.rgb[ent].blue = (grb & 1) ? 0x3F : 0x00;
VGA_DAC_UpdateColor(ent);
}
void pc98_set_digpal_entry(unsigned char ent,unsigned char grb) {
pc98_pal_digital[ent] = grb;
if (!gdc_analog)
pc98_update_digpal(ent);
}
void pc98_set_digpal_pair(unsigned char start,unsigned char pair) {
/* assume start 0..3 */
pc98_set_digpal_entry(start, pair >> 4);
pc98_set_digpal_entry(start+4,pair & 0xF);
}
unsigned char pc98_get_digpal_pair(unsigned char start) {
return (pc98_pal_digital[start] << 4) + pc98_pal_digital[start+4];
}