mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
core, another fix for z80 reset
This commit is contained in:
parent
2a87da47c0
commit
506adbd5eb
3 changed files with 13 additions and 13 deletions
|
@ -827,6 +827,7 @@ z80_xmap_rebase_sp:
|
||||||
mov r0,z80sp
|
mov r0,z80sp
|
||||||
readmem16
|
readmem16
|
||||||
add z80sp,z80sp,#2
|
add z80sp,z80sp,#2
|
||||||
|
bic z80sp,z80sp,#1<<16
|
||||||
.endif
|
.endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -856,7 +857,7 @@ z80_xmap_rebase_sp:
|
||||||
.else
|
.else
|
||||||
mov r0,\reg
|
mov r0,\reg
|
||||||
subs z80sp,z80sp,#2
|
subs z80sp,z80sp,#2
|
||||||
@ addcc z80sp,z80sp,#1<<16
|
addcc z80sp,z80sp,#1<<16
|
||||||
mov r1,z80sp
|
mov r1,z80sp
|
||||||
writemem16
|
writemem16
|
||||||
.endif
|
.endif
|
||||||
|
@ -874,7 +875,7 @@ z80_xmap_rebase_sp:
|
||||||
.else
|
.else
|
||||||
mov r0,\reg,lsr #16
|
mov r0,\reg,lsr #16
|
||||||
subs z80sp,z80sp,#2
|
subs z80sp,z80sp,#2
|
||||||
@ addcc z80sp,z80sp,#1<<16
|
addcc z80sp,z80sp,#1<<16
|
||||||
mov r1,z80sp
|
mov r1,z80sp
|
||||||
writemem16
|
writemem16
|
||||||
.endif
|
.endif
|
||||||
|
@ -1506,7 +1507,7 @@ DoInterrupt_mode0:
|
||||||
strb r0,[z80sp,#-1]!
|
strb r0,[z80sp,#-1]!
|
||||||
.else
|
.else
|
||||||
subs z80sp,z80sp,#2
|
subs z80sp,z80sp,#2
|
||||||
@ addcc z80sp,z80sp,#1<<16
|
addcc z80sp,z80sp,#1<<16
|
||||||
mov r1,z80sp
|
mov r1,z80sp
|
||||||
writemem16
|
writemem16
|
||||||
ldr r2,[cpucontext, #z80irqvector]
|
ldr r2,[cpucontext, #z80irqvector]
|
||||||
|
@ -4732,6 +4733,9 @@ opcode_3_2:
|
||||||
;@INC SP
|
;@INC SP
|
||||||
opcode_3_3:
|
opcode_3_3:
|
||||||
add z80sp,z80sp,#1
|
add z80sp,z80sp,#1
|
||||||
|
.if !FAST_Z80SP
|
||||||
|
bic z80sp,z80sp,#1<<16
|
||||||
|
.endif
|
||||||
fetch 6
|
fetch 6
|
||||||
;@INC (HL)
|
;@INC (HL)
|
||||||
opcode_3_4:
|
opcode_3_4:
|
||||||
|
@ -4782,7 +4786,10 @@ opcode_3_A:
|
||||||
fetch 13
|
fetch 13
|
||||||
;@DEC SP
|
;@DEC SP
|
||||||
opcode_3_B:
|
opcode_3_B:
|
||||||
sub z80sp,z80sp,#1
|
subs z80sp,z80sp,#1
|
||||||
|
.if !FAST_Z80SP
|
||||||
|
addcc z80sp,z80sp,#1<<16
|
||||||
|
.endif
|
||||||
fetch 6
|
fetch 6
|
||||||
;@INC A
|
;@INC A
|
||||||
opcode_3_C:
|
opcode_3_C:
|
||||||
|
@ -5745,6 +5752,7 @@ opcode_F_1:
|
||||||
mov r0,z80sp
|
mov r0,z80sp
|
||||||
readmem16
|
readmem16
|
||||||
add z80sp,z80sp,#2
|
add z80sp,z80sp,#2
|
||||||
|
bic z80sp,z80sp,#1<<16
|
||||||
and z80a,r0,#0xFF00
|
and z80a,r0,#0xFF00
|
||||||
mov z80a,z80a,lsl#16
|
mov z80a,z80a,lsl#16
|
||||||
and z80f,r0,#0xFF
|
and z80f,r0,#0xFF
|
||||||
|
@ -7638,6 +7646,7 @@ opcode_DD_E1:
|
||||||
readmem16
|
readmem16
|
||||||
ldmfd sp!,{r2,z80xx}
|
ldmfd sp!,{r2,z80xx}
|
||||||
add z80sp,z80sp,#2
|
add z80sp,z80sp,#2
|
||||||
|
bic z80sp,z80sp,#1<<16
|
||||||
.endif
|
.endif
|
||||||
strh r0,[z80xx,#2]
|
strh r0,[z80xx,#2]
|
||||||
fetch 14
|
fetch 14
|
||||||
|
|
|
@ -212,8 +212,6 @@ void Cz80_Reset(cz80_struc *CPU)
|
||||||
{
|
{
|
||||||
// I, R, CPU and interrupts logic is reset, registers are untouched
|
// I, R, CPU and interrupts logic is reset, registers are untouched
|
||||||
memset(&CPU->R, 0, (FPTR)&CPU->BasePC - (FPTR)&CPU->R);
|
memset(&CPU->R, 0, (FPTR)&CPU->BasePC - (FPTR)&CPU->R);
|
||||||
Cz80_Set_Reg(CPU, CZ80_FA, 0xffff);
|
|
||||||
Cz80_Set_Reg(CPU, CZ80_SP, 0xffff);
|
|
||||||
Cz80_Set_Reg(CPU, CZ80_PC, 0);
|
Cz80_Set_Reg(CPU, CZ80_PC, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,14 +112,7 @@ void z80_reset(void)
|
||||||
drZ80.Z80IF = 0;
|
drZ80.Z80IF = 0;
|
||||||
drZ80.z80irqvector = 0xff0000; // RST 38h
|
drZ80.z80irqvector = 0xff0000; // RST 38h
|
||||||
drZ80.Z80PC_BASE = drZ80.Z80PC = z80_read_map[0] << 1;
|
drZ80.Z80PC_BASE = drZ80.Z80PC = z80_read_map[0] << 1;
|
||||||
drZ80.Z80SP = 0xffff;
|
|
||||||
drZ80.Z80F = 0xff;
|
|
||||||
drZ80.Z80A = 0xff << 24;
|
|
||||||
// others not changed, undefined on cold boot
|
// others not changed, undefined on cold boot
|
||||||
/*
|
|
||||||
drZ80.Z80IX = 0xFFFF << 16;
|
|
||||||
drZ80.Z80IY = 0xFFFF << 16;
|
|
||||||
*/
|
|
||||||
#ifdef FAST_Z80SP
|
#ifdef FAST_Z80SP
|
||||||
// drZ80 is locked in single bank
|
// drZ80 is locked in single bank
|
||||||
drz80_sp_base = (PicoIn.AHW & PAHW_SMS) ? 0xc000 : 0x0000;
|
drz80_sp_base = (PicoIn.AHW & PAHW_SMS) ? 0xc000 : 0x0000;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue