;;-*-Lisp-*- (in-package goal) ;; definition for function get-current-time (defun get-current-time () (-> *display* base-frame-counter) ) ;; definition for function get-integral-current-time (defun get-integral-current-time () (-> *display* integral-frame-counter) ) ;; definition for method 9 of type display (defmethod set-time-ratios display ((obj display) (slowdown float)) (let ((ratio (fmin 4.0 slowdown))) (set! (-> obj time-ratio) ratio) (let ((v1-0 (get-video-mode))) (cond ((= v1-0 'pal) (set! (-> obj time-adjust-ratio) (* 1.2 ratio)) (set! (-> obj seconds-per-frame) (* 0.02 ratio)) (set! (-> obj frames-per-second) (* 50.0 (/ 1.0 ratio))) (set! (-> obj time-factor) 6.0) ) (else (set! (-> obj time-adjust-ratio) ratio) (set! (-> obj seconds-per-frame) (* 0.016666668 ratio)) (set! (-> obj frames-per-second) (* 60.0 (/ 1.0 ratio))) (set! (-> obj time-factor) 5.0) ) ) ) ) (-> obj time-ratio) ) ;; definition for function set-display-env (defun set-display-env ((env display-env) (psm int) (width int) (height int) (dx int) (dy int) (fbp int) ) (set! (-> env pmode) (new 'static 'gs-pmode :en1 #x1 :mmod #x1 :slbg #x1 :alp #xff) ) (set! (-> env smode2) (new 'static 'gs-smode2 :int #x1 :ffmd #x1)) (set! (-> env dspfb) (new 'static 'gs-display-fb :psm psm :fbw (sar width 6) :fbp fbp) ) (set! (-> env display) (new 'static 'gs-display :dw #x9ff :dy (+ dy 50) :dx (+ (* dx (/ 2560 width)) 652) :dh (+ (shl height 1) -1) :magh (+ (/ (+ width 2559) width) -1) ) ) (set! (-> env bgcolor) (new 'static 'gs-bgcolor)) env ) ;; definition for function set-draw-env (defun set-draw-env ((env draw-env) (psm int) (width int) (height int) (ztest int) (zpsm int) (fbp int) ) (set! (-> env frame1addr) (gs-reg64 frame-1)) (set! (-> env frame1) (new 'static 'gs-frame :fbw (sar width 6) :psm (logand psm 15) :fbp fbp) ) (set! (-> env dtheaddr) (gs-reg64 dthe)) (cond ((zero? (logand psm 2)) (set! (-> env dthe) (new 'static 'gs-dthe)) (let ((v1-7 0)) ) ) (else (set! (-> env dthe) (new 'static 'gs-dthe :dthe #x1)) ) ) (set! (-> env zbuf1addr) (gs-reg64 zbuf-1)) (set! (-> env zbuf1) (new 'static 'gs-zbuf :zbp #x1c0 :psm (logand zpsm 15) :zmsk (if (zero? ztest) 1 0) ) ) (set! (-> env test1addr) (gs-reg64 test-1)) (cond ((zero? ztest) (set! (-> env test1) (new 'static 'gs-test)) (let ((v1-16 0)) ) ) (else (set! (-> env test1) (new 'static 'gs-test :zte #x1 :ztst ztest)) ) ) (set! (-> env xyoffset1addr) (gs-reg64 xyoffset-1)) (set! (-> env xyoffset1) (new 'static 'gs-xy-offset :ofx #x7000 :ofy (shl (-> *video-parms* screen-miny) 4) ) ) (set! (-> env scissor1addr) (gs-reg64 scissor-1)) (set! (-> env scissor1) (new 'static 'gs-scissor :scax1 (+ width -1) :scay1 (+ height -1)) ) (set! (-> env prmodecontaddr) (gs-reg64 prmodecont)) (set! (-> env prmodecont) (new 'static 'gs-prmode-cont :ac #x1)) (set! (-> env colclampaddr) (gs-reg64 colclamp)) (set! (-> env colclamp) (new 'static 'gs-color-clamp :clamp #x1)) env ) ;; definition for function set-draw-env-offset (defun set-draw-env-offset ((env draw-env) (x int) (y int) (arg3 int)) (set! (-> env xyoffset1) (new 'static 'gs-xy-offset :ofx (shl (- x (the-as int (shr (the-as int (+ (the-as uint (-> env scissor1 scax1)) (the-as uint 1))) 1))) 4) :ofy (+ (shl (- y (the-as int (shr (the-as int (+ (the-as uint (-> env scissor1 scay1)) (the-as uint 1))) 1))) 4) (if (zero? arg3) 0 8)) ) ) env ) ;; definition for function put-display-alpha-env ;; INFO: Return type mismatch gs-display vs none. (defun put-display-alpha-env ((arg0 display-env)) (let ((v1-0 (the-as gs-bank #x12000000))) (set! (-> v1-0 dspfb1) (-> arg0 dspfb)) (set! (-> v1-0 display1) (-> arg0 display)) ) (none) ) ;; definition for function set-display ;; Used lq/sq (defun set-display ((disp display) (psm int) (w int) (h int) (ztest int) (zpsm int)) (let ((v1-0 (-> disp gif-tag0))) (set! (-> v1-0 tag) (new 'static 'gif-tag64 :nloop #x8 :eop #x1 :nreg #x1)) (set! (-> v1-0 regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d))) ) (set! (-> disp gif-tag1 qword) (-> disp gif-tag0 qword)) (set! (-> disp gif-tag2 qword) (-> disp gif-tag0 qword)) (set-display-env (-> disp display-env0) psm w h (-> *video-parms* display-dx) (-> *video-parms* display-dy) 320 ) (set-display-env (-> disp display-env1) psm w h (-> *video-parms* display-dx) (-> *video-parms* display-dy) 384 ) (set-draw-env (-> disp draw0) psm w h ztest zpsm 384) (set-draw-env (-> disp draw1) psm w h ztest zpsm 320) (set! (-> disp base-frame-counter) (the-as uint #x493e0)) (set! (-> disp game-frame-counter) (the-as uint #x493e0)) (set! (-> disp real-frame-counter) (the-as uint #x493e0)) (set! (-> disp part-frame-counter) (the-as uint #x493e0)) (set! (-> disp integral-frame-counter) (the-as uint #x493e0)) (set! (-> disp real-integral-frame-counter) (the-as uint #x493e0)) (set! (-> disp old-base-frame-counter) (+ (-> disp base-frame-counter) -1)) (set! (-> disp old-game-frame-counter) (+ (-> disp game-frame-counter) -1)) (set! (-> disp old-real-frame-counter) (+ (-> disp real-frame-counter) -1)) (set! (-> disp old-integral-frame-counter) (+ (-> disp integral-frame-counter) -1) ) (set! (-> disp old-real-integral-frame-counter) (+ (-> disp real-integral-frame-counter) -1) ) (set! (-> disp old-part-frame-counter) (+ (-> disp part-frame-counter) -1)) (set! (-> disp old-actual-frame-counter) (+ (-> disp actual-frame-counter) -1) ) (set! (-> disp old-real-actual-frame-counter) (+ (-> disp real-actual-frame-counter) -1) ) disp ) ;; definition for function set-display2 (defun set-display2 ((disp display) (psm int) (w int) (h int) (ztest int) (zpsm int)) (set-display-env (-> disp display-env0) psm w h (-> *video-parms* display-dx) (-> *video-parms* display-dy) 320 ) (set-display-env (-> disp display-env1) psm w h (-> *video-parms* display-dx) (-> *video-parms* display-dy) 384 ) (set-draw-env (-> disp draw0) psm w h ztest zpsm 384) (set-draw-env (-> disp draw1) psm w h ztest zpsm 320) disp ) ;; definition for function allocate-dma-buffers (defun allocate-dma-buffers ((arg0 display)) (when (zero? (-> arg0 frames 0 frame calc-buf)) (set! (-> arg0 frames 0 frame calc-buf) (new 'global 'dma-buffer 10000)) (set! (-> arg0 frames 1 frame calc-buf) (new 'global 'dma-buffer 10000)) (set! (-> arg0 frames 0 frame global-buf) (new 'global 'dma-buffer #x1ac000)) (set! (-> arg0 frames 1 frame global-buf) (new 'global 'dma-buffer #x1ac000)) (when *debug-segment* (set! (-> arg0 frames 0 frame debug-buf) (new 'debug 'dma-buffer #x800000)) (set! (-> arg0 frames 1 frame debug-buf) (new 'debug 'dma-buffer #x800000)) ) ) arg0 ) ;; definition for symbol *font-context*, type font-context (define *font-context* (new 'global 'font-context *font-default-matrix* 0 24 0.0 0 (the-as uint 3)) ) ;; definition for symbol *pause-context*, type font-context (define *pause-context* (new 'global 'font-context *font-default-matrix* 256 170 0.0 3 (the-as uint 3) ) ) ;; definition for method 11 of type profile-bar (defmethod add-frame profile-bar ((obj profile-bar) (name symbol) (color rgba)) (if *debug-segment* (let ((new-frame (-> obj data (-> obj profile-frame-count)))) (set! (-> obj profile-frame-count) (+ (-> obj profile-frame-count) 1)) (set! (-> new-frame name) name) (set! (-> new-frame time-stamp) (timer-count (the-as timer-bank #x10000800)) ) (set! (-> new-frame color) color) new-frame ) ) ) ;; definition for method 10 of type profile-bar (defmethod reset profile-bar ((obj profile-bar)) (set! (-> obj profile-frame-count) 0) (add-frame obj 'start (new 'static 'rgba :r #x40 :b #x40 :a #x80)) obj ) ;; definition for method 12 of type profile-bar (defmethod add-end-frame profile-bar ((obj profile-bar) (name symbol) (color rgba)) (let ((new-frame (-> obj data (-> obj profile-frame-count)))) (set! (-> obj profile-frame-count) (+ (-> obj profile-frame-count) 1)) (set! (-> new-frame name) name) (set! (-> new-frame time-stamp) (the-as uint *ticks-per-frame*)) (set! (-> new-frame color) color) new-frame ) ) ;; definition for symbol *profile-x*, type int (define *profile-x* 1808) ;; definition for symbol *profile-y*, type int (define *profile-y* (+ (-> *video-parms* screen-miny) 8)) ;; definition for symbol *profile-w*, type int (define *profile-w* 416) ;; definition for symbol *profile-h*, type int (define *profile-h* 8) ;; definition for symbol *profile-ticks*, type symbol (define *profile-ticks* #f) ;; definition for method 13 of type profile-bar (defmethod draw profile-bar ((obj profile-bar) (buf dma-buffer) (bar-pos int)) (let ((height (the int (* 8.0 (-> *video-parms* relative-y-scale))))) (set! *profile-y* (+ (-> *video-parms* screen-miny) height)) (set! *profile-h* height) ) (let ((block-idx 1) (block-count (-> obj profile-frame-count)) (left (shl *profile-x* 4)) (end-time 0) (worst-time-cache (new 'static 'array uint32 2 #x0 #x0)) ) (let ((screen-y (the int (* (the float bar-pos) (-> *video-parms* relative-y-scale))) ) ) (let* ((t1-0 buf) (direct-tag (the-as dma-packet (-> t1-0 base))) ) (set! (-> direct-tag dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc (+ (shl block-count 1) -1) ) ) (set! (-> direct-tag vif0) (new 'static 'vif-tag)) (set! (-> direct-tag vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm (+ (shl block-count 1) -1) ) ) (set! (-> t1-0 base) (&+ (the-as pointer direct-tag) 16)) ) (let* ((t1-1 buf) (start-gif-tag (the-as gs-gif-tag (-> t1-1 base))) ) (set! (-> start-gif-tag tag) (new 'static 'gif-tag64 :eop #x1 :flg #x1 :nreg #x4 :nloop (+ block-count -1) ) ) (set! (-> start-gif-tag regs) (new 'static 'gif-tag-regs :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2) :regs3 (gif-reg-id xyzf2) ) ) (set! (-> t1-1 base) (&+ (the-as pointer start-gif-tag) 16)) ) (while (< block-idx block-count) (let ((block (-> obj data block-idx))) (let* ((t2-4 buf) (t3-8 (-> t2-4 base)) ) (set! (-> (the-as (pointer gs-prim) t3-8) 0) (new 'static 'gs-prim :prim (gs-prim-type sprite) :abe #x1) ) (set! (-> (the-as (pointer uint64) t3-8) 1) (the-as uint (-> block color)) ) (set! (-> (the-as (pointer gs-xyzf) t3-8) 2) (new 'static 'gs-xyzf :z #x3fffff :y (shl (+ *profile-y* screen-y) 4) :x left ) ) (set! (-> t2-4 base) (&+ t3-8 24)) ) (if (!= (-> block name) 'end-draw) (set! end-time (the-as int (-> block time-stamp))) ) (set! left (shl (+ *profile-x* (the-as int (/ (* (-> block time-stamp) (the-as uint *profile-w*)) (the-as uint *ticks-per-frame*) ) ) ) 4 ) ) ) (let* ((t1-8 buf) (t2-8 (-> t1-8 base)) ) (set! (-> (the-as (pointer gs-xyzf) t2-8) 0) (new 'static 'gs-xyzf :z #x3fffff :y (shl (+ (+ *profile-y* screen-y) *profile-h*) 4) :x left ) ) (set! (-> t1-8 base) (&+ t2-8 8)) ) (+! block-idx 1) ) ) (when (or (< 75 (the-as int (- (-> *display* real-frame-counter) (-> obj cache-time))) ) (>= end-time (the-as int (-> worst-time-cache (/ bar-pos 10)))) ) (set! (-> worst-time-cache (/ bar-pos 10)) (the-as uint end-time)) (set! (-> obj cache-time) (-> *display* real-frame-counter)) ) (cond (*profile-ticks* (let ((s3-0 draw-string-xy)) (format (clear *temp-string*) "~5D" (-> worst-time-cache (/ bar-pos 10))) (s3-0 *temp-string* buf 488 (+ bar-pos 8) 0 17) ) (the float (-> worst-time-cache (/ bar-pos 10))) ) (else (let ((f30-0 (/ (* 104.0 (the float (-> worst-time-cache (/ bar-pos 10)))) (the float *ticks-per-frame*) ) ) ) (let ((s4-1 draw-string-xy)) (format (clear *temp-string*) "~5,,2f" f30-0) (s4-1 *temp-string* buf 488 (+ bar-pos 8) (if (>= f30-0 100.0) 3 0 ) 17 ) ) f30-0 ) ) ) ) ) ;; failed to figure out what this is: (when (not *debug-segment*) (set! (-> profile-bar method-table 11) nothing) (set! (-> profile-bar method-table 12) nothing) (set! (-> profile-bar method-table 10) nothing) (set! (-> profile-bar method-table 13) nothing) ) ;; definition for function draw-sprite2d-xy ;; INFO: Return type mismatch pointer vs none. (defun draw-sprite2d-xy ((buf dma-buffer) (x int) (y int) (w int) (h int) (color rgba)) (let* ((context ((method-of-type draw-context new) (the-as symbol (new 'stack-no-clear 'draw-context)) draw-context x y w h color ) ) (draw-x (max 1792 (min 2304 (+ (-> context orgx) 1792)))) (draw-y (max (min (+ (-> context orgy) (-> *video-parms* screen-miny)) (-> *video-parms* screen-maxy) ) (-> *video-parms* screen-miny) ) ) (draw-w (-> context width)) (draw-h (-> context height)) (end-dma (the-as dma-packet (-> buf base))) ) (let* ((a2-2 buf) (dma (the-as dma-packet (-> a2-2 base))) ) (set! (-> dma dma) (new 'static 'dma-tag :id (dma-tag-id cnt))) (set! (-> dma vif0) (new 'static 'vif-tag)) (set! (-> dma vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1)) (set! (-> a2-2 base) (&+ (the-as pointer dma) 16)) ) (let* ((a2-3 buf) (gif (the-as gs-gif-tag (-> a2-3 base))) ) (set! (-> gif tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :flg #x1 :nreg #x4) ) (set! (-> gif regs) (new 'static 'gif-tag-regs :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2) :regs3 (gif-reg-id xyzf2) ) ) (set! (-> a2-3 base) (&+ (the-as pointer gif) 16)) ) (let* ((a2-4 buf) (gif-buf (-> a2-4 base)) ) (set! (-> (the-as (pointer gs-prim) gif-buf) 0) (new 'static 'gs-prim :prim (gs-prim-type sprite) :abe #x1) ) (set! (-> (the-as (pointer gs-rgbaq) gif-buf) 1) (the-as gs-rgbaq (-> context color 0)) ) (set! (-> (the-as (pointer gs-xyzf) gif-buf) 2) (new 'static 'gs-xyzf :z #x3fffff :y (shl draw-y 4) :x (shl draw-x 4)) ) (set! (-> (the-as (pointer gs-xyzf) gif-buf) 3) (new 'static 'gs-xyzf :z #x3fffff :y (shl (max (min (+ draw-y draw-h) (-> *video-parms* screen-maxy)) (-> *video-parms* screen-miny)) 4) :x (shl (max 1792 (min 2304 (+ draw-x draw-w))) 4) ) ) (set! (-> a2-4 base) (&+ gif-buf 32)) ) (let ((total-qwc (sar (&+ (- -16 (the-as int (the-as pointer end-dma))) (-> buf base)) 4) ) ) (cond ((nonzero? total-qwc) (set! (-> (the-as (pointer dma-tag) end-dma) 0) (logior (-> (the-as (pointer dma-tag) end-dma) 0) (the-as uint (new 'static 'dma-tag :qwc total-qwc)) ) ) (set! (-> (the-as (pointer dma-tag) end-dma) 1) (logior (-> (the-as (pointer dma-tag) end-dma) 1) (the-as uint (shl (shr (shl total-qwc 48) 48) 32)) ) ) ) (else (set! (-> buf base) (the-as pointer end-dma)) ) ) ) ) (none) ) ;; definition for function draw-quad2d ;; INFO: Return type mismatch pointer vs none. (defun draw-quad2d ((buf dma-buffer) (context draw-context)) (let ((draw-x (max 1792 (min 2304 (+ (-> context orgx) 1792)))) (draw-y (max (min (+ (-> context orgy) (-> *video-parms* screen-miny)) (-> *video-parms* screen-maxy) ) (-> *video-parms* screen-miny) ) ) (draw-w (-> context width)) (draw-h (-> context height)) (end-dma (-> buf base)) ) (let* ((t0-0 buf) (dma (the-as dma-packet (-> t0-0 base))) ) (set! (-> dma dma) (new 'static 'dma-tag :id (dma-tag-id cnt))) (set! (-> dma vif0) (new 'static 'vif-tag)) (set! (-> dma vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1)) (set! (-> t0-0 base) (&+ (the-as pointer dma) 16)) ) (let* ((t0-1 buf) (gif (the-as gs-gif-tag (-> t0-1 base))) ) (set! (-> gif tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :flg #x1 :nreg #x9) ) (set! (-> gif regs) (new 'static 'gif-tag-regs :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2) :regs3 (gif-reg-id rgbaq) :regs4 (gif-reg-id xyzf2) :regs5 (gif-reg-id rgbaq) :regs6 (gif-reg-id xyzf2) :regs7 (gif-reg-id rgbaq) :regs8 (gif-reg-id xyzf2) ) ) (set! (-> t0-1 base) (&+ (the-as pointer gif) 16)) ) (let* ((t0-2 buf) (gif-buf (-> t0-2 base)) ) (set! (-> (the-as (pointer gs-prim) gif-buf) 0) (new 'static 'gs-prim :prim (gs-prim-type tri-strip) :iip #x1 :abe #x1) ) (set! (-> (the-as (pointer gs-rgbaq) gif-buf) 1) (the-as gs-rgbaq (-> context color 0)) ) (set! (-> (the-as (pointer gs-xyzf) gif-buf) 2) (new 'static 'gs-xyzf :y (shl draw-y 4) :x (shl draw-x 4)) ) (set! (-> (the-as (pointer gs-rgbaq) gif-buf) 3) (the-as gs-rgbaq (-> context color 1)) ) (set! (-> (the-as (pointer gs-xyzf) gif-buf) 4) (new 'static 'gs-xyzf :y (shl draw-y 4) :x (shl (max 1792 (min 2304 (+ draw-x draw-w))) 4) ) ) (set! (-> (the-as (pointer gs-rgbaq) gif-buf) 5) (the-as gs-rgbaq (-> context color 2)) ) (set! (-> (the-as (pointer gs-xyzf) gif-buf) 6) (new 'static 'gs-xyzf :y (shl (max (min (+ draw-y draw-h) (-> *video-parms* screen-maxy)) (-> *video-parms* screen-miny)) 4) :x (shl draw-x 4) ) ) (set! (-> (the-as (pointer gs-rgbaq) gif-buf) 7) (the-as gs-rgbaq (-> context color 3)) ) (set! (-> (the-as (pointer gs-xyzf) gif-buf) 8) (new 'static 'gs-xyzf :y (shl (max (min (+ draw-y draw-h) (-> *video-parms* screen-maxy)) (-> *video-parms* screen-miny)) 4) :x (shl (max 1792 (min 2304 (+ draw-x draw-w))) 4) ) ) (set! (-> (the-as (pointer uint64) gif-buf) 9) (the-as uint 0)) (set! (-> t0-2 base) (&+ gif-buf 80)) ) (let ((total-qwc (sar (&+ (- -16 (the-as int end-dma)) (-> buf base)) 4))) (cond ((nonzero? total-qwc) (set! (-> (the-as (pointer dma-tag) end-dma) 0) (logior (-> (the-as (pointer dma-tag) end-dma) 0) (the-as uint (new 'static 'dma-tag :qwc total-qwc)) ) ) (set! (-> (the-as (pointer dma-tag) end-dma) 1) (logior (-> (the-as (pointer dma-tag) end-dma) 1) (the-as uint (shl (shr (shl total-qwc 48) 48) 32)) ) ) ) (else (set! (-> buf base) end-dma) ) ) ) ) (none) ) ;; definition for function screen-gradient (defun screen-gradient ((arg0 dma-buffer) (arg1 rgba) (arg2 rgba) (arg3 rgba) (arg4 rgba)) (let ((a1-2 ((method-of-type draw-context new) (the-as symbol (new 'stack-no-clear 'draw-context)) draw-context 0 0 512 224 (the-as rgba 0) ) ) ) (set! (-> a1-2 color 0) arg1) (set! (-> a1-2 color 1) arg2) (set! (-> a1-2 color 2) arg3) (set! (-> a1-2 color 3) arg4) (draw-quad2d arg0 a1-2) ) (none) ) ;; definition for function vif1-handler-debug ;; ERROR: function was not converted to expressions. Cannot decompile. ;; definition for function vif1-handler ;; ERROR: function was not converted to expressions. Cannot decompile. ;; failed to figure out what this is: (install-handler 5 (if *debug-segment* vif1-handler-debug vif1-handler ) ) ;; failed to figure out what this is: (when #f (set! *vblank-counter* 0) (set! vblank-handler (the-as (function int) L5)) (install-handler 3 vblank-handler) ) ;; definition for symbol *oddeven*, type int (define *oddeven* 0) ;; definition for function set-display-gs-state (defun set-display-gs-state ((dma-buf dma-buffer) (fbp int) (scx int) (scy int) (fb-msk int) (psm int)) (let ((fbw (sar (+ scx 63) 6))) (let* ((v1-1 dma-buf) (dma (the-as dma-packet (-> v1-1 base))) ) (set! (-> dma dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt))) (set! (-> dma vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1)) (set! (-> dma vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1) ) (set! (-> v1-1 base) (&+ (the-as pointer dma) 16)) ) (let* ((v1-2 dma-buf) (gif (the-as gs-gif-tag (-> v1-2 base))) ) (set! (-> gif tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7)) (set! (-> gif regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d) :regs1 (gif-reg-id a+d) :regs2 (gif-reg-id a+d) :regs3 (gif-reg-id a+d) :regs4 (gif-reg-id a+d) :regs5 (gif-reg-id a+d) :regs6 (gif-reg-id a+d) :regs7 (gif-reg-id a+d) :regs8 (gif-reg-id a+d) :regs9 (gif-reg-id a+d) :regs10 (gif-reg-id a+d) :regs11 (gif-reg-id a+d) :regs12 (gif-reg-id a+d) :regs13 (gif-reg-id a+d) :regs14 (gif-reg-id a+d) :regs15 (gif-reg-id a+d) ) ) (set! (-> v1-2 base) (&+ (the-as pointer gif) 16)) ) (let* ((v1-3 dma-buf) (gif-buf (-> v1-3 base)) ) (set! (-> (the-as (pointer gs-scissor) gif-buf) 0) (new 'static 'gs-scissor :scax1 (+ scx -1) :scay1 (+ scy -1)) ) (set! (-> (the-as (pointer gs-reg64) gif-buf) 1) (gs-reg64 scissor-1)) (set! (-> (the-as (pointer gs-xy-offset) gif-buf) 2) (new 'static 'gs-xy-offset) ) (set! (-> (the-as (pointer gs-reg64) gif-buf) 3) (gs-reg64 xyoffset-1)) (set! (-> (the-as (pointer gs-frame) gif-buf) 4) (new 'static 'gs-frame :fbp fbp :fbw fbw :psm psm :fbmsk fb-msk) ) (set! (-> (the-as (pointer gs-reg64) gif-buf) 5) (gs-reg64 frame-1)) (set! (-> (the-as (pointer gs-test) gif-buf) 6) (new 'static 'gs-test :zte #x1 :ztst #x1) ) (set! (-> (the-as (pointer gs-reg64) gif-buf) 7) (gs-reg64 test-1)) (set! (-> (the-as (pointer gs-texa) gif-buf) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80) ) (set! (-> (the-as (pointer gs-reg64) gif-buf) 9) (gs-reg64 texa)) (set! (-> (the-as (pointer gs-zbuf) gif-buf) 10) (new 'static 'gs-zbuf :zbp #x1c0 :psm #x1 :zmsk #x1) ) (set! (-> (the-as (pointer gs-reg64) gif-buf) 11) (gs-reg64 zbuf-1)) (set! (-> (the-as (pointer uint64) gif-buf) 12) (the-as uint 0)) (set! (-> (the-as (pointer gs-reg64) gif-buf) 13) (gs-reg64 texflush)) (set! (-> v1-3 base) (&+ gif-buf 112)) ) ) dma-buf ) ;; definition for function set-display-gs-state-offset (defun set-display-gs-state-offset ((dma-buf dma-buffer) (fbp int) (width int) (height int) (fb-msk int) (psm int) (off-x int) (off-y int) ) (let ((fbw (sar (+ width 63) 6))) (let* ((v1-1 dma-buf) (dma (the-as dma-packet (-> v1-1 base))) ) (set! (-> dma dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt))) (set! (-> dma vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1)) (set! (-> dma vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1) ) (set! (-> v1-1 base) (&+ (the-as pointer dma) 16)) ) (let* ((v1-2 dma-buf) (gif (the-as gs-gif-tag (-> v1-2 base))) ) (set! (-> gif tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7)) (set! (-> gif regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d) :regs1 (gif-reg-id a+d) :regs2 (gif-reg-id a+d) :regs3 (gif-reg-id a+d) :regs4 (gif-reg-id a+d) :regs5 (gif-reg-id a+d) :regs6 (gif-reg-id a+d) :regs7 (gif-reg-id a+d) :regs8 (gif-reg-id a+d) :regs9 (gif-reg-id a+d) :regs10 (gif-reg-id a+d) :regs11 (gif-reg-id a+d) :regs12 (gif-reg-id a+d) :regs13 (gif-reg-id a+d) :regs14 (gif-reg-id a+d) :regs15 (gif-reg-id a+d) ) ) (set! (-> v1-2 base) (&+ (the-as pointer gif) 16)) ) (let* ((v1-3 dma-buf) (gif-data (the-as (pointer uint64) (-> v1-3 base))) ) (set! (-> (the-as (pointer gs-scissor) gif-data) 0) (new 'static 'gs-scissor :scax1 (+ width -1) :scay1 (+ height -1)) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 1) (gs-reg64 scissor-1)) (set! (-> (the-as (pointer gs-xy-offset) gif-data) 2) (new 'static 'gs-xy-offset :ofx (shl off-x 4) :ofy (shl off-y 4)) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 3) (gs-reg64 xyoffset-1)) (set! (-> (the-as (pointer gs-frame) gif-data) 4) (new 'static 'gs-frame :fbp fbp :fbw fbw :psm psm :fbmsk fb-msk) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 5) (gs-reg64 frame-1)) (set! (-> (the-as (pointer gs-test) gif-data) 6) (new 'static 'gs-test :zte #x1 :ztst #x1) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 7) (gs-reg64 test-1)) (set! (-> (the-as (pointer gs-texa) gif-data) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 9) (gs-reg64 texa)) (set! (-> (the-as (pointer gs-zbuf) gif-data) 10) (new 'static 'gs-zbuf :zbp #x1c0 :psm #x1 :zmsk #x1) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 11) (gs-reg64 zbuf-1)) (set! (-> gif-data 12) (the-as uint 0)) (set! (-> (the-as (pointer gs-reg64) gif-data) 13) (gs-reg64 texflush)) (set! (-> v1-3 base) (&+ (the-as pointer gif-data) 112)) ) ) dma-buf ) ;; definition for function reset-display-gs-state ;; INFO: Return type mismatch display vs none. (defun reset-display-gs-state ((disp display) (dma-buf dma-buffer) (oddeven int)) (let* ((onscreen (-> disp on-screen)) (hoff (shl oddeven 3)) (fbp (-> disp frames onscreen draw frame1 fbp)) ) (let* ((a3-1 dma-buf) (dma (the-as dma-packet (-> a3-1 base))) ) (set! (-> dma dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt))) (set! (-> dma vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1)) (set! (-> dma vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1) ) (set! (-> a3-1 base) (&+ (the-as pointer dma) 16)) ) (let* ((a3-2 dma-buf) (gif (the-as gs-gif-tag (-> a3-2 base))) ) (set! (-> gif tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7)) (set! (-> gif regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d) :regs1 (gif-reg-id a+d) :regs2 (gif-reg-id a+d) :regs3 (gif-reg-id a+d) :regs4 (gif-reg-id a+d) :regs5 (gif-reg-id a+d) :regs6 (gif-reg-id a+d) :regs7 (gif-reg-id a+d) :regs8 (gif-reg-id a+d) :regs9 (gif-reg-id a+d) :regs10 (gif-reg-id a+d) :regs11 (gif-reg-id a+d) :regs12 (gif-reg-id a+d) :regs13 (gif-reg-id a+d) :regs14 (gif-reg-id a+d) :regs15 (gif-reg-id a+d) ) ) (set! (-> a3-2 base) (&+ (the-as pointer gif) 16)) ) (let ((gif-data (the-as (pointer uint64) (-> dma-buf base)))) (set! (-> (the-as (pointer gs-scissor) gif-data) 0) (new 'static 'gs-scissor :scax1 #x1ff :scay1 (-> *video-parms* screen-masky) ) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 1) (gs-reg64 scissor-1)) (set! (-> (the-as (pointer gs-xy-offset) gif-data) 2) (new 'static 'gs-xy-offset :ofx #x7000 :ofy (+ (shl (-> *video-parms* screen-miny) 4) hoff) ) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 3) (gs-reg64 xyoffset-1)) (set! (-> (the-as (pointer gs-frame) gif-data) 4) (new 'static 'gs-frame :fbw #x8 :fbp (the-as int fbp)) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 5) (gs-reg64 frame-1)) (set! (-> (the-as (pointer gs-test) gif-data) 6) (new 'static 'gs-test :atst #x7 :zte #x1 :ztst #x2) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 7) (gs-reg64 test-1)) (set! (-> (the-as (pointer gs-texa) gif-data) 8) (new 'static 'gs-texa :ta1 #x80) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 9) (gs-reg64 texa)) (set! (-> (the-as (pointer gs-zbuf) gif-data) 10) (new 'static 'gs-zbuf :zbp #x1c0 :psm #x1) ) (set! (-> (the-as (pointer gs-reg64) gif-data) 11) (gs-reg64 zbuf-1)) (set! (-> gif-data 12) (the-as uint 0)) (set! (-> (the-as (pointer gs-reg64) gif-data) 13) (gs-reg64 texflush)) (set! (-> dma-buf base) (&+ (the-as pointer gif-data) 112)) ) ) (none) ) ;; definition for symbol *vu0-dma-list*, type dma-buffer (define *vu0-dma-list* (new 'global 'dma-buffer 4096)) ;; definition for symbol *display*, type display (define *display* (new 'global 'display 0 512 256 2 49)) ;; failed to figure out what this is: (allocate-dma-buffers *display*)