Your way is far simpler, so many less steps.
My next task is to generate some assembly:
$ /usr/bin/riscv64-unknown-elf-objdump -D -b binary -m riscv --adjust-vma=0x2a000000 --disassembler-options="numeric,no-aliases" rom_good_endian.bin | head -105
rom_good_endian.bin: file format binary
Disassembly of section .data:
000000002a000000 <.data>:
2a000000: 00000297 auipc x5,0x0
2a000004: 12628293 addi x5,x5,294 # 0x2a000126
2a000008: 30529073 csrrw x0,mtvec,x5
2a00000c: 30005073 csrrwi x0,mstatus,0
2a000010: 30405073 csrrwi x0,mie,0
2a000014: 4081 c.li x1,0
2a000016: 4101 c.li x2,0
2a000018: 4181 c.li x3,0
2a00001a: 4201 c.li x4,0
2a00001c: 4281 c.li x5,0
2a00001e: 4301 c.li x6,0
2a000020: 4381 c.li x7,0
2a000022: 4401 c.li x8,0
2a000024: 4481 c.li x9,0
2a000026: 4501 c.li x10,0
2a000028: 4581 c.li x11,0
2a00002a: 4601 c.li x12,0
2a00002c: 4681 c.li x13,0
2a00002e: 4701 c.li x14,0
2a000030: 4781 c.li x15,0
2a000032: 4801 c.li x16,0
2a000034: 4881 c.li x17,0
2a000036: 4901 c.li x18,0
2a000038: 4981 c.li x19,0
2a00003a: 4a01 c.li x20,0
2a00003c: 4a81 c.li x21,0
2a00003e: 4b01 c.li x22,0
2a000040: 4b81 c.li x23,0
2a000042: 4c01 c.li x24,0
2a000044: 4c81 c.li x25,0
2a000046: 4d01 c.li x26,0
2a000048: 4d81 c.li x27,0
2a00004a: 4e01 c.li x28,0
2a00004c: 4e81 c.li x29,0
2a00004e: 4f01 c.li x30,0
2a000050: 4f81 c.li x31,0
2a000052: d7100197 auipc x3,0xd7100
2a000056: 0ae18193 addi x3,x3,174 # 0x1100100
2a00005a: 00000297 auipc x5,0x0
2a00005e: 05a28293 addi x5,x5,90 # 0x2a0000b4
2a000062: 30529073 csrrw x0,mtvec,x5
2a000066: 00100293 addi x5,x0,1
2a00006a: 04028563 beq x5,x0,0x2a0000b4
2a00006e: 7c145073 csrrwi x0,0x7c1,8
2a000072: f14022f3 csrrs x5,mhartid,x0
2a000076: 02b2 c.slli x5,0xc
2a000078: d7102117 auipc x2,0xd7102
2a00007c: b8810113 addi x2,x2,-1144 # 0x1101c00
2a000080: 40510133 sub x2,x2,x5
2a000084: 4581 c.li x11,0
2a000086: f1402573 csrrs x10,mhartid,x0
2a00008a: 04b51d63 bne x10,x11,0x2a0000e4
2a00008e: 01100337 lui x6,0x1100
2a000092: 011023b7 lui x7,0x1102
2a000096: 00033023 .4byte 0x33023
2a00009a: 0321 c.addi x6,8 # 0x1100008
2a00009c: fe734de3 blt x6,x7,0x2a000096
2a0000a0: f0018293 addi x5,x3,-256
2a0000a4: f0018313 addi x6,x3,-256
2a0000a8: 00628e63 beq x5,x6,0x2a0000c4
2a0000ac: f2018393 addi x7,x3,-224
2a0000b0: 00737a63 bgeu x6,x7,0x2a0000c4
2a0000b4: 0002be03 .4byte 0x2be03
2a0000b8: 01c33023 .4byte 0x1c33023
2a0000bc: 02a1 c.addi x5,8
2a0000be: 0321 c.addi x6,8
2a0000c0: fe736ae3 bltu x6,x7,0x2a0000b4
2a0000c4: f2018313 addi x6,x3,-224
2a0000c8: d7101397 auipc x7,0xd7101
2a0000cc: a9838393 addi x7,x7,-1384 # 0x1100b60
2a0000d0: 00737763 bgeu x6,x7,0x2a0000de
2a0000d4: 00033023 .4byte 0x33023
2a0000d8: 0321 c.addi x6,8
2a0000da: fe734de3 blt x6,x7,0x2a0000d4
2a0000de: 61d000ef jal x1,0x2a000efa
2a0000e2: a81d c.j 0x2a000118
2a0000e4: 4621 c.li x12,8
2a0000e6: 30461073 csrrw x0,mie,x12
2a0000ea: 10500073 wfi
2a0000ee: 34402673 csrrs x12,mip,x0
2a0000f2: 8a21 c.andi x12,8
2a0000f4: da7d c.beqz x12,0x2a0000ea
2a0000f6: 020004b7 lui x9,0x2000
2a0000fa: f1402573 csrrs x10,mhartid,x0
2a0000fe: 00251913 slli x18,x10,0x2
2a000102: 9926 c.add x18,x9
2a000104: 00092023 sw x0,0(x18)
2a000108: 0ff0000f fence iorw,iorw
2a00010c: 34405073 csrrwi x0,mip,0
2a000110: 4615 c.li x12,5
2a000112: 00c56363 bltu x10,x12,0x2a000118
2a000116: bfd1 c.j 0x2a0000ea
2a000118: 080002b7 lui x5,0x8000
2a00011c: f1402573 csrrs x10,mhartid,x0
2a000120: 0001 c.addi x0,0
2a000122: 4581 c.li x11,0
2a000124: 9282 c.jalr x5
2a000126: a001 c.j 0x2a000126
But then I need to translate that with reference to the hardware memory addresses into more generic algorithms, which will definitely force me to learn some really low level RISC-V assembly.