JavaCube: use StoreQueueBuffer.submit() method for store queue

This commit is contained in:
Zack Buhman 2025-01-20 22:18:58 -06:00
parent f2675e937d
commit 99b2e6c0f1
11 changed files with 254 additions and 47 deletions

View File

@ -28,3 +28,57 @@
#include "classes/sega/dreamcast/gdrom/GdromProtocol.class.h"
#include "classes/jvm/internal/Loader.class.h"
#include "classes/jvm/internal/Memory.class.h"
#include "classes/java/io/IOException.class.h"
#include "classes/java/nio/BufferUnderflowException.class.h"
#include "classes/java/nio/BufferOverflowException.class.h"
#include "classes/java/lang/IllegalStateException.class.h"
#include "classes/java/lang/UnsupportedOperationException.class.h"
#include "classes/java/lang/IllegalAccessException.class.h"
#include "classes/java/lang/IllegalArgumentException.class.h"
#include "classes/java/lang/SecurityException.class.h"
#include "classes/java/lang/InterruptedException.class.h"
#include "classes/java/lang/ArrayStoreException.class.h"
#include "classes/java/lang/IndexOutOfBoundsException.class.h"
#include "classes/java/lang/CloneNotSupportedException.class.h"
#include "classes/java/lang/ArithmeticException.class.h"
#include "classes/java/lang/StringIndexOutOfBoundsException.class.h"
#include "classes/java/lang/NegativeArraySizeException.class.h"
#include "classes/java/lang/RuntimeException.class.h"
#include "classes/java/lang/NullPointerException.class.h"
#include "classes/java/lang/NumberFormatException.class.h"
#include "classes/java/lang/ArrayIndexOutOfBoundsException.class.h"
#include "classes/java/lang/IllegalMonitorStateException.class.h"
#include "classes/java/lang/InstantiationException.class.h"
#include "classes/java/lang/Exception.class.h"
#include "classes/java/lang/IllegalThreadStateException.class.h"
#include "classes/java/lang/ClassCastException.class.h"
#include "classes/java/lang/ClassNotFoundException.class.h"
#include "classes/Main.class.h"
#include "classes/example/JavaCube.class.h"
#include "classes/example/JavaCubeDirectoryRecordHandler.class.h"
#include "classes/java/lang/Math.class.h"
#include "classes/java/nio/ByteBuffer.class.h"
#include "classes/java/nio/Buffer.class.h"
#include "classes/jvm/internal/SH4Intrinsic.class.h"
#include "classes/model/FacePTN.class.h"
#include "classes/model/ModelObject.class.h"
#include "classes/model/CubeModel.class.h"
#include "classes/model/Vec2.class.h"
#include "classes/model/Vec3.class.h"
#include "classes/sega/dreamcast/holly/Background.class.h"
#include "classes/sega/dreamcast/holly/Core.class.h"
#include "classes/sega/dreamcast/holly/CoreBits.class.h"
#include "classes/sega/dreamcast/holly/VideoOutput.class.h"
#include "classes/sega/dreamcast/holly/VideoOutputMode.class.h"
#include "classes/sega/dreamcast/holly/ISPTSP.class.h"
#include "classes/sega/dreamcast/holly/RegionArray.class.h"
#include "classes/sega/dreamcast/holly/RegionArray_OPBSize.class.h"
#include "classes/sega/dreamcast/holly/TABits.class.h"
#include "classes/sega/dreamcast/holly/TAFIFOPolygonConverter.class.h"
#include "classes/sega/dreamcast/holly/TAGlobalParameter.class.h"
#include "classes/sega/dreamcast/holly/TAGlobalParameter_end_of_list.class.h"
#include "classes/sega/dreamcast/holly/TAGlobalParameter_polygon_type_0.class.h"
#include "classes/sega/dreamcast/holly/TAVertexParameter.class.h"
#include "classes/sega/dreamcast/holly/TAVertexParameter_polygon_type_3.class.h"
#include "classes/sega/dreamcast/holly/TextureMemoryAllocation.class.h"
#include "classes/sega/dreamcast/sh7091/StoreQueueBuffer.class.h"

