flamewing / flamedriver

Upgraded S3&K sound driver
https://github.com/flamewing/flamedriver-skdisasm
Other
12 stars 5 forks source link

SMPS2ASM: vcUnusedBits #19

Open Brainulator9 opened 2 years ago

Brainulator9 commented 2 years ago

Looking at the Hidden Palace source code dump, I'm inclined to believe that tracks whose voices set the unused bits do so in error. Here's what I found on the 68000 version's dump, in a file called "mdmcr11.lib" (the Z80 version uses substantially the same code):

;=======================================;
;       FM VOICE        ;
;=======================================;
;   CNF ALG,FBK
;   MD  M1,D1,M2,D2,M3,D3,M4,D4
;   TL  T1,T2,T3,T4
;   RSAR    X1,X2,X3,X4
;   D1R X1,X2,X3,X4
;   D2R X1,X2,X3,X4
;   RRL R1,DL1,R2,DL2,R3,DL3,R4,DL4

;----------------< CNF >----------------;
CNF MACRO   ALG,FBK
cnect   set ALG
    DB  ALG+FBK*8
    ENDM
;----------------< MD >-----------------;
MD  MACRO   M1,D1,M2,D2,M3,D3,M4,D4
    DB  D1*10H+M1,D2*10H+M2
    DB  D3*10H+M3,D4*10H+M4
    ENDM
;----------------< TL >-----------------;
TL  MACRO   T1,T2,T3,T4
    ifz cnect
    db  T1,T2,T3,T4.or.80h
    endif
    ifz cnect-1
    db  T1,T2,T3,T4.or.80h
    endif
    ifz cnect-2
    db  T1,T2,T3,T4.or.80h
    endif
    ifz cnect-3
    db  T1,T2,T3,T4.or.80h
    endif
    ifz cnect-4
    db  T1,T2.or.80h,T3,T4.or.80h
    endif
    ifz cnect-5
    db  T1,T2.or.80h,T3.or.80h,T4.or.80h
    endif
    ifz cnect-6
    db  T1,T2.or.80h,T3.or.80h,T4.or.80h
    endif
    ifz cnect-7
    db  T1.or.80h,T2.or.80h,T3.or.80h,T4.or.80h
    endif
    ENDM
;----------------< RSAR >---------------;
RSAR    MACRO   K1,A1,K2,A2,K3,A3,K4,A4
    DB  K1*40H+A1,K2*40H+A2,K3*40H+A3,K4*40H+A4
    ENDM
;----------------< D1R >----------------;
D1R MACRO   X1,X2,X3,X4
    DB  X1,X2,X3,X4
    ENDM
;----------------< D2R >----------------;
D2R MACRO   X1,X2,X3,X4
    DB  X1,X2,X3,X4
    ENDM
;----------------< RRL >----------------;
RRL MACRO   R1,DL1,R2,DL2,R3,DL3,R4,DL4
    DB  R1+DL1*10H,R2+DL2*10H
    DB  R3+DL3*10H,R4+DL4*10H
    ENDM

The fact that D1R (the first delay rate, which also encompasses the AM bits...) is implemented as just 4 byte writes, with no other math involved, leads me to believe that, for instance, a value of $24 for one of the operators in Oil Ocean Zone's music was just a mistake.

Clownacy commented 2 years ago

What's the issue exactly? I already figured that those bits were accidental, and this does confirm it, but what can/should be done about it?

Brainulator9 commented 2 years ago

Probably should have specified: I'm wondering whether it would make more sense to just fix those bits in the improved copies, kind of like what was done to sound $BC in Sonic 1 (in which another bit was removed that the game ignores).