Example #1
0
//   ######## ##     ## ########  ###### 
//   ##        ##   ##  ##       ##    ##
//   ##         ## ##   ##       ##      
//   ######      ###    ######   ##      
//   ##         ## ##   ##       ##      
//   ##        ##   ##  ##       ##    ##
//   ######## ##     ## ########  ###### 
//  cp value into mem[pc] and exec
int execute_cmd(struct _6510_cpu* cpu, char memory[][9], char* string){
  int op, lb, hb;
  int pc=pc2int(cpu);
  sscanf(string, "x %2x %2x %2x", &op, &lb, &hb);
  int2register(op, (char*)&(memory[pc]));
  int2register(lb, (char*)&(memory[pc+1]));
  int2register(hb, (char*)&memory[pc+2]);  
  fetch(cpu, memory);
  exec(cpu, memory);
  print_cpu_dis(cpu,memory);
  return 1;  
}
Example #2
0
int registers_cmd(struct _6510_cpu* cpu, char memory[][9], char* string){
  char regname[5] = "1234";
  char buffer_reg[8+1] = "00000000";
  int key, content=-1;
  int i;
  // mon> mem af 02 ; mam[af] <- 02
  sscanf(string, " %*s %s %2x ", &(regname[0]), &content);

  key = -1;
  for(i=0;names[i]!=NULL;i++){
	if(strcmp(regname,names[i])==0){
	  key=i;
	  break;
	}
  }
  if(content!=-1){
	int2register(content, buffer_reg);
	switch(key)
	  {
	  case ACC:
		cp_register(buffer_reg, cpu->rega);
		break;
	  case ABRL:
		cp_register(buffer_reg, cpu->abrl);
		break;
	  case ABRH:
		cp_register(buffer_reg, cpu->abrh);
		break;
	  case DBR:
		cp_register(buffer_reg, cpu->dbr);
		break;
	  case IDX:
		cp_register(buffer_reg, cpu->regx);
		break;
	  case IDY:
		cp_register(buffer_reg, cpu->regy);
		break;
	  case PCL:
		cp_register(buffer_reg, cpu->pcl);
		break;
	  case PCH:
		cp_register(buffer_reg, cpu->pch);
		break;
	  case IR:
		cp_register(buffer_reg, cpu->ir);
		break;
	  case SP:
		cp_register(buffer_reg, cpu->sp);
		break;
	  default:
		break;
	  }
  }
  print_cpu(cpu);
  return 1;
}
Example #3
0
int go_cmd(struct _6510_cpu* cpu, char memory[][9], char* string){
  int adr = -1;
  sscanf(string, "%*s %4x ", &adr);
  printf("%s %4x ", string, adr);
  if(adr>MEMORY_SIZE || adr < 0){
    adr = 0;
  }
  int2register(adr & 0xff, cpu->pcl);
  int2register((adr>>8) & 0xff, cpu->pch);
  return 1;
}
Example #4
0
int memory_cmd(struct _6510_cpu* cpu, char memory[][9], char* string){
  int adr=-1;
  int content=-1;
  char reg[8+1];

  sscanf(string, "%*s %4x %2x ", &adr, &content);
  if(adr>MEMORY_SIZE || adr < 0){
    adr = 0;
  } 
  if(content!=-1){
    int2register(content,reg);
    cp_register(reg, memory[adr]);
  }
  print_memory_page0(memory, adr);
  return 1;
}
Example #5
0
//
// write random into mem[0xfe]
// used in www.6502asm.com simulation
//
void rnd_update(){
  if(randomptr){
    int2register(rand() % 0x100,randomptr);
  }
}
Example #6
0
//
// write random into mem[0xfe]
// visual tutorial example screen
//
void rnd_update(struct _6510_cpu* cpu, struct _vic* vic, char memory[][9]){
  int r = rand() % 0x100;
  int2register(r,memory[0x00fe]);
}