Compare commits
3 Commits
290040d945
...
10b41dfef0
Author | SHA1 | Date |
---|---|---|
Hugo Carvalho | 10b41dfef0 | |
zilmar | 98b1bddc64 | |
zilmar | 97ec1f533b |
|
@ -1,19 +1,19 @@
|
||||||
// Meta information
|
// Meta information
|
||||||
#1 # "Português" // Language ID
|
#1 # "Português (Portugal)" // Language ID
|
||||||
#2 # "Hugo Carvalho" // Author
|
#2 # "Hugo Carvalho" // Author
|
||||||
#3 # "3.0" // Version
|
#3 # "3.0.1" // Version
|
||||||
#4 # "Novembro, 2022" // Date
|
#4 # "06 de março de 2024" // Date
|
||||||
|
|
||||||
/*** Menu ***/
|
/*** Menu ***/
|
||||||
|
|
||||||
// File menu
|
// File menu
|
||||||
#100# "&Ficheiro"
|
#100# "&Ficheiro"
|
||||||
#101# "&Abrir a ROM"
|
#101# "&Abrir ROM"
|
||||||
#102# "Informação &da ROM..."
|
#102# "Informação &da ROM..."
|
||||||
#103# "Iniciar a emulação"
|
#103# "Iniciar emulação"
|
||||||
#104# "&Terminar a emulação"
|
#104# "&Encerrar emulação"
|
||||||
#105# "Escolher o directório das ROMs..."
|
#105# "Escolher o directório das ROMs..."
|
||||||
#106# "Actualizar a lista das ROMs"
|
#106# "Actualizar lista das ROMs"
|
||||||
#107# "ROMs recentes"
|
#107# "ROMs recentes"
|
||||||
#108# "Directórios das ROMs recentes"
|
#108# "Directórios das ROMs recentes"
|
||||||
#109# "S&air"
|
#109# "S&air"
|
||||||
|
@ -22,19 +22,19 @@
|
||||||
// System menu
|
// System menu
|
||||||
#120# "&Sistema"
|
#120# "&Sistema"
|
||||||
#121# "&Reiniciar"
|
#121# "&Reiniciar"
|
||||||
#122# "&Colocar em pausa"
|
#122# "&Pausa"
|
||||||
#123# "Captura de ecrã"
|
#123# "Captura de ecrã"
|
||||||
#124# "Limitar o FPS"
|
#124# "Limitar FPS"
|
||||||
#125# "&Gravar"
|
#125# "&Gravar"
|
||||||
#126# "Gravar como..."
|
#126# "Gravar como..."
|
||||||
#127# "&Carregar o estado"
|
#127# "&Carregar estado"
|
||||||
#128# "Carregar..."
|
#128# "Carregar..."
|
||||||
#129# "Gravar o estado a&tual"
|
#129# "Gravar estado ac&tual"
|
||||||
#130# "&Batotas..."
|
#130# "&Batotas..."
|
||||||
#131# "Botão GS"
|
#131# "Botão GS"
|
||||||
#132# "R&etomar"
|
#132# "R&etomar"
|
||||||
#133# "&Reiniciar leve"
|
#133# "&Reinício leve"
|
||||||
#134# "&Reiniciar forçado"
|
#134# "&Reinício forçado"
|
||||||
#135# "Trocar &disco"
|
#135# "Trocar &disco"
|
||||||
#136# "&Melhorias..."
|
#136# "&Melhorias..."
|
||||||
|
|
||||||
|
@ -42,9 +42,9 @@
|
||||||
#140# "&Opções"
|
#140# "&Opções"
|
||||||
#141# "&Ecrã inteiro"
|
#141# "&Ecrã inteiro"
|
||||||
#142# "Sempre na &frente"
|
#142# "Sempre na &frente"
|
||||||
#143# "&Definições dos Gráficos"
|
#143# "&Definições dos gráficos"
|
||||||
#144# "&Definições do Áudio"
|
#144# "&Definições do áudio"
|
||||||
#145# "&Definições do Controlador"
|
#145# "&Definições do controlador"
|
||||||
#146# "&Definições do RSP"
|
#146# "&Definições do RSP"
|
||||||
#147# "Mostrar as estatísticas da &CPU"
|
#147# "Mostrar as estatísticas da &CPU"
|
||||||
#148# "Defini&ções..."
|
#148# "Defini&ções..."
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
// Help menu
|
// Help menu
|
||||||
#180# "&Ajuda"
|
#180# "&Ajuda"
|
||||||
#182# "&Acerca do Project 64"
|
#182# "&Acerca do Project 64"
|
||||||
#184# "&Site da Web"
|
#184# "&Página da Web"
|
||||||
#185# "&Apoiar o Project64"
|
#185# "&Apoiar o Project64"
|
||||||
#186# "&Discord"
|
#186# "&Discord"
|
||||||
|
|
||||||
|
@ -74,14 +74,14 @@
|
||||||
#198# "Compartimento 8"
|
#198# "Compartimento 8"
|
||||||
#199# "Compartimento 9"
|
#199# "Compartimento 9"
|
||||||
#200# "Compartimento 10"
|
#200# "Compartimento 10"
|
||||||
#201# "Compartimento de gravação (%ws) seleccionado"
|
#201# "Compartimento (%ws) seleccionado"
|
||||||
|
|
||||||
// Pop-up menu
|
// Pop-up menu
|
||||||
#210# "Jogar o jogo"
|
#210# "Jogar o jogo"
|
||||||
#211# "Informação da ROM"
|
#211# "Informações da ROM"
|
||||||
#212# "Editar as definições do jogo"
|
#212# "Editar definições do jogo"
|
||||||
#213# "Editar as batotas..."
|
#213# "Editar batotas..."
|
||||||
#214# "Plugin dos Gráficos"
|
#214# "Plugin de gráficos"
|
||||||
#215# "Jogar o jogo com o disco"
|
#215# "Jogar o jogo com o disco"
|
||||||
#216# "Escolher melhorias..."
|
#216# "Escolher melhorias..."
|
||||||
|
|
||||||
|
@ -100,18 +100,18 @@
|
||||||
|
|
||||||
// Menu descriptions
|
// Menu descriptions
|
||||||
#250# "Abrir uma imagem ROM do N64"
|
#250# "Abrir uma imagem ROM do N64"
|
||||||
#251# "Mostrar informação sobre a imagem carregada"
|
#251# "Mostrar informações sobre a imagem carregada"
|
||||||
#252# "Iniciar a emulação da imagem ROM carregada"
|
#252# "Iniciar emulação da imagem ROM carregada"
|
||||||
#253# "Parar a emulação da imagem ROM carregada"
|
#253# "Parar emulação da imagem ROM carregada"
|
||||||
#254# "Seleccionar o directório das ROMs"
|
#254# "Seleccionar o directório das ROMs"
|
||||||
#255# "Actualizar a lista das ROMs actuais no explorador de ROMs"
|
#255# "Actualizar a lista actual das ROMs no explorador de ROMs"
|
||||||
#256# "Sair desta aplicação"
|
#256# "Sair da aplicação"
|
||||||
#257# "Reiniciar a imagem ROM actual (recarregar quaisquer alterações nas definições)"
|
#257# "Reiniciar imagem da ROM actual (recarregar quaisquer alterações nas definições)"
|
||||||
#258# "Interromper/retomar a emulação da ROM actual em execução"
|
#258# "Interromper/retomar a emulação da ROM actual em execução"
|
||||||
#259# "Gerar uma imagem bitmap do ecrã actual"
|
#259# "Gerar uma imagem bitmap do ecrã actual"
|
||||||
#260# "Limitar o FPS para a velocidade correta do N64"
|
#260# "Limitar o FPS para a velocidade correta do N64"
|
||||||
#261# "Gravar o estado do sistema actual"
|
#261# "Gravar o estado actual do sistema"
|
||||||
#262# "Gravar o estado do sistema actual num local seleccionado para o ficheiro"
|
#262# "Gravar o estado actual do sistema num local seleccionado para o ficheiro"
|
||||||
#263# "Carregar o estado gravado do sistema"
|
#263# "Carregar o estado gravado do sistema"
|
||||||
#264# "Escolher um ficheiro do estado gravado do sistema para carregar"
|
#264# "Escolher um ficheiro do estado gravado do sistema para carregar"
|
||||||
#265# "Activar/Desactivar as batotas do Gameshark"
|
#265# "Activar/Desactivar as batotas do Gameshark"
|
||||||
|
@ -125,15 +125,15 @@
|
||||||
#273# "Mostrar a utilização da CPU pelo emulador dividida sobre recursos diferentes"
|
#273# "Mostrar a utilização da CPU pelo emulador dividida sobre recursos diferentes"
|
||||||
#274# "Visualizar/Alterar as definições para esta aplicação"
|
#274# "Visualizar/Alterar as definições para esta aplicação"
|
||||||
#275# "Visualizar o manual da aplicação"
|
#275# "Visualizar o manual da aplicação"
|
||||||
#276# "Visualizar as FAQ da aplicação"
|
#276# "Visualizar as perguntas frequentes da aplicação"
|
||||||
#278# "Acerca da aplicação e autores"
|
#278# "Acerca da aplicação e dos autores"
|
||||||
#277# "Acerca dos autores dos ficheiros de suporte"
|
#277# "Acerca dos autores dos ficheiros de suporte"
|
||||||
#279# "Abrir esta imagem ROM previamente aberta"
|
#279# "Abrir esta imagem ROM previamente aberta"
|
||||||
#280# "Escolher este directório como directório das ROMs"
|
#280# "Escolher este directório como directório das ROMs"
|
||||||
#281# "Alterar a aplicação para usar este idioma"
|
#281# "Alterar a aplicação para usar este idioma"
|
||||||
#282# "Escolha este local de gravação para o estado gravado"
|
#282# "Escolha este local de gravação para o estado gravado"
|
||||||
#283# "Jogar o jogo seleccionado"
|
#283# "Jogar o jogo seleccionado"
|
||||||
#284# "Informação sobre o jogo seleccionado"
|
#284# "Informações sobre o jogo seleccionado"
|
||||||
#285# "Editar as definições do jogo seleccionado"
|
#285# "Editar as definições do jogo seleccionado"
|
||||||
#286# "Editar as batotas do jogo seleccionado"
|
#286# "Editar as batotas do jogo seleccionado"
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
#302# "Boa reputação"
|
#302# "Boa reputação"
|
||||||
#303# "Estado"
|
#303# "Estado"
|
||||||
#304# "Tamanho da ROM"
|
#304# "Tamanho da ROM"
|
||||||
#305# "Notas (core)"
|
#305# "Notas (núcleo)"
|
||||||
#306# "Notas (plugins predefinidos)"
|
#306# "Notas (plugins predefinidos)"
|
||||||
#307# "Notas (utilizador)"
|
#307# "Notas (utilizador)"
|
||||||
#308# "ID do cartucho"
|
#308# "ID do cartucho"
|
||||||
|
@ -158,7 +158,7 @@
|
||||||
#315# "Data de lançamento"
|
#315# "Data de lançamento"
|
||||||
#316# "Género"
|
#316# "Género"
|
||||||
#317# "Jogadores"
|
#317# "Jogadores"
|
||||||
#318# "Forçar o Feedback"
|
#318# "Forçar Feedback"
|
||||||
#319# "Formato do ficheiro"
|
#319# "Formato do ficheiro"
|
||||||
#321# "Nome"
|
#321# "Nome"
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@
|
||||||
#320# "Seleccionar o directório actual das ROMs"
|
#320# "Seleccionar o directório actual das ROMs"
|
||||||
|
|
||||||
// Messages
|
// Messages
|
||||||
#340# "Má ROM? Usar o GoodN64 e verificar se a RDB está actualizada"
|
#340# "ROM corrompida? Use o GoodN64 e verifique se o RDB está actualizado"
|
||||||
|
|
||||||
/*** Options ***/
|
/*** Options ***/
|
||||||
|
|
||||||
|
@ -184,19 +184,19 @@
|
||||||
#409# "Teclas de atalho"
|
#409# "Teclas de atalho"
|
||||||
#410# "Estado"
|
#410# "Estado"
|
||||||
#411# "Recompilador"
|
#411# "Recompilador"
|
||||||
#412# "Padrões"
|
#412# "Predefinições"
|
||||||
#413# "64DD"
|
#413# "64DD"
|
||||||
#414# "64DD"
|
#414# "64DD"
|
||||||
|
|
||||||
// Plugin dialog
|
// Plugin dialog
|
||||||
#420# "Acerca"
|
#420# "Acerca"
|
||||||
#421# " Plugin RSP (Processador do Sinal da Realidade): "
|
#421# " Plugin RSP (Processador do Sinal da Realidade): "
|
||||||
#422# " Plugin de Vídeo (gráficos): "
|
#422# " Plugin de vídeo (gráficos): "
|
||||||
#423# " Plugin de Áudio (som): "
|
#423# " Plugin de áudio (som): "
|
||||||
#424# " Plugin do Controlador (controlador): "
|
#424# " Plugin de entrada (controlador): "
|
||||||
#425# "Gráficos HLE"
|
#425# "Gráficos HLE"
|
||||||
#426# "Áudio HLE"
|
#426# "Áudio HLE"
|
||||||
#427# "** Usar o Plugin do Sistema **"
|
#427# "** Usar plugin do sistema **"
|
||||||
|
|
||||||
// Directory dialog
|
// Directory dialog
|
||||||
#440# " Directório dos plugins: "
|
#440# " Directório dos plugins: "
|
||||||
|
@ -216,26 +216,26 @@
|
||||||
// Options (general) tab
|
// Options (general) tab
|
||||||
#460# "Interromper a emulação quando a janela não está activa"
|
#460# "Interromper a emulação quando a janela não está activa"
|
||||||
#461# "Entrar no modo de ecrã inteiro quando carregar uma ROM"
|
#461# "Entrar no modo de ecrã inteiro quando carregar uma ROM"
|
||||||
#462# "Ocultar as definições avançadas"
|
#462# "Ocultar definições avançadas"
|
||||||
#463# "Memorizar as batotas seleccionadas"
|
#463# "Memorizar batotas seleccionadas"
|
||||||
#464# "Desactivar a protecção de ecrã quando executar uma ROM"
|
#464# "Desactivar protecção de ecrã quando executar uma ROM"
|
||||||
#465# "Mostrar a velocidade"
|
#465# "Mostrar velocidade"
|
||||||
#466# "Visor da velocidade:"
|
#466# "Velocidade do ecrã:"
|
||||||
#467# "Verificar se o Project64 já está em execução"
|
#467# "Verificar se o Project64 já está em execução"
|
||||||
#468# "Armazenar gravações do jogo em pastas separadas"
|
#468# "Armazenar gravações do jogo em pastas separadas"
|
||||||
#469# "Local da ROM 64DD IPL de retalho Japão:"
|
#469# "Localização da ROM 64DD IPL de retalho Japão:"
|
||||||
#470# "Local da ROM 64DD IPL de retalho América:"
|
#470# "Localização da ROM 64DD IPL de retalho América:"
|
||||||
#471# "Local da ROM 64DD IPL de desenvolvimento:"
|
#471# "Localização da ROM 64DD IPL de desenvolvimento:"
|
||||||
#472# "Tipo de gravação:"
|
#472# "Tipo de gravação no disco:"
|
||||||
#473# "Activar melhorias"
|
#473# "Activar melhorias"
|
||||||
#474# "Mostrar barra de estado"
|
#474# "Mostrar barra de estado"
|
||||||
#475# "Sair do ecrã inteiro ao perder o foco"
|
#475# "Sair do ecrã inteiro ao perder o foco"
|
||||||
#476# "Activar Discord Rich Presence"
|
#476# "Activar Rich Presence do Discord"
|
||||||
|
|
||||||
// ROM browser tab
|
// ROM browser tab
|
||||||
#480# "Máx. # de ROMs memorizadas (0-10):"
|
#480# "Nº máximo # de ROMs memorizadas (0-10):"
|
||||||
#481# "ROMs"
|
#481# "ROMs"
|
||||||
#482# "Máx. # de dirs ROMs memorizados (0-10):"
|
#482# "Nº máximo # de directórios de ROMs memorizados (0-10):"
|
||||||
#483# "Directórios"
|
#483# "Directórios"
|
||||||
#484# "Usar explorador de ROMs"
|
#484# "Usar explorador de ROMs"
|
||||||
#485# "Usar repetição de directório"
|
#485# "Usar repetição de directório"
|
||||||
|
@ -243,21 +243,21 @@
|
||||||
#487# "Ordem dos campos:"
|
#487# "Ordem dos campos:"
|
||||||
#488# "Adicionar ->"
|
#488# "Adicionar ->"
|
||||||
#489# "<- Remover"
|
#489# "<- Remover"
|
||||||
#490# "Acima"
|
#490# "P/ cima"
|
||||||
#491# "Abaixo"
|
#491# "P/ baixo"
|
||||||
#492# "Recarregar o explorador automaticamente"
|
#492# "Recarregar o explorador automaticamente"
|
||||||
#493# "Mostrar extensão dos ficheiros"
|
#493# "Mostrar extensão dos ficheiros"
|
||||||
|
|
||||||
// Advanced options
|
// Advanced options
|
||||||
#500# "A maioria destas alterações não terão efeito até que uma nova ROM seja aberta ou que a ROM actual seja reposta."
|
#500# "A maioria destas alterações não terão efeito até que uma nova ROM seja aberta ou que a ROM actual seja reposta."
|
||||||
#501# "Padrões do core"
|
#501# "Predefinições do núcleo"
|
||||||
#502# "Estilo do core da CPU:"
|
#502# "Estilo do núcleo da CPU:"
|
||||||
#503# "Métodos de auto-modificação"
|
#503# "Métodos de modificação automática"
|
||||||
#504# "Tamanho predefinido da memória:"
|
#504# "Tamanho predefinido da memória:"
|
||||||
#505# "Ligação avançada de blocos"
|
#505# "Ligação avançada dos blocos"
|
||||||
#506# "Iniciar a emulação quando a ROM está aberta"
|
#506# "Iniciar a emulação quando a ROM for aberta"
|
||||||
#507# "Substituir sempre as definições predefinidas com as do RDB"
|
#507# "Substituir sempre as definições predefinidas com as do RDB"
|
||||||
#508# "Comprimir automaticamente os estados gravados"
|
#508# "Comprimir os estados gravados automaticamente"
|
||||||
#509# "Activar depurador"
|
#509# "Activar depurador"
|
||||||
#510# "Cache"
|
#510# "Cache"
|
||||||
#511# "DMA do PI"
|
#511# "DMA do PI"
|
||||||
|
@ -272,11 +272,11 @@
|
||||||
#522# "Tamanho da memória:"
|
#522# "Tamanho da memória:"
|
||||||
#523# "Ligação avançada dos blocos"
|
#523# "Ligação avançada dos blocos"
|
||||||
#524# "Tipo da gravação predefinida:"
|
#524# "Tipo da gravação predefinida:"
|
||||||
#525# "Contra fator:"
|
#525# "Contrafator:"
|
||||||
#526# "Buffer de compilação maior"
|
#526# "Buffer de compilação maior"
|
||||||
#528# "Caching de registo"
|
#528# "Registar armazenamento em cache"
|
||||||
#529# "Atrasar a interrupção do SI"
|
#529# "Atrasar a interrupção do SI"
|
||||||
#530# "SP Rápido"
|
#530# "SP rápido"
|
||||||
#531# "Predefinido"
|
#531# "Predefinido"
|
||||||
#532# "Sinal de áudio do RSP"
|
#532# "Sinal de áudio do RSP"
|
||||||
#533# "Temporização do áudio fixo"
|
#533# "Temporização do áudio fixo"
|
||||||
|
@ -284,14 +284,17 @@
|
||||||
#535# "Método de auto-modificação personalizado"
|
#535# "Método de auto-modificação personalizado"
|
||||||
#536# "Sincronizar usando o áudio"
|
#536# "Sincronizar usando o áudio"
|
||||||
#537# "Contagem de AIs por byte:"
|
#537# "Contagem de AIs por byte:"
|
||||||
#538# "Engine de 32 bits"
|
#538# "Mecanismo de 32 bits"
|
||||||
#539# "Atrasar a interrupção do DP"
|
#539# "Atrasar a interrupção do DP"
|
||||||
#5400# "Modificador overclock:"
|
#5400# "Modificador de overclock:"
|
||||||
#5410# "DMA desalinhado"
|
#5410# "DMA desalinhado"
|
||||||
#5420# "Aleatorizar as interrupções SI/PI"
|
#5420# "Aleatorizar as interrupções SI/PI"
|
||||||
#5440# "Tempo de busca em disco:"
|
#5440# "Tempo de busca no disco:"
|
||||||
#5441# "Turbo"
|
#5441# "Turbo"
|
||||||
#5442# "Lento"
|
#5442# "Lento"
|
||||||
|
#5443# "Tamanho da memória (conhecido):"
|
||||||
|
#5444# "Tamanho da memória (desconhecido):"
|
||||||
|
#5445# "Cache do registo do FPU"
|
||||||
|
|
||||||
// Core styles
|
// Core styles
|
||||||
#540# "Interpretador"
|
#540# "Interpretador"
|
||||||
|
@ -301,11 +304,11 @@
|
||||||
// Self-mod methods
|
// Self-mod methods
|
||||||
#560# "Nenhum"
|
#560# "Nenhum"
|
||||||
#561# "Cache"
|
#561# "Cache"
|
||||||
#562# "Proteger a memória"
|
#562# "Proteger memória"
|
||||||
#563# "Verificar a memória e cache"
|
#563# "Verificar memória e cache"
|
||||||
#564# "Alterar a memória e cache"
|
#564# "Alterar memória e cache"
|
||||||
#565# "Verificar o avanço da memória"
|
#565# "Verificar avanço da memória"
|
||||||
#566# "Limpar o código no cache"
|
#566# "Limpar código no cache"
|
||||||
|
|
||||||
// Function lookup method
|
// Function lookup method
|
||||||
#570# "Tabela de procura física"
|
#570# "Tabela de procura física"
|
||||||
|
@ -313,8 +316,8 @@
|
||||||
#572# "Alterar memória"
|
#572# "Alterar memória"
|
||||||
|
|
||||||
// RDRAM size
|
// RDRAM size
|
||||||
#580# "4 MBs"
|
#580# "4 MB"
|
||||||
#581# "8 MBs"
|
#581# "8 MB"
|
||||||
|
|
||||||
// Advanced block linking
|
// Advanced block linking
|
||||||
#600# "Ligado"
|
#600# "Ligado"
|
||||||
|
@ -338,7 +341,7 @@
|
||||||
#682# "Teclas actuais:"
|
#682# "Teclas actuais:"
|
||||||
#683# "Seleccionar nova tecla de atalho:"
|
#683# "Seleccionar nova tecla de atalho:"
|
||||||
#684# "Actualmente atribuído a:"
|
#684# "Actualmente atribuído a:"
|
||||||
#685# "Designar"
|
#685# "Atribuir"
|
||||||
#686# "Remover"
|
#686# "Remover"
|
||||||
#687# "Repor tudo"
|
#687# "Repor tudo"
|
||||||
#688# "O jogo não está em execução"
|
#688# "O jogo não está em execução"
|
||||||
|
@ -369,7 +372,7 @@
|
||||||
/*** ROM information ***/
|
/*** ROM information ***/
|
||||||
|
|
||||||
// ROM info title
|
// ROM info title
|
||||||
#800# "Informação da ROM"
|
#800# "Informações da ROM"
|
||||||
|
|
||||||
// ROM info text
|
// ROM info text
|
||||||
#801# "Nome da ROM:"
|
#801# "Nome da ROM:"
|
||||||
|
@ -410,7 +413,7 @@
|
||||||
|
|
||||||
// Digital value
|
// Digital value
|
||||||
#1016# "Dígito da quantidade"
|
#1016# "Dígito da quantidade"
|
||||||
#1017# "Escolha um valor pra:"
|
#1017# "Escolha um valor para:"
|
||||||
#1018# "&Valor"
|
#1018# "&Valor"
|
||||||
#1019# "de"
|
#1019# "de"
|
||||||
#1020# "até"
|
#1020# "até"
|
||||||
|
@ -422,9 +425,9 @@
|
||||||
#1026# "<valor> <rótulo>"
|
#1026# "<valor> <rótulo>"
|
||||||
|
|
||||||
// Edit cheat
|
// Edit cheat
|
||||||
#1027# "Editar a batota"
|
#1027# "Editar batota"
|
||||||
#1028# "Actualizar a batota"
|
#1028# "Actualizar batota"
|
||||||
#1029# "A batota foi alterada.\n\nDeseja actualizar?"
|
#1029# "A batota foi alterada.\n\nPretende actualizar?"
|
||||||
#1030# "Batota actualizada"
|
#1030# "Batota actualizada"
|
||||||
|
|
||||||
// Cheat pop-up menu
|
// Cheat pop-up menu
|
||||||
|
@ -443,7 +446,7 @@
|
||||||
/*** Support window ***/
|
/*** Support window ***/
|
||||||
|
|
||||||
#1200# "Apoiar o Project64"
|
#1200# "Apoiar o Project64"
|
||||||
#1201# "O Project64 é um emulador de Nintendo64 gratuito e de código aberto.\n\nEste permite-lhe reproduzir o software N64 da mesma forma que o seria na consola original.\n\nLamento o incómodo deste aviso mas pede-se-lhe que aguarde alguns segundos para poder desfrutar do resultado de centenas de horas de trabalho.\n\nSe pode e gostaria de apoiar o Project64 ou se obteve algum valor com ele, apoie o Project64 como um agradecimento ou como o seu desejo de remover este aviso.\n\nSe apoiou o Project64:"
|
#1201# "O Project64 é um emulador de Nintendo 64 gratuito e de código aberto.\n\nEste permite-lhe reproduzir o software N64 da mesma forma que o seria na consola original.\n\nLamento o incómodo deste aviso mas pede-se-lhe que aguarde alguns segundos para poder desfrutar do resultado de centenas de horas de trabalho.\n\nSe pode e gostaria de apoiar o Project64 ou se obteve algum valor com ele, apoie o Project64 como um agradecimento ou como o seu desejo de remover este aviso.\n\nSe apoiou o Project64:"
|
||||||
#1202# "Inserir/Requisitar o código de notificação"
|
#1202# "Inserir/Requisitar o código de notificação"
|
||||||
#1203# "Apoiar o Project64"
|
#1203# "Apoiar o Project64"
|
||||||
#1204# "Continuar"
|
#1204# "Continuar"
|
||||||
|
@ -451,12 +454,12 @@
|
||||||
#1206# "Falha ao validar o código\n\nCertifique-se de que o código no e-mail corresponde com base no seu dispositivo"
|
#1206# "Falha ao validar o código\n\nCertifique-se de que o código no e-mail corresponde com base no seu dispositivo"
|
||||||
#1207# "Obrigado"
|
#1207# "Obrigado"
|
||||||
#1208# "Insira o código de apoio"
|
#1208# "Insira o código de apoio"
|
||||||
#1209# "Insira o código que recebeu no e-mail.\n\nEste e-mail será enviado para o endereço de e-mail usado para apoiar o Project64.\n\nNote-se que o código só funcionará para um único dispositivo. A identificação deste dispositivo é:"
|
#1209# "Insira o código recebido por e-mail.\n\nEste e-mail será enviado para o endereço de e-mail usado para apoiar o Project64.\n\nNote que o código só funcionará para um único dispositivo. A identificação deste dispositivo é:"
|
||||||
#1210# "Aceitar"
|
#1210# "Aceitar"
|
||||||
#1211# "Cancelar"
|
#1211# "Cancelar"
|
||||||
#1212# "Requisitar código"
|
#1212# "Solicitar código"
|
||||||
#1213# "O código foi enviado para o seu e-mail"
|
#1213# "O código foi enviado para o seu e-mail"
|
||||||
#1214# "Falha no envio do código, certifique-se de que é o e-mail com o qual apoiou"
|
#1214# "Falha ao enviar o código. Certifique-se de que o e-mail está correcto"
|
||||||
|
|
||||||
/*** Enhancements ***/
|
/*** Enhancements ***/
|
||||||
|
|
||||||
|
@ -466,8 +469,8 @@
|
||||||
|
|
||||||
#2000# "*** CPU EM PAUSA ***"
|
#2000# "*** CPU EM PAUSA ***"
|
||||||
#2001# "CPU retomada"
|
#2001# "CPU retomada"
|
||||||
#2002# "Num ciclo permanente do qual não se pode sair.\nA emulação vai agora parar.\n\nVerifique a ROM e as suas definições."
|
#2002# "Num ciclo permanente do qual não se pode sair.\nA emulação será interrompida agora.\n\nVerifique a ROM e as suas definições."
|
||||||
#2003# "Falha na atribuição de memória"
|
#2003# "Falha ao atribuir a memória"
|
||||||
#2004# "O plugin de vídeo predefinido ou seleccionado está em falta ou é inválido.\n\nTem de ir a Definições e seleccionar um plugin de vídeo (gráficos).\nVerifique se tem pelo menos um ficheiro de plugin compatível na sua pasta de plugins."
|
#2004# "O plugin de vídeo predefinido ou seleccionado está em falta ou é inválido.\n\nTem de ir a Definições e seleccionar um plugin de vídeo (gráficos).\nVerifique se tem pelo menos um ficheiro de plugin compatível na sua pasta de plugins."
|
||||||
#2005# "O plugin de áudio predefinido ou seleccionado está em falta ou é inválido.\n\nTem de ir a Definições e seleccionar um plugin de áudio (som).\nVerifique se tem pelo menos um ficheiro de plugin compatível na sua pasta de plugins."
|
#2005# "O plugin de áudio predefinido ou seleccionado está em falta ou é inválido.\n\nTem de ir a Definições e seleccionar um plugin de áudio (som).\nVerifique se tem pelo menos um ficheiro de plugin compatível na sua pasta de plugins."
|
||||||
#2006# "O plugin RSP predefinido ou seleccionado está em falta ou é inválido.\n\nTem de ir a Definições e seleccionar um plugin RSP (Processador do Sinal de Realidade).\nVerifique se tem pelo menos um ficheiro de plugin compatível na sua pasta de plugins."
|
#2006# "O plugin RSP predefinido ou seleccionado está em falta ou é inválido.\n\nTem de ir a Definições e seleccionar um plugin RSP (Processador do Sinal de Realidade).\nVerifique se tem pelo menos um ficheiro de plugin compatível na sua pasta de plugins."
|
||||||
|
@ -476,7 +479,7 @@
|
||||||
#2009# "Falha ao carregar a palavra.\n\Verifique a ROM e as suas definições."
|
#2009# "Falha ao carregar a palavra.\n\Verifique a ROM e as suas definições."
|
||||||
#2010# "Falha ao abrir o ficheiro gravado"
|
#2010# "Falha ao abrir o ficheiro gravado"
|
||||||
#2011# "Falha ao abrir o EEPROM"
|
#2011# "Falha ao abrir o EEPROM"
|
||||||
#2012# "Falha ao abrir a flash RAM"
|
#2012# "Falha ao abrir a RAM do flash"
|
||||||
#2013# "Falha ao abrir o mempak"
|
#2013# "Falha ao abrir o mempak"
|
||||||
#2014# "Falha ao tentar abrir o ficheiro zip.\n\nProvavelmente um ficheiro zip corrompido - tente descomprimir a ROM manualmente."
|
#2014# "Falha ao tentar abrir o ficheiro zip.\n\nProvavelmente um ficheiro zip corrompido - tente descomprimir a ROM manualmente."
|
||||||
#2015# "Falha ao tentar abrir o ficheiro."
|
#2015# "Falha ao tentar abrir o ficheiro."
|
||||||
|
@ -492,13 +495,13 @@
|
||||||
#2025# "Erro"
|
#2025# "Erro"
|
||||||
#2026# "Sequência de direitos de autor não encontrada no LUT. O jogo deixará de funcionar."
|
#2026# "Sequência de direitos de autor não encontrada no LUT. O jogo deixará de funcionar."
|
||||||
#2027# "Falha na protecção contra cópia"
|
#2027# "Falha na protecção contra cópia"
|
||||||
#2028# "Mudar um plugin requer que o Project64 reinicie uma ROM em execução.\nSe não quer perder o local responda Não e grave primeiro o estado actual.\n\nMudar os plugins e reiniciar a ROM agora?"
|
#2028# "Alterar um plugin requer que o Project64 reinicie uma ROM em execução.\nSe não quer perder o local responda Não e grave primeiro o estado actual.\n\nMudar os plugins e reiniciar a ROM agora?"
|
||||||
#2029# "Mudar os plugins"
|
#2029# "Alterar plugins"
|
||||||
#2030# "Emulação terminada"
|
#2030# "Emulação encerrada"
|
||||||
#2031# "Emulação iniciada"
|
#2031# "Emulação iniciada"
|
||||||
#2032# "Não foi possível carregar o estado"
|
#2032# "Não foi possível carregar o estado"
|
||||||
#2033# "Estado carregado"
|
#2033# "Estado carregado"
|
||||||
#2034# "Gravou o estado actual em"
|
#2034# "Estado actual gravado em"
|
||||||
#2035# "Compartimento do estado"
|
#2035# "Compartimento do estado"
|
||||||
#2036# "Imagem da troca dos bytes"
|
#2036# "Imagem da troca dos bytes"
|
||||||
#2037# "A escolher a imagem do N64"
|
#2037# "A escolher a imagem do N64"
|
||||||
|
@ -508,67 +511,71 @@
|
||||||
#2041# "Eliminar isto?"
|
#2041# "Eliminar isto?"
|
||||||
#2042# "Eliminar batota"
|
#2042# "Eliminar batota"
|
||||||
#2043# "O nome da batota já está em utilização."
|
#2043# "O nome da batota já está em utilização."
|
||||||
#2044# "Alcançou a quantia máxima de batotas para esta ROM."
|
#2044# "Alcançou o número máximo de batotas para esta ROM."
|
||||||
#2045# "Plugin a iniciar"
|
#2045# "Plugin a iniciar"
|
||||||
#2046# "Não seleccionou uma tecla virtual para designar ao item do menu."
|
#2046# "Não seleccionou uma tecla virtual para designar ao item do menu."
|
||||||
#2047# "É necessário seleccionar um item do menu para atribuir a esta tecla"
|
#2047# "É necessário seleccionar um item do menu para atribuir a esta tecla"
|
||||||
#2048# "O atalho foi designado a outro item do menu."
|
#2048# "O atalho foi designado a outro item do menu."
|
||||||
#2049# "Nenhum atalho foi seleccionado para ser removido."
|
#2049# "Nenhum atalho foi seleccionado para ser removido."
|
||||||
#2050# "ROM carregada. À espera que a emulação inicie."
|
#2050# "ROM carregada. A aguardar que a emulação inicie."
|
||||||
#2051# "As versões beta do Project64 são só pra membros.\n\nSe tem uma conta em www.pj64-emu.com não deveria estar a ver este erro!!\nContacte-nos no site."
|
#2051# "As versões beta do Project64 são só para membros.\n\nSe tem uma conta em www.pj64-emu.com não deveria estar a ver este erro!!\nContacte-nos no site."
|
||||||
#2052# "Erro do programa"
|
#2052# "Erro do programa"
|
||||||
#2053# "Falha ao localizar o nome do ficheiro no ficheiro 7z"
|
#2053# "Falha ao localizar o nome do ficheiro no ficheiro 7z"
|
||||||
#2054# "Emulação gráfica de baixo nível"
|
#2054# "Emulação gráfica de baixo nível"
|
||||||
#2055# "Os Gráficos LLE não são para o uso geral!!!\nÉ aconselhável que só o utilize para testes e não para jogar jogos.\n\nMudar pra gráficos LLE?"
|
#2055# "Os Gráficos LLE não são para o uso geral!!!\nÉ aconselhável que só o utilize para testes e não para jogar jogos.\n\nAlterar para gráficos LLE?"
|
||||||
#2056# "Emulação áudio de alto nível"
|
#2056# "Emulação áudio de alto nível"
|
||||||
#2057# "O Áudio HLE requer um plugin de terceiros!!!\nSe não tem um plugin de áudio de terceiros que suporta HLE não irá ouvir o som.\n\nMudar para áudio HLE?"
|
#2057# "O Áudio HLE requer um plugin de terceiros!!!\nSe não tem um plugin de áudio de terceiros que suporta HLE não irá ouvir o som.\n\nAlterar para áudio HLE?"
|
||||||
#2058# "O ficheiro carregado não parece ser uma ROM IPL válida do 64DD.\n\nVerifique as ROMs com o GoodN64."
|
#2058# "O ficheiro carregado não parece ser uma ROM IPL válida do 64DD.\n\nVerifique as ROMs com o GoodN64."
|
||||||
#2059# "Nintendo 64DD ROM IPL Japonesa de retalho não encontrada.\nÉ requerido para jogar imagens de disco da região japonesa do 64DD.\n\nSeleccione a ROM requerida nas Definições."
|
#2059# "Nintendo 64DD ROM IPL Japonesa de retalho não localizada.\nÉ necessário para jogar imagens de disco da região japonesa do 64DD.\n\nSeleccione a ROM requerida nas Definições."
|
||||||
#2061# "Nintendo 64DD ROM IPL Americana de retalho não encontrada.\nÉ requerido para jogar imagens de disco da região americana do 64DD.\n\nSeleccione a ROM requerida nas Definições."
|
#2061# "Nintendo 64DD ROM IPL Americana de retalho não localizada.\nÉ necessário para jogar imagens de disco da região americana do 64DD.\n\nSeleccione a ROM exigida nas Definições."
|
||||||
#2062# "Nintendo 64DD ROM IPL De desenvolvimento não encontrada.\nÉ requerido jogar imagens de disco do 64DD de desenvolvimento.\n\nSeleccione a ROM requerida nas Definições."
|
#2062# "Nintendo 64DD ROM IPL De desenvolvimento não localizada.\nÉ necessário para jogar imagens de disco do 64DD de desenvolvimento.\n\nSeleccione a ROM exigida nas Definições."
|
||||||
#2063# "Falha ao actualizar a batota, é inválida"
|
#2063# "Falha ao actualizar a batota, a mesma é inválida"
|
||||||
#2064# "Batota inválida"
|
#2064# "Batota inválida"
|
||||||
|
#2065# "Não foi possível ler os bytes de identificação"
|
||||||
|
#2066# "O ficheiro de imagem é inválido"
|
||||||
|
#2067# "Não foi possível atribuir espaço para a ROM"
|
||||||
|
#2068# "Não foi possível abrir a ROM"
|
||||||
|
|
||||||
/*** Android ***/
|
/*** Android ***/
|
||||||
|
|
||||||
#3000# "Definições"
|
#3000# "Definições"
|
||||||
#3001# "Ajuda/Fórum"
|
#3001# "Ajuda/Fórum"
|
||||||
#3002# "Relatar problema"
|
#3002# "Comunicar problema"
|
||||||
#3003# "Acerca"
|
#3003# "Acerca"
|
||||||
#3004# "Jogou recentemente"
|
#3004# "Jogou recentemente"
|
||||||
#3005# "Jogos"
|
#3005# "Jogos"
|
||||||
#3006# "Directório do jogo"
|
#3006# "Directório do jogo"
|
||||||
#3007# "Seleccione uma pasta para analisar"
|
#3007# "Seleccione uma pasta para examinar"
|
||||||
#3008# "Incluir sub-directórios"
|
#3008# "Incluir sub-directórios"
|
||||||
#3009# "Pasta principal"
|
#3009# "Pasta principal"
|
||||||
#3010# "Directórios"
|
#3010# "Directórios"
|
||||||
#3011# "Memória interna"
|
#3011# "Memória interna"
|
||||||
#3012# "A analisar..."
|
#3012# "A examinar..."
|
||||||
#3013# "Aceitar"
|
#3013# "Aceitar"
|
||||||
#3014# "Cancelar"
|
#3014# "Cancelar"
|
||||||
#3015# "Informação"
|
#3015# "Informação"
|
||||||
#3016# "Project64 do Android"
|
#3016# "Project64 para Android"
|
||||||
#3017# "Licença"
|
#3017# "Licença"
|
||||||
#3018# "Revisão"
|
#3018# "Revisão"
|
||||||
#3019# "O Project64 do Android\u2122 é um transporte da versão do windows do Project64. A versão do Android\u2122 consegue executar a maioria dos jogos do N64."
|
#3019# "O Project64 para Android\u2122 é uma portabilidade da versão para Windows do Project64. A versão para Android\u2122 pode executar a maioria dos jogos do N64."
|
||||||
#3020# "Autores do Project64."
|
#3020# "Autores do Project64."
|
||||||
#3021# "Discord"
|
#3021# "Discord"
|
||||||
|
|
||||||
// In-game menu
|
// In-game menu
|
||||||
#3100# "Definições"
|
#3100# "Definições"
|
||||||
#3101# "Gravar o estado"
|
#3101# "Gravar estado"
|
||||||
#3102# "Carregar o estado"
|
#3102# "Carregar estado"
|
||||||
#3103# "Terminar a emulação"
|
#3103# "Encerrar emulação"
|
||||||
#3104# "Colocar em pausa"
|
#3104# "Pausa"
|
||||||
#3105# "Retomar"
|
#3105# "Retomar"
|
||||||
#3106# "Velocidade do jogo"
|
#3106# "Velocidade do jogo"
|
||||||
#3107# "Gravar o estado actual..."
|
#3107# "Estado da gravação actual..."
|
||||||
#3108# "Automático"
|
#3108# "Automático"
|
||||||
#3109# "Compartimento"
|
#3109# "Compartimento"
|
||||||
#3110# "Repor"
|
#3110# "Repor"
|
||||||
#3111# "Opções de depuração"
|
#3111# "Opções de depuração"
|
||||||
#3112# "Repor os tempos da função"
|
#3112# "Repor tempos da função"
|
||||||
#3113# "Esvaziar os tempos da função"
|
#3113# "Esvaziar tempos da função"
|
||||||
|
|
||||||
// Video plugin
|
// Video plugin
|
||||||
#3200# "Nativo"
|
#3200# "Nativo"
|
||||||
|
|
|
@ -8297,20 +8297,46 @@ void CX86RecompilerOps::COP1_D_ADD()
|
||||||
uint32_t Reg1 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.ft : m_Opcode.fs;
|
uint32_t Reg1 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.ft : m_Opcode.fs;
|
||||||
uint32_t Reg2 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.fs : m_Opcode.ft;
|
uint32_t Reg2 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.fs : m_Opcode.ft;
|
||||||
|
|
||||||
CompileCop1Test();
|
if (FpuExceptionInRecompiler())
|
||||||
|
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
|
||||||
if (m_RegWorkingSet.RegInStack(Reg2, CRegInfo::FPU_Double))
|
|
||||||
{
|
{
|
||||||
m_Assembler.fadd(asmjit::x86::st0, m_RegWorkingSet.StackPosition(Reg2));
|
CompileInitFpuOperation(CRegInfo::RoundDefault);
|
||||||
|
if (m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Any) ||
|
||||||
|
m_RegWorkingSet.RegInStack(m_Opcode.ft, CRegInfo::FPU_Any) ||
|
||||||
|
m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Any))
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.FPRValuePointer(Reg1, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(TempReg), false);
|
||||||
|
TempReg = m_RegWorkingSet.FPRValuePointer(Reg2, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.PrepareFPTopToBe(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fadd(asmjit::x86::qword_ptr(TempReg));
|
||||||
|
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(TempReg), false);
|
||||||
|
m_Assembler.mov(TempReg, (uint64_t)&m_TempValue64);
|
||||||
|
m_Assembler.fpuStoreQwordFromX86Reg(m_RegWorkingSet.StackTopPos(), TempReg, false);
|
||||||
|
CompileCheckFPUResult64(TempReg);
|
||||||
|
m_RegWorkingSet.SetFPTopAs(m_Opcode.fd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.UnMap_FPR(Reg2, true);
|
CompileCop1Test();
|
||||||
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
|
||||||
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[Reg2], stdstr_f("_FPR_D[%d]", Reg2).c_str());
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fd, CRegInfo::FPU_Double);
|
if (m_RegWorkingSet.RegInStack(Reg2, CRegInfo::FPU_Double))
|
||||||
m_Assembler.fadd(asmjit::x86::qword_ptr(TempReg));
|
{
|
||||||
|
m_Assembler.fadd(asmjit::x86::st0, m_RegWorkingSet.StackPosition(Reg2));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.UnMap_FPR(Reg2, true);
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
|
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[Reg2], stdstr_f("_FPR_D[%d]", Reg2).c_str());
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fd, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fadd(asmjit::x86::qword_ptr(TempReg));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8319,31 +8345,57 @@ void CX86RecompilerOps::COP1_D_SUB()
|
||||||
uint32_t Reg1 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.ft : m_Opcode.fs;
|
uint32_t Reg1 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.ft : m_Opcode.fs;
|
||||||
uint32_t Reg2 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.fs : m_Opcode.ft;
|
uint32_t Reg2 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.fs : m_Opcode.ft;
|
||||||
|
|
||||||
CompileCop1Test();
|
if (FpuExceptionInRecompiler())
|
||||||
|
|
||||||
if (m_Opcode.fd == m_Opcode.ft)
|
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.UnMap_FPR(m_Opcode.fd, true);
|
CompileInitFpuOperation(CRegInfo::RoundDefault);
|
||||||
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
if (m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Any) ||
|
||||||
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[m_Opcode.ft], stdstr_f("_FPR_D[%d]", m_Opcode.ft).c_str());
|
m_RegWorkingSet.RegInStack(m_Opcode.ft, CRegInfo::FPU_Any) ||
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Any))
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.FPRValuePointer(Reg1, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(TempReg), false);
|
||||||
|
TempReg = m_RegWorkingSet.FPRValuePointer(Reg2, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.PrepareFPTopToBe(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
||||||
m_Assembler.fsub(asmjit::x86::qword_ptr(TempReg));
|
m_Assembler.fsub(asmjit::x86::qword_ptr(TempReg));
|
||||||
|
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(TempReg), false);
|
||||||
|
m_Assembler.mov(TempReg, (uint64_t)&m_TempValue64);
|
||||||
|
m_Assembler.fpuStoreQwordFromX86Reg(m_RegWorkingSet.StackTopPos(), TempReg, false);
|
||||||
|
CompileCheckFPUResult64(TempReg);
|
||||||
|
m_RegWorkingSet.SetFPTopAs(m_Opcode.fd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
CompileCop1Test();
|
||||||
if (m_RegWorkingSet.RegInStack(Reg2, CRegInfo::FPU_Double))
|
|
||||||
|
if (m_Opcode.fd == m_Opcode.ft)
|
||||||
{
|
{
|
||||||
m_Assembler.fsub(asmjit::x86::st0, m_RegWorkingSet.StackPosition(Reg2));
|
m_RegWorkingSet.UnMap_FPR(m_Opcode.fd, true);
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
|
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[m_Opcode.ft], stdstr_f("_FPR_D[%d]", m_Opcode.ft).c_str());
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fsub(asmjit::x86::qword_ptr(TempReg));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.UnMap_FPR(Reg2, true);
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
||||||
|
if (m_RegWorkingSet.RegInStack(Reg2, CRegInfo::FPU_Double))
|
||||||
|
{
|
||||||
|
m_Assembler.fsub(asmjit::x86::st0, m_RegWorkingSet.StackPosition(Reg2));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.UnMap_FPR(Reg2, true);
|
||||||
|
|
||||||
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[Reg2], stdstr_f("_FPR_D[%d]", Reg2).c_str());
|
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[Reg2], stdstr_f("_FPR_D[%d]", Reg2).c_str());
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fd, CRegInfo::FPU_Double);
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fd, CRegInfo::FPU_Double);
|
||||||
m_Assembler.fsub(asmjit::x86::qword_ptr(TempReg));
|
m_Assembler.fsub(asmjit::x86::qword_ptr(TempReg));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8402,39 +8454,86 @@ void CX86RecompilerOps::COP1_D_DIV()
|
||||||
uint32_t Reg1 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.ft : m_Opcode.fs;
|
uint32_t Reg1 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.ft : m_Opcode.fs;
|
||||||
uint32_t Reg2 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.fs : m_Opcode.ft;
|
uint32_t Reg2 = m_Opcode.ft == m_Opcode.fd ? m_Opcode.fs : m_Opcode.ft;
|
||||||
|
|
||||||
CompileCop1Test();
|
if (FpuExceptionInRecompiler())
|
||||||
|
|
||||||
if (m_Opcode.fd == m_Opcode.ft)
|
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.UnMap_FPR(m_Opcode.fd, true);
|
CompileInitFpuOperation(CRegInfo::RoundDefault);
|
||||||
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
if (m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Any) ||
|
||||||
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[m_Opcode.ft], stdstr_f("_FPR_D[%d]", m_Opcode.ft).c_str());
|
m_RegWorkingSet.RegInStack(m_Opcode.ft, CRegInfo::FPU_Any) ||
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Any))
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.FPRValuePointer(Reg1, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(TempReg), false);
|
||||||
|
TempReg = m_RegWorkingSet.FPRValuePointer(Reg2, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.PrepareFPTopToBe(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
||||||
m_Assembler.fdiv(asmjit::x86::qword_ptr(TempReg));
|
m_Assembler.fdiv(asmjit::x86::qword_ptr(TempReg));
|
||||||
|
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(TempReg), false);
|
||||||
|
m_Assembler.mov(TempReg, (uint64_t)&m_TempValue64);
|
||||||
|
m_Assembler.fpuStoreQwordFromX86Reg(m_RegWorkingSet.StackTopPos(), TempReg, false);
|
||||||
|
CompileCheckFPUResult64(TempReg);
|
||||||
|
m_RegWorkingSet.SetFPTopAs(m_Opcode.fd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
CompileCop1Test();
|
||||||
if (m_RegWorkingSet.RegInStack(Reg2, CRegInfo::FPU_Double))
|
|
||||||
|
if (m_Opcode.fd == m_Opcode.ft)
|
||||||
{
|
{
|
||||||
m_Assembler.fdiv(asmjit::x86::st0, m_RegWorkingSet.StackPosition(Reg2));
|
m_RegWorkingSet.UnMap_FPR(m_Opcode.fd, true);
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
|
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[m_Opcode.ft], stdstr_f("_FPR_D[%d]", m_Opcode.ft).c_str());
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fdiv(asmjit::x86::qword_ptr(TempReg));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.UnMap_FPR(Reg2, true);
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, Reg1, CRegInfo::FPU_Double);
|
||||||
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
if (m_RegWorkingSet.RegInStack(Reg2, CRegInfo::FPU_Double))
|
||||||
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[Reg2], stdstr_f("_FPR_D[%d]").c_str());
|
{
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fd, CRegInfo::FPU_Double);
|
m_Assembler.fdiv(asmjit::x86::st0, m_RegWorkingSet.StackPosition(Reg2));
|
||||||
m_Assembler.fdiv(asmjit::x86::qword_ptr(TempReg));
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.UnMap_FPR(Reg2, true);
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
|
m_Assembler.MoveVariableToX86reg(TempReg, (uint8_t *)&m_Reg.m_FPR_D[Reg2], stdstr_f("_FPR_D[%d]").c_str());
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fd, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fdiv(asmjit::x86::qword_ptr(TempReg));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_D_ABS()
|
void CX86RecompilerOps::COP1_D_ABS()
|
||||||
{
|
{
|
||||||
CompileCop1Test();
|
if (FpuExceptionInRecompiler())
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
{
|
||||||
m_Assembler.fabs();
|
CompileInitFpuOperation(CRegInfo::RoundDefault);
|
||||||
|
if (m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Any) ||
|
||||||
|
m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Any))
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.FPRValuePointer(m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.PrepareFPTopToBe(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fabs();
|
||||||
|
m_Assembler.mov(TempReg, (uint64_t)&m_TempValue64);
|
||||||
|
m_Assembler.fpuStoreQwordFromX86Reg(m_RegWorkingSet.StackTopPos(), TempReg, false);
|
||||||
|
CompileCheckFPUResult64(TempReg);
|
||||||
|
m_RegWorkingSet.SetFPTopAs(m_Opcode.fd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CompileCop1Test();
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fabs();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_D_NEG()
|
void CX86RecompilerOps::COP1_D_NEG()
|
||||||
|
@ -8446,9 +8545,30 @@ void CX86RecompilerOps::COP1_D_NEG()
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_D_SQRT()
|
void CX86RecompilerOps::COP1_D_SQRT()
|
||||||
{
|
{
|
||||||
CompileCop1Test();
|
if (FpuExceptionInRecompiler())
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
{
|
||||||
m_Assembler.fsqrt();
|
CompileInitFpuOperation(CRegInfo::RoundDefault);
|
||||||
|
if (m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Any) ||
|
||||||
|
m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Any))
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
asmjit::x86::Gp TempReg = m_RegWorkingSet.FPRValuePointer(m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
CompileCheckFPUInput(TempReg, FpuOpSize_64bit);
|
||||||
|
m_RegWorkingSet.PrepareFPTopToBe(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fsqrt();
|
||||||
|
m_Assembler.mov(TempReg, (uint64_t)&m_TempValue64);
|
||||||
|
m_Assembler.fpuStoreQwordFromX86Reg(m_RegWorkingSet.StackTopPos(), TempReg, false);
|
||||||
|
CompileCheckFPUResult64(TempReg);
|
||||||
|
m_RegWorkingSet.SetFPTopAs(m_Opcode.fd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CompileCop1Test();
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
m_Assembler.fsqrt();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_D_MOV()
|
void CX86RecompilerOps::COP1_D_MOV()
|
||||||
|
|
|
@ -287,22 +287,24 @@ void CX86RegInfo::FixRoundModel(FPU_ROUND RoundMethod)
|
||||||
m_Assembler.fpuStoreControl(&m_fpuControl, "m_fpuControl");
|
m_Assembler.fpuStoreControl(&m_fpuControl, "m_fpuControl");
|
||||||
asmjit::x86::Gp reg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
asmjit::x86::Gp reg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
m_Assembler.MoveVariableToX86reg(reg, &m_fpuControl, "m_fpuControl");
|
m_Assembler.MoveVariableToX86reg(reg, &m_fpuControl, "m_fpuControl");
|
||||||
m_Assembler.and_(reg, 0xF3FF);
|
m_Assembler.and_(reg, 0xF0FF);
|
||||||
|
uint16_t Precision = 0x200;
|
||||||
|
|
||||||
if (RoundMethod == RoundDefault)
|
if (RoundMethod == RoundDefault)
|
||||||
{
|
{
|
||||||
asmjit::x86::Gp RoundReg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
asmjit::x86::Gp RoundReg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
m_Assembler.OrVariableToX86Reg(reg, &CX86RecompilerOps::m_RoundingModeValue, "m_RoundingModeValue");
|
m_Assembler.OrVariableToX86Reg(reg, &CX86RecompilerOps::m_RoundingModeValue, "m_RoundingModeValue");
|
||||||
|
m_Assembler.or_(reg, Precision);
|
||||||
SetX86Protected(GetIndexFromX86Reg(RoundReg), false);
|
SetX86Protected(GetIndexFromX86Reg(RoundReg), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (RoundMethod)
|
switch (RoundMethod)
|
||||||
{
|
{
|
||||||
case RoundTruncate: m_Assembler.or_(reg, 0x0C00); break;
|
case RoundTruncate: m_Assembler.or_(reg, 0x0C00 | Precision); break;
|
||||||
case RoundNearest: m_Assembler.or_(reg, 0x0000); break;
|
case RoundNearest: m_Assembler.or_(reg, 0x0000 | Precision); break;
|
||||||
case RoundDown: m_Assembler.or_(reg, 0x0400); break;
|
case RoundDown: m_Assembler.or_(reg, 0x0400 | Precision); break;
|
||||||
case RoundUp: m_Assembler.or_(reg, 0x0800); break;
|
case RoundUp: m_Assembler.or_(reg, 0x0800 | Precision); break;
|
||||||
default:
|
default:
|
||||||
g_Notify->DisplayError("Unknown rounding model");
|
g_Notify->DisplayError("Unknown rounding model");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue