package org.jpc.emulator.processor; import java.util.*; public final class State { public static void print(Processor cpu) { StringBuilder builder = new StringBuilder(8192); Formatter formatter=new Formatter(builder); registersImpl(cpu, formatter); segmentsImpl(cpu, formatter); //extrasImpl(cpu, formatter); System.out.flush(); System.err.println(builder); } private static void extrasImpl(Processor cpu, Formatter formatter) { formatter.format("[%8s] \n" ,"ticks" ); extrasOnly(cpu, formatter); } private static void registersImpl(Processor cpu, Formatter formatter) { formatter.format("[%8s] [%8s] [%8s] [%8s] [%8s] [%8s] [%8s] [%8s] [%8s] [%8s]\n" ,"eax" ,"ebx" ,"ecx" ,"edx" ,"esi" ,"edi" ,"ebp" ,"esp" ,"eip" ,"oszapc" ); registersOnly(cpu, formatter); } private static void segmentsImpl(Processor cpu, Formatter formatter) { formatter.format("[%4s] [%4s] [%4s] [%4s] [%4s] [%4s]\n" ,"cs" ,"ds" ,"es" ,"fs" ,"gs" ,"ss" ); segmentsOnly(cpu, formatter); } private static void extrasOnly(Processor cpu, Formatter formatter) { formatter.format("[%8X] \n" ,0 ); } private static void registersOnly(Processor cpu, Formatter formatter) { int flags=cpu.getEFlags(); formatter.format("[%8X] [%8X] [%8X] [%8X] [%8X] [%8X] [%8X] [%8X] [%8X] [%08X]\n" ,cpu.r_eax.get32() ,cpu.r_ebx.get32() ,cpu.r_ecx.get32() ,cpu.r_edx.get32() ,cpu.r_esi.get32() ,cpu.r_edi.get32() ,cpu.r_ebp.get32() ,cpu.r_esp.get32() ,cpu.eip ,flags ); } private static void segmentsOnly(Processor cpu, Formatter formatter) { int flags=cpu.getEFlags(); formatter.format("[%4X] [%4X] [%4X] [%4X] [%4X] [%4X]\n" ,cpu.cs.getSelector()&0xFFFF ,cpu.ds.getSelector()&0xFFFF ,cpu.es.getSelector()&0xFFFF ,cpu.fs.getSelector()&0xFFFF ,cpu.gs.getSelector()&0xFFFF ,cpu.ss.getSelector()&0xFFFF ); } }