рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рдЖрд░реНрдХреЗрдб рдорд╢реАрди рдмрдирд╛рдирд╛ред рднрд╛рдЧ 3

рдЫрд╡рд┐

рднрд╛рдЧреЛрдВ рдПрдХ рдФрд░ рджреЛ ред

8080 рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдореБрд▓реЗрдЯрд░


рдПрдореБрд▓реЗрдЯрд░ рдЦреЛрд▓


8080 рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдореБрд▓реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдм рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬреНрдЮрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЕрдкрдирд╛ рдХреЛрдб рдпрдерд╛рд╕рдВрднрд╡ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдкреНрд░рддреНрдпреЗрдХ рдУрдкрдХреЛрдб рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдореЗрдореЛрд░реА рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рд╣реЛрдВрдЧреЗред рдореЗрдореЛрд░реА рдмрдлрд░ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдЬрдЧрд╣ рд╣реЛрдЧреА, рдЬреЛ рд░реИрдо рд╣реЛрдЧреАред

typedef struct ConditionCodes { uint8_t z:1; uint8_t s:1; uint8_t p:1; uint8_t cy:1; uint8_t ac:1; uint8_t pad:3; } ConditionCodes; typedef struct State8080 { uint8_t a; uint8_t b; uint8_t c; uint8_t d; uint8_t e; uint8_t h; uint8_t l; uint16_t sp; uint16_t pc; uint8_t *memory; struct ConditionCodes cc; uint8_t int_enable; } State8080; 

