.include "port_config.s"\r
\r
.text\r
+.align 4\r
\r
@ default jump tables\r
\r
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
\r
.bss\r
+.align 4\r
@.section .bss, "brw"\r
@.data\r
\r
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
\r
.text\r
+.align 4\r
\r
.global PicoMemReset\r
.global PicoRead8\r
@ update memhandlers according to ROM size\r
ldr r1, =m_read8_above_rom\r
ldr r0, =m_read8_table\r
- mov r2, #16\r
+ mov r2, #20\r
1:\r
sub r2, r2, #1\r
cmp r2, r12\r
2:\r
ldr r1, =m_read16_above_rom\r
ldr r0, =m_read16_table\r
- mov r2, #16\r
+ mov r2, #20\r
1:\r
sub r2, r2, #1\r
cmp r2, r12\r
2:\r
ldr r1, =m_read32_above_rom\r
ldr r0, =m_read32_table\r
- mov r2, #16\r
+ mov r2, #20\r
1:\r
sub r2, r2, #1\r
cmp r2, r12\r
cmp r2, #0x4000\r
mvnne r0, #0\r
bxne lr @ invalid\r
-.if EXTERNAL_YM2612\r
ldr r1, =PicoOpt\r
ldr r1, [r1]\r
tst r1, #1\r
- beq m_read8_fake_ym2612\r
- tst r1, #0x200\r
- beq YM2612Read_\r
- b YM2612Read_940\r
-.else\r
- b YM2612Read_\r
-.endif\r
+ bne ym2612_read_local_68k\r
\r
m_read8_fake_ym2612:\r
ldr r3, =(Pico+0x22200)\r
bx lr\r
\r
m_read8_above_rom:\r
+ @ might still be SRam (Micro Machines, HardBall '95)\r
+ ldr r2, =(SRam)\r
+ ldr r3, =(Pico+0x22200)\r
+ ldr r1, [r2, #8] @ SRam.end\r
+ cmp r0, r1\r
+ bgt m_read8_ar_nosram\r
+ ldr r1, [r2, #4] @ SRam.start\r
+ cmp r0, r1\r
+ blt m_read8_ar_nosram\r
+ ldrb r1, [r3, #0x11] @ Pico.m.sram_reg\r
+ tst r1, #5\r
+ bne SRAMRead\r
+m_read8_ar_nosram:\r
+ ldr r2, =PicoRead16Hook\r
stmfd sp!,{r0,lr}\r
+ ldr r2, [r2]\r
bic r0, r0, #1\r
mov r1, #8\r
- bl OtherRead16End\r
+ mov lr, pc\r
+ bx r2\r
ldmfd sp!,{r1,lr}\r
tst r1, #1\r
moveq r0, r0, lsr #8\r
tst r1, #5\r
beq m_read16_nosram\r
stmfd sp!,{lr}\r
- bl SRAMRead\r
- orr r0, r0, r0, lsl #8\r
+ bl SRAMRead16\r
ldmfd sp!,{pc}\r
m_read16_nosram:\r
ldr r1, [r3, #4] @ romsize\r
bx lr\r
\r
m_read16_above_rom:\r
+ @ might still be SRam\r
+ ldr r2, =(SRam)\r
+ ldr r3, =(Pico+0x22200)\r
+ ldr r1, [r2, #8] @ SRam.end\r
bic r0, r0, #1\r
+ cmp r0, r1\r
+ bgt m_read16_ar_nosram\r
+ ldr r1, [r2, #4] @ SRam.start\r
+ cmp r0, r1\r
+ blt m_read16_ar_nosram\r
+ ldrb r1, [r3, #0x11] @ Pico.m.sram_reg\r
+ tst r1, #5\r
+ beq m_read16_ar_nosram\r
+ stmfd sp!,{lr}\r
+ bl SRAMRead16\r
+ ldmfd sp!,{pc}\r
+m_read16_ar_nosram:\r
+ ldr r2, =PicoRead16Hook\r
+ ldr r2, [r2]\r
mov r1, #16\r
- b OtherRead16End\r
+ bx r2\r
\r
.pool\r
\r
tst r1, #5\r
beq m_read32_nosram\r
stmfd sp!,{r0,lr}\r
- bl SRAMRead\r
+ bl SRAMRead16\r
ldmfd sp!,{r1,lr}\r
stmfd sp!,{r0,lr}\r
add r0, r1, #2\r
- bl SRAMRead\r
+ bl SRAMRead16\r
ldmfd sp!,{r1,lr}\r
- orr r0, r1, r0, lsl #16\r
- orr r0, r0, r0, lsl #8\r
+ orr r0, r0, r1, lsl #16\r
bx lr\r
m_read32_nosram:\r
ldr r1, [r3, #4] @ romsize\r
bx lr\r
\r
m_read32_above_rom:\r
+ ldr r2, =PicoRead16Hook\r
bic r0, r0, #1\r
- stmfd sp!,{r0,lr}\r
+ ldr r2, [r2]\r
mov r1, #32\r
- bl OtherRead16End\r
+ stmfd sp!,{r0,r2,lr}\r
+ mov lr, pc\r
+ bx r2\r
mov r1, r0\r
- ldmfd sp!,{r0}\r
+ ldmfd sp!,{r0,r2}\r
stmfd sp!,{r1}\r
add r0, r0, #2\r
mov r1, #32\r
- bl OtherRead16End\r
+ mov lr, pc\r
+ bx r2\r
ldmfd sp!,{r1,lr}\r
orr r0, r0, r1, lsl #16\r
bx lr\r
bic r0, r0, #0xff0000\r
bic r0, r0, #0x00e000\r
tst r2, #1\r
+ ldr r2, =SekCycleCnt\r
streqb r1, [r3, r0] @ zram\r
+ ldr r0, [r2]\r
+ add r0, r0, #2 @ hack?\r
+ str r0, [r2]\r
bx lr\r
\r
m_write8_z80_not_ram:\r
and r2, r0, #0x6000\r
cmp r2, #0x4000\r
bne m_write8_z80_not_ym2612\r
- ldr r2, =PicoOpt\r
+ ldr r3, =PicoOpt\r
and r0, r0, #3\r
- ldr r2, [r2]\r
- tst r2, #1\r
+ ldr r3, [r3]\r
+ mov r2, #0 @ is_from_z80 = 0\r
+ tst r3, #1\r
bxeq lr\r
stmfd sp!,{lr}\r
-.if EXTERNAL_YM2612\r
- tst r2, #0x200\r
- ldreq r2, =YM2612Write_\r
- ldrne r2, =YM2612Write_940\r
- mov lr, pc\r
- bx r2\r
-.else\r
- bl YM2612Write_\r
-.endif\r
+ and r1, r1, #0xff\r
+ bl ym2612_write_local\r
ldr r2, =emustatus\r
ldmfd sp!,{lr}\r
ldr r1, [r2]\r
- orr r1, r0, r2\r
- str r1, [r2] @ emustatus|=YM2612Write(a&3, d);\r
+ and r0, r0, #1\r
+ orr r1, r0, r1\r
+ str r1, [r2] @ emustatus|=ym2612_write_local(a&3, d);\r
bx lr\r
\r
m_write8_z80_not_ym2612: @ not too likely\r
m_write8_z80_bank_reg:\r
ldr r3, =(Pico+0x22208) @ Pico.m\r
ldrh r2, [r3, #0x0a]\r
- mov r1, r1, lsr #8\r
+ mov r1, r1, lsl #8\r
orr r2, r1, r2, lsr #1\r
bic r2, r2, #0xfe00\r
strh r2, [r3, #0x0a]\r
bne OtherWrite8\r
m_write8_psg:\r
ldr r2, =PicoOpt\r
- mov r0, r1\r
+ and r0, r1, #0xff\r
ldr r2, [r2]\r
tst r2, #2\r
bxeq lr\r