Mercurial > repos > blastem
comparison z80inst.c @ 202:693ad04b965e
Distinguish between 1-byte and 2-byte NOPs
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 21 Jan 2013 21:59:09 -0800 |
parents | 2d2fa345e1fc |
children | 0ae589d4c3f9 |
comparison
equal
deleted
inserted
replaced
201:2d2fa345e1fc | 202:693ad04b965e |
---|---|
1 #include "z80inst.h" | 1 #include "z80inst.h" |
2 #include <string.h> | 2 #include <string.h> |
3 #include <stdio.h> | 3 #include <stdio.h> |
4 | 4 |
5 #define NOP {Z80_NOP, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0} | 5 #define NOP {Z80_NOP, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 1} |
6 #define NOP2 {Z80_NOP, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 2} | |
6 | 7 |
7 z80inst z80_tbl_a[256] = { | 8 z80inst z80_tbl_a[256] = { |
8 //0 | 9 //0 |
9 NOP, | 10 NOP, |
10 {Z80_LD, Z80_BC, Z80_IMMED, Z80_UNUSED, 0}, | 11 {Z80_LD, Z80_BC, Z80_IMMED, Z80_UNUSED, 0}, |
337 {Z80_SBC, Z80_HL, Z80_REG, Z80_SP, 0}, | 338 {Z80_SBC, Z80_HL, Z80_REG, Z80_SP, 0}, |
338 {Z80_LD, Z80_SP, Z80_IMMED_INDIRECT | Z80_DIR, Z80_UNUSED, 0}, | 339 {Z80_LD, Z80_SP, Z80_IMMED_INDIRECT | Z80_DIR, Z80_UNUSED, 0}, |
339 {Z80_NEG, Z80_A, Z80_UNUSED, Z80_UNUSED, 0}, | 340 {Z80_NEG, Z80_A, Z80_UNUSED, Z80_UNUSED, 0}, |
340 {Z80_RETN, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 341 {Z80_RETN, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
341 {Z80_IM, Z80_UNUSED, Z80_IMMED, Z80_UNUSED, 1}, | 342 {Z80_IM, Z80_UNUSED, Z80_IMMED, Z80_UNUSED, 1}, |
342 NOP, | 343 NOP2, |
343 {Z80_IN, Z80_A, Z80_REG_INDIRECT, Z80_C, 0}, | 344 {Z80_IN, Z80_A, Z80_REG_INDIRECT, Z80_C, 0}, |
344 {Z80_OUT, Z80_A, Z80_REG_INDIRECT | Z80_DIR, Z80_C, 0}, | 345 {Z80_OUT, Z80_A, Z80_REG_INDIRECT | Z80_DIR, Z80_C, 0}, |
345 {Z80_ADC, Z80_HL, Z80_REG, Z80_SP, 0}, | 346 {Z80_ADC, Z80_HL, Z80_REG, Z80_SP, 0}, |
346 {Z80_LD, Z80_SP, Z80_IMMED_INDIRECT, Z80_UNUSED, 0}, | 347 {Z80_LD, Z80_SP, Z80_IMMED_INDIRECT, Z80_UNUSED, 0}, |
347 {Z80_NEG, Z80_A, Z80_UNUSED, Z80_UNUSED, 0}, | 348 {Z80_NEG, Z80_A, Z80_UNUSED, Z80_UNUSED, 0}, |
348 {Z80_RETN, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 349 {Z80_RETN, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
349 {Z80_IM, Z80_UNUSED, Z80_IMMED, Z80_UNUSED, 2}, | 350 {Z80_IM, Z80_UNUSED, Z80_IMMED, Z80_UNUSED, 2}, |
350 NOP, | 351 NOP2, |
351 //8 | 352 //8 |
352 NOP, | 353 NOP2, |
353 NOP, | 354 NOP2, |
354 NOP, | 355 NOP2, |
355 NOP, | 356 NOP2, |
356 NOP, | 357 NOP2, |
357 NOP, | 358 NOP2, |
358 NOP, | 359 NOP2, |
359 NOP, | 360 NOP2, |
360 NOP, | 361 NOP2, |
361 NOP, | 362 NOP2, |
362 NOP, | 363 NOP2, |
363 NOP, | 364 NOP2, |
364 NOP, | 365 NOP2, |
365 NOP, | 366 NOP2, |
366 NOP, | 367 NOP2, |
367 NOP, | 368 NOP2, |
368 //9 | 369 //9 |
369 NOP, | 370 NOP2, |
370 NOP, | 371 NOP2, |
371 NOP, | 372 NOP2, |
372 NOP, | 373 NOP2, |
373 NOP, | 374 NOP2, |
374 NOP, | 375 NOP2, |
375 NOP, | 376 NOP2, |
376 NOP, | 377 NOP2, |
377 NOP, | 378 NOP2, |
378 NOP, | 379 NOP2, |
379 NOP, | 380 NOP2, |
380 NOP, | 381 NOP2, |
381 NOP, | 382 NOP2, |
382 NOP, | 383 NOP2, |
383 NOP, | 384 NOP2, |
384 NOP, | 385 NOP2, |
385 //A | 386 //A |
386 {Z80_LDI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 387 {Z80_LDI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
387 {Z80_CPI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 388 {Z80_CPI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
388 {Z80_INI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 389 {Z80_INI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
389 {Z80_OUTI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 390 {Z80_OUTI, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
390 NOP, | 391 NOP2, |
391 NOP, | 392 NOP2, |
392 NOP, | 393 NOP2, |
393 NOP, | 394 NOP2, |
394 {Z80_LDD, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 395 {Z80_LDD, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
395 {Z80_CPD, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 396 {Z80_CPD, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
396 {Z80_IND, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 397 {Z80_IND, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
397 {Z80_OUTD, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 398 {Z80_OUTD, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
398 NOP, | 399 NOP2, |
399 NOP, | 400 NOP2, |
400 NOP, | 401 NOP2, |
401 NOP, | 402 NOP2, |
402 //B | 403 //B |
403 {Z80_LDIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 404 {Z80_LDIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
404 {Z80_CPIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 405 {Z80_CPIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
405 {Z80_INIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 406 {Z80_INIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
406 {Z80_OTIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 407 {Z80_OTIR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
407 NOP, | 408 NOP2, |
408 NOP, | 409 NOP2, |
409 NOP, | 410 NOP2, |
410 NOP, | 411 NOP2, |
411 {Z80_LDDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 412 {Z80_LDDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
412 {Z80_CPDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 413 {Z80_CPDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
413 {Z80_INDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 414 {Z80_INDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
414 {Z80_OTDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, | 415 {Z80_OTDR, Z80_UNUSED, Z80_UNUSED, Z80_UNUSED, 0}, |
415 NOP, | 416 NOP2, |
416 NOP, | 417 NOP2, |
417 NOP, | 418 NOP2, |
418 NOP | 419 NOP2 |
419 }; | 420 }; |
420 | 421 |
421 #define SHIFT_BLOCK(op) \ | 422 #define SHIFT_BLOCK(op) \ |
422 {op, Z80_B, Z80_UNUSED, Z80_UNUSED, 0},\ | 423 {op, Z80_B, Z80_UNUSED, Z80_UNUSED, 0},\ |
423 {op, Z80_C, Z80_UNUSED, Z80_UNUSED, 0},\ | 424 {op, Z80_C, Z80_UNUSED, Z80_UNUSED, 0},\ |
486 BIT_BLOCK(Z80_SET, 5), | 487 BIT_BLOCK(Z80_SET, 5), |
487 //F | 488 //F |
488 BIT_BLOCK(Z80_SET, 6), | 489 BIT_BLOCK(Z80_SET, 6), |
489 BIT_BLOCK(Z80_SET, 7) | 490 BIT_BLOCK(Z80_SET, 7) |
490 }; | 491 }; |
492 | |
493 z80inst z80_tbl_ix[256 | |
491 | 494 |
492 uint8_t * z80_decode(uint8_t * istream, z80inst * decoded) | 495 uint8_t * z80_decode(uint8_t * istream, z80inst * decoded) |
493 { | 496 { |
494 if (*istream == 0xCB) { | 497 if (*istream == 0xCB) { |
495 istream++; | 498 istream++; |