Hora da velharia: programação para consoles antigos

1. Hora da velharia: programação para consoles antigos

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 06/12/2022 - 18:43h

Olá,

Eu tava pensando em criar um jogo para um console antigo, pra testar um certo algoritmo de detecção de colisão.
Mas me deparei com a falta do tipo "float/double" ou melhor, no console de 8 bits dos anos 80, não existe FPU.
No caso, o console é o NES ou no máximo SNES.

O que eu faço com isso? Como posso ter valores float num console tão velho?

No caso, não importa a velocidade ou o peso em mais processamento pra se ter tal tipo, porque o que vou fazer com float é algo muito pequeno dentro do código, mas que é altamente necessário.
No caso é executar um pequeno multilayer perceptron pré-treinado antes e inserido no código C do jogo.

Eu tava vendo que no NES é possível usar tipos de até 2 bytes via int16_t, no compilador que vou usar.

Como que eu lido com isso? Alguma ideia?

https://nerdki.blogspot.com/ acessa ai, é grátis


  


2. Re: Hora da velharia: programação para consoles antigos

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 06/12/2022 - 20:24h

Achei uma lib prontinha aqui:
https://github.com/mrdudz/cc65-floatlib
Mas se alguém mais quiser falar algo, fique a vontade.



https://nerdki.blogspot.com/ acessa ai, é grátis


3. Re: Hora da velharia: programação para consoles antigos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/12/2022 - 23:34h

Precisa de ser ponto flutuante, ou basta ser capaz de possuir uma parte fracionária? A pergunta é porque se você não precisar de todas as características de um número de PF, uma possibilidade seria usar uma representação de ponto fixo.

Curiosamente, eu assisti a um vídeo sobre isso recentemente. Vou ver se acho no histórico do YouTube.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


4. Re: Hora da velharia: programação para consoles antigos

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 06/12/2022 - 23:53h

paulo1205 escreveu:

Precisa de ser ponto flutuante, ou basta ser capaz de possuir uma parte fracionária? A pergunta é porque se você não precisar de todas as características de um número de PF, uma possibilidade seria usar uma representação de ponto fixo.

Curiosamente, eu assisti a um vídeo sobre isso recentemente. Vou ver se acho no histórico do YouTube.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)

E ai Paulo, eu só preciso que tenha parte fracionária ( e inteira), tipo, parte fracionária um número com 4 ou 5 casas decimais tá de bom tamanho.
Fora que, preciso de operações aritméticas simples: / * + - Além disso, não preciso mais nada.

A parte inteira eu creio que um número de 0 atpe 255 serve, já que é apenas para somar no final do programa.

https://nerdki.blogspot.com/ acessa ai, é grátis


5. Re: Hora da velharia: programação para consoles antigos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/12/2022 - 00:30h

Não é exatamente sobre ponto fixo, mas dá para ter uma ideia da técnica. E ele só pôde usar uma multiplicação por valor constante porque o programa dele originalmente tinha uma divisão por constante. Sem ser constante, não vejo como fugir do algoritmo de divisão longa.

https://youtu.be/ssDBqQ5f5_0


Usando uma notação de ponto fixo tendo 1/256 como seu epsilon, com dois bytes você poderia contar de 0 a 65535/256, com uma representação em que o byte mais significativo contaria os inteiros (de 0 a 255), e o byte menos significativo conteria a quantidade (0 a 255) de 256-avos. Se você já tiver um algoritmo de divisão inteira com 16 bits pronto, bastaria trocar sua unidade de medição de unidade para 256-avo.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


6. Re: Hora da velharia: programação para consoles antigos

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 07/12/2022 - 10:06h


paulo1205 escreveu:

Não é exatamente sobre ponto fixo, mas dá para ter uma ideia da técnica. E ele só pôde usar uma multiplicação por valor constante porque o programa dele originalmente tinha uma divisão por constante. Sem ser constante, não vejo como fugir do algoritmo de divisão longa.

https://youtu.be/ssDBqQ5f5_0


Usando uma notação de ponto fixo tendo 1/256 como seu epsilon, com dois bytes você poderia contar de 0 a 65535/256, com uma representação em que o byte mais significativo contaria os inteiros (de 0 a 255), e o byte menos significativo conteria a quantidade (0 a 255) de 256-avos. Se você já tiver um algoritmo de divisão inteira com 16 bits pronto, bastaria trocar sua unidade de medição de unidade para 256-avo.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)

Paulo, eu entendi o que tem no vídeo e o que tu falou, porém, não tô conseguindo visualizar um algoritmo porque isso é muito novo pra mim.
Mais tarde vou programar e ai as dúvidas que surgirem virei aqui te perguntar. Tava vendo aqui que minha dificuldade maior será apenas com negativos e complemento de 2 para eles, já que não conheço isso. Mas vou continuar pesquisando.

De qualquer forma, obrigado.

https://nerdki.blogspot.com/ acessa ai, é grátis






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts