jak-project/goal_src/engine/load/ramdisk.gc
water111 8faded6400
[decompiler] bitfield support for sound-name (#582)
* fix 64-bit fields in 128-bit bitfields

* support sound-name

* fix merge

* support some more sound stuff in overlord
2021-06-12 12:55:38 -04:00

72 lines
2 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: ramdisk.gc
;; name in dgo: ramdisk
;; dgos: GAME, ENGINE
;; see game/overlord/ramdisk.cpp
;; unlike most other loads, ramdisk actually uses the response buffer of the RPC
;; to send the data.
;; command to load something into the OVERLORD RAMDISK from the DVD
;; use with fno = 1
(deftype ramdisk-rpc-fill (structure)
((rsvd1 int32 :offset-assert 0)
(ee-id int32 :offset-assert 4)
(rsvd2 int32 2 :offset-assert 8)
(filename uint128 :offset-assert 16)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
;; get data in ramdisk on EE.
(deftype ramdisk-rpc-load (structure)
((rsvd int32 :offset-assert 0)
(ee-id int32 :offset-assert 4)
(offset uint32 :offset-assert 8)
(length uint32 :offset-assert 12)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; load file directly to EE.
;; this seems very similar to some functionality in STR.
(deftype ramdisk-rpc-load-to-ee (structure)
((rsvd int32 :offset-assert 0)
(addr int32 :offset-assert 4)
(offset int32 :offset-assert 8)
(length int32 :offset-assert 12)
(filename uint128 :offset-assert 16)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
;; allocate the ramdisk RPC buffer
(define *ramdisk-rpc* (new 'global 'rpc-buffer-pair (the-as uint 32) (the-as uint 1) RPC-RAMDISK))
(define *current-ramdisk-id* 0)
(defun ramdisk-load ((file-id int) (offset uint) (length uint) (buffer pointer))
"Helper to grab load from ramdisk to ee"
(let ((cmd (the-as ramdisk-rpc-load (add-element *ramdisk-rpc*))))
(set! (-> cmd offset) offset)
(set! (-> cmd ee-id) file-id)
(set! (-> cmd length) length)
)
(call *ramdisk-rpc* (the-as uint 0) buffer length)
0
)
(defun ramdisk-sync ()
"Wait for ramdisk RPC to complete."
(sync *ramdisk-rpc* #t)
(none)
)