mirror of
https://github.com/holub/mame
synced 2025-07-06 02:18:09 +03:00
cpu/z80: Flatten 16b rw operations in order to avoid vars manipulations (#13676)
This commit is contained in:
parent
1a97bc2159
commit
720609f661
@ -25,19 +25,15 @@ macro rm_reg %addr
|
|||||||
@nomreq_addr %addr
|
@nomreq_addr %addr
|
||||||
|
|
||||||
macro rm16 %addr
|
macro rm16 %addr
|
||||||
@rm %addr
|
m_memrq_cycles !! TDAT_L = data_read(%addr);
|
||||||
TDAT_H = TDAT_L;
|
m_memrq_cycles !! TDAT_H = data_read(%addr+1);
|
||||||
@rm %addr+1
|
|
||||||
using std::swap;
|
|
||||||
swap(TDAT_H, TDAT_L);
|
|
||||||
|
|
||||||
macro wm %addr
|
macro wm %addr
|
||||||
m_memrq_cycles !! data_write(%addr, TDAT8);
|
m_memrq_cycles !! data_write(%addr, TDAT8);
|
||||||
|
|
||||||
macro wm16 %addr
|
macro wm16 %addr
|
||||||
@wm %addr
|
m_memrq_cycles !! data_write(%addr, TDAT_L);
|
||||||
TDAT8 = TDAT_H;
|
m_memrq_cycles !! data_write(%addr+1, TDAT_H);
|
||||||
@wm %addr+1
|
|
||||||
|
|
||||||
macro wm16_sp %d16
|
macro wm16_sp %d16
|
||||||
SP--;
|
SP--;
|
||||||
@ -66,12 +62,12 @@ macro arg
|
|||||||
m_memrq_cycles !! TDAT8 = arg_read();
|
m_memrq_cycles !! TDAT8 = arg_read();
|
||||||
PC++;
|
PC++;
|
||||||
|
|
||||||
macro arg16
|
macro arg16 %dd
|
||||||
@arg
|
m_memrq_cycles !! TDAT_L = arg_read();
|
||||||
TDAT_H = TDAT_L;
|
PC++;
|
||||||
@arg
|
m_memrq_cycles !! TDAT_H = arg_read();
|
||||||
using std::swap;
|
PC++;
|
||||||
swap(TDAT_H, TDAT_L);
|
%dd = TDAT;
|
||||||
|
|
||||||
macro eax
|
macro eax
|
||||||
@arg
|
@arg
|
||||||
@ -94,37 +90,31 @@ macro push %d16
|
|||||||
@wm16_sp %d16
|
@wm16_sp %d16
|
||||||
|
|
||||||
macro jp
|
macro jp
|
||||||
@arg16
|
@arg16 PC
|
||||||
PC = TDAT;
|
|
||||||
WZ = PC;
|
WZ = PC;
|
||||||
|
|
||||||
macro t6a84:jp
|
macro t6a84:jp
|
||||||
@arg16
|
@arg16 PC
|
||||||
PC = TDAT;
|
|
||||||
WZ = PC;
|
WZ = PC;
|
||||||
paged_jump();
|
paged_jump();
|
||||||
|
|
||||||
macro jp_cond
|
macro jp_cond
|
||||||
if (TDAT8) {
|
if (TDAT8) {
|
||||||
@arg16
|
@arg16 PC
|
||||||
PC = TDAT;
|
|
||||||
WZ = PC;
|
WZ = PC;
|
||||||
} else {
|
} else {
|
||||||
// implicit do PC += 2
|
// implicit do PC += 2
|
||||||
@arg16
|
@arg16 WZ
|
||||||
WZ = TDAT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro t6a84:jp_cond
|
macro t6a84:jp_cond
|
||||||
if (TDAT8) {
|
if (TDAT8) {
|
||||||
@arg16
|
@arg16 PC
|
||||||
PC = TDAT;
|
|
||||||
WZ = PC;
|
WZ = PC;
|
||||||
paged_jump();
|
paged_jump();
|
||||||
} else {
|
} else {
|
||||||
// implicit do PC += 2
|
// implicit do PC += 2
|
||||||
@arg16
|
@arg16 WZ
|
||||||
WZ = TDAT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro jr
|
macro jr
|
||||||
@ -154,16 +144,14 @@ macro jr_cond
|
|||||||
}
|
}
|
||||||
|
|
||||||
macro arg16_call
|
macro arg16_call
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@nomreq_addr PC-1
|
@nomreq_addr PC-1
|
||||||
WZ = m_ea;
|
WZ = m_ea;
|
||||||
@wm16_sp PC
|
@wm16_sp PC
|
||||||
PC = m_ea;
|
PC = m_ea;
|
||||||
|
|
||||||
macro r800:arg16_call
|
macro r800:arg16_call
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@nomreq_addr PC-1
|
@nomreq_addr PC-1
|
||||||
WZ = m_ea;
|
WZ = m_ea;
|
||||||
@wm16_sp PC
|
@wm16_sp PC
|
||||||
@ -173,8 +161,7 @@ macro call_cond
|
|||||||
if (TDAT8) {
|
if (TDAT8) {
|
||||||
@arg16_call
|
@arg16_call
|
||||||
} else {
|
} else {
|
||||||
@arg16
|
@arg16 WZ
|
||||||
WZ = TDAT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro ret_cond
|
macro ret_cond
|
||||||
@ -287,29 +274,29 @@ macro rld
|
|||||||
A = (A & 0xf0) | (TDAT_H >> 4);
|
A = (A & 0xf0) | (TDAT_H >> 4);
|
||||||
set_f((F & CF) | SZP[A]);
|
set_f((F & CF) | SZP[A]);
|
||||||
|
|
||||||
macro ex_sp %d16
|
macro ex_sp %dd
|
||||||
@pop
|
@pop
|
||||||
@nomreq_addr SP-1
|
@nomreq_addr SP-1
|
||||||
@wm16_sp %d16
|
@wm16_sp %dd
|
||||||
%d16 = TDAT;
|
%dd = TDAT;
|
||||||
2 * @nomreq_addr SP
|
2 * @nomreq_addr SP
|
||||||
WZ = TDAT;
|
WZ = TDAT;
|
||||||
|
|
||||||
macro add16
|
macro add16 %dd1 %dd2
|
||||||
{
|
{
|
||||||
@nomreq_ir 7
|
@nomreq_ir 7
|
||||||
u32 res = TDAT + TDAT2;
|
u32 res = %dd1 + %dd2;
|
||||||
WZ = TDAT + 1;
|
WZ = %dd1 + 1;
|
||||||
set_f((F & (SF | ZF | VF)) | (((TDAT ^ res ^ TDAT2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF)));
|
set_f((F & (SF | ZF | VF)) | (((%dd1 ^ res ^ %dd2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF)));
|
||||||
TDAT = (u16)res;
|
%dd1 = (u16)res;
|
||||||
}
|
}
|
||||||
|
|
||||||
macro r800:add16
|
macro r800:add16 %dd1 %dd2
|
||||||
{
|
{
|
||||||
u32 res = TDAT + TDAT2;
|
u32 res = %dd1 + %dd2;
|
||||||
WZ = TDAT + 1;
|
WZ = %dd1 + 1;
|
||||||
set_f((F & (SF | ZF | VF)) | (((TDAT ^ res ^ TDAT2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF)));
|
set_f((F & (SF | ZF | VF)) | (((%dd1 ^ res ^ %dd2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF)));
|
||||||
TDAT = (u16)res;
|
%dd1 = (u16)res;
|
||||||
}
|
}
|
||||||
|
|
||||||
macro adc_hl
|
macro adc_hl
|
||||||
@ -3179,10 +3166,7 @@ dd08 # DB DD
|
|||||||
@jump 0008
|
@jump 0008
|
||||||
|
|
||||||
dd09 # ADD IX,BC
|
dd09 # ADD IX,BC
|
||||||
TDAT = IX;
|
@add16 IX, BC
|
||||||
TDAT2 = BC;
|
|
||||||
@add16
|
|
||||||
IX = TDAT;
|
|
||||||
|
|
||||||
dd0a # DB DD
|
dd0a # DB DD
|
||||||
illegal_1();
|
illegal_1();
|
||||||
@ -3245,10 +3229,7 @@ dd18 # DB DD
|
|||||||
@jump 0018
|
@jump 0018
|
||||||
|
|
||||||
dd19 # ADD IX,DE
|
dd19 # ADD IX,DE
|
||||||
TDAT = IX;
|
@add16 IX, DE
|
||||||
TDAT2 = DE;
|
|
||||||
@add16
|
|
||||||
IX = TDAT;
|
|
||||||
|
|
||||||
dd1a # DB DD
|
dd1a # DB DD
|
||||||
illegal_1();
|
illegal_1();
|
||||||
@ -3279,12 +3260,10 @@ dd20 # DB DD
|
|||||||
@jump 0020
|
@jump 0020
|
||||||
|
|
||||||
dd21 # LD IX,w
|
dd21 # LD IX,w
|
||||||
@arg16
|
@arg16 IX
|
||||||
IX = TDAT;
|
|
||||||
|
|
||||||
dd22 # LD (w),IX
|
dd22 # LD (w),IX
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT = IX;
|
TDAT = IX;
|
||||||
@wm16 m_ea
|
@wm16 m_ea
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -3312,14 +3291,10 @@ dd28 # DB DD
|
|||||||
@jump 0028
|
@jump 0028
|
||||||
|
|
||||||
dd29 # ADD IX,IX
|
dd29 # ADD IX,IX
|
||||||
TDAT = IX;
|
@add16 IX, IX
|
||||||
TDAT2 = IX;
|
|
||||||
@add16
|
|
||||||
IX = TDAT;
|
|
||||||
|
|
||||||
dd2a # LD IX,(w)
|
dd2a # LD IX,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm16 m_ea
|
@rm16 m_ea
|
||||||
IX = TDAT;
|
IX = TDAT;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -3387,10 +3362,7 @@ dd38 # DB DD
|
|||||||
@jump 0038
|
@jump 0038
|
||||||
|
|
||||||
dd39 # ADD IX,SP
|
dd39 # ADD IX,SP
|
||||||
TDAT = IX;
|
@add16 IX, SP
|
||||||
TDAT2 = SP;
|
|
||||||
@add16
|
|
||||||
IX = TDAT;
|
|
||||||
|
|
||||||
dd3a # DB DD
|
dd3a # DB DD
|
||||||
illegal_1();
|
illegal_1();
|
||||||
@ -4226,10 +4198,7 @@ fd08 # DB FD
|
|||||||
@jump 0008
|
@jump 0008
|
||||||
|
|
||||||
fd09 # ADD IY,BC
|
fd09 # ADD IY,BC
|
||||||
TDAT = IY;
|
@add16 IY, BC
|
||||||
TDAT2 = BC;
|
|
||||||
@add16
|
|
||||||
IY = TDAT;
|
|
||||||
|
|
||||||
fd0a # DB FD
|
fd0a # DB FD
|
||||||
illegal_1();
|
illegal_1();
|
||||||
@ -4292,10 +4261,7 @@ fd18 # DB FD
|
|||||||
@jump 0018
|
@jump 0018
|
||||||
|
|
||||||
fd19 # ADD IY,DE
|
fd19 # ADD IY,DE
|
||||||
TDAT = IY;
|
@add16 IY, DE
|
||||||
TDAT2 = DE;
|
|
||||||
@add16
|
|
||||||
IY = TDAT;
|
|
||||||
|
|
||||||
fd1a # DB FD
|
fd1a # DB FD
|
||||||
illegal_1();
|
illegal_1();
|
||||||
@ -4326,12 +4292,10 @@ fd20 # DB FD
|
|||||||
@jump 0020
|
@jump 0020
|
||||||
|
|
||||||
fd21 # LD IY,w
|
fd21 # LD IY,w
|
||||||
@arg16
|
@arg16 IY
|
||||||
IY = TDAT;
|
|
||||||
|
|
||||||
fd22 # LD (w),IY
|
fd22 # LD (w),IY
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT = IY;
|
TDAT = IY;
|
||||||
@wm16 m_ea
|
@wm16 m_ea
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -4359,14 +4323,10 @@ fd28 # DB FD
|
|||||||
@jump 0028
|
@jump 0028
|
||||||
|
|
||||||
fd29 # ADD IY,IY
|
fd29 # ADD IY,IY
|
||||||
TDAT = IY;
|
@add16 IY, IY
|
||||||
TDAT2 = IY;
|
|
||||||
@add16
|
|
||||||
IY = TDAT;
|
|
||||||
|
|
||||||
fd2a # LD IY,(w)
|
fd2a # LD IY,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm16 m_ea
|
@rm16 m_ea
|
||||||
IY = TDAT;
|
IY = TDAT;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -4434,10 +4394,7 @@ fd38 # DB FD
|
|||||||
@jump 0038
|
@jump 0038
|
||||||
|
|
||||||
fd39 # ADD IY,SP
|
fd39 # ADD IY,SP
|
||||||
TDAT = IY;
|
@add16 IY, SP
|
||||||
TDAT2 = SP;
|
|
||||||
@add16
|
|
||||||
IY = TDAT;
|
|
||||||
|
|
||||||
fd3a # DB FD
|
fd3a # DB FD
|
||||||
illegal_1();
|
illegal_1();
|
||||||
@ -5444,8 +5401,7 @@ ed42 # SBC HL,BC
|
|||||||
@sbc_hl
|
@sbc_hl
|
||||||
|
|
||||||
ed43 # LD (w),BC
|
ed43 # LD (w),BC
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT = BC;
|
TDAT = BC;
|
||||||
@wm16 m_ea
|
@wm16 m_ea
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -5478,8 +5434,7 @@ ed4a # ADC HL,BC
|
|||||||
@adc_hl
|
@adc_hl
|
||||||
|
|
||||||
ed4b # LD BC,(w)
|
ed4b # LD BC,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm16 m_ea
|
@rm16 m_ea
|
||||||
BC = TDAT;
|
BC = TDAT;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -5512,8 +5467,7 @@ ed52 # SBC HL,DE
|
|||||||
@sbc_hl
|
@sbc_hl
|
||||||
|
|
||||||
ed53 # LD (w),DE
|
ed53 # LD (w),DE
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT = DE;
|
TDAT = DE;
|
||||||
@wm16 m_ea
|
@wm16 m_ea
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -5546,8 +5500,7 @@ ed5a # ADC HL,DE
|
|||||||
@adc_hl
|
@adc_hl
|
||||||
|
|
||||||
ed5b # LD DE,(w)
|
ed5b # LD DE,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm16 m_ea
|
@rm16 m_ea
|
||||||
DE = TDAT;
|
DE = TDAT;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -5580,8 +5533,7 @@ ed62 # SBC HL,HL
|
|||||||
@sbc_hl
|
@sbc_hl
|
||||||
|
|
||||||
ed63 # LD (w),HL
|
ed63 # LD (w),HL
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT = HL;
|
TDAT = HL;
|
||||||
@wm16 m_ea
|
@wm16 m_ea
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -5614,8 +5566,7 @@ ed6a # ADC HL,HL
|
|||||||
@adc_hl
|
@adc_hl
|
||||||
|
|
||||||
ed6b # LD HL,(w)
|
ed6b # LD HL,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm16 m_ea
|
@rm16 m_ea
|
||||||
HL = TDAT;
|
HL = TDAT;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -5647,8 +5598,7 @@ ed72 # SBC HL,SP
|
|||||||
@sbc_hl
|
@sbc_hl
|
||||||
|
|
||||||
ed73 # LD (w),SP
|
ed73 # LD (w),SP
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT = SP;
|
TDAT = SP;
|
||||||
@wm16 m_ea
|
@wm16 m_ea
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -5681,8 +5631,7 @@ ed7a # ADC HL,SP
|
|||||||
@adc_hl
|
@adc_hl
|
||||||
|
|
||||||
ed7b # LD SP,(w)
|
ed7b # LD SP,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm16 m_ea
|
@rm16 m_ea
|
||||||
SP = TDAT;
|
SP = TDAT;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -6090,8 +6039,7 @@ edff # DB ED
|
|||||||
0000 # NOP
|
0000 # NOP
|
||||||
|
|
||||||
0001 # LD BC,w
|
0001 # LD BC,w
|
||||||
@arg16
|
@arg16 BC
|
||||||
BC = TDAT;
|
|
||||||
|
|
||||||
0002 # LD (BC),A
|
0002 # LD (BC),A
|
||||||
TDAT8 = A;
|
TDAT8 = A;
|
||||||
@ -6121,10 +6069,7 @@ edff # DB ED
|
|||||||
swap(m_af, m_af2);
|
swap(m_af, m_af2);
|
||||||
|
|
||||||
0009 # ADD HL,BC
|
0009 # ADD HL,BC
|
||||||
TDAT = HL;
|
@add16 HL, BC
|
||||||
TDAT2 = BC;
|
|
||||||
@add16
|
|
||||||
HL = TDAT;
|
|
||||||
|
|
||||||
000a # LD A,(BC)
|
000a # LD A,(BC)
|
||||||
@rm BC
|
@rm BC
|
||||||
@ -6154,8 +6099,7 @@ edff # DB ED
|
|||||||
@jr_cond
|
@jr_cond
|
||||||
|
|
||||||
0011 # LD DE,w
|
0011 # LD DE,w
|
||||||
@arg16
|
@arg16 DE
|
||||||
DE = TDAT;
|
|
||||||
|
|
||||||
0012 # LD (DE),A
|
0012 # LD (DE),A
|
||||||
TDAT8 = A;
|
TDAT8 = A;
|
||||||
@ -6184,10 +6128,7 @@ edff # DB ED
|
|||||||
@jr
|
@jr
|
||||||
|
|
||||||
0019 # ADD HL,DE
|
0019 # ADD HL,DE
|
||||||
TDAT = HL;
|
@add16 HL, DE
|
||||||
TDAT2 = DE;
|
|
||||||
@add16
|
|
||||||
HL = TDAT;
|
|
||||||
|
|
||||||
001a # LD A,(DE)
|
001a # LD A,(DE)
|
||||||
@rm DE
|
@rm DE
|
||||||
@ -6216,12 +6157,10 @@ edff # DB ED
|
|||||||
@jr_cond
|
@jr_cond
|
||||||
|
|
||||||
0021 # LD HL,w
|
0021 # LD HL,w
|
||||||
@arg16
|
@arg16 HL
|
||||||
HL = TDAT;
|
|
||||||
|
|
||||||
0022 # LD (w),HL
|
0022 # LD (w),HL
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT = HL;
|
TDAT = HL;
|
||||||
@wm16 m_ea
|
@wm16 m_ea
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -6248,14 +6187,10 @@ edff # DB ED
|
|||||||
@jr_cond
|
@jr_cond
|
||||||
|
|
||||||
0029 # ADD HL,HL
|
0029 # ADD HL,HL
|
||||||
TDAT = HL;
|
@add16 HL, HL
|
||||||
TDAT2 = HL;
|
|
||||||
@add16
|
|
||||||
HL = TDAT;
|
|
||||||
|
|
||||||
002a # LD HL,(w)
|
002a # LD HL,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm16 m_ea
|
@rm16 m_ea
|
||||||
HL = TDAT;
|
HL = TDAT;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -6283,12 +6218,10 @@ edff # DB ED
|
|||||||
@jr_cond
|
@jr_cond
|
||||||
|
|
||||||
0031 # LD SP,w
|
0031 # LD SP,w
|
||||||
@arg16
|
@arg16 SP
|
||||||
SP = TDAT;
|
|
||||||
|
|
||||||
0032 # LD (w),A
|
0032 # LD (w),A
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
TDAT8 = A;
|
TDAT8 = A;
|
||||||
@wm m_ea
|
@wm m_ea
|
||||||
WZ_L = (m_ea + 1) & 0xFF;
|
WZ_L = (m_ea + 1) & 0xFF;
|
||||||
@ -6320,14 +6253,10 @@ edff # DB ED
|
|||||||
@jr_cond
|
@jr_cond
|
||||||
|
|
||||||
0039 # ADD HL,SP
|
0039 # ADD HL,SP
|
||||||
TDAT = HL;
|
@add16 HL, SP
|
||||||
TDAT2 = SP;
|
|
||||||
@add16
|
|
||||||
HL = TDAT;
|
|
||||||
|
|
||||||
003a # LD A,(w)
|
003a # LD A,(w)
|
||||||
@arg16
|
@arg16 m_ea
|
||||||
m_ea = TDAT;
|
|
||||||
@rm m_ea
|
@rm m_ea
|
||||||
A = TDAT8;
|
A = TDAT8;
|
||||||
WZ = m_ea + 1;
|
WZ = m_ea + 1;
|
||||||
@ -8905,15 +8834,15 @@ z80n:ed33 # add bc,a
|
|||||||
BC += A;
|
BC += A;
|
||||||
|
|
||||||
z80n:ed34 # add hl,**
|
z80n:ed34 # add hl,**
|
||||||
@arg16
|
@arg16 TDAT
|
||||||
HL += TDAT;
|
HL += TDAT;
|
||||||
|
|
||||||
z80n:ed35 # add de,**
|
z80n:ed35 # add de,**
|
||||||
@arg16
|
@arg16 TDAT
|
||||||
DE += TDAT;
|
DE += TDAT;
|
||||||
|
|
||||||
z80n:ed36 # add bc,**
|
z80n:ed36 # add bc,**
|
||||||
@arg16
|
@arg16 TDAT
|
||||||
BC += TDAT;
|
BC += TDAT;
|
||||||
|
|
||||||
z80n:ed8a # push **
|
z80n:ed8a # push **
|
||||||
@ -8928,7 +8857,7 @@ z80n:ed90 # outinb
|
|||||||
HL++;
|
HL++;
|
||||||
|
|
||||||
z80n:ed91 # nextreg *,*
|
z80n:ed91 # nextreg *,*
|
||||||
@arg16
|
@arg16 TDAT
|
||||||
m_out_nextreg_cb(TDAT_L, TDAT_H);
|
m_out_nextreg_cb(TDAT_L, TDAT_H);
|
||||||
|
|
||||||
z80n:ed92 # nextreg *,a
|
z80n:ed92 # nextreg *,a
|
||||||
|
@ -141,14 +141,17 @@ class Opcode:
|
|||||||
print("\t\t}", file=f)
|
print("\t\t}", file=f)
|
||||||
|
|
||||||
class Macro:
|
class Macro:
|
||||||
def __init__(self, name, arg_name = None):
|
def __init__(self, name, arg_names = None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.source = []
|
self.source = []
|
||||||
self.arg_name = arg_name
|
self.arg_names = arg_names
|
||||||
|
|
||||||
def apply(self, arg):
|
def apply(self, args):
|
||||||
if self.arg_name is not None:
|
if self.arg_names is not None:
|
||||||
return [ r.replace(self.arg_name, arg) for r in self.source ]
|
src = self.source
|
||||||
|
for i, arg in enumerate(args.split(",")):
|
||||||
|
src = [ r.replace(self.arg_names[i], arg) for r in src ]
|
||||||
|
return src
|
||||||
else:
|
else:
|
||||||
return self.source
|
return self.source
|
||||||
|
|
||||||
@ -184,16 +187,16 @@ class OpcodeList:
|
|||||||
# New opcode
|
# New opcode
|
||||||
tokens = line.split()
|
tokens = line.split()
|
||||||
if tokens[0] == "macro":
|
if tokens[0] == "macro":
|
||||||
arg_name = None
|
arg_names = None
|
||||||
if len(tokens) > 2:
|
if len(tokens) > 2:
|
||||||
arg_name = tokens[2]
|
arg_names = tokens[2:]
|
||||||
nnames = tokens[1].split(":")
|
nnames = tokens[1].split(":")
|
||||||
if len(nnames) == 2:
|
if len(nnames) == 2:
|
||||||
inf = Macro(nnames[1], arg_name)
|
inf = Macro(nnames[1], arg_names)
|
||||||
if nnames[0] == self.gen:
|
if nnames[0] == self.gen:
|
||||||
self.macros[nnames[1]] = inf
|
self.macros[nnames[1]] = inf
|
||||||
else:
|
else:
|
||||||
inf = Macro(nnames[0], arg_name)
|
inf = Macro(nnames[0], arg_names)
|
||||||
if None == self.gen:
|
if None == self.gen:
|
||||||
if nnames[0] in self.macros:
|
if nnames[0] in self.macros:
|
||||||
sys.stderr.write("Replacing macro: %s\n" % nnames[0])
|
sys.stderr.write("Replacing macro: %s\n" % nnames[0])
|
||||||
@ -242,12 +245,12 @@ class OpcodeList:
|
|||||||
for i in range(times):
|
for i in range(times):
|
||||||
if line_toc[0].startswith('@'):
|
if line_toc[0].startswith('@'):
|
||||||
name = line_toc[0][1:]
|
name = line_toc[0][1:]
|
||||||
arg = None
|
args = None
|
||||||
if len(line_toc) > 1:
|
if len(line_toc) > 1:
|
||||||
arg = " ".join(line_toc[1:])
|
args = " ".join(line_toc[1:])
|
||||||
if name in self.macros:
|
if name in self.macros:
|
||||||
macro = self.macros[name]
|
macro = self.macros[name]
|
||||||
([out.extend(self.pre_process(il)) for il in macro.apply(arg)])
|
([out.extend(self.pre_process(il)) for il in macro.apply(args)])
|
||||||
else:
|
else:
|
||||||
sys.stderr.write("Macro not found %s\n" % name)
|
sys.stderr.write("Macro not found %s\n" % name)
|
||||||
out.append(iline.with_str("... %s" % name))
|
out.append(iline.with_str("... %s" % name))
|
||||||
|
Loading…
Reference in New Issue
Block a user