Skip to content

Commit b642a4c

Browse files
authored
Merge pull request #1 from Gumball2415/dpcm-bit-reversal
DPCM Bit Order Reversal
2 parents e562bb3 + 942fea3 commit b642a4c

File tree

4 files changed

+54
-5
lines changed

4 files changed

+54
-5
lines changed

Source/SampleEditorDlg.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ BEGIN_MESSAGE_MAP(CSampleEditorDlg, CDialog)
8181
ON_BN_CLICKED(IDC_TILT, &CSampleEditorDlg::OnBnClickedTilt)
8282
ON_WM_HSCROLL()
8383
ON_WM_GETMINMAXINFO()
84+
ON_BN_CLICKED(IDC_BIT_REVERSE, &CSampleEditorDlg::OnBnClickedBitReverse)
8485
END_MESSAGE_MAP()
8586

8687

@@ -235,6 +236,50 @@ void CSampleEditorDlg::OnBnClickedTilt()
235236
SelectionChanged();
236237
}
237238

239+
void CSampleEditorDlg::OnBnClickedBitReverse()
240+
{
241+
m_pSoundGen->CancelPreviewSample();
242+
243+
// using a lookup table for bit reversal
244+
static const unsigned char BitTable[] =
245+
{
246+
0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
247+
0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
248+
0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
249+
0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
250+
0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
251+
0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
252+
0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
253+
0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
254+
0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
255+
0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
256+
0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
257+
0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
258+
0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
259+
0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
260+
0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
261+
0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
262+
};
263+
char* InputData = new char[m_pSample->GetSize()];
264+
memcpy(InputData, m_pSample->GetData(), m_pSample->GetSize());
265+
char* DataCache = new char[m_pSample->GetSize()];
266+
// bit reverse each byte of InputData and save it to DataCache
267+
for (int i=1; i != m_pSample->GetSize(); i++) {
268+
char InputByte = InputData[i];
269+
char ByteCache = InputByte & 1;
270+
ByteCache = (BitTable[InputByte & 0xff]);// |
271+
//(BitTable[(InputByte >> 8) & 0xff] << 16) |
272+
//(BitTable[(InputByte >> 16) & 0xff] << 8) |
273+
//(BitTable[(InputByte >> 24) & 0xff]);
274+
275+
DataCache[i] = ByteCache;
276+
}
277+
m_pSample->SetData(m_pSample->GetSize(), DataCache);
278+
279+
UpdateSampleView();
280+
SelectionChanged();
281+
}
282+
238283
void CSampleEditorDlg::OnBnClickedDeltastart()
239284
{
240285
UpdateSampleView();

Source/SampleEditorDlg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,5 @@ class CSampleEditorDlg : public CDialog
6767
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
6868
virtual BOOL PreTranslateMessage(MSG* pMsg);
6969
afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
70+
afx_msg void OnBnClickedBitReverse();
7071
};

res/0CC-FamiTracker.rc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,14 +1627,15 @@ BEGIN
16271627
DEFPUSHBUTTON "OK",IDOK,424,213,50,14
16281628
PUSHBUTTON "Cancel",IDCANCEL,424,230,50,14
16291629
CONTROL "",IDC_SAMPLE,"Static",SS_WHITERECT | SS_NOTIFY | SS_SUNKEN,2,2,476,204
1630-
PUSHBUTTON "Play",IDC_PLAY,7,212,50,14
1631-
PUSHBUTTON "Delete",IDC_DELETE,64,212,50,14
1630+
PUSHBUTTON "Play",IDC_PLAY,7,212,39,14
1631+
PUSHBUTTON "Delete",IDC_DELETE,47,212,38,14
16321632
CONTROL "",IDC_PITCH,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,45,232,130,12
1633-
PUSHBUTTON "Tilt",IDC_TILT,121,212,50,14
1633+
PUSHBUTTON "Tilt",IDC_TILT,86,212,37,14
16341634
LTEXT "Pitch (15)",IDC_STATIC_PITCH,8,233,34,11
16351635
CONTROL "Center wave",IDC_DELTASTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,179,232,57,10
16361636
CONTROL "",IDC_ZOOM,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,240,213,181,12
16371637
LTEXT "Zoom (1.00x)",IDC_STATIC_DPCM_ZOOM,185,214,54,8
1638+
PUSHBUTTON "Bit Reverse",IDC_BIT_REVERSE,124,212,47,14
16381639
END
16391640

16401641
IDD_DETUNE DIALOGEX 0, 0, 293, 272
@@ -2261,7 +2262,8 @@ BEGIN
22612262
0, 100, 0, 0,
22622263
0, 100, 0, 0,
22632264
0, 100, 0, 0,
2264-
0, 100, 0, 0
2265+
0, 100, 0, 0,
2266+
0, 0, 0, 0
22652267
END
22662268

22672269
IDD_INSTRUMENT_DPCM AFX_DIALOG_LAYOUT

res/resource.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@
598598
#define IDC_N163_OFFSET_EDIT 1463
599599
#define IDC_N163_OFFSET_DB 1464
600600
#define IDC_FONT_PERCENT 1465
601+
#define IDC_BIT_REVERSE 1467
601602
#define IDS_FIND_BEGIN 9001
602603
#define IDS_FIND_END 9002
603604
#define ID_TRACKER_PLAY 32771
@@ -759,7 +760,7 @@
759760
#ifndef APSTUDIO_READONLY_SYMBOLS
760761
#define _APS_NEXT_RESOURCE_VALUE 358
761762
#define _APS_NEXT_COMMAND_VALUE 33200
762-
#define _APS_NEXT_CONTROL_VALUE 1466
763+
#define _APS_NEXT_CONTROL_VALUE 1468
763764
#define _APS_NEXT_SYMED_VALUE 179
764765
#endif
765766
#endif

0 commit comments

Comments
 (0)