[NDS] BIOS HLE: fehlende SWIs (0x00-0x1F) #164

Open
opened 2026-03-15 19:30:09 +00:00 by krugi20 · 1 comment
Owner

ARM9/ARM7 SWI Handler war anfangs sehr unvollständig. Ein Teil ist inzwischen implementiert, aber die HLE ist noch nicht retail-treu genug für den NDS-Bootpfad.

Stand (2026-03-17)

Bereits implementiert oder teilweise vorhanden

  • SWI 0x00: SoftReset (minimal)
  • SWI 0x04: IntrWait
  • SWI 0x05: VBlankIntrWait
  • SWI 0x06: Div
  • SWI 0x07: DivArm
  • SWI 0x08: Sqrt
  • SWI 0x09: GetCRC16
  • SWI 0x0B: CpuSet
  • SWI 0x0C: CpuFastSet
  • SWI 0x11: LZ77UnCompReadNormalWrite8bit
  • SWI 0x12: LZ77UnCompReadNormalWrite16bit
  • SWI 0x14: RLUnCompReadNormalWrite8bit
  • SWI 0x1A: SoundBias (derzeit noop)

Noch offen oder noch nicht sauber genug

  • SWI 0x01: RegisterRamReset
  • SWI 0x0D: GetSystemInfo
  • SWI 0x0F: BIOS Tabellen / Lookup Helpers
  • SWI 0x13: HuffUnComp ist aktuell nur Platzhalter
  • Genaues Mode-/Banked-Register-/Return-Verhalten gegen Retail-Code validieren
  • ARM7 Service-Wrapper bei 0x038037B4 gegen echten Bootpfad prüfen

Ziel

  • Keine auffälligen falschen SWI-Pfade mehr im frühen ARM7/ARM9 Boot
  • HLE so weit bringen, dass mindestens ein Retail-ROM sichtbar in die Display-Init läuft
ARM9/ARM7 SWI Handler war anfangs sehr unvollständig. Ein Teil ist inzwischen implementiert, aber die HLE ist noch nicht retail-treu genug für den NDS-Bootpfad. ## Stand (2026-03-17) ### Bereits implementiert oder teilweise vorhanden - SWI 0x00: SoftReset (minimal) - SWI 0x04: IntrWait - SWI 0x05: VBlankIntrWait - SWI 0x06: Div - SWI 0x07: DivArm - SWI 0x08: Sqrt - SWI 0x09: GetCRC16 - SWI 0x0B: CpuSet - SWI 0x0C: CpuFastSet - SWI 0x11: LZ77UnCompReadNormalWrite8bit - SWI 0x12: LZ77UnCompReadNormalWrite16bit - SWI 0x14: RLUnCompReadNormalWrite8bit - SWI 0x1A: SoundBias (derzeit noop) ### Noch offen oder noch nicht sauber genug - SWI 0x01: RegisterRamReset - SWI 0x0D: GetSystemInfo - SWI 0x0F: BIOS Tabellen / Lookup Helpers - SWI 0x13: HuffUnComp ist aktuell nur Platzhalter - Genaues Mode-/Banked-Register-/Return-Verhalten gegen Retail-Code validieren - ARM7 Service-Wrapper bei `0x038037B4` gegen echten Bootpfad prüfen ## Ziel - Keine auffälligen falschen SWI-Pfade mehr im frühen ARM7/ARM9 Boot - HLE so weit bringen, dass mindestens ein Retail-ROM sichtbar in die Display-Init läuft
Author
Owner

Fortschritt 2026-03-15

Teilweise implementiert:

  • VBlankIntrWait (SWI 0x05): CPU-Halt (cpu->halted=true) implementiert, ARM7 weckt via arm7_set_irq()
  • IntrWait (SWI 0x04): CPU-Halt mit BIOS-IF-Masken-Check
  • BIOS7/BIOS9 IRQ-Handler HLE-Stubs in nds_reset() gepatcht (echte Bytes: STMFD/LDR/BX/LDMFD/SUBS)
  • IF-Write-Handler: irq_pending wird jetzt via arm7_set_irq(false) de-assertiert

Commit: 1e72687

Noch offen: Advance Wars nutzt kein BIOS-SWI, daher geringe Priorität. Andere SWIs (CpuSet, LZ77, etc.) fehlen noch.

## Fortschritt 2026-03-15 **Teilweise implementiert:** - `VBlankIntrWait` (SWI 0x05): CPU-Halt (`cpu->halted=true`) implementiert, ARM7 weckt via `arm7_set_irq()` - `IntrWait` (SWI 0x04): CPU-Halt mit BIOS-IF-Masken-Check - BIOS7/BIOS9 IRQ-Handler HLE-Stubs in `nds_reset()` gepatcht (echte Bytes: STMFD/LDR/BX/LDMFD/SUBS) - IF-Write-Handler: `irq_pending` wird jetzt via `arm7_set_irq(false)` de-assertiert **Commit:** `1e72687` **Noch offen:** Advance Wars nutzt kein BIOS-SWI, daher geringe Priorität. Andere SWIs (CpuSet, LZ77, etc.) fehlen noch.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
krugi20/retroverse#164
No description provided.