рдЕрдм рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдВ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

  void UnimplementedInstruction(State8080* state) { // pc    ,     printf ("Error: Unimplemented instruction\n"); exit(1); } int Emulate8080Op(State8080* state) { unsigned char *opcode = &state->memory[state->pc]; switch(*opcode) { case 0x00: UnimplementedInstruction(state); break; case 0x01: UnimplementedInstruction(state); break; case 0x02: UnimplementedInstruction(state); break; case 0x03: UnimplementedInstruction(state); break; case 0x04: UnimplementedInstruction(state); break; /*....*/ case 0xfe: UnimplementedInstruction(state); break; case 0xff: UnimplementedInstruction(state); break; } state->pc+=1; //  } 

рдЖрдЗрдП рдХреБрдЫ рдСрдкрдХреЛрдб рд▓рд╛рдЧреВ рдХрд░реЗрдВред

  void Emulate8080Op(State8080* state) { unsigned char *opcode = &state->memory[state->pc]; switch(*opcode) { case 0x00: break; //NOP -  ! case 0x01: //LXI B, state->c = opcode[1]; state->b = opcode[2]; state->pc += 2; //   2  break; /*....*/ case 0x41: state->b = state->c; break; //MOV B,C case 0x42: state->b = state->d; break; //MOV B,D case 0x43: state->b = state->e; break; //MOV B,E } state->pc+=1; } 

рд╡рд╣рд╛рдВ рддреБрдо рдЬрд╛рдУред рдкреНрд░рддреНрдпреЗрдХ рдУрдкрдХреЛрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рд╛рдЬреНрдп рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ 8080 рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдб рдХрд░реЗрдЧрд╛ред

8080 рдореЗрдВ рд▓рдЧрднрдЧ 7 рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ:

  • рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░
  • рдЕрдВрдХ-рд╕рдВрдмрдВрдзреА
  • рдмреВрд▓рд┐рдпрди
  • рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ
  • рдЕрдиреЗрдХрддрд╛
  • рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ
  • рд╡рд┐рд╢реЗрд╖

рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рджреЗрдЦреЗрдВред

рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдореВрд╣


рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢ 8080 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ 256 рдСрдкрдХреЛрдб рдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢ рд░рдЬрд┐рд╕реНрдЯрд░ рдП рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдП рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ (рд░рдЬрд┐рд╕реНрдЯрд░ рдП рдХреЛ рд╕рдВрдЪрд╛рдпрдХ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдпреЗ рдЖрджреЗрд╢ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЛрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд╛рдЬреНрдп рдХреЛрдб (рдЭрдВрдбреЗ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рднреА рдХрдорд╛рдВрдб рдлреНрд▓реИрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдЯреАрдореЗрдВ рдЭрдВрдбреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдЭрдВрдбреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИрдВред

рдЭрдВрдбреЗ 8080


8080 рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдЭрдВрдбреЗ рдХреЛ Z, S, P, CY рдФрд░ AC рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

  • рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдкрд░ Z (рд╢реВрдиреНрдп, рд╢реВрдиреНрдп) рдорд╛рди 1 рд▓реЗрддрд╛ рд╣реИ
  • S (рд╕рд╛рдЗрди) 1 рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдЬрдм рдЧрдгрд┐рддреАрдп рдХрдорд╛рдВрдб рдХрд╛ рдмрд┐рдЯ 7 (рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ, MSB) рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдкреА (рд╕рдорддрд╛, рд╕рдорддрд╛) рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдпрд╣ рд╡рд┐рд╖рдо рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  • CY (рдХреИрд░реА) рдХрд╛ рдорд╛рди 1 рддрдм рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдЪреНрдЪ рдСрд░реНрдбрд░ рдмрд┐рдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдпрд╛ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдПрд╕реА (рдСрдХреНрд╕рд┐рд▓рд░реА рдХреИрд░реА) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмреАрд╕реАрдбреА (рдмрд╛рдЗрдирд░реА рдХреЛрдбреЗрдб рджрд╢рдорд▓рд╡) рдЧрдгрд┐рдд рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдореИрдиреБрдЕрд▓ рджреЗрдЦреЗрдВ, рдЕрдВрддрд░рд┐рдХреНрд╖ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд╢рд░реНрдд рд╢рд╛рдЦрд╛ рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрдб рдЬреЗрдб рдХреЗрд╡рд▓ рдЭрдВрдбреЗ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рд╢рд╛рдЦрд╛ рдХрд░рддрд╛ рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рддреАрди рд░реВрдк рд╣реИрдВ: рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рддрддреНрдХрд╛рд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╕реНрдореГрддрд┐ рдХреЗ рд▓рд┐рдПред рдЖрдЗрдП рдЙрдирдХреЗ рд░реВрдкреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рд╕рд╣рд╛рдпрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдзреНрд╡рдЬ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред)

рдкрдВрдЬреАрдХрд░рдг рдлреЙрд░реНрдо


рдпрд╣рд╛рдВ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ; рдкрд╣рд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд░реВрдк рдЬреЛ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  case 0x80: //ADD B { //      , //      uint16_t answer = (uint16_t) state->a + (uint16_t) state->b; //  :    , //    , //      if ((answer & 0xff) == 0) state->cc.z = 1; else state->cc.z = 0; //  :   7 , //    , //      if (answer & 0x80) state->cc.s = 1; else state->cc.s = 0; //   if (answer > 0xff) state->cc.cy = 1; else state->cc.cy = 0; //    state->cc.p = Parity( answer & 0xff); state->a = answer & 0xff; } //  ADD     case 0x81: //ADD C { uint16_t answer = (uint16_t) state->a + (uint16_t) state->c; state->cc.z = ((answer & 0xff) == 0); state->cc.s = ((answer & 0x80) != 0); state->cc.cy = (answer > 0xff); state->cc.p = Parity(answer&0xff); state->a = answer & 0xff; } 

рдореИрдВ 16-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде 8-рдмрд┐рдЯ рдЧрдгрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд╕реЗ рдЙрди рдорд╛рдорд▓реЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЧрдгрдирд╛ рдПрдХ рдХреИрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред

рддрддреНрдХрд╛рд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╛рд░реНрдо


рддрддреНрдХрд╛рд▓ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝рд╛ рдХрд╛ рд╕реНрд░реЛрдд рд╣реИред рдЪреВрдБрдХрд┐ "opcode" рдореЗрдореЛрд░реА рдореЗрдВ рдХрд░рдВрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП opcode [1] рддреБрд░рдВрдд рдЕрдЧрд▓реА рдмрд╛рдЗрдЯ рд╣реЛрдЧреАред

  case 0xC6: //ADI  { uint16_t answer = (uint16_t) state->a + (uint16_t) opcode[1]; state->cc.z = ((answer & 0xff) == 0); state->cc.s = ((answer & 0x80) != 0); state->cc.cy = (answer > 0xff); state->cc.p = Parity(answer&0xff); state->a = answer & 0xff; } 

рд╕реНрдореГрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░


рдореЗрдореЛрд░реА рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдЪрдПрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрддрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

  case 0x86: //ADD M { uint16_t offset = (state->h<<8) | (state->l); uint16_t answer = (uint16_t) state->a + state->memory[offset]; state->cc.z = ((answer & 0xff) == 0); state->cc.s = ((answer & 0x80) != 0); state->cc.cy = (answer > 0xff); state->cc.p = Parity(answer&0xff); state->a = answer & 0xff; } 

рдиреЛрдЯ


рд╢реЗрд╖ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд:

  • рд╕рдВрджрд░реНрдн рдореИрдиреБрдЕрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреИрд░реА (рдПрдбреАрд╕реА, рдПрд╕реАрдЖрдИ, рдПрд╕рдмреАрдмреА, рдПрд╕рдпреВрдЖрдИ) рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рд╣рдо рдЧрдгрдирд╛ рдореЗрдВ рдХреИрд░реА рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • INX рдФрд░ DCX рд░рдЬрд┐рд╕реНрдЯрд░ рдЬреЛрдбрд╝реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ; рдпреЗ рдХрдорд╛рдВрдб рдлреНрд▓реИрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  • DAD рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХрд╛ рдПрдХ рдФрд░ рдХрдорд╛рдВрдб рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдХреИрд░реА рдлреНрд▓реИрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ
  • INR рдФрд░ DCR рдХреИрд░реА рдлрд╝реНрд▓реИрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рд╢рд╛рдЦрд╛ рд╕рдореВрд╣


рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд░рд╛рдЬреНрдп рдХреЛрдб рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рдж, рд╢рд╛рдЦрд╛ рд╕рдореВрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд╢рд╛рдЦрд╛рдПрдВ рд╣реИрдВ - рд╕рдВрдХреНрд░рдордг (JMP) рдФрд░ рдХреЙрд▓ (CALL)ред JMP рдмрд╕ рдкреАрд╕реА рдХреЛ рдЬрдВрдк рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рдХреЗ рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдЯреАрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдЯреИрдХ рдкрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкреАрд╕реА рдХреЛ рдЧрдВрддрд╡реНрдп рдХрд╛ рдкрддрд╛ рдмрддрд╛рддрд╛ рд╣реИред рдЖрд░рдИрдЯреА рдХреЙрд▓ рд╕реЗ рд▓реМрдЯрддрд╛ рд╣реИ, рд╕реНрдЯреИрдХ рд╕реЗ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреАрд╕реА рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред

рдЬреЗрдПрдордкреА рдФрд░ рдХреЙрд▓ рджреЛрдиреЛрдВ рд╣реА рдкреВрд░реНрдг рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдУрдкрдХреЛрдб рдХреЗ рдмрд╛рдж рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реЛрддреЗ рд╣реИрдВред

рдЬреЗрдПрдордкреА


JMP рдХрдорд╛рдВрдб рд╢рд╛рдЦрд╛рдПрдВ рдмрд┐рдирд╛ рдЧрдВрддрд╡реНрдп рдкрддреЗ рдХреЗ рдмрд┐рдирд╛ рд╢рд░реНрддред рд╕рднреА рд╕реНрдерд┐рддрд┐ рдХреЛрдб (рдПрд╕реА рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреЗ рд▓рд┐рдП рд╕рд╢рд░реНрдд рд╢рд╛рдЦрд╛ рдХрдорд╛рдВрдб рднреА рд╣реИрдВ:

  • JNZ рдФрд░ JZ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП
  • рдкреНрд░рд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрдирд╕реА рдФрд░ рдЬреЗрд╕реА
  • рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЬреЗрдкреАрдУ рдФрд░ рдЬреЗрдкреАрдИ
  • рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдЬреЗрдкреА (рдкреНрд▓рд╕) рдФрд░ рдЬреЗрдПрдо (рдорд╛рдЗрдирд╕)

рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

  case 0xc2: //JNZ  if (0 == state->cc.z) state->pc = (opcode[2] << 8) | opcode[1]; else //    state->pc += 2; break; case 0xc3: //JMP  state->pc = (opcode[2] << 8) | opcode[1]; break; 

рдХреЙрд▓ рдФрд░ рдЖрд░рдИрдЯреА


рдХреЙрд▓ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╕реНрдЯреИрдХ рдкрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкрддреЗ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЧрдВрддрд╡реНрдп рдкрддреЗ рдкрд░ рдХреВрджрддрд╛ рд╣реИред рдЖрд░рдИрдЯреА рд╕реНрдЯреИрдХ рд╕реЗ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреАрд╕реА рдкрд░ рдмрдЪрд╛рддрд╛ рд╣реИред CALL рдФрд░ RET рдХреЗ рд╕рд╢рд░реНрдд рд╕рдВрд╕реНрдХрд░рдг рд╕рднреА рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВред

  • рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рд╕реАрдЬреЗрдб, рд╕реАрдПрдирдЬреЗрдб, рдЖрд░рдЬреЗрдб, рдЖрд░рдПрдирдЬреЗрдб
  • рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рд╕реАрдПрдирд╕реА, рд╕реАрд╕реА, рдЖрд░рдПрдирд╕реА, рдЖрд░рд╕реА
  • CPO, CPE, RPO, рд╕рдорддрд╛ рдХреЗ рд▓рд┐рдП RPE
  • рд╕рд╛рдЗрди рдХреЗ рд▓рд┐рдП рд╕реАрдкреА, рд╕реАрдПрдо, рдЖрд░рдкреА, рдЖрд░рдПрдо

  case 0xcd: //CALL  { uint16_t ret = state->pc+2; state->memory[state->sp-1] = (ret >> 8) & 0xff; state->memory[state->sp-2] = (ret & 0xff); state->sp = state->sp - 2; state->pc = (opcode[2] << 8) | opcode[1]; } break; case 0xc9: //RET state->pc = state->memory[state->sp] | (state->memory[state->sp+1] << 8); state->sp += 2; break; 

рдиреЛрдЯ


  • PCHL рдХрдорд╛рдВрдб рдмрд┐рдирд╛ рд╢рд░реНрдд рдПрдЪрдПрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдореЗрдВ рдПрдХ рдкрддреЗ рдкрд░ рдХреВрджрддрд╛ рд╣реИред
  • рдореИрдВрдиреЗ рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ RST рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рд╕реНрдЯреИрдХ рдкрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдореЗрдореЛрд░реА рдХреЗ рдиреАрдЪреЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкрддреЗ рдкрд░ рдХреВрджрддрд╛ рд╣реИред

рддрд╛рд░реНрдХрд┐рдХ рд╕рдореВрд╣


рдпрд╣ рд╕рдореВрд╣ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ (рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВ)ред рдЙрдирдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ, рд╡реЗ рдПрдХ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдореВрд╣ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдкрд░реЗрд╢рди рд░рдЬрд┐рд╕реНрдЯрд░ рдП (рдбреНрд░рд╛рдЗрд╡) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдкрд░реЗрд╢рди рдЭрдВрдбреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдСрдкрд░реЗрд╢рди 8-рдмрд┐рдЯ рдорд╛рдиреЛрдВ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЬреЛрдбрд╝реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рдХрдорд╛рдВрдб рдирд╣реАрдВ рд╣реИред

рдмреВрд▓рд┐рдпрди рдСрдкрд░реЗрд╢рди


рдФрд░, OR, NOT (CMP) рдФрд░ "рдПрдХреНрд╕рдХреНрд▓реВрд╕рд┐рд╡ рдпрд╛" (XOR) рдмреБрд▓рд┐рдпрди рдСрдкрд░реЗрд╢рди рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВред рдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕рдордЭрд╛рдпрд╛ред рдирд╣реАрдВ рдХрдорд╛рдВрдб (8080 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ CMA рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╕рдВрдЪрд╛рдпрдХ рдХреЛ рдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИ) рдмрд╕ рдереЛрдбрд╝рд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ - рд╕рднреА рдЗрдХрд╛рдЗрдпрд╛рдВ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рд╢реВрдиреНрдп рдмрди рдЬрд╛рддреЗ рд╣реИрдВред

рдореИрдВ XOR рдХреЛ "рдЕрдВрддрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛" рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред рдЙрд╕рдХреА рд╕рддреНрдп рддрд╛рд▓рд┐рдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдПрдХреНрд╕yрдкрд░рд┐рдгрд╛рдо
000
011
101
110

рдФрд░, OR, рдФрд░ XOR рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ, рдореЗрдореЛрд░реА рдФрд░ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рд╣реИред (CMP рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХреЗрд╕-рд╕рдВрд╡реЗрджреА рдХрдорд╛рдВрдб рд╣реИ)ред рдпрд╣рд╛рдБ opcodes рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

  case 0x2F: //CMA (not) state->a = ~state->a //  ,  CMA     break; case 0xe6: //ANI  { uint8_t x = state->a & opcode[1]; state->cc.z = (x == 0); state->cc.s = (0x80 == (x & 0x80)); state->cc.p = parity(x, 8); state->cc.cy = 0; //  ,  ANI  CY state->a = x; state->pc++; //   } break; 

рдЪрдХреНрд░реАрдп рд╢рд┐рдлреНрдЯ рдХрдорд╛рдВрдб


рдпреЗ рдХрдорд╛рдВрдб рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рджрд╛рдИрдВ рдУрд░ рдПрдХ рд╢рд┐рдлреНрдЯ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд┐рдЯ рд╕реЗ рджрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдмрд╛рдИрдВ рдУрд░ рдПрдХ рд╢рд┐рдлреНрдЯ - рдПрдХ рдмрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

(0b00010000) = 0b00001000

(0b00000001) = 0b00000010

рд╡реЗ рдмреЗрдХрд╛рд░ рд▓рдЧ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рджреЛ рдХреА рд╢рдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдЧреБрдгрд╛ рдФрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ рдмрд╛рдИрдВ рдкрд╛рд░реА рдХреЛ рд▓реЗрдВред 0b00000001 рджрд╢рдорд▓рд╡ 1 рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ 0b00000010 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, 0b00000010 рджрд╢рдорд▓рд╡ 2ред рдпрджрд┐ рд╣рдо рдмрд╛рдИрдВ рдУрд░ рджреВрд╕рд░реА рдкрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 0b00000100 рдорд┐рд▓рддрд╛ рд╣реИ, рдпрд╣реА рд╣реИ 4. рдмрд╛рдИрдВ рдУрд░ рдПрдХ рдФрд░ рдкрд╛рд░реА, рдФрд░ рд╣рдо 8. рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╕рдВрдЦреНрдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛: 5 ( 0b00000101 ) рдЬрдм рдмрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ 10 ( 0b00001010 ) рджреЗрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдмрд╛рдИрдВ рдкрд╛рд░реА 20 ( 0b00010100 ) рджреЗрддреА рд╣реИред рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдПред

8080 рдореЗрдВ рдЧреБрдгрди рдХрдорд╛рдВрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рдХрдорд╛рдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдк рдмреЛрдирд╕ рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдПрдХ рдмрд╛рд░ рдПрдХ рдЗрдВрдЯрд░рд╡реНрдпреВ рдореЗрдВ рдореБрдЭрд╕реЗ рдРрд╕рд╛ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ред (рдореИрдВрдиреЗ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рдорд┐рдирдЯ рд▓рдЧреЗред)

рдпреЗ рдХрдорд╛рдВрдб рд╕рд╛рдЗрдХреНрд▓реАрдХ рд░реВрдк рд╕реЗ рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдШреБрдорд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдХреИрд░реА рдлреНрд▓реИрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдХреБрдЫ рдЖрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВ:

  case 0x0f: //RRC { uint8_t x = state->a; state->a = ((x & 1) << 7) | (x >> 1); state->cc.cy = (1 == (x&1)); } break; case 0x1f: //RAR { uint8_t x = state->a; state->a = (state->cc.cy << 7) | (x >> 1); state->cc.cy = (1 == (x&1)); } break; 

рддреБрд▓рдирд╛


рд╕реАрдПрдордкреА рдФрд░ рд╕реАрдкреАрдЖрдИ рдХрд╛ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдЭрдВрдбреЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ (рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП)ред рд╡реЗ рдЭрдВрдбреЗ рдХреЛ рдШрдЯрд╛рдХрд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

  • рд╕рдорд╛рди рд░реВрдк рд╕реЗ: рдпрджрд┐ рджреЛ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ Z рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЙрдирдХрд╛ рдШрдЯрд╛рд╡ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИред
  • рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ: рдпрджрд┐ A рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╡реИрд▓реНрдпреВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ CY рдЭрдВрдбреЗ рдХреЛ рд╕рд╛рдл рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрд╛рд╡ рдмрд┐рдирд╛ рдЙрдзрд╛рд░ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
  • рдЫреЛрдЯрд╛: рдпрджрд┐ A рддреБрд▓рдирд╛ рдХрд┐рдП рдЧрдП рдорд╛рди рд╕реЗ рдХрдо рд╣реИ, рддреЛ CY рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ A рдХреЛ рдШрдЯрд╛рд╡ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдзрд╛рд░ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред

рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ, рдореЗрдореЛрд░реА рдФрд░ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рдХрдорд╛рдВрдб рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдШрдЯрд╛рд╡ рд╣реИ:

  case 0xfe: //CPI  { uint8_t x = state->a - opcode[1]; state->cc.z = (x == 0); state->cc.s = (0x80 == (x & 0x80)); //  ,    p -   state->cc.p = parity(x, 8); state->cc.cy = (state->a < opcode[1]); state->pc++; } break; 

рд╕реАрдПрдорд╕реА рдФрд░ рдПрд╕рдЯреАрд╕реА


рд╡реЗ рддрд╛рд░реНрдХрд┐рдХ рд╕рдореВрд╣ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд░реА рдлрд╝реНрд▓реИрдЧ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдХрдорд╛рдВрдб рдХрд╛ рд╕рдореВрд╣


рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╢реНрд░реЗрдгреА рдореЗрдВ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдЕрдВрддрд░рд┐рдХреНрд╖ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рддреЛ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЙрдирдХреЗ рдкрд╛рд╕ рд▓реМрдЯрдирд╛ рд╣реЛрдЧрд╛ред

  • рдИрдЖрдИ рдФрд░ рдбреАрдЖрдИ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрд╛рдзрд╛_ рд╕рдХреНрд╖рдо рдзреНрд╡рдЬ рдХреЛ рдЬреЛрдбрд╝рд╛, рдФрд░ рдЗрди рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реЗрдЯ / рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ред
  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдо рдФрд░ рд╕рд┐рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ I / O рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореИрдиреБрдЕрд▓ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрди рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд░рд┐рдХреНрд╖ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЙрдирдХрд╛ рдЕрдиреБрдХрд░рдг рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
  • HLT рдПрдХ рдкрдбрд╝рд╛рд╡ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдирд╛ рдкрдж рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (0)) рдХреЛрдбред
  • IN рдФрд░ OUT рдРрд╕реЗ рдХрдорд╛рдВрдб рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ 8080 рдкреНрд░реЛрд╕реЗрд╕рд░ рдЙрдкрдХрд░рдг рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред (рдмрд╛рдж рдореЗрдВ рд╣рдо рдЙрдирдХреЗ рдкрд╛рд╕ рд▓реМрдЯ рдЖрдПрдВрдЧреЗ)ред
  • рдПрдирдУрдкреА "рдХреЛрдИ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ" рд╣реИред рдПрдирдУрдкреА рдХрд╛ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреИрдирд▓ рдЯрд╛рдЗрдорд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ (рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рд╕реАрдкреАрдпреВ рдЪрдХреНрд░ рд▓рдЧрддреЗ рд╣реИрдВ)ред

рдПрдирдУрдкреА рдХрд╛ рдПрдХ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рд╕рдВрд╢реЛрдзрди рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЧреЗрдо рдХрд╛ ROM рдХреЛрдб рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдЕрдирд╛рд╡рд╢реНрдпрдХ opcodes рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рднреА рдХреЙрд▓ рдФрд░ JMP рдХрдорд╛рдВрдб рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдХреЛрдб рдЪрд╛рд▓ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд╣реЛрдиреЗ рдкрд░ рд╡реЗ рдЧрд▓рдд рд╣реЛрдВрдЧреЗ)ред рдПрдирдУрдкреА рд╕реЗ рд╣рдо рдХреЛрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рдЬреНрдпрд╛рджрд╛ рдХрдард┐рди рд╣реИ! рдЖрдк рдЗрд╕реЗ рд░реЙрдо рдореЗрдВ рдХрд╣реАрдВ рднреА рдЬрдЧрд╣ рдвреВрдВрдврдХрд░ рдФрд░ рдХрдорд╛рдВрдб рдХреЛ JMP рдореЗрдВ рдмрджрд▓рдХрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдвреЗрд░ рд╕рдореВрд╣


рд╣рдордиреЗ рд╕реНрдЯреИрдХ рд╕рдореВрд╣ рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рдпрд╛рдВрддреНрд░рд┐рдХреА рдкреВрд░реА рдХрд░ рд▓реА рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рддреЛ рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

PUSH рдФрд░ POP


PUSH рдФрд░ POP рдХреЗрд╡рд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред PUSH рд╕реНрдЯреИрдХ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ POP рд╕реНрдЯреИрдХ рдХреЗ рдКрдкрд░ рд╕реЗ 2 рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред

PUSH рдФрд░ POP рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдСрдкрдХреЛрдб рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдПрдХ: BC, DE, HL рдФрд░ PSWред PSW рдбреНрд░рд╛рдЗрд╡ рдлреНрд▓реИрдЧ рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬреЛрдбрд╝реА рд╣реИред рдпрд╣рд╛рдВ рдмреАрд╕реА рдФрд░ рдкреАрдПрд╕рдбрдмреНрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП рдкреАрдпреВрдПрд╕рдПрдЪ рдФрд░ рдкреАрдУрдкреА рдХрд╛ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИ - рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

  case 0xc1: //POP B { state->c = state->memory[state->sp]; state->b = state->memory[state->sp+1]; state->sp += 2; } break; case 0xc5: //PUSH B { state->memory[state->sp-1] = state->b; state->memory[state->sp-2] = state->c; state->sp = state->sp - 2; } break; case 0xf1: //POP PSW { state->a = state->memory[state->sp+1]; uint8_t psw = state->memory[state->sp]; state->cc.z = (0x01 == (psw & 0x01)); state->cc.s = (0x02 == (psw & 0x02)); state->cc.p = (0x04 == (psw & 0x04)); state->cc.cy = (0x05 == (psw & 0x08)); state->cc.ac = (0x10 == (psw & 0x10)); state->sp += 2; } break; case 0xf5: //PUSH PSW { state->memory[state->sp-1] = state->a; uint8_t psw = (state->cc.z | state->cc.s << 1 | state->cc.p << 2 | state->cc.cy << 3 | state->cc.ac << 4 ); state->memory[state->sp-2] = psw; state->sp = state->sp - 2; } break; 

SPHL рдФрд░ XTHL


рд╕реНрдЯреИрдХ рдЧреНрд░реБрдк рдореЗрдВ рджреЛ рдФрд░ рдЯреАрдореЗрдВ рд╣реИрдВ- SPHL рдФрд░ XTHLред

  • SPHL рдПрдЪрдПрд▓ рдХреЛ рдПрд╕рдкреА (рдПрд╕рдкреА рдХреЛ рдирдпрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ) рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
  • XTHL рд╕реНрд╡реИрдк рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдЪрдПрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреНрдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛

рдмрд╛рдЗрдирд░реА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ


рдХрдВрдкреНрдпреВрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдгрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЪреБрдиреЗрдВ - рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрдВ рдФрд░ рдЙрдирдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реАрдкреАрдпреВ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓рдХреНрд╖реНрдп рд╕реАрдкреАрдпреВ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд


рдЬрдм рд╣рдордиреЗ рд╣реЗрдХреНрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдорд╛рдирд╛ - рдЕрд░реНрдерд╛рдд, рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЕрдВрдХ рдХрд╛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рдерд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рджреЛ (рдЗрдХрд╛рдЗрдпреЛрдВ, рджреЛ, рдЪрд╛рд░, рдЖрджрд┐) рдХреА рд╢рдХреНрддрд┐ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред

рд╣рдо рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рднрдВрдбрд╛рд░рдг рдХреЗ рдореБрджреНрджреЗ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╢реНрди рдХреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ (рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ, рдПрдордПрд╕рдмреА) рджреНрд╡рд╛рд░рд╛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рдмрд╛рдЗрдЯ рд╣реИ, рддреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП MSB рдмрд┐рдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рдФрд░ рд╢реВрдиреНрдп MSB рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИред

рдЛрдгрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдорд╛рди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдФрд░ MSB рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╣реЗрдХреНрд╕-рдирдВрдмрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА "NOT" рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдЬреЛрдбрд╝реЗрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реЗрдХреНрд╕ рд╕рдВрдЦреНрдпрд╛ 0x80 рдХреЗ рд▓рд┐рдП, MSB рдмрд┐рдЯ рд╕реЗрдЯ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рд╕рдВрдЦреНрдпрд╛ 0x80 рдХрд╛ рдмрд╛рдЗрдирд░реА "рдирд╣реАрдВ" 0x7f рд╣реИ, рдпрд╛ рджрд╢рдорд▓рд╡ 127. 127 + 1 = 128 рд╣реИред рдЕрд░реНрдерд╛рддреН, 0x80 рджрд╢рдорд▓рд╡ рдореЗрдВ -128 рд╣реИред рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг: 0xC5ред рдирд╣реАрдВ (0xC5) = 0x3A = рджрд╢рдорд▓рд╡ 58 +1 = рджрд╢рдорд▓рд╡ 59ред рдЕрд░реНрдерд╛рддреН, 0xC5 рджрд╢рдорд▓рд╡ -59 рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЕрднреА рднреА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ ред рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

  рдЙрджрд╛рд╣рд░рдг 1

      рджрд╢рдорд▓рд╡ рд╣реЗрдХреНрд╕ рдмрд╛рдЗрдирд░реА    
       -3 0xFD 1111 1101    
    + 10 0x0A +0000 1010    
    ----- -----------    
        7 0x07 1 0000 0111    
                        ^ рдпрд╣ рдХреИрд░реА рдмрд┐рдЯ рдореЗрдВ рджрд░реНрдЬ рд╣реИ

    рдЙрджрд╛рд╣рд░рдг 2    

      рджрд╢рдорд▓рд╡ рд╣реЗрдХреНрд╕ рдмрд╛рдЗрдирд░реА    
      -59 0xC5 1100 0101    
    + 33 0x21 +0010 0001    
    ----- -----------    
      -26 0xE6 1110 0110 


рдЙрджрд╛рд╣рд░рдг 1 рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ 7. рдореЗрдВ 10 рдФрд░ -3 рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕реА рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг 2 рдореЗрдВ, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рдгрд╛рдо рдирдХрд╛рд░рд╛рддреНрдордХ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ: рдирд╣реАрдВ (0xE6) = 0x19/25 + 1 = 26. 0xE6 = -26 рдорд╕реНрддрд┐рд╖реНрдХ рдХрд╛ рд╡рд┐рд╕реНрдлреЛрдЯ!

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред

рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░


рд╕реА рдореЗрдВ, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдмрдВрдз рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдорд╛рдирдХ / рдкреБрд░рд╛рдиреЗ рд╕реНрдХреВрд▓ C рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЪрд╛рд░, рдЗрдВрдЯ, рдФрд░ рд▓рдВрдмреЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рдорд┐рддреНрд░ рдиреЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд char, рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int, рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд▓рдВрдмреЗред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдореЗрдВ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ stdint.h рд╣реИ, рддреЛ рдЖрдк int8_t, uint8_t, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдЖрдХрд╛рд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк 8 рдмрд┐рдЯреНрд╕ рдореЗрдВ 0 рд╕реЗ 255 рддрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╣реЗрдХреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ 0x00 рд╕реЗ 0xFF рддрдХ рд╣реИред рдЪреВрдВрдХрд┐ 0xFF рдореЗрдВ "рд╕рднреА рдмрд┐рдЯреНрд╕ рд╕реЗрдЯ" рд╣реИрдВ, рдФрд░ рдпрд╣ рджрд╢рдорд▓рд╡ 255 рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ рдХрд┐ рдПрдХрд▓-рдмрд╛рдЗрдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдЕрдВрддрд░рд╛рд▓ 0-255 рд╣реИред рдЕрдВрддрд░рд╛рд▓ рд╣рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рднреА рдЖрдХрд╛рд░ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ - рд╕рдВрдЦреНрдпрд╛рдПрдВ рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рд╕рднреА рдмрд┐рдЯ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред

рдЯрд╛рдЗрдкрдЕрдВрддрд░рд╛рд▓рд╣реЗрдХреНрд╕
8-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд0-2550x0-0xFF
8-рдмрд┐рдЯ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП-128-1270x80-0x7F
16-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд0-65,5350x0-0xFFFF
16-рдмрд┐рдЯ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП-32,768-32,7670x8000-0x7FFF
32-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд0-42949672950x0-0xFFFFFFFF
32-рдмрд┐рдЯ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП-2147483648-21474836470x80000000-0x7FFFFFFF

рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ -1 рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдмрд┐рдЯ рд╕реЗрдЯ рд╣реИрдВ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдмрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП 0xFF, рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 16-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП 0xFFFF рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 32-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП 0xFFFFFFFF)ред рдпрджрд┐ рдбреЗрдЯрд╛ рдХреЛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рднреА рджрд┐рдП рдЧрдП рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред

рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрднрд╡рддрдГ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддрдм рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдЙрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо 8-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП uint8_t рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдВрдХреЗрдд: рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдпрджрд┐ рдЖрдкрдХреЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ gdb рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдмрд╛рдЗрдирд░реА рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдиреАрдЪреЗ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ - рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рд╕рддреНрд░ рдореЗрдВ, # рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВ рдРрд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реАрдВред

# /c, gdb
(gdb) print /c 0xFD
$1 = -3 '?'

# /x, gdb hex
# "p" "print"
(gdb) p /c 0xA
$2 = 10 '\n'

# 2 " "
(gdb) p /c 0xC5
$3 = -59 '?'
(gdb) p /c 0xC5+0x21
$4 = -26 '?'

# print , gdb
(gdb) p 0x21
$9 = 33

# , gdb,
# ,
(gdb) p 0xc5
$5 = 197 #
(gdb) p /c 0xc5
$3 = -59 '?' #
(gdb) p 0xfd
$6 = 253

# ( 32- )
(gdb) p /x -3
$7 = 0xfffffffd

# 1
(gdb) print (char) 0xff
$1 = -1 '?'
# 1
(gdb) print (unsigned char) 0xff
$2 = 255 '?'


рдЬрдм рдореИрдВ рд╣реЗрдХреНрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ gdb рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ - рдФрд░ рдпрд╣ рд▓рдЧрднрдЧ рд╣рд░ рджрд┐рди рд╣реЛрддрд╛ рд╣реИред рдПрдХ GUI рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдЦреЛрд▓рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд▓рд┐рдирдХреНрд╕ (рдФрд░ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕) рдорд╢реАрдиреЛрдВ рдкрд░, рдЬреАрдбреАрдмреА рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ "рдЬреАрдбреАрдмреА" рджрд░реНрдЬ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рдПрдХреНрд╕рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХреНрд╕рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рд┐рдВрдЯрдлрд╝ рдЖрдЙрдЯрдкреБрдЯ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ)ред рд╡рд┐рдВрдбреЛрдЬ рдкрд░, gdb рдбрд┐рдмрдЧрд░ рд╕рд╛рдЗрдЧрд╡рд┐рди рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╕реАрдкреАрдпреВ рдПрдореБрд▓реЗрдЯрд░ рд╕рдорд╛рдкреНрддрд┐


рдпрд╣ рд╕рдм рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХ рд▓рдВрдмреА рдпрд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЖрдкрдХреЛ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╛ рддреЛ рдкреВрд░реНрдг 8080 рдПрдореБрд▓реЗрд╢рди рдмрдирд╛рдПрдВ, рдпрд╛ рдЧреЗрдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдкреВрд░реНрдг рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдХреЗрд╡рд▓ рдЦреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рд╣реИред рд╣рдо рдЙрд╕ рд╡рд┐рд╢рд╛рд▓ рд╕реНрд╡рд┐рдЪ рдирд┐рд░реНрдорд╛рдг рдХреЛ рднрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рдордиреЗ рдПрдореБрд▓реЗрдЯрд░ рд╢реЗрд▓ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╣рдо рддрдм рддрдХ рджреЛрд╣рд░рд╛рдПрдВрдЧреЗ рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдХрд▓ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрджреЗрд╢ рди рд╣реЛ:

  1. ROM рдЕрдВрддрд░рд┐рдХреНрд╖ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдореБрд▓реЗрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
  2. UnimplementedInstruction()рдпрджрд┐ рдХрдорд╛рдВрдб рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдХреЙрд▓ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ
  3. рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ
  4. рдЧреЛрдЯреЛ рез

, , тАФ . , :

  int Emulate8080Op(State8080* state) { unsigned char *opcode = &state->memory[state->pc]; Disassemble8080Op(state->memory, state->pc); switch (*opcode) { case 0x00: //NOP /* ... */ } /*    */ printf("\tC=%d,P=%d,S=%d,Z=%d\n", state->cc.cy, state->cc.p, state->cc.s, state->cc.z); printf("\tA $%02x B $%02x C $%02x D $%02x E $%02x H $%02x L $%02x SP %04x\n", state->a, state->b, state->c, state->d, state->e, state->h, state->l, state->sp); } 

.

: , 50 , 8080. , :

0x00NOP
0x01LXI B,D16
0x05DCR B
0x06MVI B,D8
0x09DAD B
0x0dDCR C
0x0eMVI C,D8
0x0fRRC
0x11LXI D,D16
0x13INX D
0x19DAD D
0x1aLDAX D
0x21LXI H,D16
0x23INX H
0x26MVI H,D8
0x29DAD H
0x31LXI SP,D16
0x32STA adr
0x36MVI M,D8
0x3aLDA adr
0x3eMVI A,D8
0x56MOV D,M
0x5eMOV E,M
0x66MOV H,M
0x6fMOV L,A
0x77MOV M,A
0x7aMOV A,D
0x7bрдПрдордУрд╡реА рдП, рдИ
0x7cрдПрдордУрд╡реА рдП, рдПрдЪ
0x7EрдПрдордУрд╡реА рдП, рдПрдо
0xa7ANA рдП
0xafXRA рдП
0xc1рдкреЙрдк рдмреА
0xc2Jnz adr
0xc3рдЬреЗрдПрдордкреА рдПрдбреАрдЖрд░
0xc5рдкреВрд╖ рдмреА
0xc6ADI D8
0xc9рдЖрд░рдИрдЯреА
0xcdрдПрдбреНрд░ рдХреЛ рдмреБрд▓рд╛рдУ
0xd1рдкреЙрдк рдбреА
0xd3OUT D8
0xd5рдкреВрд╖ D
0xe1рдкреЙрдк рдПрдЪ
0xe5рдкреВрд╖ рд╣
0xe6ANI D8
0xebXCHG
0xf1рдкреАрдУрдкреА PSW
0xf5PUSH PSW
0xfbрдИрдЖрдИ
0xFECPI D8

рдпреЗ рдХреЗрд╡рд▓ 50 рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ 10 рдРрд╕реЗ рдЖрдВрджреЛрд▓рди рд╣реИрдВ рдЬреЛ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдбрд┐рдмрдЧрд┐рдВрдЧ


. , . , ( , ), , .

тАФ , . , , . , . . , , , :

  1. рдЕрдЧрд▓реА рдЯреАрдо рдХреЗ рд▓рд┐рдП
  2. рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
  3. рдореЗрд░реЗ рднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░рд╛ рдмреБрд▓рд╛рдирд╛
  4. рд╣рдорд╛рд░реЗ рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
  5. рдХрд┐рд╕реА рднреА рдорддрднреЗрдж рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢
  6. рдЧреЛрдЯреЛ рей

рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдЗрд╕ рд╕рд╛рдЗрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ред рдпрд╣ рдПрдХ 8080 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдореБрд▓реЗрдЯрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ ROM рд╕реНрдкреЗрд╕ рдЗрдирд╡реЗрд╕реНрдЯрд░реНрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣рд╛рдБ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ:

  1. рдЕрдВрддрд░рд┐рдХреНрд╖ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ
  2. рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд░рди 1" рдмрдЯрди рджрдмрд╛рдПрдВред
  3. рд╣рдо рдЕрдкрдиреЗ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
  4. рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рдЕрдкрдиреЗ рд╕рд╛рде рдХрд░реЗрдВ
  5. рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рдЧреЛрдЯреЛ 2
  6. рдпрджрд┐ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдирд┐рд░реНрджреЗрд╢ рдЕрдиреБрдХрд░рдг рдЧрд▓рдд рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЪрд░рдг 1 рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ 8080 рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓реВрдВрдЧрд╛ - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд▓рдВрдмреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореЗрд░реА рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЯрд╛рдЗрдкреЛрд╕ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдИрдВ, рдЬрд┐рдирдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдерд╛ред

рдпрджрд┐ рдЖрдк рдЪрд░рдгрдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ 30 рд╣рдЬрд╛рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ $ 1a5f рдХреЗ рдЪрдХреНрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдХреНрд╕рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдХреНрд░реАрди рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рдмрд╛рдж, 50 рд╣рдЬрд╛рд░ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рдлрдВрд╕ рдЬрд╛рддрд╛ рд╣реИ:

  0ada LDA $20c0 0add ANA A 0ade JNZ $0ada 

рдпрд╣ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ $ 20c0 рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдорд╛рди рд╢реВрдиреНрдп рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЗрд╕ рд▓реВрдк рдореЗрдВ рдХреЛрдб $ 20c0 рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдпрд╣ рдХрд╣реАрдВ рдФрд░ рд╕реЗ рд╕рдВрдХреЗрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рдЖрд░реНрдХреЗрдб рдорд╢реАрди рдХреЗ "рд▓реЛрд╣рд╛" рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдЧрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕реАрдкреАрдпреВ рдПрдореБрд▓реЗрдЯрд░ рдЗрд╕ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд╕реНрд░реЛрдд рджреЗрдЦреЗрдВ ред

рдкреВрд░реНрдг 8080 рдЕрдиреБрдХрд░рдг


рдПрдХ рд╕рдмрдХ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдмрд╣реБрдд рд▓рд╛рдЧрдд рджреА: рдЙрди рдЯреАрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рди рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рдХрд┐рд╕реА рднреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдВрдЧреВрдареЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд┐рдпрдо рд╣реИред рдпрджрд┐ рдЖрдк рдЯреАрдо рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЖрдк рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рджреВрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЙрддрдирд╛ рд╣реА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рдПрдХ рдФрд░ рдЙрдкрд╛рдп рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдкреВрд░реНрдг 8080 рдПрдореБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ 8080 рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рдХреА рдЦреЛрдЬ рдХреА рдЬрд┐рд╕рдХрд╛ рдирд╛рдо cpudiag.asm рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ 8080 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрдорд╛рдВрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рддрд╛ рд╣реВрдВ:

  1. рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рджреВрд╕рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ cpudiag.asm рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИред
  2. рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рд╢реНрд░рдорд╕рд╛рдзреНрдп рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдбрд╛рдВрддрд░рдг рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдмрдбрд╝реА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдпреЗ рдЪрд░рдг рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВред

рдЯреЗрд╕реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА


рдореИрдВрдиреЗ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореИрдВ рдЗрд╕ рдЕрдЪреНрдЫреЗ рдкреГрд╖реНрда рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдмрд╕ рдЧрдпрд╛ ред рдореИрдВрдиреЗ рдкрд╛рда cpudiag.asm рдХреЛ рдмрд╛рдПрдБ рдлрд▓рдХ рдореЗрдВ рдЪрд┐рдкрдХрд╛ рджрд┐рдпрд╛ рдФрд░ рдмрд┐рд▓реНрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдПрдХ рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдБ рдореЗрдВ "рд╕реБрдВрджрд░ рдХреЛрдб рдмрдирд╛рдПрдБ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдореИрдВрдиреЗ test.bin рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреА, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб 8080 рд╕рдВрдХрд▓рд┐рдд рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдореЗрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджрд░реНрдкрдг рд╕реЗ

cpudiag.asm рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдореЗрд░реА рд╕рд╛рдЗрдЯ рд╕реЗ

cpudiag.bin (рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб 8080) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

рдореЗрд░реЗ рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЕрдкрд▓реЛрдб рдХрд░рдирд╛


invaders.* .

. -, ORG 00100H , , , 0x100 hex. 8080, , . , , , 0x100.

-, , . hex- JMP $0100 , . ( PC 0x100.)

-, . , STACK EQU TEMPP+256 , . , $6ad, PUSH . , 0x100, , , ┬л0x7┬╗ , .

, DAA , , ( JMP).

  ReadFileIntoMemoryAt(state, "/Users/kpmiller/Desktop/invaders/cpudiag.bin", 0x100); //  ,   JMP 0x100 state->memory[0]=0xc3; state->memory[1]=0; state->memory[2]=0x01; //Fix the stack pointer from 0x6ad to 0x7ad // this 0x06 byte 112 in the code, which is // byte 112 + 0x100 = 368 in memory state->memory[368] = 0x7; //  DAA state->memory[0x59c] = 0xc3; //JMP state->memory[0x59d] = 0xc2; state->memory[0x59e] = 0x05; 


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╕реАрдкреА / рдПрдо рдУрдПрд╕ рдХреА рдорджрдж рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ CP / M рдХреЗ рдкрд╛рд╕ $ 0005 рдкрд░ рдХреБрдЫ рдХреЛрдб рд╣реИ рдЬреЛ рдХрдВрд╕реЛрд▓ рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ CALL рдПрдореБрд▓реЗрд╢рди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рджреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдХреЙрд▓ рдЕрдиреБрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  case 0xcd: //CALL  #ifdef FOR_CPUDIAG if (5 == ((opcode[2] << 8) | opcode[1])) { if (state->c == 9) { uint16_t offset = (state->d<<8) | (state->e); char *str = &state->memory[offset+3]; // - while (*str != '$') printf("%c", *str++); printf("\n"); } else if (state->c == 2) { //    ,   ,    printf ("print char routine called\n"); } } else if (0 == ((opcode[2] << 8) | opcode[1])) { exit(0); } else #endif { uint16_t ret = state->pc+2; state->memory[state->sp-1] = (ret >> 8) & 0xff; state->memory[state->sp-2] = (ret & 0xff); state->sp = state->sp - 2; state->pc = (opcode[2] << 8) | opcode[1]; } break; 

рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдЕрдкрдиреЗ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓реАрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рдЦреЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡реЗ рдереЗ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рд╕рднреА opcodes (DAA рдФрд░ рдЙрдирдХреЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдореЗрд░реА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ 3-4 рдШрдВрдЯреЗ рд▓рдЧреЗред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдиреБрдЕрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рддреЗрдЬ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдерд╛ - рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкрд╛рддрд╛, рдореИрдВрдиреЗ рдореИрдиреБрдЕрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ 4 рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдиреБрдЕрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрд╛рдирдирд╛ рднреА рдПрдХ рдорд╣рд╛рди рдХреМрд╢рд▓ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрдИ рдорд┐рд▓рд┐рдпрди рдХрдорд╛рдВрдб рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреЛ рдПрдореБрд▓реЗрдЯрд░ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/hi418699/


All Articles