diff --git a/code/duffle/lottes_tape.h b/code/duffle/lottes_tape.h index b1a5bff..ae58d8b 100644 --- a/code/duffle/lottes_tape.h +++ b/code/duffle/lottes_tape.h @@ -118,7 +118,7 @@ FI_ Slice_U4 tb_slice(TapeBuilder tb) { return (Sli shift_ll( R_T1, r_otz, 2) /* T1 = r_otz * S_(U4) */ \ , add_u( R_T1, R_T1, R_OtBase) /* T1 = & OrderingTable[OTZ] */ \ , load_word(R_AT, R_T1, O_(PolyTag,bf_addr_len)) /* AT = old_ot_head */ \ - , load_ui( R_V0, prim_length) /* V0 = prim_length << 16 (high 16 bits of a tag) */ \ + , load_upper_i(R_V0, prim_length) /* V0 = prim_length << 16 (high 16 bits of a tag) */ \ , shift_ll_lr(R_AT, R_AT, S_(PolyTag_len_bits)) /* Strip upper 8 bits (length from prev cell) → keep only low 24 */ \ , or_u( R_AT, R_AT, R_V0) /* Merge length */ \ , store_word(R_AT, R_PrimCursor, O_(PolyTag,bf_addr_len)) /* prim->tag = packed(prim_length, old_addr) */ \ @@ -219,23 +219,23 @@ internal MipsAtom_(diag_yield) { mac_yield() }; // TODO(Ed): Reduce magic numbers/offsets /* DIAGNOSTIC 2: Pure memory test (No GTE). Draws a fixed cyan triangle. */ internal MipsAtom_(diag_color) { - store_word(R_0, R_T7, 0), - load_ui( R_AT, gcmd_poly_f3 << 8 | 0xFF), /* High: MipsCode Poly_F3(0x20) + Color B:FF */ - or_i( R_AT, R_AT, 0xFF00), /* Low: Color G:FF, R:00 (Cyan) */ - store_word(R_AT, R_T7, 4), + store_word( R_0, R_T7, 0), + load_upper_i(R_AT, gcmd_poly_f3 << 8 | 0xFF), /* High: MipsCode Poly_F3(0x20) + Color B:FF */ + or_i( R_AT, R_AT, 0xFF00), /* Low: Color G:FF, R:00 (Cyan) */ + store_word( R_AT, R_T7, 4), /* Fake coordinates - Swapped winding order to prevent GPU culling! */ - load_ui(R_AT, 0x0010), or_i(R_AT, R_AT, 0x0010), store_word(R_AT, R_T7, 8), /* (16, 16) */ - load_ui(R_AT, 0x0050), or_i(R_AT, R_AT, 0x0010), store_word(R_AT, R_T7, 12), /* (80, 16) */ - load_ui(R_AT, 0x0010), or_i(R_AT, R_AT, 0x0050), store_word(R_AT, R_T7, 16), /* (16, 80) */ + load_upper_i(R_AT, 0x0010), or_i(R_AT, R_AT, 0x0010), store_word(R_AT, R_T7, 8), /* (16, 16) */ + load_upper_i(R_AT, 0x0050), or_i(R_AT, R_AT, 0x0010), store_word(R_AT, R_T7, 12), /* (80, 16) */ + load_upper_i(R_AT, 0x0010), or_i(R_AT, R_AT, 0x0050), store_word(R_AT, R_T7, 16), /* (16, 80) */ add_ui( R_T1, R_0, 10), shift_ll(R_T1, R_T1, 2), add_u( R_T1, R_T1, R_T6), - load_word( R_AT, R_T1, 0), - load_ui( R_V0, 0x0400), // <--- Fills load delay slot! - store_word(R_AT, R_T7, 0), + load_word( R_AT, R_T1, 0), + load_upper_i(R_V0, 0x0400), // <--- Fills load delay slot! + store_word( R_AT, R_T7, 0), shift_ll( R_AT, R_T7, 8), shift_lr(R_AT, R_AT, 8), or_u( R_AT, R_AT, R_V0), diff --git a/code/duffle/mips.h b/code/duffle/mips.h index 69bfde6..0fa91ad 100644 --- a/code/duffle/mips.h +++ b/code/duffle/mips.h @@ -258,7 +258,7 @@ enum { _BitOffsets = 0 #define and_si(rt, rs, imm) enc_i(op_andi, (rs), (rt), (imm)) #define or_i(rt, rs, imm) enc_i(op_ori, (rs), (rt), (imm)) #define xor_i(rt, rs, imm) enc_i(op_xori, (rs), (rt), (imm)) -#define load_ui(rt, imm) enc_i(op_lui, R_0, (rt), (imm)) +#define load_upper_i(rt, imm) enc_i(op_lui, R_0, (rt), (imm)) #define load_u1 load_byte_u #define load_u2 load_half_u diff --git a/code/gte_hello/hello_gte_tape.c b/code/gte_hello/hello_gte_tape.c index 1e94ada..9674038 100644 --- a/code/gte_hello/hello_gte_tape.c +++ b/code/gte_hello/hello_gte_tape.c @@ -18,7 +18,7 @@ void fk() { /* Words: 3; High: 0x20/B, Low: G/R */ #define mac_format_f3_color(color_hi, color_lo) \ - load_ui( R_AT, gcmd_poly_f3 << 8 | color_hi) \ + load_upper_i( R_AT, gcmd_poly_f3 << 8 | color_hi) \ , or_i( R_AT, R_AT, color_lo) \ , store_word(R_AT, R_PrimCursor, O_(Poly_F3,color)) \ @@ -105,28 +105,28 @@ MipsAtom_(cube_tri) { store_word(R_0, R_PrimCursor, 0), /* Word 1: c0 (BGR) + code = 0x38FF00FF (magenta, opcode 0x38) */ - load_ui(R_AT, 0x38FF), or_i(R_AT, R_AT, 0x00FF), + load_upper_i(R_AT, 0x38FF), or_i(R_AT, R_AT, 0x00FF), store_word(R_AT, R_PrimCursor, 4), /* Word 2: p0 = SXY0 (stored BEFORE RTPS overwrites it) */ gte_sw(C2_SXY0, R_PrimCursor, 8), /* Word 3: c1 (BGR) + pad = 0x0000FFFF (yellow) */ - load_ui(R_AT, 0x0000), or_i(R_AT, R_AT, 0xFFFF), + load_upper_i(R_AT, 0x0000), or_i(R_AT, R_AT, 0xFFFF), store_word(R_AT, R_PrimCursor, 12), /* Word 4: p1 = SXY1 */ gte_sw(C2_SXY1, R_PrimCursor, 16), /* Word 5: c2 (BGR) + pad = 0x00FFFF00 (cyan) */ - load_ui(R_AT, 0x00FF), or_i(R_AT, R_AT, 0xFF00), + load_upper_i(R_AT, 0x00FF), or_i(R_AT, R_AT, 0xFF00), store_word(R_AT, R_PrimCursor, 20), /* Word 6: p2 = SXY2 */ gte_sw(C2_SXY2, R_PrimCursor, 24), /* Word 7: c3 (BGR) + pad = 0x0000FF00 (green) */ - load_ui(R_AT, 0x0000), or_i(R_AT, R_AT, 0xFF00), + load_upper_i(R_AT, 0x0000), or_i(R_AT, R_AT, 0xFF00), store_word(R_AT, R_PrimCursor, 28), /* ── 7. Load V3 = verts[face->w] into V0 ─────────────────────────────── */