BIOSF UPLOAD: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 11: Line 11:
{{BR|BIOS_UPBANK}} (8bit):  Bank (Byte)
{{BR|BIOS_UPBANK}} (8bit):  Bank (Byte)


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



Revision as of 17:13, 27 December 2012

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 (and size ?) 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