View File

@ -28,3 +28,57 @@
(const uint8_t *)&_binary_classes_sega_dreamcast_gdrom_GdromProtocol_class_start,
(const uint8_t *)&_binary_classes_jvm_internal_Loader_class_start,
(const uint8_t *)&_binary_classes_jvm_internal_Memory_class_start,
(const uint8_t *)&_binary_classes_java_io_IOException_class_start,
(const uint8_t *)&_binary_classes_java_nio_BufferUnderflowException_class_start,
(const uint8_t *)&_binary_classes_java_nio_BufferOverflowException_class_start,
(const uint8_t *)&_binary_classes_java_lang_IllegalStateException_class_start,
(const uint8_t *)&_binary_classes_java_lang_UnsupportedOperationException_class_start,
(const uint8_t *)&_binary_classes_java_lang_IllegalAccessException_class_start,
(const uint8_t *)&_binary_classes_java_lang_IllegalArgumentException_class_start,
(const uint8_t *)&_binary_classes_java_lang_SecurityException_class_start,
(const uint8_t *)&_binary_classes_java_lang_InterruptedException_class_start,
(const uint8_t *)&_binary_classes_java_lang_ArrayStoreException_class_start,
(const uint8_t *)&_binary_classes_java_lang_IndexOutOfBoundsException_class_start,
(const uint8_t *)&_binary_classes_java_lang_CloneNotSupportedException_class_start,
(const uint8_t *)&_binary_classes_java_lang_ArithmeticException_class_start,
(const uint8_t *)&_binary_classes_java_lang_StringIndexOutOfBoundsException_class_start,
(const uint8_t *)&_binary_classes_java_lang_NegativeArraySizeException_class_start,
(const uint8_t *)&_binary_classes_java_lang_RuntimeException_class_start,
(const uint8_t *)&_binary_classes_java_lang_NullPointerException_class_start,
(const uint8_t *)&_binary_classes_java_lang_NumberFormatException_class_start,
(const uint8_t *)&_binary_classes_java_lang_ArrayIndexOutOfBoundsException_class_start,
(const uint8_t *)&_binary_classes_java_lang_IllegalMonitorStateException_class_start,
(const uint8_t *)&_binary_classes_java_lang_InstantiationException_class_start,
(const uint8_t *)&_binary_classes_java_lang_Exception_class_start,
(const uint8_t *)&_binary_classes_java_lang_IllegalThreadStateException_class_start,
(const uint8_t *)&_binary_classes_java_lang_ClassCastException_class_start,
(const uint8_t *)&_binary_classes_java_lang_ClassNotFoundException_class_start,
(const uint8_t *)&_binary_classes_Main_class_start,
(const uint8_t *)&_binary_classes_example_JavaCube_class_start,
(const uint8_t *)&_binary_classes_example_JavaCubeDirectoryRecordHandler_class_start,
(const uint8_t *)&_binary_classes_java_lang_Math_class_start,
(const uint8_t *)&_binary_classes_java_nio_ByteBuffer_class_start,
(const uint8_t *)&_binary_classes_java_nio_Buffer_class_start,
(const uint8_t *)&_binary_classes_jvm_internal_SH4Intrinsic_class_start,
(const uint8_t *)&_binary_classes_model_FacePTN_class_start,
(const uint8_t *)&_binary_classes_model_ModelObject_class_start,
(const uint8_t *)&_binary_classes_model_CubeModel_class_start,
(const uint8_t *)&_binary_classes_model_Vec2_class_start,
(const uint8_t *)&_binary_classes_model_Vec3_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_Background_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_Core_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_CoreBits_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_VideoOutput_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_VideoOutputMode_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_ISPTSP_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_RegionArray_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_RegionArray_OPBSize_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TABits_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TAFIFOPolygonConverter_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TAGlobalParameter_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TAGlobalParameter_end_of_list_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TAGlobalParameter_polygon_type_0_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TAVertexParameter_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TAVertexParameter_polygon_type_3_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_holly_TextureMemoryAllocation_class_start,
(const uint8_t *)&_binary_classes_sega_dreamcast_sh7091_StoreQueueBuffer_class_start,

