Space Invaders

Instructions

The hex codes for each 8080 instruction. nn indicates an 8-bit number (i.e. 4 nibbles) and it usually a signed offset. nnnn indicates a 16-bit value, usually an absolute address.

The ALU flags are SZHVPC. A '*' indicates the flag is changed according to the operator.

  •  00               : NOP
  •  01 nnnn          : LXI bc,nnnn
  •  02               : STAX BC
  •  03               : INX bc
  •  04               : INR b            **-*-v*-c
  •  05               : DCR b            **-*-v*-c
  •  06 nn            : MVI b, #nn
  •  07               : RLC              sz-h-vp-*
  •  09               : DAD bc           sz-*-vp-*
  •  0a               : LDAX (BC)
  •  0b               : DCX bc
  •  0c               : INR c            **-*-v*-c
  •  0d               : DCR c            **-*-v*-c
  •  0e nn            : MVI c, #nn
  •  0f               : RRC              sz-0-vp-*
  •  11 nnnn          : LXI de,nnnn
  •  12               : STAX DE
  •  13               : INX de
  •  14               : INR d            **-*-v*-c
  •  15               : DCR d            **-*-v*-c
  •  16 nn            : MVI d, #nn
  •  17               : RAL              sz-h-vp-*
  •  19               : DAD de           sz-*-vp-*
  •  1a               : LDAX DE
  •  1b               : DCX de
  •  1c               : INR e            **-*-v*-c
  •  1d               : DCR e            **-*-v*-c
  •  1e nn            : MVI e, #nn
  •  1f               : RAR              sz-0-vp-*
  •  21 nnnn          : LXI hl,nnnn
  •  22 nnnn          : SHLD nnnn
  •  23               : INX hl
  •  24               : INR h            **-*-v*-c
  •  25               : DCR h            **-*-v*-c
  •  26 nn            : MVI h, #nn
  •  27               : DAA              **-*-v*-*
  •  29               : DAD hl           sz-*-vp-*
  •  2a nnnn          : LHLD nnnn
  •  2b               : DCX hl
  •  2c               : INR l            **-*-v*-c
  •  2d               : DCR l            **-*-v*-c
  •  2e nn            : MVI l, #nn
  •  2f               : CMA              sz-1-vp-c
  •  31 nnnn          : LXI sp,nnnn
  •  32 nnnn          : STA nnnn
  •  33               : INX sp
  •  34               : INR (HL)         **-*-v*-c
  •  35               : DCR (HL)         **-*-v*-c
  •  36 nn            : LD (HL),nn
  •  37               : STC              sz-0-vp-1
  •  39               : DAD sp           sz-*-vp-*
  •  3a nnnn          : LDA nnnn
  •  3b               : DCX sp
  •  3c               : INR a            **-*-v*-c
  •  3d               : DCR a            **-*-v*-c
  •  3e nn            : MVI a, #nn
  •  3f               : CMC              sz-*-vp-*
  •  40               : MOV b,b
  •  41               : MOV b,c
  •  42               : MOV b,d
  •  43               : MOV b,e
  •  44               : MOV b,h
  •  45               : MOV b,l
  •  46               : MOV b,(HL)
  •  47               : MOV b,a
  •  48               : MOV c,b
  •  49               : MOV c,c
  •  4a               : MOV c,d
  •  4b               : MOV c,e
  •  4c               : MOV c,h
  •  4d               : MOV c,l
  •  4e               : MOV c,(HL)
  •  4f               : MOV c,a
  •  50               : MOV d,b
  •  51               : MOV d,c
  •  52               : MOV d,d
  •  53               : MOV d,e
  •  54               : MOV d,h
  •  55               : MOV d,l
  •  56               : MOV d,(HL)
  •  57               : MOV d,a
  •  58               : MOV e,b
  •  59               : MOV e,c
  •  5a               : MOV e,d
  •  5b               : MOV e,e
  •  5c               : MOV e,h
  •  5d               : MOV e,l
  •  5e               : MOV e,(HL)
  •  5f               : MOV e,a
  •  60               : MOV h,b
  •  61               : MOV h,c
  •  62               : MOV h,d
  •  63               : MOV h,e
  •  64               : MOV h,h
  •  65               : MOV h,l
  •  66               : MOV h,(HL)
  •  67               : MOV h,a
  •  68               : MOV l,b
  •  69               : MOV l,c
  •  6a               : MOV l,d
  •  6b               : MOV l,e
  •  6c               : MOV l,h
  •  6d               : MOV l,l
  •  6e               : MOV l,(HL)
  •  6f               : MOV l,a
  •  70               : MOV (HL),b
  •  71               : MOV (HL),c
  •  72               : MOV (HL),d
  •  73               : MOV (HL),e
  •  74               : MOV (HL),h
  •  75               : MOV (HL),l
  •  76               : HALT
  •  77               : MOV (HL),a
  •  78               : MOV a,b
  •  79               : MOV a,c
  •  7a               : MOV a,d
  •  7b               : MOV a,e
  •  7c               : MOV a,h
  •  7d               : MOV a,l
  •  7e               : MOV a,(HL)
  •  7f               : MOV a,a
  •  80               : ADD b            **-*-v*-*
  •  81               : ADD c            **-*-v*-*
  •  82               : ADD d            **-*-v*-*
  •  83               : ADD e            **-*-v*-*
  •  84               : ADD h            **-*-v*-*
  •  85               : ADD l            **-*-v*-*
  •  86               : ADD (HL)         **-*-v*-*
  •  87               : ADD a            **-*-v*-*
  •  88               : ADC b            **-*-v*-*
  •  89               : ADC c            **-*-v*-*
  •  8a               : ADC d            **-*-v*-*
  •  8b               : ADC e            **-*-v*-*
  •  8c               : ADC h            **-*-v*-*
  •  8d               : ADC l            **-*-v*-*
  •  8e               : ADC (HL)         **-*-v*-*
  •  8f               : ADC a            **-*-v*-*
  •  90               : SUB b            **-*-v*-*
  •  91               : SUB c            **-*-v*-*
  •  92               : SUB d            **-*-v*-*
  •  93               : SUB e            **-*-v*-*
  •  94               : SUB h            **-*-v*-*
  •  95               : SUB l            **-*-v*-*
  •  96               : SUB (HL)         **-*-v*-*
  •  97               : SUB a            **-*-v*-*
  •  98               : SBB b            **-*-v*-*
  •  99               : SBB c            **-*-v*-*
  •  9a               : SBB d            **-*-v*-*
  •  9b               : SBB e            **-*-v*-*
  •  9c               : SBB h            **-*-v*-*
  •  9d               : SBB l            **-*-v*-*
  •  9e               : SBB A,(HL)       **-*-v*-*
  •  9f               : SBB a            **-*-v*-*
  •  a0               : ANA b            **-1-v*-0
  •  a1               : ANA c            **-1-v*-0
  •  a2               : ANA d            **-1-v*-0
  •  a3               : ANA e            **-1-v*-0
  •  a4               : ANA h            **-1-v*-0
  •  a5               : ANA l            **-1-v*-0
  •  a6               : ANA (HL)         **-1-v*-0
  •  a7               : ANA a            **-1-v*-0
  •  a8               : XRA b            **-0-v*-0
  •  a9               : XRA c            **-0-v*-0
  •  aa               : XRA d            **-0-v*-0
  •  ab               : XRA e            **-0-v*-0
  •  ac               : XRA h            **-0-v*-0
  •  ad               : XRA l            **-0-v*-0
  •  ae               : XRA (HL)         **-0-v*-0
  •  af               : XRA a            **-0-v*-0
  •  b0               : ORA b            **-0-v*-0
  •  b1               : ORA c            **-0-v*-0
  •  b2               : ORA d            **-0-v*-0
  •  b3               : ORA e            **-0-v*-0
  •  b4               : ORA h            **-0-v*-0
  •  b5               : ORA l            **-0-v*-0
  •  b6               : ORA (HL)         **-0-v*-0
  •  b7               : ORA a            **-0-v*-0
  •  b8               : CMP b            **-*-v*-*
  •  b9               : CMP c            **-*-v*-*
  •  ba               : CMP d            **-*-v*-*
  •  bb               : CMP e            **-*-v*-*
  •  bc               : CMP h            **-*-v*-*
  •  bd               : CMP l            **-*-v*-*
  •  be               : CMP (HL)         **-*-v*-*
  •  bf               : CMP a            **-*-v*-*
  •  c0               : RET nz
  •  c1               : POP bc
  •  c2 nnnn          : Jnz nnnn
  •  c3 nnnn          : JMP nnnn
  •  c4 nnnn          : Cnz nnnn
  •  c5               : PUSH bc
  •  c6 nn            : ADI nn           **-*-v*-*
  •  c7               : RST 0x00
  •  c8               : RET z
  •  c9               : RET
  •  ca nnnn          : Jz nnnn
  •  cc nnnn          : Cz nnnn
  •  cd nnnnnnnnnnnn  : CALL nnnn
  •  ce nn            : ACI #nn          **-*-v*-*
  •  cf               : RST 0x08
  •  d0               : RET nc
  •  d1               : POP de
  •  d2 nnnn          : Jnc nnnn
  •  d3 nn            : OUT nn
  •  d4 nnnn          : Cnc nnnn
  •  d5               : PUSH de
  •  d6 nn            : SUI #nn          **-*-v*-*
  •  d7               : RST 0x10
  •  d8               : RET c
  •  da nnnn          : Jc nnnn
  •  db nnnn          : IN nn
  •  dc nnnn          : Cc nnnn
  •  de nn            : SBI #nn          **-*-v*-*
  •  df               : RST 0x18
  •  e0               : RET po
  •  e1               : POP hl
  •  e2 nnnn          : Jpo nnnn
  •  e3               : XTHL
  •  e4 nnnn          : Cpo nnnn
  •  e5               : PUSH hl
  •  e6 nn            : ANI #nn          **-1-v*-0
  •  e7               : RST 0x20
  •  e8               : RET pe
  •  e9               : PCHL
  •  ea nnnn          : Jpe nnnn
  •  eb               : XCHG
  •  ec nnnn          : Cpe nnnn
  •  ee nn            : XRA #nn          **-0-v*-0
  •  ef               : RST 0x28
  •  f0               : RET p
  •  f1               : POP af
  •  f2 nnnn          : Jp nnnn
  •  f3               : DI
  •  f4 nnnn          : Cp nnnn
  •  f5               : PUSH af
  •  f6 nn            : ORI #nn          **-h-v*-0
  •  f7               : RST 0x30
  •  f8               : RET m
  •  f9               : SPHL
  •  fa nnnn          : Jm nnnn
  •  fb               : EI
  •  fc nnnn          : Cm nnnn
  •  fe nn            : CPI #nn          **-*-v*-*
  •  ff               : RST 0x38

