| 659 | |
| 660 | |
| 661 | void cHardwareGP8::PrintStatus(ostream& fp) |
| 662 | { |
| 663 | fp << "CPU CYCLE:" << m_organism->GetPhenotype().GetCPUCyclesUsed() << "." << m_cur_uop << " "; |
| 664 | fp << "THREAD:" << m_cur_thread << " "; |
| 665 | fp << "IP:" << getIP().Position() << " (" << GetInstSet().GetName(getIP().GetInst()) << ")" << endl; |
| 666 | |
| 667 | |
| 668 | for (int i = 0; i < NUM_REGISTERS; i++) { |
| 669 | DataValue& reg = m_threads[m_cur_thread].reg[i]; |
| 670 | fp << static_cast<char>('A' + i) << "X:" << reg.value << " "; |
| 671 | fp << setbase(16) << "[0x" << reg.value << "] " << setbase(10); |
| 672 | fp << "(" << reg.from_env << " " << reg.env_component << " " << reg.originated << " " << reg.oldest_component << ") "; |
| 673 | } |
| 674 | |
| 675 | // Add some extra information if additional time costs are used for instructions, |
| 676 | // leave this out if there are no differences to keep it cleaner |
| 677 | if ( m_organism->GetPhenotype().GetTimeUsed() != m_organism->GetPhenotype().GetCPUCyclesUsed() ) |
| 678 | { |
| 679 | fp << " EnergyUsed:" << m_organism->GetPhenotype().GetTimeUsed(); |
| 680 | } |
| 681 | fp << endl; |
| 682 | |
| 683 | fp << " R-Head:" << getHead(hREAD).Position() << " " |
| 684 | << "W-Head:" << getHead(hWRITE).Position() << " " |
| 685 | << "F-Head:" << getHead(hFLOW).Position() << " " |
| 686 | << "RL:" << GetReadLabel().AsString() << " " |
| 687 | << "Ex:" << m_last_output |
| 688 | << endl; |
| 689 | |
| 690 | int number_of_stacks = GetNumStacks(); |
| 691 | for (int stack_id = 0; stack_id < number_of_stacks; stack_id++) { |
| 692 | fp << ((m_threads[m_cur_thread].cur_stack == stack_id) ? '*' : ' ') << " Stack " << stack_id << ":" << setbase(16) << setfill('0'); |
| 693 | for (int i = 0; i < m_inst_set->GetStackSize(); i++) fp << " Ox" << setw(8) << GetStack(i, stack_id, 0); |
| 694 | fp << setfill(' ') << setbase(10) << endl; |
| 695 | } |
| 696 | |
| 697 | for (int i = 0; i < m_mem_array.GetSize(); i++) { |
| 698 | const cCPUMemory& mem = m_mem_array[i]; |
| 699 | fp << " Mem " << i << " (" << mem.GetSize() << "): " << mem.AsString() << endl; |
| 700 | } |
| 701 | |
| 702 | for (int i = 0; i < m_genes.GetSize(); i++) { |
| 703 | const cCPUMemory& mem = m_genes[i].memory; |
| 704 | fp << " Gene " << i << " (" << mem.GetSize() << "): " << mem.AsString() << endl; |
| 705 | } |
| 706 | |
| 707 | fp.flush(); |
| 708 | } |
| 709 | |
| 710 | void cHardwareGP8::SetupMiniTraceFileHeader(Avida::Output::File& df, const int gen_id, const Apto::String& genotype) |
| 711 | { |
no test coverage detected