View File

@ -19,7 +19,8 @@ void main()
int class_file_buffers_length = (sizeof (class_file_buffers)) / (sizeof (class_file_buffers[0]));
//const uint8_t * main_class = (const uint8_t *)"example/JavaCube";
const uint8_t * main_class = (const uint8_t *)"example/GdromClassLoader";
//const uint8_t * main_class = (const uint8_t *)"example/GdromClassLoader";
const uint8_t * main_class = (const uint8_t *)"Main";
int main_class_length = string_length((const char *)main_class);
for (int i = 0; i < main_class_length; i++)

View File

@ -82,37 +82,37 @@ const static struct native_method native_method[] = {
},
{
.class_name = "jvm/internal/Memory",
.method_name = "putU4",
.method_name = "putUnalignedU4",
.method_descriptor = "(IIZ)V",
.func = native_jvm_internal_memory_putUnalignedU4_3,
},
{
.class_name = "jvm/internal/Memory",
.method_name = "putU2",
.method_name = "putUnalignedU2",
.method_descriptor = "(ISZ)V",
.func = native_jvm_internal_memory_putUnalignedU2_3,
},
{
.class_name = "jvm/internal/Memory",
.method_name = "putF4",
.method_name = "putUnalignedF4",
.method_descriptor = "(IFZ)V",
.func = native_jvm_internal_memory_putUnalignedU4_3,
},
{
.class_name = "jvm/internal/Memory",
.method_name = "getU4",
.method_name = "getUnalignedU4",
.method_descriptor = "(IZ)I",
.func = native_jvm_internal_memory_getUnalignedU4_2,
},
{
.class_name = "jvm/internal/Memory",
.method_name = "getU2",
.method_name = "getUnalignedU2",
.method_descriptor = "(IZ)S",
.func = native_jvm_internal_memory_getUnalignedU2_2,
},
{
.class_name = "jvm/internal/Memory",
.method_name = "getF4",
.method_name = "getUnalignedF4",
.method_descriptor = "(IZ)F",
.func = native_jvm_internal_memory_getUnalignedU4_2,
},

View File

