home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 405.lha / AppleII_Emulators_src / src-2 / cpu_stack.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-28  |  2.3 KB  |  106 lines

  1. #include <cpu_prog_model.h>
  2. #include <cpu6502_addrm.h>
  3.  
  4.  
  5. #define FALSE  0
  6. #define TRUE   1
  7.  
  8.  
  9. void BRK( code)
  10. PM *code;
  11. {
  12.    code->Br = TRUE;
  13.  
  14.    code->Me [stack_address( code)] = (code->PC + 1) >> 8;
  15.    (code->SP)--;
  16.    code->Me [stack_address( code)] = (code->PC + 1) & 0xFF;
  17.    (code->SP)--;
  18.    code->Me [stack_address( code)] = code->Ne << 6 |
  19.                                      code->Ov << 5 |
  20.                                      code->Br << 4 |
  21.                                      code->De << 3 |
  22.                                      code->In << 2 |
  23.                                      code->Ze << 1 |
  24.                                      code->Ca ;
  25.    (code->SP)--;
  26.    code->PC = code->Me [0xFFFE] | code->Me [0xFFFF] << 8;
  27. }
  28.  
  29. void JSR( code)
  30. PM *code;
  31. {
  32.    unsigned short int  address;
  33.    short               dummy;
  34.  
  35.    address = abs_address( code);
  36.    (code->PC)--;
  37.  
  38.    code->Me [stack_address( code)] = code->PC >> 8;
  39.    (code->SP)--;
  40.    code->Me [stack_address( code)] = (code->PC) & 0xFF;
  41.    (code->SP)--;
  42.  
  43.    code->PC = address;
  44.    mem_check( address, &dummy, code, Func_JSR);
  45. }
  46.  
  47. void PHA( code)
  48. PM *code;
  49. {
  50.    code->Me [stack_address( code)] = code->Ac;
  51.    (code->SP)--;
  52. }
  53.  
  54. void PHP( code)
  55. PM *code;
  56. {
  57.    code->Me [stack_address( code)] = code->Ne << 6 |
  58.                                      code->Ov << 5 |
  59.                                      code->Br << 4 |
  60.                                      code->De << 3 |
  61.                                      code->In << 2 |
  62.                                      code->Ze << 1 | code->Ca;
  63.    (code->SP)--;
  64. }
  65.  
  66. void PLA( code)
  67. PM *code;
  68. {
  69.    (code->SP)++;
  70.    code->Ac = code->Me [stack_address( code)];
  71.    set_neg_zero_stat( code, code->Ac);
  72. }
  73.  
  74. void PLP( code)
  75. PM *code;
  76. {
  77.    short temp_value;
  78.  
  79.    (code->SP)++;
  80.    temp_value = code->Me [stack_address( code)];
  81.  
  82.    code->Ca = temp_value & 0x1;
  83.    code->Ze = (temp_value >> 1) & 0x1;
  84.    code->In = (temp_value >> 2) & 0x1;
  85.    code->De = (temp_value >> 3) & 0x1;
  86.    code->Br = (temp_value >> 4) & 0x1;
  87.    code->Ov = (temp_value >> 5) & 0x1;
  88.    code->Ne = (temp_value >> 6) & 0x1;
  89. }
  90.  
  91. void RTS( code)
  92. PM *code;
  93. {
  94.    short  dummy;
  95.  
  96.    (code->SP)++;
  97.    code->PC = code->Me [stack_address( code)]     |
  98.               code->Me [stack_address( code) + 1] << 8;
  99.    (code->SP)++;
  100.    (code->PC)++;
  101.  
  102.    mem_check( code->PC, &dummy, code, Func_JMP);
  103. }
  104.  
  105.  
  106.