Source file: /~heha/basteln/Haus/Telefon/Mithören-ISDN/Firmware.zip/AT90USB162/law.S

#if 1
/*********
 * A-Law *
 *********/
// Für PWM-Ausgabe zwischen 0 und 2000 skaliert

#define lawPwmVal \
 829,837,813,821,861,869,845,853,\
 766,774,750,758,798,806,782,790,\
 915,919,907,911,931,935,923,927,\
 883,887,875,879,899,903,891,895,\
 317,349,254,286,444,476,381,413,\
 63,95,0,32,190,222,127,159,\
 659,675,627,643,722,738,690,706,\
 532,548,500,516,595,611,563,579,\
 989,990,988,989,991,992,990,991,\
 985,986,984,985,987,988,986,987,\
 997,998,996,997,999,1000,998,999,\
 993,994,992,993,995,996,994,995,\
 957,959,953,955,965,967,961,963,\
 941,943,938,939,949,951,945,947,\
 979,980,977,978,983,984,981,982,\
 971,972,969,970,975,976,973,974,\
 1171,1163,1187,1179,1139,1131,1155,1147,\
 1234,1226,1250,1242,1202,1194,1218,1210,\
 1085,1081,1093,1089,1069,1065,1077,1073,\
 1117,1113,1125,1121,1101,1097,1109,1105,\
 1683,1651,1746,1714,1556,1524,1619,1587,\
 1937,1905,2000,1968,1810,1778,1873,1841,\
 1341,1325,1373,1357,1278,1262,1310,1294,\
 1468,1452,1500,1484,1405,1389,1437,1421,\
 1011,1010,1012,1011,1009,1008,1010,1009,\
 1015,1014,1016,1015,1013,1012,1014,1013,\
 1003,1002,1004,1003,1001,1000,1002,1001,\
 1007,1006,1008,1007,1005,1004,1006,1005,\
 1043,1041,1047,1045,1035,1033,1039,1037,\
 1059,1057,1063,1061,1051,1049,1055,1053,\
 1021,1020,1023,1022,1017,1016,1019,1018,\
 1029,1028,1031,1030,1025,1024,1027,1026

// Für 16-Bit-Audio (so wie es Windows konvertiert)
#define lawVal \
 -5504,-5248,-6016,-5760,-4480,-4224,-4992,-4736,\
 -7552,-7296,-8064,-7808,-6528,-6272,-7040,-6784,\
 -2752,-2624,-3008,-2880,-2240,-2112,-2496,-2368,\
 -3776,-3648,-4032,-3904,-3264,-3136,-3520,-3392,\
 -22016,-20992,-24064,-23040,-17920,-16896,-19968,-18944,\
 -30208,-29184,-32256,-31232,-26112,-25088,-28160,-27136,\
 -11008,-10496,-12032,-11520,-8960,-8448,-9984,-9472,\
 -15104,-14592,-16128,-15616,-13056,-12544,-14080,-13568,\
 -344,-328,-376,-360,-280,-264,-312,-296,\
 -472,-456,-504,-488,-408,-392,-440,-424,\
 -88,-72,-120,-104,-24,-8,-56,-40,\
 -216,-200,-248,-232,-152,-136,-184,-168,\
 -1376,-1312,-1504,-1440,-1120,-1056,-1248,-1184,\
 -1888,-1824,-2016,-1952,-1632,-1568,-1760,-1696,\
 -688,-656,-752,-720,-560,-528,-624,-592,\
 -944,-912,-1008,-976,-816,-784,-880,-848,\
 5504,5248,6016,5760,4480,4224,4992,4736,\
 7552,7296,8064,7808,6528,6272,7040,6784,\
 2752,2624,3008,2880,2240,2112,2496,2368,\
 3776,3648,4032,3904,3264,3136,3520,3392,\
 22016,20992,24064,23040,17920,16896,19968,18944,\
 30208,29184,32256,31232,26112,25088,28160,27136,\
 11008,10496,12032,11520,8960,8448,9984,9472,\
 15104,14592,16128,15616,13056,12544,14080,13568,\
 344,328,376,360,280,264,312,296,\
 472,456,504,488,408,392,440,424,\
 88,72,120,104,24,8,56,40,\
 216,200,248,232,152,136,184,168,\
 1376,1312,1504,1440,1120,1056,1248,1184,\
 1888,1824,2016,1952,1632,1568,1760,1696,\
 688,656,752,720,560,528,624,592,\
 944,912,1008,976,816,784,880,848


#else
/*********
 * µ-Law *
 *********/