@ -35,6 +35,10 @@ class GdromDirectoryRecordHandler implements DirectoryRecordHandler {
byte[] buf = dr.array;
int offset = dr.offset + DirectoryRecord.FILE_IDENTIFIER_START;
for (int i = offset; i < offset + length; i++)
System.out.print(buf[i]);
System.out.println();
int ix = 0;
for (int i = length - 5; i < length; i++) {
if (buf[offset + i] != class_ext[ix]) {

View File

@ -236,7 +236,7 @@ public class JavaCube {
transform_vertex(position, texture, face[i]);
vt0.base_color = colors[n];
Memory.putSQ1(vt0, MemoryMap.ta_fifo_polygon_converter);
vt0.submit();
}
}
@ -251,21 +251,21 @@ public class JavaCube {
vt0.y = quad[0].y;
vt0.u = quad_uv[0].x;
vt0.v = quad_uv[0].y;
Memory.putSQ1(vt0, MemoryMap.ta_fifo_polygon_converter);
vt0.submit();
vt0.parameter_control_word = TAParameter.para_control__para_type__vertex_parameter;
vt0.x = quad[1].x;
vt0.y = quad[1].y;
vt0.u = quad_uv[1].x;
vt0.v = quad_uv[1].y;
Memory.putSQ1(vt0, MemoryMap.ta_fifo_polygon_converter);
vt0.submit();
vt0.parameter_control_word = TAParameter.para_control__para_type__vertex_parameter;
vt0.x = quad[3].x;
vt0.y = quad[3].y;
vt0.u = quad_uv[3].x;
vt0.v = quad_uv[3].y;
Memory.putSQ1(vt0, MemoryMap.ta_fifo_polygon_converter);
vt0.submit();
vt0.parameter_control_word = TAParameter.para_control__para_type__vertex_parameter
| TAParameter.para_control__end_of_strip;
@ -273,12 +273,12 @@ public class JavaCube {
vt0.y = quad[2].y;
vt0.u = quad_uv[2].x;
vt0.v = quad_uv[2].y;
Memory.putSQ1(vt0, MemoryMap.ta_fifo_polygon_converter);
vt0.submit();
}
public static void transfer_cube_scene() {
// global parameters
Memory.putSQ1(gt0[0], MemoryMap.ta_fifo_polygon_converter);
gt0[0].submit();
// triangle parameters
ModelObject obj = CubeModel.objects[0];
@ -287,18 +287,18 @@ public class JavaCube {
}
// end of list
Memory.putSQ1(eol, MemoryMap.ta_fifo_polygon_converter);
eol.submit();
}
public static void transfer_splash_scene() {
// global parameters
Memory.putSQ1(gt0[1], MemoryMap.ta_fifo_polygon_converter);
gt0[1].submit();
// quad parameters
transform_quad();
// end of list
Memory.putSQ1(eol, MemoryMap.ta_fifo_polygon_converter);
eol.submit();
}
public static void transfer_textures() {
@ -361,7 +361,9 @@ public class JavaCube {
framebuffer_width / 32,
framebuffer_height / 32);
transfer_splash_scene();
System.out.println("wait_tl");
TAFIFOPolygonConverter.wait_translucent_list();
System.out.println("wait_tl_end");
Core.start_render(TextureMemoryAllocation.region_array_start[0],
TextureMemoryAllocation.isp_tsp_parameters_start[0],
@ -378,8 +380,6 @@ public class JavaCube {
}
public static void main() {
System.out.println(Memory.getU4(Holly.FB_R_SOF1));
int ta_alloc =
TABits.ta_alloc_ctrl__opb_mode__increasing_addresses
| TABits.ta_alloc_ctrl__pt_opb__no_list
@ -400,9 +400,11 @@ public class JavaCube {
transfer_java_powered();
System.out.println("background");
Background.background(TextureMemoryAllocation.background_start[0],
0x00c0c0c0); // sega white
System.out.println("region_array");
int num_render_passes = opb_size.length;
RegionArray.region_array(framebuffer_width / 32,
framebuffer_height / 32,
@ -411,12 +413,14 @@ public class JavaCube {
TextureMemoryAllocation.region_array_start[0],
TextureMemoryAllocation.object_list_start[0]);
System.out.println("core_init");
Core.init();
for (int i = 0; i < 2; i++) {
boot_splash(ta_alloc, opb_size_total);
}
System.out.println("transfer_textures");
transfer_textures();
int background_color = 0xff100a00;
@ -432,6 +436,7 @@ public class JavaCube {
TextureMemoryAllocation.region_array_start[1],
TextureMemoryAllocation.object_list_start[1]);
System.out.println("main");
int core = 0;
int ta = 0;
while (true) {

View File

@ -7,7 +7,7 @@ public class StringIndexOutOfBoundsException extends IndexOutOfBoundsException {
}
public StringIndexOutOfBoundsException(int index) {
super(index);
super(Integer.toString(index));
}
public StringIndexOutOfBoundsException(String s) {

View File

@ -3,7 +3,7 @@ package java.nio;
public class BufferOverflowException
extends RuntimeException {
public BufferUnderflowException() {
public BufferOverflowException() {
super();
}
}

View File

@ -29,6 +29,7 @@ public class TAVertexParameter {
this.base_color = base_color;
}
public void submit() {
System.out.println(this.address);
putInt(0, parameter_control_word);
putFloat(4, x);
putFloat(8, y);

View File

@ -28,4 +28,58 @@ CLASS_PATH = \
classes/sega/dreamcast/gdrom/GdromCommandPacketInterface.class.o \
classes/sega/dreamcast/gdrom/GdromProtocol.class.o \
classes/jvm/internal/Loader.class.o \
classes/jvm/internal/Memory.class.o
classes/jvm/internal/Memory.class.o \
classes/java/io/IOException.class.o \
classes/java/nio/BufferUnderflowException.class.o \
classes/java/nio/BufferOverflowException.class.o \
classes/java/lang/IllegalStateException.class.o \
classes/java/lang/UnsupportedOperationException.class.o \
classes/java/lang/IllegalAccessException.class.o \
classes/java/lang/IllegalArgumentException.class.o \
classes/java/lang/SecurityException.class.o \
classes/java/lang/InterruptedException.class.o \
classes/java/lang/ArrayStoreException.class.o \
classes/java/lang/IndexOutOfBoundsException.class.o \
classes/java/lang/CloneNotSupportedException.class.o \
classes/java/lang/ArithmeticException.class.o \
classes/java/lang/StringIndexOutOfBoundsException.class.o \
classes/java/lang/NegativeArraySizeException.class.o \
classes/java/lang/RuntimeException.class.o \
classes/java/lang/NullPointerException.class.o \
classes/java/lang/NumberFormatException.class.o \
classes/java/lang/ArrayIndexOutOfBoundsException.class.o \
classes/java/lang/IllegalMonitorStateException.class.o \
classes/java/lang/InstantiationException.class.o \
classes/java/lang/Exception.class.o \
classes/java/lang/IllegalThreadStateException.class.o \
classes/java/lang/ClassCastException.class.o \
classes/java/lang/ClassNotFoundException.class.o \
classes/Main.class.o \
classes/example/JavaCube.class.o \
classes/example/JavaCubeDirectoryRecordHandler.class.o \
classes/java/lang/Math.class.o \
classes/java/nio/ByteBuffer.class.o \
classes/java/nio/Buffer.class.o \
classes/jvm/internal/SH4Intrinsic.class.o \
classes/model/FacePTN.class.o \
classes/model/ModelObject.class.o \
classes/model/CubeModel.class.o \
classes/model/Vec2.class.o \
classes/model/Vec3.class.o \
classes/sega/dreamcast/holly/Background.class.o \
classes/sega/dreamcast/holly/Core.class.o \
classes/sega/dreamcast/holly/CoreBits.class.o \
classes/sega/dreamcast/holly/VideoOutput.class.o \
classes/sega/dreamcast/holly/VideoOutputMode.class.o \
classes/sega/dreamcast/holly/ISPTSP.class.o \
classes/sega/dreamcast/holly/RegionArray.class.o \
classes/sega/dreamcast/holly/RegionArray_OPBSize.class.o \
classes/sega/dreamcast/holly/TABits.class.o \
classes/sega/dreamcast/holly/TAFIFOPolygonConverter.class.o \
classes/sega/dreamcast/holly/TAGlobalParameter.class.o \
classes/sega/dreamcast/holly/TAGlobalParameter_end_of_list.class.o \
classes/sega/dreamcast/holly/TAGlobalParameter_polygon_type_0.class.o \
classes/sega/dreamcast/holly/TAVertexParameter.class.o \
classes/sega/dreamcast/holly/TAVertexParameter_polygon_type_3.class.o \
classes/sega/dreamcast/holly/TextureMemoryAllocation.class.o \
classes/sega/dreamcast/sh7091/StoreQueueBuffer.class.o

View File

@ -103,6 +103,64 @@ declare -a boot_classes=(
sega/dreamcast/gdrom/GdromProtocol.class
jvm/internal/Loader.class
jvm/internal/Memory.class
# exceptions
java/io/IOException.class
java/nio/BufferUnderflowException.class
java/nio/BufferOverflowException.class
java/lang/IllegalStateException.class
java/lang/UnsupportedOperationException.class
java/lang/IllegalAccessException.class
java/lang/IllegalArgumentException.class
java/lang/SecurityException.class
java/lang/InterruptedException.class
java/lang/ArrayStoreException.class
java/lang/IndexOutOfBoundsException.class
java/lang/CloneNotSupportedException.class
java/lang/ArithmeticException.class
java/lang/StringIndexOutOfBoundsException.class
java/lang/NegativeArraySizeException.class
java/lang/RuntimeException.class
java/lang/NullPointerException.class
java/lang/NumberFormatException.class
java/lang/ArrayIndexOutOfBoundsException.class
java/lang/IllegalMonitorStateException.class
java/lang/InstantiationException.class
java/lang/Exception.class
java/lang/IllegalThreadStateException.class
java/lang/ClassCastException.class
java/lang/ClassNotFoundException.class
# application
Main.class
example/JavaCube.class
example/JavaCubeDirectoryRecordHandler.class
java/lang/Math.class
java/nio/ByteBuffer.class
java/nio/Buffer.class
jvm/internal/SH4Intrinsic.class
model/FacePTN.class
model/ModelObject.class
model/CubeModel.class
model/Vec2.class
model/Vec3.class
sega/dreamcast/holly/Background.class
sega/dreamcast/holly/Core.class
sega/dreamcast/holly/CoreBits.class
sega/dreamcast/holly/VideoOutput.class
sega/dreamcast/holly/VideoOutputMode.class
sega/dreamcast/holly/ISPTSP.class
sega/dreamcast/holly/RegionArray.class
sega/dreamcast/holly/RegionArray_OPBSize.class
sega/dreamcast/holly/TABits.class
sega/dreamcast/holly/TAFIFOPolygonConverter.class
sega/dreamcast/holly/TAGlobalParameter.class
sega/dreamcast/holly/TAGlobalParameter_end_of_list.class
sega/dreamcast/holly/TAGlobalParameter_polygon_type_0.class
sega/dreamcast/holly/TAVertexParameter.class
sega/dreamcast/holly/TAVertexParameter_polygon_type_3.class
sega/dreamcast/holly/TextureMemoryAllocation.class
sega/dreamcast/sh7091/StoreQueueBuffer.class
)
function boot_classes () {
@ -127,31 +185,7 @@ function boot_sources () {
}
declare -a application_classes=(
Main.class
example/JavaCube.class
example/JavaCubeDirectoryRecordHandler.class
model/FacePTN.class
model/ModelObject.class
model/CubeModel.class
model/Vec2.class
model/Vec3.class
sega/dreamcast/holly/Background.class
sega/dreamcast/holly/Core.class
sega/dreamcast/holly/CoreBits.class
sega/dreamcast/holly/VideoOutput.class
sega/dreamcast/holly/VideoOutputMode.class
sega/dreamcast/holly/ISPTSP.class
sega/dreamcast/holly/RegionArray.class
sega/dreamcast/holly/RegionArray_OPBSize.class
sega/dreamcast/holly/TABits.class
sega/dreamcast/holly/TAFIFOPolygonConverter.class
sega/dreamcast/holly/TAGlobalParameter.class
sega/dreamcast/holly/TAGlobalParameter_end_of_list.class
sega/dreamcast/holly/TAGlobalParameter_polygon_type_0.class
sega/dreamcast/holly/TAVertexParameter.class
sega/dreamcast/holly/TAVertexParameter_polygon_type_3.class
sega/dreamcast/holly/TextureMemoryAllocation.class
java/lang/Math.class
)
function application_classes () {
@ -185,7 +219,7 @@ function find_sources () {
set -eux
find . -name '*.class' -exec rm -f {} \;
find . -name '*.class' -not -path "./classes/java/*" -exec rm -f {} \;
make -f Makefile.dreamcast.mk $(boot_sources | java_to_class)
find . -name '*.class' | rename_class_files