From 37faf94c72a8ab9c9436c09eabd69f6c9e179af0 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 25 Mar 2021 19:39:06 +1000 Subject: [PATCH] Decompile sins --- ld/libfiles.ntsc-beta.inc | 1 + ld/libfiles.ntsc-final.inc | 1 + ld/libfiles.pal-final.inc | 1 + src/include/PR/gu.h | 2 + src/include/lib/lib_4f9b0.h | 1 - src/lib/lib_4f9b0.c | 550 +----------------------------------- src/lib/model.c | 4 +- src/lib/ultra/gu/sins.c | 131 +++++++++ 8 files changed, 139 insertions(+), 552 deletions(-) create mode 100644 src/lib/ultra/gu/sins.c diff --git a/ld/libfiles.ntsc-beta.inc b/ld/libfiles.ntsc-beta.inc index 9f5d0fd21..05f78a789 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.inc @@ -186,6 +186,7 @@ build/ROMID/lib/ultra/io/contreaddata.o (section); \ build/ROMID/lib/ultra/io/motor.o (section); \ build/ROMID/lib/lib_4f9b0.o (section); \ + build/ROMID/lib/ultra/gu/sins.o (section); \ build/ROMID/lib/ultra/gu/ortho.o (section); \ build/ROMID/lib/ultra/gu/frustum.o (section); \ build/ROMID/lib/lib_4fff0.o (section); \ diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index 67d21d306..9a387d697 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -182,6 +182,7 @@ build/ROMID/lib/ultra/io/contreaddata.o (section); \ build/ROMID/lib/ultra/io/motor.o (section); \ build/ROMID/lib/lib_4f9b0.o (section); \ + build/ROMID/lib/ultra/gu/sins.o (section); \ build/ROMID/lib/ultra/gu/ortho.o (section); \ build/ROMID/lib/ultra/gu/frustum.o (section); \ build/ROMID/lib/lib_4fff0.o (section); \ diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index 339eda91d..22be35872 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -182,6 +182,7 @@ build/ROMID/lib/ultra/io/contreaddata.o (section); \ build/ROMID/lib/ultra/io/motor.o (section); \ build/ROMID/lib/lib_4f9b0.o (section); \ + build/ROMID/lib/ultra/gu/sins.o (section); \ build/ROMID/lib/ultra/gu/ortho.o (section); \ build/ROMID/lib/ultra/gu/frustum.o (section); \ build/ROMID/lib/lib_4fff0.o (section); \ diff --git a/src/include/PR/gu.h b/src/include/PR/gu.h index 3b28d20ef..e98df6567 100644 --- a/src/include/PR/gu.h +++ b/src/include/PR/gu.h @@ -28,6 +28,8 @@ void guLookAt(Mtx *m, float xEye, float yEye, float zEye, float xAt, float yAt, float zAt, float xUp, float yUp, float zUp); +signed short sins(unsigned short x); + /* Used only in Fast3DEX2 */ void guLookAtReflect (Mtx *m, LookAt *l, float xEye, float yEye, float zEye, float xAt, float yAt, float zAt, diff --git a/src/include/lib/lib_4f9b0.h b/src/include/lib/lib_4f9b0.h index 1f215a211..d3bbd3c4b 100644 --- a/src/include/lib/lib_4f9b0.h +++ b/src/include/lib/lib_4f9b0.h @@ -6,6 +6,5 @@ u32 func0004f9b0(void); u32 func0004fbc0(void); -u32 func0004fbf0(void); #endif diff --git a/src/lib/lib_4f9b0.c b/src/lib/lib_4f9b0.c index f0f799e37..30c36da14 100644 --- a/src/lib/lib_4f9b0.c +++ b/src/lib/lib_4f9b0.c @@ -7,519 +7,6 @@ u32 var8009ca70; -u32 var800609f0 = 0x00000032; -u32 var800609f4 = 0x00640096; -u32 var800609f8 = 0x00c900fb; -u32 var800609fc = 0x012d0160; -u32 var80060a00 = 0x019201c4; -u32 var80060a04 = 0x01f70229; -u32 var80060a08 = 0x025b028e; -u32 var80060a0c = 0x02c002f2; -u32 var80060a10 = 0x03240357; -u32 var80060a14 = 0x038903bb; -u32 var80060a18 = 0x03ee0420; -u32 var80060a1c = 0x04520484; -u32 var80060a20 = 0x04b704e9; -u32 var80060a24 = 0x051b054e; -u32 var80060a28 = 0x058005b2; -u32 var80060a2c = 0x05e40617; -u32 var80060a30 = 0x0649067b; -u32 var80060a34 = 0x06ad06e0; -u32 var80060a38 = 0x07120744; -u32 var80060a3c = 0x077607a9; -u32 var80060a40 = 0x07db080d; -u32 var80060a44 = 0x083f0871; -u32 var80060a48 = 0x08a408d6; -u32 var80060a4c = 0x0908093a; -u32 var80060a50 = 0x096c099f; -u32 var80060a54 = 0x09d10a03; -u32 var80060a58 = 0x0a350a67; -u32 var80060a5c = 0x0a990acb; -u32 var80060a60 = 0x0afe0b30; -u32 var80060a64 = 0x0b620b94; -u32 var80060a68 = 0x0bc60bf8; -u32 var80060a6c = 0x0c2a0c5c; -u32 var80060a70 = 0x0c8e0cc0; -u32 var80060a74 = 0x0cf20d25; -u32 var80060a78 = 0x0d570d89; -u32 var80060a7c = 0x0dbb0ded; -u32 var80060a80 = 0x0e1f0e51; -u32 var80060a84 = 0x0e830eb5; -u32 var80060a88 = 0x0ee70f19; -u32 var80060a8c = 0x0f4b0f7c; -u32 var80060a90 = 0x0fae0fe0; -u32 var80060a94 = 0x10121044; -u32 var80060a98 = 0x107610a8; -u32 var80060a9c = 0x10da110c; -u32 var80060aa0 = 0x113e116f; -u32 var80060aa4 = 0x11a111d3; -u32 var80060aa8 = 0x12051237; -u32 var80060aac = 0x1269129a; -u32 var80060ab0 = 0x12cc12fe; -u32 var80060ab4 = 0x13301361; -u32 var80060ab8 = 0x139313c5; -u32 var80060abc = 0x13f61428; -u32 var80060ac0 = 0x145a148c; -u32 var80060ac4 = 0x14bd14ef; -u32 var80060ac8 = 0x15201552; -u32 var80060acc = 0x158415b5; -u32 var80060ad0 = 0x15e71618; -u32 var80060ad4 = 0x164a167b; -u32 var80060ad8 = 0x16ad16df; -u32 var80060adc = 0x17101741; -u32 var80060ae0 = 0x177317a4; -u32 var80060ae4 = 0x17d61807; -u32 var80060ae8 = 0x1839186a; -u32 var80060aec = 0x189b18cd; -u32 var80060af0 = 0x18fe1930; -u32 var80060af4 = 0x19611992; -u32 var80060af8 = 0x19c319f5; -u32 var80060afc = 0x1a261a57; -u32 var80060b00 = 0x1a881aba; -u32 var80060b04 = 0x1aeb1b1c; -u32 var80060b08 = 0x1b4d1b7e; -u32 var80060b0c = 0x1baf1be1; -u32 var80060b10 = 0x1c121c43; -u32 var80060b14 = 0x1c741ca5; -u32 var80060b18 = 0x1cd61d07; -u32 var80060b1c = 0x1d381d69; -u32 var80060b20 = 0x1d9a1dcb; -u32 var80060b24 = 0x1dfc1e2d; -u32 var80060b28 = 0x1e5d1e8e; -u32 var80060b2c = 0x1ebf1ef0; -u32 var80060b30 = 0x1f211f52; -u32 var80060b34 = 0x1f821fb3; -u32 var80060b38 = 0x1fe42015; -u32 var80060b3c = 0x20452076; -u32 var80060b40 = 0x20a720d7; -u32 var80060b44 = 0x21082139; -u32 var80060b48 = 0x2169219a; -u32 var80060b4c = 0x21ca21fb; -u32 var80060b50 = 0x222b225c; -u32 var80060b54 = 0x228c22bd; -u32 var80060b58 = 0x22ed231d; -u32 var80060b5c = 0x234e237e; -u32 var80060b60 = 0x23ae23df; -u32 var80060b64 = 0x240f243f; -u32 var80060b68 = 0x247024a0; -u32 var80060b6c = 0x24d02500; -u32 var80060b70 = 0x25302560; -u32 var80060b74 = 0x259125c1; -u32 var80060b78 = 0x25f12621; -u32 var80060b7c = 0x26512681; -u32 var80060b80 = 0x26b126e1; -u32 var80060b84 = 0x27112740; -u32 var80060b88 = 0x277027a0; -u32 var80060b8c = 0x27d02800; -u32 var80060b90 = 0x2830285f; -u32 var80060b94 = 0x288f28bf; -u32 var80060b98 = 0x28ee291e; -u32 var80060b9c = 0x294e297d; -u32 var80060ba0 = 0x29ad29dd; -u32 var80060ba4 = 0x2a0c2a3c; -u32 var80060ba8 = 0x2a6b2a9b; -u32 var80060bac = 0x2aca2af9; -u32 var80060bb0 = 0x2b292b58; -u32 var80060bb4 = 0x2b872bb7; -u32 var80060bb8 = 0x2be62c15; -u32 var80060bbc = 0x2c442c74; -u32 var80060bc0 = 0x2ca32cd2; -u32 var80060bc4 = 0x2d012d30; -u32 var80060bc8 = 0x2d5f2d8e; -u32 var80060bcc = 0x2dbd2dec; -u32 var80060bd0 = 0x2e1b2e4a; -u32 var80060bd4 = 0x2e792ea8; -u32 var80060bd8 = 0x2ed72f06; -u32 var80060bdc = 0x2f342f63; -u32 var80060be0 = 0x2f922fc0; -u32 var80060be4 = 0x2fef301e; -u32 var80060be8 = 0x304c307b; -u32 var80060bec = 0x30a930d8; -u32 var80060bf0 = 0x31073135; -u32 var80060bf4 = 0x31633192; -u32 var80060bf8 = 0x31c031ef; -u32 var80060bfc = 0x321d324b; -u32 var80060c00 = 0x327932a8; -u32 var80060c04 = 0x32d63304; -u32 var80060c08 = 0x33323360; -u32 var80060c0c = 0x338e33bc; -u32 var80060c10 = 0x33ea3418; -u32 var80060c14 = 0x34463474; -u32 var80060c18 = 0x34a234d0; -u32 var80060c1c = 0x34fe352b; -u32 var80060c20 = 0x35593587; -u32 var80060c24 = 0x35b535e2; -u32 var80060c28 = 0x3610363d; -u32 var80060c2c = 0x366b3698; -u32 var80060c30 = 0x36c636f3; -u32 var80060c34 = 0x3721374e; -u32 var80060c38 = 0x377c37a9; -u32 var80060c3c = 0x37d63803; -u32 var80060c40 = 0x3831385e; -u32 var80060c44 = 0x388b38b8; -u32 var80060c48 = 0x38e53912; -u32 var80060c4c = 0x393f396c; -u32 var80060c50 = 0x399939c6; -u32 var80060c54 = 0x39f33a20; -u32 var80060c58 = 0x3a4d3a79; -u32 var80060c5c = 0x3aa63ad3; -u32 var80060c60 = 0x3b003b2c; -u32 var80060c64 = 0x3b593b85; -u32 var80060c68 = 0x3bb23bde; -u32 var80060c6c = 0x3c0b3c37; -u32 var80060c70 = 0x3c643c90; -u32 var80060c74 = 0x3cbc3ce9; -u32 var80060c78 = 0x3d153d41; -u32 var80060c7c = 0x3d6d3d99; -u32 var80060c80 = 0x3dc53df1; -u32 var80060c84 = 0x3e1d3e49; -u32 var80060c88 = 0x3e753ea1; -u32 var80060c8c = 0x3ecd3ef9; -u32 var80060c90 = 0x3f253f50; -u32 var80060c94 = 0x3f7c3fa8; -u32 var80060c98 = 0x3fd33fff; -u32 var80060c9c = 0x402b4056; -u32 var80060ca0 = 0x408240ad; -u32 var80060ca4 = 0x40d84104; -u32 var80060ca8 = 0x412f415a; -u32 var80060cac = 0x418641b1; -u32 var80060cb0 = 0x41dc4207; -u32 var80060cb4 = 0x4232425d; -u32 var80060cb8 = 0x428842b3; -u32 var80060cbc = 0x42de4309; -u32 var80060cc0 = 0x4334435f; -u32 var80060cc4 = 0x438943b4; -u32 var80060cc8 = 0x43df4409; -u32 var80060ccc = 0x4434445f; -u32 var80060cd0 = 0x448944b4; -u32 var80060cd4 = 0x44de4508; -u32 var80060cd8 = 0x4533455d; -u32 var80060cdc = 0x458745b1; -u32 var80060ce0 = 0x45dc4606; -u32 var80060ce4 = 0x4630465a; -u32 var80060ce8 = 0x468446ae; -u32 var80060cec = 0x46d84702; -u32 var80060cf0 = 0x472c4755; -u32 var80060cf4 = 0x477f47a9; -u32 var80060cf8 = 0x47d247fc; -u32 var80060cfc = 0x4826484f; -u32 var80060d00 = 0x487948a2; -u32 var80060d04 = 0x48cc48f5; -u32 var80060d08 = 0x491e4948; -u32 var80060d0c = 0x4971499a; -u32 var80060d10 = 0x49c349ec; -u32 var80060d14 = 0x4a154a3e; -u32 var80060d18 = 0x4a674a90; -u32 var80060d1c = 0x4ab94ae2; -u32 var80060d20 = 0x4b0b4b33; -u32 var80060d24 = 0x4b5c4b85; -u32 var80060d28 = 0x4bad4bd6; -u32 var80060d2c = 0x4bfe4c27; -u32 var80060d30 = 0x4c4f4c78; -u32 var80060d34 = 0x4ca04cc8; -u32 var80060d38 = 0x4cf04d19; -u32 var80060d3c = 0x4d414d69; -u32 var80060d40 = 0x4d914db9; -u32 var80060d44 = 0x4de14e09; -u32 var80060d48 = 0x4e314e58; -u32 var80060d4c = 0x4e804ea8; -u32 var80060d50 = 0x4ed04ef7; -u32 var80060d54 = 0x4f1f4f46; -u32 var80060d58 = 0x4f6e4f95; -u32 var80060d5c = 0x4fbd4fe4; -u32 var80060d60 = 0x500b5032; -u32 var80060d64 = 0x505a5081; -u32 var80060d68 = 0x50a850cf; -u32 var80060d6c = 0x50f6511d; -u32 var80060d70 = 0x5144516b; -u32 var80060d74 = 0x519151b8; -u32 var80060d78 = 0x51df5205; -u32 var80060d7c = 0x522c5253; -u32 var80060d80 = 0x527952a0; -u32 var80060d84 = 0x52c652ec; -u32 var80060d88 = 0x53135339; -u32 var80060d8c = 0x535f5385; -u32 var80060d90 = 0x53ab53d1; -u32 var80060d94 = 0x53f7541d; -u32 var80060d98 = 0x54435469; -u32 var80060d9c = 0x548f54b5; -u32 var80060da0 = 0x54da5500; -u32 var80060da4 = 0x5525554b; -u32 var80060da8 = 0x55715596; -u32 var80060dac = 0x55bb55e1; -u32 var80060db0 = 0x5606562b; -u32 var80060db4 = 0x56505675; -u32 var80060db8 = 0x569b56c0; -u32 var80060dbc = 0x56e55709; -u32 var80060dc0 = 0x572e5753; -u32 var80060dc4 = 0x5778579d; -u32 var80060dc8 = 0x57c157e6; -u32 var80060dcc = 0x580a582f; -u32 var80060dd0 = 0x58535878; -u32 var80060dd4 = 0x589c58c0; -u32 var80060dd8 = 0x58e55909; -u32 var80060ddc = 0x592d5951; -u32 var80060de0 = 0x59755999; -u32 var80060de4 = 0x59bd59e1; -u32 var80060de8 = 0x5a045a28; -u32 var80060dec = 0x5a4c5a6f; -u32 var80060df0 = 0x5a935ab7; -u32 var80060df4 = 0x5ada5afd; -u32 var80060df8 = 0x5b215b44; -u32 var80060dfc = 0x5b675b8b; -u32 var80060e00 = 0x5bae5bd1; -u32 var80060e04 = 0x5bf45c17; -u32 var80060e08 = 0x5c3a5c5d; -u32 var80060e0c = 0x5c7f5ca2; -u32 var80060e10 = 0x5cc55ce7; -u32 var80060e14 = 0x5d0a5d2d; -u32 var80060e18 = 0x5d4f5d71; -u32 var80060e1c = 0x5d945db6; -u32 var80060e20 = 0x5dd85dfa; -u32 var80060e24 = 0x5e1d5e3f; -u32 var80060e28 = 0x5e615e83; -u32 var80060e2c = 0x5ea55ec6; -u32 var80060e30 = 0x5ee85f0a; -u32 var80060e34 = 0x5f2c5f4d; -u32 var80060e38 = 0x5f6f5f90; -u32 var80060e3c = 0x5fb25fd3; -u32 var80060e40 = 0x5ff46016; -u32 var80060e44 = 0x60376058; -u32 var80060e48 = 0x6079609a; -u32 var80060e4c = 0x60bb60dc; -u32 var80060e50 = 0x60fd611e; -u32 var80060e54 = 0x613e615f; -u32 var80060e58 = 0x618061a0; -u32 var80060e5c = 0x61c161e1; -u32 var80060e60 = 0x62026222; -u32 var80060e64 = 0x62426263; -u32 var80060e68 = 0x628362a3; -u32 var80060e6c = 0x62c362e3; -u32 var80060e70 = 0x63036323; -u32 var80060e74 = 0x63426362; -u32 var80060e78 = 0x638263a1; -u32 var80060e7c = 0x63c163e0; -u32 var80060e80 = 0x6400641f; -u32 var80060e84 = 0x643f645e; -u32 var80060e88 = 0x647d649c; -u32 var80060e8c = 0x64bb64da; -u32 var80060e90 = 0x64f96518; -u32 var80060e94 = 0x65376556; -u32 var80060e98 = 0x65746593; -u32 var80060e9c = 0x65b265d0; -u32 var80060ea0 = 0x65ef660d; -u32 var80060ea4 = 0x662b664a; -u32 var80060ea8 = 0x66686686; -u32 var80060eac = 0x66a466c2; -u32 var80060eb0 = 0x66e066fe; -u32 var80060eb4 = 0x671c673a; -u32 var80060eb8 = 0x67576775; -u32 var80060ebc = 0x679267b0; -u32 var80060ec0 = 0x67cd67eb; -u32 var80060ec4 = 0x68086825; -u32 var80060ec8 = 0x68436860; -u32 var80060ecc = 0x687d689a; -u32 var80060ed0 = 0x68b768d4; -u32 var80060ed4 = 0x68f1690d; -u32 var80060ed8 = 0x692a6947; -u32 var80060edc = 0x69636980; -u32 var80060ee0 = 0x699c69b9; -u32 var80060ee4 = 0x69d569f1; -u32 var80060ee8 = 0x6a0e6a2a; -u32 var80060eec = 0x6a466a62; -u32 var80060ef0 = 0x6a7e6a9a; -u32 var80060ef4 = 0x6ab56ad1; -u32 var80060ef8 = 0x6aed6b08; -u32 var80060efc = 0x6b246b40; -u32 var80060f00 = 0x6b5b6b76; -u32 var80060f04 = 0x6b926bad; -u32 var80060f08 = 0x6bc86be3; -u32 var80060f0c = 0x6bfe6c19; -u32 var80060f10 = 0x6c346c4f; -u32 var80060f14 = 0x6c6a6c84; -u32 var80060f18 = 0x6c9f6cba; -u32 var80060f1c = 0x6cd46cef; -u32 var80060f20 = 0x6d096d23; -u32 var80060f24 = 0x6d3e6d58; -u32 var80060f28 = 0x6d726d8c; -u32 var80060f2c = 0x6da66dc0; -u32 var80060f30 = 0x6dda6df3; -u32 var80060f34 = 0x6e0d6e27; -u32 var80060f38 = 0x6e406e5a; -u32 var80060f3c = 0x6e736e8d; -u32 var80060f40 = 0x6ea66ebf; -u32 var80060f44 = 0x6ed96ef2; -u32 var80060f48 = 0x6f0b6f24; -u32 var80060f4c = 0x6f3d6f55; -u32 var80060f50 = 0x6f6e6f87; -u32 var80060f54 = 0x6fa06fb8; -u32 var80060f58 = 0x6fd16fe9; -u32 var80060f5c = 0x7002701a; -u32 var80060f60 = 0x7032704a; -u32 var80060f64 = 0x7062707a; -u32 var80060f68 = 0x709270aa; -u32 var80060f6c = 0x70c270da; -u32 var80060f70 = 0x70f27109; -u32 var80060f74 = 0x71217138; -u32 var80060f78 = 0x71507167; -u32 var80060f7c = 0x717e7196; -u32 var80060f80 = 0x71ad71c4; -u32 var80060f84 = 0x71db71f2; -u32 var80060f88 = 0x72097220; -u32 var80060f8c = 0x7236724d; -u32 var80060f90 = 0x7264727a; -u32 var80060f94 = 0x729172a7; -u32 var80060f98 = 0x72bd72d4; -u32 var80060f9c = 0x72ea7300; -u32 var80060fa0 = 0x7316732c; -u32 var80060fa4 = 0x73427358; -u32 var80060fa8 = 0x736e7383; -u32 var80060fac = 0x739973ae; -u32 var80060fb0 = 0x73c473d9; -u32 var80060fb4 = 0x73ef7404; -u32 var80060fb8 = 0x7419742e; -u32 var80060fbc = 0x74437458; -u32 var80060fc0 = 0x746d7482; -u32 var80060fc4 = 0x749774ac; -u32 var80060fc8 = 0x74c074d5; -u32 var80060fcc = 0x74ea74fe; -u32 var80060fd0 = 0x75127527; -u32 var80060fd4 = 0x753b754f; -u32 var80060fd8 = 0x75637577; -u32 var80060fdc = 0x758b759f; -u32 var80060fe0 = 0x75b375c7; -u32 var80060fe4 = 0x75da75ee; -u32 var80060fe8 = 0x76017615; -u32 var80060fec = 0x7628763b; -u32 var80060ff0 = 0x764f7662; -u32 var80060ff4 = 0x76757688; -u32 var80060ff8 = 0x769b76ae; -u32 var80060ffc = 0x76c176d3; -u32 var80061000 = 0x76e676f9; -u32 var80061004 = 0x770b771e; -u32 var80061008 = 0x77307742; -u32 var8006100c = 0x77547767; -u32 var80061010 = 0x7779778b; -u32 var80061014 = 0x779d77af; -u32 var80061018 = 0x77c077d2; -u32 var8006101c = 0x77e477f5; -u32 var80061020 = 0x78077818; -u32 var80061024 = 0x782a783b; -u32 var80061028 = 0x784c785d; -u32 var8006102c = 0x786e787f; -u32 var80061030 = 0x789078a1; -u32 var80061034 = 0x78b278c3; -u32 var80061038 = 0x78d378e4; -u32 var8006103c = 0x78f47905; -u32 var80061040 = 0x79157925; -u32 var80061044 = 0x79367946; -u32 var80061048 = 0x79567966; -u32 var8006104c = 0x79767985; -u32 var80061050 = 0x799579a5; -u32 var80061054 = 0x79b579c4; -u32 var80061058 = 0x79d479e3; -u32 var8006105c = 0x79f27a02; -u32 var80061060 = 0x7a117a20; -u32 var80061064 = 0x7a2f7a3e; -u32 var80061068 = 0x7a4d7a5b; -u32 var8006106c = 0x7a6a7a79; -u32 var80061070 = 0x7a877a96; -u32 var80061074 = 0x7aa47ab3; -u32 var80061078 = 0x7ac17acf; -u32 var8006107c = 0x7add7aeb; -u32 var80061080 = 0x7af97b07; -u32 var80061084 = 0x7b157b23; -u32 var80061088 = 0x7b317b3e; -u32 var8006108c = 0x7b4c7b59; -u32 var80061090 = 0x7b677b74; -u32 var80061094 = 0x7b817b8e; -u32 var80061098 = 0x7b9b7ba8; -u32 var8006109c = 0x7bb57bc2; -u32 var800610a0 = 0x7bcf7bdc; -u32 var800610a4 = 0x7be87bf5; -u32 var800610a8 = 0x7c027c0e; -u32 var800610ac = 0x7c1a7c27; -u32 var800610b0 = 0x7c337c3f; -u32 var800610b4 = 0x7c4b7c57; -u32 var800610b8 = 0x7c637c6f; -u32 var800610bc = 0x7c7a7c86; -u32 var800610c0 = 0x7c927c9d; -u32 var800610c4 = 0x7ca97cb4; -u32 var800610c8 = 0x7cbf7ccb; -u32 var800610cc = 0x7cd67ce1; -u32 var800610d0 = 0x7cec7cf7; -u32 var800610d4 = 0x7d027d0c; -u32 var800610d8 = 0x7d177d22; -u32 var800610dc = 0x7d2c7d37; -u32 var800610e0 = 0x7d417d4b; -u32 var800610e4 = 0x7d567d60; -u32 var800610e8 = 0x7d6a7d74; -u32 var800610ec = 0x7d7e7d88; -u32 var800610f0 = 0x7d917d9b; -u32 var800610f4 = 0x7da57dae; -u32 var800610f8 = 0x7db87dc1; -u32 var800610fc = 0x7dcb7dd4; -u32 var80061100 = 0x7ddd7de6; -u32 var80061104 = 0x7def7df8; -u32 var80061108 = 0x7e017e0a; -u32 var8006110c = 0x7e137e1b; -u32 var80061110 = 0x7e247e2c; -u32 var80061114 = 0x7e357e3d; -u32 var80061118 = 0x7e457e4d; -u32 var8006111c = 0x7e567e5e; -u32 var80061120 = 0x7e667e6d; -u32 var80061124 = 0x7e757e7d; -u32 var80061128 = 0x7e857e8c; -u32 var8006112c = 0x7e947e9b; -u32 var80061130 = 0x7ea37eaa; -u32 var80061134 = 0x7eb17eb8; -u32 var80061138 = 0x7ebf7ec6; -u32 var8006113c = 0x7ecd7ed4; -u32 var80061140 = 0x7edb7ee1; -u32 var80061144 = 0x7ee87eee; -u32 var80061148 = 0x7ef57efb; -u32 var8006114c = 0x7f017f08; -u32 var80061150 = 0x7f0e7f14; -u32 var80061154 = 0x7f1a7f20; -u32 var80061158 = 0x7f257f2b; -u32 var8006115c = 0x7f317f36; -u32 var80061160 = 0x7f3c7f41; -u32 var80061164 = 0x7f477f4c; -u32 var80061168 = 0x7f517f56; -u32 var8006116c = 0x7f5b7f60; -u32 var80061170 = 0x7f657f6a; -u32 var80061174 = 0x7f6f7f74; -u32 var80061178 = 0x7f787f7d; -u32 var8006117c = 0x7f817f85; -u32 var80061180 = 0x7f8a7f8e; -u32 var80061184 = 0x7f927f96; -u32 var80061188 = 0x7f9a7f9e; -u32 var8006118c = 0x7fa27fa6; -u32 var80061190 = 0x7fa97fad; -u32 var80061194 = 0x7fb07fb4; -u32 var80061198 = 0x7fb77fba; -u32 var8006119c = 0x7fbe7fc1; -u32 var800611a0 = 0x7fc47fc7; -u32 var800611a4 = 0x7fca7fcc; -u32 var800611a8 = 0x7fcf7fd2; -u32 var800611ac = 0x7fd47fd7; -u32 var800611b0 = 0x7fd97fdc; -u32 var800611b4 = 0x7fde7fe0; -u32 var800611b8 = 0x7fe27fe4; -u32 var800611bc = 0x7fe67fe8; -u32 var800611c0 = 0x7fea7fec; -u32 var800611c4 = 0x7fed7fef; -u32 var800611c8 = 0x7ff17ff2; -u32 var800611cc = 0x7ff37ff5; -u32 var800611d0 = 0x7ff67ff7; -u32 var800611d4 = 0x7ff87ff9; -u32 var800611d8 = 0x7ffa7ffb; -u32 var800611dc = 0x7ffb7ffc; -u32 var800611e0 = 0x7ffd7ffd; -u32 var800611e4 = 0x7ffe7ffe; -u32 var800611e8 = 0x7ffe7ffe; -u32 var800611ec = 0x7ffe7fff; - const u32 var70059fd0[] = {0x3c8efa35}; GLOBAL_ASM( @@ -671,45 +158,10 @@ glabel func0004fbc0 /* 4fbcc: 24a44000 */ addiu $a0,$a1,0x4000 /* 4fbd0: afbf0014 */ sw $ra,0x14($sp) /* 4fbd4: 308effff */ andi $t6,$a0,0xffff -/* 4fbd8: 0c013efc */ jal func0004fbf0 +/* 4fbd8: 0c013efc */ jal sins /* 4fbdc: 01c02025 */ or $a0,$t6,$zero /* 4fbe0: 8fbf0014 */ lw $ra,0x14($sp) /* 4fbe4: 27bd0018 */ addiu $sp,$sp,0x18 /* 4fbe8: 03e00008 */ jr $ra /* 4fbec: 00000000 */ nop ); - -GLOBAL_ASM( -glabel func0004fbf0 -/* 4fbf0: 308effff */ andi $t6,$a0,0xffff -/* 4fbf4: 000e7902 */ srl $t7,$t6,0x4 -/* 4fbf8: 31f8ffff */ andi $t8,$t7,0xffff -/* 4fbfc: 33190400 */ andi $t9,$t8,0x400 -/* 4fc00: afa40000 */ sw $a0,0x0($sp) -/* 4fc04: 13200008 */ beqz $t9,.L0004fc28 -/* 4fc08: 03001025 */ or $v0,$t8,$zero -/* 4fc0c: 330803ff */ andi $t0,$t8,0x3ff -/* 4fc10: 00084840 */ sll $t1,$t0,0x1 -/* 4fc14: 00095023 */ negu $t2,$t1 -/* 4fc18: 3c038006 */ lui $v1,%hi(var800611ec+0x2) -/* 4fc1c: 006a1821 */ addu $v1,$v1,$t2 -/* 4fc20: 10000006 */ b .L0004fc3c -/* 4fc24: 846311ee */ lh $v1,%lo(var800611ec+0x2)($v1) -.L0004fc28: -/* 4fc28: 304b03ff */ andi $t3,$v0,0x3ff -/* 4fc2c: 000b6040 */ sll $t4,$t3,0x1 -/* 4fc30: 3c038006 */ lui $v1,%hi(var800609f0) -/* 4fc34: 006c1821 */ addu $v1,$v1,$t4 -/* 4fc38: 846309f0 */ lh $v1,%lo(var800609f0)($v1) -.L0004fc3c: -/* 4fc3c: 304d0800 */ andi $t5,$v0,0x800 -/* 4fc40: 11a00005 */ beqz $t5,.L0004fc58 -/* 4fc44: 00601025 */ or $v0,$v1,$zero -/* 4fc48: 00031023 */ negu $v0,$v1 -/* 4fc4c: 00027400 */ sll $t6,$v0,0x10 -/* 4fc50: 03e00008 */ jr $ra -/* 4fc54: 000e1403 */ sra $v0,$t6,0x10 -.L0004fc58: -/* 4fc58: 03e00008 */ jr $ra -/* 4fc5c: 00000000 */ nop -); diff --git a/src/lib/model.c b/src/lib/model.c index 08cf59bf3..b16aa30d7 100644 --- a/src/lib/model.c +++ b/src/lib/model.c @@ -8568,7 +8568,7 @@ glabel func0002124c /* 213cc: 3224ffff */ andi $a0,$s1,0xffff /* 213d0: 0000a012 */ mflo $s4 /* 213d4: 00146483 */ sra $t4,$s4,0x12 -/* 213d8: 0c013efc */ jal func0004fbf0 +/* 213d8: 0c013efc */ jal sins /* 213dc: 0180a025 */ or $s4,$t4,$zero /* 213e0: 00027140 */ sll $t6,$v0,0x5 /* 213e4: 01d70019 */ multu $t6,$s7 @@ -9215,7 +9215,7 @@ glabel var70054454 /* 21d94: 000f7880 */ sll $t7,$t7,0x2 /* 21d98: 01e87821 */ addu $t7,$t7,$t0 /* 21d9c: 000fc483 */ sra $t8,$t7,0x12 -/* 21da0: 0c013efc */ jal func0004fbf0 +/* 21da0: 0c013efc */ jal sins /* 21da4: afb8005c */ sw $t8,0x5c($sp) /* 21da8: 92240004 */ lbu $a0,0x4($s1) /* 21dac: 8fa8005c */ lw $t0,0x5c($sp) diff --git a/src/lib/ultra/gu/sins.c b/src/lib/ultra/gu/sins.c new file mode 100644 index 000000000..86d4e2343 --- /dev/null +++ b/src/lib/ultra/gu/sins.c @@ -0,0 +1,131 @@ +#include +#include "constants.h" +#include "bss.h" +#include "lib/lib_16110.h" +#include "data.h" +#include "types.h" + +s16 sintable[] = { + 0x0000, 0x0032, 0x0064, 0x0096, 0x00c9, 0x00fb, 0x012d, 0x0160, 0x0192, 0x01c4, + 0x01f7, 0x0229, 0x025b, 0x028e, 0x02c0, 0x02f2, 0x0324, 0x0357, 0x0389, 0x03bb, + 0x03ee, 0x0420, 0x0452, 0x0484, 0x04b7, 0x04e9, 0x051b, 0x054e, 0x0580, 0x05b2, + 0x05e4, 0x0617, 0x0649, 0x067b, 0x06ad, 0x06e0, 0x0712, 0x0744, 0x0776, 0x07a9, + 0x07db, 0x080d, 0x083f, 0x0871, 0x08a4, 0x08d6, 0x0908, 0x093a, 0x096c, 0x099f, + 0x09d1, 0x0a03, 0x0a35, 0x0a67, 0x0a99, 0x0acb, 0x0afe, 0x0b30, 0x0b62, 0x0b94, + 0x0bc6, 0x0bf8, 0x0c2a, 0x0c5c, 0x0c8e, 0x0cc0, 0x0cf2, 0x0d25, 0x0d57, 0x0d89, + 0x0dbb, 0x0ded, 0x0e1f, 0x0e51, 0x0e83, 0x0eb5, 0x0ee7, 0x0f19, 0x0f4b, 0x0f7c, + 0x0fae, 0x0fe0, 0x1012, 0x1044, 0x1076, 0x10a8, 0x10da, 0x110c, 0x113e, 0x116f, + 0x11a1, 0x11d3, 0x1205, 0x1237, 0x1269, 0x129a, 0x12cc, 0x12fe, 0x1330, 0x1361, + 0x1393, 0x13c5, 0x13f6, 0x1428, 0x145a, 0x148c, 0x14bd, 0x14ef, 0x1520, 0x1552, + 0x1584, 0x15b5, 0x15e7, 0x1618, 0x164a, 0x167b, 0x16ad, 0x16df, 0x1710, 0x1741, + 0x1773, 0x17a4, 0x17d6, 0x1807, 0x1839, 0x186a, 0x189b, 0x18cd, 0x18fe, 0x1930, + 0x1961, 0x1992, 0x19c3, 0x19f5, 0x1a26, 0x1a57, 0x1a88, 0x1aba, 0x1aeb, 0x1b1c, + 0x1b4d, 0x1b7e, 0x1baf, 0x1be1, 0x1c12, 0x1c43, 0x1c74, 0x1ca5, 0x1cd6, 0x1d07, + 0x1d38, 0x1d69, 0x1d9a, 0x1dcb, 0x1dfc, 0x1e2d, 0x1e5d, 0x1e8e, 0x1ebf, 0x1ef0, + 0x1f21, 0x1f52, 0x1f82, 0x1fb3, 0x1fe4, 0x2015, 0x2045, 0x2076, 0x20a7, 0x20d7, + 0x2108, 0x2139, 0x2169, 0x219a, 0x21ca, 0x21fb, 0x222b, 0x225c, 0x228c, 0x22bd, + 0x22ed, 0x231d, 0x234e, 0x237e, 0x23ae, 0x23df, 0x240f, 0x243f, 0x2470, 0x24a0, + 0x24d0, 0x2500, 0x2530, 0x2560, 0x2591, 0x25c1, 0x25f1, 0x2621, 0x2651, 0x2681, + 0x26b1, 0x26e1, 0x2711, 0x2740, 0x2770, 0x27a0, 0x27d0, 0x2800, 0x2830, 0x285f, + 0x288f, 0x28bf, 0x28ee, 0x291e, 0x294e, 0x297d, 0x29ad, 0x29dd, 0x2a0c, 0x2a3c, + 0x2a6b, 0x2a9b, 0x2aca, 0x2af9, 0x2b29, 0x2b58, 0x2b87, 0x2bb7, 0x2be6, 0x2c15, + 0x2c44, 0x2c74, 0x2ca3, 0x2cd2, 0x2d01, 0x2d30, 0x2d5f, 0x2d8e, 0x2dbd, 0x2dec, + 0x2e1b, 0x2e4a, 0x2e79, 0x2ea8, 0x2ed7, 0x2f06, 0x2f34, 0x2f63, 0x2f92, 0x2fc0, + 0x2fef, 0x301e, 0x304c, 0x307b, 0x30a9, 0x30d8, 0x3107, 0x3135, 0x3163, 0x3192, + 0x31c0, 0x31ef, 0x321d, 0x324b, 0x3279, 0x32a8, 0x32d6, 0x3304, 0x3332, 0x3360, + 0x338e, 0x33bc, 0x33ea, 0x3418, 0x3446, 0x3474, 0x34a2, 0x34d0, 0x34fe, 0x352b, + 0x3559, 0x3587, 0x35b5, 0x35e2, 0x3610, 0x363d, 0x366b, 0x3698, 0x36c6, 0x36f3, + 0x3721, 0x374e, 0x377c, 0x37a9, 0x37d6, 0x3803, 0x3831, 0x385e, 0x388b, 0x38b8, + 0x38e5, 0x3912, 0x393f, 0x396c, 0x3999, 0x39c6, 0x39f3, 0x3a20, 0x3a4d, 0x3a79, + 0x3aa6, 0x3ad3, 0x3b00, 0x3b2c, 0x3b59, 0x3b85, 0x3bb2, 0x3bde, 0x3c0b, 0x3c37, + 0x3c64, 0x3c90, 0x3cbc, 0x3ce9, 0x3d15, 0x3d41, 0x3d6d, 0x3d99, 0x3dc5, 0x3df1, + 0x3e1d, 0x3e49, 0x3e75, 0x3ea1, 0x3ecd, 0x3ef9, 0x3f25, 0x3f50, 0x3f7c, 0x3fa8, + 0x3fd3, 0x3fff, 0x402b, 0x4056, 0x4082, 0x40ad, 0x40d8, 0x4104, 0x412f, 0x415a, + 0x4186, 0x41b1, 0x41dc, 0x4207, 0x4232, 0x425d, 0x4288, 0x42b3, 0x42de, 0x4309, + 0x4334, 0x435f, 0x4389, 0x43b4, 0x43df, 0x4409, 0x4434, 0x445f, 0x4489, 0x44b4, + 0x44de, 0x4508, 0x4533, 0x455d, 0x4587, 0x45b1, 0x45dc, 0x4606, 0x4630, 0x465a, + 0x4684, 0x46ae, 0x46d8, 0x4702, 0x472c, 0x4755, 0x477f, 0x47a9, 0x47d2, 0x47fc, + 0x4826, 0x484f, 0x4879, 0x48a2, 0x48cc, 0x48f5, 0x491e, 0x4948, 0x4971, 0x499a, + 0x49c3, 0x49ec, 0x4a15, 0x4a3e, 0x4a67, 0x4a90, 0x4ab9, 0x4ae2, 0x4b0b, 0x4b33, + 0x4b5c, 0x4b85, 0x4bad, 0x4bd6, 0x4bfe, 0x4c27, 0x4c4f, 0x4c78, 0x4ca0, 0x4cc8, + 0x4cf0, 0x4d19, 0x4d41, 0x4d69, 0x4d91, 0x4db9, 0x4de1, 0x4e09, 0x4e31, 0x4e58, + 0x4e80, 0x4ea8, 0x4ed0, 0x4ef7, 0x4f1f, 0x4f46, 0x4f6e, 0x4f95, 0x4fbd, 0x4fe4, + 0x500b, 0x5032, 0x505a, 0x5081, 0x50a8, 0x50cf, 0x50f6, 0x511d, 0x5144, 0x516b, + 0x5191, 0x51b8, 0x51df, 0x5205, 0x522c, 0x5253, 0x5279, 0x52a0, 0x52c6, 0x52ec, + 0x5313, 0x5339, 0x535f, 0x5385, 0x53ab, 0x53d1, 0x53f7, 0x541d, 0x5443, 0x5469, + 0x548f, 0x54b5, 0x54da, 0x5500, 0x5525, 0x554b, 0x5571, 0x5596, 0x55bb, 0x55e1, + 0x5606, 0x562b, 0x5650, 0x5675, 0x569b, 0x56c0, 0x56e5, 0x5709, 0x572e, 0x5753, + 0x5778, 0x579d, 0x57c1, 0x57e6, 0x580a, 0x582f, 0x5853, 0x5878, 0x589c, 0x58c0, + 0x58e5, 0x5909, 0x592d, 0x5951, 0x5975, 0x5999, 0x59bd, 0x59e1, 0x5a04, 0x5a28, + 0x5a4c, 0x5a6f, 0x5a93, 0x5ab7, 0x5ada, 0x5afd, 0x5b21, 0x5b44, 0x5b67, 0x5b8b, + 0x5bae, 0x5bd1, 0x5bf4, 0x5c17, 0x5c3a, 0x5c5d, 0x5c7f, 0x5ca2, 0x5cc5, 0x5ce7, + 0x5d0a, 0x5d2d, 0x5d4f, 0x5d71, 0x5d94, 0x5db6, 0x5dd8, 0x5dfa, 0x5e1d, 0x5e3f, + 0x5e61, 0x5e83, 0x5ea5, 0x5ec6, 0x5ee8, 0x5f0a, 0x5f2c, 0x5f4d, 0x5f6f, 0x5f90, + 0x5fb2, 0x5fd3, 0x5ff4, 0x6016, 0x6037, 0x6058, 0x6079, 0x609a, 0x60bb, 0x60dc, + 0x60fd, 0x611e, 0x613e, 0x615f, 0x6180, 0x61a0, 0x61c1, 0x61e1, 0x6202, 0x6222, + 0x6242, 0x6263, 0x6283, 0x62a3, 0x62c3, 0x62e3, 0x6303, 0x6323, 0x6342, 0x6362, + 0x6382, 0x63a1, 0x63c1, 0x63e0, 0x6400, 0x641f, 0x643f, 0x645e, 0x647d, 0x649c, + 0x64bb, 0x64da, 0x64f9, 0x6518, 0x6537, 0x6556, 0x6574, 0x6593, 0x65b2, 0x65d0, + 0x65ef, 0x660d, 0x662b, 0x664a, 0x6668, 0x6686, 0x66a4, 0x66c2, 0x66e0, 0x66fe, + 0x671c, 0x673a, 0x6757, 0x6775, 0x6792, 0x67b0, 0x67cd, 0x67eb, 0x6808, 0x6825, + 0x6843, 0x6860, 0x687d, 0x689a, 0x68b7, 0x68d4, 0x68f1, 0x690d, 0x692a, 0x6947, + 0x6963, 0x6980, 0x699c, 0x69b9, 0x69d5, 0x69f1, 0x6a0e, 0x6a2a, 0x6a46, 0x6a62, + 0x6a7e, 0x6a9a, 0x6ab5, 0x6ad1, 0x6aed, 0x6b08, 0x6b24, 0x6b40, 0x6b5b, 0x6b76, + 0x6b92, 0x6bad, 0x6bc8, 0x6be3, 0x6bfe, 0x6c19, 0x6c34, 0x6c4f, 0x6c6a, 0x6c84, + 0x6c9f, 0x6cba, 0x6cd4, 0x6cef, 0x6d09, 0x6d23, 0x6d3e, 0x6d58, 0x6d72, 0x6d8c, + 0x6da6, 0x6dc0, 0x6dda, 0x6df3, 0x6e0d, 0x6e27, 0x6e40, 0x6e5a, 0x6e73, 0x6e8d, + 0x6ea6, 0x6ebf, 0x6ed9, 0x6ef2, 0x6f0b, 0x6f24, 0x6f3d, 0x6f55, 0x6f6e, 0x6f87, + 0x6fa0, 0x6fb8, 0x6fd1, 0x6fe9, 0x7002, 0x701a, 0x7032, 0x704a, 0x7062, 0x707a, + 0x7092, 0x70aa, 0x70c2, 0x70da, 0x70f2, 0x7109, 0x7121, 0x7138, 0x7150, 0x7167, + 0x717e, 0x7196, 0x71ad, 0x71c4, 0x71db, 0x71f2, 0x7209, 0x7220, 0x7236, 0x724d, + 0x7264, 0x727a, 0x7291, 0x72a7, 0x72bd, 0x72d4, 0x72ea, 0x7300, 0x7316, 0x732c, + 0x7342, 0x7358, 0x736e, 0x7383, 0x7399, 0x73ae, 0x73c4, 0x73d9, 0x73ef, 0x7404, + 0x7419, 0x742e, 0x7443, 0x7458, 0x746d, 0x7482, 0x7497, 0x74ac, 0x74c0, 0x74d5, + 0x74ea, 0x74fe, 0x7512, 0x7527, 0x753b, 0x754f, 0x7563, 0x7577, 0x758b, 0x759f, + 0x75b3, 0x75c7, 0x75da, 0x75ee, 0x7601, 0x7615, 0x7628, 0x763b, 0x764f, 0x7662, + 0x7675, 0x7688, 0x769b, 0x76ae, 0x76c1, 0x76d3, 0x76e6, 0x76f9, 0x770b, 0x771e, + 0x7730, 0x7742, 0x7754, 0x7767, 0x7779, 0x778b, 0x779d, 0x77af, 0x77c0, 0x77d2, + 0x77e4, 0x77f5, 0x7807, 0x7818, 0x782a, 0x783b, 0x784c, 0x785d, 0x786e, 0x787f, + 0x7890, 0x78a1, 0x78b2, 0x78c3, 0x78d3, 0x78e4, 0x78f4, 0x7905, 0x7915, 0x7925, + 0x7936, 0x7946, 0x7956, 0x7966, 0x7976, 0x7985, 0x7995, 0x79a5, 0x79b5, 0x79c4, + 0x79d4, 0x79e3, 0x79f2, 0x7a02, 0x7a11, 0x7a20, 0x7a2f, 0x7a3e, 0x7a4d, 0x7a5b, + 0x7a6a, 0x7a79, 0x7a87, 0x7a96, 0x7aa4, 0x7ab3, 0x7ac1, 0x7acf, 0x7add, 0x7aeb, + 0x7af9, 0x7b07, 0x7b15, 0x7b23, 0x7b31, 0x7b3e, 0x7b4c, 0x7b59, 0x7b67, 0x7b74, + 0x7b81, 0x7b8e, 0x7b9b, 0x7ba8, 0x7bb5, 0x7bc2, 0x7bcf, 0x7bdc, 0x7be8, 0x7bf5, + 0x7c02, 0x7c0e, 0x7c1a, 0x7c27, 0x7c33, 0x7c3f, 0x7c4b, 0x7c57, 0x7c63, 0x7c6f, + 0x7c7a, 0x7c86, 0x7c92, 0x7c9d, 0x7ca9, 0x7cb4, 0x7cbf, 0x7ccb, 0x7cd6, 0x7ce1, + 0x7cec, 0x7cf7, 0x7d02, 0x7d0c, 0x7d17, 0x7d22, 0x7d2c, 0x7d37, 0x7d41, 0x7d4b, + 0x7d56, 0x7d60, 0x7d6a, 0x7d74, 0x7d7e, 0x7d88, 0x7d91, 0x7d9b, 0x7da5, 0x7dae, + 0x7db8, 0x7dc1, 0x7dcb, 0x7dd4, 0x7ddd, 0x7de6, 0x7def, 0x7df8, 0x7e01, 0x7e0a, + 0x7e13, 0x7e1b, 0x7e24, 0x7e2c, 0x7e35, 0x7e3d, 0x7e45, 0x7e4d, 0x7e56, 0x7e5e, + 0x7e66, 0x7e6d, 0x7e75, 0x7e7d, 0x7e85, 0x7e8c, 0x7e94, 0x7e9b, 0x7ea3, 0x7eaa, + 0x7eb1, 0x7eb8, 0x7ebf, 0x7ec6, 0x7ecd, 0x7ed4, 0x7edb, 0x7ee1, 0x7ee8, 0x7eee, + 0x7ef5, 0x7efb, 0x7f01, 0x7f08, 0x7f0e, 0x7f14, 0x7f1a, 0x7f20, 0x7f25, 0x7f2b, + 0x7f31, 0x7f36, 0x7f3c, 0x7f41, 0x7f47, 0x7f4c, 0x7f51, 0x7f56, 0x7f5b, 0x7f60, + 0x7f65, 0x7f6a, 0x7f6f, 0x7f74, 0x7f78, 0x7f7d, 0x7f81, 0x7f85, 0x7f8a, 0x7f8e, + 0x7f92, 0x7f96, 0x7f9a, 0x7f9e, 0x7fa2, 0x7fa6, 0x7fa9, 0x7fad, 0x7fb0, 0x7fb4, + 0x7fb7, 0x7fba, 0x7fbe, 0x7fc1, 0x7fc4, 0x7fc7, 0x7fca, 0x7fcc, 0x7fcf, 0x7fd2, + 0x7fd4, 0x7fd7, 0x7fd9, 0x7fdc, 0x7fde, 0x7fe0, 0x7fe2, 0x7fe4, 0x7fe6, 0x7fe8, + 0x7fea, 0x7fec, 0x7fed, 0x7fef, 0x7ff1, 0x7ff2, 0x7ff3, 0x7ff5, 0x7ff6, 0x7ff7, + 0x7ff8, 0x7ff9, 0x7ffa, 0x7ffb, 0x7ffb, 0x7ffc, 0x7ffd, 0x7ffd, 0x7ffe, 0x7ffe, + 0x7ffe, 0x7ffe, 0x7ffe, 0x7fff, +}; + +signed short sins(unsigned short x) +{ + signed short val; + + x >>= 4; + + if (x & 0x400) { + val = sintable[0x3ff - (x & 0x3ff)]; + } else { + val = sintable[x & 0x3ff]; + } + + if (x & 0x800) { + return -val; + } else { + return val; + } +}