mirror of
https://github.com/86Box/86Box.git
synced 2026-02-24 02:18:20 -07:00
55 lines
1.4 KiB
Plaintext
55 lines
1.4 KiB
Plaintext
NV3 DMA Engine
|
|
(DirectDraw Driver)
|
|
|
|
Initially set CACHES, CACHE1_PULL0, CACHE1_PULL1, CACHE1_DMA0 to 1
|
|
|
|
Same for other areas
|
|
|
|
CACHE1_PUSH1 contains CHID
|
|
|
|
If it's different:
|
|
|
|
If RmFifoFlushContext failed: Do nothing
|
|
|
|
Set PULL0, PUSH0, Caches to 1, return false
|
|
|
|
|
|
If it's not:
|
|
DMA TLB PTE seems to be 1 for direct programming, maybe RM does it differently
|
|
Tag=FFFFFFFF
|
|
CACHE1_DMA1 - Number of bytes to send
|
|
CACHE1_DMA2 - Get offset
|
|
CACHE1_DMA3 - Bus address space (Area BAR0 mapped to? Or bar1?)
|
|
|
|
TO START:
|
|
To set up DMA for for Cache1 Puller: CACHE1_PULL0 -> 1, changes to 0 when done
|
|
To set up DMA Cache1 Push: CACHE1_PUsh0 -> 1, changes to 0 when done
|
|
Set CACHES to 1
|
|
|
|
GO: Set DMA0 to 1
|
|
|
|
***** Implementation in Driver ******
|
|
|
|
You can dma to "localvidmem:", "sysvidmem:" or "sysmem:", this is represented by a driver
|
|
|
|
CAUSE OF FAILURE:
|
|
the pfifo is never free because it never processes the submitted objects
|
|
which means that the FIFO is never free
|
|
which means that the drivers spin forever waiting for the fifo to be free
|
|
|
|
DMA_OBJECT STRUCTURE IN RESOURCE MANAGER:
|
|
0x328: Valid
|
|
0x34c: base address?
|
|
0x374: actually do the transfer
|
|
|
|
some objects don't actually need to do dma, for example, video patchcord, it just creates a structure in the driver, and rop just allocate ssome memory to put the data for the patchcord/rop thing
|
|
|
|
dma start=nv3_mini dc67
|
|
call of mthdCreate for ***DRIVER*** CLASS ID: a7b44, check ptr
|
|
|
|
|
|
|
|
|
|
|
|
|