Files
slippi-ssbm-asm/Recording/FlushFrameBuffer.asm

65 lines
1.7 KiB
NASM
Raw Normal View History

2019-10-28 23:19:29 -07:00
################################################################################
# Address: 802fef88
################################################################################
.include "Common/Common.s"
.include "Recording/Recording.s"
2019-03-07 01:38:04 -05:00
################################################################################
# Routine: FlushFrameBuffer
# ------------------------------------------------------------------------------
# Description: Flush the buffer once per frame to actually send the frame data
################################################################################
2019-10-23 20:41:32 -07:00
# struct offsets
.set OFST_CMD,0x0
.set OFST_FRAME,OFST_CMD+0x1
.set BOOKEND_STRUCT_SIZE,OFST_FRAME+0x4
# registers
2019-03-07 01:38:04 -05:00
.set REG_Buffer,30
.set REG_BufferOffset,29
2019-10-23 20:41:32 -07:00
.set REG_WritePos,28
2019-03-07 01:38:04 -05:00
backup
#Check if VS Mode
2020-03-27 12:29:17 -07:00
branchl r12,FN_ShouldRecord
2019-03-07 01:38:04 -05:00
cmpwi r3,0x0
beq Injection_Exit
# get buffer
2020-01-16 19:05:39 -08:00
lwz REG_Buffer,primaryDataBuffer(r13)
2019-03-07 01:38:04 -05:00
lwz REG_BufferOffset,bufferOffset(r13)
2019-10-23 23:32:01 -07:00
add REG_WritePos,REG_Buffer,REG_BufferOffset
# check if buffer length is 0
cmpwi REG_BufferOffset,0
beq Injection_Exit
2019-10-23 20:41:32 -07:00
# add frame bookend to transfer buffer
# send data
# initial RNG command byte
2019-10-23 23:32:01 -07:00
li r3,CMD_FRAME_BOOKEND
stb r3,OFST_CMD(REG_WritePos)
2019-10-23 20:41:32 -07:00
# send frame count
2019-10-23 23:32:01 -07:00
lwz r3,frameIndex(r13)
stw r3,OFST_FRAME(REG_WritePos)
2019-03-07 01:38:04 -05:00
2019-10-23 23:32:01 -07:00
# increment buffer offset, we dont need to write it to memory because it's
# about to get cleared anyway
addi REG_BufferOffset,REG_BufferOffset,BOOKEND_STRUCT_SIZE
2019-03-07 01:38:04 -05:00
#------------- Transfer Buffer ------------
mr r3,REG_Buffer
mr r4,REG_BufferOffset
li r5,CONST_ExiWrite
branchl r12,FN_EXITransferBuffer
# reset buffer offset
li r3,0
stw r3,bufferOffset(r13)
Injection_Exit:
restore
lwz r0, 0x0034 (sp)