// JP PRNWK // JP PRNWKI // JP CONVERT // JP CONVERT2 // JP GETPARA // JP OPEX public void PRNWK() { byte[] buf = Encoding.UTF8.GetBytes(CHCHR); Z80.B = 11; Z80.A = 0x41;// 'A'; //Mem.LD_8(CHCHR, Z80.A); CHCHR = "A"; Z80.A = 1; //Mem.LD_8(CHNUM, Z80.A); CHNUM = 1; Z80.HL = 0x104; Mem.LD_16(XY, Z80.HL); PRNWK2: Mem.stack.Push(Z80.BC); Z80.HL = Mem.LD_16(XY); PC88.CALL(0x429D); Z80.EX_DE_HL(); Z80.HL = 0;// CHCHR; Z80.LDI(buf); Z80.HL--; //Mem.LD_8(Z80.HL, (byte)(Mem.LD_8(Z80.HL) + 1)); buf[0]++; Z80.A = Mem.LD_8(CHNUM); Z80.B = Z80.A; PC88.CALL(WKGET); Z80.A = 3; LOC(); Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 31)) & 0x08) == 0; ONOFF(); Z80.C = Mem.LD_8((ushort)(Z80.IX + 6)); Z80.A = Mem.LD_8(CHNUM); if (Z80.A - 7 == 0) { goto PRNW4; } if (Z80.A - 11 == 0) { goto PRNW4; } Z80.A -= 4; if (Z80.A - 3 < 0) { goto PRNW3; } Z80.A = Z80.C; Z80.A -= 4; Z80.C = Z80.A; goto PRNW4; PRNW3: Z80.A = Z80.C; Z80.A &= 0b0000_1111; Z80.C = Z80.A; PRNW4: Z80.A = 7; LOC(); Z80.EX_DE_HL(); Z80.L = Z80.C; PRNSUB(); Z80.A = 36; LOC(); Z80.EX_DE_HL(); Z80.L = Mem.LD_8((ushort)(Z80.IX + 18)); PRNSUB(); Z80.A = 11; LOC(); Z80.EX_DE_HL(); Z80.L = Mem.LD_8((ushort)(Z80.IX + 9)); Z80.H = Mem.LD_8((ushort)(Z80.IX + 10)); PRNS1(); Z80.A = 17; LOC(); Z80.EX_DE_HL(); Z80.L = Mem.LD_8((ushort)(Z80.IX + 2)); Z80.H = Mem.LD_8((ushort)(Z80.IX + 3)); PRNS2(); Z80.A = Mem.LD_8((ushort)(Z80.IX + 32)); Mem.stack.Push(Z80.AF); Z80.A &= 0x0F0; Z80.RRCA(); Z80.RRCA(); Z80.RRCA(); Z80.RRCA(); Z80.A++; Z80.A += 0x30; Mem.stack.Push(Z80.AF); Z80.A = 22; LOC(); PC88.CALL(0x429D); Z80.AF = Mem.stack.Pop(); Mem.LD_8(Z80.HL, Z80.A); Z80.AF = Mem.stack.Pop(); Z80.A &= 0x0F; Z80.HL = 0;// KEYD; Z80.A += Z80.A; Z80.D = 0; Z80.E = Z80.A; Z80.HL += Z80.DE; Mem.stack.Push(Z80.HL); Z80.A = 23; LOC(); PC88.CALL(0x429D); Z80.EX_DE_HL(); Z80.HL = Mem.stack.Pop(); byte[] buf1 = Encoding.UTF8.GetBytes(KEYD[Z80.HL / 2]); Z80.HL = 0; Z80.LDI(); Z80.LDI(); Z80.A = 26; LOC(); Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 31)) & 0x80) == 0; ONOFF(); Z80.A = 30; LOC(); Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 33)) & 0x20) == 0; ONOFF(); Z80.B = 1; PC88.CALL(WKGET); Mem.stack.Push(Z80.IX); Z80.HL = Mem.stack.Pop(); Z80.DE = 8; Z80.A &= Z80.A; Z80.HL -= Z80.DE;// L/R DATA AREA Z80.A = Mem.LD_8(CHNUM); Z80.A--; if (Z80.A - 3 < 0) { goto PRNW5; } Z80.A -= 3; if (Z80.A - 4 < 0) { goto PRNW6; } Z80.A -= 4; Z80.A += 4; PRNW5: Z80.E = Z80.A; Z80.D = 0; Z80.HL += Z80.DE; Z80.A = Mem.LD_8(CHNUM); if (Z80.A - 11 != 0) { goto PRNW50; } Z80.A = Mem.LD_8(Z80.HL); Z80.RRCA(); Z80.RRCA(); goto PRNW51; PRNW50: Z80.A = Mem.LD_8(Z80.HL); PRNW51: Z80.A &= 0b1100_0000; if (Z80.A == 0) { goto PRNW6; } if (Z80.A - 0xc0 == 0) { goto PRNW6; } Z80.Zero = (Z80.A & 0x80) == 0; if (!Z80.Zero) { goto PRNW52; } Z80.A = 0x52;// 'R'; goto PRNW7; PRNW52: Z80.A = 0x4c;// 'L'; goto PRNW7; PRNW6: Z80.A = 0x43;// 'C'; PRNW7: Mem.stack.Push(Z80.AF); Z80.A = 34; LOC(); PC88.CALL(0x429D); Z80.AF = Mem.stack.Pop(); Mem.LD_8(Z80.HL, Z80.A); // -- MUTE CHECK -- Z80.BC = 0; //Z80.HL = BEFK; expand.KEYCHK(ref BEFK[0]);// PC88.CALL(KEYCHK); if (!Z80.Zero) { goto PRNW71; } Z80.BC = 0xf801; //Z80.HL = BEFK + 1; expand.KEYCHK(ref BEFK[1]); //PC88.CALL(KEYCHK); if (Z80.Zero) { goto PRNW9; } Z80.C = 9; goto PRNW72; PRNW71: Z80.C = 1; PRNW72: Z80.B = 8; //PRNW73: do { Z80.RRCA(); if (!Z80.Carry) { goto PRNW74; } Z80.C++; Z80.B--; } while (Z80.B != 0); goto PRNW9; PRNW74: Z80.B = Z80.C; PC88.CALL(WKGET); Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 31)) & 0x08) == 0; if (!Z80.Zero) { goto PRNW8; } Mem.LD_8((ushort)(Z80.IX + 31), (byte)(Mem.LD_8((ushort)(Z80.IX + 31)) | 0x08)); goto PRNW9; PRNW8: Mem.LD_8((ushort)(Z80.IX + 31), (byte)(Mem.LD_8((ushort)(Z80.IX + 31)) & 0xf7)); PRNW9: Z80.DE = Mem.LD_16(XY); Z80.E++; Mem.LD_16(XY, Z80.DE); Z80.A = Mem.LD_8(CHNUM); Z80.A++; Mem.LD_8(CHNUM, Z80.A); Z80.BC = Mem.stack.Pop(); Z80.B--; if (Z80.B != 0) { goto PRNWK2; } // -- RETKEY CHCEK -- Z80.HL = RETK; Z80.BC = 0x7f01; PC88.CALL(KEYCHK); if (Z80.Zero) { goto PRNWA; } Z80.Zero = (Z80.A & 0x08) == 0; if (!Z80.Zero) { goto PRNWA; } // DI PC88.CALL(DRIVE); // EI // -- F5 CHECK -- PRNWA: Z80.HL = F5K; Z80.BC = 0xdf09; PC88.CALL(KEYCHK); if (Z80.Zero) { goto PRNWB; } Z80.Zero = (Z80.A & 0x20) == 0; if (!Z80.Zero) { goto PRNWB; } Z80.A ^= Z80.A; PC88.CALL(MSTART); PRNWB: FMPUT(); // -- オンショクナンバー ヒョウジ -- Z80.A = 1; Z80.B = 6; Z80.DE = 6 * 256 + 17; //OPUT0: do { Mem.stack.Push(Z80.BC); Mem.stack.Push(Z80.AF); if (Z80.A - 4 != 0) { goto OPUT1; } Z80.AF = Mem.stack.Pop(); Z80.A += 4; Mem.stack.Push(Z80.AF); OPUT1: Z80.B = Z80.A; PC88.CALL(WKGET); Z80.C = Mem.LD_8((ushort)(Z80.IX + 1)); // Z80.C--; Z80.B = 0; Z80.HL = DEFVOICE; Z80.HL += Z80.BC; Z80.L = Mem.LD_8(Z80.HL); Z80.L--; Mem.stack.Push(Z80.DE); PRNSUB(); Z80.DE = Mem.stack.Pop(); Z80.A = Z80.D; Z80.A += 13; Z80.D = Z80.A; Z80.AF = Mem.stack.Pop(); Z80.A++; Z80.BC = Mem.stack.Pop(); Z80.B--; } while (Z80.B != 0); // RET }