// Für PWM-Ausgabe zwischen 0 und 2000 skaliert
#define lawPWMVal \
 0,32,64,96,128,159,191,223,\
 255,287,319,351,383,414,446,478,\
 502,518,534,550,566,582,598,614,\
 630,645,661,677,693,709,725,741,\
 753,761,769,777,785,793,801,809,\
 817,825,833,841,849,857,865,873,\
 879,883,887,891,895,899,903,906,\
 910,914,918,922,926,930,934,938,\
 941,943,945,947,949,951,953,955,\
 957,959,961,963,965,967,969,971,\
 973,974,975,976,977,978,979,980,\
 981,982,983,984,985,986,987,988,\
 988,989,989,990,990,991,991,992,\
 992,993,993,994,994,995,995,996,\
 996,997,997,997,997,998,998,998,\
 998,999,999,999,999,1000,1000,1000,\
 2000,1968,1936,1904,1872,1841,1809,1777,\
 1745,1713,1681,1649,1617,1586,1554,1522,\
 1498,1482,1466,1450,1434,1418,1402,1386,\
 1370,1355,1339,1323,1307,1291,1275,1259,\
 1247,1239,1231,1223,1215,1207,1199,1191,\
 1183,1175,1167,1159,1151,1143,1135,1127,\
 1121,1117,1113,1109,1105,1101,1097,1094,\
 1090,1086,1082,1078,1074,1070,1066,1062,\
 1059,1057,1055,1053,1051,1049,1047,1045,\
 1043,1041,1039,1037,1035,1033,1031,1029,\
 1027,1026,1025,1024,1023,1022,1021,1020,\
 1019,1018,1017,1016,1015,1014,1013,1012,\
 1012,1011,1011,1010,1010,1009,1009,1008,\
 1008,1007,1007,1006,1006,1005,1005,1004,\
 1004,1003,1003,1003,1003,1002,1002,1002,\
 1002,1001,1001,1001,1001,1000,1000,1000

// Für 16-Bit-Audio (so wie es Windows konvertiert)
#define lawVal \
 -32124,-31100,-30076,-29052,-28028,-27004,-25980,-24956,\
 -23932,-22908,-21884,-20860,-19836,-18812,-17788,-16764,\
 -15996,-15484,-14972,-14460,-13948,-13436,-12924,-12412,\
 -11900,-11388,-10876,-10364,-9852,-9340,-8828,-8316,\
 -7932,-7676,-7420,-7164,-6908,-6652,-6396,-6140,\
 -5884,-5628,-5372,-5116,-4860,-4604,-4348,-4092,\
 -3900,-3772,-3644,-3516,-3388,-3260,-3132,-3004,\
 -2876,-2748,-2620,-2492,-2364,-2236,-2108,-1980,\
 -1884,-1820,-1756,-1692,-1628,-1564,-1500,-1436,\
 -1372,-1308,-1244,-1180,-1116,-1052,-988,-924,\
 -876,-844,-812,-780,-748,-716,-684,-652,\
 -620,-588,-556,-524,-492,-460,-428,-396,\
 -372,-356,-340,-324,-308,-292,-276,-260,\
 -244,-228,-212,-196,-180,-164,-148,-132,\
 -120,-112,-104,-96,-88,-80,-72,-64,\
 -56,-48,-40,-32,-24,-16,-8,0,\
 32124,31100,30076,29052,28028,27004,25980,24956,\
 23932,22908,21884,20860,19836,18812,17788,16764,\
 15996,15484,14972,14460,13948,13436,12924,12412,\
 11900,11388,10876,10364,9852,9340,8828,8316,\
 7932,7676,7420,7164,6908,6652,6396,6140,\
 5884,5628,5372,5116,4860,4604,4348,4092,\
 3900,3772,3644,3516,3388,3260,3132,3004,\
 2876,2748,2620,2492,2364,2236,2108,1980,\
 1884,1820,1756,1692,1628,1564,1500,1436,\
 1372,1308,1244,1180,1116,1052,988,924,\
 876,844,812,780,748,716,684,652,\
 620,588,556,524,492,460,428,396,\
 372,356,340,324,308,292,276,260,\
 244,228,212,196,180,164,148,132,\
 120,112,104,96,88,80,72,64,\
 56,48,40,32,24,16,8,0

#endif

.section .lawtbl
.global lawPWM,law

#define LO(x) (x)&255
#define HI(x) (x)>>8&255

// Diese Tabellen kommen an /256 teilbaren Adressen zu liegen,
// d.h. deren Low-Teile sind jeweils 0
// ".irp" geht nur in Assembler, keine C/C++-Entsprechung.
// Auch „constexpr“ kann das 2021 noch nicht bewerkstelligen.
lawPWM:	.irp	p,lawPwmVal
	.byte	LO(\p)	// Low-Teile zusammen
	.endr
	.irp	p,lawPwmVal
	.byte	HI(\p)	// High-Teile zusammen
	.endr

law:	.irp	p,lawVal
	.byte	LO(\p)	// Low-Teile zusammen
	.endr
	.irp	p,lawVal
	.byte	HI(\p)	// High-Teile zusammen
	.endr
Detected encoding: UTF-80