⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpue.c

📁 树大根深三棱尽所标杆ssfsfsa fdsafs
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "sysdeps.h"#include "shared.h"#include "memory.h"#include "custom.h"#include "newcpu.h"#include "cputbl.h"void op_e000(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	ULONG sign = cmask & val;	cnt &= 63;	VFLG = 0;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign;	}}	NFLG = sign != 0;	ZFLG = val == 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e008(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	int carry = 0;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	}	CFLG = (Shptr->regs).x = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e010(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	int carry = 0;	cnt &= 63;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	if((Shptr->regs).x) val |= cmask;	(Shptr->regs).x = carry != 0;	}	CFLG = (Shptr->regs).x;	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e018(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	int carry = 0;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	carry=val&1; val = (ULONG)val >> 1;	if(carry) val |= cmask;	}	CFLG = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e020(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	BYTE cnt = (Shptr->regs).d[srcreg];{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	ULONG sign = cmask & val;	cnt &= 63;	VFLG = 0;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign;	}}	NFLG = sign != 0;	ZFLG = val == 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e028(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	BYTE cnt = (Shptr->regs).d[srcreg];{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	int carry = 0;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	}	CFLG = (Shptr->regs).x = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e030(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	BYTE cnt = (Shptr->regs).d[srcreg];{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	int carry = 0;	cnt &= 63;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	if((Shptr->regs).x) val |= cmask;	(Shptr->regs).x = carry != 0;	}	CFLG = (Shptr->regs).x;	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e038(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	BYTE cnt = (Shptr->regs).d[srcreg];{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	int carry = 0;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	carry=val&1; val = (ULONG)val >> 1;	if(carry) val |= cmask;	}	CFLG = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e040(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	cnt &= 63;	VFLG = 0;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign;	}}	NFLG = sign != 0;	ZFLG = val == 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e048(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	int carry = 0;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	}	CFLG = (Shptr->regs).x = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e050(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	int carry = 0;	cnt &= 63;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	if((Shptr->regs).x) val |= cmask;	(Shptr->regs).x = carry != 0;	}	CFLG = (Shptr->regs).x;	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e058(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	int carry = 0;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	carry=val&1; val = (ULONG)val >> 1;	if(carry) val |= cmask;	}	CFLG = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e060(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	WORD cnt = (Shptr->regs).d[srcreg];{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	cnt &= 63;	VFLG = 0;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign;	}}	NFLG = sign != 0;	ZFLG = val == 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e068(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	WORD cnt = (Shptr->regs).d[srcreg];{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	int carry = 0;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	}	CFLG = (Shptr->regs).x = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e070(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	WORD cnt = (Shptr->regs).d[srcreg];{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	int carry = 0;	cnt &= 63;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	if((Shptr->regs).x) val |= cmask;	(Shptr->regs).x = carry != 0;	}	CFLG = (Shptr->regs).x;	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e078(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	WORD cnt = (Shptr->regs).d[srcreg];{	WORD data = (Shptr->regs).d[dstreg];{	UWORD val = data;	ULONG cmask = 0x8000;	int carry = 0;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	carry=val&1; val = (ULONG)val >> 1;	if(carry) val |= cmask;	}	CFLG = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e080(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	ULONG sign = cmask & val;	cnt &= 63;	VFLG = 0;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign;	}}	NFLG = sign != 0;	ZFLG = val == 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e088(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	int carry = 0;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	}	CFLG = (Shptr->regs).x = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e090(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	int carry = 0;	cnt &= 63;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	if((Shptr->regs).x) val |= cmask;	(Shptr->regs).x = carry != 0;	}	CFLG = (Shptr->regs).x;	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e098(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	int carry = 0;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	carry=val&1; val = (ULONG)val >> 1;	if(carry) val |= cmask;	}	CFLG = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e0a0(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	LONG cnt = (Shptr->regs).d[srcreg];{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	ULONG sign = cmask & val;	cnt &= 63;	VFLG = 0;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign;	}}	NFLG = sign != 0;	ZFLG = val == 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e0a8(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	LONG cnt = (Shptr->regs).d[srcreg];{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	int carry = 0;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	}	CFLG = (Shptr->regs).x = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e0b0(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	LONG cnt = (Shptr->regs).d[srcreg];{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	int carry = 0;	cnt &= 63;	for(;cnt;--cnt){	carry=val&1; val >>= 1;	if((Shptr->regs).x) val |= cmask;	(Shptr->regs).x = carry != 0;	}	CFLG = (Shptr->regs).x;	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e0b8(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);	ULONG dstreg = (opcode & 7) >> 0;{{	LONG cnt = (Shptr->regs).d[srcreg];{	LONG data = (Shptr->regs).d[dstreg];{	ULONG val = data;	ULONG cmask = 0x80000000;	int carry = 0;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	carry=val&1; val = (ULONG)val >> 1;	if(carry) val |= cmask;	}	CFLG = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] = (val);}}}}}void op_e0d0(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{	CPTR dataa = (Shptr->regs).a[srcreg];	WORD data = get_word(dataa);	VFLG = 0;{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign;	NFLG = sign != 0;	ZFLG = val == 0;	put_word(dataa,val);}}}}void op_e0d8(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{	CPTR dataa = (Shptr->regs).a[srcreg];	WORD data = get_word(dataa);{	(Shptr->regs).a[srcreg] += 2;	VFLG = 0;{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign;	NFLG = sign != 0;	ZFLG = val == 0;	put_word(dataa,val);}}}}}void op_e0e0(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{	(Shptr->regs).a[srcreg] -= 2;{	CPTR dataa = (Shptr->regs).a[srcreg];	WORD data = get_word(dataa);	VFLG = 0;{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign;	NFLG = sign != 0;	ZFLG = val == 0;	put_word(dataa,val);}}}}}void op_e0e8(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{	CPTR dataa = (Shptr->regs).a[srcreg] + (LONG)(WORD)nextiword();	WORD data = get_word(dataa);	VFLG = 0;{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign;	NFLG = sign != 0;	ZFLG = val == 0;	put_word(dataa,val);}}}}void op_e0f0(ULONG opcode){	ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{	CPTR dataa = (Shptr->regs).a[srcreg];	dataa = get_disp_ea (dataa, nextiword());{	WORD data = get_word(dataa);	VFLG = 0;{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign;	NFLG = sign != 0;	ZFLG = val == 0;	put_word(dataa,val);}}}}}void op_e0f8(ULONG opcode){{{	CPTR dataa = (LONG)(WORD)nextiword();	WORD data = get_word(dataa);	VFLG = 0;{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign;	NFLG = sign != 0;	ZFLG = val == 0;	put_word(dataa,val);}}}}void op_e0f9(ULONG opcode){{{	CPTR dataa = nextilong();	WORD data = get_word(dataa);	VFLG = 0;{	UWORD val = data;	ULONG cmask = 0x8000;	ULONG sign = cmask & val;	CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign;	NFLG = sign != 0;	ZFLG = val == 0;	put_word(dataa,val);}}}}void op_e100(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	ULONG sign = cmask & val;	cnt &= 63;	VFLG = 0;	if (!cnt) { CFLG = 0; } else { 	for(;cnt;--cnt){	CFLG=(Shptr->regs).x=(val&cmask)!=0; val <<= 1;	if ((val&cmask)!=sign)VFLG=1;	}}	NFLG = (val&cmask) != 0;	ZFLG = val == 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e108(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;	ULONG cmask = 0x80;	int carry = 0;	cnt &= 63;	if (!cnt) { CFLG = 0; } else {	for(;cnt;--cnt){	carry=val&cmask; val <<= 1;	}	CFLG = (Shptr->regs).x = carry!=0;}	NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;	(Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e110(ULONG opcode){	ULONG srcreg = imm8_table[(opcode & 3584) >> 9];	ULONG dstreg = (opcode & 7) >> 0;{{	ULONG cnt = srcreg;{	BYTE data = (Shptr->regs).d[dstreg];{	UBYTE val = data;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -