128- and 64-color palettes can share color memory with other palettes (saturnringlib/srl_cram.hpp:173-264)

Aperta Adatta ai principianti
#147 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
75/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cpp

Direzione di ricerca

Il bug si trova in saturnringlib/srl_cram.hpp, righe 173-264, in GetBankUsedState, SetBankUsedState e GetFreeBank. Verifica le espressioni di shift per 128 e 64 colori rispetto all'indicizzazione dei blocchi da 16 colori, poi fai in modo che GetFreeBank chiami GetBankUsedState invece di ripetere le maschere. È completato quando l'allocazione di una palette a 16 colori seguita da una a 128 colori marca i blocchi 2-9 e la successiva allocazione a 16 colori li salta.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug required hardware test
  • What this is: CRAM (color RAM, where palettes live) is tracked with a bit mask, one bit per 16-color block.
    • Problem: The bit shift is wrong. A 128-color bank uses (bank&1)<<1 where it needs <<3, and a 64-color bank uses (bank&2)<<2 where it needs (bank&3)<<2. Example: allocate one 16-color palette (bank 0), then a 128-color palette. The 128-color palette lands at colors 128–255 but only marks blocks 2–9 as used. The next 16-color palette can then get block 10, which sits inside the 128-color palette.
    • Fix: Correct the two shifts in GetBankUsedState and SetBankUsedState. Make GetFreeBank call GetBankUsedState instead of repeating the masks, since the copied masks are where the bug lives.
Lingua principale
C++
Stelle
90
Fork
5
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ReyeMe/SaturnRingLib

Tutte le issue di ReyeMe/SaturnRingLib

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.