Como alterar a velocidade do clock do PC para programas individuais?

2

Temos alguns programas mais antigos (sem código fonte) que rodam muito rápido em CPUs com velocidades de clock mais rápidas. Eu estou supondo que eles foram escritos usando atrasos de software ('X' número de instruções da CPU por loop) - em vez de pausas e temporizadores de hardware. Em novos PCs, esses aplicativos não aguardam mais tempo suficiente para que os eventos ocorram; então eles não funcionam mais. Não podemos alterar os aplicativos. Por isso, estamos tentando descobrir como fazê-los acreditar que estão sendo executados em uma velocidade de clock menor.

Eu escrevi um aplicativo que consome o tempo do processador em um PC ... reduzindo efetivamente o ritmo de execução desses aplicativos antigos. Mas essa "solução" afeta todos os programas no PC - (e interação do usuário, etc.).

Encontrei alguns produtos de "desaceleração de programas" que são capazes de atingir executáveis individuais - (Mo'Slo e Asoftech Speeder). Eles NÃO afetam o sistema como um todo - apenas os aplicativos segmentados individualmente. Na verdade, cada aplicativo pode ver uma velocidade de clock diferente. Mas é proibitivo o custo de comprar assentos suficientes desses produtos para o número de usuários que temos.

(FYI ... Os jogadores usam esses produtos para diminuir a velocidade de clock de jogos mais antigos, para que eles sejam executados corretamente em processadores novos e mais rápidos).

Gostaria de saber se alguém pode explicar como esses produtos podem afetar as velocidades de clock que os aplicativos individuais veem?

Seria melhor sempre dizer a um aplicativo que ele vê uma velocidade absoluta de clock de 'N' - (execute App1 em 'N' MHz). Mas também seria útil se tudo o que podemos fazer é dizer a um aplicativo que ele vê 'N'% da velocidade de clock do PC host - (execute App2 a 30% da velocidade do clock do host).

Eu posso codificá-lo se puder descobrir como isso é feito.

    
por Journeyman Geek 30.12.2011 / 11:01

2 respostas

0

Se você puder determinar a API que os jogos estão usando para contar os tiques, talvez seja possível aplicar um gancho para desviar a API do programa em questão. No entanto, sem detalhes específicos da plataforma, isso é apenas conjectura.

Por exemplo, nas janelas, ao rodar programas de 16 bits, eu escrevi alguns thunks assembler que interceptavam chamadas api (DOS) e os desviavam para o meu próprio código, fazendo algo diferente do que o windows fornecia.

Editar: Você pode usar tecnologia de virtualização como o QEMU para controlar a CPU enviada para o aplicativo?

    
por 30.12.2011 / 11:05
0

Considerando a idade do software que não usa as instruções de parada, presumo que elas sejam executadas em dos e uma opção seria seja para executá-los no DOSBox, que tem uma uma opção para retardar o software . Seu FOSS, então você provavelmente pode espiar o código.

    
por 01.01.2012 / 04:29