diff --git a/Assets/dll/MSXHawk.dll b/Assets/dll/MSXHawk.dll index e9f07a0728..1cf940095b 100644 Binary files a/Assets/dll/MSXHawk.dll and b/Assets/dll/MSXHawk.dll differ diff --git a/Assets/gamedb/gamedb_msx_msx1_rom.txt b/Assets/gamedb/gamedb_msx_msx1_rom.txt index 531912eff2..b15d491134 100644 --- a/Assets/gamedb/gamedb_msx_msx1_rom.txt +++ b/Assets/gamedb/gamedb_msx_msx1_rom.txt @@ -748,10 +748,10 @@ E8519FC1F9A4AF0115A8ABB450B32BD6 Exerion II - Zorni (1984)(Jaleco)(JP)[a] MSX 67EECAE6CBB4A1FBB5F6F549DD614C1D Exoide-Z (1986)(Casio)(JP)[a] MSX JP 1BB9D2437C2304088D36EBBC655FE2C1 Exoide-Z (1986)(Casio)(JP)[a2] MSX JP 1C7C29B7F4527BBA7160641616FCB6A3 Exoide-Z Area 5 (1986)(Casio)(JP) MSX JP -603D4C819A51D0C20FF9FA9F902D3FFD F-1 Spirit - The Way to Formula 1 (1987)(Konami)(JP)[a][RC-752] MSX JP -910CC3718C00C9AF6A808E277F0E7586 F-1 Spirit - The Way to Formula 1 (1987)(Konami)(JP)[RC-752] MSX JP -298CCA1F79A4494C41CFB9EB1E586A50 F-1 Spirit - The Way to Formula 1 (1987)(Konami)(JP)[SCC][RC-752] MSX JP -FCF0F1CA4AB651512E27BAA397AE774F F-1 Spirit - The Way to Formula 1 (1987)(Zemina)(KR)[RC-752] MSX KR +603D4C819A51D0C20FF9FA9F902D3FFD F-1 Spirit - The Way to Formula 1 (1987)(Konami)(JP)[a][RC-752] MSX mapper=2 JP +910CC3718C00C9AF6A808E277F0E7586 F-1 Spirit - The Way to Formula 1 (1987)(Konami)(JP)[RC-752] MSX mapper=2 JP +298CCA1F79A4494C41CFB9EB1E586A50 F-1 Spirit - The Way to Formula 1 (1987)(Konami)(JP)[SCC][RC-752] MSX mapper=2 JP +FCF0F1CA4AB651512E27BAA397AE774F F-1 Spirit - The Way to Formula 1 (1987)(Zemina)(KR)[RC-752] MSX mapper=2 KR C7C38266C0778D3E3669CD3A8DE313FE F16 Fighting Falcon (1985)(ASCII)(JP) MSX JP 9926D3629D71A880FAF8BD14F6488288 Fa Tetris (1989)(Fa Soft)(KR) MSX KR DF328B3806F98F0045253C50C21A9B33 Factory Infection (2004)(Karoshi)[RK705] MSX @@ -815,10 +815,10 @@ C5FA1C8C6676FAA382DB530EEAB349B6 Gall Force - Defense of Chaos (1986)(Sony)(JP) AC2E61850414F7B528C8753A3D804394 Glider (1985)(ASCII)(JP) MSX JP A9E41CB3920EC0CE6348325C638A19AD Glider (1985)(ASCII)(JP)[a] MSX JP EC1A568F12FA3303804216F35E1CD841 Gniffel v2 (2004)(Dioniso) MSX -DC31287CED6E601EA7FDF2AF9759C58F Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[a][RC-764] MSX JP -FF9FEDE25893DC32F6A7DB275173B2B9 Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[a2][RC-764] MSX JP -55C020211EDCFC4C5A5D66BDD48F7D16 Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[RC-764] MSX JP -AAA5EB619E90C1A3D1C2F5714BCCC0EA Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[SCC][RC-764] MSX JP +DC31287CED6E601EA7FDF2AF9759C58F Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[a][RC-764] MSX mapper=2 JP +FF9FEDE25893DC32F6A7DB275173B2B9 Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[a2][RC-764] MSX mapper=2 JP +55C020211EDCFC4C5A5D66BDD48F7D16 Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[RC-764] MSX mapper=2 JP +AAA5EB619E90C1A3D1C2F5714BCCC0EA Gofer no Yabou Episode II. Nemesis 3 - The Eve of Destruction (1988)(Konami)(JP)[SCC][RC-764] MSX mapper=2 JP B56500EBB55C2E5FB20DE542EF739D5B Gokiburi Daisakusen. Bug Bomb (1983)(Magic Software)(JP) MSX JP 277B93F5F1A7EF399479FFDF98844922 Golf Game (1983)(ASCII)(JP) MSX JP AE65C3CEB17FD6187AAD36DCFB3B9858 Golf Kyou. Hudson 3D Golf. Golf Crazy (1984)(Hudson Soft)(JP) MSX JP @@ -834,12 +834,12 @@ E25E87AECC04F4E5047B9AF12135CDE1 Goonies, The (1986)(Konami)(JP)[a][RC-734] MSX 8A7C8149F1F3B7A5FC93CD66A7FB2AD5 Gozira 3D. Godzilla vs 3 Major Monsters (1984)(Bandai)(JP) MSX JP 4724699F410FA266A6BCB223EE8C99FC Gozira Kun. Godzilla (1985)(Toho)(JP) MSX JP B197C822F012647A5C30EEA2BA009FC5 Gozira Kun. Godzilla (1985)(Toho)(JP)[a] MSX JP -FF98B021526417A0422DF2A1D7E9ECDF Gradius 2. Nemesis 2 (1987)(Konami)(beta)[a][RC-751] MSX -76D211421642FE6CFCD56AF525B0D877 Gradius 2. Nemesis 2 (1987)(Konami)(beta)[RC-751] MSX -ABBCFC00F71051434E0E82E29B6EA1EF Gradius 2. Nemesis 2 (1987)(Konami)(JP)[a][RC-751] MSX JP -648E923715E4B54CBECE186F098E0956 Gradius 2. Nemesis 2 (1987)(Konami)(JP)[penguin version][RC-751] MSX JP -EE3E6A50E3DE131D217E5DAB55519011 Gradius 2. Nemesis 2 (1987)(Konami)(JP)[RC-751] MSX JP -C1EAEAF5F0B432D2C6A53735B6F53B6D Gradius 2. Nemesis 2 (1987)(Konami)(JP)[SCC][RC-751] MSX JP +FF98B021526417A0422DF2A1D7E9ECDF Gradius 2. Nemesis 2 (1987)(Konami)(beta)[a][RC-751] MSX mapper=2 JP +76D211421642FE6CFCD56AF525B0D877 Gradius 2. Nemesis 2 (1987)(Konami)(beta)[RC-751] MSX mapper=2 JP +ABBCFC00F71051434E0E82E29B6EA1EF Gradius 2. Nemesis 2 (1987)(Konami)(JP)[a][RC-751] MSX mapper=2 JP +648E923715E4B54CBECE186F098E0956 Gradius 2. Nemesis 2 (1987)(Konami)(JP)[penguin version][RC-751] MSX mapper=2 JP +EE3E6A50E3DE131D217E5DAB55519011 Gradius 2. Nemesis 2 (1987)(Konami)(JP)[RC-751] MSX mapper=2 JP +C1EAEAF5F0B432D2C6A53735B6F53B6D Gradius 2. Nemesis 2 (1987)(Konami)(JP)[SCC][RC-751] MSX mapper=2 JP 797016FDBF2B23138C543FEE5C8CC34B Gradius. Nemesis (1986)(Konami)(JP)[a][RC-742] MSX JP 1D19E90B3DF492F0F1956747279FBBAC Gradius. Nemesis (1986)(Konami)(JP)[a][SCC][RC-742] MSX JP 25C0349164616A7540FAA04DCC90237A Gradius. Nemesis (1986)(Konami)(JP)[SCC][RC-742] MSX JP @@ -973,8 +973,8 @@ DC990D182C3EC2B053E9BBE5B3FBF488 King's Valley (1985)(Konami)(JP)[a][RC-727] MS DCD8D9508BE4FD38FDB4C8F50B16DBE3 King's Valley (1985)(Konami)(JP)[a3][RC-727] MSX JP B1E77E416CDBE46E31A50D6412A0A7BD King's Valley (1985)(Konami)(JP)[a4][RC-727] MSX JP F485D4C28102F3C5E7FB1EBA8520382C King's Valley (1985)(Konami)(JP)[RC-727] MSX JP -2F8A812F46E09E39DD3D0DA8524EE96C King's Valley II - The Seal of El Giza (1988)(Konami)(JP)[RC-760] MSX JP -7C002653A7D54C8404EACE7B0694B70D King's Valley II - The Seal of El Giza (1988)(Konami)(JP)[SCC][RC-760] MSX JP +2F8A812F46E09E39DD3D0DA8524EE96C King's Valley II - The Seal of El Giza (1988)(Konami)(JP)[RC-760] MSX mapper=2 JP +7C002653A7D54C8404EACE7B0694B70D King's Valley II - The Seal of El Giza (1988)(Konami)(JP)[SCC][RC-760] MSX mapper=2 JP 46051F8A0AAEFAA012B8783ADA3DA4FD Kinnikuman. Muscle Man (1985)(Bandai)(JP) MSX JP 1CD39F900EDF496A967E4FC8E48D1451 Kinnikuman. Muscle Man (1985)(Bandai)(JP)[a] MSX JP 489075D5E2F3B9B60C41FBF8AD27AC7E Knight Lore (1985)(Nippon Dexter)(JP) MSX JP @@ -1159,10 +1159,10 @@ DA801620C9472CB14C31EA9F3C1DC196 Pai Panic (1983)(ASCII)(JP) MSX JP 63D4E4360BF187C3BF8CE789D4CFB116 Pairs (1983)(ASCII)(JP)[a2] MSX JP 629F18292B2F7A7D3862678A7C221A95 Panther (1986)(IREM)(JP) MSX JP BC250F705C0285E3040E633E698D81B3 Parachuteless Joe (2005)(Paxanga Soft) MSX -E753BB6637DD811F1E9B41747A1D3C58 Parodius - Tako Saves Earth (1988)(Konami)(JP)[a][RC-759] MSX JP -55ADF3B4576B370DD2680D80C333EBDE Parodius - Tako Saves Earth (1988)(Konami)(JP)[a][SCC][RC-759] MSX JP -790972D4E53FCBC2EE46317A583FB52E Parodius - Tako Saves Earth (1988)(Konami)(JP)[RC-759] MSX JP -9548807E96BF5FA2688EA24BF9ED62AF Parodius - Tako Saves Earth (1988)(Konami)(JP)[SCC][RC-759] MSX JP +E753BB6637DD811F1E9B41747A1D3C58 Parodius - Tako Saves Earth (1988)(Konami)(JP)[a][RC-759] MSX mapper=2 JP +55ADF3B4576B370DD2680D80C333EBDE Parodius - Tako Saves Earth (1988)(Konami)(JP)[a][SCC][RC-759] MSX mapper=2 JP +790972D4E53FCBC2EE46317A583FB52E Parodius - Tako Saves Earth (1988)(Konami)(JP)[RC-759] MSX mapper=2 JP +9548807E96BF5FA2688EA24BF9ED62AF Parodius - Tako Saves Earth (1988)(Konami)(JP)[SCC][RC-759] MSX mapper=2 JP 455DF4D49FF8300C702CE961919AC61C Pass Ball (1983)(ASCII)(JP) MSX JP 7224FA4AADD5A2614AFF3BBC339B1CE1 Pastfinder (1984)(Pony Canyon)(JP) MSX JP 8CCCA56B46815714DC5C79A616DE60A0 Payload (1985)(Sony)(JP) MSX JP @@ -1247,8 +1247,8 @@ D2560E3B7D4E137BDBBA8426030D2F44 Rotors (1984)(ASCII)(JP) MSX JP 0F03B2306E11C5182351DB3B7AA30533 Saimazoom (2005)(Karoshi)[RK708] MSX B0D4FB9A9A88FB65C12D2B567B567171 Saimazoom (2005)(Karoshi)[RK708EN] MSX EC869B375D7517A7BA6161B10F5DEE06 Salamander - Operation X (1987)(Konami)(JP)[RC-758] MSX mapper=2 JP -59767E46E226F5C69469694817839189 Salamander - Operation X (1987)(Konami)(JP)[SCC][RC-758] MSX JP -0DA25C28FCE818D6FA7231CB6A914783 Salamander - Operation X (1988)(Zemina)(KR)[RC-758] MSX KR +59767E46E226F5C69469694817839189 Salamander - Operation X (1987)(Konami)(JP)[SCC][RC-758] MSX mapper=2 JP +0DA25C28FCE818D6FA7231CB6A914783 Salamander - Operation X (1988)(Zemina)(KR)[RC-758] MSX mapper=2 KR 305BF5B78B03D28B92DEF20AD89A4E4B Sangokushi. Romance of Three Kingdoms (1986)(Koei)(JP) MSX JP C39692644983104279C32F0E2538C773 Sangokushi. Romance of Three Kingdoms (1986)(Koei)(JP)[a] MSX JP 740A3E9D6A90AE40E37D9DADF94CF10E Sangokushi. Romance of Three Kingdoms (1986)(Koei)(JP)[a2] MSX JP diff --git a/libHawk/MSXHawk/MSXHawk/SCC.h b/libHawk/MSXHawk/MSXHawk/SCC.h index d91561e951..019f074907 100644 --- a/libHawk/MSXHawk/MSXHawk/SCC.h +++ b/libHawk/MSXHawk/MSXHawk/SCC.h @@ -22,6 +22,9 @@ namespace MSXHawk uint8_t ch_1_cnt, ch_2_cnt, ch_3_cnt, ch_4_cnt, ch_5_cnt; uint8_t ch_1_vol, ch_2_vol, ch_3_vol, ch_4_vol, ch_5_vol; + uint8_t ch_1_frl, ch_2_frl, ch_3_frl, ch_4_frl, ch_5_frl; + uint8_t ch_1_frh, ch_2_frh, ch_3_frh, ch_4_frh, ch_5_frh; + uint16_t ch_1_frq, ch_2_frq, ch_3_frq, ch_4_frq, ch_5_frq; uint16_t ch_1_clk, ch_2_clk, ch_3_clk, ch_4_clk, ch_5_clk; @@ -41,7 +44,7 @@ namespace MSXHawk const uint32_t VolumeTable[16] = { - 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 }; void Reset() @@ -85,16 +88,16 @@ namespace MSXHawk else if (addr < 0x90) { // frequencies, volumes, enable - if (addr == 0x80) { ch_1_frq = (uint16_t)((ch_1_frq & 0xFF00) | value); } - else if (addr == 0x81) { ch_1_frq = (uint16_t)((ch_1_frq & 0x00FF) | ((value & 0xF) << 8)); } - else if (addr == 0x82) { ch_2_frq = (uint16_t)((ch_2_frq & 0xFF00) | value); } - else if (addr == 0x83) { ch_2_frq = (uint16_t)((ch_2_frq & 0x00FF) | ((value & 0xF) << 8)); } - else if (addr == 0x84) { ch_3_frq = (uint16_t)((ch_3_frq & 0xFF00) | value); } - else if (addr == 0x85) { ch_3_frq = (uint16_t)((ch_3_frq & 0x00FF) | ((value & 0xF) << 8)); } - else if (addr == 0x86) { ch_4_frq = (uint16_t)((ch_4_frq & 0xFF00) | value); } - else if (addr == 0x87) { ch_4_frq = (uint16_t)((ch_4_frq & 0x00FF) | ((value & 0xF) << 8)); } - else if (addr == 0x88) { ch_5_frq = (uint16_t)((ch_5_frq & 0xFF00) | value); } - else if (addr == 0x89) { ch_5_frq = (uint16_t)((ch_5_frq & 0x00FF) | ((value & 0xF) << 8)); } + if (addr == 0x80) { ch_1_frl = value; } + else if (addr == 0x81) { ch_1_frh = (value & 0xF); } + else if (addr == 0x82) { ch_2_frl = value; } + else if (addr == 0x83) { ch_2_frh = (value & 0xF); } + else if (addr == 0x84) { ch_3_frl = value; } + else if (addr == 0x85) { ch_3_frh = (value & 0xF); } + else if (addr == 0x86) { ch_4_frl = value; } + else if (addr == 0x87) { ch_4_frh = (value & 0xF); } + else if (addr == 0x88) { ch_5_frl = value; } + else if (addr == 0x89) { ch_5_frh = (value & 0xF); } else if (addr == 0x8A) { ch_1_vol = value; } else if (addr == 0x8B) { ch_2_vol = value; } else if (addr == 0x8C) { ch_3_vol = value; } @@ -109,17 +112,17 @@ namespace MSXHawk ch_5_en = (value & 16) == 16; } - if (ch_1_frq == 0) { ch_1_frq = 0x1000; } - if (ch_2_frq == 0) { ch_2_frq = 0x1000; } - if (ch_3_frq == 0) { ch_3_frq = 0x1000; } - if (ch_4_frq == 0) { ch_4_frq = 0x1000; } - if (ch_5_frq == 0) { ch_5_frq = 0x1000; } + ch_1_frq = (ch_1_frl | (ch_1_frh << 8)) + 1; + ch_2_frq = (ch_2_frl | (ch_2_frh << 8)) + 1; + ch_3_frq = (ch_3_frl | (ch_3_frh << 8)) + 1; + ch_4_frq = (ch_4_frl | (ch_4_frh << 8)) + 1; + ch_5_frq = (ch_5_frl | (ch_5_frh << 8)) + 1; - if (ch_1_en) { ch_1_out = (int32_t)page_pntr[ch_1_cnt] * VolumeTable[ch_1_vol]; } else { ch_1_out = 0; } - if (ch_2_en) { ch_2_out = (int32_t)page_pntr[ch_2_cnt + 0x20] * VolumeTable[ch_2_vol]; } else { ch_2_out = 0; } - if (ch_3_en) { ch_3_out = (int32_t)page_pntr[ch_3_cnt + 0x40] * VolumeTable[ch_3_vol]; } else { ch_3_out = 0; } - if (ch_4_en) { ch_4_out = (int32_t)page_pntr[ch_4_cnt + 0x60] * VolumeTable[ch_4_vol]; } else { ch_4_out = 0; } - if (ch_5_en) { ch_5_out = (int32_t)page_pntr[ch_5_cnt + 0x60] * VolumeTable[ch_5_vol]; } else { ch_5_out = 0; } + if (ch_1_en) { ch_1_out = (int32_t)((int8_t)page_pntr[ch_1_cnt]) * VolumeTable[ch_1_vol]; } else { ch_1_out = 0; } + if (ch_2_en) { ch_2_out = (int32_t)((int8_t)page_pntr[ch_2_cnt + 0x20]) * VolumeTable[ch_2_vol]; } else { ch_2_out = 0; } + if (ch_3_en) { ch_3_out = (int32_t)((int8_t)page_pntr[ch_3_cnt + 0x40]) * VolumeTable[ch_3_vol]; } else { ch_3_out = 0; } + if (ch_4_en) { ch_4_out = (int32_t)((int8_t)page_pntr[ch_4_cnt + 0x60]) * VolumeTable[ch_4_vol]; } else { ch_4_out = 0; } + if (ch_5_en) { ch_5_out = (int32_t)((int8_t)page_pntr[ch_5_cnt + 0x60]) * VolumeTable[ch_5_vol]; } else { ch_5_out = 0; } } else { @@ -141,7 +144,7 @@ namespace MSXHawk ch_1_cnt++; ch_1_cnt &= 0x1F; - ch_1_out = (int32_t)page_pntr[ch_1_cnt] * VolumeTable[ch_1_vol]; + ch_1_out = (int32_t)((int8_t)page_pntr[ch_1_cnt]) * VolumeTable[ch_1_vol]; } } @@ -155,7 +158,7 @@ namespace MSXHawk ch_2_cnt++; ch_2_cnt &= 0x1F; - ch_2_out = (int32_t)page_pntr[ch_2_cnt + 0x20] * VolumeTable[ch_2_vol]; + ch_2_out = (int32_t)((int8_t)page_pntr[ch_2_cnt + 0x20]) * VolumeTable[ch_2_vol]; } } @@ -169,7 +172,7 @@ namespace MSXHawk ch_3_cnt++; ch_3_cnt &= 0x1F; - ch_3_out = (int32_t)page_pntr[ch_3_cnt + 0x40] * VolumeTable[ch_3_vol]; + ch_3_out = (int32_t)((int8_t)page_pntr[ch_3_cnt + 0x40]) * VolumeTable[ch_3_vol]; } } @@ -183,7 +186,7 @@ namespace MSXHawk ch_4_cnt++; ch_4_cnt &= 0x1F; - ch_4_out = (int32_t)page_pntr[ch_4_cnt + 0x60] * VolumeTable[ch_4_vol]; + ch_4_out = (int32_t)((int8_t)page_pntr[ch_4_cnt + 0x60]) * VolumeTable[ch_4_vol]; } } @@ -197,7 +200,7 @@ namespace MSXHawk ch_5_cnt++; ch_5_cnt &= 0x1F; - ch_5_out = (int32_t)page_pntr[ch_5_cnt + 0x60] * VolumeTable[ch_5_vol]; + ch_5_out = (int32_t)((int8_t)page_pntr[ch_5_cnt + 0x60]) * VolumeTable[ch_5_vol]; } } } @@ -233,6 +236,18 @@ namespace MSXHawk *saver = ch_4_vol; saver++; *saver = ch_5_vol; saver++; + *saver = ch_1_frl; saver++; + *saver = ch_2_frl; saver++; + *saver = ch_3_frl; saver++; + *saver = ch_4_frl; saver++; + *saver = ch_5_frl; saver++; + + *saver = ch_1_frh; saver++; + *saver = ch_2_frh; saver++; + *saver = ch_3_frh; saver++; + *saver = ch_4_frh; saver++; + *saver = ch_5_frh; saver++; + *saver = (uint8_t)(ch_1_frq & 0xFF); saver++; *saver = (uint8_t)((ch_1_frq >> 8) & 0xFF); saver++; *saver = (uint8_t)(ch_2_frq & 0xFF); saver++; *saver = (uint8_t)((ch_2_frq >> 8) & 0xFF); saver++; *saver = (uint8_t)(ch_3_frq & 0xFF); saver++; *saver = (uint8_t)((ch_3_frq >> 8) & 0xFF); saver++; @@ -271,6 +286,18 @@ namespace MSXHawk ch_4_vol = *loader; loader++; ch_5_vol = *loader; loader++; + ch_1_frl = *loader; loader++; + ch_2_frl = *loader; loader++; + ch_3_frl = *loader; loader++; + ch_4_frl = *loader; loader++; + ch_5_frl = *loader; loader++; + + ch_1_frh = *loader; loader++; + ch_2_frh = *loader; loader++; + ch_3_frh = *loader; loader++; + ch_4_frh = *loader; loader++; + ch_5_frh = *loader; loader++; + ch_1_frq = *loader; loader++; ch_1_frq |= (*loader << 8); loader++; ch_2_frq = *loader; loader++; ch_2_frq |= (*loader << 8); loader++; ch_3_frq = *loader; loader++; ch_3_frq |= (*loader << 8); loader++; @@ -286,11 +313,11 @@ namespace MSXHawk old_sample = *loader; loader++; old_sample |= (*loader << 8); loader++; old_sample |= (*loader << 16); loader++; old_sample |= (*loader << 24); loader++; - if (ch_1_en) { ch_1_out = (int32_t)page_pntr[ch_1_cnt] * VolumeTable[ch_1_vol]; } else { ch_1_out = 0; } - if (ch_2_en) { ch_2_out = (int32_t)page_pntr[ch_2_cnt + 0x20] * VolumeTable[ch_2_vol]; } else { ch_2_out = 0; } - if (ch_3_en) { ch_3_out = (int32_t)page_pntr[ch_3_cnt + 0x40] * VolumeTable[ch_3_vol]; } else { ch_3_out = 0; } - if (ch_4_en) { ch_4_out = (int32_t)page_pntr[ch_4_cnt + 0x60] * VolumeTable[ch_4_vol]; } else { ch_4_out = 0; } - if (ch_5_en) { ch_5_out = (int32_t)page_pntr[ch_5_cnt + 0x60] * VolumeTable[ch_5_vol]; } else { ch_5_out = 0; } + if (ch_1_en) { ch_1_out = (int32_t)((int8_t)page_pntr[ch_1_cnt]) * VolumeTable[ch_1_vol]; } else { ch_1_out = 0; } + if (ch_2_en) { ch_2_out = (int32_t)((int8_t)page_pntr[ch_2_cnt + 0x20]) * VolumeTable[ch_2_vol]; } else { ch_2_out = 0; } + if (ch_3_en) { ch_3_out = (int32_t)((int8_t)page_pntr[ch_3_cnt + 0x40]) * VolumeTable[ch_3_vol]; } else { ch_3_out = 0; } + if (ch_4_en) { ch_4_out = (int32_t)((int8_t)page_pntr[ch_4_cnt + 0x60]) * VolumeTable[ch_4_vol]; } else { ch_4_out = 0; } + if (ch_5_en) { ch_5_out = (int32_t)((int8_t)page_pntr[ch_5_cnt + 0x60]) * VolumeTable[ch_5_vol]; } else { ch_5_out = 0; } return loader; } diff --git a/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs b/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs index 3f09ddea66..9897071a38 100644 --- a/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs +++ b/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs @@ -5,7 +5,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.MSX { - [Core(CoreNames.MSXHawk, "", isReleased: false)] + [Core(CoreNames.MSXHawk, "", isReleased: true)] [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class MSX : IEmulator, IVideoProvider, ISoundProvider, ISaveRam, IInputPollable, IRegionable, ISettable {