melonDLDI: add support for unaligned I/O

This commit is contained in:
Arisotura
2025-05-27 00:55:12 +02:00
parent d1eff4acf5
commit 7117178c2d
3 changed files with 76 additions and 44 deletions

View File

@ -8,7 +8,7 @@ all:
$(AS) $(BIN).s -o $(BIN).o
$(LD) $(BIN).o -Ttext 0xBF800000 -e 0xBF800000 -o $(BIN).elf
$(OBJCOPY) -O binary $(BIN).elf $(BIN).bin
xxd -i -n $(BIN) $(BIN).bin $(BIN).h
xxd -i -n $(BIN) -c 16 $(BIN).bin $(BIN).h
clean:
rm -f $(BIN).h $(BIN).bin $(BIN).elf $(BIN).o

View File

@ -68,34 +68,63 @@ _sendcmd:
tst r0, #0x01
bne __send_write
@ receive data
tst r2, #0x3
bne __read_unal_loop
__read_busyloop:
ldr r0, [r12, #0x4]
tst r0, #0x80000000
bxeq lr
tst r0, #0x00800000
ldrne r1, [r3, #0x10] @ load data
cmpne r2, #0
strne r1, [r2], #4
b __read_busyloop
__read_unal_loop:
ldr r0, [r12, #0x4]
tst r0, #0x80000000
bne __read_busyloop
bx lr
bxeq lr
tst r0, #0x00800000
beq __read_unal_loop
ldr r1, [r3, #0x10] @ load data
strb r1, [r2], #1
mov r1, r1, lsr #8
strb r1, [r2], #1
mov r1, r1, lsr #8
strb r1, [r2], #1
mov r1, r1, lsr #8
strb r1, [r2], #1
b __read_unal_loop
@ send data
__send_write:
mov r1, #0
tst r2, #0x3
bne __write_unal_loop
__write_busyloop:
ldr r0, [r12, #0x4]
tst r0, #0x80000000
bxeq lr
tst r0, #0x00800000
cmpne r2, #0
ldrne r1, [r2], #4
strne r1, [r3, #0x10] @ store data
b __write_busyloop
__write_unal_loop:
ldr r0, [r12, #0x4]
tst r0, #0x80000000
bne __write_busyloop
bx lr
bxeq lr
tst r0, #0x00800000
beq __write_unal_loop
ldrb r1, [r2], #1
ldrb r0, [r2], #1
orr r1, r1, r0, lsl #8
ldrb r0, [r2], #1
orr r1, r1, r0, lsl #16
ldrb r0, [r2], #1
orr r1, r1, r0, lsl #24
str r1, [r3, #0x10] @ store data
b __write_unal_loop
@ r0=sector r1=numsectors r2=out
melon_readSectors:
tst r2, #0x3
movne r0, #0
bxne lr
stmdb sp!, {r3-r6, lr}
mov r4, r0
mov r5, r1
@ -114,9 +143,6 @@ _readloop:
@ r0=sector r1=numsectors r2=out
melon_writeSectors:
tst r2, #0x3
movne r0, #0
bxne lr
stmdb sp!, {r3-r6, lr}
mov r4, r0
mov r5, r1

View File

@ -25,35 +25,41 @@ namespace melonDS
{
const u8 melonDLDI[] =
{
0xED, 0xA5, 0x8D, 0xBF, 0x20, 0x43, 0x68, 0x69, 0x73, 0x68, 0x6D, 0x00, 0x01, 0x09, 0x00, 0x00,
0x6D, 0x65, 0x6C, 0x6F, 0x6E, 0x44, 0x53, 0x20, 0x44, 0x4C, 0x44, 0x49, 0x20, 0x64, 0x72, 0x69,
0xed, 0xa5, 0x8d, 0xbf, 0x20, 0x43, 0x68, 0x69, 0x73, 0x68, 0x6d, 0x00, 0x01, 0x09, 0x00, 0x00,
0x6d, 0x65, 0x6c, 0x6f, 0x6e, 0x44, 0x53, 0x20, 0x44, 0x4c, 0x44, 0x49, 0x20, 0x64, 0x72, 0x69,
0x76, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xBF, 0xC4, 0x01, 0x80, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xbf, 0x24, 0x02, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4D, 0x45, 0x4C, 0x4E, 0x23, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xBF, 0x88, 0x00, 0x80, 0xBF,
0x34, 0x01, 0x80, 0xBF, 0x74, 0x01, 0x80, 0xBF, 0xB4, 0x01, 0x80, 0xBF, 0xBC, 0x01, 0x80, 0xBF,
0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1,
0x01, 0xC3, 0xA0, 0xE3, 0x1A, 0xCE, 0x8C, 0xE2, 0x02, 0x39, 0xA0, 0xE3, 0xB0, 0x30, 0xCC, 0xE1,
0x08, 0x00, 0xCC, 0xE5, 0x0C, 0x10, 0xCC, 0xE5, 0x21, 0x14, 0xA0, 0xE1, 0x0B, 0x10, 0xCC, 0xE5,
0x21, 0x14, 0xA0, 0xE1, 0x0A, 0x10, 0xCC, 0xE5, 0x21, 0x14, 0xA0, 0xE1, 0x09, 0x10, 0xCC, 0xE5,
0x21, 0x14, 0xA0, 0xE1, 0x0D, 0x10, 0xCC, 0xE5, 0xBE, 0x10, 0xCC, 0xE1, 0x0A, 0x32, 0xA0, 0xE3,
0x00, 0x3F, 0x83, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0x01, 0x34, 0x83, 0x13, 0x01, 0x35, 0x83, 0xE3,
0x04, 0x30, 0x8C, 0xE5, 0x41, 0x36, 0xA0, 0xE3, 0x01, 0x00, 0x10, 0xE3, 0x07, 0x00, 0x00, 0x1A,
0x04, 0x00, 0x9C, 0xE5, 0x02, 0x05, 0x10, 0xE3, 0x10, 0x10, 0x93, 0x15, 0x00, 0x00, 0x52, 0x13,
0x04, 0x10, 0x82, 0x14, 0x02, 0x01, 0x10, 0xE3, 0xF8, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1,
0x00, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x9C, 0xE5, 0x02, 0x05, 0x10, 0xE3, 0x00, 0x00, 0x52, 0x13,
0x04, 0x10, 0x92, 0x14, 0x10, 0x10, 0x83, 0x15, 0x02, 0x01, 0x10, 0xE3, 0xF8, 0xFF, 0xFF, 0x1A,
0x1E, 0xFF, 0x2F, 0xE1, 0x03, 0x00, 0x12, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x1E, 0xFF, 0x2F, 0x11,
0x78, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x50, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0xE3,
0xC0, 0x00, 0xA0, 0xE3, 0x06, 0x10, 0x84, 0xE0, 0xCC, 0xFF, 0xFF, 0xEB, 0x01, 0x60, 0x86, 0xE2,
0x05, 0x00, 0x56, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x78, 0x40, 0xBD, 0xE8, 0x01, 0x00, 0xA0, 0xE3,
0x1E, 0xFF, 0x2F, 0xE1, 0x03, 0x00, 0x12, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x1E, 0xFF, 0x2F, 0x11,
0x78, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x50, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0xE3,
0xC1, 0x00, 0xA0, 0xE3, 0x06, 0x10, 0x84, 0xE0, 0xBC, 0xFF, 0xFF, 0xEB, 0x01, 0x60, 0x86, 0xE2,
0x05, 0x00, 0x56, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x78, 0x40, 0xBD, 0xE8, 0x01, 0x00, 0xA0, 0xE3,
0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0xA0, 0xE3,
0x1E, 0xFF, 0x2F, 0xE1
0x4d, 0x45, 0x4c, 0x4e, 0x23, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xbf, 0x88, 0x00, 0x80, 0xbf,
0xac, 0x01, 0x80, 0xbf, 0xe0, 0x01, 0x80, 0xbf, 0x14, 0x02, 0x80, 0xbf, 0x1c, 0x02, 0x80, 0xbf,
0x01, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1,
0x01, 0xc3, 0xa0, 0xe3, 0x1a, 0xce, 0x8c, 0xe2, 0x02, 0x39, 0xa0, 0xe3, 0xb0, 0x30, 0xcc, 0xe1,
0x08, 0x00, 0xcc, 0xe5, 0x0c, 0x10, 0xcc, 0xe5, 0x21, 0x14, 0xa0, 0xe1, 0x0b, 0x10, 0xcc, 0xe5,
0x21, 0x14, 0xa0, 0xe1, 0x0a, 0x10, 0xcc, 0xe5, 0x21, 0x14, 0xa0, 0xe1, 0x09, 0x10, 0xcc, 0xe5,
0x21, 0x14, 0xa0, 0xe1, 0x0d, 0x10, 0xcc, 0xe5, 0xbe, 0x10, 0xcc, 0xe1, 0x0a, 0x32, 0xa0, 0xe3,
0x00, 0x3f, 0x83, 0xe1, 0x00, 0x00, 0x52, 0xe3, 0x01, 0x34, 0x83, 0x13, 0x01, 0x35, 0x83, 0xe3,
0x04, 0x30, 0x8c, 0xe5, 0x41, 0x36, 0xa0, 0xe3, 0x01, 0x00, 0x10, 0xe3, 0x16, 0x00, 0x00, 0x1a,
0x03, 0x00, 0x12, 0xe3, 0x06, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x9c, 0xe5, 0x02, 0x01, 0x10, 0xe3,
0x1e, 0xff, 0x2f, 0x01, 0x02, 0x05, 0x10, 0xe3, 0x10, 0x10, 0x93, 0x15, 0x04, 0x10, 0x82, 0x14,
0xf8, 0xff, 0xff, 0xea, 0x04, 0x00, 0x9c, 0xe5, 0x02, 0x01, 0x10, 0xe3, 0x1e, 0xff, 0x2f, 0x01,
0x02, 0x05, 0x10, 0xe3, 0xfa, 0xff, 0xff, 0x0a, 0x10, 0x10, 0x93, 0xe5, 0x01, 0x10, 0xc2, 0xe4,
0x21, 0x14, 0xa0, 0xe1, 0x01, 0x10, 0xc2, 0xe4, 0x21, 0x14, 0xa0, 0xe1, 0x01, 0x10, 0xc2, 0xe4,
0x21, 0x14, 0xa0, 0xe1, 0x01, 0x10, 0xc2, 0xe4, 0xf1, 0xff, 0xff, 0xea, 0x00, 0x10, 0xa0, 0xe3,
0x03, 0x00, 0x12, 0xe3, 0x06, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x9c, 0xe5, 0x02, 0x01, 0x10, 0xe3,
0x1e, 0xff, 0x2f, 0x01, 0x02, 0x05, 0x10, 0xe3, 0x04, 0x10, 0x92, 0x14, 0x10, 0x10, 0x83, 0x15,
0xf8, 0xff, 0xff, 0xea, 0x04, 0x00, 0x9c, 0xe5, 0x02, 0x01, 0x10, 0xe3, 0x1e, 0xff, 0x2f, 0x01,
0x02, 0x05, 0x10, 0xe3, 0xfa, 0xff, 0xff, 0x0a, 0x01, 0x10, 0xd2, 0xe4, 0x01, 0x00, 0xd2, 0xe4,
0x00, 0x14, 0x81, 0xe1, 0x01, 0x00, 0xd2, 0xe4, 0x00, 0x18, 0x81, 0xe1, 0x01, 0x00, 0xd2, 0xe4,
0x00, 0x1c, 0x81, 0xe1, 0x10, 0x10, 0x83, 0xe5, 0xf1, 0xff, 0xff, 0xea, 0x78, 0x40, 0x2d, 0xe9,
0x00, 0x40, 0xa0, 0xe1, 0x01, 0x50, 0xa0, 0xe1, 0x00, 0x60, 0xa0, 0xe3, 0xc0, 0x00, 0xa0, 0xe3,
0x06, 0x10, 0x84, 0xe0, 0xb1, 0xff, 0xff, 0xeb, 0x01, 0x60, 0x86, 0xe2, 0x05, 0x00, 0x56, 0xe1,
0xf9, 0xff, 0xff, 0x3a, 0x78, 0x40, 0xbd, 0xe8, 0x01, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1,
0x78, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x01, 0x50, 0xa0, 0xe1, 0x00, 0x60, 0xa0, 0xe3,
0xc1, 0x00, 0xa0, 0xe3, 0x06, 0x10, 0x84, 0xe0, 0xa4, 0xff, 0xff, 0xeb, 0x01, 0x60, 0x86, 0xe2,
0x05, 0x00, 0x56, 0xe1, 0xf9, 0xff, 0xff, 0x3a, 0x78, 0x40, 0xbd, 0xe8, 0x01, 0x00, 0xa0, 0xe3,
0x1e, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0xa0, 0xe3,
0x1e, 0xff, 0x2f, 0xe1
};
}