no waits, no exp, no ISA

This commit is contained in:
Andrei Holub 2025-01-01 13:32:11 -05:00
parent fa893c6871
commit ad46e8fc53
12 changed files with 160 additions and 181 deletions

View File

@ -8,8 +8,7 @@ macro nomreq_addr
+ 1
macro nomreq_ir %cycles
TADR = (m_i << 8) | (m_r2 & 0x80) | (m_r & 0x7f);
%cycles * call nomreq_addr
+ %cycles
macro in
m_iorq_cycles !! TDAT8 = m_io.read_interruptible(TADR);
@ -22,7 +21,7 @@ macro rm
macro rm_reg
call rm
call nomreq_addr
+ 1
macro rm16
call rm
@ -45,9 +44,7 @@ macro wm16_sp
m_memrq_cycles !! stack_write(SP, TDAT_L);
macro rop
m_m1_cycles-2 !! TDAT8 = opcode_read();
m_refresh_cb((I << 8) | (R2 & 0x80) | (R & 0x7f), 0x00, 0xff);
+ 2
m_m1_cycles !! TDAT8 = opcode_read();
PC++; R++; Q = QT; QT = YF | XF;
macro r800:rop
@ -101,7 +98,7 @@ macro jp_cond
macro jr
call arg
TADR = PC-1;
5 * call nomreq_addr
+ 5
PC += (s8)TDAT8; WZ = PC;
m_branch_cb(true);
@ -121,7 +118,7 @@ macro jr_cond
macro arg16_call
call arg16
m_ea = TDAT; TADR = PC-1;
call nomreq_addr
+ 1
WZ = m_ea; TDAT = PC;
call wm16_sp
PC = m_ea;
@ -129,7 +126,7 @@ macro arg16_call
macro r800:arg16_call
call arg16
m_ea = TDAT; TADR = PC-1;
call nomreq_addr
+ 1
WZ = m_ea; TDAT = PC;
call wm16_sp
PC = m_ea;
@ -207,7 +204,7 @@ macro rrd
TADR = HL;
call rm
WZ = HL+1;
4 * call nomreq_addr
+ 4
TDAT_H = TDAT8; TDAT8 = (TDAT8 >> 4) | (A << 4);
call wm
A = (A & 0xf0) | (TDAT_H & 0x0f); set_f((F & CF) | SZP[A]);
@ -216,7 +213,7 @@ macro rld
TADR = HL;
call rm
WZ = HL+1;
4 * call nomreq_addr
+ 4
TDAT_H = TDAT8; TDAT8 = (TDAT8 << 4) | (A & 0x0f);
call wm
A = (A & 0xf0) | (TDAT_H >> 4); set_f((F & CF) | SZP[A]);
@ -225,11 +222,11 @@ macro ex_sp
TDAT2 = TDAT;
call pop
TADR = SP-1;
call nomreq_addr
+ 1
using std::swap; std::swap(TDAT, TDAT2);
call wm16_sp
TADR = SP;
2 * call nomreq_addr
+ 2
using std::swap; std::swap(TDAT, TDAT2); WZ = TDAT;
macro add16
@ -258,7 +255,7 @@ macro ldi
call rm
TADR = DE;
call wm
2 * call nomreq_addr
+ 2
set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF;
macro r800:ldi
@ -266,19 +263,19 @@ macro r800:ldi
call rm
TADR = DE;
call wm
call nomreq_addr
+ 1
set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF;
macro cpi
TADR = HL;
call rm
5 * call nomreq_addr
+ 5
{ u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro r800:cpi
TADR = HL;
call rm
call nomreq_addr
+ 1
{ u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro ini
@ -316,7 +313,7 @@ macro ldd
call rm
TADR = DE;
call wm
2 * call nomreq_addr
+ 2
{ set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; }
macro r800:ldd
@ -324,21 +321,21 @@ macro r800:ldd
call rm
TADR = DE;
call wm
call nomreq_addr
+ 1
{ set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; }
macro cpd
TADR = HL;
call rm
TADR = HL;
5 * call nomreq_addr
+ 5
{ u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro r800:cpd
TADR = HL;
call rm
TADR = HL;
call nomreq_addr
+ 1
{ u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro ind
@ -375,7 +372,7 @@ macro ldir
call ldi
if (BC != 0) {
TADR = DE;
5 * call nomreq_addr
+ 5
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
@ -383,7 +380,7 @@ macro r800:ldir
call ldi
if (BC != 0) {
TADR = DE;
call nomreq_addr
+ 1
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
@ -391,13 +388,13 @@ macro cpir
call cpi
if (BC != 0 && !(F & ZF)) {
TADR = HL;
5 * call nomreq_addr
+ 5
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:cpir
call cpi
call nomreq_addr
+ 1
if (BC != 0 && !(F & ZF)) {
TADR = HL;
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
@ -407,7 +404,7 @@ macro inir
call ini
if (B != 0) {
TADR = HL;
5 * call nomreq_addr
+ 5
PC -= 2; block_io_interrupted_flags();
}
@ -424,7 +421,7 @@ macro otir
call outi
if (B != 0) {
TADR = BC;
5 * call nomreq_addr
+ 5
PC -= 2; block_io_interrupted_flags();
}
@ -434,7 +431,7 @@ macro r800:otir
call outi
if (B != 0) {
TADR = BC;
5 * call nomreq_addr
+ 5
PC -= 2; block_io_interrupted_flags();
}
@ -442,7 +439,7 @@ macro lddr
call ldd
if (BC != 0) {
TADR = DE;
5 * call nomreq_addr
+ 5
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
@ -450,7 +447,7 @@ macro r800:lddr
call ldd
if (BC != 0) {
TADR = DE;
call nomreq_addr
+ 1
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
@ -458,13 +455,13 @@ macro cpdr
call cpd
if (BC != 0 && !(F & ZF)) {
TADR = HL;
5 * call nomreq_addr
+ 5
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:cpdr
call cpd
call nomreq_addr
+ 1
if (BC != 0 && !(F & ZF)) {
TADR = HL;
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
@ -474,7 +471,7 @@ macro indr
call ind
if (B != 0) {
TADR = HL;
5 * call nomreq_addr
+ 5
PC -= 2; block_io_interrupted_flags();
}
@ -491,7 +488,7 @@ macro otdr
call outd
if (B != 0) {
TADR = BC;
5 * call nomreq_addr
+ 5
PC -= 2; block_io_interrupted_flags();
}
@ -3142,7 +3139,7 @@ dd33 # DB DD
dd34 # INC (IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm_reg
inc(TDAT8);
@ -3151,7 +3148,7 @@ dd34 # INC (IX+o)
dd35 # DEC (IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm_reg
dec(TDAT8);
@ -3161,7 +3158,7 @@ dd36 # LD (IX+o),n
call eax
call arg
TADR = PC-1;
2 * call nomreq_addr
+ 2
TADR = m_ea;
call wm
@ -3227,7 +3224,7 @@ dd45 # LD B,LX
dd46 # LD B,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
B = TDAT8;
@ -3261,7 +3258,7 @@ dd4d # LD C,LX
dd4e # LD C,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
C = TDAT8;
@ -3295,7 +3292,7 @@ dd55 # LD D,LX
dd56 # LD D,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
D = TDAT8;
@ -3329,7 +3326,7 @@ dd5d # LD E,LX
dd5e # LD E,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
E = TDAT8;
@ -3358,7 +3355,7 @@ dd65 # LD HX,LX
dd66 # LD H,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
H = TDAT8;
@ -3386,7 +3383,7 @@ dd6d # LD LX,LX
dd6e # LD L,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
L = TDAT8;
@ -3397,42 +3394,42 @@ dd6f # LD LX,A
dd70 # LD (IX+o),B
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = B;
call wm
dd71 # LD (IX+o),C
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = C;
call wm
dd72 # LD (IX+o),D
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = D;
call wm
dd73 # LD (IX+o),E
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = E;
call wm
dd74 # LD (IX+o),H
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = H;
call wm
dd75 # LD (IX+o),L
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = L;
call wm
@ -3443,7 +3440,7 @@ dd76 # DB DD
dd77 # LD (IX+o),A
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = A;
call wm
@ -3472,7 +3469,7 @@ dd7d # LD A,LX
dd7e # LD A,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
A = TDAT8;
@ -3506,7 +3503,7 @@ dd85 # ADD A,LX
dd86 # ADD A,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
add_a(TDAT8);
@ -3540,7 +3537,7 @@ dd8d # ADC A,LX
dd8e # ADC A,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
adc_a(TDAT8);
@ -3574,7 +3571,7 @@ dd95 # SUB LX
dd96 # SUB (IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
sub(TDAT8);
@ -3608,7 +3605,7 @@ dd9d # SBC A,LX
dd9e # SBC A,(IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
sbc_a(TDAT8);
@ -3642,7 +3639,7 @@ dda5 # AND LX
dda6 # AND (IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
and_a(TDAT8);
@ -3676,7 +3673,7 @@ ddad # XOR LX
ddae # XOR (IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
xor_a(TDAT8);
@ -3710,7 +3707,7 @@ ddb5 # OR LX
ddb6 # OR (IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
or_a(TDAT8);
@ -3744,7 +3741,7 @@ ddbd # CP LX
ddbe # CP (IX+o)
call eax
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
cp(TDAT8);
@ -3801,7 +3798,7 @@ ddcb # ** DD CB xx
call eax
call arg
TADR = PC-1;
2 * call nomreq_addr
+ 2
call jump_prefixed 0xfe
ddcc # DB DD
@ -4230,7 +4227,7 @@ fd33 # DB FD
fd34 # INC (IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm_reg
inc(TDAT8);
@ -4239,7 +4236,7 @@ fd34 # INC (IY+o)
fd35 # DEC (IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm_reg
dec(TDAT8);
@ -4249,7 +4246,7 @@ fd36 # LD (IY+o),n
call eay
call arg
TADR = PC-1;
2 * call nomreq_addr
+ 2
TADR = m_ea;
call wm
@ -4315,7 +4312,7 @@ fd45 # LD B,LY
fd46 # LD B,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
B = TDAT8;
@ -4349,7 +4346,7 @@ fd4d # LD C,LY
fd4e # LD C,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
C = TDAT8;
@ -4383,7 +4380,7 @@ fd55 # LD D,LY
fd56 # LD D,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
D = TDAT8;
@ -4417,7 +4414,7 @@ fd5d # LD E,LY
fd5e # LD E,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
E = TDAT8;
@ -4446,7 +4443,7 @@ fd65 # LD HY,LY
fd66 # LD H,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
H = TDAT8;
@ -4474,7 +4471,7 @@ fd6d # LD LY,LY
fd6e # LD L,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
L = TDAT8;
@ -4485,42 +4482,42 @@ fd6f # LD LY,A
fd70 # LD (IY+o),B
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = B;
call wm
fd71 # LD (IY+o),C
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = C;
call wm
fd72 # LD (IY+o),D
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = D;
call wm
fd73 # LD (IY+o),E
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = E;
call wm
fd74 # LD (IY+o),H
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = H;
call wm
fd75 # LD (IY+o),L
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = L;
call wm
@ -4531,7 +4528,7 @@ fd76 # DB FD
fd77 # LD (IY+o),A
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea; TDAT8 = A;
call wm
@ -4560,7 +4557,7 @@ fd7d # LD A,LY
fd7e # LD A,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
A = TDAT8;
@ -4594,7 +4591,7 @@ fd85 # ADD A,LY
fd86 # ADD A,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
add_a(TDAT8);
@ -4628,7 +4625,7 @@ fd8d # ADC A,LY
fd8e # ADC A,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
adc_a(TDAT8);
@ -4662,7 +4659,7 @@ fd95 # SUB LY
fd96 # SUB (IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
sub(TDAT8);
@ -4696,7 +4693,7 @@ fd9d # SBC A,LY
fd9e # SBC A,(IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
sbc_a(TDAT8);
@ -4730,7 +4727,7 @@ fda5 # AND LY
fda6 # AND (IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
and_a(TDAT8);
@ -4764,7 +4761,7 @@ fdad # XOR LY
fdae # XOR (IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
xor_a(TDAT8);
@ -4798,7 +4795,7 @@ fdb5 # OR LY
fdb6 # OR (IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
or_a(TDAT8);
@ -4832,7 +4829,7 @@ fdbd # CP LY
fdbe # CP (IY+o)
call eay
TADR = PC-1;
5 * call nomreq_addr
+ 5
TADR = m_ea;
call rm
cp(TDAT8);
@ -4889,7 +4886,7 @@ fdcb # ** FD CB xx
call eay
call arg
TADR = PC-1;
2 * call nomreq_addr
+ 2
call jump_prefixed 0xfe
fdcc # DB FD

View File

@ -254,7 +254,7 @@ void byte_state::byte(machine_config &config)
m_pit->out_handler<2>().set([this](int state) { m_speaker->level_w(state); });
m_maincpu->set_io_map(&byte_state::map_io);
m_exp->fb_r_handler().set([]() { return 0xff; });
//m_exp->fb_r_handler().set([]() { return 0xff; });
}
ROM_START(byte)

View File

@ -925,7 +925,7 @@ void chloe_state::video_start()
void chloe_state::chloe(machine_config &config)
{
spectrum_128(config);
config.device_remove("exp");
//config.device_remove("exp");
config.device_remove("palette");
m_ram->set_default_size("512K").set_default_value(0xff);

View File

@ -215,7 +215,7 @@ void pentagon_state::pentagon(machine_config &config)
ay8912.add_route(1, "rspeaker", 0.25);
ay8912.add_route(2, "rspeaker", 0.50);
config.device_remove("exp");
//config.device_remove("exp");
SOFTWARE_LIST(config, "cass_list_pen").set_original("pentagon_cass");
SOFTWARE_LIST(config, "betadisc_list").set_original("spectrum_betadisc_flop");

View File

@ -523,7 +523,7 @@ void scorpion_state::scorpion(machine_config &config)
BETA_DISK(config, m_beta, 0);
config.device_remove("exp");
//config.device_remove("exp");
ADDRESS_MAP_BANK(config, m_bankio).set_map(&scorpion_state::scorpion_ioext).set_options(ENDIANNESS_LITTLE, 8, 17, 0);

View File

@ -173,34 +173,33 @@ void spectrum_128_state::video_start()
uint8_t spectrum_128_state::spectrum_128_pre_opcode_fetch_r(offs_t offset)
{
if (is_contended(offset)) content_early();
//if (is_contended(offset)) content_early();
/* this allows expansion devices to act upon opcode fetches from MEM addresses
for example, interface1 detection fetches requires fetches at 0008 / 0708 to
enable paged ROM and then fetches at 0700 to disable it
*/
m_exp->pre_opcode_fetch(offset);
//m_exp->pre_opcode_fetch(offset);
uint8_t retval = m_maincpu->space(AS_PROGRAM).read_byte(offset);
m_exp->post_opcode_fetch(offset);
//m_exp->post_opcode_fetch(offset);
return retval;
}
void spectrum_128_state::spectrum_128_rom_w(offs_t offset, uint8_t data)
{
m_exp->mreq_w(offset, data);
}
u8 spectrum_128_state::spectrum_128_rom_r(offs_t offset)
{
return m_exp->romcs()
? m_exp->mreq_r(offset)
: ((u8*)m_bank_rom[0]->base())[offset];
return //m_exp->romcs()
//? m_exp->mreq_r(offset)
((u8*)m_bank_rom[0]->base())[offset];
}
template <u8 Bank> void spectrum_128_state::spectrum_128_ram_w(offs_t offset, u8 data)
{
u16 addr = 0x4000 * Bank + offset;
if (is_contended(addr)) content_early();
//if (is_contended(addr)) content_early();
if (is_vram_write(addr)) m_screen->update_now();
((u8*)m_bank_ram[Bank]->base())[offset] = data;
@ -210,16 +209,16 @@ template void spectrum_128_state::spectrum_128_ram_w<0>(offs_t offset, u8 data);
template <u8 Bank> u8 spectrum_128_state::spectrum_128_ram_r(offs_t offset)
{
u16 addr = 0x4000 * Bank + offset;
if (is_contended(addr)) content_early();
//u16 addr = 0x4000 * Bank + offset;
//if (is_contended(addr)) content_early();
return ((u8*)m_bank_ram[Bank]->base())[offset];
}
void spectrum_128_state::spectrum_128_port_7ffd_w(offs_t offset, uint8_t data)
{
if (is_contended(offset)) content_early();
content_early(1);
//if (is_contended(offset)) content_early();
//content_early(1);
/* D0-D2: RAM page located at 0x0c000-0x0ffff */
/* D3 - Screen select (screen 0 in ram page 5, screen 1 in ram page 7 */
@ -235,7 +234,7 @@ void spectrum_128_state::spectrum_128_port_7ffd_w(offs_t offset, uint8_t data)
/* update memory */
spectrum_128_update_memory();
m_exp->iorq_w(offset | 1, data);
//m_exp->iorq_w(offset | 1, data);
}
void spectrum_128_state::spectrum_128_update_memory()
@ -253,15 +252,15 @@ void spectrum_128_state::spectrum_128_update_memory()
uint8_t spectrum_128_state::spectrum_port_r(offs_t offset)
{
if (is_contended(offset))
{
content_early();
content_late();
}
//if (is_contended(offset))
//{
// content_early();
// content_late();
//}
// Pass through to expansion device if present
if (m_exp->get_card_device())
return m_exp->iorq_r(offset | 1);
//if (m_exp->get_card_device())
// return m_exp->iorq_r(offset | 1);
return floating_bus_r();
}
@ -370,12 +369,14 @@ void spectrum_128_state::spectrum_128(machine_config &config)
/* sound hardware */
AY8912(config, "ay8912", X1_128_SINCLAIR / 20).add_route(ALL_OUTPUTS, "mono", 0.25);
/*
/* expansion port */
// expansion port
SPECTRUM_EXPANSION_SLOT(config.replace(), m_exp, spec128_expansion_devices, nullptr);
m_exp->irq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_exp->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
m_exp->fb_r_handler().set(FUNC(spectrum_128_state::floating_bus_r));
*/
/* internal ram */
m_ram->set_default_size("128K");

View File

@ -3434,7 +3434,7 @@ void specnext_state::video_start()
void specnext_state::tbblue(machine_config &config)
{
spectrum_128(config);
config.device_remove("exp");
//config.device_remove("exp");
// m_ram->set_default_size("1M").set_extra_options("2M");
m_ram->set_default_size("2M").set_default_value(0);

View File

@ -179,7 +179,7 @@ void specpls3_state::port_3ffd_w(offs_t offset, uint8_t data)
if (m_upd765.found()) m_upd765->fifo_w(data);
/* mface3 needs to see this port */
if (m_exp) m_exp->iorq_w(offset | 0x3000, data);
//if (m_exp) m_exp->iorq_w(offset | 0x3000, data);
}
uint8_t specpls3_state::port_3ffd_r()
@ -238,17 +238,17 @@ void specpls3_state::plus3_update_memory()
void specpls3_state::rom_w(offs_t offset, uint8_t data)
{
if (m_exp->romcs())
m_exp->mreq_w(offset, data);
else if (m_port_1ffd_data & 0x01)
//if (m_exp->romcs())
// m_exp->mreq_w(offset, data);
if (m_port_1ffd_data & 0x01)
((u8*)m_bank_ram[0]->base())[offset] = data;
}
uint8_t specpls3_state::rom_r(offs_t offset)
{
return m_exp->romcs()
? m_exp->mreq_r(offset)
: (m_port_1ffd_data & 0x01)
return //m_exp->romcs()
//? m_exp->mreq_r(offset)
(m_port_1ffd_data & 0x01)
? ((u8*)m_bank_ram[0]->base())[offset]
: ((u8*)m_bank_rom[0]->base())[offset];
}
@ -261,7 +261,7 @@ void specpls3_state::port_7ffd_w(offs_t offset, uint8_t data)
/* D5 - Disable paging (permanent until reset) */
/* mface3 needs to see this port */
if (m_exp) m_exp->iorq_w(offset | 0x4000, data);
//if (m_exp) m_exp->iorq_w(offset | 0x4000, data);
/* paging disabled? */
if (m_port_7ffd_data & 0x20) return;
@ -290,7 +290,7 @@ void specpls3_state::port_1ffd_w(offs_t offset, uint8_t data)
}
/* mface3 needs to see this port */
if (m_exp) m_exp->iorq_w(offset | 0x1000, data);
//if (m_exp) m_exp->iorq_w(offset | 0x1000, data);
/* paging disabled? */
if ((m_port_7ffd_data & 0x20)==0)
@ -319,7 +319,7 @@ void specpls3_state::video_start()
The function decodes the ports appropriately */
void specpls3_state::plus3_io(address_map &map)
{
map(0x0000, 0xffff).rw(m_exp, FUNC(spectrum_expansion_slot_device::iorq_r), FUNC(spectrum_expansion_slot_device::iorq_w));
//map(0x0000, 0xffff).rw(m_exp, FUNC(spectrum_expansion_slot_device::iorq_r), FUNC(spectrum_expansion_slot_device::iorq_w));
map(0x0000, 0x0000).rw(FUNC(specpls3_state::spectrum_ula_r), FUNC(specpls3_state::spectrum_ula_w)).select(0xfffe);
map(0x4000, 0x4000).w(FUNC(specpls3_state::port_7ffd_w)).select(0x3ffd);
map(0x8000, 0x8000).w("ay8912", FUNC(ay8910_device::data_w)).mirror(0x3ffd);
@ -413,11 +413,11 @@ void specpls3_state::spectrum_plus2(machine_config &config)
subdevice<gfxdecode_device>("gfxdecode")->set_info(specpls3);
SPECTRUM_EXPANSION_SLOT(config.replace(), m_exp, specpls3_expansion_devices, nullptr);
m_exp->irq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_exp->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
//SPECTRUM_EXPANSION_SLOT(config.replace(), m_exp, specpls3_expansion_devices, nullptr);
//m_exp->irq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
//m_exp->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
// these models don't have floating bus
m_exp->fb_r_handler().set([]() { return 0xff; });
//m_exp->fb_r_handler().set([]() { return 0xff; });
}
void specpls3_state::spectrum_plus3(machine_config &config)

View File

@ -293,46 +293,46 @@ SamRam
uint8_t spectrum_state::pre_opcode_fetch_r(offs_t offset)
{
if (is_contended(offset)) content_early();
//if (is_contended(offset)) content_early();
/* this allows expansion devices to act upon opcode fetches from MEM addresses
for example, interface1 detection fetches requires fetches at 0008 / 0708 to
enable paged ROM and then fetches at 0700 to disable it
*/
m_exp->pre_opcode_fetch(offset);
//m_exp->pre_opcode_fetch(offset);
uint8_t retval = m_specmem->space(AS_PROGRAM).read_byte(offset);
m_exp->post_opcode_fetch(offset);
//m_exp->post_opcode_fetch(offset);
return retval;
}
uint8_t spectrum_state::spectrum_data_r(offs_t offset)
{
if (is_contended(offset)) content_early();
//if (is_contended(offset)) content_early();
m_exp->pre_data_fetch(offset);
//m_exp->pre_data_fetch(offset);
uint8_t retval = m_specmem->space(AS_PROGRAM).read_byte(offset);
m_exp->post_data_fetch(offset);
//m_exp->post_data_fetch(offset);
return retval;
}
void spectrum_state::spectrum_data_w(offs_t offset, uint8_t data)
{
if (is_contended(offset)) content_early();
if (is_vram_write(offset)) m_screen->update_now();
//if (is_contended(offset)) content_early();
//if (is_vram_write(offset)) m_screen->update_now();
m_specmem->space(AS_PROGRAM).write_byte(offset,data);
}
void spectrum_state::spectrum_rom_w(offs_t offset, uint8_t data)
{
m_exp->mreq_w(offset, data);
//m_exp->mreq_w(offset, data);
}
uint8_t spectrum_state::spectrum_rom_r(offs_t offset)
{
return m_exp->romcs()
? m_exp->mreq_r(offset)
: memregion("maincpu")->base()[offset];
return //m_exp->romcs()
//? m_exp->mreq_r(offset)
memregion("maincpu")->base()[offset];
}
/*
@ -343,8 +343,8 @@ uint8_t spectrum_state::spectrum_rom_r(offs_t offset)
*/
void spectrum_state::spectrum_ula_w(offs_t offset, uint8_t data)
{
if (is_contended(offset)) content_early();
content_early(1);
//if (is_contended(offset)) content_early();
//content_early(1);
u8 changed = m_port_fe_data ^ data;
@ -362,7 +362,7 @@ void spectrum_state::spectrum_ula_w(offs_t offset, uint8_t data)
// Some exp devices use ula port unused bits 5-7:
// Beta v2/3/plus use bit 7, Beta clones use bits 6 and 7
if (m_exp) m_exp->iorq_w(offset, data);
//if (m_exp) m_exp->iorq_w(offset, data);
m_port_fe_data = data;
}
@ -371,8 +371,8 @@ void spectrum_state::spectrum_ula_w(offs_t offset, uint8_t data)
/* DJR: Spectrum+ keys added */
uint8_t spectrum_state::spectrum_ula_r(offs_t offset)
{
if (is_contended(offset)) content_early();
content_early(1);
//if (is_contended(offset)) content_early();
//content_early(1);
int lines = offset >> 8;
int data = 0xff;
@ -386,7 +386,7 @@ uint8_t spectrum_state::spectrum_ula_r(offs_t offset)
int joy2 = m_io_joy2.read_safe(0x1f) & 0x1f;
/* expansion port */
if (m_exp) data = m_exp->iorq_r(offset);
//if (m_exp) data = m_exp->iorq_r(offset);
/* Caps - V */
if ((lines & 1) == 0)
@ -448,38 +448,15 @@ uint8_t spectrum_state::spectrum_ula_r(offs_t offset)
void spectrum_state::spectrum_port_w(offs_t offset, uint8_t data)
{
if (is_contended(offset))
{
content_early();
content_late();
}
// Pass through to expansion device if present
if (m_exp->get_card_device())
m_exp->iorq_w(offset | 1, data);
}
uint8_t spectrum_state::spectrum_port_r(offs_t offset)
{
if (is_contended(offset))
{
content_early();
content_late();
}
// Pass through to expansion device if present
if (m_exp->get_card_device())
return m_exp->iorq_r(offset | 1);
return floating_bus_r();
}
uint8_t spectrum_state::spectrum_clone_port_r(offs_t offset)
{
// Pass through to expansion device if present
if (m_exp->get_card_device())
return m_exp->iorq_r(offset | 1);
// no floating bus for clones
return 0xff;
}
@ -829,10 +806,10 @@ void spectrum_state::spectrum_common(machine_config &config)
m_speaker->set_levels(4, speaker_levels);
/* expansion port */
SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, "kempjoy");
m_exp->irq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_exp->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
m_exp->fb_r_handler().set(FUNC(spectrum_state::floating_bus_r));
//SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, "kempjoy");
//m_exp->irq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
//m_exp->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
//m_exp->fb_r_handler().set(FUNC(spectrum_state::floating_bus_r));
/* devices */
SNAPSHOT(config, "snapshot", "ach,frz,plusd,prg,sem,sit,sna,snp,snx,sp,z80,zx").set_load_callback(FUNC(spectrum_state::snapshot_cb));
@ -864,8 +841,8 @@ void spectrum_state::spectrum_clone(machine_config &config)
spectrum(config);
// no floating bus
m_maincpu->set_io_map(&spectrum_state::spectrum_clone_io);
m_exp->fb_r_handler().set([]() { return 0xff; });
m_maincpu->set_io_map(&spectrum_state::spectrum_clone_io);
//m_exp->fb_r_handler().set([]() { return 0xff; });
}
/***************************************************************************

View File

@ -13,7 +13,7 @@
#include "spec_snqk.h"
#include "machine/bankdev.h"
#include "bus/spectrum/exp.h"
//#include "bus/spectrum/exp.h"
#include "imagedev/cassette.h"
#include "imagedev/snapquik.h"
#include "machine/ram.h"
@ -58,7 +58,7 @@ public:
m_ram(*this, RAM_TAG),
m_specmem(*this, "specmem"),
m_speaker(*this, "speaker"),
m_exp(*this, "exp"),
//m_exp(*this, "exp"),
m_io_line0(*this, "LINE0"),
m_io_line1(*this, "LINE1"),
m_io_line2(*this, "LINE2"),
@ -158,7 +158,7 @@ protected:
required_device<ram_device> m_ram;
optional_device<address_map_bank_device> m_specmem;
required_device<speaker_sound_device> m_speaker;
optional_device<spectrum_expansion_slot_device> m_exp;
//optional_device<spectrum_expansion_slot_device> m_exp;
// Regular spectrum ports; marked as optional because of other subclasses
optional_ioport m_io_line0;

View File

@ -1871,6 +1871,10 @@ INPUT_PORTS_START( sprinter )
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("TURBO") PORT_CODE(KEYCODE_F12) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(sprinter_state::turbo_changed), 0)
INPUT_PORTS_END
static void no_devices(device_slot_interface &device)
{
}
void sprinter_state::sprinter(machine_config &config)
{
spectrum_128(config);
@ -1895,7 +1899,7 @@ void sprinter_state::sprinter(machine_config &config)
ISA8(config, m_isa[1], X_SP / 5);
m_isa[1]->set_custom_spaces();
ISA8_SLOT(config, "isa8", 0, m_isa[1], pc_isa8_cards, nullptr, false);
ISA8_SLOT(config, "isa8", 0, m_isa[1], no_devices, nullptr, false);
m_screen->set_raw(X_SP / 3, SPRINT_WIDTH, SPRINT_HEIGHT, { 0, SPRINT_XVIS - 1, 0, SPRINT_YVIS - 1 });
m_screen->set_screen_update(FUNC(sprinter_state::screen_update));
@ -1915,10 +1919,10 @@ void sprinter_state::sprinter(machine_config &config)
m_maincpu->out_pb_callback().set(FUNC(sprinter_state::pio_b_w)); // joy2 ctrl
m_maincpu->in_pa_callback().set([this]() { return joy_ctrl_r(2); });
rs232_port_device &m_rs232(RS232_PORT(config, "rs232", default_rs232_devices, "microsoft_mouse"));
rs232_port_device &m_rs232(RS232_PORT(config, "rs232", no_devices, "microsoft_mouse"));
m_rs232.option_add("microsoft_mouse", MSFT_HLE_SERIAL_MOUSE);
m_rs232.option_add("logitech_mouse", LOGITECH_HLE_SERIAL_MOUSE);
m_rs232.option_add("wheel_mouse", WHEEL_HLE_SERIAL_MOUSE);
//m_rs232.option_add("logitech_mouse", LOGITECH_HLE_SERIAL_MOUSE);
//m_rs232.option_add("wheel_mouse", WHEEL_HLE_SERIAL_MOUSE);
m_rs232.rxd_handler().set(m_maincpu, FUNC(z84c015_device::rxb_w)); // MOUSE_D
m_maincpu->out_txdb_callback().set("rs232", FUNC(rs232_port_device::write_txd)); // TXDB
m_maincpu->zc_callback<0>().set(m_maincpu, FUNC(z84c015_device::rxcb_w)); // CLK_COM1

View File

@ -264,7 +264,7 @@ void tsconf_state::tsconf(machine_config &config)
{
spectrum_128(config);
config.device_remove("exp");
//config.device_remove("exp");
config.device_remove("palette");
Z80(config.replace(), m_maincpu, 14_MHz_XTAL / 4);