changed EI handling a bit and types
[picodrive.git] / cpu / DrZ80 / drz80.s
index eba8b95..1061910 100644 (file)
 .endif\r
 \r
 .if DRZ80_FOR_PICODRIVE\r
-.include "port_config.s"\r
-      .extern YM2612Read_\r
-.if EXTERNAL_YM2612\r
-      .extern YM2612Read_940\r
-.endif\r
       .extern PicoRead8\r
       .extern Pico\r
       .extern z80_write\r
+      .extern ym2612_read_local_z80\r
 .endif\r
 \r
 DrZ80Ver: .long 0x0001\r
@@ -110,43 +106,6 @@ DrZ80Ver: .long 0x0001
 \r
 .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
@@ -165,15 +124,18 @@ pico_z80_read8: @ addr
     eorlt r0,r0,#1         @ our ROM is byteswapped\r
     ldrltb r0,[r1,r0]\r
     bxlt lr\r
-       stmfd sp!,{r3,r12,lr}\r
+    stmfd sp!,{r3,r12,lr}\r
     bl PicoRead8\r
-       ldmfd sp!,{r3,r12,pc}\r
+    ldmfd sp!,{r3,r12,pc}\r
 1:\r
     mov r1,r0,lsr #13\r
     cmp r1,#2              @ YM2612 (0x4000-0x5fff)\r
     bne 0f\r
     and r0,r0,#3\r
