From 5eab2aecdd2682712ba763e4c6d613be52e174ae Mon Sep 17 00:00:00 2001 From: viciious Date: Sun, 5 Nov 2023 23:22:23 +0300 Subject: [PATCH] Code refactoring --- marshw.c | 9 +++++++++ marshw.h | 3 +++ p_setup.c | 6 +----- src-md/crt0.s | 21 ++++++++++----------- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/marshw.c b/marshw.c index 83a08fd0a..c0304e53c 100644 --- a/marshw.c +++ b/marshw.c @@ -449,6 +449,15 @@ void Mars_MCDFlushSfx(void) while (MARS_SYS_COMM0); } +void Mars_CopyLLongs(int numllongs) +{ + /* transfer nodes to the MD */ + while (MARS_SYS_COMM0); + MARS_SYS_COMM2 = numllongs; + MARS_SYS_COMM0 = 0x2400; + while (MARS_SYS_COMM0); +} + void Mars_StopTrack(void) { while (MARS_SYS_COMM0); diff --git a/marshw.h b/marshw.h index e0770dabb..99f4c8446 100644 --- a/marshw.h +++ b/marshw.h @@ -153,6 +153,9 @@ void Mars_MCDStopSfx(uint8_t src_id); void Mars_MCDFlushSfx(void); void Mars_MCDLoadSfxFileOfs(uint16_t start_id, int numsfx, const char *name, int *offsetlen); +// copies numllongs number of 64-bit values from the framebufer into MD RAM +void Mars_CopyLLongs(int numllongs); + void Mars_MCDSetFileCache(int length); void *Mars_MCDGetFileCache(int length); diff --git a/p_setup.c b/p_setup.c index 12fea9bf3..04702a66b 100644 --- a/p_setup.c +++ b/p_setup.c @@ -243,11 +243,7 @@ void P_LoadNodes (int lump) } #ifdef MARS - /* transfer nodes to the MD */ - while (MARS_SYS_COMM0); - MARS_SYS_COMM2 = numnodes; - MARS_SYS_COMM0 = 0x2400; - while (MARS_SYS_COMM0); + Mars_CopyLLongs(numnodes * 2); #endif } diff --git a/src-md/crt0.s b/src-md/crt0.s index c0cf133f0..996650465 100644 --- a/src-md/crt0.s +++ b/src-md/crt0.s @@ -474,8 +474,8 @@ no_cmd: dc.w update_sfx - prireqtbl dc.w stop_sfx - prireqtbl dc.w flush_sfx - prireqtbl - dc.w test_handle - prireqtbl - dc.w get_bbox - prireqtbl + dc.w copy_llongs - prireqtbl + dc.w get_llong - prireqtbl dc.w open_cd_file_by_name - prireqtbl dc.w open_cd_file_by_handle - prireqtbl dc.w read_cd_file - prireqtbl @@ -2055,27 +2055,26 @@ flush_sfx: move.b #1,need_bump_fm bra main_loop -test_handle: +copy_llongs: moveq #0,d1 - move.w 0xA15122,d1 /* number of nodes */ + move.w 0xA15122,d1 /* number of llongs */ add.w d1,d1 /* x2 */ add.w d1,d1 /* x4 */ add.w d1,d1 /* x8 */ - add.w d1,d1 /* x16 */ - lea MARS_FRAMEBUFFER,a2 /* frame buffer */ + lea MARS_FRAMEBUFFER,a2 lea nodes_store,a1 move.l d1,-(sp) /* length */ move.l a2,-(sp) /* framebuffer */ move.l a1,-(sp) /* destination */ - move.w 0xA15100,d1 - eor.w #0x8000,d1 - move.w d1,0xA15100 /* unset FM - disallow SH2 access to FB */ + move.w 0xA15100,d0 + eor.w #0x8000,d0 + move.w d0,0xA15100 /* unset FM - disallow SH2 access to FB */ jsr memcpy - lea 12(sp),sp /* clear the stack */ + lea 12(sp),sp /* clear the stack */ move.w 0xA15100,d0 or.w #0x8000,d0 @@ -2084,7 +2083,7 @@ test_handle: move.w #0,0xA15120 /* done */ bra main_loop -get_bbox: +get_llong: move.w 0xA15122,d1 /* offset */ lea nodes_store,a1