Skip to content

BlueRetro - PlayStation 1 Custom Edition (v0.7.5)

Choose a tag to compare

@Schickacka Schickacka released this 29 Oct 00:32
· 4 commits to master since this release

BlueRetro — PlayStation 1 Custom Edition (v0.7.5)

Tag: v0.7.5

Esta versão traz a correção definitiva de reconexão do DualShock 4 com inicialização instantânea (0 ms de latência adicional), refinamento da ativação do motor de alta frequência (HF) para qualquer comando diferente de zero, contador de inatividade atômico thread-safe no Core 0, normalização da detecção de atividade por amplitude de eixo e correção de indexação de acessório Memory Card no driver SPI.


Novidades e Correções

1. Reconexão Confiável do DualShock 4 e Inicialização Instantânea

  • Resolução Determinística de Nome Bluetooth: Durante a reconexão por paginação (incoming page iniciada pelo controle), o canal de interrupção L2CAP conectava antes da chegada do pacote de identificação de nome (BT_HCI_EVT_REMOTE_NAME_REQ_COMPLETE), retendo o dispositivo temporariamente como BT_HID_GENERIC. O driver agora reavalia a transição de tipo para BT_PS, redefine a flag BT_DEV_HID_INIT_DONE e dispara a inicialização nativa bt_hid_ps_init().
  • Inicialização Imediata (Zero Latência Adicional): Ao receber o primeiro relatório de status completo (Report 0x11 para DualShock 4 ou Report 0x31 para DualSense), a rotina de inicialização cancela o temporizador de fallback com segurança (esp_timer_stop antes de esp_timer_delete), marca o dispositivo como pronto, aciona a vibração de confirmação, inicia o piscar da cor do jogador e disponibiliza a porta do console de forma instantânea.
  • Recuperação de Modo Boot (Report 0x01): Caso o DualShock 4 inicie a transmissão em modo boot genérico (Report 0x01), o firmware emite o comando probe de transição (0xC0, 0x07) para colocá-lo imediatamente em modo nativo Bluetooth.

2. Ativação do Motor de Alta Frequência (HF) por Qualquer Byte Não Nulo

  • No controle físico original DualShock 1, o motor direito (leve/alta frequência) é binário. O firmware agora aciona saturação máxima (0xFF) para qualquer byte não nulo (raw_fb_data->data[0] ? 0xFF : 0x00), eliminando a exigência anterior restrita apenas ao bit 0 (& 0x01) e garantindo resposta tátil nítida para qualquer comando emitido pelo jogo.
  • O limiar do motor de baixa frequência (LF) permanece estritamente em >= 0x40 (64 decimal).

3. Contador de Inatividade Atômico Thread-Safe

  • O contador de inatividade dev_idle_sec[BT_MAX_DEV] no Core 0 agora utiliza exclusivamente primitivas atômicas GCC (__atomic_add_fetch e __atomic_store_n com semântica __ATOMIC_RELAXED), eliminando qualquer possibilidade de condição de corrida ou leituras rasgadas entre as tarefas concorrentes do FreeRTOS.

4. Detecção de Inatividade Normalizada por Amplitude de Eixo

  • A detecção de atividade analógica foi normalizada para 20% do curso real com base nos metadados de amplitude (axis->meta->abs_max / 5), garantindo precisão idêntica no desligamento de 10 minutos independentemente da escala nativa de resolução do controlador.

5. Acesso a Memory Card em Múltiplas Portas (mt_first_port)

  • A verificação do modo de acessórios (acc_mode & ACC_MEM) no driver SPI baremetal agora utiliza port->mt_first_port, garantindo que cartões de memória virtuais ou físicos operem normalmente na Porta 2 independentemente da configuração de multitap.

Arquivos e Hashes de Integridade

Arquivo Tamanho (bytes) SHA-256
BlueRetro_hw1_playstation.bin 558,176 499f2da22cf7cb974880db3499328d448670861fe1112f2ddbcd7f2ba689f62a
BlueRetro_PS1_Custom_v0.7.5_Package.zip 361,176 d84c9d5187fd75ab421566445db939ced570a3dd922592c07a97eed595fcd8ec
BlueRetro_PS1_Custom_v0.7.5_Source.zip 992,636 08547c3904ea7dbde69a74932d7a6091cb8113c98b13de858ceb21dd9bcffe39

Build: CI run 40794334658 (commit 7b52563), ESP-IDF v5.5-dev-698-g030c9957db. O firmware reporta v0.7.5 ps1-custom.


Gravação e Atualização

Bluetooth / OTA (recomendado, sem abrir o console):

  1. Ligue o PlayStation 1 com os controles Bluetooth desligados.
  2. Execute flash_bluetooth_ota.bat ou python ble_ota_update.py BlueRetro_hw1_playstation.bin (requer pip install bleak).
  3. Alternativa via navegador web: acesse blueretro.io/ota.html e carregue BlueRetro_hw1_playstation.bin.

Cabo USB: Conecte a placa ESP32 ao computador e execute flash_windows.bat.

Manual (esptool):

python -m esptool --chip esp32 --port COMx -b 921600 --before default_reset \
  --after hard_reset write_flash --flash_mode dio --flash_size 4MB --flash_freq 40m \
  0x1000 bootloader.bin 0x8000 partition-table.bin 0xd000 ota_data_initial.bin \
  0x10000 BlueRetro_hw1_playstation.bin