-       YM2612Read_and_ret8\r
+    stmfd sp!,{r3,r12,lr}\r
+    str z80_icount,[cpucontext,#cycles_pointer]\r
+    bl ym2612_read_local_z80\r
+    ldmfd sp!,{r3,r12,pc}\r
 0:\r
     cmp r0,#0x4000\r
     movge r0,#0xff\r
@@ -217,13 +179,17 @@ pico_z80_read16: @ addr
     add r0,r4,#1\r
     bl PicoRead8\r
     orr r0,r5,r0,lsl #8\r
-       ldmfd sp!,{r3-r5,r12,pc}\r
+    ldmfd sp!,{r3-r5,r12,pc}\r
 1:\r
     mov r1,r0,lsr #13\r
     cmp r1,#2              @ YM2612 (0x4000-0x5fff)\r
     bne 0f\r
     and r0,r0,#3\r
-       YM2612Read_and_ret16\r
+    stmfd sp!,{r3,r12,lr}\r
+    str z80_icount,[cpucontext,#cycles_pointer]\r
+    bl ym2612_read_local_z80\r
+    orr r0,r0,r0,lsl #8\r
+    ldmfd sp!,{r3,r12,pc}\r
 0:\r
     cmp r0,#0x4000\r
     movge r0,#0xff\r
@@ -244,6 +210,7 @@ pico_z80_write8: @ data, addr
     bx lr\r
 1:\r
     stmfd sp!,{r3,r12,lr}\r
+    str z80_icount,[cpucontext,#cycles_pointer]\r
     bl z80_write\r
     ldmfd sp!,{r3,r12,pc}\r
 \r
@@ -257,14 +224,15 @@ pico_z80_write16: @ data, addr
     strb r0,[r2,#1]\r
     bx lr\r
 1:\r
-       stmfd sp!,{r3-r5,r12,lr}\r
+    stmfd sp!,{r3-r5,r12,lr}\r
+    str z80_icount,[cpucontext,#cycles_pointer]\r
     mov r4,r0\r
     mov r5,r1\r
-       bl z80_write\r
+    bl z80_write\r
     mov r0,r4,lsr #8\r
     add r1,r5,#1\r
-       bl z80_write\r
-       ldmfd sp!,{r3-r5,r12,pc}\r
+    bl z80_write\r
+    ldmfd sp!,{r3-r5,r12,pc}\r
 \r
     .pool\r
 .endif\r
@@ -1462,7 +1430,6 @@ DoInterrupt:
     bne DoInterrupt_mode1\r
     tst r1,#2\r
     bne DoInterrupt_mode2\r
-    b   DoInterrupt_mode0\r
 \r
 DoInterrupt_mode0:\r
        ;@ get 3 byte vector\r
@@ -4601,7 +4568,7 @@ opcode_3_8:
        tst z80f,#1<<CFlag\r
        bne opcode_1_8\r
        add z80pc,z80pc,#1\r
-       fetch 8\r
+       fetch 7\r
 ;@ADD HL,SP\r
 opcode_3_9:\r
 .if FAST_Z80SP\r
@@ -4619,7 +4586,7 @@ opcode_3_A:
        orr r0,r0,r1, lsl #8\r
        readmem8\r
        mov z80a,r0, lsl #24\r
-       fetch 11\r
+       fetch 13\r
 ;@DEC SP\r
 opcode_3_B:\r
        sub z80sp,z80sp,#1\r
@@ -4923,6 +4890,7 @@ opcode_7_6:
        ldrb r0,[cpucontext,#z80if]\r
        orr r0,r0,#Z80_HALT\r
        strb r0,[cpucontext,#z80if]\r
+       mov z80_icount,#0\r
        b z80_execute_end\r
 ;@LD (HL),A\r
 opcode_7_7:\r
@@ -5179,7 +5147,7 @@ opcode_B_F:
 ;@RET NZ\r
 opcode_C_0:\r
        tst z80f,#1<<ZFlag\r
-       beq opcode_C_9          ;@unconditional RET\r
+       beq opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
 \r
 ;@POP BC\r
@@ -5222,8 +5190,11 @@ opcode_C_7:
 ;@RET Z\r
 opcode_C_8:\r
        tst z80f,#1<<ZFlag\r
-       bne opcode_C_9          ;@unconditional RET\r
+       bne opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
+\r
+opcode_C_9_cond:\r
+       sub z80_icount,#1\r
 ;@RET\r
 opcode_C_9:\r
     opPOP\r
@@ -5304,7 +5275,7 @@ opcode_C_F:
 ;@RET NC\r
 opcode_D_0:\r
        tst z80f,#1<<CFlag\r
-       beq opcode_C_9          ;@unconditional RET\r
+       beq opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
 ;@POP DE\r
 opcode_D_1:\r
@@ -5346,7 +5317,7 @@ opcode_D_7:
 ;@RET C\r
 opcode_D_8:\r
        tst z80f,#1<<CFlag\r
-       bne opcode_C_9          ;@unconditional RET\r
+       bne opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
 ;@EXX\r
 opcode_D_9:\r
@@ -5432,7 +5403,7 @@ opcode_D_F:
 ;@RET PO\r
 opcode_E_0:\r
        tst z80f,#1<<VFlag\r
-       beq opcode_C_9          ;@unconditional RET\r
+       beq opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
 ;@POP HL\r
 opcode_E_1:\r
@@ -5487,7 +5458,7 @@ opcode_E_7:
 ;@RET PE\r
 opcode_E_8:\r
        tst z80f,#1<<VFlag\r
-       bne opcode_C_9          ;@unconditional RET\r
+       bne opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
 ;@JP (HL)\r
 opcode_E_9:\r
@@ -5563,7 +5534,7 @@ opcode_E_F:
 ;@RET P\r
 opcode_F_0:\r
        tst z80f,#1<<SFlag\r
-       beq opcode_C_9          ;@unconditional RET\r
+       beq opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
 ;@POP AF\r
 opcode_F_1:\r
@@ -5621,7 +5592,7 @@ opcode_F_7:
 ;@RET M\r
 opcode_F_8:\r
        tst z80f,#1<<SFlag\r
-       bne opcode_C_9          ;@unconditional RET\r
+       bne opcode_C_9_cond             ;@unconditional RET\r
        fetch 5\r
 ;@LD SP,HL\r
 opcode_F_9:\r
@@ -5632,7 +5603,7 @@ opcode_F_9:
 .else\r
        mov z80sp,z80hl, lsr #16\r
 .endif\r
-       fetch 4\r
+       fetch 6\r
 ;@JP M,$+3\r
 opcode_F_A:\r
        tst z80f,#1<<SFlag\r
@@ -6672,11 +6643,14 @@ opcode_DD_NF:
 ;@     mov r0,#0xFD00\r
 ;@     orr r0,r0,r1\r
 ;@     b end_loop\r
+\r
 opcode_DD_NF2:\r
-       mov r0,#0xDD0000\r
-       orr r0,r0,#0xCB00\r
-       orr r0,r0,r1\r
-       b end_loop\r
+       fetch 23\r
+;@ notaz: we don't want to deadlock here\r
+;@     mov r0,#0xDD0000\r
+;@     orr r0,r0,#0xCB00\r
+;@     orr r0,r0,r1\r
+;@     b end_loop\r
 \r
 ;@ADD IX,BC\r
 opcode_DD_09:\r
@@ -8071,8 +8045,8 @@ opcode_ED_BB:
 ;@from the DD location but the address of the IY reg is passed instead\r
 ;@of IX\r
 \r
-end_loop:\r
-     b end_loop\r
+;@end_loop:\r
+;@     b end_loop\r
 \r
 \r
 \r