packages: xmp/xmp-nondfsg.patch - dropped ppunpack (mainline replaced it wi...
lkrotowski
lkrotowski at pld-linux.org
Wed Sep 30 19:19:13 CEST 2009
Author: lkrotowski Date: Wed Sep 30 17:19:13 2009 GMT
Module: packages Tag: HEAD
---- Log message:
- dropped ppunpack (mainline replaced it with PD version)
- fmopl up to 0.60
- up to 2.7.1
---- Files affected:
packages/xmp:
xmp-nondfsg.patch (1.1 -> 1.2)
---- Diffs:
================================================================
Index: packages/xmp/xmp-nondfsg.patch
diff -u packages/xmp/xmp-nondfsg.patch:1.1 packages/xmp/xmp-nondfsg.patch:1.2
--- packages/xmp/xmp-nondfsg.patch:1.1 Thu Jul 24 00:54:29 2003
+++ packages/xmp/xmp-nondfsg.patch Wed Sep 30 19:19:08 2009
@@ -1,1770 +1,3409 @@
---- xmp-2.0.5-pre3/src/player/fmopl.c.orig 2001-02-26 01:39:24.000000000 +0100
-+++ xmp-2.0.5-pre3/src/player/fmopl.c 2001-01-13 21:10:53.000000000 +0100
-@@ -1,36 +1,1341 @@
+diff --git a/src/player/fmopl.c b/src/player/fmopl.c
+index 607bf9f..c573ffa 100644
+--- a/src/player/fmopl.c
++++ b/src/player/fmopl.c
+@@ -1,17 +1,52 @@
/*
-- * Dummy DFSG-compliant replacement for fmopl.c
-- *
-- * $Id$
-- */
-+**
-+** File: fmopl.c -- software implementation of FM sound generator
-+**
-+** Copyright (C) 1999 Tatsuyuki Satoh , MultiArcadeMachineEmurator development
-+**
-+** Version 0.36f
-+**
-+*/
+ **
+-** File: fmopl.c -- software implementation of FM sound generator
++** File: fmopl.c - software implementation of FM sound generator
++** types OPL and OPL2
+ **
+-** Copyright (C) 1999 Tatsuyuki Satoh , MultiArcadeMachineEmurator development
++** Copyright (C) 1999,2000 Tatsuyuki Satoh , MultiArcadeMachineEmulator development
++** Copyright (C) 2002 Jarek Burczynski
+ **
+-** Version 0.36f
++** Version 0.60
+ **
+-*/
-+/*
-+ preliminary :
-+ Problem :
-+ note:
-+*/
-+
-+#include <stdio.h>
- #include <stdlib.h>
-+#include <string.h>
-+#include <stdarg.h>
-+#include <math.h>
-+#include "driver.h" /* use M.A.M.E. */
-+
-+/*** For xmp ***/
-+#define HAS_YM3812 1
-+#define INLINE inline
-+/* $Id$ */
-+
+-/*
+- preliminary :
+- Problem :
+- note:
++Revision History:
++
++04-28-2002 Jarek Burczynski:
++ - binary exact Envelope Generator (verified on real YM3812);
++ compared to YM2151: the EG clock is equal to internal_clock,
++ rates are 2 times slower and volume resolution is one bit less
++ - modified interface functions (they no longer return pointer -
++ that's internal to the emulator now):
++ - new wrapper functions for OPLCreate: YM3526Init(), YM3812Init() and Y8950Init()
++ - corrected 'off by one' error in feedback calculations (when feedback is off)
++ - enabled waveform usage (credit goes to Vlad Romascanu and zazzal22)
++ - speeded up noise generator calculations (Nicola Salmoria)
++
++03-24-2002 Jarek Burczynski (thanks to Dox for the YM3812 chip)
++ Complete rewrite (all verified on real YM3812):
++ - corrected sin_tab and tl_tab data
++ - corrected operator output calculations
++ - corrected waveform_select_enable register;
++ simply: ignore all writes to waveform_select register when
++ waveform_select_enable == 0 and do not change the waveform previously selected.
++ - corrected KSR handling
++ - corrected Envelope Generator: attack shape, Sustain mode and
++ Percussive/Non-percussive modes handling
++ - Envelope Generator rates are two times slower now
++ - LFO amplitude (tremolo) and phase modulation (vibrato)
++ - rhythm sounds phase generation
++ - white noise generator (big thanks to Olivier Galibert for mentioning Berlekamp-Massey algorithm)
++ - corrected key on/off handling (the 'key' signal is ORed from three sources: FM, rhythm and CSM)
++ - funky details (like ignoring output of operator 1 in BD rhythm sound when connect == 1)
++
++12-28-2001 Acho A. Tang
++ - reflected Delta-T EOS status on Y8950 status port.
++ - fixed subscription range of attack/decay tables
++
++
++ To do:
++ add delay before key off in CSM mode (see CSMKeyControll)
++ verify volume of the FM part on the Y8950
+ */
+
+ #include <stdio.h>
+@@ -19,80 +54,235 @@
+ #include <string.h>
+ #include <stdarg.h>
+ #include <math.h>
+-#include "driver.h" /* use M.A.M.E. */
+-
+-/*** For xmp ***/
+-#define HAS_YM3812 1
+-#define INLINE inline
+-/* $Id$ */
+-
#include "fmopl.h"
-+#ifndef PI
-+#define PI 3.14159265358979323846
+ #ifndef PI
+ #define PI 3.14159265358979323846
+ #endif
+
++#ifdef _MSC_VER
++# define INLINE __inline
++#elif defined(__GNUC__)
++# define INLINE inline
++#else
++# define INLINE
++#endif
+
+-/* -------------------- preliminary define section --------------------- */
+-/* attack/decay rate time rate */
+-#define OPL_ARRATE 141280 /* RATE 4 = 2826.24ms @ 3.6MHz */
+-#define OPL_DRRATE 1956000 /* RATE 4 = 39280.64ms @ 3.6MHz */
+-
+-#define DELTAT_MIXING_LEVEL (1) /* DELTA-T ADPCM MIXING LEVEL */
+-
+-#define FREQ_BITS 24 /* frequency turn */
+-
+-/* counter bits = 20 , octerve 7 */
+-#define FREQ_RATE (1<<(FREQ_BITS-20))
+-#define TL_BITS (FREQ_BITS+2)
++/* output final shift */
++#if (OPL_SAMPLE_BITS==16)
++ #define FINAL_SH (0)
++ #define MAXOUT (+32767)
++ #define MINOUT (-32768)
++#else
++ #define FINAL_SH (8)
++ #define MAXOUT (+127)
++ #define MINOUT (-128)
++#endif
+
+-/* final output shift , limit minimum and maximum */
+-#define OPL_OUTSB (TL_BITS+3-16) /* OPL output final shift 16bit */
+-#define OPL_MAXOUT (0x7fff<<OPL_OUTSB)
+-#define OPL_MINOUT (-0x8000<<OPL_OUTSB)
+
+-/* -------------------- quality selection --------------------- */
++#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */
++#define EG_SH 16 /* 16.16 fixed point (EG timing) */
++#define LFO_SH 24 /* 8.24 fixed point (LFO calculations) */
++#define TIMER_SH 16 /* 16.16 fixed point (timers calculations) */
+
+-/* sinwave entries */
+-/* used static memory = SIN_ENT * 4 (byte) */
+-#define SIN_ENT 2048
++#define FREQ_MASK ((1<<FREQ_SH)-1)
+
+-/* output level entries (envelope,sinwave) */
+-/* envelope counter lower bits */
+-#define ENV_BITS 16
+ /* envelope output entries */
+-#define EG_ENT 4096
+-/* used dynamic memory = EG_ENT*4*4(byte)or EG_ENT*6*4(byte) */
+-/* used static memory = EG_ENT*4 (byte) */
++#define ENV_BITS 10
++#define ENV_LEN (1<<ENV_BITS)
++#define ENV_STEP (128.0/ENV_LEN)
+
+-#define EG_OFF ((2*EG_ENT)<<ENV_BITS) /* OFF */
+-#define EG_DED EG_OFF
+-#define EG_DST (EG_ENT<<ENV_BITS) /* DECAY START */
+-#define EG_AED EG_DST
+-#define EG_AST 0 /* ATTACK START */
++#define MAX_ATT_INDEX ((1<<(ENV_BITS-1))-1) /*511*/
++#define MIN_ATT_INDEX (0)
+
+-#define EG_STEP (96.0/EG_ENT) /* OPL is 0.1875 dB step */
++/* sinwave entries */
++#define SIN_BITS 10
++#define SIN_LEN (1<<SIN_BITS)
++#define SIN_MASK (SIN_LEN-1)
+
+-/* LFO table entries */
+-#define VIB_ENT 512
+-#define VIB_SHIFT (32-9)
+-#define AMS_ENT 512
+-#define AMS_SHIFT (32-9)
++#define TL_RES_LEN (256) /* 8 bits addressing (real chip) */
+
+-#define VIB_RATE 256
+
+-/* -------------------- local defines , macros --------------------- */
+
+ /* register number to channel number , slot offset */
+ #define SLOT1 0
+ #define SLOT2 1
+
+-/* envelope phase */
+-#define ENV_MOD_RR 0x00
+-#define ENV_MOD_DR 0x01
+-#define ENV_MOD_AR 0x02
++/* Envelope Generator phases */
++
++#define EG_ATT 4
++#define EG_DEC 3
++#define EG_SUS 2
++#define EG_REL 1
++#define EG_OFF 0
++
++
++/* save output as raw 16-bit sample */
++
++/*#define SAVE_SAMPLE*/
++
++#ifdef SAVE_SAMPLE
++static FILE *sample[1];
++ #if 1 /*save to MONO file */
++ #define SAVE_ALL_CHANNELS \
++ { signed int pom = lt; \
++ fputc((unsigned short)pom&0xff,sample[0]); \
++ fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
++ }
++ #else /*save to STEREO file */
++ #define SAVE_ALL_CHANNELS \
++ { signed int pom = lt; \
++ fputc((unsigned short)pom&0xff,sample[0]); \
++ fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
++ pom = rt; \
++ fputc((unsigned short)pom&0xff,sample[0]); \
++ fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
++ }
++ #endif
++#endif
++
++/* #define LOG_CYM_FILE */
++#ifdef LOG_CYM_FILE
++ FILE * cymfile = NULL;
+#endif
+
+
-+/* -------------------- preliminary define section --------------------- */
-+/* attack/decay rate time rate */
-+#define OPL_ARRATE 141280 /* RATE 4 = 2826.24ms @ 3.6MHz */
-+#define OPL_DRRATE 1956000 /* RATE 4 = 39280.64ms @ 3.6MHz */
+
-+#define DELTAT_MIXING_LEVEL (1) /* DELTA-T ADPCM MIXING LEVEL */
++#define OPL_TYPE_WAVESEL 0x01 /* waveform select */
++#define OPL_TYPE_ADPCM 0x02 /* DELTA-T ADPCM unit */
++#define OPL_TYPE_KEYBOARD 0x04 /* keyboard interface */
++#define OPL_TYPE_IO 0x08 /* I/O port */
++
++/* ---------- Generic interface section ---------- */
++#define OPL_TYPE_YM3526 (0)
++#define OPL_TYPE_YM3812 (OPL_TYPE_WAVESEL)
++#define OPL_TYPE_Y8950 (OPL_TYPE_ADPCM|OPL_TYPE_KEYBOARD|OPL_TYPE_IO)
++
+
-+#define FREQ_BITS 24 /* frequency turn */
+
-+/* counter bits = 20 , octerve 7 */
-+#define FREQ_RATE (1<<(FREQ_BITS-20))
-+#define TL_BITS (FREQ_BITS+2)
++/* Saving is necessary for member of the 'R' mark for suspend/resume */
+
-+/* final output shift , limit minimum and maximum */
-+#define OPL_OUTSB (TL_BITS+3-16) /* OPL output final shift 16bit */
-+#define OPL_MAXOUT (0x7fff<<OPL_OUTSB)
-+#define OPL_MINOUT (-0x8000<<OPL_OUTSB)
++typedef struct{
++ UINT32 ar; /* attack rate: AR<<2 */
++ UINT32 dr; /* decay rate: DR<<2 */
++ UINT32 rr; /* release rate:RR<<2 */
++ UINT8 KSR; /* key scale rate */
++ UINT8 ksl; /* keyscale level */
++ UINT8 ksr; /* key scale rate: kcode>>KSR */
++ UINT8 mul; /* multiple: mul_tab[ML] */
++
++ /* Phase Generator */
++ UINT32 Cnt; /* frequency counter */
++ UINT32 Incr; /* frequency counter step */
++ UINT8 FB; /* feedback shift value */
++ INT32 *connect1; /* slot1 output pointer */
++ INT32 op1_out[2]; /* slot1 output for feedback */
++ UINT8 CON; /* connection (algorithm) type */
++
++ /* Envelope Generator */
++ UINT8 eg_type; /* percussive/non-percussive mode */
++ UINT8 state; /* phase type */
++ UINT32 TL; /* total level: TL << 2 */
++ INT32 TLL; /* adjusted now TL */
++ INT32 volume; /* envelope counter */
++ UINT32 sl; /* sustain level: sl_tab[SL] */
++
++ UINT8 eg_sh_ar; /* (attack state) */
++ UINT8 eg_sel_ar; /* (attack state) */
++ UINT8 eg_sh_dr; /* (decay state) */
++ UINT8 eg_sel_dr; /* (decay state) */
++ UINT8 eg_sh_rr; /* (release state) */
++ UINT8 eg_sel_rr; /* (release state) */
+
-+/* -------------------- quality selection --------------------- */
++ UINT32 key; /* 0 = KEY OFF, >0 = KEY ON */
+
-+/* sinwave entries */
-+/* used static memory = SIN_ENT * 4 (byte) */
-+#define SIN_ENT 2048
++ /* LFO */
++ UINT32 AMmask; /* LFO Amplitude Modulation enable mask */
++ UINT8 vib; /* LFO Phase Modulation enable flag (active high)*/
++
++ /* waveform select */
++ unsigned int wavetable;
++} OPL_SLOT;
++
++typedef struct{
++ OPL_SLOT SLOT[2];
++ /* phase generator state */
++ UINT32 block_fnum; /* block+fnum */
++ UINT32 fc; /* Freq. Increment base */
++ UINT32 ksl_base; /* KeyScaleLevel Base step */
++ UINT8 kcode; /* key code (for key scaling) */
++} OPL_CH;
++
++/* OPL state */
++typedef struct fm_opl_f {
++ /* FM channel slots */
++ OPL_CH P_CH[9]; /* OPL/OPL2 chips have 9 channels*/
++
++ UINT32 eg_cnt; /* global envelope generator counter */
++ UINT32 eg_timer; /* global envelope generator counter works at frequency = chipclock/72 */
++ UINT32 eg_timer_add; /* step of eg_timer */
++ UINT32 eg_timer_overflow; /* envelope generator timer overlfows every 1 sample (on real chip) */
++
++ UINT8 rhythm; /* Rhythm mode */
++
++ UINT32 fn_tab[1024]; /* fnumber->increment counter */
++
++ /* LFO */
++ UINT8 lfo_am_depth;
++ UINT8 lfo_pm_depth_range;
++ UINT32 lfo_am_cnt;
++ UINT32 lfo_am_inc;
++ UINT32 lfo_pm_cnt;
++ UINT32 lfo_pm_inc;
++
++ UINT32 noise_rng; /* 23 bit noise shift register */
++ UINT32 noise_p; /* current noise 'phase' */
++ UINT32 noise_f; /* current noise period */
+
-+/* output level entries (envelope,sinwave) */
-+/* envelope counter lower bits */
-+#define ENV_BITS 16
-+/* envelope output entries */
-+#define EG_ENT 4096
-+/* used dynamic memory = EG_ENT*4*4(byte)or EG_ENT*6*4(byte) */
-+/* used static memory = EG_ENT*4 (byte) */
-+
-+#define EG_OFF ((2*EG_ENT)<<ENV_BITS) /* OFF */
-+#define EG_DED EG_OFF
-+#define EG_DST (EG_ENT<<ENV_BITS) /* DECAY START */
-+#define EG_AED EG_DST
-+#define EG_AST 0 /* ATTACK START */
-+
-+#define EG_STEP (96.0/EG_ENT) /* OPL is 0.1875 dB step */
-+
-+/* LFO table entries */
-+#define VIB_ENT 512
-+#define VIB_SHIFT (32-9)
-+#define AMS_ENT 512
-+#define AMS_SHIFT (32-9)
-+
-+#define VIB_RATE 256
-+
-+/* -------------------- local defines , macros --------------------- */
-+
-+/* register number to channel number , slot offset */
-+#define SLOT1 0
-+#define SLOT2 1
-+
-+/* envelope phase */
-+#define ENV_MOD_RR 0x00
-+#define ENV_MOD_DR 0x01
-+#define ENV_MOD_AR 0x02
-+
-+/* -------------------- tables --------------------- */
-+static const int slot_array[32]=
-+{
-+ 0, 2, 4, 1, 3, 5,-1,-1,
-+ 6, 8,10, 7, 9,11,-1,-1,
-+ 12,14,16,13,15,17,-1,-1,
-+ -1,-1,-1,-1,-1,-1,-1,-1
++ UINT8 wavesel; /* waveform select enable flag */
++
++ int T[2]; /* timer counters */
++ UINT8 st[2]; /* timer enable */
++
++#if BUILD_Y8950
++ /* Delta-T ADPCM unit (Y8950) */
++
++ YM_DELTAT *deltat;
++
++ /* Keyboard / I/O interface unit*/
++ UINT8 portDirection;
++ UINT8 portLatch;
++ OPL_PORTHANDLER_R porthandler_r;
++ OPL_PORTHANDLER_W porthandler_w;
++ int port_param;
++ OPL_PORTHANDLER_R keyboardhandler_r;
++ OPL_PORTHANDLER_W keyboardhandler_w;
++ int keyboard_param;
++#endif
++
++ /* external event callback handlers */
++ OPL_TIMERHANDLER TimerHandler; /* TIMER handler */
++ int TimerParam; /* TIMER parameter */
++ OPL_IRQHANDLER IRQHandler; /* IRQ handler */
++ int IRQParam; /* IRQ parameter */
++ OPL_UPDATEHANDLER UpdateHandler;/* stream update handler */
++ int UpdateParam; /* stream update parameter */
++
++ UINT8 type; /* chip type */
++ UINT8 address; /* address register */
++ UINT8 status; /* status flag */
++ UINT8 statusmask; /* status mask */
++ UINT8 mode; /* Reg.08 : CSM,notesel,etc. */
++
++ int clock; /* master clock (Hz) */
++ int rate; /* sampling rate (Hz) */
++ double freqbase; /* frequency base */
++ double TimerBase; /* Timer base time (==sampling time)*/
++} FM_OPL;
++
++
+
+-/* -------------------- tables --------------------- */
++/* mapping of register number (offset) to slot number used by the emulator */
+ static const int slot_array[32]=
+ {
+ 0, 2, 4, 1, 3, 5,-1,-1,
+@@ -102,135 +292,322 @@ static const int slot_array[32]=
+ };
+
+ /* key scale level */
+-#define ML (0.1875*2/EG_STEP)
+-static const UINT32 KSL_TABLE[8*16]=
++/* table is 3dB/octave , DV converts this into 6dB/octave */
++/* 0.1875 is bit 0 weight of the envelope counter (volume) expressed in the 'decibel' scale */
++#define DV (0.1875/2.0)
++static const UINT32 ksl_tab[8*16]=
+ {
+ /* OCT 0 */
+- 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
+- 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
+- 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
+- 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
++ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
++ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
++ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
++ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ /* OCT 1 */
+- 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
+- 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
+- 0.000*ML, 0.750*ML, 1.125*ML, 1.500*ML,
+- 1.875*ML, 2.250*ML, 2.625*ML, 3.000*ML,
++ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
++ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
++ 0.000/DV, 0.750/DV, 1.125/DV, 1.500/DV,
++ 1.875/DV, 2.250/DV, 2.625/DV, 3.000/DV,
+ /* OCT 2 */
+- 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
+- 0.000*ML, 1.125*ML, 1.875*ML, 2.625*ML,
+- 3.000*ML, 3.750*ML, 4.125*ML, 4.500*ML,
+- 4.875*ML, 5.250*ML, 5.625*ML, 6.000*ML,
++ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
++ 0.000/DV, 1.125/DV, 1.875/DV, 2.625/DV,
++ 3.000/DV, 3.750/DV, 4.125/DV, 4.500/DV,
++ 4.875/DV, 5.250/DV, 5.625/DV, 6.000/DV,
+ /* OCT 3 */
+- 0.000*ML, 0.000*ML, 0.000*ML, 1.875*ML,
+- 3.000*ML, 4.125*ML, 4.875*ML, 5.625*ML,
+- 6.000*ML, 6.750*ML, 7.125*ML, 7.500*ML,
+- 7.875*ML, 8.250*ML, 8.625*ML, 9.000*ML,
++ 0.000/DV, 0.000/DV, 0.000/DV, 1.875/DV,
++ 3.000/DV, 4.125/DV, 4.875/DV, 5.625/DV,
++ 6.000/DV, 6.750/DV, 7.125/DV, 7.500/DV,
++ 7.875/DV, 8.250/DV, 8.625/DV, 9.000/DV,
+ /* OCT 4 */
+- 0.000*ML, 0.000*ML, 3.000*ML, 4.875*ML,
+- 6.000*ML, 7.125*ML, 7.875*ML, 8.625*ML,
+- 9.000*ML, 9.750*ML,10.125*ML,10.500*ML,
+- 10.875*ML,11.250*ML,11.625*ML,12.000*ML,
++ 0.000/DV, 0.000/DV, 3.000/DV, 4.875/DV,
++ 6.000/DV, 7.125/DV, 7.875/DV, 8.625/DV,
++ 9.000/DV, 9.750/DV,10.125/DV,10.500/DV,
++ 10.875/DV,11.250/DV,11.625/DV,12.000/DV,
+ /* OCT 5 */
+- 0.000*ML, 3.000*ML, 6.000*ML, 7.875*ML,
+- 9.000*ML,10.125*ML,10.875*ML,11.625*ML,
+- 12.000*ML,12.750*ML,13.125*ML,13.500*ML,
+- 13.875*ML,14.250*ML,14.625*ML,15.000*ML,
++ 0.000/DV, 3.000/DV, 6.000/DV, 7.875/DV,
++ 9.000/DV,10.125/DV,10.875/DV,11.625/DV,
++ 12.000/DV,12.750/DV,13.125/DV,13.500/DV,
++ 13.875/DV,14.250/DV,14.625/DV,15.000/DV,
+ /* OCT 6 */
+- 0.000*ML, 6.000*ML, 9.000*ML,10.875*ML,
+- 12.000*ML,13.125*ML,13.875*ML,14.625*ML,
+- 15.000*ML,15.750*ML,16.125*ML,16.500*ML,
+- 16.875*ML,17.250*ML,17.625*ML,18.000*ML,
++ 0.000/DV, 6.000/DV, 9.000/DV,10.875/DV,
++ 12.000/DV,13.125/DV,13.875/DV,14.625/DV,
++ 15.000/DV,15.750/DV,16.125/DV,16.500/DV,
++ 16.875/DV,17.250/DV,17.625/DV,18.000/DV,
+ /* OCT 7 */
+- 0.000*ML, 9.000*ML,12.000*ML,13.875*ML,
+- 15.000*ML,16.125*ML,16.875*ML,17.625*ML,
+- 18.000*ML,18.750*ML,19.125*ML,19.500*ML,
+- 19.875*ML,20.250*ML,20.625*ML,21.000*ML
++ 0.000/DV, 9.000/DV,12.000/DV,13.875/DV,
++ 15.000/DV,16.125/DV,16.875/DV,17.625/DV,
++ 18.000/DV,18.750/DV,19.125/DV,19.500/DV,
++ 19.875/DV,20.250/DV,20.625/DV,21.000/DV
+ };
+-#undef ML
++#undef DV
+
+-/* sustain lebel table (3db per step) */
++/* sustain level table (3dB per step) */
+ /* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/
+-#define SC(db) (db*((3/EG_STEP)*(1<<ENV_BITS)))+EG_DST
+-static const INT32 SL_TABLE[16]={
++#define SC(db) (UINT32) ( db * (2.0/ENV_STEP) )
++static const UINT32 sl_tab[16]={
+ SC( 0),SC( 1),SC( 2),SC(3 ),SC(4 ),SC(5 ),SC(6 ),SC( 7),
+ SC( 8),SC( 9),SC(10),SC(11),SC(12),SC(13),SC(14),SC(31)
+ };
+ #undef SC
+
+-#define TL_MAX (EG_ENT*2) /* limit(tl + ksr + envelope) + sinwave */
+-/* TotalLevel : 48 24 12 6 3 1.5 0.75 (dB) */
+-/* TL_TABLE[ 0 to TL_MAX ] : plus section */
+-/* TL_TABLE[ TL_MAX to TL_MAX+TL_MAX-1 ] : minus section */
+-static INT32 *TL_TABLE;
+
+-/* pointers to TL_TABLE with sinwave output offset */
+-static INT32 **SIN_TABLE;
++#define RATE_STEPS (8)
++static const unsigned char eg_inc[15*RATE_STEPS]={
++
++/*cycle:0 1 2 3 4 5 6 7*/
++
++/* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..12 0 (increment by 0 or 1) */
++/* 1 */ 0,1, 0,1, 1,1, 0,1, /* rates 00..12 1 */
++/* 2 */ 0,1, 1,1, 0,1, 1,1, /* rates 00..12 2 */
++/* 3 */ 0,1, 1,1, 1,1, 1,1, /* rates 00..12 3 */
++
++/* 4 */ 1,1, 1,1, 1,1, 1,1, /* rate 13 0 (increment by 1) */
++/* 5 */ 1,1, 1,2, 1,1, 1,2, /* rate 13 1 */
++/* 6 */ 1,2, 1,2, 1,2, 1,2, /* rate 13 2 */
++/* 7 */ 1,2, 2,2, 1,2, 2,2, /* rate 13 3 */
++
++/* 8 */ 2,2, 2,2, 2,2, 2,2, /* rate 14 0 (increment by 2) */
++/* 9 */ 2,2, 2,4, 2,2, 2,4, /* rate 14 1 */
++/*10 */ 2,4, 2,4, 2,4, 2,4, /* rate 14 2 */
++/*11 */ 2,4, 4,4, 2,4, 4,4, /* rate 14 3 */
++
++/*12 */ 4,4, 4,4, 4,4, 4,4, /* rates 15 0, 15 1, 15 2, 15 3 (increment by 4) */
++/*13 */ 8,8, 8,8, 8,8, 8,8, /* rates 15 2, 15 3 for attack */
++/*14 */ 0,0, 0,0, 0,0, 0,0, /* infinity rates for attack and decay(s) */
+};
+
-+/* key scale level */
-+#define ML (0.1875*2/EG_STEP)
-+static const UINT32 KSL_TABLE[8*16]=
-+{
-+ /* OCT 0 */
-+ 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
-+ 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
-+ 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
-+ 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
-+ /* OCT 1 */
-+ 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
-+ 0.000*ML, 0.000*ML, 0.000*ML, 0.000*ML,
-+ 0.000*ML, 0.750*ML, 1.125*ML, 1.500*ML,
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/xmp/xmp-nondfsg.patch?r1=1.1&r2=1.2&f=u
More information about the pld-cvs-commit
mailing list