// ######## ## ## ######## ###### // ## ## ## ## ## ## // ## ## ## ## ## // ###### ### ###### ## // ## ## ## ## ## // ## ## ## ## ## ## // ######## ## ## ######## ###### // 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; }
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; }
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; }
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; }
// // write random into mem[0xfe] // used in www.6502asm.com simulation // void rnd_update(){ if(randomptr){ int2register(rand() % 0x100,randomptr); } }
// // 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]); }