dreamcast/storequeue.cpp
Zack Buhman 963aa75990 scene: rotating triangle
This now works on real dreamcast hardware.
2023-12-04 09:53:27 +08:00

36 lines
1008 B
C++

#include "sh7091.h"
#include "memorymap.h"
void sq_transfer_32byte(volatile void * dst)
{
// dst typically 0x10000000 (ta polygon converter)
//sh7091.CCN.QACR0 = ((reinterpret_cast<uint32_t>(dst) >> 26) & 0b111) << 2;
sh7091.CCN.QACR0 = 0xac;
// start 32-byte transfer from store queue 0 (SQ0) to QACR0
asm volatile ("pref @%0"
: // output
: "r" (&store_queue[0]) // input
);
}
void sq_transfer_64byte(volatile void * dst)
{
// dst typically 0x10000000 (ta polygon converter)
sh7091.CCN.QACR0 = ((reinterpret_cast<uint32_t>(dst) >> 26) & 0b111) << 2;
sh7091.CCN.QACR1 = ((reinterpret_cast<uint32_t>(dst) >> 26) & 0b111) << 2;
// start 32-byte transfer from store queue 0 (SQ0) to QACR0
asm volatile ("pref @%0"
: // output
: "r" (&store_queue[0]) // input
);
// start 32-byte transfer from store queue 1 (SQ1) to QACR1
asm volatile ("pref @%0"
: // output
: "r" (&store_queue[8]) // input
);
}