fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
at master 741 lines 18 kB view raw
1/***************************************************************************** 2 * pce * 3 *****************************************************************************/ 4 5/***************************************************************************** 6 * File name: src/cpu/e8080/op_ed.c * 7 * Created: 2012-12-11 by Hampa Hug <hampa@hampa.ch> * 8 * Copyright: (C) 2012-2024 Hampa Hug <hampa@hampa.ch> * 9 *****************************************************************************/ 10 11/***************************************************************************** 12 * This program is free software. You can redistribute it and / or modify it * 13 * under the terms of the GNU General Public License version 2 as published * 14 * by the Free Software Foundation. * 15 * * 16 * This program is distributed in the hope that it will be useful, but * 17 * WITHOUT ANY WARRANTY, without even the implied warranty of * 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * 19 * Public License for more details. * 20 *****************************************************************************/ 21 22 23#include "e8080.h" 24#include "internal.h" 25 26#include <stdlib.h> 27#include <stdio.h> 28 29 30static void op_ed_ud (e8080_t *c) 31{ 32 if (e8080_hook_undefined (c)) { 33 return; 34 } 35 36 e8080_set_clk (c, 1, 4); 37} 38 39 40/* OP ED 40: IN r, (C) */ 41static void op_ed_40 (e8080_t *c) 42{ 43 unsigned r; 44 unsigned char d; 45 46 r = (c->inst[1] >> 3) & 7; 47 d = e8080_get_port8 (c, e8080_get_bc (c)); 48 e8080_set_reg8 (c, r, d); 49 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N); 50 e8080_set_clk (c, 2, 12); 51} 52 53/* OP ED 41: OUT (C), r */ 54static void op_ed_41 (e8080_t *c) 55{ 56 unsigned r; 57 58 r = (c->inst[1] >> 3) & 7; 59 e8080_set_port8 (c, e8080_get_bc (c), e8080_get_reg8 (c, r)); 60 e8080_set_clk (c, 2, 12); 61} 62 63/* OP ED 42: SBC HL, BC */ 64static void op_ed_42 (e8080_t *c) 65{ 66 unsigned long d, s1, s2; 67 68 s1 = e8080_get_hl (c); 69 s2 = e8080_get_bc (c); 70 d = s1 - s2 - e8080_get_cf (c); 71 e8080_set_hl (c, d); 72 z80_set_psw_sub16_2 (c, d, s1, s2); 73 e8080_set_clk (c, 2, 15); 74} 75 76/* OP ED 43: LD (nnnn), BC */ 77static void op_ed_43 (e8080_t *c) 78{ 79 unsigned short adr; 80 81 e8080_get_inst23 (c); 82 adr = e8080_uint16 (c->inst[2], c->inst[3]); 83 e8080_set_mem16 (c, adr, e8080_get_bc (c)); 84 e8080_set_clk (c, 4, 20); 85} 86 87/* OP ED 44: NEG */ 88static void op_ed_44 (e8080_t *c) 89{ 90 unsigned d, s; 91 92 s = e8080_get_a (c); 93 d = 0 - s; 94 e8080_set_a (c, d); 95 z80_set_psw_sub (c, d, 0, s); 96 e8080_set_clk (c, 2, 8); 97} 98 99/* OP ED 45: RETN */ 100static void op_ed_45 (e8080_t *c) 101{ 102 e8080_set_iff1 (c, e8080_get_iff2 (c)); 103 e8080_set_pc (c, e8080_get_mem16 (c, e8080_get_sp (c))); 104 e8080_set_sp (c, e8080_get_sp (c) + 2); 105 e8080_set_clk (c, 0, 14); 106} 107 108/* OP ED 46: IM 0 */ 109static void op_ed_46 (e8080_t *c) 110{ 111 c->im = 0; 112 113 e8080_set_clk (c, 2, 8); 114} 115 116/* OP ED 47: LD I, A */ 117static void op_ed_47 (e8080_t *c) 118{ 119 e8080_set_i (c, e8080_get_a (c)); 120 e8080_set_clk (c, 2, 9); 121} 122 123/* OP ED 4A: ADC HL, BC */ 124static void op_ed_4a (e8080_t *c) 125{ 126 unsigned long d, s1, s2; 127 128 s1 = e8080_get_hl (c); 129 s2 = e8080_get_bc (c); 130 d = s1 + s2 + e8080_get_cf (c); 131 e8080_set_hl (c, d); 132 z80_set_psw_add16_2 (c, d, s1, s2); 133 e8080_set_clk (c, 2, 15); 134} 135 136/* OP ED 4B: LD BC, (nnnn) */ 137static void op_ed_4b (e8080_t *c) 138{ 139 unsigned short adr; 140 141 e8080_get_inst23 (c); 142 adr = e8080_uint16 (c->inst[2], c->inst[3]); 143 e8080_set_bc (c, e8080_get_mem16 (c, adr)); 144 e8080_set_clk (c, 4, 20); 145} 146 147/* OP ED 4D: RETI */ 148static void op_ed_4d (e8080_t *c) 149{ 150 e8080_set_pc (c, e8080_get_mem16 (c, e8080_get_sp (c))); 151 e8080_set_sp (c, e8080_get_sp (c) + 2); 152 e8080_set_clk (c, 0, 14); 153} 154 155/* OP ED 4F: R, A */ 156static void op_ed_4f (e8080_t *c) 157{ 158 e8080_set_r (c, e8080_get_a (c)); 159 e8080_set_clk (c, 2, 9); 160} 161 162/* OP ED 52: SBC HL, DE */ 163static void op_ed_52 (e8080_t *c) 164{ 165 unsigned long d, s1, s2; 166 167 s1 = e8080_get_hl (c); 168 s2 = e8080_get_de (c); 169 d = s1 - s2 - e8080_get_cf (c); 170 e8080_set_hl (c, d); 171 z80_set_psw_sub16_2 (c, d, s1, s2); 172 e8080_set_clk (c, 2, 15); 173} 174 175/* OP ED 53: LD (nnnn), DE */ 176static void op_ed_53 (e8080_t *c) 177{ 178 unsigned short adr; 179 180 e8080_get_inst23 (c); 181 adr = e8080_uint16 (c->inst[2], c->inst[3]); 182 e8080_set_mem16 (c, adr, e8080_get_de (c)); 183 e8080_set_clk (c, 4, 20); 184} 185 186/* OP ED 56: IM 1 */ 187static void op_ed_56 (e8080_t *c) 188{ 189 c->im = 1; 190 191 e8080_set_clk (c, 2, 8); 192} 193 194/* OP ED 57: LD A, I */ 195static void op_ed_57 (e8080_t *c) 196{ 197 unsigned char d; 198 199 d = e8080_get_i (c); 200 e8080_set_a (c, d); 201 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N); 202 e8080_set_pf (c, c->iff2); 203 e8080_set_clk (c, 2, 9); 204} 205 206/* OP ED 5A: ADC HL, DE */ 207static void op_ed_5a (e8080_t *c) 208{ 209 unsigned long d, s1, s2; 210 211 s1 = e8080_get_hl (c); 212 s2 = e8080_get_de (c); 213 d = s1 + s2 + e8080_get_cf (c); 214 e8080_set_hl (c, d); 215 z80_set_psw_add16_2 (c, d, s1, s2); 216 e8080_set_clk (c, 2, 15); 217} 218 219/* OP ED 5B: LD DE, (nnnn) */ 220static void op_ed_5b (e8080_t *c) 221{ 222 unsigned short adr; 223 224 e8080_get_inst23 (c); 225 adr = e8080_uint16 (c->inst[2], c->inst[3]); 226 e8080_set_de (c, e8080_get_mem16 (c, adr)); 227 e8080_set_clk (c, 4, 20); 228} 229 230/* OP ED 5E: IM 2 */ 231static void op_ed_5e (e8080_t *c) 232{ 233 c->im = 2; 234 235 e8080_set_clk (c, 2, 8); 236} 237 238/* OP ED 5F: LD A, R */ 239static void op_ed_5f (e8080_t *c) 240{ 241 unsigned char d; 242 243 d = e8080_get_r (c); 244 e8080_set_a (c, d); 245 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N); 246 e8080_set_pf (c, c->iff2); 247 e8080_set_clk (c, 2, 9); 248} 249 250/* OP ED 62: SBC HL, HL */ 251static void op_ed_62 (e8080_t *c) 252{ 253 unsigned long d, s; 254 255 s = e8080_get_hl (c); 256 d = s - s - e8080_get_cf (c); 257 e8080_set_hl (c, d); 258 z80_set_psw_sub16_2 (c, d, s, s); 259 e8080_set_clk (c, 2, 15); 260} 261 262/* OP ED 63: LD (nnnn), HL */ 263static void op_ed_63 (e8080_t *c) 264{ 265 unsigned short adr; 266 267 e8080_get_inst23 (c); 268 adr = e8080_uint16 (c->inst[2], c->inst[3]); 269 e8080_set_mem16 (c, adr, e8080_get_hl (c)); 270 e8080_set_clk (c, 4, 20); 271} 272 273/* OP ED 67: RRD */ 274static void op_ed_67 (e8080_t *c) 275{ 276 unsigned char s, d, a; 277 278 s = e8080_get_mem8 (c, e8080_get_hl (c)); 279 a = e8080_get_a (c); 280 281 d = (s >> 4) | (a << 4); 282 a = (a & 0xf0) | (s & 0x0f); 283 284 e8080_set_a (c, a); 285 e8080_set_mem8 (c, e8080_get_hl (c), d); 286 e8080_set_psw_szp (c, a, 0, E8080_FLG_A | E8080_FLG_N); 287 e8080_set_clk (c, 2, 18); 288} 289 290/* OP ED 6A: ADC HL, HL */ 291static void op_ed_6a (e8080_t *c) 292{ 293 unsigned long d, s; 294 295 s = e8080_get_hl (c); 296 d = s + s + e8080_get_cf (c); 297 e8080_set_hl (c, d); 298 z80_set_psw_add16_2 (c, d, s, s); 299 e8080_set_clk (c, 2, 15); 300} 301 302/* OP ED 6B: LD HL, (nnnn) */ 303static void op_ed_6b (e8080_t *c) 304{ 305 unsigned short adr; 306 307 e8080_get_inst23 (c); 308 adr = e8080_uint16 (c->inst[2], c->inst[3]); 309 e8080_set_hl (c, e8080_get_mem16 (c, adr)); 310 e8080_set_clk (c, 4, 20); 311} 312 313/* OP ED 6F: RLD */ 314static void op_ed_6f (e8080_t *c) 315{ 316 unsigned char s, d, a; 317 318 s = e8080_get_mem8 (c, e8080_get_hl (c)); 319 a = e8080_get_a (c); 320 321 d = (s << 4) | (a & 0x0f); 322 a = (a & 0xf0) | (s >> 4); 323 324 e8080_set_a (c, a); 325 e8080_set_mem8 (c, e8080_get_hl (c), d); 326 e8080_set_psw_szp (c, a, 0, E8080_FLG_A | E8080_FLG_N); 327 e8080_set_clk (c, 2, 18); 328} 329 330/* OP ED 70: IN (C) */ 331static void op_ed_70 (e8080_t *c) 332{ 333 unsigned char d; 334 335 d = e8080_get_port8 (c, e8080_get_bc (c)); 336 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N); 337 e8080_set_clk (c, 2, 12); 338} 339 340/* OP ED 71: OUT (C), 0 */ 341static void op_ed_71 (e8080_t *c) 342{ 343 e8080_set_port8 (c, e8080_get_bc (c), 0); 344 e8080_set_clk (c, 2, 12); 345} 346 347/* OP ED 72: SBC HL, SP */ 348static void op_ed_72 (e8080_t *c) 349{ 350 unsigned long d, s1, s2; 351 352 s1 = e8080_get_hl (c); 353 s2 = e8080_get_sp (c); 354 d = s1 - s2 - e8080_get_cf (c); 355 e8080_set_hl (c, d); 356 z80_set_psw_sub16_2 (c, d, s1, s2); 357 e8080_set_clk (c, 2, 15); 358} 359 360/* OP ED 73: LD (nnnn), SP */ 361static void op_ed_73 (e8080_t *c) 362{ 363 unsigned short adr; 364 365 e8080_get_inst23 (c); 366 adr = e8080_uint16 (c->inst[2], c->inst[3]); 367 e8080_set_mem16 (c, adr, e8080_get_sp (c)); 368 e8080_set_clk (c, 4, 20); 369} 370 371/* OP ED 7A: ADC HL, SP */ 372static void op_ed_7a (e8080_t *c) 373{ 374 unsigned long d, s1, s2; 375 376 s1 = e8080_get_hl (c); 377 s2 = e8080_get_sp (c); 378 d = s1 + s2 + e8080_get_cf (c); 379 e8080_set_hl (c, d); 380 z80_set_psw_add16_2 (c, d, s1, s2); 381 e8080_set_clk (c, 2, 15); 382} 383 384/* OP ED 7B: LD SP, (nnnn) */ 385static void op_ed_7b (e8080_t *c) 386{ 387 unsigned short adr; 388 389 e8080_get_inst23 (c); 390 adr = e8080_uint16 (c->inst[2], c->inst[3]); 391 e8080_set_sp (c, e8080_get_mem16 (c, adr)); 392 e8080_set_clk (c, 4, 20); 393} 394 395/* OP ED A0: LDI */ 396static void op_ed_a0 (e8080_t *c) 397{ 398 unsigned char s; 399 unsigned short n; 400 401 n = (e8080_get_bc (c) - 1) & 0xffff; 402 s = e8080_get_mem8 (c, e8080_get_hl (c)); 403 e8080_set_mem8 (c, e8080_get_de (c), s); 404 e8080_set_hl (c, e8080_get_hl (c) + 1); 405 e8080_set_de (c, e8080_get_de (c) + 1); 406 e8080_set_bc (c, n); 407 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0); 408 e8080_set_pf (c, n != 0); 409 e8080_set_clk (c, 2, 16); 410} 411 412/* OP ED A1: CPI */ 413static void op_ed_a1 (e8080_t *c) 414{ 415 unsigned short n; 416 unsigned char d, s1, s2; 417 418 n = (e8080_get_bc (c) - 1) & 0xffff; 419 s1 = e8080_get_a (c); 420 s2 = e8080_get_mem8 (c, e8080_get_hl (c)); 421 d = s1 - s2; 422 e8080_set_hl (c, e8080_get_hl (c) + 1); 423 e8080_set_bc (c, n); 424 e8080_set_psw_szp (c, d, E8080_FLG_N, 0); 425 e8080_set_pf (c, n != 0); 426 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10); 427 e8080_set_clk (c, 2, 16); 428} 429 430/* OP ED A2: INI */ 431static void op_ed_a2 (e8080_t *c) 432{ 433 unsigned char s, n; 434 435 n = (e8080_get_b (c) - 1) & 0xff; 436 s = e8080_get_port8 (c, e8080_get_bc (c)); 437 e8080_set_mem8 (c, e8080_get_hl (c), s); 438 e8080_set_hl (c, e8080_get_hl (c) + 1); 439 e8080_set_b (c, n); 440 e8080_set_zf (c, n == 0); 441 e8080_set_nf (c, 1); 442 e8080_set_clk (c, 2, 16); 443} 444 445/* OP ED A3: OUTI */ 446static void op_ed_a3 (e8080_t *c) 447{ 448 unsigned char s, n; 449 450 n = (e8080_get_b (c) - 1) & 0xff; 451 s = e8080_get_mem8 (c, e8080_get_hl (c)); 452 e8080_set_port8 (c, e8080_get_bc (c), s); 453 e8080_set_hl (c, e8080_get_hl (c) + 1); 454 e8080_set_b (c, n); 455 e8080_set_zf (c, n == 0); 456 e8080_set_nf (c, 1); 457 e8080_set_clk (c, 2, 16); 458} 459 460/* OP ED A8: LDD */ 461static void op_ed_a8 (e8080_t *c) 462{ 463 unsigned char s; 464 unsigned short n; 465 466 n = (e8080_get_bc (c) - 1) & 0xffff; 467 s = e8080_get_mem8 (c, e8080_get_hl (c)); 468 e8080_set_mem8 (c, e8080_get_de (c), s); 469 e8080_set_hl (c, e8080_get_hl (c) - 1); 470 e8080_set_de (c, e8080_get_de (c) - 1); 471 e8080_set_bc (c, n); 472 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0); 473 e8080_set_pf (c, n != 0); 474 e8080_set_clk (c, 2, 16); 475} 476 477/* OP ED A9: CPD */ 478static void op_ed_a9 (e8080_t *c) 479{ 480 unsigned short n; 481 unsigned char d, s1, s2; 482 483 n = (e8080_get_bc (c) - 1) & 0xffff; 484 s1 = e8080_get_a (c); 485 s2 = e8080_get_mem8 (c, e8080_get_hl (c)); 486 d = s1 - s2; 487 e8080_set_hl (c, e8080_get_hl (c) - 1); 488 e8080_set_bc (c, n); 489 e8080_set_psw_szp (c, d, E8080_FLG_N, 0); 490 e8080_set_pf (c, n != 0); 491 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10); 492 e8080_set_clk (c, 2, 16); 493} 494 495/* OP ED AA: IND */ 496static void op_ed_aa (e8080_t *c) 497{ 498 unsigned char s, n; 499 500 n = (e8080_get_b (c) - 1) & 0xff; 501 s = e8080_get_port8 (c, e8080_get_bc (c)); 502 e8080_set_mem8 (c, e8080_get_hl (c), s); 503 e8080_set_hl (c, e8080_get_hl (c) - 1); 504 e8080_set_b (c, n); 505 e8080_set_zf (c, n == 0); 506 e8080_set_nf (c, 1); 507 e8080_set_clk (c, 2, 16); 508} 509 510/* OP ED AB: OUTD */ 511static void op_ed_ab (e8080_t *c) 512{ 513 unsigned char s, n; 514 515 n = (e8080_get_b (c) - 1) & 0xff; 516 s = e8080_get_mem8 (c, e8080_get_hl (c)); 517 e8080_set_port8 (c, e8080_get_bc (c), s); 518 e8080_set_hl (c, e8080_get_hl (c) - 1); 519 e8080_set_b (c, n); 520 e8080_set_zf (c, n == 0); 521 e8080_set_nf (c, 1); 522 e8080_set_clk (c, 2, 16); 523} 524 525/* OP ED B0: LDIR */ 526static void op_ed_b0 (e8080_t *c) 527{ 528 unsigned char s; 529 unsigned short n; 530 531 n = (e8080_get_bc (c) - 1) & 0xffff; 532 s = e8080_get_mem8 (c, e8080_get_hl (c)); 533 e8080_set_mem8 (c, e8080_get_de (c), s); 534 e8080_set_hl (c, e8080_get_hl (c) + 1); 535 e8080_set_de (c, e8080_get_de (c) + 1); 536 e8080_set_bc (c, n); 537 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0); 538 539 if (n == 0) { 540 e8080_set_clk (c, 2, 16); 541 } 542 else { 543 e8080_set_clk (c, 0, 21); 544 } 545} 546 547/* OP ED B1: CPIR */ 548static void op_ed_b1 (e8080_t *c) 549{ 550 unsigned short n; 551 unsigned char d, s1, s2; 552 553 n = (e8080_get_bc (c) - 1) & 0xffff; 554 s1 = e8080_get_a (c); 555 s2 = e8080_get_mem8 (c, e8080_get_hl (c)); 556 d = s1 - s2; 557 e8080_set_hl (c, e8080_get_hl (c) + 1); 558 e8080_set_bc (c, n); 559 e8080_set_psw_szp (c, d, E8080_FLG_N, 0); 560 e8080_set_pf (c, n != 0); 561 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10); 562 563 if ((n == 0) || (s1 == s2)) { 564 e8080_set_clk (c, 2, 16); 565 } 566 else { 567 e8080_set_clk (c, 0, 21); 568 } 569} 570 571/* OP ED B2: INIR */ 572static void op_ed_b2 (e8080_t *c) 573{ 574 unsigned char s, n; 575 576 n = (e8080_get_b (c) - 1) & 0xff; 577 s = e8080_get_port8 (c, e8080_get_bc (c)); 578 e8080_set_mem8 (c, e8080_get_hl (c), s); 579 e8080_set_hl (c, e8080_get_hl (c) + 1); 580 e8080_set_b (c, n); 581 e8080_set_zf (c, 1); 582 e8080_set_nf (c, 1); 583 584 if (n == 0) { 585 e8080_set_clk (c, 2, 16); 586 } 587 else { 588 e8080_set_clk (c, 0, 21); 589 } 590} 591 592/* OP ED B3: OTIR */ 593static void op_ed_b3 (e8080_t *c) 594{ 595 unsigned char s, n; 596 597 n = (e8080_get_b (c) - 1) & 0xff; 598 s = e8080_get_mem8 (c, e8080_get_hl (c)); 599 e8080_set_port8 (c, e8080_get_bc (c), s); 600 e8080_set_hl (c, e8080_get_hl (c) + 1); 601 e8080_set_b (c, n); 602 e8080_set_zf (c, 1); 603 e8080_set_nf (c, 1); 604 605 if (n == 0) { 606 e8080_set_clk (c, 2, 16); 607 } 608 else { 609 e8080_set_clk (c, 0, 21); 610 } 611} 612 613/* OP ED B8: LDDR */ 614static void op_ed_b8 (e8080_t *c) 615{ 616 unsigned char s; 617 unsigned short n; 618 619 n = (e8080_get_bc (c) - 1) & 0xffff; 620 s = e8080_get_mem8 (c, e8080_get_hl (c)); 621 e8080_set_mem8 (c, e8080_get_de (c), s); 622 e8080_set_hl (c, e8080_get_hl (c) - 1); 623 e8080_set_de (c, e8080_get_de (c) - 1); 624 e8080_set_bc (c, n); 625 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0); 626 627 if (n == 0) { 628 e8080_set_clk (c, 2, 16); 629 } 630 else { 631 e8080_set_clk (c, 0, 21); 632 } 633} 634 635/* OP ED B9: CPDR */ 636static void op_ed_b9 (e8080_t *c) 637{ 638 unsigned short n; 639 unsigned char d, s1, s2; 640 641 n = (e8080_get_bc (c) - 1) & 0xffff; 642 s1 = e8080_get_a (c); 643 s2 = e8080_get_mem8 (c, e8080_get_hl (c)); 644 d = s1 - s2; 645 e8080_set_hl (c, e8080_get_hl (c) - 1); 646 e8080_set_bc (c, n); 647 e8080_set_psw_szp (c, d, E8080_FLG_N, 0); 648 e8080_set_pf (c, n != 0); 649 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10); 650 651 if ((n == 0) || (s1 == s2)) { 652 e8080_set_clk (c, 2, 16); 653 } 654 else { 655 e8080_set_clk (c, 0, 21); 656 } 657} 658 659/* OP ED BA: INDR */ 660static void op_ed_ba (e8080_t *c) 661{ 662 unsigned char s, n; 663 664 n = (e8080_get_b (c) - 1) & 0xff; 665 s = e8080_get_port8 (c, e8080_get_bc (c)); 666 e8080_set_mem8 (c, e8080_get_hl (c), s); 667 e8080_set_hl (c, e8080_get_hl (c) - 1); 668 e8080_set_b (c, n); 669 e8080_set_zf (c, 1); 670 e8080_set_nf (c, 1); 671 672 if (n == 0) { 673 e8080_set_clk (c, 2, 16); 674 } 675 else { 676 e8080_set_clk (c, 0, 21); 677 } 678} 679 680/* OP ED BB: OTDR */ 681static void op_ed_bb (e8080_t *c) 682{ 683 unsigned char s, n; 684 685 n = (e8080_get_b (c) - 1) & 0xff; 686 s = e8080_get_mem8 (c, e8080_get_hl (c)); 687 e8080_set_port8 (c, e8080_get_bc (c), s); 688 e8080_set_hl (c, e8080_get_hl (c) - 1); 689 e8080_set_b (c, n); 690 e8080_set_zf (c, 1); 691 e8080_set_nf (c, 1); 692 693 if (n == 0) { 694 e8080_set_clk (c, 2, 16); 695 } 696 else { 697 e8080_set_clk (c, 0, 21); 698 } 699} 700 701static e8080_opcode_f opcodes_ed[256] = { 702 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 00 */ 703 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 704 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 10 */ 705 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 706 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 20 */ 707 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 708 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 30 */ 709 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 710 op_ed_40, op_ed_41, op_ed_42, op_ed_43, op_ed_44, op_ed_45, op_ed_46, op_ed_47, /* 40 */ 711 op_ed_40, op_ed_41, op_ed_4a, op_ed_4b, op_ed_ud, op_ed_4d, op_ed_ud, op_ed_4f, 712 op_ed_40, op_ed_41, op_ed_52, op_ed_53, op_ed_ud, op_ed_45, op_ed_56, op_ed_57, /* 50 */ 713 op_ed_40, op_ed_41, op_ed_5a, op_ed_5b, op_ed_ud, op_ed_45, op_ed_5e, op_ed_5f, 714 op_ed_40, op_ed_41, op_ed_62, op_ed_63, op_ed_ud, op_ed_45, op_ed_ud, op_ed_67, /* 60 */ 715 op_ed_40, op_ed_41, op_ed_6a, op_ed_6b, op_ed_ud, op_ed_45, op_ed_ud, op_ed_6f, 716 op_ed_70, op_ed_71, op_ed_72, op_ed_73, op_ed_ud, op_ed_45, op_ed_ud, op_ed_ud, /* 70 */ 717 op_ed_40, op_ed_41, op_ed_7a, op_ed_7b, op_ed_ud, op_ed_45, op_ed_ud, op_ed_ud, 718 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 80 */ 719 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 720 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 90 */ 721 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 722 op_ed_a0, op_ed_a1, op_ed_a2, op_ed_a3, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* A0 */ 723 op_ed_a8, op_ed_a9, op_ed_aa, op_ed_ab, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 724 op_ed_b0, op_ed_b1, op_ed_b2, op_ed_b3, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* B0 */ 725 op_ed_b8, op_ed_b9, op_ed_ba, op_ed_bb, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 726 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* C0 */ 727 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 728 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* D0 */ 729 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 730 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* E0 */ 731 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 732 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* F0 */ 733 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, 734}; 735 736void z80_op_ed (e8080_t *c) 737{ 738 e8080_get_inst1 (c); 739 e8080_inc_r (c); 740 opcodes_ed[c->inst[1]] (c); 741}