From 88318fde3512a21dc15b60dfcb2e11abd45950f4 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sun, 29 Dec 2024 02:00:15 -0600 Subject: [PATCH] Java cube --- c/classpath.h | 4 +- c/classpath.inc.c | 4 +- c/execute.c | 2 +- c/frame.c | 18 + c/native.c | 20 +- c/native.h | 1 + c/resources.inc.c | 56 ++++ classpath.mk | 4 +- example/DreamcastVideo2.java | 316 +++++++++++++----- example/Vec2.class.h | 15 - generate.sh | 7 +- images/color_convert.py | 96 ++++++ images/java_cup.data | Bin 0 -> 524292 bytes images/java_cup.data.h | 15 + images/java_cup.png | Bin 0 -> 41208 bytes images/java_cup.xcf | Bin 0 -> 41034 bytes images/java_powered.data | Bin 0 -> 16388 bytes images/java_powered.data.h | 15 + images/java_powered.png | Bin 0 -> 16065 bytes images/java_powered.xcf | Bin 0 -> 9421 bytes images/java_text.data | Bin 0 -> 524292 bytes images/java_text.data.h | 15 + images/java_text.png | Bin 0 -> 26222 bytes images/java_text.xcf | Bin 0 -> 32002 bytes java.mk | 5 +- java/misc/Resource.class.h | 15 + java/misc/Resource.java | 8 + model/FacePNT.class.h | 15 - model/FacePNT.java | 13 - model/FacePTN.class.h | 15 + model/FacePTN.java | 13 + model/ModelObject.java | 2 +- model/UntitledModel.java | 82 ++--- model/Vec2.java | 2 +- model/Vec3.java | 2 +- p/Multiply.class.h | 15 - p/Native.class.h | 15 - p/TestResource.java | 12 + sega/dreamcast/holly/Core.java | 19 +- sega/dreamcast/holly/ISPTSP.java | 42 +-- .../holly/RegionArray$OPBSize.class.h | 15 - .../holly/TAFIFOPolygonConverter.java | 21 +- .../TAGlobalParameter$end_of_list.class.h | 15 - .../TAGlobalParameter$modifier_volume.class.h | 15 - .../TAGlobalParameter$object_list_set.class.h | 15 - .../TAGlobalParameter$polygon_type_0.class.h | 15 - .../TAGlobalParameter$polygon_type_1.class.h | 15 - .../TAGlobalParameter$polygon_type_2.class.h | 15 - .../TAGlobalParameter$polygon_type_3.class.h | 15 - .../TAGlobalParameter$polygon_type_4.class.h | 15 - .../holly/TAGlobalParameter$sprite.class.h | 15 - .../TAGlobalParameter$user_tile_clip.class.h | 15 - .../TAVertexParameter$modifier_volume.class.h | 15 - .../TAVertexParameter$polygon_type_0.class.h | 15 - .../TAVertexParameter$polygon_type_1.class.h | 15 - .../TAVertexParameter$polygon_type_10.class.h | 15 - .../TAVertexParameter$polygon_type_11.class.h | 15 - .../TAVertexParameter$polygon_type_12.class.h | 15 - .../TAVertexParameter$polygon_type_13.class.h | 15 - .../TAVertexParameter$polygon_type_14.class.h | 15 - .../TAVertexParameter$polygon_type_2.class.h | 15 - .../TAVertexParameter$polygon_type_3.class.h | 15 - .../TAVertexParameter$polygon_type_4.class.h | 15 - .../TAVertexParameter$polygon_type_5.class.h | 15 - .../TAVertexParameter$polygon_type_6.class.h | 15 - .../TAVertexParameter$polygon_type_7.class.h | 15 - .../TAVertexParameter$polygon_type_8.class.h | 15 - .../TAVertexParameter$polygon_type_9.class.h | 15 - .../TAVertexParameter$sprite_type_0.class.h | 15 - .../TAVertexParameter$sprite_type_1.class.h | 15 - 70 files changed, 644 insertions(+), 675 deletions(-) create mode 100644 c/resources.inc.c delete mode 100644 example/Vec2.class.h create mode 100644 images/color_convert.py create mode 100644 images/java_cup.data create mode 100644 images/java_cup.data.h create mode 100644 images/java_cup.png create mode 100644 images/java_cup.xcf create mode 100644 images/java_powered.data create mode 100644 images/java_powered.data.h create mode 100644 images/java_powered.png create mode 100644 images/java_powered.xcf create mode 100644 images/java_text.data create mode 100644 images/java_text.data.h create mode 100644 images/java_text.png create mode 100644 images/java_text.xcf create mode 100644 java/misc/Resource.class.h create mode 100644 java/misc/Resource.java delete mode 100644 model/FacePNT.class.h delete mode 100644 model/FacePNT.java create mode 100644 model/FacePTN.class.h create mode 100644 model/FacePTN.java delete mode 100644 p/Multiply.class.h delete mode 100644 p/Native.class.h create mode 100644 p/TestResource.java delete mode 100644 sega/dreamcast/holly/RegionArray$OPBSize.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$end_of_list.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$modifier_volume.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$object_list_set.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$polygon_type_0.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$polygon_type_1.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$polygon_type_2.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$polygon_type_3.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$polygon_type_4.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$sprite.class.h delete mode 100644 sega/dreamcast/holly/TAGlobalParameter$user_tile_clip.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$modifier_volume.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_0.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_1.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_10.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_11.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_12.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_13.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_14.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_2.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_3.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_4.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_5.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_6.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_7.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_8.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$polygon_type_9.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$sprite_type_0.class.h delete mode 100644 sega/dreamcast/holly/TAVertexParameter$sprite_type_1.class.h diff --git a/c/classpath.h b/c/classpath.h index 555f114..39cc847 100644 --- a/c/classpath.h +++ b/c/classpath.h @@ -1,6 +1,5 @@ #include "example/DreamcastVideo2.class.h" #include "example/DreamcastVideo.class.h" -#include "example/Vec2.class.h" #include "java/io/PrintStream.class.h" #include "java/lang/Integer.class.h" #include "java/lang/Math.class.h" @@ -8,7 +7,8 @@ #include "java/lang/String.class.h" #include "java/lang/System.class.h" #include "java/misc/Memory.class.h" -#include "model/FacePNT.class.h" +#include "java/misc/Resource.class.h" +#include "model/FacePTN.class.h" #include "model/ModelObject.class.h" #include "model/UntitledModel.class.h" #include "model/Vec2.class.h" diff --git a/c/classpath.inc.c b/c/classpath.inc.c index 046fef4..20e1398 100644 --- a/c/classpath.inc.c +++ b/c/classpath.inc.c @@ -1,6 +1,5 @@ (const uint8_t *)&_binary_example_DreamcastVideo2_class_start, (const uint8_t *)&_binary_example_DreamcastVideo_class_start, -(const uint8_t *)&_binary_example_Vec2_class_start, (const uint8_t *)&_binary_java_io_PrintStream_class_start, (const uint8_t *)&_binary_java_lang_Integer_class_start, (const uint8_t *)&_binary_java_lang_Math_class_start, @@ -8,7 +7,8 @@ (const uint8_t *)&_binary_java_lang_String_class_start, (const uint8_t *)&_binary_java_lang_System_class_start, (const uint8_t *)&_binary_java_misc_Memory_class_start, -(const uint8_t *)&_binary_model_FacePNT_class_start, +(const uint8_t *)&_binary_java_misc_Resource_class_start, +(const uint8_t *)&_binary_model_FacePTN_class_start, (const uint8_t *)&_binary_model_ModelObject_class_start, (const uint8_t *)&_binary_model_UntitledModel_class_start, (const uint8_t *)&_binary_model_Vec2_class_start, diff --git a/c/execute.c b/c/execute.c index 542050d..b75cef7 100644 --- a/c/execute.c +++ b/c/execute.c @@ -10,7 +10,7 @@ void op_aaload(struct vm * vm) { int32_t index = operand_stack_pop_u32(vm->current_frame); int32_t * arrayref = (int32_t *)operand_stack_pop_u32(vm->current_frame); - assert(arrayref[0] > 0 && index < arrayref[0]); + assertvm(vm, arrayref[0] > 0 && index < arrayref[0]); uint32_t * referencearray = (uint32_t *)&arrayref[1]; uint32_t value = referencearray[index]; operand_stack_push_u32(vm->current_frame, value); diff --git a/c/frame.c b/c/frame.c index 08e6608..b79d3b0 100644 --- a/c/frame.c +++ b/c/frame.c @@ -283,6 +283,24 @@ void vm_native_method_call(struct vm * vm, struct class_entry * class_entry, str } } + int java_misc_resource_length = 18; + bool java_misc_resource = + class_name_constant->utf8.length == java_misc_resource_length && + hash_table_key_equal(class_name_constant->utf8.bytes, (const uint8_t *)"java/misc/Resource", class_name_constant->utf8.length); + if (java_misc_resource) { + int getresource_length = 11; + bool getresource = + method_name_constant->utf8.length == getresource_length && + hash_table_key_equal(method_name_constant->utf8.bytes, (const uint8_t *)"getResource", method_name_constant->utf8.length); + if (getresource) { + assert(nargs == 1); + assert(return_type == '['); + uint32_t value = java_misc_resource_getresource_1(args); + operand_stack_push_u32(vm->current_frame, value); + return; + } + } + int java_io_printstream_length = 19; bool java_io_printstream = class_name_constant->utf8.length == java_io_printstream_length && diff --git a/c/native.c b/c/native.c index 7c33361..f464758 100644 --- a/c/native.c +++ b/c/native.c @@ -3,7 +3,7 @@ void native_java_io_printstream_write(uint32_t * arrayref) { - uint32_t length = arrayref[0]; + int32_t length = arrayref[0]; char * buf = (char *)&arrayref[1]; print_string(buf, length); } @@ -103,3 +103,21 @@ native_java_lang_math_cos_1(uint32_t * args) float value = __builtin_cosf(arg); return *((uint32_t *)&value); } + +#if defined(__dreamcast__) +#include "resources.inc.c" +#endif + +uint32_t java_misc_resource_getresource_1(uint32_t * args) +{ + uint32_t * objectref = (uint32_t *)args[0]; + int32_t * arrayref = (int32_t *)objectref[1]; + int32_t name_length = (int32_t)arrayref[0]; + uint8_t * name = (uint8_t *)&arrayref[1]; + #if defined(__dreamcast__) + uint32_t resource = find_resource(name, name_length); + return resource; + #else + return 0; + #endif +} diff --git a/c/native.h b/c/native.h index 85b0fb3..1ee0ce6 100644 --- a/c/native.h +++ b/c/native.h @@ -14,3 +14,4 @@ uint32_t native_java_misc_memory_getU1_1(uint32_t * args); void native_java_misc_memory_putSQ1_2(uint32_t * args); uint32_t native_java_lang_math_sin_1(uint32_t * args); uint32_t native_java_lang_math_cos_1(uint32_t * args); +uint32_t java_misc_resource_getresource_1(uint32_t * args); diff --git a/c/resources.inc.c b/c/resources.inc.c new file mode 100644 index 0000000..a87d552 --- /dev/null +++ b/c/resources.inc.c @@ -0,0 +1,56 @@ +#include "images/java_text.data.h" +#include "images/java_cup.data.h" +#include "images/java_powered.data.h" + +#include "hash_table.h" +#include "assert.h" + +struct resource { + const uint8_t * name; + int32_t name_length; + const int32_t * buf; + int32_t buf_length; +}; + +static struct resource resources[] = { + { + .name = (const uint8_t *)"images/java_text", + .name_length = 16, + .buf = (const int32_t *)&_binary_images_java_text_data_start, + .buf_length = (int32_t)&_binary_images_java_text_data_size + }, + { + .name = (const uint8_t *)"images/java_cup", + .name_length = 15, + .buf = (const int32_t *)&_binary_images_java_cup_data_start, + .buf_length = (int32_t)&_binary_images_java_cup_data_size + }, + { + .name = (const uint8_t *)"images/java_powered", + .name_length = 19, + .buf = (const int32_t *)&_binary_images_java_powered_data_start, + .buf_length = (int32_t)&_binary_images_java_powered_data_size + }, +}; + +static int resources_length = (sizeof (resources)) / (sizeof (resources[0])); + +static uint32_t find_resource(const uint8_t * name, int32_t name_length) +{ + for (int i = 0; i < resources_length; i++) { + struct resource * resource = &resources[i]; + if (resource->name_length != name_length) + continue; + if (hash_table_key_equal(resource->name, name, name_length)) { + //debugf("resource match: "); + //print_string((const char *)name, name_length); + //debugc('\n'); + uint32_t buf = (uint32_t)resource->buf; + // alignment check + assert((resource->buf_length & (~3)) == resource->buf_length); + assert((buf & ~(3)) == buf); + return buf; + } + } + return 0; +} diff --git a/classpath.mk b/classpath.mk index ca82771..c934e63 100644 --- a/classpath.mk +++ b/classpath.mk @@ -1,7 +1,6 @@ CLASS_PATH = \ example/DreamcastVideo2.class.o \ example/DreamcastVideo.class.o \ - example/Vec2.class.o \ java/io/PrintStream.class.o \ java/lang/Integer.class.o \ java/lang/Math.class.o \ @@ -9,7 +8,8 @@ CLASS_PATH = \ java/lang/String.class.o \ java/lang/System.class.o \ java/misc/Memory.class.o \ - model/FacePNT.class.o \ + java/misc/Resource.class.o \ + model/FacePTN.class.o \ model/ModelObject.class.o \ model/UntitledModel.class.o \ model/Vec2.class.o \ diff --git a/example/DreamcastVideo2.java b/example/DreamcastVideo2.java index 4d6334b..8df3640 100644 --- a/example/DreamcastVideo2.java +++ b/example/DreamcastVideo2.java @@ -12,31 +12,25 @@ import sega.dreamcast.holly.TextureMemoryAllocation; import sega.dreamcast.holly.ISPTSP; import sega.dreamcast.holly.TAVertexParameter; import sega.dreamcast.holly.TAGlobalParameter; -import sega.dreamcast.systembus.Systembus; -import sega.dreamcast.systembus.SystembusBits; import sega.dreamcast.MemoryMap; import model.UntitledModel; import model.Vec3; -import model.FacePNT; +import model.Vec2; +import model.FacePTN; import model.ModelObject; import java.misc.Memory; - -/* -class Vec2 { - float x; - float y; -} -*/ +import java.misc.Resource; class DreamcastVideo2 { static final int framebuffer_width = 640; static final int framebuffer_height = 480; - static TAGlobalParameter.polygon_type_0 gt0; - static TAVertexParameter.polygon_type_0 vt0; + static TAGlobalParameter.polygon_type_0[] gt0; + static TAVertexParameter.polygon_type_3 vt0; static TAGlobalParameter.end_of_list eol; - //static Vec2[] vtx; + static Vec2[] quad; + static Vec2[] quad_uv; static float theta; @@ -49,66 +43,102 @@ class DreamcastVideo2 { static { int parameter_control_word = TAParameter.para_control__para_type__polygon_or_modifier_volume - | TAParameter.para_control__list_type__opaque - | TAParameter.obj_control__col_type__packed_color; + | TAParameter.para_control__list_type__translucent + | TAParameter.obj_control__col_type__packed_color + | TAParameter.obj_control__texture; int isp_tsp_instruction_word = ISPTSP.isp_tsp_instruction_word__depth_compare_mode__greater | ISPTSP.isp_tsp_instruction_word__culling_mode__no_culling; - int tsp_instruction_word = ISPTSP.tsp_instruction_word__src_alpha_instr__one - | ISPTSP.tsp_instruction_word__dst_alpha_instr__zero - | ISPTSP.tsp_instruction_word__fog_control__no_fog; + int tsp_instruction_word = ISPTSP.tsp_instruction_word__src_alpha_instr__src_alpha + | ISPTSP.tsp_instruction_word__dst_alpha_instr__inverse_src_alpha + | ISPTSP.tsp_instruction_word__fog_control__no_fog + | ISPTSP.tsp_instruction_word__texture_u_size__512 + | ISPTSP.tsp_instruction_word__texture_v_size__1024 + | ISPTSP.tsp_instruction_word__use_alpha; + + int texture_address = TextureMemoryAllocation.texture_regions[1][0] + 512; + int texture_control_word = ISPTSP.texture_control_word__pixel_format__4444 + | ISPTSP.texture_control_word__scan_order__non_twiddled + | ISPTSP.texture_control_word__texture_address(texture_address / 8); - int texture_control_word = 0; int data_size_for_sort_dma = 0; int next_address_for_sort_dma = 0; - gt0 = new TAGlobalParameter.polygon_type_0(parameter_control_word, - isp_tsp_instruction_word, - tsp_instruction_word, - texture_control_word, - data_size_for_sort_dma, - next_address_for_sort_dma); + gt0 = new TAGlobalParameter.polygon_type_0[2]; + gt0[0] = new TAGlobalParameter.polygon_type_0(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + texture_control_word, + data_size_for_sort_dma, + next_address_for_sort_dma); - vt0 = new TAVertexParameter.polygon_type_0(0, // parameter_control_word + tsp_instruction_word = ISPTSP.tsp_instruction_word__src_alpha_instr__src_alpha + | ISPTSP.tsp_instruction_word__dst_alpha_instr__inverse_src_alpha + | ISPTSP.tsp_instruction_word__fog_control__no_fog + | ISPTSP.tsp_instruction_word__texture_u_size__128 + | ISPTSP.tsp_instruction_word__texture_v_size__64 + | ISPTSP.tsp_instruction_word__use_alpha; + + texture_address = TextureMemoryAllocation.texture_regions[1][0] + 512 + (512 * 512 * 2 * 2); + texture_control_word = ISPTSP.texture_control_word__pixel_format__4444 + | ISPTSP.texture_control_word__scan_order__non_twiddled + | ISPTSP.texture_control_word__texture_address(texture_address / 8); + + gt0[1] = new TAGlobalParameter.polygon_type_0(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + texture_control_word, + data_size_for_sort_dma, + next_address_for_sort_dma); + + vt0 = new TAVertexParameter.polygon_type_3(0, // parameter_control_word 0.0f, // x 0.0f, // y - 0.1f, // z - 0); // color + 0.0f, // z + 0.0f, // u + 0.0f, // v + 0, // color + 0); // offset_color eol = new TAGlobalParameter.end_of_list(TAParameter.para_control__para_type__end_of_list); - /* - vtx = new Vec2[3]; - for (int i = 0; i < 3; i++) - vtx[i] = new Vec2(); - vtx[0].x = 0.0f; - vtx[0].y = 1.0f; - vtx[1].x = 0.866025f; - vtx[1].y = -0.5f; - vtx[2].x = -0.866025f; - vtx[2].y = -0.5f; - */ + float x = 256.0f; + float y = 208.0f; + quad = new Vec2[4]; + quad[0] = new Vec2(x + 0.0f, y + 0.0f); + quad[1] = new Vec2(x + 128.0f, y + 0.0f); + quad[2] = new Vec2(x + 128.0f, y + 64.0f); + quad[3] = new Vec2(x + 0.0f, y + 64.0f); + + quad_uv = new Vec2[4]; + quad_uv[0] = new Vec2(0.0f, 0.0f); + quad_uv[1] = new Vec2(1.0f, 0.0f); + quad_uv[2] = new Vec2(1.0f, 1.0f); + quad_uv[3] = new Vec2(0.0f, 1.0f); } - public static void transform_vertex(Vec3[] position, FacePNT pnt) { - float px = position[pnt.position].x; - float py = position[pnt.position].y; - float pz = position[pnt.position].z; + public static void transform_vertex(Vec3[] position, Vec2[] texture, FacePTN ptn) { + float px = position[ptn.position].x; + float py = position[ptn.position].y; + float pz = position[ptn.position].z; - //px *= 0.5; - //py *= 0.5; - //pz *= 0.5; + float theta2 = theta * 2.0f; + float scale = (Math.sin(theta2) + 3.0f) * 0.3f; + + px *= scale; + py *= scale; + pz *= scale; float x0 = px * Math.cos(theta) - py * Math.sin(theta); float y0 = px * Math.sin(theta) + py * Math.cos(theta); float z0 = pz; - float theta2 = theta / 2.0f; + float theta05 = theta * 0.5f; - float x1 = x0 * Math.cos(theta2) - z0 * Math.sin(theta2); + float x1 = x0 * Math.cos(theta05) - z0 * Math.sin(theta05); float y1 = y0; - float z1 = x0 * Math.sin(theta2) + z0 * Math.cos(theta2); + float z1 = x0 * Math.sin(theta05) + z0 * Math.cos(theta05); // camera transform float z2 = 3f + z1; @@ -122,67 +152,197 @@ class DreamcastVideo2 { float y = -y2 * 240f + 240f; float z = 1.0f / z2; - DreamcastVideo2.vt0.x = x; - DreamcastVideo2.vt0.y = y; - DreamcastVideo2.vt0.z = z; + vt0.x = x; + vt0.y = y; + vt0.z = z; + vt0.u = texture[ptn.texture].x; + vt0.v = texture[ptn.texture].y; } - public static void transform_triangle(int n, Vec3[] position, FacePNT[] face) { + public static void transform_triangle(int n, Vec3[] position, Vec2[] texture, FacePTN[] face) { for (int i = 0; i < 3; i++) { - DreamcastVideo2.vt0.parameter_control_word = TAParameter.para_control__para_type__vertex_parameter; + vt0.parameter_control_word = TAParameter.para_control__para_type__vertex_parameter; if (i == 2) - DreamcastVideo2.vt0.parameter_control_word |= TAParameter.para_control__end_of_strip; - transform_vertex(position, face[i]); - DreamcastVideo2.vt0.base_color = colors[n]; + vt0.parameter_control_word |= TAParameter.para_control__end_of_strip; + transform_vertex(position, texture, face[i]); + vt0.base_color = colors[n]; - Memory.putSQ1(DreamcastVideo2.vt0, MemoryMap.ta_fifo_polygon_converter); + Memory.putSQ1(vt0, MemoryMap.ta_fifo_polygon_converter); } } - public static void transfer_scene() { - // global parameter - Memory.putSQ1(DreamcastVideo2.gt0, MemoryMap.ta_fifo_polygon_converter); + public static void transform_quad() { + // strip order: + // 0 1 3 2 - // vertex parameters + vt0.z = 0.1f; + + vt0.parameter_control_word = TAParameter.para_control__para_type__vertex_parameter; + vt0.x = quad[0].x; + 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.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.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.parameter_control_word = TAParameter.para_control__para_type__vertex_parameter + | TAParameter.para_control__end_of_strip; + vt0.x = quad[2].x; + 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); + } + + public static void transfer_cube_scene() { + // global parameters + Memory.putSQ1(gt0[0], MemoryMap.ta_fifo_polygon_converter); + + // triangle parameters ModelObject obj = UntitledModel.objects[0]; for (int i = 0; i < obj.faces.length; i ++) { - transform_triangle(i, UntitledModel.position, obj.faces[i]); + transform_triangle(i, UntitledModel.position, UntitledModel.texture, obj.faces[i]); } // end of list - Memory.putSQ1(DreamcastVideo2.eol, MemoryMap.ta_fifo_polygon_converter); + Memory.putSQ1(eol, MemoryMap.ta_fifo_polygon_converter); + } + + public static void transfer_splash_scene() { + // global parameters + Memory.putSQ1(gt0[1], MemoryMap.ta_fifo_polygon_converter); + + // quad parameters + transform_quad(); + + // end of list + Memory.putSQ1(eol, MemoryMap.ta_fifo_polygon_converter); + } + + public static void transfer_textures() { + int texture = TextureMemoryAllocation.texture_regions[1][0] + 512; + + // java_cup + int[] java_cup = Resource.getResource("images/java_cup"); + int java_cup_length = (java_cup == null) ? 0 : java_cup.length; + //System.out.print("images/java_cup length: "); + //System.out.println(java_cup_length); + + for (int i = 0; i < java_cup_length; i++) { + Memory.putU4(MemoryMap.texture_memory64 + texture, java_cup[i]); + texture += 4; + } + + // java_text + int[] java_text = Resource.getResource("images/java_text"); + int java_text_length = (java_text == null) ? 0 : java_text.length; + //System.out.print("images/java_text length: "); + //System.out.println(java_text_length); + + for (int i = 0; i < java_text_length; i++) { + Memory.putU4(MemoryMap.texture_memory64 + texture, java_text[i]); + texture += 4; + } + } + + public static void transfer_java_powered() { + int texture = TextureMemoryAllocation.texture_regions[1][0] + 512 + (512 * 512 * 2 * 2); + + // java_powered + int[] java_powered = Resource.getResource("images/java_powered"); + int java_powered_length = (java_powered == null) ? 0 : java_powered.length; + //System.out.print("images/java_powered length: "); + //System.out.println(java_powered_length); + + for (int i = 0; i < java_powered_length; i++) { + Memory.putU4(MemoryMap.texture_memory64 + texture, java_powered[i]); + texture += 4; + } + } + + public static void boot_splash(int ta_alloc, int opb_size_total) { + // unpipelined render loop + TAFIFOPolygonConverter.init(TextureMemoryAllocation.isp_tsp_parameters_start[0], + TextureMemoryAllocation.isp_tsp_parameters_end[0], + TextureMemoryAllocation.object_list_start[0], + TextureMemoryAllocation.object_list_end[0], + opb_size_total, + ta_alloc, + framebuffer_width / 32, + framebuffer_height / 32); + transfer_splash_scene(); + TAFIFOPolygonConverter.wait_translucent_list(); + + Core.start_render(TextureMemoryAllocation.region_array_start[0], + TextureMemoryAllocation.isp_tsp_parameters_start[0], + TextureMemoryAllocation.background_start[0], + TextureMemoryAllocation.framebuffer_start[0], + framebuffer_width); + Core.wait_end_of_render_tsp(); + + while ((CoreBits.spg_status__vsync(Memory.getU4(Holly.SPG_STATUS)) != 0)); + Core.fb_r_enable(); + Memory.putU4(Holly.FB_R_SOF1, TextureMemoryAllocation.framebuffer_start[0]); } public static void main() { - Core.init(); - Core.fb_init(framebuffer_width, framebuffer_height); + 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 | TABits.ta_alloc_ctrl__tm_opb__no_list - | TABits.ta_alloc_ctrl__t_opb__no_list + | TABits.ta_alloc_ctrl__t_opb__8x4byte | TABits.ta_alloc_ctrl__om_opb__no_list - | TABits.ta_alloc_ctrl__o_opb__8x4byte + | TABits.ta_alloc_ctrl__o_opb__no_list ; RegionArray.OPBSize[] opb_size = { - new RegionArray.OPBSize(8 * 4, // opaque + new RegionArray.OPBSize(0, // opaque 0, // opaque_modifier_volume - 0, // translucent + 8 * 4, // translucent 0, // translucent_modifier_volume 0) // punch_through }; - int opb_size_total = opb_size[0].total(); - int num_render_passes = opb_size.length; + transfer_java_powered(); + + Background.background(TextureMemoryAllocation.background_start[0], + 0x00c0c0c0); // sega white + + int num_render_passes = opb_size.length; RegionArray.region_array(framebuffer_width / 32, framebuffer_height / 32, opb_size, num_render_passes, TextureMemoryAllocation.region_array_start[0], TextureMemoryAllocation.object_list_start[0]); + + Core.init(); + Core.fb_init(framebuffer_width, framebuffer_height); + + boot_splash(ta_alloc, opb_size_total); + + transfer_textures(); + + int background_color = 0xff100a00; + Background.background(TextureMemoryAllocation.background_start[1], + background_color); + RegionArray.region_array(framebuffer_width / 32, framebuffer_height / 32, opb_size, @@ -190,12 +350,6 @@ class DreamcastVideo2 { TextureMemoryAllocation.region_array_start[1], TextureMemoryAllocation.object_list_start[1]); - int background_color = 0xff443300; - Background.background(TextureMemoryAllocation.background_start[0], - background_color); - Background.background(TextureMemoryAllocation.background_start[1], - background_color); - int core = 0; int ta = 0; while (true) { @@ -208,12 +362,12 @@ class DreamcastVideo2 { ta_alloc, framebuffer_width / 32, framebuffer_height / 32); - transfer_scene(); - TAFIFOPolygonConverter.wait_opaque_list(); + transfer_cube_scene(); + TAFIFOPolygonConverter.wait_translucent_list(); Core.start_render(TextureMemoryAllocation.region_array_start[ta], TextureMemoryAllocation.isp_tsp_parameters_start[ta], - TextureMemoryAllocation.background_start[ta], + TextureMemoryAllocation.background_start[1], TextureMemoryAllocation.framebuffer_start[core], framebuffer_width); Core.wait_end_of_render_tsp(); diff --git a/example/Vec2.class.h b/example/Vec2.class.h deleted file mode 100644 index fa2112e..0000000 --- a/example/Vec2.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_example_Vec2_class_start __asm("_binary_example_Vec2_class_start"); -extern uint32_t _binary_example_Vec2_class_end __asm("_binary_example_Vec2_class_end"); -extern uint32_t _binary_example_Vec2_class_size __asm("_binary_example_Vec2_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/generate.sh b/generate.sh index 7352973..9b030aa 100644 --- a/generate.sh +++ b/generate.sh @@ -13,4 +13,9 @@ python regs/bits_gen.py ../dreamcast/regs/systembus_bits.csv systembus Systembus python regs/ta_parameters.py ../dreamcast/regs/vertex_parameter_format.csv holly TAVertexParameter > sega/dreamcast/holly/TAVertexParameter.java python regs/ta_parameters.py ../dreamcast/regs/global_parameter_format.csv holly TAGlobalParameter > sega/dreamcast/holly/TAGlobalParameter.java -PYTHONPATH=./regs/ python ../model_generator/generate_java.py ../untitled.obj UntitledModel > ./models/UntitledModel.java +PYTHONPATH=./regs/ python ../model_generator/generate_java.py ../untitled.obj UntitledModel > ./model/UntitledModel.java + + +python images/color_convert.py images/java_cup.png argb4444 images/java_cup.data +python images/color_convert.py images/java_text.png argb4444 images/java_text.data +python images/color_convert.py images/java_powered.png argb4444 images/java_powered.data diff --git a/images/color_convert.py b/images/color_convert.py new file mode 100644 index 0000000..c838853 --- /dev/null +++ b/images/color_convert.py @@ -0,0 +1,96 @@ +import struct +import sys + +from PIL import Image + +class color_format: + def gbgr1555(r, g, b, a): # nintendo ds + r5 = (r >> 3) & 31 + g6 = (g >> 3) & 31 + g6_l = (g >> 2) & 1 + b5 = (b >> 3) & 31 + return (g6_l << 15) | (b5 << 10) | (g6 << 5) | (r5 << 0) + + def argb4444(r, g, b, a): + a4 = (a >> 4) & 15 + r4 = (r >> 4) & 15 + g4 = (g >> 4) & 15 + b4 = (b >> 4) & 15 + return (a4 << 12) | (r4 << 8) | (g4 << 4) | (b4 << 0) + + def argb1555(r, g, b, a): + a1 = (a >> 7) & 1 + r5 = (r >> 3) & 31 + g5 = (g >> 3) & 31 + b5 = (b >> 3) & 31 + return (a1 << 15) | (r5 << 10) | (g5 << 5) | (b5 << 0) + + def rgb565(r, g, b, a): + r5 = (r >> 3) & 31 + g6 = (g >> 2) & 63 + b5 = (b >> 3) & 31 + return (r5 << 11) | (g5 << 5) | (b5 << 0) + + def axxx4444(r, g, b, a): + a4 = (a >> 4) & 15 + return (a4 << 12) + + def from_string(s): + return dict([ + ("gbgr1555", color_format.gbgr1555), + ("argb4444", color_format.argb4444), + ("argb1555", color_format.argb1555), + ("rgb565", color_format.rgb565), + ("axxx4444", color_format.axxx4444), + ])[s] + +def convert_colors(f, convert, colors): + assert len(colors) % 2 == 0, len(colors) + f.write(struct.pack("t92Qjp%g`utqUoU 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 qZscDjXMotL literal 0 HcmV?d00001 diff --git a/images/java_cup.data.h b/images/java_cup.data.h new file mode 100644 index 0000000..36f1bad --- /dev/null +++ b/images/java_cup.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern C { +#endif + +extern uint32_t _binary_images_java_cup_data_start __asm("_binary_images_java_cup_data_start"); +extern uint32_t _binary_images_java_cup_data_end __asm("_binary_images_java_cup_data_end"); +extern uint32_t _binary_images_java_cup_data_size __asm("_binary_images_java_cup_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/images/java_cup.png b/images/java_cup.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b99f8365ed3935c00e01713e96ce95de6cbfdc GIT binary patch literal 41208 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 literal 0 HcmV?d00001 diff --git a/images/java_cup.xcf b/images/java_cup.xcf new file mode 100644 index 0000000000000000000000000000000000000000..e49656e2f3cb1112fd6f6aca928def0d77e6de81 GIT binary patch literal 41034 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

