BIOSF UPLOAD

From NeoGeo Development Wiki
Revision as of 05:23, 25 December 2012 by Furrtek (talk | contribs)
Jump to navigation Jump to search

BIOSF_UPLOAD ($C00546): Upload data to DRAM

BIOS_UPSRC ($10FEF8 ) (32bit): Source (Long)

BIOS_UPDEST ($10FEF4 ) (32bit): Destination (Long)

BIOS_UPSIZE ($10FEFC ) (32bit): Size (Long)

BIOS_UPZONE ($10FEDA ) (8bit): Zone (Byte, 0=PRG, 1=FIX, 2=SPR, 3=Z80, 4=PCM, 5=PAT)

BIOS_UPBANK ($10FEDB ) (8bit): Bank (Byte)

For FIX, Z80 (, PAT ?) and PCM upload, the destination has to be multiplied by 2 (8bit busses). The SPR bank size is 1MiB (4 banks), PCM bank size is 512KiB (4 banks). The other zones aren't banked.

BIOS_UPDEST (and BIOS_UPSRC ?) is incremented by the size upon completion, which allows to do multiple consecutive uploads.

Steps

  • $FF0004.w and $10FD80 are pushed
  • $FF0004.w = 1
  • $10FD80=0, system mode
  • Mapping
  • $FF016F.b=1 disable interrupts ?
  • Copy
  • Watchdog kicked
  • $FF016F.b=0 enable interrupts ?
  • Unmapping
  • Restore $10FD80.w and $FF0004.w

Modes

  • BIOS_UPZONE=0: Upload PRG DMA words
    • Load word copy microcode
    • Dest=size+dest
    • LoadMicrocodeA0
    • DoDMAWordCopyBypass
  • BIOS_UPZONE=1: Upload Fix DMA bytes
    • $FF0129.b=0, $FF0105.b=5 (FIX set, upload type)
    • Load byte copy microcode
    • DoDMAWordCopy
    • Dest=Dest+(size*2)
    • $FF0149.b=0 FIX unset
  • BIOS_UPZONE=2: Upload Srites DMA words
    • $FF0121.b=0, $FF0105.b=0, $FF01A1.b=UploadBank (SPR set, upload type)
    • Load word copy microcode
    • Upload (>1MiB possible, bank is autoincremented)
    • DoDMAWordCopy
    • $FF0141.b=0 SPR unset
  • BIOS_UPZONE=3: Upload Z80 DMA bytes
    • $FF0127.b=0, $FF0105.b=4 (Z80 set, upload type)
    • Load byte copy microcode
    • DoByteCopy
    • Dest=Dest+(size*2)
    • $FF0147.b=0 Z80 unset
  • BIOS_UPZONE=4: Upload PCM DMA bytes
    • $FF0123.b=0, $FF0105.b=1, $FF01A3.b=UploadBank (PCM set, upload type)
    • Load byte copy microcode
    • Upload (>1MiB possible, bank is autoincremented)
    • DoByteCopy
    • $FF0143.b=0 PCM unset
  • BIOS_UPZONE=5: Install PAT
    • $FF0127.b=0, Z80 set
    • $FF0105.b=4, upload type
    • 10F736.l=((Bank*$10000)+Dest)/256
    • 10F736+Address/2
    • See PAT file for data format
  • BIOS_UPZONE=6: Upload palette words
    • Load word copy microcode
    • move.l #$00400000,d0 ;0BEC6: 203C00400000
    • bsr DoDMAWordCopyBypass ;0BECC: 61000018
    • Dest=size+dest
  • BIOS_UPZONE=7: Upload sprites loop longwords (?)
    • $FF0121.b=0, $FF0105.b=0, $FF01A1.b=UploadBank (SPR set, upload type)
    • A1=Dest+$E00000
    • Size.l=(Src.l)
    • Size=0 ? Yes: Dest=A1-$E00000
    • Copy src to dest
    • ...weird longword copy in a loop to upload zone
    • $FF0141.b=0 SPR unset
  • BIOS_UPZONE=8: Upload PRG DMA
    • Same as 0
  • BIOS_UPZONE=10: Upload PRG loop longwords
    • Load word copy microcode
    • $FF0004.w=$31
    • DoLongwordCopyBypass
    • $FF0004.w=$0331
    • Dest=Dest+Size
  • BIOS_UPZONE=11: Upload FIX loop words
    • $FF0129.b=0, $FF0105.b=5 (FIX set, upload type)
    • DoWordToByteCopy
    • Dest=Dest+(size*2)
    • $FF0149.b=0 FIX unset
  • BIOS_UPZONE=12: Upload Sprites loop longwords
    • $FF0121.b=0, $FF0105.b=0, $FF01A1.b=UploadBank (SPR set, upload type)
    • bsr DoLongwordCopy ;0BC48: 610002BC
    • Dest=Dest+Size
    • $FF0141.b=0 SPR unset
  • BIOS_UPZONE=13: Upload Z80 loop bytes
    • $FF0127.b=0, $FF0105.b=4 (Z80 set, upload type)
    • bsr DoByteCopy ;0BCF8: 61000250
    • Dest=Dest+(size*2)
    • $FF0147.b=0 Z80 unset
  • BIOS_UPZONE=14: Upload PCM loop bytes
    • $FF0123.b=0, $FF0105.b=1, $FF01A3.b=UploadBank (PCM set, upload type)
    • DoByteCopy ;0BCCC: 6100027C
    • Dest=Dest+(size*2)
    • Auto bank++
    • $FF0143.b=0 PCM unset
  • BIOS_UPZONE=15: Install PAT
    • Same as 5
  • BIOS_UPZONE=16: Upload palette longwords
    • Load word copy microcode
    • move.l #$00400000,d0 ;0BD42: 203C00400000
    • bsr DoLongwordCopyBypass ;0BD48: 610001C2
    • Dest=Dest+Size
  • BIOS_UPZONE=17: Upload sprites loop longwords (?)
    • $FF0121.b=0, $FF0105.b=0, $FF01A1.b=UploadBank (SPR set, upload type)
    • Similar to 7, longword copy in a loop to upload zone
    • $FF0141.b=0 SPR unset
  • BIOS_UPZONE=18
    • Same as 10