-.if DRZ80_FOR_PICODRIVE\r
-\r
-.macro YM2612Read_and_ret8\r
- stmfd sp!,{r3,r12,lr}\r
-.if EXTERNAL_YM2612\r
- ldr r1,=PicoOpt\r
- ldr r1,[r1]\r
- tst r1,#0x200\r
- bne 10f\r
- bl YM2612Read_\r
- ldmfd sp!,{r3,r12,pc}\r
-10:\r
- bl YM2612Read_940\r
-.else\r
- bl YM2612Read_\r
-.endif\r
- ldmfd sp!,{r3,r12,pc}\r
-.endm\r
-\r
-.macro YM2612Read_and_ret16\r
- stmfd sp!,{r3,r12,lr}\r
-.if EXTERNAL_YM2612\r
- ldr r0,=PicoOpt\r
- ldr r0,[r0]\r
- tst r0,#0x200\r
- bne 10f\r
- bl YM2612Read_\r
- orr r0,r0,r0,lsl #8\r
- ldmfd sp!,{r3,r12,pc}\r
-10:\r
- bl YM2612Read_940\r
- orr r0,r0,r0,lsl #8\r
-.else\r
- bl YM2612Read_\r
- orr r0,r0,r0,lsl #8\r
-.endif\r
- ldmfd sp!,{r3,r12,pc}\r
-.endm\r
-\r
-pico_z80_read8: @ addr\r
- cmp r0,#0x2000 @ Z80 RAM\r
- ldrlt r1,[cpucontext,#z80sp_base]\r
- ldrltb r0,[r1,r0]\r
- bxlt lr\r
-\r
- cmp r0,#0x8000 @ 68k bank\r
- blt 1f\r
- ldr r2,=(Pico+0x22212)\r
- ldrh r1,[r2]\r
- bic r0,r0,#0x3f8000\r
- orr r0,r0,r1,lsl #15\r
- ldr r1,[r2,#-0xe] @ ROM size\r
- cmp r0,r1\r
- ldrlt r1,[r2,#-0x12] @ ROM\r
- eorlt r0,r0,#1 @ our ROM is byteswapped\r
- ldrltb r0,[r1,r0]\r
- bxlt lr\r
- stmfd sp!,{r3,r12,lr}\r
- bl PicoRead8\r
- ldmfd sp!,{r3,r12,pc}\r
-1:\r
- mov r1,r0,lsr #13\r
- cmp r1,#2 @ YM2612 (0x4000-0x5fff)\r
+.if DRZ80_XMAP\r
+\r
+z80_xmap_read8: @ addr\r
+ ldr r1,[cpucontext,#z80_read8]\r
+ mov r2,r0,lsr #Z80_MEM_SHIFT\r
+ ldr r1,[r1,r2,lsl #2]\r
+ movs r1,r1,lsl #1\r
+ ldrccb r0,[r1,r0]\r
+ bxcc lr\r
+\r
+z80_xmap_read8_handler: @ addr, func\r
+ str z80_icount,[cpucontext,#cycles_pointer]\r
+ stmfd sp!,{r12,lr}\r
+ mov lr,pc\r
+ bx r1\r
+ ldr z80_icount,[cpucontext,#cycles_pointer]\r
+ ldmfd sp!,{r12,pc}\r
+\r
+z80_xmap_write8: @ data, addr\r
+ ldr r2,[cpucontext,#z80_write8]\r
+ add r2,r2,r1,lsr #Z80_MEM_SHIFT-2\r
+ bic r2,r2,#3\r
+ ldr r2,[r2]\r
+ movs r2,r2,lsl #1\r
+ strccb r0,[r2,r1]\r
+ bxcc lr\r
+\r
+z80_xmap_write8_handler: @ data, addr, func\r
+ str z80_icount,[cpucontext,#cycles_pointer]\r
+ mov r3,r0\r
+ mov r0,r1\r
+ mov r1,r3\r
+ stmfd sp!,{r12,lr}\r
+ mov lr,pc\r
+ bx r2\r
+ ldr z80_icount,[cpucontext,#cycles_pointer]\r
+ ldmfd sp!,{r12,pc}\r
+\r
+z80_xmap_read16: @ addr\r
+ @ check if we cross bank boundary\r
+ add r1,r0,#1\r
+ eor r1,r1,r0\r
+ tst r1,#1<<Z80_MEM_SHIFT\r