#include <cpu_prog_model.h>
#include <cpu6502_addrm.h>


#define test_rom( address)      (address >= 0xD000)



void STA_zer( code)
PM *code;
{
   unsigned short int address;

   address = zero_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Ac;
      mem_check( address, &(code->Ac), code, Func_STORE);
   }
}

void STA_zex( code)
PM *code;
{
   unsigned short int address;

   address = zero_x_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Ac;
      mem_check( address, &(code->Ac), code, Func_STORE);
   }
}

void STA_abs( code)
PM *code;
{
   unsigned short int address;

   address = abs_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Ac;
      mem_check( address, &(code->Ac), code, Func_STORE);
   }
}

void STA_abx( code)
PM *code;
{
   unsigned short int address;

   address = abs_x_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Ac;
      mem_check( address, &(code->Ac), code, Func_STORE);
   }
}

void STA_aby( code)
PM *code;
{
   unsigned short int address;

   address = abs_y_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Ac;
      mem_check( address, &(code->Ac), code, Func_STORE);
   }
}

void STA_inx( code)
PM *code;
{
   unsigned short int address;

   address = ind_x_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Ac;
      mem_check( address, &(code->Ac), code, Func_STORE);
   }
}

void STA_iny( code)
PM *code;
{
   unsigned short int address;

   address = ind_y_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Ac;
      mem_check( address, &(code->Ac), code, Func_STORE);
   }
}


void STX_zer( code)
PM *code;
{
   unsigned short int address;

   address = zero_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Xr;
      mem_check( address, &(code->Xr), code, Func_STORE);
   }
}

void STX_zex( code)
PM *code;
{
   unsigned short int address;

   address = zero_x_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Xr;
      mem_check( address, &(code->Xr), code, Func_STORE);
   }
}

void STX_abs( code)
PM *code;
{
   unsigned short int address;

   address = abs_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Xr;
      mem_check( address, &(code->Xr), code, Func_STORE);
   }
}


void STY_zer( code)
PM *code;
{
   unsigned short int address;

   address = zero_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Yr;
      mem_check( address, &(code->Yr), code, Func_STORE);
   }
}

void STY_zex( code)
PM *code;
{
   unsigned short int address;

   address = zero_x_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Yr;
      mem_check( address, &(code->Yr), code, Func_STORE);
   }
}

void STY_abs( code)
PM *code;
{
   unsigned short int address;

   address = abs_address( code);

   if (!test_rom( address) )
   {
      code->Me [address] = code->Yr;
      mem_check( address, &(code->Yr), code, Func_STORE);
   }
}