The unknown instructions are

  • 08
  • 10
  • 18
  • 20
  • 28
  • 30
  • 38
  • cb
  • d9
  • dd
  • ed
  • fd

Machine XML

The XML description which builds the emulator


<machine name="arcade_invaders">

  <clock name="cpu" clock="1890000">
  </clock>

  <clock name="timer" clock="120">
    <process>
      <eval>machine.bus.pulseLow('vidint')</eval>
    </process>
  </clock>

  <controller name="i8080" handler="std.cpu" clock="cpu">
    <cpu source="/emf/res/devices/i8080/cpu.xml"/>
  </controller>

  <bus>
    <track name="int" pull="high"/>
    <track name="vidint" pull="high"/>
    <track name="reset" pull="high"/>
  </bus>

  <controller name="display" handler="std.native">
    <native language="ecma6" source="display.js"/>
  </controller>

  <controller name="iorq" handler="std.native">
    <native language="ecma6" source="iorq.js"/>
    <native language="ecma6" source="keyboard.js"/>
  </controller>

  <controller name="vidint" handler="std.native">
    <native language="ecma6" source="vidint.js"/>
  </controller>

    <controller name="memory" handler="std.memory" address="16" data="8" endian="little">
      <block address="0x0000" size="0x800" access="ro" name="rome">
        <content source="/emf/res/machines/arcade_invaders/invaders.h"/>
      </block>
      <block address="0x0800" size="0x800" access="ro" name="romf">
        <content source="/emf/res/machines/arcade_invaders/invaders.g"/>
      </block>
      <block address="0x1000" size="0x800" access="ro" name="romg">
        <content source="/emf/res/machines/arcade_invaders/invaders.f"/>
      </block>
      <block address="0x1800" size="0x800" access="ro" name="romh">
        <content source="/emf/res/machines/arcade_invaders/invaders.e"/>
      </block>

      <block address="0x2000" size="0x0400" access="rw" name="ram"/>
      <block address="0x2400" size="0x1c00" access="rw" name="vram" hook="bus.display.hook"/>
      <block address="0x4000" size="0x2000" access="rw">
        <content shadow="ram"/>
      </block>

    </controller>

  </machine>