BG&a<#eUxI1FBnQMl$eSP{X1`yE3yPqY_hv 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 literal 0 HcmV?d00001 diff --git a/images/java_powered.data.h b/images/java_powered.data.h new file mode 100644 index 0000000..9b0dffc --- /dev/null +++ b/images/java_powered.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern C { +#endif + +extern uint32_t _binary_images_java_powered_data_start __asm("_binary_images_java_powered_data_start"); +extern uint32_t _binary_images_java_powered_data_end __asm("_binary_images_java_powered_data_end"); +extern uint32_t _binary_images_java_powered_data_size __asm("_binary_images_java_powered_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/images/java_powered.png b/images/java_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..6fac62dbcca143c7e50f75fa1f79d731965c4fd6 GIT binary patch literal 16065 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 literal 0 HcmV?d00001 diff --git a/images/java_text.data b/images/java_text.data new file mode 100644 index 0000000000000000000000000000000000000000..333c94641e20aee0e57d955c8bed3c8378db1ea0 GIT binary patch literal 524292 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 literal 0 HcmV?d00001 diff --git a/images/java_text.data.h b/images/java_text.data.h new file mode 100644 index 0000000..cc93c73 --- /dev/null +++ b/images/java_text.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern C { +#endif + +extern uint32_t _binary_images_java_text_data_start __asm("_binary_images_java_text_data_start"); +extern uint32_t _binary_images_java_text_data_end __asm("_binary_images_java_text_data_end"); +extern uint32_t _binary_images_java_text_data_size __asm("_binary_images_java_text_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/images/java_text.png b/images/java_text.png new file mode 100644 index 0000000000000000000000000000000000000000..aec10ed7fb2356dafe13c7147ec53042b63de815 GIT binary patch literal 26222 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 ZR6!3Rrz_;zdcn7wox6ONc;@<_{{+Fd8h8Kz literal 0 HcmV?d00001 diff --git a/images/java_text.xcf b/images/java_text.xcf new file mode 100644 index 0000000000000000000000000000000000000000..5dfcff3678fceea6ad106b7e4a06268d8aa962e9 GIT binary patch literal 32002 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 literal 0 HcmV?d00001 diff --git a/java.mk b/java.mk index 7ac51c9..6893389 100644 --- a/java.mk +++ b/java.mk @@ -21,7 +21,10 @@ OBJ = \ MAIN_DREAMCAST_OBJ = \ c/sh7091_scif.o \ - c/main_dreamcast.o + c/main_dreamcast.o \ + images/java_text.data.o \ + images/java_cup.data.o \ + images/java_powered.data.o MAIN_HOSTED_OBJ = \ c/file.o \ diff --git a/java/misc/Resource.class.h b/java/misc/Resource.class.h new file mode 100644 index 0000000..b965149 --- /dev/null +++ b/java/misc/Resource.class.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern C { +#endif + +extern uint32_t _binary_java_misc_Resource_class_start __asm("_binary_java_misc_Resource_class_start"); +extern uint32_t _binary_java_misc_Resource_class_end __asm("_binary_java_misc_Resource_class_end"); +extern uint32_t _binary_java_misc_Resource_class_size __asm("_binary_java_misc_Resource_class_size"); + +#ifdef __cplusplus +} +#endif diff --git a/java/misc/Resource.java b/java/misc/Resource.java new file mode 100644 index 0000000..a72284a --- /dev/null +++ b/java/misc/Resource.java @@ -0,0 +1,8 @@ +package java.misc; + +public class Resource { + private Resource() { + } + + public static native int[] getResource(String name); +} diff --git a/model/FacePNT.class.h b/model/FacePNT.class.h deleted file mode 100644 index 957e231..0000000 --- a/model/FacePNT.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_model_FacePNT_class_start __asm("_binary_model_FacePNT_class_start"); -extern uint32_t _binary_model_FacePNT_class_end __asm("_binary_model_FacePNT_class_end"); -extern uint32_t _binary_model_FacePNT_class_size __asm("_binary_model_FacePNT_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/model/FacePNT.java b/model/FacePNT.java deleted file mode 100644 index 6b8d666..0000000 --- a/model/FacePNT.java +++ /dev/null @@ -1,13 +0,0 @@ -package model; - -public class FacePNT { - public int position; - public int normal; - public int texture_coordinate; - - FacePNT(int position, int normal, int texture_coordinate) { - this.position = position; - this.normal = normal; - this.texture_coordinate = texture_coordinate; - } -} diff --git a/model/FacePTN.class.h b/model/FacePTN.class.h new file mode 100644 index 0000000..78073af --- /dev/null +++ b/model/FacePTN.class.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern C { +#endif + +extern uint32_t _binary_model_FacePTN_class_start __asm("_binary_model_FacePTN_class_start"); +extern uint32_t _binary_model_FacePTN_class_end __asm("_binary_model_FacePTN_class_end"); +extern uint32_t _binary_model_FacePTN_class_size __asm("_binary_model_FacePTN_class_size"); + +#ifdef __cplusplus +} +#endif diff --git a/model/FacePTN.java b/model/FacePTN.java new file mode 100644 index 0000000..5b575e4 --- /dev/null +++ b/model/FacePTN.java @@ -0,0 +1,13 @@ +package model; + +public class FacePTN { + public int position; + public int texture; + public int normal; + + FacePTN(int position, int texture, int normal) { + this.position = position; + this.texture = texture; + this.normal = normal; + } +} diff --git a/model/ModelObject.java b/model/ModelObject.java index aee5001..a4a4fe1 100644 --- a/model/ModelObject.java +++ b/model/ModelObject.java @@ -1,5 +1,5 @@ package model; public class ModelObject { - public FacePNT[][] faces; + public FacePTN[][] faces; } diff --git a/model/UntitledModel.java b/model/UntitledModel.java index 5c6529c..df6c00b 100644 --- a/model/UntitledModel.java +++ b/model/UntitledModel.java @@ -10,7 +10,7 @@ public class UntitledModel { static { position = new Vec3[8]; normal = new Vec3[6]; - texture = new Vec2[4]; + texture = new Vec2[6]; objects = new ModelObject[1]; position[0] = new Vec3(1.0f, 1.0f, -1.0f); position[1] = new Vec3(1.0f, -1.0f, -1.0f); @@ -27,46 +27,48 @@ public class UntitledModel { normal[4] = new Vec3(1.0f, 0.0f, 0.0f); normal[5] = new Vec3(0.0f, 0.0f, -1.0f); texture[0] = new Vec2(1.0f, 0.0f); - texture[1] = new Vec2(0.0f, 1.0f); + texture[1] = new Vec2(0.0f, 0.5f); texture[2] = new Vec2(0.0f, 0.0f); - texture[3] = new Vec2(1.0f, 1.0f); + texture[3] = new Vec2(1.0f, 0.5f); + texture[4] = new Vec2(0.0f, 1.0f); + texture[5] = new Vec2(1.0f, 1.0f); objects[0] = new ModelObject(); - objects[0].faces = new FacePNT[12][3]; - objects[0].faces[0][0] = new FacePNT(4, 0, 0); - objects[0].faces[0][1] = new FacePNT(2, 1, 0); - objects[0].faces[0][2] = new FacePNT(0, 2, 0); - objects[0].faces[1][0] = new FacePNT(2, 0, 1); - objects[0].faces[1][1] = new FacePNT(7, 1, 1); - objects[0].faces[1][2] = new FacePNT(3, 2, 1); - objects[0].faces[2][0] = new FacePNT(6, 0, 2); - objects[0].faces[2][1] = new FacePNT(5, 1, 2); - objects[0].faces[2][2] = new FacePNT(7, 2, 2); - objects[0].faces[3][0] = new FacePNT(1, 0, 3); - objects[0].faces[3][1] = new FacePNT(7, 1, 3); - objects[0].faces[3][2] = new FacePNT(5, 2, 3); - objects[0].faces[4][0] = new FacePNT(0, 0, 4); - objects[0].faces[4][1] = new FacePNT(3, 1, 4); - objects[0].faces[4][2] = new FacePNT(1, 2, 4); - objects[0].faces[5][0] = new FacePNT(4, 0, 5); - objects[0].faces[5][1] = new FacePNT(1, 1, 5); - objects[0].faces[5][2] = new FacePNT(5, 2, 5); - objects[0].faces[6][0] = new FacePNT(4, 0, 0); - objects[0].faces[6][1] = new FacePNT(6, 3, 0); - objects[0].faces[6][2] = new FacePNT(2, 1, 0); - objects[0].faces[7][0] = new FacePNT(2, 0, 1); - objects[0].faces[7][1] = new FacePNT(6, 3, 1); - objects[0].faces[7][2] = new FacePNT(7, 1, 1); - objects[0].faces[8][0] = new FacePNT(6, 0, 2); - objects[0].faces[8][1] = new FacePNT(4, 3, 2); - objects[0].faces[8][2] = new FacePNT(5, 1, 2); - objects[0].faces[9][0] = new FacePNT(1, 0, 3); - objects[0].faces[9][1] = new FacePNT(3, 3, 3); - objects[0].faces[9][2] = new FacePNT(7, 1, 3); - objects[0].faces[10][0] = new FacePNT(0, 0, 4); - objects[0].faces[10][1] = new FacePNT(2, 3, 4); - objects[0].faces[10][2] = new FacePNT(3, 1, 4); - objects[0].faces[11][0] = new FacePNT(4, 0, 5); - objects[0].faces[11][1] = new FacePNT(0, 3, 5); - objects[0].faces[11][2] = new FacePNT(1, 1, 5); + objects[0].faces = new FacePTN[12][3]; + objects[0].faces[0][0] = new FacePTN(4, 0, 0); + objects[0].faces[0][1] = new FacePTN(2, 1, 0); + objects[0].faces[0][2] = new FacePTN(0, 2, 0); + objects[0].faces[1][0] = new FacePTN(2, 0, 1); + objects[0].faces[1][1] = new FacePTN(7, 1, 1); + objects[0].faces[1][2] = new FacePTN(3, 2, 1); + objects[0].faces[2][0] = new FacePTN(6, 3, 2); + objects[0].faces[2][1] = new FacePTN(5, 4, 2); + objects[0].faces[2][2] = new FacePTN(7, 1, 2); + objects[0].faces[3][0] = new FacePTN(1, 0, 3); + objects[0].faces[3][1] = new FacePTN(7, 1, 3); + objects[0].faces[3][2] = new FacePTN(5, 2, 3); + objects[0].faces[4][0] = new FacePTN(0, 3, 4); + objects[0].faces[4][1] = new FacePTN(3, 4, 4); + objects[0].faces[4][2] = new FacePTN(1, 1, 4); + objects[0].faces[5][0] = new FacePTN(4, 0, 5); + objects[0].faces[5][1] = new FacePTN(1, 1, 5); + objects[0].faces[5][2] = new FacePTN(5, 2, 5); + objects[0].faces[6][0] = new FacePTN(4, 0, 0); + objects[0].faces[6][1] = new FacePTN(6, 3, 0); + objects[0].faces[6][2] = new FacePTN(2, 1, 0); + objects[0].faces[7][0] = new FacePTN(2, 0, 1); + objects[0].faces[7][1] = new FacePTN(6, 3, 1); + objects[0].faces[7][2] = new FacePTN(7, 1, 1); + objects[0].faces[8][0] = new FacePTN(6, 3, 2); + objects[0].faces[8][1] = new FacePTN(4, 5, 2); + objects[0].faces[8][2] = new FacePTN(5, 4, 2); + objects[0].faces[9][0] = new FacePTN(1, 0, 3); + objects[0].faces[9][1] = new FacePTN(3, 3, 3); + objects[0].faces[9][2] = new FacePTN(7, 1, 3); + objects[0].faces[10][0] = new FacePTN(0, 3, 4); + objects[0].faces[10][1] = new FacePTN(2, 5, 4); + objects[0].faces[10][2] = new FacePTN(3, 4, 4); + objects[0].faces[11][0] = new FacePTN(4, 0, 5); + objects[0].faces[11][1] = new FacePTN(0, 3, 5); + objects[0].faces[11][2] = new FacePTN(1, 1, 5); } } diff --git a/model/Vec2.java b/model/Vec2.java index 73b0868..ad7a55a 100644 --- a/model/Vec2.java +++ b/model/Vec2.java @@ -4,7 +4,7 @@ public class Vec2 { public float x; public float y; - Vec2(float x, float y) { + public Vec2(float x, float y) { this.x = x; this.y = y; } diff --git a/model/Vec3.java b/model/Vec3.java index e2cacb1..42969b4 100644 --- a/model/Vec3.java +++ b/model/Vec3.java @@ -5,7 +5,7 @@ public class Vec3 { public float y; public float z; - Vec3(float x, float y, float z) { + public Vec3(float x, float y, float z) { this.x = x; this.y = y; this.z = z; diff --git a/p/Multiply.class.h b/p/Multiply.class.h deleted file mode 100644 index f502b96..0000000 --- a/p/Multiply.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint32_t _binary_p_Multiply_class_start __asm("_binary_p_Multiply_class_start"); -extern uint32_t _binary_p_Multiply_class_end __asm("_binary_p_Multiply_class_end"); -extern uint32_t _binary_p_Multiply_class_size __asm("_binary_p_Multiply_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/p/Native.class.h b/p/Native.class.h deleted file mode 100644 index 4bfda70..0000000 --- a/p/Native.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint32_t _binary_p_Native_class_start __asm("_binary_p_Native_class_start"); -extern uint32_t _binary_p_Native_class_end __asm("_binary_p_Native_class_end"); -extern uint32_t _binary_p_Native_class_size __asm("_binary_p_Native_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/p/TestResource.java b/p/TestResource.java new file mode 100644 index 0000000..1879c11 --- /dev/null +++ b/p/TestResource.java @@ -0,0 +1,12 @@ +package p; + +import java.misc.Resource; + +class TestResource { + public static void test() { + Resource.getResource("foo"); + } + public static void main() { + test(); + } +} diff --git a/sega/dreamcast/holly/Core.java b/sega/dreamcast/holly/Core.java index af5f7d4..abbd986 100644 --- a/sega/dreamcast/holly/Core.java +++ b/sega/dreamcast/holly/Core.java @@ -64,11 +64,6 @@ public class Core { | CoreBits.fb_r_size__fb_y_size(y_size - 3) | CoreBits.fb_r_size__fb_x_size((x_size * 16) / 32 - 1); - 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; - int fb_w_ctrl = CoreBits.fb_w_ctrl__fb_dither | CoreBits.fb_w_ctrl__fb_packmode__565_rgb_16bit; @@ -78,10 +73,22 @@ public class Core { 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_R_CTRL, fb_r_ctrl); 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, int isp_tsp_parameters_start, int background_start, diff --git a/sega/dreamcast/holly/ISPTSP.java b/sega/dreamcast/holly/ISPTSP.java index 106a576..ec0bc4b 100644 --- a/sega/dreamcast/holly/ISPTSP.java +++ b/sega/dreamcast/holly/ISPTSP.java @@ -54,18 +54,6 @@ public class ISPTSP { public static int tsp_instruction_word__mip_map_d_adjust(int n) { return (n & 15) << 8; } - public static int tsp_instruction_word__palette_selector4(int n) { - return (n & 63) << 21; - } - public static int tsp_instruction_word__palette_selector8(int n) { - return (n & 3) << 25; - } - public static int tsp_instruction_word__stride_select(int n) { - return (n >> 25) & 1; - } - public static int tsp_instruction_word__texture_address(int n) { - return (n & 2097151) << 0; - } public static final int tsp_instruction_word__flip_uv__none = 0 << 17; public static final int tsp_instruction_word__flip_uv__v = 1 << 17; public static final int tsp_instruction_word__flip_uv__u = 2 << 17; @@ -98,15 +86,27 @@ public class ISPTSP { public static final int tsp_instruction_word__texture_v_size__256 = 5 << 0; public static final int tsp_instruction_word__texture_v_size__512 = 6 << 0; public static final int tsp_instruction_word__texture_v_size__1024 = 7 << 0; - public static final int tsp_instruction_word__pixel_format__1555 = 0 << 27; - public static final int tsp_instruction_word__pixel_format__565 = 1 << 27; - public static final int tsp_instruction_word__pixel_format__4444 = 2 << 27; - public static final int tsp_instruction_word__pixel_format__yuv422 = 3 << 27; - public static final int tsp_instruction_word__pixel_format__bump_map = 4 << 27; - public static final int tsp_instruction_word__pixel_format__4bpp_palette = 5 << 27; - public static final int tsp_instruction_word__pixel_format__8bpp_palette = 6 << 27; - public static final int tsp_instruction_word__scan_order__twiddled = 0 << 26; - public static final int tsp_instruction_word__scan_order__non_twiddled = 1 << 26; public static final int texture_control_word__mip_mapped = 1 << 31; public static final int texture_control_word__vq_compressed = 1 << 30; + public static int texture_control_word__palette_selector4(int n) { + return (n & 63) << 21; + } + public static int texture_control_word__palette_selector8(int n) { + return (n & 3) << 25; + } + public static int texture_control_word__stride_select(int n) { + return (n >> 25) & 1; + } + public static int texture_control_word__texture_address(int n) { + return (n & 2097151) << 0; + } + public static final int texture_control_word__pixel_format__1555 = 0 << 27; + public static final int texture_control_word__pixel_format__565 = 1 << 27; + public static final int texture_control_word__pixel_format__4444 = 2 << 27; + public static final int texture_control_word__pixel_format__yuv422 = 3 << 27; + public static final int texture_control_word__pixel_format__bump_map = 4 << 27; + public static final int texture_control_word__pixel_format__4bpp_palette = 5 << 27; + public static final int texture_control_word__pixel_format__8bpp_palette = 6 << 27; + public static final int texture_control_word__scan_order__twiddled = 0 << 26; + public static final int texture_control_word__scan_order__non_twiddled = 1 << 26; } diff --git a/sega/dreamcast/holly/RegionArray$OPBSize.class.h b/sega/dreamcast/holly/RegionArray$OPBSize.class.h deleted file mode 100644 index de60bb5..0000000 --- a/sega/dreamcast/holly/RegionArray$OPBSize.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_RegionArray_OPBSize_class_start __asm("_binary_sega_dreamcast_holly_RegionArray_OPBSize_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_RegionArray_OPBSize_class_end __asm("_binary_sega_dreamcast_holly_RegionArray_OPBSize_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_RegionArray_OPBSize_class_size __asm("_binary_sega_dreamcast_holly_RegionArray_OPBSize_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAFIFOPolygonConverter.java b/sega/dreamcast/holly/TAFIFOPolygonConverter.java index 46a3204..9b2a454 100644 --- a/sega/dreamcast/holly/TAFIFOPolygonConverter.java +++ b/sega/dreamcast/holly/TAFIFOPolygonConverter.java @@ -3,6 +3,8 @@ package sega.dreamcast.holly; import sega.dreamcast.holly.Holly; import sega.dreamcast.holly.CoreBits; import sega.dreamcast.holly.TABits; +import sega.dreamcast.systembus.Systembus; +import sega.dreamcast.systembus.SystembusBits; import java.misc.Memory; public class TAFIFOPolygonConverter { @@ -45,14 +47,21 @@ public class TAFIFOPolygonConverter { public static void wait_opaque_list() { - //while ((system.ISTNRM & istnrm::end_of_transferring_opaque_list) == 0) { - //}; - //system.ISTNRM = istnrm::end_of_transferring_opaque_list; while (true) { - int istnrm = Memory.getU4(0xa05f6900); - if ((istnrm & (1 << 7)) != 0) + int istnrm = Memory.getU4(Systembus.ISTNRM); + if ((istnrm & SystembusBits.istnrm__end_of_transferring_opaque_list) != 0) break; } - Memory.putU4(0xa05f6900, (1 << 7)); + Memory.putU4(Systembus.ISTNRM, SystembusBits.istnrm__end_of_transferring_opaque_list); + } + + public static void wait_translucent_list() + { + while (true) { + int istnrm = Memory.getU4(Systembus.ISTNRM); + if ((istnrm & SystembusBits.istnrm__end_of_transferring_translucent_list) != 0) + break; + } + Memory.putU4(Systembus.ISTNRM, SystembusBits.istnrm__end_of_transferring_translucent_list); } } diff --git a/sega/dreamcast/holly/TAGlobalParameter$end_of_list.class.h b/sega/dreamcast/holly/TAGlobalParameter$end_of_list.class.h deleted file mode 100644 index 807ac04..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$end_of_list.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_end_of_list_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_end_of_list_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_end_of_list_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_end_of_list_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_end_of_list_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_end_of_list_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$modifier_volume.class.h b/sega/dreamcast/holly/TAGlobalParameter$modifier_volume.class.h deleted file mode 100644 index fcf5f9e..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$modifier_volume.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_modifier_volume_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_modifier_volume_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_modifier_volume_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_modifier_volume_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_modifier_volume_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_modifier_volume_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$object_list_set.class.h b/sega/dreamcast/holly/TAGlobalParameter$object_list_set.class.h deleted file mode 100644 index 4975637..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$object_list_set.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_object_list_set_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_object_list_set_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_object_list_set_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_object_list_set_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_object_list_set_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_object_list_set_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_0.class.h b/sega/dreamcast/holly/TAGlobalParameter$polygon_type_0.class.h deleted file mode 100644 index b0035b2..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_0.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_0_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_0_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_0_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_0_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_0_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_0_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_1.class.h b/sega/dreamcast/holly/TAGlobalParameter$polygon_type_1.class.h deleted file mode 100644 index 39d4e68..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_1.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_1_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_1_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_1_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_1_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_1_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_1_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_2.class.h b/sega/dreamcast/holly/TAGlobalParameter$polygon_type_2.class.h deleted file mode 100644 index 816adbf..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_2.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_2_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_2_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_2_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_2_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_2_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_2_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_3.class.h b/sega/dreamcast/holly/TAGlobalParameter$polygon_type_3.class.h deleted file mode 100644 index ee55fb0..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_3.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_3_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_3_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_3_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_3_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_3_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_3_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_4.class.h b/sega/dreamcast/holly/TAGlobalParameter$polygon_type_4.class.h deleted file mode 100644 index 551e5cf..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$polygon_type_4.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_4_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_4_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_4_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_4_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_4_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_polygon_type_4_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$sprite.class.h b/sega/dreamcast/holly/TAGlobalParameter$sprite.class.h deleted file mode 100644 index 24e22ae..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$sprite.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_sprite_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_sprite_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_sprite_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_sprite_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_sprite_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_sprite_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAGlobalParameter$user_tile_clip.class.h b/sega/dreamcast/holly/TAGlobalParameter$user_tile_clip.class.h deleted file mode 100644 index 8adffec..0000000 --- a/sega/dreamcast/holly/TAGlobalParameter$user_tile_clip.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_user_tile_clip_class_start __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_user_tile_clip_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_user_tile_clip_class_end __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_user_tile_clip_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAGlobalParameter_user_tile_clip_class_size __asm("_binary_sega_dreamcast_holly_TAGlobalParameter_user_tile_clip_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$modifier_volume.class.h b/sega/dreamcast/holly/TAVertexParameter$modifier_volume.class.h deleted file mode 100644 index 5e10b48..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$modifier_volume.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_modifier_volume_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_modifier_volume_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_modifier_volume_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_modifier_volume_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_modifier_volume_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_modifier_volume_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_0.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_0.class.h deleted file mode 100644 index 4d8aca5..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_0.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_0_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_0_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_0_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_0_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_0_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_0_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_1.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_1.class.h deleted file mode 100644 index 314df92..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_1.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_1_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_1_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_1_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_1_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_1_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_1_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_10.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_10.class.h deleted file mode 100644 index 20e9250..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_10.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_10_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_10_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_10_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_10_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_10_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_10_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_11.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_11.class.h deleted file mode 100644 index db73340..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_11.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_11_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_11_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_11_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_11_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_11_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_11_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_12.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_12.class.h deleted file mode 100644 index 1b38764..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_12.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_12_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_12_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_12_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_12_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_12_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_12_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_13.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_13.class.h deleted file mode 100644 index 1d88797..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_13.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_13_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_13_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_13_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_13_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_13_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_13_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_14.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_14.class.h deleted file mode 100644 index 246ed39..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_14.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_14_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_14_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_14_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_14_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_14_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_14_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_2.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_2.class.h deleted file mode 100644 index 39a4d03..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_2.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_2_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_2_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_2_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_2_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_2_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_2_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_3.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_3.class.h deleted file mode 100644 index c0ba5c1..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_3.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_3_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_3_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_3_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_3_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_3_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_3_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_4.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_4.class.h deleted file mode 100644 index a07c262..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_4.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_4_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_4_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_4_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_4_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_4_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_4_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_5.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_5.class.h deleted file mode 100644 index 40f05fe..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_5.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_5_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_5_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_5_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_5_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_5_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_5_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_6.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_6.class.h deleted file mode 100644 index ddd3bac..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_6.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_6_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_6_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_6_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_6_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_6_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_6_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_7.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_7.class.h deleted file mode 100644 index ac47d65..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_7.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_7_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_7_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_7_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_7_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_7_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_7_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_8.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_8.class.h deleted file mode 100644 index f1decdf..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_8.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_8_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_8_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_8_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_8_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_8_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_8_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$polygon_type_9.class.h b/sega/dreamcast/holly/TAVertexParameter$polygon_type_9.class.h deleted file mode 100644 index ead7e2c..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$polygon_type_9.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_9_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_9_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_9_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_9_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_9_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_polygon_type_9_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$sprite_type_0.class.h b/sega/dreamcast/holly/TAVertexParameter$sprite_type_0.class.h deleted file mode 100644 index f3199d9..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$sprite_type_0.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_0_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_0_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_0_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_0_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_0_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_0_class_size"); - -#ifdef __cplusplus -} -#endif diff --git a/sega/dreamcast/holly/TAVertexParameter$sprite_type_1.class.h b/sega/dreamcast/holly/TAVertexParameter$sprite_type_1.class.h deleted file mode 100644 index 90df670..0000000 --- a/sega/dreamcast/holly/TAVertexParameter$sprite_type_1.class.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern C { -#endif - -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_1_class_start __asm("_binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_1_class_start"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_1_class_end __asm("_binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_1_class_end"); -extern uint32_t _binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_1_class_size __asm("_binary_sega_dreamcast_holly_TAVertexParameter_sprite_type_1_class_size"); - -#ifdef __cplusplus -} -#endif