You push the params on the stack in reverse order in Win32
mov eax,size
push eax
push 0 ; GMEM_FIXED = 0
call GlobalAlloc
Jim
Just what I was looking for, thanks.

Crinkler ran quite happily with the above, but the program crashed with 'memory could not be read' error. A couple of false starts and visits to MSDN (could their docs be more ambiguous?) and I guessed that maybe a call to GlobalLock was needed, even if GlobalAlloc specifies a fixed memory block; GlobalAlloc apparently doesn't return a pointer like HeapAlloc does, but a handle... if you specify GMEM_FIXED, then GlobalLock does nothing but return a pointer to the first address in the block referred to by the handle.

; Dynamic memory allocation
alloc:
; EAX: how many bytes to allocate
push eax
push 0x0040 ; GPTR
call GlobalAlloc
push eax
call GlobalLock
test eax,eax
jnz alloc_R
pop edx ; EIP
pop ebx
leave
alloc_R:
retI am really happy that this is working, I've dabbled with assembly before but never really understood it, this has helped a lot.

Having checked the uFMOD site there doesn't appear to be any restriction on modifying or distributing it, so I've attached the modified object file here, along with a spinny cube.

Haven't got around to thinking about embedding the image and music in the exe yet, and it's still a bit large for what it is, but I'm not that worried about size on my first effort.
I think I've already credited most people, but anyway:
Frank D. Luna's "Introduction to 3D Game Programming"
directxtutorial.com
Unknown Author of the song (one that was lying around on my hd, believe it is titled "Rose")
Asterix and Quantum for uFMOD
Everyone here for all their help.

Oh, and this ufmod is for win32 using winmm.