add video mode initialization
This commit is contained in:
parent
d0fc7110b3
commit
4182178317
@ -81,52 +81,55 @@ jvm.iso: boot.bin main.bin zero.bin
|
|||||||
/=$(LIB)/COPYRIGH.TXT \
|
/=$(LIB)/COPYRIGH.TXT \
|
||||||
/=$(LIB)/ABSTRACT.TXT \
|
/=$(LIB)/ABSTRACT.TXT \
|
||||||
/=$(LIB)/BIBLIOGR.TXT \
|
/=$(LIB)/BIBLIOGR.TXT \
|
||||||
/=example/GdromDirectoryRecordHandler.class \
|
example/GdromDirectoryRecordHandler.class \
|
||||||
/=example/GdromTest.class \
|
example/GdromTest.class \
|
||||||
/=filesystem/iso9660/ByteParser.class \
|
filesystem/iso9660/ByteParser.class \
|
||||||
/=filesystem/iso9660/DirectoryRecord.class \
|
filesystem/iso9660/DirectoryRecord.class \
|
||||||
/=filesystem/iso9660/ExtentReader.class \
|
filesystem/iso9660/ExtentReader.class \
|
||||||
/=filesystem/iso9660/PrimaryVolumeDescriptor.class \
|
filesystem/iso9660/PrimaryVolumeDescriptor.class \
|
||||||
/=filesystem/iso9660/VolumeParser.class \
|
filesystem/iso9660/VolumeParser.class \
|
||||||
/=java/io/PrintStream.class \
|
java/io/PrintStream.class \
|
||||||
/=java/lang/DecimalDigits.class \
|
java/lang/DecimalDigits.class \
|
||||||
/=java/lang/Integer.class \
|
java/lang/Integer.class \
|
||||||
/=java/lang/Object.class \
|
java/lang/Object.class \
|
||||||
/=java/lang/String.class \
|
java/lang/String.class \
|
||||||
/=java/lang/System.class \
|
java/lang/System.class \
|
||||||
/=java/misc/Memory.class \
|
java/misc/Memory.class \
|
||||||
/=jvm/internal/Loader.class \
|
jvm/internal/Loader.class \
|
||||||
/=sega/dreamcast/gdrom/G1IF.class \
|
sega/dreamcast/gdrom/G1IF.class \
|
||||||
/=sega/dreamcast/gdrom/GdromBits.class \
|
sega/dreamcast/gdrom/GdromIF.class \
|
||||||
/=sega/dreamcast/gdrom/Gdrom.class \
|
sega/dreamcast/gdrom/GdromBits.class \
|
||||||
/=sega/dreamcast/gdrom/GdromExtentReader.class \
|
sega/dreamcast/gdrom/Gdrom.class \
|
||||||
/=sega/dreamcast/gdrom/GdromCommandPacketFormat_cd_read.class \
|
sega/dreamcast/gdrom/GdromExtentReader.class \
|
||||||
/=sega/dreamcast/gdrom/GdromCommandPacketFormat.class \
|
sega/dreamcast/gdrom/GdromCommandPacketFormat_cd_read.class \
|
||||||
/=sega/dreamcast/gdrom/GdromCommandPacketFormat_get_toc.class \
|
sega/dreamcast/gdrom/GdromCommandPacketFormat.class \
|
||||||
/=sega/dreamcast/gdrom/GdromCommandPacketInterface.class \
|
sega/dreamcast/gdrom/GdromCommandPacketFormat_get_toc.class \
|
||||||
/=sega/dreamcast/gdrom/GdromProtocol.class \
|
sega/dreamcast/gdrom/GdromCommandPacketInterface.class \
|
||||||
/=Main.class \
|
sega/dreamcast/gdrom/GdromProtocol.class \
|
||||||
/=example/DreamcastVideo2.class \
|
Main.class \
|
||||||
/=model/FacePTN.class \
|
example/DreamcastVideo2.class \
|
||||||
/=model/ModelObject.class \
|
model/FacePTN.class \
|
||||||
/=model/UntitledModel.class \
|
model/ModelObject.class \
|
||||||
/=model/Vec2.class \
|
model/UntitledModel.class \
|
||||||
/=model/Vec3.class \
|
model/Vec2.class \
|
||||||
/=sega/dreamcast/holly/Background.class \
|
model/Vec3.class \
|
||||||
/=sega/dreamcast/holly/CoreBits.class \
|
sega/dreamcast/holly/Background.class \
|
||||||
/=sega/dreamcast/holly/Core.class \
|
sega/dreamcast/holly/CoreBits.class \
|
||||||
/=sega/dreamcast/holly/ISPTSP.class \
|
sega/dreamcast/holly/Core.class \
|
||||||
/=sega/dreamcast/holly/RegionArray.class \
|
sega/dreamcast/holly/VideoOutput.class \
|
||||||
/=sega/dreamcast/holly/RegionArray_OPBSize.class \
|
sega/dreamcast/holly/VideoOutputMode.class \
|
||||||
/=sega/dreamcast/holly/TABits.class \
|
sega/dreamcast/holly/ISPTSP.class \
|
||||||
/=sega/dreamcast/holly/TAFIFOPolygonConverter.class \
|
sega/dreamcast/holly/RegionArray.class \
|
||||||
/=sega/dreamcast/holly/TAGlobalParameter.class \
|
sega/dreamcast/holly/RegionArray_OPBSize.class \
|
||||||
/=sega/dreamcast/holly/TAGlobalParameter_end_of_list.class \
|
sega/dreamcast/holly/TABits.class \
|
||||||
/=sega/dreamcast/holly/TAGlobalParameter_polygon_type_0.class \
|
sega/dreamcast/holly/TAFIFOPolygonConverter.class \
|
||||||
/=sega/dreamcast/holly/TAVertexParameter.class \
|
sega/dreamcast/holly/TAGlobalParameter.class \
|
||||||
/=sega/dreamcast/holly/TAVertexParameter_polygon_type_3.class \
|
sega/dreamcast/holly/TAGlobalParameter_end_of_list.class \
|
||||||
/=sega/dreamcast/holly/TextureMemoryAllocation.class \
|
sega/dreamcast/holly/TAGlobalParameter_polygon_type_0.class \
|
||||||
/=java/lang/Math.class
|
sega/dreamcast/holly/TAVertexParameter.class \
|
||||||
|
sega/dreamcast/holly/TAVertexParameter_polygon_type_3.class \
|
||||||
|
sega/dreamcast/holly/TextureMemoryAllocation.class \
|
||||||
|
java/lang/Math.class
|
||||||
|
|
||||||
main.elf: LDSCRIPT = $(LIB)/main.lds
|
main.elf: LDSCRIPT = $(LIB)/main.lds
|
||||||
main.elf: $(START_OBJ) $(OBJ) $(MAIN_OBJ) $(MAIN_DREAMCAST_OBJ) $(LIBGCC_OBJ) $(CLASS_PATH)
|
main.elf: $(START_OBJ) $(OBJ) $(MAIN_OBJ) $(MAIN_DREAMCAST_OBJ) $(LIBGCC_OBJ) $(CLASS_PATH)
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "java/lang/System.class.h"
|
#include "java/lang/System.class.h"
|
||||||
#include "java/misc/Memory.class.h"
|
#include "java/misc/Memory.class.h"
|
||||||
#include "sega/dreamcast/gdrom/G1IF.class.h"
|
#include "sega/dreamcast/gdrom/G1IF.class.h"
|
||||||
|
#include "sega/dreamcast/gdrom/GdromIF.class.h"
|
||||||
#include "sega/dreamcast/gdrom/GdromBits.class.h"
|
#include "sega/dreamcast/gdrom/GdromBits.class.h"
|
||||||
#include "sega/dreamcast/gdrom/Gdrom.class.h"
|
#include "sega/dreamcast/gdrom/Gdrom.class.h"
|
||||||
#include "sega/dreamcast/gdrom/GdromExtentReader.class.h"
|
#include "sega/dreamcast/gdrom/GdromExtentReader.class.h"
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
(const uint8_t *)&_binary_java_lang_System_class_start,
|
(const uint8_t *)&_binary_java_lang_System_class_start,
|
||||||
(const uint8_t *)&_binary_java_misc_Memory_class_start,
|
(const uint8_t *)&_binary_java_misc_Memory_class_start,
|
||||||
(const uint8_t *)&_binary_sega_dreamcast_gdrom_G1IF_class_start,
|
(const uint8_t *)&_binary_sega_dreamcast_gdrom_G1IF_class_start,
|
||||||
|
(const uint8_t *)&_binary_sega_dreamcast_gdrom_GdromIF_class_start,
|
||||||
(const uint8_t *)&_binary_sega_dreamcast_gdrom_GdromBits_class_start,
|
(const uint8_t *)&_binary_sega_dreamcast_gdrom_GdromBits_class_start,
|
||||||
(const uint8_t *)&_binary_sega_dreamcast_gdrom_Gdrom_class_start,
|
(const uint8_t *)&_binary_sega_dreamcast_gdrom_Gdrom_class_start,
|
||||||
(const uint8_t *)&_binary_sega_dreamcast_gdrom_GdromExtentReader_class_start,
|
(const uint8_t *)&_binary_sega_dreamcast_gdrom_GdromExtentReader_class_start,
|
||||||
|
@ -14,6 +14,7 @@ CLASS_PATH = \
|
|||||||
java/lang/System.class.o \
|
java/lang/System.class.o \
|
||||||
java/misc/Memory.class.o \
|
java/misc/Memory.class.o \
|
||||||
sega/dreamcast/gdrom/G1IF.class.o \
|
sega/dreamcast/gdrom/G1IF.class.o \
|
||||||
|
sega/dreamcast/gdrom/GdromIF.class.o \
|
||||||
sega/dreamcast/gdrom/GdromBits.class.o \
|
sega/dreamcast/gdrom/GdromBits.class.o \
|
||||||
sega/dreamcast/gdrom/Gdrom.class.o \
|
sega/dreamcast/gdrom/Gdrom.class.o \
|
||||||
sega/dreamcast/gdrom/GdromExtentReader.class.o \
|
sega/dreamcast/gdrom/GdromExtentReader.class.o \
|
||||||
|
@ -12,6 +12,8 @@ import sega.dreamcast.holly.TextureMemoryAllocation;
|
|||||||
import sega.dreamcast.holly.ISPTSP;
|
import sega.dreamcast.holly.ISPTSP;
|
||||||
import sega.dreamcast.holly.TAVertexParameter;
|
import sega.dreamcast.holly.TAVertexParameter;
|
||||||
import sega.dreamcast.holly.TAGlobalParameter;
|
import sega.dreamcast.holly.TAGlobalParameter;
|
||||||
|
import sega.dreamcast.holly.VideoOutput;
|
||||||
|
import sega.dreamcast.holly.VideoOutputMode;
|
||||||
import sega.dreamcast.MemoryMap;
|
import sega.dreamcast.MemoryMap;
|
||||||
import model.UntitledModel;
|
import model.UntitledModel;
|
||||||
import model.Vec3;
|
import model.Vec3;
|
||||||
@ -299,7 +301,8 @@ public class DreamcastVideo2 {
|
|||||||
|
|
||||||
while ((CoreBits.spg_status__vsync(Memory.getU4(Holly.SPG_STATUS)) == 0));
|
while ((CoreBits.spg_status__vsync(Memory.getU4(Holly.SPG_STATUS)) == 0));
|
||||||
while (!(CoreBits.spg_status__vsync(Memory.getU4(Holly.SPG_STATUS)) == 0));
|
while (!(CoreBits.spg_status__vsync(Memory.getU4(Holly.SPG_STATUS)) == 0));
|
||||||
Core.fb_r_enable();
|
VideoOutput.set_framebuffer_resolution(640, 480);
|
||||||
|
VideoOutput.set_mode(VideoOutputMode.vga);
|
||||||
Memory.putU4(Holly.FB_R_SOF1, TextureMemoryAllocation.framebuffer_start[0]);
|
Memory.putU4(Holly.FB_R_SOF1, TextureMemoryAllocation.framebuffer_start[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,7 +341,6 @@ public class DreamcastVideo2 {
|
|||||||
TextureMemoryAllocation.object_list_start[0]);
|
TextureMemoryAllocation.object_list_start[0]);
|
||||||
|
|
||||||
Core.init();
|
Core.init();
|
||||||
Core.fb_init(framebuffer_width, framebuffer_height);
|
|
||||||
|
|
||||||
boot_splash(ta_alloc, opb_size_total);
|
boot_splash(ta_alloc, opb_size_total);
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package example;
|
|||||||
|
|
||||||
import sega.dreamcast.gdrom.GdromExtentReader;
|
import sega.dreamcast.gdrom.GdromExtentReader;
|
||||||
import sega.dreamcast.gdrom.GdromProtocol;
|
import sega.dreamcast.gdrom.GdromProtocol;
|
||||||
|
import sega.dreamcast.gdrom.GdromIF;
|
||||||
import sega.dreamcast.gdrom.G1IF;
|
import sega.dreamcast.gdrom.G1IF;
|
||||||
import java.misc.Memory;
|
import java.misc.Memory;
|
||||||
import filesystem.iso9660.VolumeParser;
|
import filesystem.iso9660.VolumeParser;
|
||||||
@ -25,19 +26,6 @@ class GdromDirectoryRecordHandler implements DirectoryRecordHandler {
|
|||||||
this.addresses_ix = 0;
|
this.addresses_ix = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// transfer_length is in bytes
|
|
||||||
public static void startG1DMA(int start_address, int transfer_length) {
|
|
||||||
int gdstar = start_address & ~(0b111 << 29);
|
|
||||||
|
|
||||||
Memory.putU4(G1IF.GDAPRO, 0x8843407F);
|
|
||||||
Memory.putU4(G1IF.G1GDRC, 0x00001001);
|
|
||||||
Memory.putU4(G1IF.GDSTAR, gdstar);
|
|
||||||
Memory.putU4(G1IF.GDLEN, transfer_length);
|
|
||||||
Memory.putU4(G1IF.GDDIR, 1);
|
|
||||||
Memory.putU4(G1IF.GDEN, 1);
|
|
||||||
Memory.putU4(G1IF.GDST, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isClassExt(DirectoryRecord dr) {
|
public boolean isClassExt(DirectoryRecord dr) {
|
||||||
int length = dr.lengthOfFileIdentifier();
|
int length = dr.lengthOfFileIdentifier();
|
||||||
|
|
||||||
@ -76,9 +64,8 @@ class GdromDirectoryRecordHandler implements DirectoryRecordHandler {
|
|||||||
int sectors = length >> 11; // division by 2048
|
int sectors = length >> 11; // division by 2048
|
||||||
GdromProtocol.cdReadDMA(extent + 150, sectors);
|
GdromProtocol.cdReadDMA(extent + 150, sectors);
|
||||||
|
|
||||||
startG1DMA(address, length);
|
GdromIF.startG1DMA(address, length);
|
||||||
|
|
||||||
//System.out.println("wait gdst");
|
|
||||||
while ((Memory.getU4(G1IF.GDST) & 1) != 0);
|
while ((Memory.getU4(G1IF.GDST) & 1) != 0);
|
||||||
System.out.println("transfer complete");
|
System.out.println("transfer complete");
|
||||||
|
|
||||||
@ -101,7 +88,6 @@ class GdromTest {
|
|||||||
GdromExtentReader reader = new GdromExtentReader();
|
GdromExtentReader reader = new GdromExtentReader();
|
||||||
|
|
||||||
VolumeParser parser = new VolumeParser(data_track_fad - 150, reader, handler);
|
VolumeParser parser = new VolumeParser(data_track_fad - 150, reader, handler);
|
||||||
System.out.println("::parser parse::");
|
|
||||||
parser.parse();
|
parser.parse();
|
||||||
|
|
||||||
Loader.load(buffer_addresses, handler.addresses_ix);
|
Loader.load(buffer_addresses, handler.addresses_ix);
|
||||||
|
@ -86,6 +86,7 @@ declare -a boot_classes=(
|
|||||||
java/lang/System.class
|
java/lang/System.class
|
||||||
java/misc/Memory.class
|
java/misc/Memory.class
|
||||||
sega/dreamcast/gdrom/G1IF.class
|
sega/dreamcast/gdrom/G1IF.class
|
||||||
|
sega/dreamcast/gdrom/GdromIF.class
|
||||||
sega/dreamcast/gdrom/GdromBits.class
|
sega/dreamcast/gdrom/GdromBits.class
|
||||||
sega/dreamcast/gdrom/Gdrom.class
|
sega/dreamcast/gdrom/Gdrom.class
|
||||||
sega/dreamcast/gdrom/GdromExtentReader.class
|
sega/dreamcast/gdrom/GdromExtentReader.class
|
||||||
@ -129,6 +130,8 @@ declare -a application_classes=(
|
|||||||
sega/dreamcast/holly/Background.class
|
sega/dreamcast/holly/Background.class
|
||||||
sega/dreamcast/holly/Core.class
|
sega/dreamcast/holly/Core.class
|
||||||
sega/dreamcast/holly/CoreBits.class
|
sega/dreamcast/holly/CoreBits.class
|
||||||
|
sega/dreamcast/holly/VideoOutput.class
|
||||||
|
sega/dreamcast/holly/VideoOutputMode.class
|
||||||
sega/dreamcast/holly/ISPTSP.class
|
sega/dreamcast/holly/ISPTSP.class
|
||||||
sega/dreamcast/holly/RegionArray.class
|
sega/dreamcast/holly/RegionArray.class
|
||||||
sega/dreamcast/holly/RegionArray_OPBSize.class
|
sega/dreamcast/holly/RegionArray_OPBSize.class
|
||||||
|
19
sega/dreamcast/gdrom/GdromIF.java
Normal file
19
sega/dreamcast/gdrom/GdromIF.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package sega.dreamcast.gdrom;
|
||||||
|
|
||||||
|
import sega.dreamcast.gdrom.G1IF;
|
||||||
|
import java.misc.Memory;
|
||||||
|
|
||||||
|
public class GdromIF {
|
||||||
|
// transfer_length is in bytes
|
||||||
|
public static void startG1DMA(int start_address, int transfer_length) {
|
||||||
|
int gdstar = start_address & ~(0b111 << 29);
|
||||||
|
|
||||||
|
Memory.putU4(G1IF.GDAPRO, 0x8843407F);
|
||||||
|
Memory.putU4(G1IF.G1GDRC, 0x00001001);
|
||||||
|
Memory.putU4(G1IF.GDSTAR, gdstar);
|
||||||
|
Memory.putU4(G1IF.GDLEN, transfer_length);
|
||||||
|
Memory.putU4(G1IF.GDDIR, 1);
|
||||||
|
Memory.putU4(G1IF.GDEN, 1);
|
||||||
|
Memory.putU4(G1IF.GDST, 1);
|
||||||
|
}
|
||||||
|
}
|
@ -43,52 +43,6 @@ public class Core {
|
|||||||
Memory.putU4(Holly.SOFTRESET, 0);
|
Memory.putU4(Holly.SOFTRESET, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void fb_init(int x_size, int y_size) {
|
|
||||||
int y_coeff = CoreBits.y_coeff__coefficient_1(0x80)
|
|
||||||
| CoreBits.y_coeff__coefficient_0_2(0x40);
|
|
||||||
|
|
||||||
// in 6.10 fixed point; 0x0400 is 1x vertical scale
|
|
||||||
int scaler_ctl = CoreBits.scaler_ctl__vertical_scale_factor(0x0400);
|
|
||||||
|
|
||||||
int fb_burstctrl = CoreBits.fb_burstctrl__wr_burst(0x09)
|
|
||||||
| CoreBits.fb_burstctrl__vid_lat(0x3f)
|
|
||||||
| CoreBits.fb_burstctrl__vid_burst(0x39);
|
|
||||||
|
|
||||||
int fb_x_clip = CoreBits.fb_x_clip__fb_x_clip_max(x_size - 1)
|
|
||||||
| CoreBits.fb_x_clip__fb_x_clip_min(0);
|
|
||||||
|
|
||||||
int fb_y_clip = CoreBits.fb_y_clip__fb_y_clip_max(y_size - 1)
|
|
||||||
| CoreBits.fb_y_clip__fb_y_clip_min(0);
|
|
||||||
|
|
||||||
int fb_r_size = CoreBits.fb_r_size__fb_modulus(1)
|
|
||||||
| CoreBits.fb_r_size__fb_y_size(y_size - 3)
|
|
||||||
| CoreBits.fb_r_size__fb_x_size((x_size * 16) / 32 - 1);
|
|
||||||
|
|
||||||
int fb_w_ctrl = CoreBits.fb_w_ctrl__fb_dither
|
|
||||||
| CoreBits.fb_w_ctrl__fb_packmode__565_rgb_16bit;
|
|
||||||
|
|
||||||
Memory.putU4(Holly.Y_COEFF, y_coeff);
|
|
||||||
Memory.putU4(Holly.SCALER_CTL, scaler_ctl);
|
|
||||||
Memory.putU4(Holly.FB_BURSTCTRL, fb_burstctrl);
|
|
||||||
Memory.putU4(Holly.FB_X_CLIP, fb_x_clip);
|
|
||||||
Memory.putU4(Holly.FB_Y_CLIP, fb_y_clip);
|
|
||||||
Memory.putU4(Holly.FB_R_SIZE, fb_r_size);
|
|
||||||
Memory.putU4(Holly.FB_W_CTRL, fb_w_ctrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void fb_r_disable() {
|
|
||||||
Memory.putU4(Holly.FB_R_CTRL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void fb_r_enable() {
|
|
||||||
int fb_r_ctrl =
|
|
||||||
CoreBits.fb_r_ctrl__vclk_div__pclk_vclk_1
|
|
||||||
| CoreBits.fb_r_ctrl__fb_depth__565_rgb_16bit
|
|
||||||
| CoreBits.fb_r_ctrl__fb_enable;
|
|
||||||
|
|
||||||
Memory.putU4(Holly.FB_R_CTRL, fb_r_ctrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void start_render(int region_array_start,
|
public static void start_render(int region_array_start,
|
||||||
int isp_tsp_parameters_start,
|
int isp_tsp_parameters_start,
|
||||||
int background_start,
|
int background_start,
|
||||||
|
51
sega/dreamcast/holly/VideoOutput.java
Normal file
51
sega/dreamcast/holly/VideoOutput.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package sega.dreamcast.holly;
|
||||||
|
|
||||||
|
import java.misc.Memory;
|
||||||
|
|
||||||
|
public class VideoOutput {
|
||||||
|
public static void set_framebuffer_resolution(int x_size, int y_size)
|
||||||
|
{
|
||||||
|
Memory.putU4(Holly.Y_COEFF, CoreBits.y_coeff__coefficient_1(0x80)
|
||||||
|
| CoreBits.y_coeff__coefficient_0_2(0x40));
|
||||||
|
|
||||||
|
// in 6.10 fixed point; 0x0400 is 1x vertical scale
|
||||||
|
Memory.putU4(Holly.SCALER_CTL, CoreBits.scaler_ctl__vertical_scale_factor(0x0400));
|
||||||
|
|
||||||
|
Memory.putU4(Holly.FB_BURSTCTRL, CoreBits.fb_burstctrl__wr_burst(0x09)
|
||||||
|
| CoreBits.fb_burstctrl__vid_lat(0x3f)
|
||||||
|
| CoreBits.fb_burstctrl__vid_burst(0x39));
|
||||||
|
|
||||||
|
Memory.putU4(Holly.FB_X_CLIP, CoreBits.fb_x_clip__fb_x_clip_max(x_size - 1)
|
||||||
|
| CoreBits.fb_x_clip__fb_x_clip_min(0));
|
||||||
|
|
||||||
|
Memory.putU4(Holly.FB_Y_CLIP, CoreBits.fb_y_clip__fb_y_clip_max(y_size - 1)
|
||||||
|
| CoreBits.fb_y_clip__fb_y_clip_min(0));
|
||||||
|
|
||||||
|
Memory.putU4(Holly.FB_R_SIZE, CoreBits.fb_r_size__fb_modulus(1)
|
||||||
|
| CoreBits.fb_r_size__fb_y_size(y_size - 3)
|
||||||
|
| CoreBits.fb_r_size__fb_x_size((x_size * 16) / 32 - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void set_mode(VideoOutputMode mode)
|
||||||
|
{
|
||||||
|
Memory.putU4(Holly.SPG_LOAD, mode.spg_load);
|
||||||
|
Memory.putU4(Holly.SPG_HBLANK, mode.spg_hblank);
|
||||||
|
Memory.putU4(Holly.SPG_VBLANK, mode.spg_vblank);
|
||||||
|
Memory.putU4(Holly.SPG_WIDTH, mode.spg_width);
|
||||||
|
Memory.putU4(Holly.SPG_CONTROL, mode.spg_control);
|
||||||
|
|
||||||
|
Memory.putU4(Holly.VO_STARTX, mode.vo_startx);
|
||||||
|
Memory.putU4(Holly.VO_STARTY, mode.vo_starty);
|
||||||
|
Memory.putU4(Holly.VO_CONTROL, mode.vo_control);
|
||||||
|
|
||||||
|
Memory.putU4(Holly.SPG_HBLANK_INT, mode.spg_hblank_int);
|
||||||
|
Memory.putU4(Holly.SPG_VBLANK_INT, mode.spg_vblank_int);
|
||||||
|
|
||||||
|
Memory.putU4(Holly.FB_W_CTRL, CoreBits.fb_w_ctrl__fb_dither
|
||||||
|
| CoreBits.fb_w_ctrl__fb_packmode__565_rgb_16bit);
|
||||||
|
|
||||||
|
Memory.putU4(Holly.FB_R_CTRL, mode.fb_r_ctrl
|
||||||
|
| CoreBits.fb_r_ctrl__fb_depth__565_rgb_16bit
|
||||||
|
| CoreBits.fb_r_ctrl__fb_enable);
|
||||||
|
}
|
||||||
|
}
|
40
sega/dreamcast/holly/VideoOutputMode.java
Normal file
40
sega/dreamcast/holly/VideoOutputMode.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package sega.dreamcast.holly;
|
||||||
|
|
||||||
|
public class VideoOutputMode {
|
||||||
|
int fb_r_ctrl;
|
||||||
|
int spg_load;
|
||||||
|
int spg_hblank;
|
||||||
|
int spg_vblank;
|
||||||
|
int spg_width;
|
||||||
|
int spg_control;
|
||||||
|
int vo_startx;
|
||||||
|
int vo_starty;
|
||||||
|
int vo_control;
|
||||||
|
int spg_hblank_int;
|
||||||
|
int spg_vblank_int;
|
||||||
|
|
||||||
|
public static VideoOutputMode vga;
|
||||||
|
|
||||||
|
static {
|
||||||
|
vga = new VideoOutputMode();
|
||||||
|
vga.fb_r_ctrl = CoreBits.fb_r_ctrl__vclk_div__pclk_vclk_1;
|
||||||
|
vga.spg_load = CoreBits.spg_load__vcount(0x20c)
|
||||||
|
| CoreBits.spg_load__hcount(0x359);
|
||||||
|
vga.spg_hblank = CoreBits.spg_hblank__hbend(0x07e)
|
||||||
|
| CoreBits.spg_hblank__hbstart(0x345);
|
||||||
|
vga.spg_vblank = CoreBits.spg_vblank__vbend(0x028)
|
||||||
|
| CoreBits.spg_vblank__vbstart(0x208);
|
||||||
|
vga.spg_width = CoreBits.spg_width__eqwidth(0x00f)
|
||||||
|
| CoreBits.spg_width__bpwidth(0x319)
|
||||||
|
| CoreBits.spg_width__vswidth(0x3)
|
||||||
|
| CoreBits.spg_width__hswidth(0x3f);
|
||||||
|
vga.spg_control = CoreBits.spg_control__sync_direction__output;
|
||||||
|
vga.vo_startx = CoreBits.vo_startx__horizontal_start_position(0x0a8);
|
||||||
|
vga.vo_starty = CoreBits.vo_starty__vertical_start_position_on_field_2(0x028)
|
||||||
|
| CoreBits.vo_starty__vertical_start_position_on_field_1(0x028);
|
||||||
|
vga.vo_control = CoreBits.vo_control__pclk_delay(0x16);
|
||||||
|
vga.spg_hblank_int = CoreBits.spg_hblank_int__line_comp_val(0x345);
|
||||||
|
vga.spg_vblank_int = CoreBits.spg_vblank_int__vblank_out_interrupt_line_number(0x015)
|
||||||
|
| CoreBits.spg_vblank_int__vblank_in_interrupt_line_number(0x208);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user