UNPKG

mz700-js

Version:
1,002 lines (964 loc) 45 kB
"use strict"; import NumberUtil from "../lib/number-util"; import Z80BinUtil from "./bin-util"; /* tslint:disable:no-bitwise no-console class-name */ export default class Z80_Register { /* FLAG MASK BIT CONSTANT */ static S_FLAG = 0x80; static Z_FLAG = 0x40; static H_FLAG = 0x10; static V_FLAG = 0x04; static N_FLAG = 0x02; static C_FLAG = 0x01; _flagTable: Uint8Array; _PTableIndex: number; _ZSTableIndex: number; _ZSPTableIndex: number; _B: number; _C: number; _D: number; _E: number; _H: number; _L: number; _A: number; _F: number; PC: number; // プログラムカウンタ SP: number; // スタックポインタ IX: number; // インデックスレジスタX IY: number; // インデックスレジスタY R: number; // リフレッシュレジスタ I: number; // 割り込みベクタ constructor() { const heap = new ArrayBuffer(64 * 1024); this._flagTable = new Uint8Array(heap); this._PTableIndex = 0; this._ZSTableIndex = 512; this._ZSPTableIndex = 1024; this.initTable(); this.clear(); this._B = 0; this._C = 0; this._D = 0; this._E = 0; this._H = 0; this._L = 0; this._A = 0; this._F = 0; // 16bit register this.PC = 0; // プログラムカウンタ this.SP = 0; // スタックポインタ this.IX = 0; // インデックスレジスタX this.IY = 0; // インデックスレジスタY this.R = 0; // リフレッシュレジスタ this.I = 0; // 割り込みベクタ } initTable(): void { const setPTable = (idx:number, value:number):void => { this._flagTable[this._PTableIndex + idx] = value; }; const getPTable = (idx:number):number => { return this._flagTable[this._PTableIndex + idx]; } const setZSTable = (idx:number, value:number):void => { this._flagTable[this._ZSTableIndex + idx] = value; }; const setZSPTable = (idx:number, value:number):void => { this._flagTable[this._ZSPTableIndex + idx] = value; }; let i = 0; let zs = 0; let p = 0; for (i = 0; i < 256; i++) { zs = 0; if (i === 0) { zs = zs|Z80_Register.Z_FLAG; } if (i & 0x80) { zs = zs|Z80_Register.S_FLAG; } p = 0; if ((i & 1) !== 0) { p = p + 1; } if ((i & 2) !== 0) { p = p + 1; } if ((i & 4)!== 0) { p = p + 1; } if ((i & 8) !== 0) { p = p + 1; } if ((i & 16) !== 0) { p = p + 1; } if ((i & 32) !== 0) { p = p + 1; } if ((i & 64) !== 0) { p = p + 1; } if ((i & 128) !== 0) { p = p + 1; } setPTable(i, ((p & 1) ? 0 : Z80_Register.V_FLAG)); setZSTable(i, zs); setZSPTable(i, zs | getPTable(i)); } for (i = 0; (i) < 256; i = ((i) + 1)) { setZSTable(i + 256, this.getZSTable(i) | Z80_Register.C_FLAG); setZSPTable(i + 256, this.getZSPTable(i) | Z80_Register.C_FLAG); setPTable(i + 256, getPTable(i) | Z80_Register.C_FLAG); } } pair(h:number, l:number): number { return ((0xff & h) << 8) + (0xff & l); } hi8(nn:number): number { return (nn >> 8) & 0xff; } lo8(nn:number): number { return nn & 0xff; } setB(n:number):void { this._B = (n & 0xff); } getB(): number { return this._B; } setC(n:number):void { this._C = (n & 0xff); } getC(): number { return this._C; } setD(n:number):void { this._D = (n & 0xff); } getD(): number { return this._D; } setE(n:number):void { this._E = (n & 0xff); } getE(): number { return this._E; } setH(n:number):void { this._H = (n & 0xff); } getH(): number { return this._H; } setL(n:number):void { this._L = (n & 0xff); } getL(): number { return this._L; } setA(n:number):void { this._A = (n & 0xff); } getA(): number { return this._A; } setF(n:number):void { this._F = (n & 0xff); } getF(): number { return this._F; } setBC(nn:number):void { this._B = this.hi8(nn); this._C = this.lo8(nn); } getBC(): number { return this.pair(this._B, this._C); } setDE(nn:number):void { this._D = this.hi8(nn); this._E = this.lo8(nn); } getDE(): number { return this.pair(this._D, this._E); } setHL(nn:number):void { this._H = this.hi8(nn); this._L = this.lo8(nn); } getHL(): number { return this.pair(this._H, this._L); } setAF(nn:number):void { this._A = this.hi8(nn); this._F = this.lo8(nn); } getAF(): number { return this.pair(this._A, this._F); } testFlag(mask:number): number { return ((this._F & mask) ? 1:0); } setFlag(mask:number):void { this._F = this._F | mask; } clearFlag(mask:number):void { this._F = this._F & ((~mask) & 0xff); } /* TEST FLAG BIT */ flagS(): number {return ((this._F & Z80_Register.S_FLAG) ? 1:0); } flagZ(): number {return ((this._F & Z80_Register.Z_FLAG) ? 1:0); } flagH(): number {return ((this._F & Z80_Register.H_FLAG) ? 1:0); } flagP(): number {return ((this._F & Z80_Register.V_FLAG) ? 1:0); } flagN(): number {return ((this._F & Z80_Register.N_FLAG) ? 1:0); } flagC(): number {return ((this._F & Z80_Register.C_FLAG) ? 1:0); } /* SET FLAG BIT */ setFlagS(): void { this._F = this._F | Z80_Register.S_FLAG; } setFlagZ(): void { this._F = this._F | Z80_Register.Z_FLAG; } setFlagH(): void { this._F = this._F | Z80_Register.H_FLAG; } setFlagP(): void { this._F = this._F | Z80_Register.V_FLAG; } setFlagN(): void { this._F = this._F | Z80_Register.N_FLAG; } setFlagC(): void { this._F = this._F | Z80_Register.C_FLAG; } /* CLEAR FLAG BIT */ clearFlagS(): void { this._F = this._F & (~Z80_Register.S_FLAG & 0xff); } clearFlagZ(): void { this._F = this._F & (~Z80_Register.Z_FLAG & 0xff); } clearFlagH(): void { this._F = this._F & (~Z80_Register.H_FLAG & 0xff); } clearFlagP(): void { this._F = this._F & (~Z80_Register.V_FLAG & 0xff); } clearFlagN(): void { this._F = this._F & (~Z80_Register.N_FLAG & 0xff); } clearFlagC(): void { this._F = this._F & (~Z80_Register.C_FLAG & 0xff); } // #define M_ADDW(Reg1,Reg2) \ // { \ // int q; \ // q=R.Reg1.D+R.Reg2.D; \ // R.AF.B.l=(R.AF.B.l&(S_FLAG|Z_FLAG|V_FLAG))| \ // (((R.Reg1.D^q^R.Reg2.D)&0x1000)>>8)| \ // ((q>>16)&1); \ // R.Reg1.W.l=q; \ // } ADDW(a:number, b:number): number { const q = a + b; this.setF( ((this.getF()) & ( Z80_Register.S_FLAG | Z80_Register.Z_FLAG | Z80_Register.V_FLAG )) | (((a ^ q ^ b) & 0x1000) >> 8) | ((q >> 16) & 1) ); return q & 0xffff; } ADD_HL(n: number): void { this.setHL(this.ADDW(this.getHL(), n)); } // #define M_ADCW(Reg) \ // { \ // int q; \ // q=R.HL.D+R.Reg.D+(R.AF.D&1); \ // R.AF.B.l=(((R.HL.D^q^R.Reg.D)&0x1000)>>8)| \ // ((q>>16)&1)| \ // ((q&0x8000)>>8)| \ // ((q&65535)?0:Z_FLAG)| \ // (((R.Reg.D^R.HL.D^0x8000)&(R.Reg.D^q)&0x8000)>>13); \ // R.HL.W.l=q; \ // } ADC_HL(n:number): void { const HL = this.getHL(); const q = HL + n + (this.getF() & Z80_Register.C_FLAG); this.setF( (((HL ^ q ^ n) & 0x1000) >> 8) | ((q >> 16) & 1) | ((q & 0x8000) >> 8) | ((q & 0xffff) ? 0 : Z80_Register.Z_FLAG) | (((n ^ HL ^ 0x8000) & (n ^ q) & 0x8000) >> 13)); this.setHL(q); } // #define M_SBCW(Reg) \ // { \ // int q; \ // q=R.HL.D-R.Reg.D-(R.AF.D&1); \ // R.AF.B.l=(((R.HL.D^q^R.Reg.D)&0x1000)>>8)| \ // ((q>>16)&1)| \ // ((q&0x8000)>>8)| \ // ((q&65535)?0:Z_FLAG)| \ // (((R.Reg.D^R.HL.D)&(R.Reg.D^q)&0x8000)>>13)| \ // N_FLAG; \ // R.HL.W.l=q; \ // } SBC_HL(n:number): void { const HL = this.getHL(); const q = (HL - n - (this.getF() & 1)); this.setF( (((HL ^ q ^ n) & 0x1000) >> 8) | ((q >> 16) & 1) | ((q & 0x8000) >> 8) | ((q & 0xffff) ? 0 : Z80_Register.Z_FLAG) | (((n & HL) & (n ^ q) & 0x8000) >> 13) | Z80_Register.N_FLAG); this.setHL(q); } incBC():void { this.setBC(this.getBC() + 1); } decBC():void { this.setBC(this.getBC() - 1); } incHL():void { this.setHL(this.getHL() + 1); } decHL():void { this.setHL(this.getHL() - 1); } incDE():void { this.setDE(this.getDE() + 1); } decDE():void { this.setDE(this.getDE() - 1); } // #define M_RLCA // R.AF.B.h=(R.AF.B.h<<1)|((R.AF.B.h&0x80)>>7); // R.AF.B.l=(R.AF.B.l&0xEC)|(R.AF.B.h&C_FLAG) RLCA(): void { const acc = this.getA(); this.setA(((acc << 1) | ((acc & 0x80) >> 7)) & 255); this.setF((this.getF() & 0xEC) | (this.getA() & 0x01)); } // #define M_RLA \ // { \ // int i; \ // i=R.AF.B.l&C_FLAG; \ // R.AF.B.l=(R.AF.B.l&0xEC)|((R.AF.B.h&0x80)>>7); \ // R.AF.B.h=(R.AF.B.h<<1)|i; \ // } RLA(): void { const i = this.getF() & Z80_Register.C_FLAG; const acc = this.getA(); this.setF((this.getF() & 0xEC) | ((acc & 0x80) >> 7)); this.setA(((acc << 1) | i) & 255); } // #define M_RRCA \ // R.AF.B.l=(R.AF.B.l&0xEC)|(R.AF.B.h&0x01); \ // R.AF.B.h=(R.AF.B.h>>1)|(R.AF.B.h<<7) RRCA(): void { const acc = this.getA(); this.setF((this.getF() & 0xEC) | (acc & 0x01)); this.setA((acc >> 1) | ((acc << 7) & 255)); } // #define M_RRA \ // { \ // int i; \ // i=R.AF.B.l&C_FLAG; \ // R.AF.B.l=(R.AF.B.l&0xEC)|(R.AF.B.h&0x01); \ // R.AF.B.h=(R.AF.B.h>>1)|(i<<7); \ // } RRA():void { const i = this.getF() & Z80_Register.C_FLAG; const acc = this.getA(); this.setF((this.getF() & 0xEC) | (acc & 0x01)); this.setA((acc >> 1) | (i << 7)); } // static void ind(void) // { // --R.BC.B.h; // M_WRMEM(R.HL.D,DoIn(R.BC.B.l,R.BC.B.h)); // --R.HL.W.l; // R.AF.B.l=(R.BC.B.h)? N_FLAG:(N_FLAG|Z_FLAG); // } postIND():void { this.decHL(); this.setF(this.getB() ? Z80_Register.N_FLAG : Z80_Register.N_FLAG | Z80_Register.Z_FLAG); } // static void ini(void) // { // --R.BC.B.h; // M_WRMEM(R.HL.D,DoIn(R.BC.B.l,R.BC.B.h)); // ++R.HL.W.l; // R.AF.B.l=(R.BC.B.h)? N_FLAG:(N_FLAG|Z_FLAG); // } postINI(): void { this.incHL(); this.setF(this.getB() ? Z80_Register.N_FLAG : Z80_Register.N_FLAG | Z80_Register.Z_FLAG); } // static void outd(void) // { // --R.BC.B.h; // DoOut (R.BC.B.l,R.BC.B.h,(word)M_RDMEM(R.HL.D)); // --R.HL.W.l; // R.AF.B.l=(R.BC.B.h)? N_FLAG:(Z_FLAG|N_FLAG); // } postOUTD(): void { this.decHL(); this.setF(this.getB() ? Z80_Register.N_FLAG : Z80_Register.N_FLAG | Z80_Register.Z_FLAG); } // static void outi(void) // { // --R.BC.B.h; // DoOut (R.BC.B.l,R.BC.B.h,(word)M_RDMEM(R.HL.D)); // ++R.HL.W.l; // R.AF.B.l=(R.BC.B.h)? N_FLAG:(Z_FLAG|N_FLAG); // } postOUTI(): void { this.incHL(); this.setF(this.getB() ? Z80_Register.N_FLAG : Z80_Register.N_FLAG | Z80_Register.Z_FLAG); } // static void ldd(void) // { // M_WRMEM(R.DE.D,M_RDMEM(R.HL.D)); // --R.DE.W.l; // --R.HL.W.l; // --R.BC.W.l; // R.AF.B.l=(R.AF.B.l&0xE9)|(R.BC.D? V_FLAG:0); // } onLDD(): void { this.decDE(); this.decHL(); this.decBC(); this.setF((this.getF() & 0xE9) | (this.getBC() ? Z80_Register.V_FLAG : 0)); } // static void ldi(void) // { // M_WRMEM(R.DE.D,M_RDMEM(R.HL.D)); // ++R.DE.W.l; // ++R.HL.W.l; // --R.BC.W.l; // R.AF.B.l=(R.AF.B.l&0xE9)|(R.BC.D? V_FLAG:0); // } onLDI(): void { this.incDE(); this.incHL(); this.decBC(); this.setF((this.getF() & 0xE9) | (this.getBC() ? Z80_Register.V_FLAG : 0)); } // #define M_ADD(Reg) // { // int q; // q=R.AF.B.h+Reg; // R.AF.B.l=ZSTable[q&255]|((q&256)>>8)| // ((R.AF.B.h^q^Reg)&H_FLAG)| // (((Reg^R.AF.B.h^0x80)&(Reg^q)&0x80)>>5); // R.AF.B.h=q; // } addAcc(n:number): void { const q = this.getA() + n; this.setF( (this.getZSTable(q & 255)) | ((q & 256) >> 8) | ((this.getA() ^ q ^ n) & Z80_Register.H_FLAG) | (((n ^ this.getA() ^ 0x80) & (n ^ q) & 0x80) >> 5) ); this.setA(q & 255); } // #define M_ADC(Reg) // { // int q; // q = R.AF.B.h + Reg + (R.AF.B.l & 1); // R.AF.B.l = ZSTable[q & 255] | ((q & 256) >> 8) | // ((R.AF.B.h ^ q ^ Reg) & H_FLAG) | // (((Reg ^ R.AF.B.h ^ 0x80) & (Reg ^ q) & 0x80) >> 5); // R.AF.B.h = q; // } // addAccWithCarry(n:number): void { const q = this.getA() + n + (this.getF() & Z80_Register.C_FLAG); this.setF( this.getZSTable(q & 255) | ((q & 256) >> 8) | ((this.getA() ^ q ^ n) & Z80_Register.H_FLAG) | (((n ^ this.getA() ^ 0x80) & (n ^ q) & 0x80) >> 5) ); this.setA( q & 255 ); } // #define M_SUB(Reg) \ // { \ // int q; \ // q=R.AF.B.h-Reg; \ // R.AF.B.l=ZSTable[q&255]|((q&256)>>8)|N_FLAG| \ // ((R.AF.B.h^q^Reg)&H_FLAG)| \ // (((Reg^R.AF.B.h)&(Reg^q)&0x80)>>5); \ // R.AF.B.h=q; \ // } // subAcc(n:number): void { const q = ((this.getA()) - n) & 0x1ff; this.setF( this.getZSTable(q & 255) | ((q & 256) >> 8) | Z80_Register.N_FLAG | ((this.getA() ^ q ^ n) & Z80_Register.H_FLAG) | (((n ^ this.getA() ^ 0x80) & (n ^ q) & 0x80) >> 5) ); this.setA( q & 255 ); } // #define M_SBC(Reg) \ // { \ // int q; \ // q=R.AF.B.h-Reg-(R.AF.B.l&1); \ // R.AF.B.l=ZSTable[q&255]|((q&256)>>8)|N_FLAG| \ // ((R.AF.B.h^q^Reg)&H_FLAG)| \ // (((Reg^R.AF.B.h)&(Reg^q)&0x80)>>5); \ // R.AF.B.h=q; \ // } subAccWithCarry(n:number): void { const q = (this.getA() - n - (this.getF() & Z80_Register.C_FLAG)) & 0x1ff; this.setF( this.getZSTable(q & 255) | ((q & 256) >> 8) | Z80_Register.N_FLAG | ((this.getA() ^ q ^ n) & Z80_Register.H_FLAG) | (((n ^ this.getA() ^ 0x80) & (n ^ q) & 0x80) >> 5)); this.setA( q & 255 ); } // #define M_AND(Reg) // R.AF.B.h &= Reg; // R.AF.B.l = ZSPTable[R.AF.B.h] | H_FLAG andAcc(n:number): void { this.setA( this.getA() & (n & 0xff) ); this.setF( this.getZSPTable(this.getA()) | Z80_Register.H_FLAG ); } // #define M_OR(Reg) // R.AF.B.h |= Reg; // R.AF.B.l = ZSPTable[R.AF.B.h] orAcc(n:number): void { this.setA( (this.getA()) | (n & 0xff) ); this.setF( this.getZSPTable(this.getA()) ); } // #define M_XOR(Reg) // R.AF.B.h ^= Reg; // R.AF.B. l= ZSPTable[R.AF.B.h] xorAcc(n:number): void { this.setA( (this.getA()) ^ (n & 0xff) ); this.setF( this.getZSPTable(this.getA()) ); } // static void cpl(void) { // R.AF.B.h^=0xFF; // R.AF.B.l|=(H_FLAG|N_FLAG); // } CPL(): void { this.setA((this.getA() ^ 0xff) & 255); this.setF(Z80_Register.H_FLAG | Z80_Register.N_FLAG); } // static void neg(void) // { // byte i; // i=R.AF.B.h; // R.AF.B.h=0; // M_SUB(i); // } NEG(): void { const i = this.getA(); this.setA(0); this.subAcc(i); } // #define M_INC(Reg) // ++Reg; // R.AF.B.l=(R.AF.B.l&C_FLAG)|ZSTable[Reg]| // ((Reg==0x80)?V_FLAG:0)|((Reg&0x0F)?0:H_FLAG) getINCValue(n:number): number { n = (n + 1) & 255; this.setF( (this.getF() & Z80_Register.C_FLAG) | this.getZSTable(n) | (n === 0x80 ? Z80_Register.V_FLAG : 0) | ((n & 0x0F) ? 0 : Z80_Register.H_FLAG) ); return n; } // #define M_DEC(Reg) // R.AF.B.l=(R.AF.B.l&C_FLAG)|N_FLAG| // ((Reg==0x80)?V_FLAG:0)|((Reg&0x0F)?0:H_FLAG); // R.AF.B.l|=ZSTable[--Reg] getDECValue(n:number): number { this.setF( (this.getF() & Z80_Register.C_FLAG) | Z80_Register.N_FLAG | (n === 0x80 ? Z80_Register.V_FLAG : 0) | ((n & 0x0F) ? 0 : Z80_Register.H_FLAG) ); n = (n - 1) & 255; this.setF( this.getF() | this.getZSTable(n) ); return n; } // #define M_CP(Reg) // { // int q; // q=R.AF.B.h-Reg; // R.AF.B.l=ZSTable[q&255]|((q&256)>>8)|N_FLAG| // ((R.AF.B.h^q^Reg)&H_FLAG)| // (((Reg^R.AF.B.h)&(Reg^q)&0x80)>>5); // } compareAcc(n:number): void { const q = ((this.getA()) - n); this.setF( (this.getZSTable(q & 255)) | ((q & 256) >> 8) | Z80_Register.N_FLAG | ((this.getA() ^ q ^ n) & Z80_Register.H_FLAG) | (((n ^ this.getA()) & (n ^ q) & 0x80) >> 5) ); } // static void cpi(void) // { // byte i,j; // i=M_RDMEM(R.HL.D); // j=R.AF.B.h-i; // ++R.HL.W.l; // --R.BC.W.l; // R.AF.B.l=(R.AF.B.l&C_FLAG)|ZSTable[j]| // ((R.AF.B.h^i^j)&H_FLAG)|(R.BC.D? V_FLAG:0)|N_FLAG; // } CPI(n:number):void { const q = ((this.getA()) - n); this.incHL(); this.decBC(); this.setF( (this.getF() & Z80_Register.C_FLAG) | this.getZSTable(q & 255) | ((this.getA() ^ n ^ q) & Z80_Register.H_FLAG) | (this.getBC() ? Z80_Register.V_FLAG : 0) | Z80_Register.N_FLAG ); } // static void cpd(void) // { // byte i,j; // i=M_RDMEM(R.HL.D); // j=R.AF.B.h-i; // --R.HL.W.l; // --R.BC.W.l; // R.AF.B.l=(R.AF.B.l&C_FLAG)|ZSTable[j]| // ((R.AF.B.h^i^j)&H_FLAG)|(R.BC.D? V_FLAG:0)|N_FLAG; // } CPD(n:number):void { const q = this.getA() - n; this.decHL(); this.decBC(); this.setF( (this.getF() & Z80_Register.C_FLAG) | this.getZSTable(q & 255) | ((this.getA() ^ n ^ q) & Z80_Register.H_FLAG) | (this.getBC() ? Z80_Register.V_FLAG : 0) | Z80_Register.N_FLAG ); } // #define M_RLC(Reg) // { // int q; // q=Reg>>7; // Reg=(Reg<<1)|q; // R.AF.B.l=ZSPTable[Reg]|q; // } RLC(x:number):number { const q = x >> 7; x = ((x << 1) | q) & 255; this.setF( this.getZSPTable(x) | q ); return x; } // #define M_RL(Reg) \ // { \ // int q; \ // q=Reg>>7; \ // Reg=(Reg<<1)|(R.AF.B.l&1); \ // R.AF.B.l=ZSPTable[Reg]|q; \ // } RL(x:number):number { const q = x >> 7; x = ((x << 1) | (this.getF() & 1)) & 255; this.setF( this.getZSPTable(x) | q ); return x; } // #define M_RRC(Reg) \ // { \ // int q; \ // q=Reg&1; \ // Reg=(Reg>>1)|(q<<7); \ // R.AF.B.l=ZSPTable[Reg]|q; \ // } RRC(x:number):number { const q = x & 1; x = (x >> 1) | ((q << 7) & 255); this.setF( this.getZSPTable(x) | q ); return x; } // #define M_RR(Reg) \ // { \ // int q; \ // q=Reg&1; \ // Reg=(Reg>>1)|(R.AF.B.l<<7); \ // R.AF.B.l=ZSPTable[Reg]|q; \ // } RR(x:number):number { const q = x & 1; x = (x >> 1) | ((this.getF() << 7) & 255); this.setF( this.getZSPTable(x) | q ); return x; } // #define M_SLA(Reg) \ // { \ // int q; \ // q=Reg>>7; \ // Reg<<=1; \ // R.AF.B.l=ZSPTable[Reg]|q; \ // } SLA(x:number):number { const q = x >> 7; x = (x << 1) & 255; this.setF( this.getZSPTable(x) | q ); return x; } // #define M_SRA(Reg) \ // { \ // int q; \ // q=Reg&1; \ // Reg=(Reg>>1)|(Reg&0x80); \ // R.AF.B.l=ZSPTable[Reg]|q; \ // } SRA(x:number):number { const q = x & 1; x = (x >> 1) | (x & 0x80); this.setF( this.getZSPTable(x) | q ); return x; } // #define M_SRL(Reg) \ // { \ // int q; \ // q=Reg&1; \ // Reg>>=1; \ // R.AF.B.l=ZSPTable[Reg]|q; \ // } SRL(x:number):number { const q = x & 1; x = x >> 1; this.setF( this.getZSPTable(x) | q ); return x; } // #define DoIn(lo,hi) Z80_In( (word) ((lo)|((word) ((hi)<<8) ))) // #define M_IN(Reg) \ // Reg=DoIn(R.BC.B.l,R.BC.B.h); \ // R.AF.B.l=(R.AF.B.l&C_FLAG)|ZSPTable[Reg] onReadIoPort(Reg:number):void { this.setF( (this.getF() & Z80_Register.C_FLAG) | this.getZSPTable(Reg) ); } // static void ld_a_i(void) // { // R.AF.B.h=R.I; // R.AF.B.l=(R.AF.B.l&C_FLAG)|ZSTable[R.I]|(R.IFF2<<2); // } LD_A_I(iff2:number):void { this.setA(this.I); this.setF( (this.getF() & Z80_Register.C_FLAG) | this.getZSTable(this.I) | (iff2 << 2) ); } // static void ld_a_r(void) // { // R.AF.B.h=(R.R&127)|(R.R2&128); // R.AF.B.l=(R.AF.B.l&C_FLAG)|ZSTable[R.AF.B.h]|(R.IFF2<<2); // } LD_A_R(iff2:number,r2:number):void { this.setA((this.R & 127) | (r2 & 128)); this.setF( (this.getF() & Z80_Register.C_FLAG) | (this.getZSTable(this.getA())) | (iff2 << 2) ); } cloneRaw():Record<string, number> { return { B: this.getB(), C: this.getC(), D: this.getD(), E: this.getE(), H: this.getH(), L: this.getL(), A: this.getA(), F: this.getF(), PC: this.PC, SP: this.SP, IX: this.IX, IY: this.IY, R: this.R, I: this.I, }; } clear():void { this._B = 0; this._C = 0; this._D = 0; this._E = 0; this._H = 0; this._L = 0; this._A = 0; this._F = 0; this.PC = 0; this.SP = 0; this.IX = 0; this.IY = 0; this.R = 0; this.I = 0; } setFrom(reg:Z80_Register):void { this.setB(reg.getB()); this.setC(reg.getC()); this.setD(reg.getD()); this.setE(reg.getE()); this.setH(reg.getH()); this.setL(reg.getL()); this.setA(reg.getA()); this.setF(reg.getF()); this.PC = reg.PC; this.SP = reg.SP; this.IX = reg.IX; this.IY = reg.IY; this.R = reg.R; this.I = reg.I; } setPair(rr:string, value:number):void { switch(rr) { case "SP": this.SP = value; break; case "PC": this.PC = value; break; case "IX": this.IX = value; break; case "IY": this.IY = value; break; case "BC": this.setBC( value ); break; case "DE": this.setDE( value ); break; case "HL": this.setHL( value ); break; case "AF": this.setAF( value ); break; } } debugDump():void { console.info( "B:" + NumberUtil.HEX(this.getB(), 2) + "H " + this.getB() + " " + "C:" + NumberUtil.HEX(this.getC(), 2) + "H " + this.getC() + " / " + this.getBC()); console.info( "D:" + NumberUtil.HEX(this.getD(), 2) + "H " + this.getD() + " " + "E:" + NumberUtil.HEX(this.getE(), 2) + "H " + this.getE() + " / " + this.getDE()); console.info( "H:" + NumberUtil.HEX(this.getH(), 2) + "H " + this.getH() + " " + "L:" + NumberUtil.HEX(this.getL(), 2) + "H " + this.getL() + " / " + this.getHL()); console.info("A:" + NumberUtil.HEX(this.getA(), 2) + "H " + this.getA()); console.info("SZ-HPN-C"); console.info(NumberUtil.bin(this.getF(), 8)); console.info("PC:" + NumberUtil.HEX(this.PC, 4) + "H " + NumberUtil.bin(this.PC, 16) + "(2) " + this.PC); console.info("SP:" + NumberUtil.HEX(this.SP, 4) + "H " + NumberUtil.bin(this.SP, 16) + "(2) " + this.SP); console.info("I:" + NumberUtil.HEX(this.I, 2) + "H " + NumberUtil.bin(this.I, 8) + "(2) " + this.I + " " + "R:" + NumberUtil.HEX(this.R, 2) + "H " + NumberUtil.bin(this.R, 8) + "(2) " + this.R); } ADD_IX(n:number):void { this.IX = this.ADDW(this.IX, n); } ADD_IY(n:number):void { this.IY = this.ADDW(this.IY, n); } jumpRel(e:number):void { this.PC += Z80BinUtil.getSignedByte(e); } increment(r:string):void { this["set" + r]( this.getINCValue(this["get" + r]()) ); } decrement(r:string):void { this["set" + r]( this.getDECValue(this["get" + r]()) ); } /* ------------------- * r,r' レジスタ * ------------------- * 000 B * 001 C * 010 D * 011 E * 100 H * 101 L * 111 A */ /* ------------------- * dd,ss ペアレジスタ * ------------------- * 00 BC * 01 DE * 10 HL * 11 SP */ /* ------------------- * qq ペアレジスタ * ------------------- * 00 BC * 01 DE * 10 HL * 11 AF */ static REG_R_ID2NAME = {0:"B",1:"C",2:"D",3:"E",4:"H",5:"L",7:"A"}; /* ------------------- * pp ペアレジスタ * ------------------- * 00 BC * 01 DE * 10 IX * 11 SP */ static CONDITION_INDEX = { NZ:0, Z:1, NC:2, C:3, PO:4, PE:5, P:6, N:7 }; /* ------------------- * rr ペアレジスタ * ------------------- * 00 BC * 01 DE * 10 IY * 11 SP */ /* ------------------- * b ビットセット * ------------------- * 000 0 * 001 1 * 010 2 * 011 3 * 100 4 * 101 5 * 110 6 * 111 7 */ /* --------------------------- * cc コンディション * --------------------------- * 000 NZ Non Zero * 001 Z Zero * 010 NC Non Carry * 011 C Carry * 100 PO Parity Odd * 101 PE Parity Even * 110 P sign Positive * 111 N sign Negative */ /* ------------------- * t p * ------------------- * 000 00H * 001 08H * 010 10H * 011 18H * 100 20H * 101 28H * 110 30H * 111 38H */ getZSTable(idx:number): number { return this._flagTable[this._ZSTableIndex + idx]; } getZSPTable(idx:number): number { return this._flagTable[this._ZSPTableIndex + idx]; } DAA(): void { let i = this.getA(); const f = this.getF(); if(f & Z80_Register.C_FLAG) { i |= 0x100; } if(f & Z80_Register.H_FLAG) { i |= 0x200; } if(f & Z80_Register.N_FLAG) { i |= 0x400; } this.setAF(Z80_Register.DAATable[i]); } static DAATable:number[] = [ 68, 256, 512, 772, 1024, 1284, 1540, 1792, 2056, 2316, 4112, 4372, 4628, 4880, 5140, 5392, 4096, 4356, 4612, 4864, 5124, 5376, 5632, 5892, 6156, 6408, 8240, 8500, 8756, 9008, 9268, 9520, 8224, 8484, 8740, 8992, 9252, 9504, 9760, 10020, 10284, 10536, 12340, 12592, 12848, 13108, 13360, 13620, 12324, 12576, 12832, 13092, 13344, 13604, 13860, 14112, 14376, 14636, 16400, 16660, 16916, 17168, 17428, 17680, 16384, 16644, 16900, 17152, 17412, 17664, 17920, 18180, 18444, 18696, 20500, 20752, 21008, 21268, 21520, 21780, 20484, 20736, 20992, 21252, 21504, 21764, 22020, 22272, 22536, 22796, 24628, 24880, 25136, 25396, 25648, 25908, 24612, 24864, 25120, 25380, 25632, 25892, 26148, 26400, 26664, 26924, 28720, 28980, 29236, 29488, 29748, 30000, 28704, 28964, 29220, 29472, 29732, 29984, 30240, 30500, 30764, 31016, -32624, -32364, -32108, -31856, -31596, -31344, -32640, -32380, -32124, -31872, -31612, -31360, -31104, -30844, -30580, -30328, -28524, -28272, -28016, -27756, -27504, -27244, -28540, -28288, -28032, -27772, -27520, -27260, -27004, -26752, -26488, -26228, 85, 273, 529, 789, 1041, 1301, 69, 257, 513, 773, 1025, 1285, 1541, 1793, 2057, 2317, 4113, 4373, 4629, 4881, 5141, 5393, 4097, 4357, 4613, 4865, 5125, 5377, 5633, 5893, 6157, 6409, 8241, 8501, 8757, 9009, 9269, 9521, 8225, 8485, 8741, 8993, 9253, 9505, 9761, 10021, 10285, 10537, 12341, 12593, 12849, 13109, 13361, 13621, 12325, 12577, 12833, 13093, 13345, 13605, 13861, 14113, 14377, 14637, 16401, 16661, 16917, 17169, 17429, 17681, 16385, 16645, 16901, 17153, 17413, 17665, 17921, 18181, 18445, 18697, 20501, 20753, 21009, 21269, 21521, 21781, 20485, 20737, 20993, 21253, 21505, 21765, 22021, 22273, 22537, 22797, 24629, 24881, 25137, 25397, 25649, 25909, 24613, 24865, 25121, 25381, 25633, 25893, 26149, 26401, 26665, 26925, 28721, 28981, 29237, 29489, 29749, 30001, 28705, 28965, 29221, 29473, 29733, 29985, 30241, 30501, 30765, 31017, -32623, -32363, -32107, -31855, -31595, -31343, -32639, -32379, -32123, -31871, -31611, -31359, -31103, -30843, -30579, -30327, -28523, -28271, -28015, -27755, -27503, -27243, -28539, -28287, -28031, -27771, -27519, -27259, -27003, -26751, -26487, -26227, -24395, -24143, -23887, -23627, -23375, -23115, -24411, -24159, -23903, -23643, -23391, -23131, -22875, -22623, -22359, -22099, -20303, -20043, -19787, -19535, -19275, -19023, -20319, -20059, -19803, -19551, -19291, -19039, -18783, -18523, -18259, -18007, -16235, -15983, -15727, -15467, -15215, -14955, -16251, -15999, -15743, -15483, -15231, -14971, -14715, -14463, -14199, -13939, -12143, -11883, -11627, -11375, -11115, -10863, -12159, -11899, -11643, -11391, -11131, -10879, -10623, -10363, -10099, -9847, -8015, -7755, -7499, -7247, -6987, -6735, -8031, -7771, -7515, -7263, -7003, -6751, -6495, -6235, -5971, -5719, -3915, -3663, -3407, -3147, -2895, -2635, -3931, -3679, -3423, -3163, -2911, -2651, -2395, -2143, -1879, -1619, 85, 273, 529, 789, 1041, 1301, 69, 257, 513, 773, 1025, 1285, 1541, 1793, 2057, 2317, 4113, 4373, 4629, 4881, 5141, 5393, 4097, 4357, 4613, 4865, 5125, 5377, 5633, 5893, 6157, 6409, 8241, 8501, 8757, 9009, 9269, 9521, 8225, 8485, 8741, 8993, 9253, 9505, 9761, 10021, 10285, 10537, 12341, 12593, 12849, 13109, 13361, 13621, 12325, 12577, 12833, 13093, 13345, 13605, 13861, 14113, 14377, 14637, 16401, 16661, 16917, 17169, 17429, 17681, 16385, 16645, 16901, 17153, 17413, 17665, 17921, 18181, 18445, 18697, 20501, 20753, 21009, 21269, 21521, 21781, 20485, 20737, 20993, 21253, 21505, 21765, 22021, 22273, 22537, 22797, 24629, 24881, 25137, 25397, 25649, 25909, 1540, 1792, 2056, 2316, 2572, 2824, 3084, 3336, 3592, 3852, 4112, 4372, 4628, 4880, 5140, 5392, 5632, 5892, 6156, 6408, 6664, 6924, 7176, 7436, 7692, 7944, 8240, 8500, 8756, 9008, 9268, 9520, 9760, 10020, 10284, 10536, 10792, 11052, 11304, 11564, 11820, 12072, 12340, 12592, 12848, 13108, 13360, 13620, 13860, 14112, 14376, 14636, 14892, 15144, 15404, 15656, 15912, 16172, 16400, 16660, 16916, 17168, 17428, 17680, 17920, 18180, 18444, 18696, 18952, 19212, 19464, 19724, 19980, 20232, 20500, 20752, 21008, 21268, 21520, 21780, 22020, 22272, 22536, 22796, 23052, 23304, 23564, 23816, 24072, 24332, 24628, 24880, 25136, 25396, 25648, 25908, 26148, 26400, 26664, 26924, 27180, 27432, 27692, 27944, 28200, 28460, 28720, 28980, 29236, 29488, 29748, 30000, 30240, 30500, 30764, 31016, 31272, 31532, 31784, 32044, 32300, 32552, -32624, -32364, -32108, -31856, -31596, -31344, -31104, -30844, -30580, -30328, -30072, -29812, -29560, -29300, -29044, -28792, -28524, -28272, -28016, -27756, -27504, -27244, -27004, -26752, -26488, -26228, -25972, -25720, -25460, -25208, -24952, -24692, 85, 273, 529, 789, 1041, 1301, 1541, 1793, 2057, 2317, 2573, 2825, 3085, 3337, 3593, 3853, 4113, 4373, 4629, 4881, 5141, 5393, 5633, 5893, 6157, 6409, 6665, 6925, 7177, 7437, 7693, 7945, 8241, 8501, 8757, 9009, 9269, 9521, 9761, 10021, 10285, 10537, 10793, 11053, 11305, 11565, 11821, 12073, 12341, 12593, 12849, 13109, 13361, 13621, 13861, 14113, 14377, 14637, 14893, 15145, 15405, 15657, 15913, 16173, 16401, 16661, 16917, 17169, 17429, 17681, 17921, 18181, 18445, 18697, 18953, 19213, 19465, 19725, 19981, 20233, 20501, 20753, 21009, 21269, 21521, 21781, 22021, 22273, 22537, 22797, 23053, 23305, 23565, 23817, 24073, 24333, 24629, 24881, 25137, 25397, 25649, 25909, 26149, 26401, 26665, 26925, 27181, 27433, 27693, 27945, 28201, 28461, 28721, 28981, 29237, 29489, 29749, 30001, 30241, 30501, 30765, 31017, 31273, 31533, 31785, 32045, 32301, 32553, -32623, -32363, -32107, -31855, -31595, -31343, -31103, -30843, -30579, -30327, -30071, -29811, -29559, -29299, -29043, -28791, -28523, -28271, -28015, -27755, -27503, -27243, -27003, -26751, -26487, -26227, -25971, -25719, -25459, -25207, -24951, -24691, -24395, -24143, -23887, -23627, -23375, -23115, -22875, -22623, -22359, -22099, -21843, -21591, -21331, -21079, -20823, -20563, -20303, -20043, -19787, -19535, -19275, -19023, -18783, -18523, -18259, -18007, -17751, -17491, -17239, -16979, -16723, -16471, -16235, -15983, -15727, -15467, -15215, -14955, -14715, -14463, -14199, -13939, -13683, -13431, -13171, -12919, -12663, -12403, -12143, -11883, -11627, -11375, -11115, -10863, -10623, -10363, -10099, -9847, -9591, -9331, -9079, -8819, -8563, -8311, -8015, -7755, -7499, -7247, -6987, -6735, -6495, -6235, -5971, -5719, -5463, -5203, -4951, -4691, -4435, -4183, -3915, -3663, -3407, -3147, -2895, -2635, -2395, -2143, -1879, -1619, -1363, -1111, -851, -599, -343, -83, 85, 273, 529, 789, 1041, 1301, 1541, 1793, 2057, 2317, 2573, 2825, 3085, 3337, 3593, 3853, 4113, 4373, 4629, 4881, 5141, 5393, 5633, 5893, 6157, 6409, 6665, 6925, 7177, 7437, 7693, 7945, 8241, 8501, 8757, 9009, 9269, 9521, 9761, 10021, 10285, 10537, 10793, 11053, 11305, 11565, 11821, 12073, 12341, 12593, 12849, 13109, 13361, 13621, 13861, 14113, 14377, 14637, 14893, 15145, 15405, 15657, 15913, 16173, 16401, 16661, 16917, 17169, 17429, 17681, 17921, 18181, 18445, 18697, 18953, 19213, 19465, 19725, 19981, 20233, 20501, 20753, 21009, 21269, 21521, 21781, 22021, 22273, 22537, 22797, 23053, 23305, 23565, 23817, 24073, 24333, 24629, 24881, 25137, 25397, 25649, 25909, 70, 258, 514, 774, 1026, 1286, 1542, 1794, 2058, 2318, 1026, 1286, 1542, 1794, 2058, 2318, 4098, 4358, 4614, 4866, 5126, 5378, 5634, 5894, 6158, 6410, 5126, 5378, 5634, 5894, 6158, 6410, 8226, 8486, 8742, 8994, 9254, 9506, 9762, 10022, 10286, 10538, 9254, 9506, 9762, 10022, 10286, 10538, 12326, 12578, 12834, 13094, 13346, 13606, 13862, 14114, 14378, 14638, 13346, 13606, 13862, 14114, 14378, 14638, 16386, 16646, 16902, 17154, 17414, 17666, 17922, 18182, 18446, 18698, 17414, 17666, 17922, 18182, 18446, 18698, 20486, 20738, 20994, 21254, 21506, 21766, 22022, 22274, 22538, 22798, 21506, 21766, 22022, 22274, 22538, 22798, 24614, 24866, 25122, 25382, 25634, 25894, 26150, 26402, 26666, 26926, 25634, 25894, 26150, 26402, 26666, 26926, 28706, 28966, 29222, 29474, 29734, 29986, 30242, 30502, 30766, 31018, 29734, 29986, 30242, 30502, 30766, 31018, -32638, -32378, -32122, -31870, -31610, -31358, -31102, -30842, -30578, -30326, -31610, -31358, -31102, -30842, -30578, -30326, -28538, -28286, -28030, -27770, -27518, -27258, -27002, -26750, -26486, -26226, 13347, 13607, 13863, 14115, 14379, 14639, 16387, 16647, 16903, 17155, 17415, 17667, 17923, 18183, 18447, 18699, 17415, 17667, 17923, 18183, 18447, 18699, 20487, 20739, 20995, 21255, 21507, 21767, 22023, 22275, 22539, 22799, 21507, 21767, 22023, 22275, 22539, 22799, 24615, 24867, 25123, 25383, 25635, 25895, 26151, 26403, 26667, 26927, 25635, 25895, 26151, 26403, 26667, 26927, 28707, 28967, 29223, 29475, 29735, 29987, 30243, 30503, 30767, 31019, 29735, 29987, 30243, 30503, 30767, 31019, -32637, -32377, -32121, -31869, -31609, -31357, -31101, -30841, -30577, -30325, -31609, -31357, -31101, -30841, -30577, -30325, -28537, -28285, -28029, -27769, -27517, -27257, -27001, -26749, -26485, -26225, -27517, -27257, -27001, -26749, -26485, -26225, -24409, -24157, -23901, -23641, -23389, -23129, -22873, -22621, -22357, -22097, -23389, -23129, -22873, -22621, -22357, -22097, -20317, -20057, -19801, -19549, -19289, -19037, -18781, -18521, -18257, -18005, -19289, -19037, -18781, -18521, -18257, -18005, -16249, -15997, -15741, -15481, -15229, -14969, -14713, -14461, -14197, -13937, -15229, -14969, -14713, -14461, -14197, -13937, -12157, -11897, -11641, -11389, -11129, -10877, -10621, -10361, -10097, -9845, -11129, -10877, -10621, -10361, -10097, -9845, -8029, -7769, -7513, -7261, -7001, -6749, -6493, -6233, -5969, -5717, -7001, -6749, -6493, -6233, -5969, -5717, -3929, -3677, -3421, -3161, -2909, -2649, -2393, -2141, -1877, -1617, -2909, -2649, -2393, -2141, -1877, -1617, 71, 259, 515, 775, 1027, 1287, 1543, 1795, 2059, 2319, 1027, 1287, 1543, 1795, 2059, 2319, 4099, 4359, 4615, 4867, 5127, 5379, 5635, 5895, 6159, 6411, 5127, 5379, 5635, 5895, 6159, 6411, 8227, 8487, 8743, 8995, 9255, 9507, 9763, 10023, 10287, 10539, 9255, 9507, 9763, 10023, 10287, 10539, 12327, 12579, 12835, 13095, 13347, 13607, 13863, 14115, 14379, 14639, 13347, 13607, 13863, 14115, 14379, 14639, 16387, 16647, 16903, 17155, 17415, 17667, 17923, 18183, 18447, 18699, 17415, 17667, 17923, 18183, 18447, 18699, 20487, 20739, 20995, 21255, 21507, 21767, 22023, 22275, 22539, 22799, 21507, 21767, 22023, 22275, 22539, 22799, 24615, 24867, 25123, 25383, 25635, 25895, 26151, 26403, 26667, 26927, 25635, 25895, 26151, 26403, 26667, 26927, 28707, 28967, 29223, 29475, 29735, 29987, 30243, 30503, 30767, 31019, 29735, 29987, 30243, 30503, 30767, 31019, -32637, -32377, -32121, -31869, -31609, -31357, -31101, -30841, -30577, -30325, -31609, -31357, -31101, -30841, -30577, -30325, -28537, -28285, -28029, -27769, -27517, -27257, -27001, -26749, -26485, -26225, -27517, -27257, -27001, -26749, -26485, -26225, -1346, -1094, -834, -582, -326, -66, 70, 258, 514, 774, 1026, 1286, 1542, 1794, 2058, 2318, 2590, 2842, 3102, 3354, 3610, 3870, 4098, 4358, 4614, 4866, 5126, 5378, 5634, 5894, 6158, 6410, 6682, 6942, 7194, 7454, 7710, 7962, 8226, 8486, 8742, 8994, 9254, 9506, 9762, 10022, 10286, 10538, 10810, 11070, 11322, 11582, 11838, 12090, 12326, 12578, 12834, 13094, 13346, 13606, 13862, 14114, 14378, 14638, 14910, 15162, 15422, 15674, 15930, 16190, 16386, 16646, 16902, 17154, 17414, 17666, 17922, 18182, 18446, 18698, 18970, 19230, 19482, 19742, 19998, 20250, 20486, 20738, 20994, 21254, 21506, 21766, 22022, 22274, 22538, 22798, 23070, 23322, 23582, 23834, 24090, 24350, 24614, 24866, 25122, 25382, 25634, 25894, 26150, 26402, 26666, 26926, 27198, 27450, 27710, 27962, 28218, 28478, 28706, 28966, 29222, 29474, 29734, 29986, 30242, 30502, 30766, 31018, 31290, 31550, 31802, 32062, 32318, 32570, -32638, -32378, -32122, -31870, -31610, -31358, -31102, -30842, -30578, -30326, -30054, -29794, -29542, -29282, -29026, -28774, -28538, -28286, -28030, -27770, 13347, 13607, 13863, 14115, 14379, 14639, 14911, 15163, 15423, 15675, 15931, 16191, 16387, 16647, 16903, 17155, 17415, 17667, 17923, 18183, 18447, 18699, 18971, 19231, 19483, 19743, 19999, 20251, 20487, 20739, 20995, 21255, 21507, 21767, 22023, 22275, 22539, 22799, 23071, 23323, 23583, 23835, 24091, 24351, 24615, 24867, 25123, 25383, 25635, 25895, 26151, 26403, 26667, 26927, 27199, 27451, 27711, 27963, 28219, 28479, 28707, 28967, 29223, 29475, 29735, 29987, 30243, 30503, 30767, 31019, 31291, 31551, 31803, 32063, 32319, 32571, -32637, -32377, -32121, -31869, -31609, -31357, -31101, -30841, -30577, -30325, -30053, -29793, -29541, -29281, -29025, -28773, -28537, -28285, -28029, -27769, -27517, -27257, -27001, -26749, -26485, -26225, -25953, -25701, -25441, -25189, -24933, -24673, -24409, -24157, -23901, -23641, -23389, -23129, -22873, -22621, -22357, -22097, -21825, -21573, -21313, -21061, -20805, -20545, -20317, -20057, -19801, -19549, -19289, -19037, -18781, -18521, -18257, -18005, -17733, -17473, -17221, -16961, -16705, -16453, -16249, -15997, -15741, -15481, -15229, -14969, -14713, -14461, -14197, -13937, -13665, -13413, -13153, -12901, -12645, -12385, -12157, -11897, -11641, -11389, -11129, -10877, -10621, -10361, -10097, -9845, -9573, -9313, -9061, -8801, -8545, -8293, -8029, -7769, -7513, -7261, -7001, -6749, -6493, -6233, -5969, -5717, -5445, -5185, -4933, -4673, -4417, -4165, -3929, -3677, -3421, -3161, -2909, -2649, -2393, -2141, -1877, -1617, -1345, -1093, -833, -581, -325, -65, 71, 259, 515, 775, 1027, 1287, 1543, 1795, 2059, 2319, 2591, 2843, 3103, 3355, 3611, 3871, 4099, 4359, 4615, 4867, 5127, 5379, 5635, 5895, 6159, 6411, 6683, 6943, 7195, 7455, 7711, 7963, 8227, 8487, 8743, 8995, 9255, 9507, 9763, 10023, 10287, 10539, 10811, 11071, 11323, 11583, 11839, 12091, 12327, 12579, 12835, 13095, 13347, 13607, 13863, 14115, 14379, 14639, 14911, 15163, 15423, 15675, 15931, 16191, 16387, 16647, 16903, 17155, 17415, 17667, 17923, 18183, 18447, 18699, 18971, 19231, 19483, 19743, 19999, 20251, 20487, 20739, 20995, 21255, 21507, 21767, 22023, 22275, 22539, 22799, 23071, 23323, 23583, 23835, 24091, 24351, 24615, 24867, 25123, 25383, 25635, 25895, 26151, 26403, 26667, 26927, 27199, 27451, 27711, 27963, 28219, 28479, 28707, 28967, 29223, 29475, 29735, 29987, 30243, 30503, 30767, 31019, 31291, 31551, 31803, 32063, 32319, 32571, -32637, -32377, -32121, -31869, -31609, -31357, -31101, -30841, -30577, -30325, -30053, -29793, -29541, -29281, -29025, -28773, -28537, -28285, -28029, -27769, -27517, -27257, -27001, -26749, -26485, -26225 ]; } module.exports = Z80_Register;