Skip to content

Latest commit

 

History

History
146 lines (146 loc) · 5.25 KB

TODO.md

File metadata and controls

146 lines (146 loc) · 5.25 KB
  • Graphics
    • Backdrop and forced blank
    • Tile modes
      • Scrolling
      • Priorities
      • Transparency color
      • Tile flipping
      • 32 and 256 color palettes
    • Bitmap modes
      • Page flipping
      • Affine transformation (e.g. Advance Wars intro, Ecks vs. Sever)
      • Priorities (e.g. Iridion II intro)
    • Tiled and affine backgrounds
      • Layer toggle delay
    • Regular and affine sprites
      • Tile indexes past 1023 wrap around to 0 allowing tile 0 to be placed at sprite origin (e.g. Advance Wars 2 versus rules screen)
      • Tile indexes for 2D mapped tiles incremented past end of row wrap around to the same row
      • Affine matrix of all zeros produces rectangle of uniform color using origin pixel (e.g. Kurukuru Kururin intro and pause menu)
      • Transparent sprites can update sprite priorities (e.g. Golden Sun carpet)
      • OAM update delay
    • Graphic effects
      • Blending
      • Mosaic
      • Windowing
        • Basic windows
        • Object window
        • Bad values for window coordinates
    • Shaders
      • LCD color correction
  • Sound
    • Digital sound channels
    • Programmable sound generators
      • Square 1
      • Square 2
      • Wave
      • Noise
    • Resampling
      • Sample rates less than 48,000 Hz
      • Sample rates greater than 48,000 Hz (e.g. Golden Sun 2, Konami Krazy Racers)
      • Mixing dissimilar sample rates (e.g. Medabots AX, Mobile Suit Gundam Seed)
      • Interpolation
        • Cosine interpolation
        • Cubic interpolation
        • Sinc interpolation
        • Lanczos interpolation
    • Sound bias register
  • Timings
    • Scheduler optimisation
    • Memory region timings
    • Wait count register
    • Instruction timings
    • Timers are updated during a DMA transfer
    • Higher priority DMAs can be initiated during a DMA transfer
    • DMAs delayed by 2 cycles
    • IRQs delayed by 7 cycles (e.g. Hamtaro - Ham-Ham Heartbreak, Mega Man & Bass)
    • Cartridge prefetch
  • Memory
    • BIOS read lockout
    • I/O registers
    • Mirroring
    • Open bus
      • ARM
      • Thumb (e.g. The Legend of Zelda: The Minish Cap, Mario & Luigi: Superstar Saga)
        • Work RAM 256K, Palette RAM, VRAM and GamePak ROM
        • BIOS ROM and OAM
        • Work RAM 32K
        • I/O and GamePak SRAM
      • DMA (e.g. Hello Kitty Collection, Sonic Pinball Party)
  • Save memory
    • SRAM, Flash and EEPROM support
    • Persist save game to disk
      • On exit or ROM load
      • Automatically with mmap
    • Save type detection via string search
    • Save type overrides
      • Hardcoded
      • Loaded from text file
      • Loaded from save type database
    • Save states
  • Timers
  • DMA
  • Key input
  • Interrupt requests
    • VBlank, VCount and HBlank
    • Timers
    • DMA transfers
    • Key input
  • CPU
    • Instruction decode via lookup table
    • ALU and shifter
    • Pipeline
    • Conditional execution
    • Software and hardware interrupts
    • ldrt/strt user bank registers
    • ARM edge cases
      • ldr/str aligns addresses and does rotated reads
      • ldm/stm aligns addresses and does not rotate reads, updated base retains misalignment
      • CPSR bit 4 (M[4]) always reads as 1 (e.g. Banjo-Kazooie: Grunty's Revenge)
      • Invalid CPSR mode
      • Reading SPSR in modes where SPSR does not exist results in CPSR
      • Changing Thumb bit via msr
      • ldm^/stm^ user bank registers with writeback loads base from non-user bank but stores updated base into user bank
      • tstp/teqp/cmpp/cmnp (ARMv2 mode change) restores SPSR only, mode is unchanged
      • ldm/stm with empty register list loads/stores PC and increments/decrements base Rn by 0x40
      • ldm with base Rn in register list ignores writeback
      • stm with base Rn first in register list stores unmodified base
      • bx aligns ARM addresses to word, Thumb addresses to halfword
      • Undefined instructions
    • Thumb edge cases
      • Using the second half of a bl instruction pair on its own (e.g. Golden Sun)
      • add/cmp/mov high registers (with both registers low)
      • blx (not on ARMv4T)
      • bx (non-zero should be zero bits)
      • add/sub sp (non-zero should be zero bits)
      • push/pop (non-zero should be zero bits)
  • GPIO peripherals
    • Real time clock (e.g. Pokémon Emerald)
    • Gyroscope (e.g. WarioWare: Twisted!)
    • Accelerometer (e.g. Yoshi Topsy-Turvy)
    • Solar sensor (e.g. Boktai)
    • Rumble (e.g. Drill Dozer)
    • e-Reader
  • Communication
    • Link cable
    • Wireless adapter
  • Debugging
    • Registers
    • Disassembly
      • Scrollable window
    • Stepping
      • Reset
      • Single step
      • Step n cycles
      • Step 1 frame
    • Breakpoints
    • Memory viewer
      • Jump to region
    • Palette viewer
    • Background viewer
    • Sprite viewer
    • GDB remote debug protocol
  • User interface
    • Drag and drop ROM file
    • Screen scale
    • Remap controls
    • Rotate screen 90° (e.g. Dr. Mario + Puzzle League)