DDMA WORKS!!!! Read the console output if you want:
PS C:\Users\Neptune\Documents\GitHub\PCIe-PCI-ISA\DFT_VMDA8\it8888vdma_win10_predosbox> powershell -ExecutionPolicy Bypass -File .\gus_ddma_upload_4k_reinit_safe_v3.ps1 `
>> -Exe .\dist\Debug_x64\it8888ctl.exe `
>> -Base 0x8240 `
>> -Wav .\test.wav `
>> -StartDram 0x000100 `
>> -TotalSamples 32768 `
>> -ChunkSamples 4096 `
>> -Gain 400 `
>> -Freq 0x03c0 `
>> -PlayWholeRegion `
>> -PlayMsWhole 3000
============================================================
GUS DDMA 4KiB reinit-safe uploader/player v3
Exe: .\dist\Debug_x64\it8888ctl.exe
Base: 0x8240
WAV: .\test.wav
StartDram: 0x000100
TotalSamples: 32768
ChunkSamples: 4096
Chunks: 8
Gain: 400
Freq: 0x03c0
DmaCtrl: 0x01
SettleMs: 1500
PlayWholeRegion: True
PlayMsWhole: 3000
PlayEachChunk: False
PlayMs/chunk: 140
============================================================
============================================================
INITIAL BRIDGE SETUP
============================================================
=== INITIAL BRIDGE SETUP : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== INITIAL BRIDGE SETUP : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== INITIAL BRIDGE SETUP : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== INITIAL BRIDGE SETUP : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== INITIAL BRIDGE SETUP : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DMA FREE ===
.\dist\Debug_x64\it8888ctl.exe dma-free
=== DMA ALLOC LOW ===
.\dist\Debug_x64\it8888ctl.exe dma-alloc-low 65536
LOW buf 1 size 65536 logical 0xff0000 kva 0xffff9500ce328000 OK<16M
=== DDMA CLEAR BEFORE CHUNK 0 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 0 src=0 dram=0x000100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x000100 0 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x000100 src_off=0 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=87bce7ba first bytes: fc fc fc fc fc f8 f8 00 04 0c 10 f8 d4 b4 b8 ec
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=87bce7ba bad=0 first bytes: fc fc fc fc fc f8 f8 00 04 0c 10 f8 d4 b4 b8 ec
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x000100 bytes=4096
============================================================
RE-INIT BEFORE CHUNK 1
============================================================
=== RE-INIT BEFORE CHUNK 1 : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE CHUNK 1 : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 1 : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 1 : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE CHUNK 1 : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DDMA CLEAR BEFORE CHUNK 1 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 1 src=4096 dram=0x001100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x001100 4096 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x001100 src_off=4096 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=0e4b2eab first bytes: c4 d4 e0 e4 d8 cc d0 dc e0 e0 dc d4 c8 cc d8 e8
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=0e4b2eab bad=0 first bytes: c4 d4 e0 e4 d8 cc d0 dc e0 e0 dc d4 c8 cc d8 e8
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x001100 bytes=4096
============================================================
RE-INIT BEFORE CHUNK 2
============================================================
=== RE-INIT BEFORE CHUNK 2 : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE CHUNK 2 : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 2 : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 2 : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE CHUNK 2 : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DDMA CLEAR BEFORE CHUNK 2 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 2 src=8192 dram=0x002100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x002100 8192 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x002100 src_off=8192 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=523df25b first bytes: fc fc fc f4 f0 f4 f8 f8 fc 00 04 00 00 04 0c 0c
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=523df25b bad=0 first bytes: fc fc fc f4 f0 f4 f8 f8 fc 00 04 00 00 04 0c 0c
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x002100 bytes=4096
============================================================
RE-INIT BEFORE CHUNK 3
============================================================
=== RE-INIT BEFORE CHUNK 3 : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE CHUNK 3 : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 3 : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 3 : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE CHUNK 3 : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DDMA CLEAR BEFORE CHUNK 3 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 3 src=12288 dram=0x003100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x003100 12288 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x003100 src_off=12288 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=0a675c25 first bytes: e0 e0 e0 e4 e8 e8 ec f0 f0 f4 f8 00 04 08 0c 10
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=0a675c25 bad=0 first bytes: e0 e0 e0 e4 e8 e8 ec f0 f0 f4 f8 00 04 08 0c 10
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x003100 bytes=4096
============================================================
RE-INIT BEFORE CHUNK 4
============================================================
=== RE-INIT BEFORE CHUNK 4 : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE CHUNK 4 : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 4 : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 4 : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE CHUNK 4 : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DDMA CLEAR BEFORE CHUNK 4 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 4 src=16384 dram=0x004100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x004100 16384 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x004100 src_off=16384 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=cc7f41e1 first bytes: b8 bc bc bc bc b8 b4 b0 ac ac ac ac b0 b0 b0 b4
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=cc7f41e1 bad=0 first bytes: b8 bc bc bc bc b8 b4 b0 ac ac ac ac b0 b0 b0 b4
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x004100 bytes=4096
============================================================
RE-INIT BEFORE CHUNK 5
============================================================
=== RE-INIT BEFORE CHUNK 5 : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE CHUNK 5 : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 5 : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 5 : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE CHUNK 5 : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DDMA CLEAR BEFORE CHUNK 5 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 5 src=20480 dram=0x005100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x005100 20480 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x005100 src_off=20480 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=86eb8605 first bytes: f8 fc fc fc 00 00 04 04 08 08 0c 0c 0c 0c 0c 0c
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=86eb8605 bad=0 first bytes: f8 fc fc fc 00 00 04 04 08 08 0c 0c 0c 0c 0c 0c
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x005100 bytes=4096
============================================================
RE-INIT BEFORE CHUNK 6
============================================================
=== RE-INIT BEFORE CHUNK 6 : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE CHUNK 6 : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 6 : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 6 : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE CHUNK 6 : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DDMA CLEAR BEFORE CHUNK 6 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 6 src=24576 dram=0x006100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x006100 24576 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x006100 src_off=24576 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=04d60f55 first bytes: f4 f4 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=04d60f55 bad=0 first bytes: f4 f4 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x006100 bytes=4096
============================================================
RE-INIT BEFORE CHUNK 7
============================================================
=== RE-INIT BEFORE CHUNK 7 : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE CHUNK 7 : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 7 : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE CHUNK 7 : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE CHUNK 7 : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
=== DDMA CLEAR BEFORE CHUNK 7 ===
.\dist\Debug_x64\it8888ctl.exe ddma-clear
=== UPLOAD CHUNK 7 src=28672 dram=0x007100 count=4096 ===
.\dist\Debug_x64\it8888ctl.exe gus-ddma-wav-load-low-safe 0x8240 .\test.wav 0x007100 28672 4096 400 0x03c0 0x01 1500 0
gus-ddma-wav-load-low-safe base=0x8240 wav=.\test.wav dram=0x007100 src_off=28672 samples_req=4096 gain=400 freq=0x03c0 ctrl=0x01 settle=1500ms play_ms=0
dma-info: logical=0xff0000 size=65536 kva=0xffff9500ce328000
wav: rate=44100 channels=1 bits=8 data=477141 block_align=1
encoded samples=4096 hash=c21b3b45 first bytes: 24 24 20 20 20 1c 1c 18 14 0c 08 00 f8 f4 ec e8
host low DMA buffer written with encoded WAV bytes
skipping target preclear; final exact DDMA verify is authoritative
ddma armed ch=1 dir=2 base=0x8390 logical=0xff0000 count=4096 cmd=0x00 mode=0x49 flags=0x00000280
kicking GUS DMA write-only...
verify attempt 1: hash=c21b3b45 bad=0 first bytes: 24 24 20 20 20 1c 1c 18 14 0c 08 00 f8 f4 ec e8
verify OK total_bad=0 bytes=4096 attempts=1
loaded only; pass play_ms > 0 to audition from dram=0x007100 bytes=4096
============================================================
DUMP CHUNK STARTS
============================================================
=== DUMP CHUNK 0 dram=0x000100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x000100 64
gus-dram-dump base=0x8240 addr=0x000100 count=64
000100: fc fc fc fc fc f8 f8 00 04 0c 10 f8 d4 b4 b8 ec |................|
000110: 2c 44 48 4c 30 08 20 54 4c 28 24 24 30 58 74 78 |,DHL0. TL($$0Xtx|
000120: 78 54 1c fc 20 6c 7f 60 4c 78 7f 7f 7f 7f 6c 28 |xT.. l.`Lx....l(|
000130: f8 ec e4 ec 18 2c 0c ec e8 ec f8 f8 04 0c 10 24 |.....,.........$|
=== DUMP CHUNK 1 dram=0x001100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x001100 64
gus-dram-dump base=0x8240 addr=0x001100 count=64
001100: c4 d4 e0 e4 d8 cc d0 dc e0 e0 dc d4 c8 cc d8 e8 |................|
001110: ec e8 dc d4 e4 f0 e8 e4 ec ec e8 e8 ec f0 e8 e4 |................|
001120: f0 fc f0 d8 dc ec e8 dc e0 ec ec d8 d0 e4 ec dc |................|
001130: d4 e8 f4 f0 f0 e4 d8 d4 d8 e0 ec e8 d8 c8 c8 cc |................|
=== DUMP CHUNK 2 dram=0x002100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x002100 64
gus-dram-dump base=0x8240 addr=0x002100 count=64
002100: fc fc fc f4 f0 f4 f8 f8 fc 00 04 00 00 04 0c 0c |................|
002110: 10 14 14 10 0c 08 04 04 00 00 04 0c 10 14 10 10 |................|
002120: 18 20 24 24 24 24 24 20 24 28 28 28 2c 2c 24 24 |. $$$$$ $(((,,$$|
002130: 28 28 24 20 28 30 34 2c 28 28 28 28 2c 34 34 30 |(($ (04,((((,440|
=== DUMP CHUNK 3 dram=0x003100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x003100 64
gus-dram-dump base=0x8240 addr=0x003100 count=64
003100: e0 e0 e0 e4 e8 e8 ec f0 f0 f4 f8 00 04 08 0c 10 |................|
003110: 0c 08 04 04 00 fc fc fc f8 f8 f8 f8 f8 fc fc 00 |................|
003120: 00 fc fc fc fc 00 04 04 04 00 04 08 08 08 0c 0c |................|
003130: 0c 08 08 08 04 00 00 fc fc fc 00 04 08 0c 14 18 |................|
=== DUMP CHUNK 4 dram=0x004100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x004100 64
gus-dram-dump base=0x8240 addr=0x004100 count=64
004100: b8 bc bc bc bc b8 b4 b0 ac ac ac ac b0 b0 b0 b4 |................|
004110: b4 b4 b8 b8 bc c0 c8 d0 dc e4 ec f4 f8 f8 f8 f8 |................|
004120: fc fc 00 04 08 0c 0c 04 00 fc f4 f4 f4 f4 f4 f4 |................|
004130: f4 f4 f0 e8 e4 e4 e0 dc dc dc dc d8 d8 d4 d4 d0 |................|
=== DUMP CHUNK 5 dram=0x005100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x005100 64
gus-dram-dump base=0x8240 addr=0x005100 count=64
005100: f8 fc fc fc 00 00 04 04 08 08 0c 0c 0c 0c 0c 0c |................|
005110: 08 08 08 08 04 04 04 04 04 04 04 04 08 08 08 08 |................|
005120: 08 08 04 04 04 04 04 04 04 04 04 04 08 08 08 08 |................|
005130: 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c |................|
=== DUMP CHUNK 6 dram=0x006100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x006100 64
gus-dram-dump base=0x8240 addr=0x006100 count=64
006100: f4 f4 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 |................|
006110: f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f4 |................|
006120: f4 f4 f4 f4 f4 f0 f0 f0 f0 f4 f4 f0 f0 f0 f0 f0 |................|
006130: f0 f0 ec ec ec ec ec ec ec ec ec ec ec ec e8 ec |................|
=== DUMP CHUNK 7 dram=0x007100 ===
.\dist\Debug_x64\it8888ctl.exe gus-dram-dump 0x8240 0x007100 64
gus-dram-dump base=0x8240 addr=0x007100 count=64
007100: 24 24 20 20 20 1c 1c 18 14 0c 08 00 f8 f4 ec e8 |$$ ...........|
007110: e8 e4 e4 e4 e8 e8 e8 e8 e4 e4 e0 e0 dc d8 d4 d4 |................|
007120: d0 d0 d0 d0 d0 d0 d0 d0 d4 d4 d4 d4 d0 d0 d0 d0 |................|
007130: d0 d4 d4 d4 d4 d8 d8 dc e0 e4 ec f0 f8 fc 00 04 |................|
============================================================
RE-INIT BEFORE PLAYBACK
============================================================
=== RE-INIT BEFORE PLAYBACK : init ===
.\dist\Debug_x64\it8888ctl.exe init
=== RE-INIT BEFORE PLAYBACK : root bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 0 28 3 0x8000 0x8fff
bridge-iowin 0:28.3 0x8000-0x8fff
command old=0x0405 new=0x0405
io base old=0x80 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x80 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE PLAYBACK : it8888 bridge iowin ===
.\dist\Debug_x64\it8888ctl.exe bridge-iowin 3 0 0 0x8000 0x8fff
bridge-iowin 3:0.0 0x8000-0x8fff
command old=0x0407 new=0x0407
io base old=0x81 upper=0x0000 new=0x80 upper=0x0000
io limit old=0x81 upper=0x0000 new=0x80 upper=0x0000
status=3320
=== RE-INIT BEFORE PLAYBACK : cfgwrite 5C ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x5C 4 0xe3008340
=== RE-INIT BEFORE PLAYBACK : cfgwrite 60 ===
.\dist\Debug_x64\it8888ctl.exe cfgwrite 0x60 4 0xe2008240
============================================================
PLAY WHOLE LOADED REGION
============================================================
=== PLAY WHOLE REGION dram=0x000100 bytes=32768 ===
.\dist\Debug_x64\it8888ctl.exe gus-play-loaded-region-safe 0x8240 0x000100 32768 0x03c0 3000
gus-play-loaded-region-safe base=0x8240 dram=0x000100 bytes=32768 freq=0x03c0 play_ms=3000
playing DDMA-loaded region using known-good GF1 voice path: dram=0x000100 count=32768 freq=0x03c0 play_ms=3000
gus-enable-dac reset-readback=0x07
GF1 addr pack: start byte=0x000100 -> 0002:0000, end byte=0x0080ff -> 0101:fe00
auto-stopped voice 0
============================================================
DONE
============================================================
Yep, DDMA works. It's a bit slow for loading, but when it finally loads (lots of safety/analysis on my side), the test.wav (a small section of e1m1) plays correctly. You can just keep playing the pre-loaded ram so yeah it's working well. The only thing it is not doing yet is live MIDI synthesis on the GUS; where .mid note events load patches and trigger GF1 voices in real time. That's a bit more complicated than loading WAV into memory and playing it back, but I can work on it in the near future. I'm sure everyone wants to hear the full e1m1. I think I need a well needed break for a bit. Finally though it's proven pathway.
There is still a ton of work todo. But it freaking works.