MIDI-SID-SEQ.C
FILE INFORMATION
FILENAME(S): MIDI-SID-SEQ.C
FILE TYPE(S): SEQ
FILE SIZE: 16.3K
FIRST SEEN: 2025-10-20 14:31:50
APPEARS ON: 1 disk(s)
FILE HASH
185b2ed6161c45d223cea7bc3b746762c7086dd6e09373476b66ba4c0243837e
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| MIDI SID CONNECT | MIDI-SID-SEQ.C | SEQ | Treasure Chest - Klaus Der Suhler | 24 | 5 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 2F 2A CD C9 C4 C9 20 54 4F 20 D3 C9 C4 20 D3 45 |/*.... TO ... .E|
00000010: 51 55 45 4E 43 45 52 20 22 CD C9 C4 C9 2D D3 C9 |QUENCER "....-..|
00000020: C4 2D D3 C5 D1 22 2A 2F 0D 2F 2A 4D 41 4B 45 53 |.-..."*/./*MAKES|
00000030: 20 C3 36 34 20 41 20 33 20 28 4F 52 20 36 29 20 | .64 A 3 (OR 6) |
00000040: 4E 4F 54 45 20 50 4F 4C 59 50 48 4F 4E 49 43 2A |NOTE POLYPHONIC*|
00000050: 2F 0D 2F 2A 4D 4F 4E 4F 54 49 4D 42 52 41 4C 20 |/./*MONOTIMBRAL |
00000060: CD C9 C4 C9 20 44 52 49 56 45 4E 20 53 4F 55 4E |.... DRIVEN SOUN|
00000070: 44 20 53 4F 55 52 43 45 2A 2F 0D 2F 2A 41 4E 44 |D SOURCE*/./*AND|
00000080: 20 53 41 56 45 53 20 53 45 51 55 45 4E 43 45 53 | SAVES SEQUENCES|
00000090: 20 54 4F 20 44 49 53 4B 20 46 4F 52 20 43 4F 4E | TO DISK FOR CON|
000000A0: 2D 2A 2F 0D 2F 2A 56 45 52 53 49 4F 4E 20 54 4F |-*/./*VERSION TO|
000000B0: 20 D3 C9 C4 20 46 49 4C 45 53 20 42 59 20 CD C9 | ... FILES BY ..|
000000C0: C4 C9 20 54 4F 20 D3 C9 C4 20 2A 2F 0D 2F 2A C6 |.. TO ... */./*.|
000000D0: 49 4C 45 20 C3 4F 4E 56 45 52 54 45 52 2A 2F 0D |ILE .ONVERTER*/.|
000000E0: 0D 2F 2A D6 45 52 53 49 4F 4E 20 31 2E 30 2C 20 |./*.ERSION 1.0, |
000000F0: 42 59 20 C6 52 41 4E 4B 20 D0 52 49 4E 44 4C 45 |BY .RANK .RINDLE|
00000100: 2C 20 37 20 D3 45 50 20 38 39 2A 2F 0D 2F 2A D6 |, 7 .EP 89*/./*.|
00000110: 45 52 53 49 4F 4E 20 32 2E 30 2C 20 42 59 20 C6 |ERSION 2.0, BY .|
00000120: 52 41 4E 4B 20 D0 52 49 4E 44 4C 45 2C 20 31 35 |RANK .RINDLE, 15|
00000130: 20 C6 45 42 20 39 30 2A 2F 0D 0D 23 49 4E 43 4C | .EB 90*/..#INCL|
00000140: 55 44 45 20 3C 53 54 44 49 4F 2E 48 3E 0D 0D 2F |UDE <STDIO.H>../|
00000150: 2A 44 45 46 41 55 4C 54 20 54 4F 20 36 20 56 4F |*DEFAULT TO 6 VO|
00000160: 49 43 45 53 20 55 4E 4C 45 53 53 20 55 53 45 52 |ICES UNLESS USER|
00000170: 20 53 45 4C 45 43 54 53 20 33 20 56 4F 49 43 45 | SELECTS 3 VOICE|
00000180: 53 2A 2F 0D 49 4E 54 20 CE D6 CF C9 C3 C5 D3 3D |S*/.INT .......=|
00000190: 36 3B 0D 0D 2F 2A 44 45 46 41 55 4C 54 20 54 4F |6;../*DEFAULT TO|
000001A0: 20 50 4F 4C 59 50 48 4F 4E 59 20 55 4E 4C 45 53 | POLYPHONY UNLES|
000001B0: 53 20 55 53 45 52 20 53 45 4C 45 43 54 53 20 4F |S USER SELECTS O|
000001C0: 54 48 45 52 57 49 53 45 2A 2F 0D 49 4E 54 20 50 |THERWISE*/.INT P|
000001D0: 4F 4C 59 50 48 4F 4E 59 3D 31 3B 0D 0D 2F 2A CD |OLYPHONY=1;../*.|
000001E0: C9 C4 C9 20 4E 4F 54 45 20 54 4F 20 D3 C9 C4 20 |... NOTE TO ... |
000001F0: 46 52 45 51 55 45 4E 43 59 20 54 41 42 4C 45 2A |FREQUENCY TABLE*|
00000200: 2F 0D 55 4E 53 49 47 4E 45 44 20 46 52 45 51 5B |/.UNSIGNED FREQ[|
00000210: 31 32 38 5D 3D 0D 20 20 DB 0D 20 20 20 20 20 20 |128]=. .. |
00000220: 30 2C 20 20 20 20 30 2C 20 20 20 20 30 2C 20 20 |0, 0, 0, |
00000230: 20 20 30 2C 0D 20 20 20 20 20 20 30 2C 20 20 20 | 0,. 0, |
00000240: 20 30 2C 20 20 20 20 30 2C 20 20 20 20 30 2C 0D | 0, 0, 0,.|
00000250: 20 20 20 20 20 20 30 2C 20 20 20 20 30 2C 20 20 | 0, 0, |
00000260: 20 20 30 2C 20 20 20 20 30 2C 0D 0D 20 20 20 20 | 0, 0,.. |
00000270: 32 36 38 2C 20 20 32 38 34 2C 20 20 33 30 31 2C |268, 284, 301,|
00000280: 20 20 33 31 38 2C 0D 20 20 20 20 33 33 37 2C 20 | 318,. 337, |
00000290: 20 33 35 38 2C 20 20 33 37 39 2C 20 20 34 30 31 | 358, 379, 401|
000002A0: 2C 0D 20 20 20 20 34 32 35 2C 20 20 34 35 31 2C |,. 425, 451,|
000002B0: 20 20 34 37 37 2C 20 20 35 30 36 2C 0D 0D 20 20 | 477, 506,.. |
000002C0: 20 20 35 33 36 2C 20 20 35 36 38 2C 20 20 36 30 | 536, 568, 60|
000002D0: 32 2C 20 20 36 33 37 2C 0D 20 20 20 20 36 37 35 |2, 637,. 675|
000002E0: 2C 20 20 37 31 36 2C 20 20 37 35 38 2C 20 20 38 |, 716, 758, 8|
000002F0: 30 33 2C 0D 20 20 20 20 38 35 31 2C 20 20 39 30 |03,. 851, 90|
00000300: 32 2C 20 20 39 35 35 2C 20 31 30 31 32 2C 0D 0D |2, 955, 1012,..|
00000310: 20 20 20 31 30 37 32 2C 20 31 31 33 36 2C 20 31 | 1072, 1136, 1|
00000320: 32 30 34 2C 20 31 32 37 35 2C 0D 20 20 20 31 33 |204, 1275,. 13|
00000330: 35 31 2C 20 31 34 33 32 2C 20 31 35 31 37 2C 20 |51, 1432, 1517, |
00000340: 31 36 30 37 2C 0D 20 20 20 31 37 30 33 2C 20 31 |1607,. 1703, 1|
00000350: 38 30 34 2C 20 31 39 31 31 2C 20 32 30 32 35 2C |804, 1911, 2025,|
00000360: 0D 0D 20 20 20 32 31 34 35 2C 20 32 32 37 33 2C |.. 2145, 2273,|
00000370: 20 32 34 30 38 2C 20 32 35 35 31 2C 0D 20 20 20 | 2408, 2551,. |
00000380: 32 37 30 33 2C 20 32 38 36 34 2C 20 33 30 33 34 |2703, 2864, 3034|
00000390: 2C 20 33 32 31 35 2C 0D 20 20 20 33 34 30 36 2C |, 3215,. 3406,|
000003A0: 20 33 36 30 38 2C 20 33 38 32 33 2C 20 34 30 35 | 3608, 3823, 405|
000003B0: 30 2C 0D 0D 20 20 20 34 32 39 31 2C 20 34 35 34 |0,.. 4291, 454|
000003C0: 37 2C 20 34 38 31 37 2C 20 35 31 30 33 2C 0D 20 |7, 4817, 5103,. |
000003D0: 20 20 35 34 30 37 2C 20 35 37 32 38 2C 20 36 30 | 5407, 5728, 60|
000003E0: 36 39 2C 20 36 34 33 30 2C 0D 20 20 20 36 38 31 |69, 6430,. 681|
000003F0: 32 2C 20 37 32 31 37 2C 20 37 36 34 37 2C 20 38 |2, 7217, 7647, 8|
00000400: 31 30 31 2C 0D 0D 20 20 20 38 35 38 33 2C 20 39 |101,.. 8583, 9|
00000410: 30 39 34 2C 20 39 36 33 34 2C 31 30 32 30 37 2C |094, 9634,10207,|
00000420: 0D 20 20 31 30 38 31 34 2C 31 31 34 35 37 2C 31 |. 10814,11457,1|
00000430: 32 31 33 39 2C 31 32 38 36 30 2C 0D 20 20 31 33 |2139,12860,. 13|
00000440: 36 32 35 2C 31 34 34 33 35 2C 31 35 32 39 34 2C |625,14435,15294,|
00000450: 31 36 32 30 33 2C 0D 0D 20 20 31 37 31 36 37 2C |16203,.. 17167,|
00000460: 31 38 31 38 38 2C 31 39 32 36 39 2C 32 30 34 31 |18188,19269,2041|
00000470: 35 2C 0D 20 20 32 31 36 32 39 2C 32 32 39 31 35 |5,. 21629,22915|
00000480: 2C 32 34 32 37 38 2C 32 35 37 32 31 2C 0D 20 20 |,24278,25721,. |
00000490: 32 37 32 35 31 2C 32 38 38 37 31 2C 33 30 35 38 |27251,28871,3058|
000004A0: 38 2C 33 32 34 30 37 2C 0D 0D 20 20 33 34 33 33 |8,32407,.. 3433|
000004B0: 34 2C 33 36 33 37 36 2C 33 38 35 33 39 2C 34 30 |4,36376,38539,40|
000004C0: 38 33 30 2C 0D 20 20 34 33 32 35 38 2C 34 35 38 |830,. 43258,458|
000004D0: 33 30 2C 34 38 35 35 36 2C 35 31 34 34 33 2C 0D |30,48556,51443,.|
000004E0: 20 20 35 34 35 30 32 2C 35 37 37 34 33 2C 36 31 | 54502,57743,61|
000004F0: 31 37 36 2C 36 34 38 31 34 2C 0D 0D 20 20 20 20 |176,64814,.. |
00000500: 20 20 30 2C 20 20 20 20 30 2C 20 20 20 20 30 2C | 0, 0, 0,|
00000510: 20 20 20 20 30 2C 0D 20 20 20 20 20 20 30 2C 20 | 0,. 0, |
00000520: 20 20 20 30 2C 20 20 20 20 30 2C 20 20 20 20 30 | 0, 0, 0|
00000530: 2C 0D 20 20 20 20 20 20 30 2C 20 20 20 20 30 2C |,. 0, 0,|
00000540: 20 20 20 20 30 2C 20 20 20 20 30 2C 0D 0D 20 20 | 0, 0,.. |
00000550: 20 20 20 20 30 2C 20 20 20 20 30 2C 20 20 20 20 | 0, 0, |
00000560: 30 2C 20 20 20 20 30 2C 0D 20 20 20 20 20 20 30 |0, 0,. 0|
00000570: 2C 20 20 20 20 30 2C 20 20 20 20 30 2C 20 20 20 |, 0, 0, |
00000580: 20 30 0D 20 20 DD 3B 0D 0D 2F 2A 44 55 4D 4D 59 | 0. .;../*DUMMY|
00000590: 20 37 54 48 20 56 4F 49 43 45 2A 2F 0D 43 48 41 | 7TH VOICE*/.CHA|
000005A0: 52 20 4E 4F 56 4F 49 43 45 5B 37 5D 3B 0D 0D 2F |R NOVOICE[7];../|
000005B0: 2A 42 41 53 45 20 41 44 44 52 45 53 53 20 4F 46 |*BASE ADDRESS OF|
000005C0: 20 45 41 43 48 20 D3 C9 C4 20 43 48 49 50 20 56 | EACH ... CHIP V|
000005D0: 4F 49 43 45 2A 2F 0D 43 48 41 52 20 2A 56 4F 49 |OICE*/.CHAR *VOI|
000005E0: 43 45 5B 37 5D 3D 0D 20 20 DB 0D 20 20 35 34 32 |CE[7]=. .. 542|
000005F0: 37 32 2C 20 20 2F 2A 42 55 49 4C 54 20 49 4E 20 |72, /*BUILT IN |
00000600: D3 C9 C4 20 43 48 49 50 2A 2F 0D 20 20 35 34 32 |... CHIP*/. 542|
00000610: 37 39 2C 0D 20 20 35 34 32 38 36 2C 0D 20 20 35 |79,. 54286,. 5|
00000620: 37 30 38 38 2C 20 20 2F 2A 53 45 43 4F 4E 44 20 |7088, /*SECOND |
00000630: 4F 50 54 49 4F 4E 41 4C 20 D3 C9 C4 20 43 48 49 |OPTIONAL ... CHI|
00000640: 50 20 41 54 20 24 C4 C6 30 30 2A 2F 0D 20 20 35 |P AT $..00*/. 5|
00000650: 37 30 39 35 2C 0D 20 20 35 37 31 30 32 2C 0D 20 |7095,. 57102,. |
00000660: 20 30 0D 20 20 DD 3B 0D 0D 2F 2A 46 4F 52 20 56 | 0. .;../*FOR V|
00000670: 4F 49 43 45 20 54 48 41 54 20 49 53 20 53 4F 55 |OICE THAT IS SOU|
00000680: 4E 44 49 4E 47 2C 20 CD C9 C4 C9 20 4E 4F 54 45 |NDING, .... NOTE|
00000690: 20 4E 55 4D 42 45 52 2A 2F 0D 43 48 41 52 20 49 | NUMBER*/.CHAR I|
000006A0: 4E 55 53 45 5B 37 5D 20 3D 20 DB 30 2C 30 2C 30 |NUSE[7] = .0,0,0|
000006B0: 2C 30 2C 30 2C 30 2C 30 DD 3B 0D 0D 2F 2A 56 4F |,0,0,0,0.;../*VO|
000006C0: 49 43 45 20 54 4F 20 55 53 45 20 46 4F 52 20 4E |ICE TO USE FOR N|
000006D0: 45 58 54 20 4E 4F 54 45 20 4F 4E 2A 2F 0D 49 4E |EXT NOTE ON*/.IN|
000006E0: 54 20 4E 45 58 54 56 4F 49 43 45 20 3D 20 30 3B |T NEXTVOICE = 0;|
000006F0: 0D 0D 2F 2A 4D 49 44 49 20 43 4C 4F 43 4B 20 43 |../*MIDI CLOCK C|
00000700: 4F 55 4E 54 45 52 2A 2F 0D 49 4E 54 20 4D 49 44 |OUNTER*/.INT MID|
00000710: 49 43 4C 4F 43 4B 20 3D 20 30 3B 0D 0D 2F 2A 53 |ICLOCK = 0;../*S|
00000720: 49 44 20 53 45 51 55 45 4E 43 45 20 42 55 46 46 |ID SEQUENCE BUFF|
00000730: 45 52 20 41 4E 44 20 50 4F 49 4E 54 45 52 2A 2F |ER AND POINTER*/|
00000740: 0D 43 48 41 52 20 53 49 44 42 55 46 46 45 52 5B |.CHAR SIDBUFFER[|
00000750: 33 33 30 30 30 5D 3B 0D 43 48 41 52 20 2A 53 49 |33000];.CHAR *SI|
00000760: 44 42 55 46 50 54 52 3B 0D 49 4E 54 20 46 49 4C |DBUFPTR;.INT FIL|
00000770: 4C 43 4F 55 4E 54 3D 30 3B 0D 0D 2F 2A 42 41 53 |LCOUNT=0;../*BAS|
00000780: 45 20 46 49 4C 45 20 4E 41 4D 45 2A 2F 0D 43 48 |E FILE NAME*/.CH|
00000790: 41 52 20 42 41 53 45 4E 41 4D 45 5B 33 30 5D 20 |AR BASENAME[30] |
000007A0: 3D 20 22 4D 49 44 49 53 45 51 22 3B 20 2F 2A 44 |= "MIDISEQ"; /*D|
000007B0: 45 46 41 55 4C 54 20 4E 41 4D 45 2A 2F 0D 0D 2F |EFAULT NAME*/../|
000007C0: 2A D3 C9 C4 20 56 4F 49 43 45 20 52 45 47 49 53 |*... VOICE REGIS|
000007D0: 54 45 52 20 4F 46 46 53 45 54 53 2A 2F 0D 23 44 |TER OFFSETS*/.#D|
000007E0: 45 46 49 4E 45 20 46 49 4C 54 45 52 20 32 33 0D |EFINE FILTER 23.|
000007F0: 23 44 45 46 49 4E 45 20 56 4F 4C 55 4D 45 20 32 |#DEFINE VOLUME 2|
00000800: 34 0D 23 44 45 46 49 4E 45 20 46 52 45 51 57 44 |4.#DEFINE FREQWD|
00000810: 20 30 0D 23 44 45 46 49 4E 45 20 50 55 4C 53 57 | 0.#DEFINE PULSW|
00000820: 44 20 32 0D 23 44 45 46 49 4E 45 20 57 41 56 45 |D 2.#DEFINE WAVE|
00000830: 20 20 20 34 0D 23 44 45 46 49 4E 45 20 41 54 54 | 4.#DEFINE ATT|
00000840: 44 45 43 20 35 0D 23 44 45 46 49 4E 45 20 53 55 |DEC 5.#DEFINE SU|
00000850: 53 52 45 4C 20 36 0D 0D 2F 2A 53 59 53 54 45 4D |SREL 6../*SYSTEM|
00000860: 20 53 50 45 43 49 46 49 43 20 44 45 46 49 4E 49 | SPECIFIC DEFINI|
00000870: 54 49 4F 4E 53 2A 2F 0D 23 44 45 46 49 4E 45 20 |TIONS*/.#DEFINE |
00000880: 42 41 43 4B 47 52 4F 55 4E 44 20 28 2A 28 28 43 |BACKGROUND (*((C|
00000890: 48 41 52 20 2A 29 35 33 32 38 31 29 29 20 20 2F |HAR *)53281)) /|
000008A0: 2A 42 41 43 4B 47 52 4F 55 4E 44 20 43 4F 4C 4F |*BACKGROUND COLO|
000008B0: 52 20 42 59 54 45 2A 2F 0D 23 44 45 46 49 4E 45 |R BYTE*/.#DEFINE|
000008C0: 20 42 4F 52 44 45 52 20 28 2A 28 28 43 48 41 52 | BORDER (*((CHAR|
000008D0: 20 2A 29 35 33 32 38 30 29 29 20 20 20 20 20 20 | *)53280)) |
000008E0: 2F 2A 42 4F 52 44 45 52 20 43 4F 4C 4F 52 20 42 |/*BORDER COLOR B|
000008F0: 59 54 45 2A 2F 0D 23 44 45 46 49 4E 45 20 43 55 |YTE*/.#DEFINE CU|
00000900: 52 52 45 4E 54 A4 4B 45 59 20 28 2A 28 28 43 48 |RRENT.KEY (*((CH|
00000910: 41 52 20 2A 29 31 39 37 29 29 20 20 20 2F 2A 43 |AR *)197)) /*C|
00000920: 55 52 52 45 4E 54 20 4B 45 59 53 43 41 4E 20 43 |URRENT KEYSCAN C|
00000930: 4F 44 45 2A 2F 0D 23 44 45 46 49 4E 45 20 42 55 |ODE*/.#DEFINE BU|
00000940: 46 46 45 52 43 4F 4C 4F 52 20 28 28 43 48 41 52 |FFERCOLOR ((CHAR|
00000950: 20 2A 29 35 35 34 36 34 29 20 20 20 20 2F 2A 43 | *)55464) /*C|
00000960: 4F 4C 4F 52 20 4D 45 4D 4F 52 59 20 46 4F 52 20 |OLOR MEMORY FOR |
00000970: 42 55 46 46 45 52 20 4D 45 54 45 52 2A 2F 0D 23 |BUFFER METER*/.#|
00000980: 44 45 46 49 4E 45 20 53 54 4F 50 43 4F 4C 4F 52 |DEFINE STOPCOLOR|
00000990: 20 28 28 43 48 41 52 20 2A 29 35 35 33 33 38 29 | ((CHAR *)55338)|
000009A0: 20 20 20 20 20 20 2F 2A 43 4F 4C 4F 52 20 4D 45 | /*COLOR ME|
000009B0: 4D 4F 52 59 20 46 4F 52 20 D3 D4 CF D0 20 49 4E |MORY FOR .... IN|
000009C0: 44 49 43 41 54 4F 52 2A 2F 0D 23 44 45 46 49 4E |DICATOR*/.#DEFIN|
000009D0: 45 20 53 54 41 52 54 43 4F 4C 4F 52 20 28 28 43 |E STARTCOLOR ((C|
000009E0: 48 41 52 20 2A 29 35 35 33 36 39 29 20 20 20 20 |HAR *)55369) |
000009F0: 20 2F 2A 43 4F 4C 4F 52 20 4D 45 4D 4F 52 59 20 | /*COLOR MEMORY |
00000A00: 46 4F 52 20 D3 D4 C1 D2 D4 20 49 4E 44 49 43 41 |FOR ..... INDICA|
00000A10: 54 4F 52 2A 2F 0D 23 44 45 46 49 4E 45 20 41 43 |TOR*/.#DEFINE AC|
00000A20: 54 49 56 45 43 4F 4C 4F 52 20 28 2A 28 28 43 48 |TIVECOLOR (*((CH|
00000A30: 41 52 20 2A 29 35 35 33 33 36 29 29 20 2F 2A 43 |AR *)55336)) /*C|
00000A40: 4F 4C 4F 52 20 4D 45 4D 4F 52 59 20 46 4F 52 20 |OLOR MEMORY FOR |
00000A50: CD C9 C4 C9 20 41 43 54 49 56 49 54 59 20 53 54 |.... ACTIVITY ST|
00000A60: 41 52 2A 2F 0D 23 44 45 46 49 4E 45 20 D2 D5 CE |AR*/.#DEFINE ...|
00000A70: A4 D3 D4 CF D0 A4 CB C5 D9 20 36 33 20 20 20 20 |......... 63 |
00000A80: 20 20 20 20 20 20 20 20 20 20 20 20 2F 2A 4B 45 | /*KE|
00000A90: 59 53 43 41 4E 20 43 4F 44 45 2A 2F 0D 23 44 45 |YSCAN CODE*/.#DE|
00000AA0: 46 49 4E 45 20 D2 C5 D3 C5 D4 20 36 34 37 33 38 |FINE ..... 64738|
00000AB0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000AC0: 20 20 20 20 2F 2A 4B 45 52 4E 41 4C 20 43 4F 4C | /*KERNAL COL|
00000AD0: 44 20 53 54 41 52 54 20 45 4E 54 52 59 20 50 4F |D START ENTRY PO|
00000AE0: 49 4E 54 2A 2F 0D 23 44 45 46 49 4E 45 20 C2 CC |INT*/.#DEFINE ..|
00000AF0: C1 C3 CB A4 D6 C1 CC D5 C5 20 30 20 20 20 20 20 |......... 0 |
00000B00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2F 2A 43 | /*C|
00000B10: 4F 4C 4F 52 20 4D 45 4D 4F 52 59 20 56 41 4C 55 |OLOR MEMORY VALU|
00000B20: 45 2A 2F 0D 23 44 45 46 49 4E 45 20 D2 C5 C4 A4 |E*/.#DEFINE ....|
00000B30: D6 C1 CC D5 C5 20 32 20 20 20 20 20 20 20 20 20 |..... 2 |
00000B40: 20 20 20 20 20 20 20 20 20 20 20 2F 2A 43 4F 4C | /*COL|
00000B50: 4F 52 20 4D 45 4D 4F 52 59 20 56 41 4C 55 45 2A |OR MEMORY VALUE*|
00000B60: 2F 0D 23 44 45 46 49 4E 45 20 C7 D2 C5 C5 CE A4 |/.#DEFINE ......|
00000B70: D6 C1 CC D5 C5 20 35 20 20 20 20 20 20 20 20 20 |..... 5 |
00000B80: 20 20 20 20 20 20 20 20 20 2F 2A 43 4F 4C 4F 52 | /*COLOR|
00000B90: 20 4D 45 4D 4F 52 59 20 56 41 4C 55 45 2A 2F 0D | MEMORY VALUE*/.|
00000BA0: 23 44 45 46 49 4E 45 20 C3 CC C5 C1 D2 20 31 34 |#DEFINE ..... 14|
00000BB0: 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |7 |
00000BC0: 20 20 20 20 20 20 20 2F 2A 43 48 41 52 41 43 54 | /*CHARACT|
00000BD0: 45 52 20 43 4F 44 45 2A 2F 0D 23 44 45 46 49 4E |ER CODE*/.#DEFIN|
00000BE0: 45 20 C3 D9 C1 CE 20 31 35 39 20 20 20 20 20 20 |E .... 159 |
00000BF0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000C00: 20 2F 2A 43 48 41 52 41 43 54 45 52 20 43 4F 44 | /*CHARACTER COD|
00000C10: 45 2A 2F 0D 23 44 45 46 49 4E 45 20 CC CF D7 C5 |E*/.#DEFINE ....|
00000C20: D2 20 31 34 20 20 20 20 20 20 20 20 20 20 20 20 |. 14 |
00000C30: 20 20 20 20 20 20 20 20 20 20 20 2F 2A 43 48 41 | /*CHA|
00000C40: 52 41 43 54 45 52 20 43 4F 44 45 2A 2F 0D 23 44 |RACTER CODE*/.#D|
00000C50: 45 46 49 4E 45 20 D2 C5 D6 C5 D2 D3 C5 20 31 38 |EFINE ....... 18|
00000C60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000C70: 20 20 20 20 20 2F 2A 43 48 41 52 41 43 54 45 52 | /*CHARACTER|
00000C80: 20 43 4F 44 45 2A 2F 0D 23 44 45 46 49 4E 45 20 | CODE*/.#DEFINE |
00000C90: C7 D2 C5 C5 CE 20 33 30 20 20 20 20 20 20 20 20 |..... 30 |
00000CA0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2F | /|
00000CB0: 2A 43 48 41 52 41 43 54 45 52 20 43 4F 44 45 2A |*CHARACTER CODE*|
00000CC0: 2F 0D 23 44 45 46 49 4E 45 20 CE CF D2 CD C1 CC |/.#DEFINE ......|
00000CD0: 20 31 34 36 20 20 20 20 20 20 20 20 20 20 20 20 | 146 |
00000CE0: 20 20 20 20 20 20 20 20 20 2F 2A 43 48 41 52 41 | /*CHARA|
00000CF0: 43 54 45 52 20 43 4F 44 45 2A 2F 0D 23 44 45 46 |CTER CODE*/.#DEF|
00000D00: 49 4E 45 20 D5 D0 20 31 34 35 20 20 20 20 20 20 |INE .. 145 |
00000D10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000D20: 20 20 20 2F 2A 43 48 41 52 41 43 54 45 52 20 43 | /*CHARACTER C|
00000D30: 4F 44 45 2A 2F 0D 23 44 45 46 49 4E 45 20 CC C5 |ODE*/.#DEFINE ..|
00000D40: C6 D4 20 31 35 37 20 20 20 20 20 20 20 20 20 20 |.. 157 |
00000D50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2F 2A 43 | /*C|
00000D60: 48 41 52 41 43 54 45 52 20 43 4F 44 45 2A 2F 0D |HARACTER CODE*/.|
00000D70: 23 44 45 46 49 4E 45 20 C2 CC C1 C3 CB 20 31 34 |#DEFINE ..... 14|
00000D80: 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |4 |
00000D90: 20 20 20 20 20 20 20 2F 2A 43 48 41 52 41 43 54 | /*CHARACT|
00000DA0: 45 52 20 43 4F 44 45 2A 2F 0D 23 44 45 46 49 4E |ER CODE*/.#DEFIN|
00000DB0: 45 20 D2 C5 C4 20 32 38 20 20 20 20 20 20 20 20 |E ... 28 |
00000DC0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000DD0: 20 2F 2A 43 48 41 52 41 43 54 45 52 20 43 4F 44 | /*CHARACTER COD|
00000DE0: 45 2A 2F 0D 0D 2F 2A 42 45 47 49 4E 20 50 52 4F |E*/../*BEGIN PRO|
00000DF0: 47 52 41 4D 2A 2F 0D 4D 41 49 4E 28 29 0D 20 20 |GRAM*/.MAIN(). |
00000E00: DB 0D 20 20 43 48 41 52 20 42 55 46 46 45 52 5B |.. CHAR BUFFER[|
00000E10: 31 30 30 5D 3B 20 20 20 2F 2A 45 56 45 4E 54 20 |100]; /*EVENT |
00000E20: 42 55 46 46 45 52 2A 2F 0D 20 20 43 48 41 52 20 |BUFFER*/. CHAR |
00000E30: 2A 4F 55 54 50 54 52 3D 42 55 46 46 45 52 3B 2F |*OUTPTR=BUFFER;/|
00000E40: 2A 4E 45 58 54 20 4F 55 54 20 50 54 52 2A 2F 0D |*NEXT OUT PTR*/.|
00000E50: 20 20 49 4E 54 20 49 3B 20 20 20 20 20 20 20 20 | INT I; |
00000E60: 20 20 20 20 20 20 2F 2A 4C 4F 4F 50 20 43 4F 55 | /*LOOP COU|
00000E70: 4E 54 45 52 2A 2F 0D 20 20 43 48 41 52 20 42 59 |NTER*/. CHAR BY|
00000E80: 54 45 3B 20 20 20 20 20 20 20 20 20 20 2F 2A CD |TE; /*.|
00000E90: C9 C4 C9 20 42 59 54 45 2A 2F 0D 20 20 43 48 41 |... BYTE*/. CHA|
00000EA0: 52 20 2A 49 4E 50 54 52 3D 42 55 46 46 45 52 3B |R *INPTR=BUFFER;|
00000EB0: 20 2F 2A 4E 45 58 54 20 49 4E 20 50 54 52 2A 2F | /*NEXT IN PTR*/|
00000EC0: 0D 20 20 49 4E 54 20 53 54 41 54 45 3D 30 3B 20 |. INT STATE=0; |
00000ED0: 20 20 20 20 20 20 20 2F 2A CD C9 C4 C9 20 53 54 | /*.... ST|
00000EE0: 41 54 45 2A 2F 0D 20 20 49 4E 54 20 4E 4F 54 45 |ATE*/. INT NOTE|
00000EF0: 3B 20 20 20 20 20 20 20 20 20 20 20 2F 2A CD C9 |; /*..|
00000F00: C4 C9 20 4E 4F 54 45 2A 2F 0D 20 20 43 48 41 52 |.. NOTE*/. CHAR|
00000F10: 20 4F 46 46 3D 30 3B 20 20 20 20 20 20 20 20 20 | OFF=0; |
00000F20: 2F 2A 46 4C 41 47 53 20 4E 4F 54 45 20 4F 46 46 |/*FLAGS NOTE OFF|
00000F30: 2A 2F 0D 20 20 43 48 41 52 20 4E 4F 4E 41 4D 45 |*/. CHAR NONAME|
00000F40: 3D 31 3B 20 20 20 20 20 20 2F 2A 46 4C 41 47 53 |=1; /*FLAGS|
00000F50: 20 4F 4B 20 4E 41 4D 45 2A 2F 0D 20 20 43 48 41 | OK NAME*/. CHA|
00000F60: 52 20 44 55 4D 4D 59 31 3B 20 20 20 20 20 20 20 |R DUMMY1; |
00000F70: 20 2F 2A 46 41 4B 45 20 CD C9 C4 C9 20 49 4E 54 | /*FAKE .... INT|
00000F80: 45 52 46 41 43 45 20 52 45 47 49 53 54 45 52 53 |ERFACE REGISTERS|
00000F90: 20 49 46 20 4E 4F 4E 45 20 50 52 45 53 45 4E 54 | IF NONE PRESENT|
00000FA0: 2A 2F 0D 20 20 43 48 41 52 20 44 55 4D 4D 59 32 |*/. CHAR DUMMY2|
00000FB0: 3D 30 3B 0D 20 20 49 4E 54 20 42 45 53 54 4E 45 |=0;. INT BESTNE|
00000FC0: 58 54 3B 20 20 20 20 20 20 20 2F 2A 56 4F 49 43 |XT; /*VOIC|
00000FD0: 45 20 54 4F 20 55 53 45 20 46 4F 52 20 4E 45 58 |E TO USE FOR NEX|
00000FE0: 54 20 4E 4F 54 45 20 4F 4E 20 49 46 20 41 4C 4C |T NOTE ON IF ALL|
00000FF0: 20 56 4F 49 43 45 53 20 49 4E 20 55 53 45 2A 2F | VOICES IN USE*/|
00001000: 0D 0D 0D 20 20 2F 2A 44 45 46 49 4E 45 20 CD C9 |... /*DEFINE ..|
00001010: C4 C9 20 49 4E 54 45 52 46 41 43 45 20 50 41 52 |.. INTERFACE PAR|
00001020: 41 4D 45 54 45 52 53 2A 2F 0D 20 20 53 54 52 55 |AMETERS*/. STRU|
00001030: 43 54 0D 20 20 20 20 DB 0D 20 20 20 20 43 48 41 |CT. .. CHA|
00001040: 52 20 2A 43 4F 4E 54 52 4F 4C 3B 20 2F 2A 34 20 |R *CONTROL; /*4 |
00001050: D5 C1 D2 D4 20 52 45 47 20 41 44 44 52 45 53 53 |.... REG ADDRESS|
00001060: 45 53 2A 2F 0D 20 20 20 20 43 48 41 52 20 2A 54 |ES*/. CHAR *T|
00001070: 58 44 41 54 41 3B 0D 20 20 20 20 43 48 41 52 20 |XDATA;. CHAR |
00001080: 2A 53 54 41 54 55 53 3B 0D 20 20 20 20 43 48 41 |*STATUS;. CHA|
00001090: 52 20 2A 52 58 44 41 54 41 3B 0D 20 20 20 20 43 |R *RXDATA;. C|
000010A0: 48 41 52 20 52 45 53 45 54 3B 20 20 20 20 2F 2A |HAR RESET; /*|
000010B0: 43 54 4C 20 42 59 54 45 20 46 4F 52 20 52 45 53 |CTL BYTE FOR RES|
000010C0: 45 54 2A 2F 0D 20 20 20 20 43 48 41 52 20 45 4E |ET*/. CHAR EN|
000010D0: 41 42 4C 45 3B 20 20 20 2F 2A 43 54 4C 20 42 59 |ABLE; /*CTL BY|
000010E0: 54 45 20 46 4F 52 20 45 4E 41 42 4C 45 20 49 4E |TE FOR ENABLE IN|
000010F0: 50 55 54 20 57 49 54 48 20 49 4E 54 45 52 52 55 |PUT WITH INTERRU|
00001100: 50 54 2A 2F 0D 20 20 20 20 DD 20 4D 49 44 49 50 |PT*/. . MIDIP|
00001110: 41 52 41 4D 53 3B 0D 0D 20 20 2F 2A 50 52 4F 4D |ARAMS;.. /*PROM|
00001120: 50 54 20 46 4F 52 20 4E 55 4D 42 45 52 20 4F 46 |PT FOR NUMBER OF|
00001130: 20 56 4F 49 43 45 53 20 41 4E 44 20 42 41 53 45 | VOICES AND BASE|
00001140: 20 46 49 4C 45 20 4E 41 4D 45 2A 2F 0D 20 20 42 | FILE NAME*/. B|
00001150: 41 43 4B 47 52 4F 55 4E 44 3D C2 CC C1 C3 CB A4 |ACKGROUND=......|
00001160: D6 C1 CC D5 C5 3B 0D 20 20 42 4F 52 44 45 52 3D |.....;. BORDER=|
00001170: C2 CC C1 C3 CB A4 D6 C1 CC D5 C5 3B 0D 20 20 57 |...........;. W|
00001180: 48 49 4C 45 28 4E 4F 4E 41 4D 45 29 0D 20 20 20 |HILE(NONAME). |
00001190: 20 DB 0D 20 20 20 20 50 52 49 4E 54 46 28 22 25 | .. PRINTF("%|
000011A0: 43 25 43 5C 4E 2A 25 43 25 43 20 D3 D4 CF D0 25 |C%C\N*%C%C ....%|
000011B0: 43 20 20 20 CD C9 C4 C9 2D 54 4F 2D D3 49 44 20 |C ....-TO-.ID |
000011C0: D3 45 51 55 45 4E 43 45 52 20 20 20 25 43 D3 D4 |.EQUENCER %C..|
000011D0: C1 D2 D4 25 43 5C 4E 22 2C 0D 20 20 20 20 20 C3 |...%C\N",. .|
000011E0: CC C5 C1 D2 2C C2 CC C1 C3 CB 2C D2 C5 C4 2C CC |....,.....,...,.|
000011F0: CF D7 C5 D2 2C C3 D9 C1 CE 2C C2 CC C1 C3 CB 2C |....,....,.....,|
00001200: C3 D9 C1 CE 29 3B 0D 20 20 20 20 50 52 49 4E 54 |....);. PRINT|
00001210: 46 28 22 20 20 20 20 20 20 20 20 20 D6 32 2E 30 |F(" .2.0|
00001220: 20 42 59 20 C6 52 41 4E 4B 20 D0 52 49 4E 44 4C | BY .RANK .RINDL|
00001230: 45 5C 4E 5C 4E 22 29 3B 0D 20 20 20 20 50 52 49 |E\N\N");. PRI|
00001240: 4E 54 46 28 22 31 20 54 4F 20 36 20 D3 C9 C4 20 |NTF("1 TO 6 ... |
00001250: 56 4F 49 43 45 53 3F 20 36 25 43 22 2C CC C5 C6 |VOICES? 6%C",...|
00001260: D4 29 3B 0D 20 20 20 20 47 45 54 53 28 53 49 44 |.);. GETS(SID|
00001270: 42 55 46 46 45 52 29 3B 0D 20 20 20 20 49 46 28 |BUFFER);. IF(|
00001280: 2A 53 49 44 42 55 46 46 45 52 3E 27 30 27 26 26 |*SIDBUFFER>'0'&&|
00001290: 2A 53 49 44 42 55 46 46 45 52 3C 27 37 27 29 CE |*SIDBUFFER<'7').|
000012A0: D6 CF C9 C3 C5 D3 3D 2A 53 49 44 42 55 46 46 45 |......=*SIDBUFFE|
000012B0: 52 2D 27 30 27 3B 0D 20 20 20 20 42 45 53 54 4E |R-'0';. BESTN|
000012C0: 45 58 54 3D CE D6 CF C9 C3 C5 D3 3B 0D 20 20 20 |EXT=.......;. |
000012D0: 20 50 52 49 4E 54 46 28 22 25 43 D0 4F 4C 59 50 | PRINTF("%C.OLYP|
000012E0: 48 4F 4E 59 20 45 46 46 45 43 54 20 3F 20 59 25 |HONY EFFECT ? Y%|
000012F0: 43 22 2C D5 D0 2C CC C5 C6 D4 29 3B 0D 20 20 20 |C",..,....);. |
00001300: 20 47 45 54 53 28 53 49 44 42 55 46 46 45 52 29 | GETS(SIDBUFFER)|
00001310: 3B 0D 20 20 20 20 49 46 28 2A 53 49 44 42 55 46 |;. IF(*SIDBUF|
00001320: 46 45 52 3D 3D 27 4E 27 29 50 4F 4C 59 50 48 4F |FER=='N')POLYPHO|
00001330: 4E 59 3D 30 3B 0D 20 20 20 20 50 52 49 4E 54 46 |NY=0;. PRINTF|
00001340: 28 22 25 43 C5 4E 54 45 52 20 42 41 53 45 20 53 |("%C.NTER BASE S|
00001350: 41 56 45 20 46 49 4C 45 20 4E 41 4D 45 3A 20 22 |AVE FILE NAME: "|
00001360: 2C D5 D0 29 3B 0D 20 20 20 20 47 45 54 53 28 42 |,..);. GETS(B|
00001370: 41 53 45 4E 41 4D 45 29 3B 0D 20 20 20 20 49 46 |ASENAME);. IF|
00001380: 28 2A 42 41 53 45 4E 41 4D 45 3D 3D 30 29 2A 42 |(*BASENAME==0)*B|
00001390: 41 53 45 4E 41 4D 45 3D 27 4D 27 3B 0D 20 20 20 |ASENAME='M';. |
000013A0: 20 49 46 28 53 54 52 4C 45 4E 28 42 41 53 45 4E | IF(STRLEN(BASEN|
000013B0: 41 4D 45 29 3C 3D 31 30 29 4E 4F 4E 41 4D 45 2D |AME)<=10)NONAME-|
000013C0: 2D 3B 0D 20 20 20 20 DD 0D 0D 20 20 2F 2A 53 45 |-;. ... /*SE|
000013D0: 54 20 55 50 20 46 49 58 45 44 20 50 4F 52 54 49 |T UP FIXED PORTI|
000013E0: 4F 4E 20 4F 46 20 53 43 52 45 45 4E 2A 2F 0D 20 |ON OF SCREEN*/. |
000013F0: 20 50 52 49 4E 54 46 28 22 25 43 C2 55 46 46 45 | PRINTF("%C.UFFE|
00001400: 52 3A 20 25 43 25 43 20 20 20 20 20 20 20 20 20 |R: %C%C |
00001410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001420: 20 20 20 20 20 20 20 25 43 25 43 5C 4E 22 2C 0D | %C%C\N",.|
00001430: 20 20 20 D5 D0 2C D2 C5 D6 C5 D2 D3 C5 2C C7 D2 | ..,.......,..|
00001440: C5 C5 CE 2C CE CF D2 CD C1 CC 2C C3 D9 C1 CE 29 |...,......,....)|
00001450: 3B 0D 20 20 50 52 49 4E 54 46 28 22 C2 41 53 45 |;. PRINTF(".ASE|
00001460: 20 46 49 4C 45 20 4E 41 4D 45 20 49 53 20 27 25 | FILE NAME IS '%|
00001470: 53 27 2E 5C 4E 5C 4E 22 2C 20 42 41 53 45 4E 41 |S'.\N\N", BASENA|
00001480: 4D 45 29 3B 0D 20 20 50 52 49 4E 54 46 28 22 C8 |ME);. PRINTF(".|
00001490: 4F 4C 44 20 D2 D5 CE 2F D3 D4 CF D0 20 4B 45 59 |OLD .../.... KEY|
000014A0: 20 54 4F 20 51 55 49 54 2E 5C 4E 5C 4E 22 29 3B | TO QUIT.\N\N");|
000014B0: 0D 20 20 2F 2A 50 52 49 4E 54 46 28 22 25 58 5C |. /*PRINTF("%X\|
000014C0: 4E 5C 4E 22 2C 53 49 44 42 55 46 46 45 52 29 3B |N\N",SIDBUFFER);|
000014D0: 2A 2F 20 2F 2A 46 4F 52 20 43 48 45 43 4B 49 4E |*/ /*FOR CHECKIN|
000014E0: 47 20 50 52 4F 47 52 41 4D 20 53 49 5A 45 20 4F |G PROGRAM SIZE O|
000014F0: 4E 4C 59 2A 2F 0D 0D 20 20 2F 2A 44 45 54 45 43 |NLY*/.. /*DETEC|
00001500: 54 20 57 48 41 54 20 4B 49 4E 44 20 4F 46 20 49 |T WHAT KIND OF I|
00001510: 4E 54 45 52 46 41 43 45 20 49 53 20 49 4E 20 55 |NTERFACE IS IN U|
00001520: 53 45 20 41 4E 44 2A 2F 0D 20 20 2F 2A 53 45 54 |SE AND*/. /*SET|
00001530: 20 55 50 20 CD C9 C4 C9 20 49 4E 54 45 52 46 41 | UP .... INTERFA|
00001540: 43 45 20 50 41 52 41 4D 45 54 45 52 53 2A 2F 0D |CE PARAMETERS*/.|
00001550: 0D 20 20 2F 2A 54 45 53 54 20 46 4F 52 20 50 41 |. /*TEST FOR PA|
00001560: 53 53 50 4F 52 54 2A 2F 0D 20 20 2A 28 28 43 48 |SSPORT*/. *((CH|
00001570: 41 52 20 2A 29 30 58 44 45 30 38 29 3D 30 58 31 |AR *)0XDE08)=0X1|
00001580: 33 3B 0D 20 20 2A 28 28 43 48 41 52 20 2A 29 30 |3;. *((CHAR *)0|
00001590: 58 44 45 30 38 29 3D 30 58 31 31 3B 0D 20 20 49 |XDE08)=0X11;. I|
000015A0: 46 28 2A 28 28 43 48 41 52 20 2A 29 30 58 44 45 |F(*((CHAR *)0XDE|
000015B0: 30 38 29 3D 3D 32 29 0D 20 20 20 20 DB 0D 20 20 |08)==2). .. |
000015C0: 20 20 2F 2A 50 41 53 53 50 4F 52 54 20 49 4E 54 | /*PASSPORT INT|
000015D0: 45 52 46 41 43 45 2A 2F 0D 20 20 20 20 50 52 49 |ERFACE*/. PRI|
000015E0: 4E 54 46 28 22 D0 41 53 53 50 4F 52 54 20 49 4E |NTF(".ASSPORT IN|
000015F0: 54 45 52 46 41 43 45 20 46 4F 55 4E 44 2E 5C 4E |TERFACE FOUND.\N|
00001600: 5C 4E 22 29 3B 0D 20 20 20 20 4D 49 44 49 50 41 |\N");. MIDIPA|
00001610: 52 41 4D 53 2E 43 4F 4E 54 52 4F 4C 20 3D 20 28 |RAMS.CONTROL = (|
00001620: 43 48 41 52 20 2A 29 30 58 44 45 30 38 3B 0D 20 |CHAR *)0XDE08;. |
00001630: 20 20 20 4D 49 44 49 50 41 52 41 4D 53 2E 54 58 | MIDIPARAMS.TX|
00001640: 44 41 54 41 20 20 3D 20 28 43 48 41 52 20 2A 29 |DATA = (CHAR *)|
00001650: 30 58 44 45 30 39 3B 0D 20 20 20 20 4D 49 44 49 |0XDE09;. MIDI|
00001660: 50 41 52 41 4D 53 2E 53 54 41 54 55 53 20 20 3D |PARAMS.STATUS =|
00001670: 20 28 43 48 41 52 20 2A 29 30 58 44 45 30 38 3B | (CHAR *)0XDE08;|
00001680: 0D 20 20 20 20 4D 49 44 49 50 41 52 41 4D 53 2E |. MIDIPARAMS.|
00001690: 52 58 44 41 54 41 20 20 3D 20 28 43 48 41 52 20 |RXDATA = (CHAR |
000016A0: 2A 29 30 58 44 45 30 39 3B 0D 20 20 20 20 4D 49 |*)0XDE09;. MI|
000016B0: 44 49 50 41 52 41 4D 53 2E 52 45 53 45 54 20 20 |DIPARAMS.RESET |
000016C0: 20 3D 20 30 58 33 3B 0D 20 20 20 20 4D 49 44 49 | = 0X3;. MIDI|
000016D0: 50 41 52 41 4D 53 2E 45 4E 41 42 4C 45 20 20 3D |PARAMS.ENABLE =|
000016E0: 20 30 58 39 35 3B 0D 20 20 20 20 DD 0D 20 20 45 | 0X95;. .. E|
000016F0: 4C 53 45 0D 20 20 20 20 DB 0D 20 20 20 20 2F 2A |LSE. .. /*|
00001700: 54 45 53 54 20 46 4F 52 20 53 45 51 55 45 4E 54 |TEST FOR SEQUENT|
00001710: 49 41 4C 2A 2F 0D 20 20 20 20 2A 28 28 43 48 41 |IAL*/. *((CHA|
00001720: 52 20 2A 29 30 58 44 45 30 30 29 3D 30 58 33 3B |R *)0XDE00)=0X3;|
00001730: 0D 20 20 20 20 2A 28 28 43 48 41 52 20 2A 29 30 |. *((CHAR *)0|
00001740: 58 44 45 30 30 29 3D 30 58 31 35 3B 0D 20 20 20 |XDE00)=0X15;. |
00001750: 20 49 46 28 2A 28 28 43 48 41 52 20 2A 29 30 58 | IF(*((CHAR *)0X|
00001760: 44 45 30 32 29 3D 3D 32 29 0D 20 20 20 20 20 20 |DE02)==2). |
00001770: DB 0D 20 20 20 20 20 20 2F 2A 53 45 51 55 45 4E |.. /*SEQUEN|
00001780: 54 49 41 4C 20 49 4E 54 45 52 46 41 43 45 2A 2F |TIAL INTERFACE*/|
00001790: 0D 20 20 20 20 20 20 50 52 49 4E 54 46 28 22 D3 |. PRINTF(".|
000017A0: 45 51 55 45 4E 54 49 41 4C 20 49 4E 54 45 52 46 |EQUENTIAL INTERF|
000017B0: 41 43 45 20 46 4F 55 4E 44 2E 5C 4E 5C 4E 22 29 |ACE FOUND.\N\N")|
000017C0: 3B 0D 20 20 20 20 20 20 4D 49 44 49 50 41 52 41 |;. MIDIPARA|
000017D0: 4D 53 2E 43 4F 4E 54 52 4F 4C 20 3D 20 28 43 48 |MS.CONTROL = (CH|
000017E0: 41 52 20 2A 29 30 58 44 45 30 30 3B 0D 20 20 20 |AR *)0XDE00;. |
000017F0: 20 20 20 4D 49 44 49 50 41 52 41 4D 53 2E 54 58 | MIDIPARAMS.TX|
00001800: 44 41 54 41 20 20 3D 20 28 43 48 41 52 20 2A 29 |DATA = (CHAR *)|
00001810: 30 58 44 45 30 31 3B 0D 20 20 20 20 20 20 4D 49 |0XDE01;. MI|
00001820: 44 49 50 41 52 41 4D 53 2E 53 54 41 54 55 53 20 |DIPARAMS.STATUS |
00001830: 20 3D 20 28 43 48 41 52 20 2A 29 30 58 44 45 30 | = (CHAR *)0XDE0|
00001840: 32 3B 0D 20 20 20 20 20 20 4D 49 44 49 50 41 52 |2;. MIDIPAR|
00001850: 41 4D 53 2E 52 58 44 41 54 41 20 20 3D 20 28 43 |AMS.RXDATA = (C|
00001860: 48 41 52 20 2A 29 30 58 44 45 30 33 3B 0D 20 20 |HAR *)0XDE03;. |
00001870: 20 20 20 20 4D 49 44 49 50 41 52 41 4D 53 2E 52 | MIDIPARAMS.R|
00001880: 45 53 45 54 20 20 20 3D 20 30 58 33 3B 0D 20 20 |ESET = 0X3;. |
00001890: 20 20 20 20 4D 49 44 49 50 41 52 41 4D 53 2E 45 | MIDIPARAMS.E|
000018A0: 4E 41 42 4C 45 20 20 3D 20 30 58 39 35 3B 0D 20 |NABLE = 0X95;. |
000018B0: 20 20 20 20 20 DD 0D 20 20 20 20 45 4C 53 45 0D | .. ELSE.|
000018C0: 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 2F 2A | .. /*|
000018D0: 54 45 53 54 20 46 4F 52 20 53 49 45 4C 2F 4A 4D |TEST FOR SIEL/JM|
000018E0: 53 2A 2F 0D 20 20 20 20 20 20 2A 28 28 43 48 41 |S*/. *((CHA|
000018F0: 52 20 2A 29 30 58 44 45 30 34 29 3D 30 58 33 3B |R *)0XDE04)=0X3;|
00001900: 0D 20 20 20 20 20 20 2A 28 28 43 48 41 52 20 2A |. *((CHAR *|
00001910: 29 30 58 44 45 30 34 29 3D 30 58 31 35 3B 0D 20 |)0XDE04)=0X15;. |
00001920: 20 20 20 20 20 49 46 28 2A 28 28 43 48 41 52 20 | IF(*((CHAR |
00001930: 2A 29 30 58 44 45 30 36 29 3D 3D 32 29 0D 20 20 |*)0XDE06)==2). |
00001940: 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 20 20 | .. |
00001950: 2F 2A 53 49 45 4C 2F 4A 4D 53 20 49 4E 54 45 52 |/*SIEL/JMS INTER|
00001960: 46 41 43 45 2A 2F 0D 20 20 20 20 20 20 20 20 50 |FACE*/. P|
00001970: 52 49 4E 54 46 28 22 D3 49 45 4C 2F CA CD D3 20 |RINTF(".IEL/... |
00001980: 49 4E 54 45 52 46 41 43 45 20 46 4F 55 4E 44 2E |INTERFACE FOUND.|
00001990: 5C 4E 5C 4E 22 29 3B 0D 20 20 20 20 20 20 20 20 |\N\N");. |
000019A0: 4D 49 44 49 50 41 52 41 4D 53 2E 43 4F 4E 54 52 |MIDIPARAMS.CONTR|
000019B0: 4F 4C 20 3D 20 28 43 48 41 52 20 2A 29 30 58 44 |OL = (CHAR *)0XD|
000019C0: 45 30 34 3B 0D 20 20 20 20 20 20 20 20 4D 49 44 |E04;. MID|
000019D0: 49 50 41 52 41 4D 53 2E 54 58 44 41 54 41 20 20 |IPARAMS.TXDATA |
000019E0: 3D 20 28 43 48 41 52 20 2A 29 30 58 44 45 30 35 |= (CHAR *)0XDE05|
000019F0: 3B 0D 20 20 20 20 20 20 20 20 4D 49 44 49 50 41 |;. MIDIPA|
00001A00: 52 41 4D 53 2E 53 54 41 54 55 53 20 20 3D 20 28 |RAMS.STATUS = (|
00001A10: 43 48 41 52 20 2A 29 30 58 44 45 30 36 3B 0D 20 |CHAR *)0XDE06;. |
00001A20: 20 20 20 20 20 20 20 4D 49 44 49 50 41 52 41 4D | MIDIPARAM|
00001A30: 53 2E 52 58 44 41 54 41 20 20 3D 20 28 43 48 41 |S.RXDATA = (CHA|
00001A40: 52 20 2A 29 30 58 44 45 30 37 3B 0D 20 20 20 20 |R *)0XDE07;. |
00001A50: 20 20 20 20 4D 49 44 49 50 41 52 41 4D 53 2E 52 | MIDIPARAMS.R|
00001A60: 45 53 45 54 20 20 20 3D 20 30 58 33 3B 0D 20 20 |ESET = 0X3;. |
00001A70: 20 20 20 20 20 20 4D 49 44 49 50 41 52 41 4D 53 | MIDIPARAMS|
00001A80: 2E 45 4E 41 42 4C 45 20 20 3D 20 30 58 39 36 3B |.ENABLE = 0X96;|
00001A90: 0D 20 20 20 20 20 20 20 20 DD 0D 20 20 20 20 20 |. .. |
00001AA0: 20 45 4C 53 45 0D 20 20 20 20 20 20 20 20 DB 0D | ELSE. ..|
00001AB0: 20 20 20 20 20 20 20 20 2F 2A 57 48 4F 4F 50 53 | /*WHOOPS|
00001AC0: 2C 20 4E 4F 54 48 49 4E 47 20 50 4C 55 47 47 45 |, NOTHING PLUGGE|
00001AD0: 44 20 49 4E 2A 2F 0D 20 20 20 20 20 20 20 20 50 |D IN*/. P|
00001AE0: 52 49 4E 54 46 28 22 CE 4F 20 49 4E 54 45 52 46 |RINTF(".O INTERF|
00001AF0: 41 43 45 20 46 4F 55 4E 44 21 5C 4E 22 29 3B 0D |ACE FOUND!\N");.|
00001B00: 20 20 20 20 20 20 20 20 4D 49 44 49 50 41 52 41 | MIDIPARA|
00001B10: 4D 53 2E 43 4F 4E 54 52 4F 4C 20 3D 20 26 44 55 |MS.CONTROL = &DU|
00001B20: 4D 4D 59 31 3B 0D 20 20 20 20 20 20 20 20 4D 49 |MMY1;. MI|
00001B30: 44 49 50 41 52 41 4D 53 2E 53 54 41 54 55 53 20 |DIPARAMS.STATUS |
00001B40: 3D 20 26 44 55 4D 4D 59 32 3B 0D 20 20 20 20 20 |= &DUMMY2;. |
00001B50: 20 20 20 DD 0D 20 20 20 20 20 20 DD 0D 20 20 20 | .. .. |
00001B60: 20 DD 0D 0D 20 20 2F 2A 49 4E 49 54 49 41 4C 49 | ... /*INITIALI|
00001B70: 5A 45 20 D3 C9 C4 20 43 48 49 50 20 56 4F 49 43 |ZE ... CHIP VOIC|
00001B80: 45 53 20 46 4F 52 20 41 20 53 49 4D 50 4C 45 20 |ES FOR A SIMPLE |
00001B90: 50 49 41 4E 4F 20 4C 49 4B 45 20 53 4F 55 4E 44 |PIANO LIKE SOUND|
00001BA0: 2A 2F 0D 20 20 2A 28 56 4F 49 43 45 5B 30 5D 2B |*/. *(VOICE[0]+|
00001BB0: 46 49 4C 54 45 52 29 3D 30 58 30 38 3B 0D 20 20 |FILTER)=0X08;. |
00001BC0: 2A 28 56 4F 49 43 45 5B 33 5D 2B 46 49 4C 54 45 |*(VOICE[3]+FILTE|
00001BD0: 52 29 3D 30 58 30 38 3B 0D 20 20 2A 28 56 4F 49 |R)=0X08;. *(VOI|
00001BE0: 43 45 5B 30 5D 2B 56 4F 4C 55 4D 45 29 3D 30 58 |CE[0]+VOLUME)=0X|
00001BF0: 30 43 3B 0D 20 20 2A 28 56 4F 49 43 45 5B 33 5D |0C;. *(VOICE[3]|
00001C00: 2B 56 4F 4C 55 4D 45 29 3D 30 58 30 43 3B 0D 20 |+VOLUME)=0X0C;. |
00001C10: 20 46 4F 52 28 49 3D 30 3B 49 3C 36 3B 49 2B 2B | FOR(I=0;I<6;I++|
00001C20: 29 0D 20 20 20 20 DB 0D 20 20 20 20 2A 28 28 55 |). .. *((U|
00001C30: 4E 53 49 47 4E 45 44 20 2A 29 28 56 4F 49 43 45 |NSIGNED *)(VOICE|
00001C40: 5B 49 5D 2B 50 55 4C 53 57 44 29 29 0D 20 20 20 |[I]+PULSWD)). |
00001C50: 20 20 20 3D 31 35 30 30 3B 0D 20 20 20 20 2A 28 | =1500;. *(|
00001C60: 56 4F 49 43 45 5B 49 5D 2B 57 41 56 45 29 3D 30 |VOICE[I]+WAVE)=0|
00001C70: 58 34 30 3B 0D 20 20 20 20 2A 28 56 4F 49 43 45 |X40;. *(VOICE|
00001C80: 5B 49 5D 2B 41 54 54 44 45 43 29 3D 30 58 30 42 |[I]+ATTDEC)=0X0B|
00001C90: 3B 0D 20 20 20 20 2A 28 56 4F 49 43 45 5B 49 5D |;. *(VOICE[I]|
00001CA0: 2B 53 55 53 52 45 4C 29 3D 30 58 31 39 3B 0D 20 |+SUSREL)=0X19;. |
00001CB0: 20 20 20 DD 0D 0D 20 20 2F 2A 49 4E 49 54 49 41 | ... /*INITIA|
00001CC0: 4C 49 5A 45 20 44 55 4D 4D 59 20 37 54 48 20 56 |LIZE DUMMY 7TH V|
00001CD0: 4F 49 43 45 20 41 44 44 52 45 53 53 2A 2F 0D 20 |OICE ADDRESS*/. |
00001CE0: 20 56 4F 49 43 45 5B CE D6 CF C9 C3 C5 D3 5D 3D | VOICE[.......]=|
00001CF0: 4E 4F 56 4F 49 43 45 3B 0D 0D 20 20 2F 2A 49 4E |NOVOICE;.. /*IN|
00001D00: 49 54 49 41 4C 49 5A 45 20 53 49 44 20 42 55 46 |ITIALIZE SID BUF|
00001D10: 46 45 52 20 50 4F 49 4E 54 45 52 20 54 4F 20 53 |FER POINTER TO S|
00001D20: 54 41 52 54 20 4F 46 20 42 55 46 46 45 52 2A 2F |TART OF BUFFER*/|
00001D30: 0D 20 20 53 49 44 42 55 46 50 54 52 3D 53 49 44 |. SIDBUFPTR=SID|
00001D40: 42 55 46 46 45 52 3B 0D 0D 20 20 2F 2A 45 4E 41 |BUFFER;.. /*ENA|
00001D50: 42 4C 45 20 49 4E 54 45 52 52 55 50 54 20 44 52 |BLE INTERRUPT DR|
00001D60: 49 56 45 4E 20 CD C9 C4 C9 20 49 4E 50 55 54 20 |IVEN .... INPUT |
00001D70: 28 53 45 45 20 48 4F 4F 4B 4D 49 44 49 2E 41 20 |(SEE HOOKMIDI.A |
00001D80: 41 53 53 45 4D 42 4C 45 44 20 53 45 50 41 52 41 |ASSEMBLED SEPARA|
00001D90: 54 45 4C 59 29 2A 2F 0D 20 20 2F 2A 42 55 46 46 |TELY)*/. /*BUFF|
00001DA0: 45 52 20 57 49 4C 4C 20 42 45 20 46 49 4C 4C 45 |ER WILL BE FILLE|
00001DB0: 44 20 49 4E 20 41 20 43 49 52 43 55 4C 41 52 20 |D IN A CIRCULAR |
00001DC0: 46 41 53 48 49 4F 4E 20 41 53 20 CD C9 C4 C9 20 |FASHION AS .... |
00001DD0: 42 59 54 45 53 20 41 52 52 49 56 45 3B 20 49 4E |BYTES ARRIVE; IN|
00001DE0: 50 54 52 2A 2F 0D 20 20 2F 2A 57 49 4C 4C 20 42 |PTR*/. /*WILL B|
00001DF0: 45 20 55 50 44 41 54 45 44 20 54 4F 20 52 45 46 |E UPDATED TO REF|
00001E00: 4C 45 43 54 20 54 48 45 20 4E 45 58 54 20 46 52 |LECT THE NEXT FR|
00001E10: 45 45 20 28 55 4E 55 53 45 44 29 20 42 59 54 45 |EE (UNUSED) BYTE|
00001E20: 20 4F 46 20 42 55 46 46 45 52 2A 2F 0D 20 20 48 | OF BUFFER*/. H|
00001E30: 4F 4F 4B 4D 49 44 49 28 42 55 46 46 45 52 2C 42 |OOKMIDI(BUFFER,B|
00001E40: 55 46 46 45 52 2B 31 30 30 2C 26 49 4E 50 54 52 |UFFER+100,&INPTR|
00001E50: 2C 26 4D 49 44 49 50 41 52 41 4D 53 29 3B 0D 0D |,&MIDIPARAMS);..|
00001E60: 20 20 2F 2A 4D 41 49 4E 20 4C 4F 4F 50 20 2D 20 | /*MAIN LOOP - |
00001E70: 45 58 49 54 20 4F 4E 4C 59 20 42 59 20 52 55 4E |EXIT ONLY BY RUN|
00001E80: 2F 53 54 4F 50 20 4B 45 59 2A 2F 0D 20 20 46 4F |/STOP KEY*/. FO|
00001E90: 52 28 3B 3B 29 0D 20 20 20 20 DB 0D 20 20 20 20 |R(;;). .. |
00001EA0: 2F 2A 49 53 20 54 48 45 52 45 20 41 20 CD C9 C4 |/*IS THERE A ...|
00001EB0: C9 20 45 56 45 4E 54 20 49 4E 20 54 48 45 20 42 |. EVENT IN THE B|
00001EC0: 55 46 46 45 52 3F 2A 2F 0D 20 20 20 20 49 46 28 |UFFER?*/. IF(|
00001ED0: 49 4E 50 54 52 20 21 3D 20 4F 55 54 50 54 52 29 |INPTR != OUTPTR)|
00001EE0: 0D 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 2F |. .. /|
00001EF0: 2A 59 45 53 2C 20 46 45 54 43 48 20 4E 45 58 54 |*YES, FETCH NEXT|
00001F00: 20 42 59 54 45 2A 2F 0D 20 20 20 20 20 20 42 59 | BYTE*/. BY|
00001F10: 54 45 20 3D 20 2A 4F 55 54 50 54 52 3B 0D 0D 20 |TE = *OUTPTR;.. |
00001F20: 20 20 20 20 20 2F 2A 49 46 20 54 48 49 53 20 49 | /*IF THIS I|
00001F30: 53 20 41 20 4E 4F 54 45 2D 4F 46 46 20 53 54 41 |S A NOTE-OFF STA|
00001F40: 54 55 53 20 42 59 54 45 2C 20 43 4F 4E 56 45 52 |TUS BYTE, CONVER|
00001F50: 54 20 49 54 20 54 4F 20 41 20 4E 4F 54 45 2D 4F |T IT TO A NOTE-O|
00001F60: 4E 20 42 59 54 45 2A 2F 0D 20 20 20 20 20 20 2F |N BYTE*/. /|
00001F70: 2A 57 49 54 48 20 56 45 4C 4F 43 49 54 59 20 28 |*WITH VELOCITY (|
00001F80: 54 4F 20 46 4F 4C 4C 4F 57 29 20 53 45 54 20 54 |TO FOLLOW) SET T|
00001F90: 4F 20 5A 45 52 4F 2A 2F 0D 20 20 20 20 20 20 49 |O ZERO*/. I|
00001FA0: 46 28 28 42 59 54 45 26 30 58 46 30 29 3D 3D 30 |F((BYTE&0XF0)==0|
00001FB0: 58 38 30 29 0D 20 20 20 20 20 20 20 20 DB 0D 20 |X80). .. |
00001FC0: 20 20 20 20 20 20 20 42 59 54 45 3D 30 58 39 30 | BYTE=0X90|
00001FD0: 3B 0D 20 20 20 20 20 20 20 20 4F 46 46 2B 2B 3B |;. OFF++;|
00001FE0: 0D 20 20 20 20 20 20 20 20 DD 0D 0D 20 20 20 20 |. ... |
00001FF0: 20 20 2F 2A 49 46 20 54 48 49 53 20 42 59 54 45 | /*IF THIS BYTE|
00002000: 20 49 53 20 4E 4F 54 20 41 20 52 45 41 4C 2D 54 | IS NOT A REAL-T|
00002010: 49 4D 45 20 4D 45 53 53 41 47 45 2C 2A 2F 0D 20 |IME MESSAGE,*/. |
00002020: 20 20 20 20 20 2F 2A 53 54 41 54 45 20 4D 41 43 | /*STATE MAC|
00002030: 48 49 4E 45 20 57 49 4C 4C 20 46 4F 4C 4C 4F 57 |HINE WILL FOLLOW|
00002040: 20 50 52 4F 47 52 45 53 53 20 4F 46 20 4D 55 4C | PROGRESS OF MUL|
00002050: 54 49 2D 42 59 54 45 20 CD C9 C4 C9 20 45 56 45 |TI-BYTE .... EVE|
00002060: 4E 54 2A 2F 0D 20 20 20 20 20 20 49 46 28 28 42 |NT*/. IF((B|
00002070: 59 54 45 26 30 58 46 30 29 21 3D 30 58 46 30 29 |YTE&0XF0)!=0XF0)|
00002080: 53 57 49 54 43 48 28 53 54 41 54 45 29 0D 20 20 |SWITCH(STATE). |
00002090: 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 20 20 | .. |
000020A0: 2F 2A 57 41 49 54 49 4E 47 20 46 4F 52 20 4E 4F |/*WAITING FOR NO|
000020B0: 54 45 2D 4F 4E 20 53 54 41 54 55 53 20 42 59 54 |TE-ON STATUS BYT|
000020C0: 45 2A 2F 0D 20 20 20 20 20 20 20 20 43 41 53 45 |E*/. CASE|
000020D0: 20 30 3A 0D 20 20 20 20 20 20 20 20 20 20 DB 0D | 0:. ..|
000020E0: 20 20 20 20 20 20 20 20 20 20 2F 2A 49 53 20 54 | /*IS T|
000020F0: 48 49 53 20 41 20 4E 4F 54 45 2D 4F 4E 3F 2A 2F |HIS A NOTE-ON?*/|
00002100: 0D 20 20 20 20 20 20 20 20 20 20 49 46 28 28 42 |. IF((B|
00002110: 59 54 45 20 26 20 30 58 46 30 29 3D 3D 30 58 39 |YTE & 0XF0)==0X9|
00002120: 30 29 0D 20 20 20 20 20 20 20 20 20 20 20 20 DB |0). .|
00002130: 0D 20 20 20 20 20 20 20 20 20 20 20 20 2F 2A 59 |. /*Y|
00002140: 45 53 2C 20 57 41 49 54 20 46 4F 52 20 4E 4F 54 |ES, WAIT FOR NOT|
00002150: 45 20 4E 55 4D 42 45 52 20 42 59 54 45 2A 2F 0D |E NUMBER BYTE*/.|
00002160: 20 20 20 20 20 20 20 20 20 20 20 20 53 54 41 54 | STAT|
00002170: 45 3D 32 3B 0D 20 20 20 20 20 20 20 20 20 20 20 |E=2;. |
00002180: 20 DD 0D 20 20 20 20 20 20 20 20 20 20 42 52 45 | .. BRE|
00002190: 41 4B 3B 0D 20 20 20 20 20 20 20 20 20 20 DD 0D |AK;. ..|
000021A0: 0D 20 20 20 20 20 20 20 20 2F 2A 57 41 49 54 49 |. /*WAITI|
000021B0: 4E 47 20 46 4F 52 20 41 4E 4F 54 48 45 52 20 4E |NG FOR ANOTHER N|
000021C0: 4F 54 45 20 4E 55 4D 42 45 52 20 42 59 54 45 20 |OTE NUMBER BYTE |
000021D0: 4F 52 20 41 20 4E 4F 54 45 2D 4F 4E 20 53 54 41 |OR A NOTE-ON STA|
000021E0: 54 55 53 20 42 59 54 45 2A 2F 0D 20 20 20 20 20 |TUS BYTE*/. |
000021F0: 20 20 20 43 41 53 45 20 31 3A 0D 20 20 20 20 20 | CASE 1:. |
00002200: 20 20 20 20 20 DB 0D 20 20 20 20 20 20 20 20 20 | .. |
00002210: 20 2F 2A 49 53 20 54 48 53 20 41 20 53 54 41 54 | /*IS THS A STAT|
00002220: 55 53 20 42 59 54 45 3F 2A 2F 0D 20 20 20 20 20 |US BYTE?*/. |
00002230: 20 20 20 20 20 49 46 28 42 59 54 45 20 26 20 30 | IF(BYTE & 0|
00002240: 58 38 30 29 0D 20 20 20 20 20 20 20 20 20 20 20 |X80). |
00002250: 20 DB 0D 20 20 20 20 20 20 20 20 20 20 20 20 2F | .. /|
00002260: 2A 59 45 53 2C 20 49 53 20 49 53 20 41 20 4E 4F |*YES, IS IS A NO|
00002270: 54 45 2D 4F 4E 20 53 54 41 54 55 53 20 42 59 54 |TE-ON STATUS BYT|
00002280: 45 3F 2A 2F 0D 20 20 20 20 20 20 20 20 20 20 20 |E?*/. |
00002290: 20 49 46 28 28 42 59 54 45 26 30 58 46 30 29 3D | IF((BYTE&0XF0)=|
000022A0: 3D 30 58 39 30 29 0D 20 20 20 20 20 20 20 20 20 |=0X90). |
000022B0: 20 20 20 20 20 DB 0D 20 20 20 20 20 20 20 20 20 | .. |
000022C0: 20 20 20 20 20 2F 2A 59 45 53 2C 20 57 41 49 54 | /*YES, WAIT|
000022D0: 20 46 4F 52 20 4E 4F 54 45 20 4E 55 4D 42 45 52 | FOR NOTE NUMBER|
000022E0: 20 42 59 54 45 2A 2F 0D 20 20 20 20 20 20 20 20 | BYTE*/. |
000022F0: 20 20 20 20 20 20 53 54 41 54 45 3D 32 3B 0D 20 | STATE=2;. |
00002300: 20 20 20 20 20 20 20 20 20 20 20 20 20 DD 0D 20 | .. |
00002310: 20 20 20 20 20 20 20 20 20 20 20 45 4C 53 45 0D | ELSE.|
00002320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 DB 0D | ..|
00002330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2F 2A | /*|
00002340: 4E 4F 2C 20 52 55 4E 4E 49 4E 47 20 53 54 41 54 |NO, RUNNING STAT|
00002350: 55 53 20 44 49 53 41 42 4C 45 44 20 2D 20 57 41 |US DISABLED - WA|
00002360: 49 54 20 46 4F 52 20 4E 4F 54 45 2D 4F 4E 20 53 |IT FOR NOTE-ON S|
00002370: 54 41 54 55 53 20 42 59 54 45 2A 2F 0D 20 20 20 |TATUS BYTE*/. |
00002380: 20 20 20 20 20 20 20 20 20 20 20 53 54 41 54 45 | STATE|
00002390: 3D 30 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 |=0;. |
000023A0: 20 20 DD 0D 20 20 20 20 20 20 20 20 20 20 20 20 | .. |
000023B0: 42 52 45 41 4B 3B 0D 20 20 20 20 20 20 20 20 20 |BREAK;. |
000023C0: 20 20 20 DD 0D 20 20 20 20 20 20 20 20 20 20 2F | .. /|
000023D0: 2A 4E 4F 54 20 41 20 53 54 41 54 55 53 20 42 59 |*NOT A STATUS BY|
000023E0: 54 45 20 2D 20 4D 55 53 54 20 42 45 20 41 20 4E |TE - MUST BE A N|
000023F0: 4F 54 45 20 4E 55 4D 42 45 52 20 42 59 54 45 20 |OTE NUMBER BYTE |
00002400: 2D 20 46 41 4C 4C 20 54 48 52 55 2A 2F 0D 20 20 |- FALL THRU*/. |
00002410: 20 20 20 20 20 20 20 20 DD 0D 0D 20 20 20 20 20 | ... |
00002420: 20 20 20 2F 2A 57 41 49 54 49 4E 47 20 46 4F 52 | /*WAITING FOR|
00002430: 20 4E 4F 54 45 20 4E 55 4D 42 45 52 20 42 59 54 | NOTE NUMBER BYT|
00002440: 45 2A 2F 0D 20 20 20 20 20 20 20 20 43 41 53 45 |E*/. CASE|
00002450: 20 32 3A 0D 20 20 20 20 20 20 20 20 20 20 DB 0D | 2:. ..|
00002460: 20 20 20 20 20 20 20 20 20 20 2F 2A 4E 4F 54 45 | /*NOTE|
00002470: 20 4E 55 4D 42 45 52 20 42 59 54 45 20 4F 43 43 | NUMBER BYTE OCC|
00002480: 55 52 52 45 44 20 2D 20 53 41 56 45 20 4E 4F 54 |URRED - SAVE NOT|
00002490: 45 2A 2F 0D 20 20 20 20 20 20 20 20 20 20 4E 4F |E*/. NO|
000024A0: 54 45 3D 20 42 59 54 45 3B 0D 20 20 20 20 20 20 |TE= BYTE;. |
000024B0: 20 20 20 20 2F 2A 57 41 49 54 20 46 4F 52 20 56 | /*WAIT FOR V|
000024C0: 45 4C 4F 43 49 54 59 20 42 59 54 45 2A 2F 0D 20 |ELOCITY BYTE*/. |
000024D0: 20 20 20 20 20 20 20 20 20 53 54 41 54 45 3D 33 | STATE=3|
000024E0: 3B 0D 20 20 20 20 20 20 20 20 20 20 42 52 45 41 |;. BREA|
000024F0: 4B 3B 0D 20 20 20 20 20 20 20 20 20 20 DD 0D 0D |K;. ...|
00002500: 20 20 20 20 20 20 20 20 2F 2A 57 41 49 54 49 4E | /*WAITIN|
00002510: 47 20 46 4F 52 20 56 45 4C 4F 43 49 54 59 20 42 |G FOR VELOCITY B|
00002520: 59 54 45 2A 2F 0D 20 20 20 20 20 20 20 20 43 41 |YTE*/. CA|
00002530: 53 45 20 33 3A 0D 20 20 20 20 20 20 20 20 20 20 |SE 3:. |
00002540: DB 0D 20 20 20 20 20 20 20 20 20 20 2F 2A 56 45 |.. /*VE|
00002550: 4C 4F 43 49 54 59 20 42 59 54 45 20 4F 43 43 55 |LOCITY BYTE OCCU|
00002560: 52 52 45 44 2A 2F 0D 20 20 20 20 20 20 20 20 20 |RRED*/. |
00002570: 20 2F 2A 49 46 20 54 48 49 53 20 57 41 53 20 4E | /*IF THIS WAS N|
00002580: 4F 54 45 2D 4F 46 46 2C 20 53 45 54 20 56 45 4C |OTE-OFF, SET VEL|
00002590: 4F 43 49 54 59 20 54 4F 20 5A 45 52 4F 2A 2F 0D |OCITY TO ZERO*/.|
000025A0: 20 20 20 20 20 20 20 20 20 20 49 46 28 4F 46 46 | IF(OFF|
000025B0: 29 0D 20 20 20 20 20 20 20 20 20 20 20 20 DB 0D |). ..|
000025C0: 20 20 20 20 20 20 20 20 20 20 20 20 42 59 54 45 | BYTE|
000025D0: 3D 30 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 |=0;. |
000025E0: 4F 46 46 2D 2D 3B 0D 20 20 20 20 20 20 20 20 20 |OFF--;. |
000025F0: 20 20 20 DD 0D 20 20 20 20 20 20 20 20 20 20 2F | .. /|
00002600: 2A 49 53 20 54 48 49 53 20 5A 45 52 4F 20 56 45 |*IS THIS ZERO VE|
00002610: 4C 4F 43 49 54 59 20 28 4D 45 41 4E 49 4E 47 20 |LOCITY (MEANING |
00002620: 4E 4F 54 45 2D 4F 46 46 29 3F 2A 2F 0D 20 20 20 |NOTE-OFF)?*/. |
00002630: 20 20 20 20 20 20 20 49 46 28 42 59 54 45 20 21 | IF(BYTE !|
00002640: 3D 20 30 29 0D 20 20 20 20 20 20 20 20 20 20 20 |= 0). |
00002650: 20 DB 0D 20 20 20 20 20 20 20 20 20 20 20 20 2F | .. /|
00002660: 2A 4E 4F 2C 20 49 54 20 57 41 53 20 4E 4F 54 45 |*NO, IT WAS NOTE|
00002670: 2D 4F 4E 3A 20 49 46 20 4E 45 58 54 20 41 56 41 |-ON: IF NEXT AVA|
00002680: 49 4C 20 56 4F 49 43 45 20 49 53 20 53 4F 55 4E |IL VOICE IS SOUN|
00002690: 44 49 4E 47 2C 20 53 54 4F 50 20 49 54 20 4E 4F |DING, STOP IT NO|
000026A0: 57 2A 2F 0D 20 20 20 20 20 20 20 20 20 20 20 20 |W*/. |
000026B0: 49 46 28 49 4E 55 53 45 5B 4E 45 58 54 56 4F 49 |IF(INUSE[NEXTVOI|
000026C0: 43 45 5D 29 0D 20 20 20 20 20 20 20 20 20 20 20 |CE]). |
000026D0: 20 20 20 DB 0D 20 20 20 20 20 20 20 20 20 20 20 | .. |
000026E0: 20 20 20 2A 28 56 4F 49 43 45 5B 4E 45 58 54 56 | *(VOICE[NEXTV|
000026F0: 4F 49 43 45 5D 2B 57 41 56 45 29 3D 30 58 34 30 |OICE]+WAVE)=0X40|
00002700: 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. |
00002710: 2F 2A 53 54 41 53 48 20 53 49 44 20 53 45 51 55 |/*STASH SID SEQU|
00002720: 45 4E 43 45 52 20 44 41 54 41 20 49 46 20 42 55 |ENCER DATA IF BU|
00002730: 46 46 45 52 20 4E 4F 54 20 46 55 4C 4C 2A 2F 0D |FFER NOT FULL*/.|
00002740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 46 | IF|
00002750: 28 46 49 4C 4C 43 4F 55 4E 54 21 3D 33 32 29 0D |(FILLCOUNT!=32).|
00002760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002770: DB 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |.. |
00002780: 20 20 2A 53 49 44 42 55 46 50 54 52 2B 2B 20 3D | *SIDBUFPTR++ =|
00002790: 20 28 4E 45 58 54 56 4F 49 43 45 3C 3C 34 29 DF | (NEXTVOICE<<4).|
000027A0: 30 58 38 30 DF 28 28 28 4D 49 44 49 43 4C 4F 43 |0X80.(((MIDICLOC|
000027B0: 4B 29 3E 3E 38 29 26 30 58 46 29 3B 0D 20 20 20 |K)>>8)&0XF);. |
000027C0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2A 53 49 | *SI|
000027D0: 44 42 55 46 50 54 52 2B 2B 20 3D 20 28 4D 49 44 |DBUFPTR++ = (MID|
000027E0: 49 43 4C 4F 43 4B 29 20 26 20 30 58 46 46 3B 0D |ICLOCK) & 0XFF;.|
000027F0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002800: DD 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |.. |
00002810: DD 0D 0D 20 20 20 20 20 20 20 20 20 20 20 20 2F |... /|
00002820: 2A 53 4F 55 4E 44 20 54 48 45 20 4E 4F 54 45 20 |*SOUND THE NOTE |
00002830: 4F 4E 20 4E 45 58 54 20 41 56 41 49 4C 20 D3 C9 |ON NEXT AVAIL ..|
00002840: C4 20 56 4F 49 43 45 2A 2F 0D 20 20 20 20 20 20 |. VOICE*/. |
00002850: 20 20 20 20 20 20 2A 28 28 55 4E 53 49 47 4E 45 | *((UNSIGNE|
00002860: 44 20 2A 29 28 56 4F 49 43 45 5B 4E 45 58 54 56 |D *)(VOICE[NEXTV|
00002870: 4F 49 43 45 5D 2B 46 52 45 51 57 44 29 29 3D 46 |OICE]+FREQWD))=F|
00002880: 52 45 51 5B 4E 4F 54 45 5D 3B 0D 20 20 20 20 20 |REQ[NOTE];. |
00002890: 20 20 20 20 20 20 20 2A 28 56 4F 49 43 45 5B 4E | *(VOICE[N|
000028A0: 45 58 54 56 4F 49 43 45 5D 2B 57 41 56 45 29 3D |EXTVOICE]+WAVE)=|
000028B0: 30 58 34 31 3B 0D 0D 20 20 20 20 20 20 20 20 20 |0X41;.. |
000028C0: 20 20 20 2F 2A 4D 41 52 4B 20 56 4F 49 43 45 20 | /*MARK VOICE |
000028D0: 41 53 20 49 4E 20 55 53 45 2A 2F 0D 20 20 20 20 |AS IN USE*/. |
000028E0: 20 20 20 20 20 20 20 20 49 4E 55 53 45 5B 4E 45 | INUSE[NE|
000028F0: 58 54 56 4F 49 43 45 5D 3D 4E 4F 54 45 3B 0D 0D |XTVOICE]=NOTE;..|
00002900: 20 20 20 20 20 20 20 20 20 20 20 20 2F 2A 53 54 | /*ST|
00002910: 41 53 48 20 53 49 44 20 53 45 51 55 45 4E 43 45 |ASH SID SEQUENCE|
00002920: 52 20 44 41 54 41 20 49 46 20 42 55 46 46 45 52 |R DATA IF BUFFER|
00002930: 20 4E 4F 54 20 46 55 4C 4C 2A 2F 0D 20 20 20 20 | NOT FULL*/. |
00002940: 20 20 20 20 20 20 20 20 49 46 28 46 49 4C 4C 43 | IF(FILLC|
00002950: 4F 55 4E 54 21 3D 33 32 29 0D 20 20 20 20 20 20 |OUNT!=32). |
00002960: 20 20 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 | .. |
00002970: 20 20 20 20 20 20 20 20 2A 53 49 44 42 55 46 50 | *SIDBUFP|
00002980: 54 52 2B 2B 20 3D 20 28 4E 45 58 54 56 4F 49 43 |TR++ = (NEXTVOIC|
00002990: 45 3C 3C 34 29 DF 28 28 4D 49 44 49 43 4C 4F 43 |E<<4).((MIDICLOC|
000029A0: 4B 3E 3E 38 29 26 30 58 46 29 3B 0D 20 20 20 20 |K>>8)&0XF);. |
000029B0: 20 20 20 20 20 20 20 20 20 20 2A 53 49 44 42 55 | *SIDBU|
000029C0: 46 50 54 52 2B 2B 20 3D 20 4D 49 44 49 43 4C 4F |FPTR++ = MIDICLO|
000029D0: 43 4B 20 26 20 30 58 46 46 3B 0D 20 20 20 20 20 |CK & 0XFF;. |
000029E0: 20 20 20 20 20 20 20 20 20 2A 53 49 44 42 55 46 | *SIDBUF|
000029F0: 50 54 52 2B 2B 20 3D 20 4E 4F 54 45 3B 0D 20 20 |PTR++ = NOTE;. |
00002A00: 20 20 20 20 20 20 20 20 20 20 20 20 DD 0D 0D 20 | ... |
00002A10: 20 20 20 20 20 20 20 20 20 20 20 2F 2A 46 49 4E | /*FIN|
00002A20: 44 20 4E 45 58 54 20 41 56 41 49 4C 20 56 4F 49 |D NEXT AVAIL VOI|
00002A30: 43 45 20 28 56 4F 49 43 45 20 CE D6 CF C9 C3 C5 |CE (VOICE ......|
00002A40: D3 20 49 53 20 41 20 44 55 4D 4D 59 20 54 4F 20 |. IS A DUMMY TO |
00002A50: 43 41 54 43 48 2A 2F 0D 20 20 20 20 20 20 20 20 |CATCH*/. |
00002A60: 20 20 20 20 2F 2A 45 58 43 45 53 53 20 50 4F 4C | /*EXCESS POL|
00002A70: 59 50 48 4F 4E 49 43 20 4E 4F 54 45 53 20 50 4C |YPHONIC NOTES PL|
00002A80: 41 59 45 44 2A 2F 0D 20 20 20 20 20 20 20 20 20 |AYED*/. |
00002A90: 20 20 20 49 46 28 50 4F 4C 59 50 48 4F 4E 59 29 | IF(POLYPHONY)|
00002AA0: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 DB |. .|
00002AB0: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4E |. N|
00002AC0: 45 58 54 56 4F 49 43 45 3D 28 4E 45 58 54 56 4F |EXTVOICE=(NEXTVO|
00002AD0: 49 43 45 2B 31 29 25 CE D6 CF C9 C3 C5 D3 3B 0D |ICE+1)%.......;.|
00002AE0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 DD 0D | ..|
00002AF0: 20 20 20 20 20 20 20 20 20 20 20 20 45 4C 53 45 | ELSE|
00002B00: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 DB |. .|
00002B10: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4E |. N|
00002B20: 45 58 54 56 4F 49 43 45 3D 30 3B 0D 20 20 20 20 |EXTVOICE=0;. |
00002B30: 20 20 20 20 20 20 20 20 20 20 DD 0D 20 20 20 20 | .. |
00002B40: 20 20 20 20 20 20 20 20 42 45 53 54 4E 45 58 54 | BESTNEXT|
00002B50: 3D 4E 45 58 54 56 4F 49 43 45 3B 0D 20 20 20 20 |=NEXTVOICE;. |
00002B60: 20 20 20 20 20 20 20 20 49 4E 55 53 45 5B CE D6 | INUSE[..|
00002B70: CF C9 C3 C5 D3 5D 3D 30 3B 0D 20 20 20 20 20 20 |.....]=0;. |
00002B80: 20 20 20 20 20 20 57 48 49 4C 45 28 49 4E 55 53 | WHILE(INUS|
00002B90: 45 5B 4E 45 58 54 56 4F 49 43 45 5D 29 0D 20 20 |E[NEXTVOICE]). |
00002BA0: 20 20 20 20 20 20 20 20 20 20 20 20 DB 0D 20 20 | .. |
00002BB0: 20 20 20 20 20 20 20 20 20 20 20 20 4E 45 58 54 | NEXT|
00002BC0: 56 4F 49 43 45 2B 2B 3B 0D 20 20 20 20 20 20 20 |VOICE++;. |
00002BD0: 20 20 20 20 20 20 20 DD 0D 20 20 20 20 20 20 20 | .. |
00002BE0: 20 20 20 20 20 49 46 28 4E 45 58 54 56 4F 49 43 | IF(NEXTVOIC|
00002BF0: 45 3D 3D CE D6 CF C9 C3 C5 D3 20 26 26 20 50 4F |E==....... && PO|
00002C00: 4C 59 50 48 4F 4E 59 29 0D 20 20 20 20 20 20 20 |LYPHONY). |
00002C10: 20 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 20 | .. |
00002C20: 20 20 20 20 20 20 20 4E 45 58 54 56 4F 49 43 45 | NEXTVOICE|
00002C30: 3D 30 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 |=0;. |
00002C40: 20 20 57 48 49 4C 45 28 49 4E 55 53 45 5B 4E 45 | WHILE(INUSE[NE|
00002C50: 58 54 56 4F 49 43 45 5D 29 0D 20 20 20 20 20 20 |XTVOICE]). |
00002C60: 20 20 20 20 20 20 20 20 20 20 DB 0D 20 20 20 20 | .. |
00002C70: 20 20 20 20 20 20 20 20 20 20 20 20 4E 45 58 54 | NEXT|
00002C80: 56 4F 49 43 45 2B 2B 3B 0D 20 20 20 20 20 20 20 |VOICE++;. |
00002C90: 20 20 20 20 20 20 20 20 20 DD 0D 20 20 20 20 20 | .. |
00002CA0: 20 20 20 20 20 20 20 20 20 DD 0D 0D 20 20 20 20 | ... |
00002CB0: 20 20 20 20 20 20 20 20 49 46 28 4E 45 58 54 56 | IF(NEXTV|
00002CC0: 4F 49 43 45 3D 3D CE D6 CF C9 C3 C5 D3 29 0D 20 |OICE==.......). |
00002CD0: 20 20 20 20 20 20 20 20 20 20 20 20 20 DB 0D 20 | .. |
00002CE0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4E 45 58 | NEX|
00002CF0: 54 56 4F 49 43 45 3D 42 45 53 54 4E 45 58 54 3B |TVOICE=BESTNEXT;|
00002D00: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 DD |. .|
00002D10: 0D 20 20 20 20 20 20 20 20 20 20 20 20 45 4C 53 |. ELS|
00002D20: 45 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |E. |
00002D30: DB 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |.. |
00002D40: 42 45 53 54 4E 45 58 54 3D CE D6 CF C9 C3 C5 D3 |BESTNEXT=.......|
00002D50: 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. |
00002D60: DD 0D 0D 20 20 20 20 20 20 20 20 20 20 20 20 2F |... /|
00002D70: 2A 45 4E 44 20 50 52 4F 43 45 53 53 49 4E 47 20 |*END PROCESSING |
00002D80: 4F 46 20 4E 4F 54 45 2D 4F 4E 20 45 56 45 4E 54 |OF NOTE-ON EVENT|
00002D90: 2A 2F 0D 20 20 20 20 20 20 20 20 20 20 20 20 DD |*/. .|
00002DA0: 0D 20 20 20 20 20 20 20 20 20 20 45 4C 53 45 0D |. ELSE.|
00002DB0: 20 20 20 20 20 20 20 20 20 20 20 20 DB 0D 20 20 | .. |
00002DC0: 20 20 20 20 20 20 20 20 20 20 2F 2A 59 45 53 2C | /*YES,|
00002DD0: 20 49 54 20 57 41 53 20 41 20 4E 4F 54 45 2D 4F | IT WAS A NOTE-O|
00002DE0: 46 46 20 2D 20 46 49 4E 44 20 57 48 49 43 48 20 |FF - FIND WHICH |
00002DF0: 56 4F 49 43 45 20 57 41 53 20 50 4C 41 59 49 4E |VOICE WAS PLAYIN|
00002E00: 47 20 54 48 49 53 20 4E 4F 54 45 2A 2F 0D 20 20 |G THIS NOTE*/. |
00002E10: 20 20 20 20 20 20 20 20 20 20 46 4F 52 28 49 3D | FOR(I=|
00002E20: 30 3B 49 3C CE D6 CF C9 C3 C5 D3 3B 49 2B 2B 29 |0;I<.......;I++)|
00002E30: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 DB |. .|
00002E40: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2F |. /|
00002E50: 2A 44 4F 45 53 20 54 48 49 53 20 56 4F 49 43 45 |*DOES THIS VOICE|
00002E60: 20 48 41 56 45 20 4D 41 54 43 48 49 4E 47 20 4E | HAVE MATCHING N|
00002E70: 4F 54 45 3F 2A 2F 0D 20 20 20 20 20 20 20 20 20 |OTE?*/. |
00002E80: 20 20 20 20 20 49 46 28 49 4E 55 53 45 5B 49 5D | IF(INUSE[I]|
00002E90: 3D 3D 4E 4F 54 45 29 0D 20 20 20 20 20 20 20 20 |==NOTE). |
00002EA0: 20 20 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 | .. |
00002EB0: 20 20 20 20 20 20 20 20 20 20 2F 2A 59 45 53 20 | /*YES |
00002EC0: 2D 20 46 4F 55 4E 44 2C 20 54 55 52 4E 20 4F 46 |- FOUND, TURN OF|
00002ED0: 46 20 53 4F 55 4E 44 20 4F 4E 20 54 48 49 53 20 |F SOUND ON THIS |
00002EE0: D3 C9 C4 20 56 4F 49 43 45 2A 2F 0D 20 20 20 20 |... VOICE*/. |
00002EF0: 20 20 20 20 20 20 20 20 20 20 20 20 2A 28 56 4F | *(VO|
00002F00: 49 43 45 5B 49 5D 2B 57 41 56 45 29 3D 30 58 34 |ICE[I]+WAVE)=0X4|
00002F10: 30 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 |0;. |
00002F20: 20 20 20 49 4E 55 53 45 5B 49 5D 3D 30 3B 0D 0D | INUSE[I]=0;..|
00002F30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002F40: 2F 2A 53 54 41 53 48 20 53 49 44 20 53 45 51 55 |/*STASH SID SEQU|
00002F50: 45 4E 43 45 52 20 44 41 54 41 20 49 46 20 42 55 |ENCER DATA IF BU|
00002F60: 46 46 45 52 20 4E 4F 54 20 46 55 4C 4C 2A 2F 0D |FFER NOT FULL*/.|
00002F70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002F80: 49 46 28 46 49 4C 4C 43 4F 55 4E 54 21 3D 33 32 |IF(FILLCOUNT!=32|
00002F90: 29 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |). |
00002FA0: 20 20 20 20 DB 0D 20 20 20 20 20 20 20 20 20 20 | .. |
00002FB0: 20 20 20 20 20 20 20 20 2A 53 49 44 42 55 46 50 | *SIDBUFP|
00002FC0: 54 52 2B 2B 20 3D 20 28 49 3C 3C 34 29 DF 30 58 |TR++ = (I<<4).0X|
00002FD0: 38 30 DF 28 28 4D 49 44 49 43 4C 4F 43 4B 3E 3E |80.((MIDICLOCK>>|
00002FE0: 38 29 26 30 58 46 29 3B 0D 20 20 20 20 20 20 20 |8)&0XF);. |
00002FF0: 20 20 20 20 20 20 20 20 20 20 20 2A 53 49 44 42 | *SIDB|
00003000: 55 46 50 54 52 2B 2B 20 3D 20 4D 49 44 49 43 4C |UFPTR++ = MIDICL|
00003010: 4F 43 4B 20 26 20 30 58 46 46 3B 0D 20 20 20 20 |OCK & 0XFF;. |
00003020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 DD 0D | ..|
00003030: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00003040: 20 2F 2A 4D 41 4B 45 20 56 4F 49 43 45 20 41 56 | /*MAKE VOICE AV|
00003050: 41 49 4C 41 42 4C 45 20 46 4F 52 20 52 45 2D 55 |AILABLE FOR RE-U|
00003060: 53 45 20 49 46 20 4E 4F 4E 45 20 57 45 52 45 20 |SE IF NONE WERE |
00003070: 41 56 41 49 4C 41 42 4C 45 2A 2F 0D 20 20 20 20 |AVAILABLE*/. |
00003080: 20 20 20 20 20 20 20 20 20 20 20 20 49 46 28 42 | IF(B|
00003090: 45 53 54 4E 45 58 54 21 3D CE D6 CF C9 C3 C5 D3 |ESTNEXT!=.......|
000030A0: 29 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |). |
000030B0: 20 20 20 20 DB 0D 20 20 20 20 20 20 20 20 20 20 | .. |
000030C0: 20 20 20 20 20 20 20 20 4E 45 58 54 56 4F 49 43 | NEXTVOIC|
000030D0: 45 3D 49 3B 0D 20 20 20 20 20 20 20 20 20 20 20 |E=I;. |
000030E0: 20 20 20 20 20 20 20 42 45 53 54 4E 45 58 54 3D | BESTNEXT=|
000030F0: CE D6 CF C9 C3 C5 D3 3B 0D 20 20 20 20 20 20 20 |.......;. |
00003100: 20 20 20 20 20 20 20 20 20 20 20 DD 0D 20 20 20 | .. |
00003110: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4C 53 | ELS|
00003120: 45 20 49 46 28 21 50 4F 4C 59 50 48 4F 4E 59 29 |E IF(!POLYPHONY)|
00003130: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00003140: 20 20 20 DB 0D 20 20 20 20 20 20 20 20 20 20 20 | .. |
00003150: 20 20 20 20 20 20 20 49 46 28 49 3C 4E 45 58 54 | IF(I<NEXT|
00003160: 56 4F 49 43 45 29 4E 45 58 54 56 4F 49 43 45 3D |VOICE)NEXTVOICE=|
00003170: 49 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 |I;. |
00003180: 20 20 20 20 20 DD 0D 0D 20 20 20 20 20 20 20 20 | ... |
00003190: 20 20 20 20 20 20 20 20 2F 2A 53 54 4F 50 20 53 | /*STOP S|
000031A0: 45 41 52 43 48 49 4E 47 2A 2F 0D 20 20 20 20 20 |EARCHING*/. |
000031B0: 20 20 20 20 20 20 20 20 20 20 20 42 52 45 41 4B | BREAK|
000031C0: 3B 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. |
000031D0: 20 20 DD 0D 20 20 20 20 20 20 20 20 20 20 20 20 | .. |
000031E0: 20 20 DD 0D 20 20 20 20 20 20 20 20 20 20 20 20 | .. |
000031F0: 2F 2A 45 4E 44 20 50 52 4F 43 45 53 53 49 4E 47 |/*END PROCESSING|
00003200: 20 4F 46 20 4E 4F 54 45 2D 4F 46 46 20 45 56 45 | OF NOTE-OFF EVE|
00003210: 4E 54 2A 2F 0D 20 20 20 20 20 20 20 20 20 20 20 |NT*/. |
00003220: 20 DD 0D 0D 20 20 20 20 20 20 20 20 20 20 2F 2A | ... /*|
00003230: 50 52 4F 56 49 44 45 20 56 49 53 55 41 4C 20 46 |PROVIDE VISUAL F|
00003240: 45 45 44 42 41 43 4B 20 54 4F 20 55 53 45 52 2A |EEDBACK TO USER*|
00003250: 2F 0D 20 20 20 20 20 20 20 20 20 20 41 43 54 49 |/. ACTI|
00003260: 56 45 43 4F 4C 4F 52 2B 2B 3B 0D 0D 20 20 20 20 |VECOLOR++;.. |
00003270: 20 20 20 20 20 20 2F 2A 4E 4F 57 2C 20 47 4F 20 | /*NOW, GO |
00003280: 57 41 49 54 20 46 4F 52 20 4E 4F 54 45 2D 4F 4E |WAIT FOR NOTE-ON|
00003290: 20 53 54 41 54 55 53 20 42 59 54 45 20 4F 52 20 | STATUS BYTE OR |
000032A0: 41 4E 4F 54 48 45 52 20 4E 4F 54 45 20 4E 55 4D |ANOTHER NOTE NUM|
000032B0: 42 45 52 20 42 59 54 45 2A 2F 0D 20 20 20 20 20 |BER BYTE*/. |
000032C0: 20 20 20 20 20 53 54 41 54 45 3D 31 3B 0D 20 20 | STATE=1;. |
000032D0: 20 20 20 20 20 20 20 20 42 52 45 41 4B 3B 0D 20 | BREAK;. |
000032E0: 20 20 20 20 20 20 20 20 20 DD 0D 20 20 20 20 20 | .. |
000032F0: 20 20 20 2F 2A 45 4E 44 20 50 52 4F 43 45 53 53 | /*END PROCESS|
00003300: 49 4E 47 20 4F 46 20 4E 4F 4E 20 52 45 41 4C 2D |ING OF NON REAL-|
00003310: 54 49 4D 45 20 4D 45 53 53 41 47 45 53 2A 2F 0D |TIME MESSAGES*/.|
00003320: 20 20 20 20 20 20 20 20 DD 0D 20 20 20 20 20 20 | .. |
00003330: 45 4C 53 45 0D 20 20 20 20 20 20 20 20 DB 0D 20 |ELSE. .. |
00003340: 20 20 20 20 20 20 20 2F 2A 52 45 41 4C 2D 54 49 | /*REAL-TI|
00003350: 4D 45 20 4D 45 53 53 41 47 45 2A 2F 0D 20 20 20 |ME MESSAGE*/. |
00003360: 20 20 20 20 20 2F 2A 57 48 49 43 48 20 4B 49 4E | /*WHICH KIN|
00003370: 44 3F 2A 2F 0D 20 20 20 20 20 20 20 20 49 46 28 |D?*/. IF(|
00003380: 42 59 54 45 3D 3D 30 58 46 41 29 0D 20 20 20 20 |BYTE==0XFA). |
00003390: 20 20 20 20 20 20 DB 0D 20 20 20 20 20 20 20 20 | .. |
000033A0: 20 20 2F 2A 53 54 41 52 54 20 4D 45 53 53 41 47 | /*START MESSAG|
000033B0: 45 20 46 52 4F 4D 20 CD C9 C4 C9 20 53 54 52 45 |E FROM .... STRE|
000033C0: 41 4D 20 4F 52 20 C6 31 20 4B 45 59 2A 2F 0D 20 |AM OR .1 KEY*/. |
000033D0: 20 20 20 20 20 20 20 20 20 53 49 44 42 55 46 50 | SIDBUFP|
000033E0: 54 52 3D 53 49 44 42 55 46 46 45 52 3B 20 2F 2A |TR=SIDBUFFER; /*|
000033F0: 52 45 53 45 54 20 53 45 51 55 45 4E 43 45 20 42 |RESET SEQUENCE B|
00003400: 55 46 46 45 52 2A 2F 0D 20 20 20 20 20 20 20 20 |UFFER*/. |
00003410: 20 20 46 49 4C 4C 43 4F 55 4E 54 3D 30 3B 0D 0D | FILLCOUNT=0;..|
00003420: 20 20 20 20 20 20 20 20 20 20 2F 2A 4D 41 52 4B | /*MARK|
00003430: 20 42 55 46 46 45 52 20 45 4D 50 54 59 20 4F 4E | BUFFER EMPTY ON|
00003440: 20 42 55 46 46 45 52 20 4D 45 54 45 52 20 28 47 | BUFFER METER (G|
00003450: 52 45 45 4E 20 49 53 20 45 4D 50 54 59 20 43 4F |REEN IS EMPTY CO|
00003460: 4C 4F 52 29 2A 2F 0D 20 20 20 20 20 20 20 20 20 |LOR)*/. |
00003470: 20 46 4F 52 28 49 3D 30 3B 49 3C 33 32 3B 49 2B | FOR(I=0;I<32;I+|
00003480: 2B 29 0D 20 20 20 20 20 20 20 20 20 20 20 20 DB |+). .|
00003490: 0D 20 20 20 20 20 20 20 20 20 20 20 20 42 55 46 |. BUF|
000034A0: 46 45 52 43 4F 4C 4F 52 5B 49 5D 3D C7 D2 C5 C5 |FERCOLOR[I]=....|
000034B0: CE A4 D6 C1 CC D5 C5 3B 0D 20 20 20 20 20 20 20 |.......;. |
000034C0: 20 20 20 20 20 DD 0D 0D 20 20 20 20 20 20 20 20 | ... |
000034D0: 20 20 2F 2A 45 58 54 49 4E 47 55 49 53 48 20 D3 | /*EXTINGUISH .|
000034E0: D4 CF D0 2C 20 4C 49 47 48 54 20 D3 D4 C1 D2 D4 |..., LIGHT .....|
000034F0: 2A 2F 0D 20 20 20 20 20 20 20 20 20 20 46 4F 52 |*/. FOR|
00003500: 28 49 3D 30 3B 49 3C 34 3B 49 2B 2B 29 53 54 4F |(I=0;I<4;I++)STO|
00003510: 50 43 4F 4C 4F 52 5B 49 5D 3D C2 CC C1 C3 CB A4 |PCOLOR[I]=......|
00003520: D6 C1 CC D5 C5 3B 0D 20 20 20 20 20 20 20 20 20 |.....;. |
00003530: 20 46 4F 52 28 49 3D 30 3B 49 3C 35 3B 49 2B 2B | FOR(I=0;I<5;I++|
00003540: 29 53 54 41 52 54 43 4F 4C 4F 52 5B 49 5D 3D C7 |)STARTCOLOR[I]=.|
00003550: D2 C5 C5 CE A4 D6 C1 CC D5 C5 3B 0D 20 20 20 20 |..........;. |
00003560: 20 20 20 20 20 20 DD 0D 20 20 20 20 20 20 20 20 | .. |
00003570: 45 4C 53 45 20 49 46 28 42 59 54 45 3D 3D 30 58 |ELSE IF(BYTE==0X|
00003580: 46 38 29 0D 20 20 20 20 20 20 20 20 20 20 DB 0D |F8). ..|
00003590: 20 20 20 20 20 20 20 20 20 20 2F 2A CD C9 C4 C9 | /*....|
000035A0: 20 43 4C 4F 43 4B 20 46 52 4F 4D 20 CD C9 C4 C9 | CLOCK FROM ....|
000035B0: 20 53 54 52 45 41 4D 20 4F 52 20 4A 49 46 46 59 | STREAM OR JIFFY|
000035C0: 20 43 4C 4F 43 4B 2A 2F 0D 20 20 20 20 20 20 20 | CLOCK*/. |
000035D0: 20 20 20 4D 49 44 49 43 4C 4F 43 4B 2B 2B 3B 0D | MIDICLOCK++;.|
000035E0: 20 20 20 20 20 20 20 20 20 20 DD 0D 20 20 20 20 | .. |
000035F0: 20 20 20 20 45 4C 53 45 20 49 46 28 42 59 54 45 | ELSE IF(BYTE|
00003600: 3D 3D 30 58 46 43 29 0D 20 20 20 20 20 20 20 20 |==0XFC). |
00003610: 20 20 DB 0D 20 20 20 20 20 20 20 20 20 20 2F 2A | .. /*|
00003620: 53 54 4F 50 20 4D 45 53 53 41 47 45 20 46 52 4F |STOP MESSAGE FRO|
00003630: 4D 20 CD C9 C4 C9 20 53 54 52 45 41 4D 20 4F 52 |M .... STREAM OR|
00003640: 20 C6 37 20 4B 45 59 2A 2F 0D 20 20 20 20 20 20 | .7 KEY*/. |
00003650: 20 20 20 20 2F 2A 45 58 54 49 4E 47 55 49 53 48 | /*EXTINGUISH|
00003660: 20 D3 D4 C1 D2 D4 2C 20 4C 49 47 48 54 20 D3 D4 | ....., LIGHT ..|
00003670: CF D0 2A 2F 0D 20 20 20 20 20 20 20 20 20 20 46 |..*/. F|
00003680: 4F 52 28 49 3D 30 3B 49 3C 34 3B 49 2B 2B 29 53 |OR(I=0;I<4;I++)S|
00003690: 54 4F 50 43 4F 4C 4F 52 5B 49 5D 3D D2 C5 C4 A4 |TOPCOLOR[I]=....|
000036A0: D6 C1 CC D5 C5 3B 0D 20 20 20 20 20 20 20 20 20 |.....;. |
000036B0: 20 46 4F 52 28 49 3D 30 3B 49 3C 35 3B 49 2B 2B | FOR(I=0;I<5;I++|
000036C0: 29 53 54 41 52 54 43 4F 4C 4F 52 5B 49 5D 3D C2 |)STARTCOLOR[I]=.|
000036D0: CC C1 C3 CB A4 D6 C1 CC D5 C5 3B 0D 0D 20 20 20 |..........;.. |
000036E0: 20 20 20 20 20 20 20 2F 2A 47 4F 20 53 41 56 45 | /*GO SAVE|
000036F0: 20 53 45 51 55 45 4E 43 45 20 49 46 20 53 54 41 | SEQUENCE IF STA|
00003700: 52 54 2F 53 54 4F 50 20 50 52 45 53 53 45 44 20 |RT/STOP PRESSED |
00003710: 57 49 54 48 20 4E 4F 20 4E 4F 54 45 53 20 49 4E |WITH NO NOTES IN|
00003720: 20 42 45 54 57 45 45 4E 2A 2F 0D 20 20 20 20 20 | BETWEEN*/. |
00003730: 20 20 20 20 20 53 41 56 45 53 49 44 28 29 3B 0D | SAVESID();.|
00003740: 20 20 20 20 20 20 20 20 20 20 DD 0D 20 20 20 20 | .. |
00003750: 20 20 20 20 2F 2A 45 4E 44 20 41 4E 41 4C 59 53 | /*END ANALYS|
00003760: 49 53 20 4F 46 20 54 48 49 53 20 CD C9 C4 C9 20 |IS OF THIS .... |
00003770: 42 59 54 45 2A 2F 0D 20 20 20 20 20 20 20 20 DD |BYTE*/. .|
00003780: 0D 0D 20 20 20 20 20 20 2F 2A 54 52 41 43 4B 20 |.. /*TRACK |
00003790: CD C9 C4 C9 20 45 56 45 4E 54 53 20 41 52 4F 55 |.... EVENTS AROU|
000037A0: 4E 44 20 43 49 52 43 55 4C 41 52 20 42 55 46 46 |ND CIRCULAR BUFF|
000037B0: 45 52 2A 2F 0D 20 20 20 20 20 20 49 46 28 2B 2B |ER*/. IF(++|
000037C0: 4F 55 54 50 54 52 3D 3D 28 42 55 46 46 45 52 2B |OUTPTR==(BUFFER+|
000037D0: 31 30 30 29 29 20 4F 55 54 50 54 52 3D 42 55 46 |100)) OUTPTR=BUF|
000037E0: 46 45 52 3B 0D 20 20 20 20 20 20 DD 0D 20 20 20 |FER;. .. |
000037F0: 20 45 4C 53 45 0D 20 20 20 20 20 20 DB 0D 20 20 | ELSE. .. |
00003800: 20 20 20 20 2F 2A 4E 4F 20 4E 45 57 20 CD C9 C4 | /*NO NEW ...|
00003810: C9 20 45 56 45 4E 54 53 20 49 4E 20 42 55 46 46 |. EVENTS IN BUFF|
00003820: 45 52 20 52 49 47 48 54 20 4E 4F 57 20 2D 20 49 |ER RIGHT NOW - I|
00003830: 44 4C 45 2A 2F 0D 20 20 20 20 20 20 2F 2A 43 48 |DLE*/. /*CH|
00003840: 45 43 4B 20 46 4F 52 20 52 55 4E 2F 53 54 4F 50 |ECK FOR RUN/STOP|
00003850: 20 4B 45 59 2A 2F 0D 20 20 20 20 20 20 49 46 28 | KEY*/. IF(|
00003860: 43 55 52 52 45 4E 54 A4 4B 45 59 3D 3D D2 D5 CE |CURRENT.KEY==...|
00003870: A4 D3 D4 CF D0 A4 CB C5 D9 29 0D 20 20 20 20 20 |.........). |
00003880: 20 20 20 DB 0D 20 20 20 20 20 20 20 20 2F 2A 52 | .. /*R|
00003890: 45 53 45 54 20 49 4E 54 45 52 46 41 43 45 2A 2F |ESET INTERFACE*/|
000038A0: 0D 20 20 20 20 20 20 20 20 2A 28 4D 49 44 49 50 |. *(MIDIP|
000038B0: 41 52 41 4D 53 2E 43 4F 4E 54 52 4F 4C 29 3D 4D |ARAMS.CONTROL)=M|
000038C0: 49 44 49 50 41 52 41 4D 53 2E 52 45 53 45 54 3B |IDIPARAMS.RESET;|
000038D0: 0D 0D 20 20 20 20 20 20 20 20 2F 2A 43 4F 4C 44 |.. /*COLD|
000038E0: 20 53 54 41 52 54 20 C3 36 34 2A 2F 0D 20 20 20 | START .64*/. |
000038F0: 20 20 20 20 20 53 59 53 28 D2 C5 D3 C5 D4 29 3B | SYS(.....);|
00003900: 0D 20 20 20 20 20 20 20 20 DD 0D 0D 20 20 20 20 |. ... |
00003910: 20 20 2F 2A 43 48 45 43 4B 20 46 55 4C 4C 4E 45 | /*CHECK FULLNE|
00003920: 53 53 20 4F 46 20 42 55 46 46 45 52 2A 2F 0D 20 |SS OF BUFFER*/. |
00003930: 20 20 20 20 20 49 46 28 28 28 28 53 49 44 42 55 | IF((((SIDBU|
00003940: 46 50 54 52 2D 53 49 44 42 55 46 46 45 52 29 3E |FPTR-SIDBUFFER)>|
00003950: 3E 31 30 29 26 30 58 33 46 29 20 21 3D 20 46 49 |>10)&0X3F) != FI|
00003960: 4C 4C 43 4F 55 4E 54 29 0D 20 20 20 20 20 20 20 |LLCOUNT). |
00003970: 20 DB 0D 20 20 20 20 20 20 20 20 2F 2A 42 55 46 | .. /*BUF|
00003980: 46 45 52 20 47 4F 54 20 31 CB 20 4D 4F 52 45 20 |FER GOT 1. MORE |
00003990: 46 55 4C 4C 2A 2F 0D 20 20 20 20 20 20 20 20 2F |FULL*/. /|
000039A0: 2A 43 48 41 4E 47 45 20 54 48 45 20 4E 45 58 54 |*CHANGE THE NEXT|
000039B0: 20 33 32 4E 44 20 4F 46 20 42 55 46 46 45 52 20 | 32ND OF BUFFER |
000039C0: 4D 45 54 45 52 20 54 4F 20 52 45 44 2A 2F 0D 20 |METER TO RED*/. |
000039D0: 20 20 20 20 20 20 20 42 55 46 46 45 52 43 4F 4C | BUFFERCOL|
000039E0: 4F 52 5B 46 49 4C 4C 43 4F 55 4E 54 5D 3D D2 C5 |OR[FILLCOUNT]=..|
000039F0: C4 A4 D6 C1 CC D5 C5 3B 0D 0D 20 20 20 20 20 20 |.......;.. |
00003A00: 20 20 2F 2A 4B 45 45 50 20 54 52 41 43 4B 20 4F | /*KEEP TRACK O|
00003A10: 46 20 48 4F 57 20 46 55 4C 4C 20 42 55 46 46 45 |F HOW FULL BUFFE|
00003A20: 52 20 49 53 2A 2F 0D 20 20 20 20 20 20 20 20 2F |R IS*/. /|
00003A30: 2A 49 46 20 46 49 4C 4C 43 4F 55 4E 54 20 49 53 |*IF FILLCOUNT IS|
00003A40: 20 33 32 2C 20 42 55 46 46 45 52 20 49 53 20 43 | 32, BUFFER IS C|
00003A50: 4F 4E 53 49 44 45 52 45 44 20 46 55 4C 4C 20 28 |ONSIDERED FULL (|
00003A60: 33 32 37 36 38 20 4F 52 20 4D 4F 52 45 29 2A 2F |32768 OR MORE)*/|
00003A70: 0D 20 20 20 20 20 20 20 20 46 49 4C 4C 43 4F 55 |. FILLCOU|
00003A80: 4E 54 2B 2B 3B 0D 20 20 20 20 20 20 20 20 DD 0D |NT++;. ..|
00003A90: 20 20 20 20 20 20 DD 0D 20 20 20 20 DD 0D 20 20 | .. .. |
00003AA0: 2F 2A 45 4E 44 20 4F 46 20 4D 41 49 4E 20 50 52 |/*END OF MAIN PR|
00003AB0: 4F 47 52 41 4D 20 CD C9 C4 C9 2D D3 C9 C4 2D D3 |OGRAM ....-...-.|
00003AC0: C5 D1 2A 2F 0D 20 20 DD 0D 0D 2F 2A 46 55 4E 43 |..*/. .../*FUNC|
00003AD0: 54 49 4F 4E 20 54 4F 20 53 41 56 45 20 53 45 51 |TION TO SAVE SEQ|
00003AE0: 55 45 4E 43 45 20 42 55 46 46 45 52 20 54 4F 20 |UENCE BUFFER TO |
00003AF0: 44 49 53 4B 2A 2F 0D 53 41 56 45 53 49 44 28 29 |DISK*/.SAVESID()|
00003B00: 0D 20 20 DB 0D 20 20 53 54 41 54 49 43 20 49 4E |. .. STATIC IN|
00003B10: 54 20 53 49 44 43 4F 55 4E 54 3B 20 20 20 20 20 |T SIDCOUNT; |
00003B20: 20 2F 2A 43 55 52 52 45 4E 54 20 4E 55 4D 42 45 | /*CURRENT NUMBE|
00003B30: 52 20 4F 46 20 42 59 54 45 53 20 49 4E 20 42 55 |R OF BYTES IN BU|
00003B40: 46 46 45 52 2A 2F 0D 20 20 53 54 41 54 49 43 20 |FFER*/. STATIC |
00003B50: 49 4E 54 20 4F 4C 44 53 49 44 43 4F 55 4E 54 3D |INT OLDSIDCOUNT=|
00003B60: 30 3B 20 2F 2A 50 52 45 56 49 4F 55 53 20 4E 55 |0; /*PREVIOUS NU|
00003B70: 4D 42 45 52 20 4F 46 20 42 59 54 45 53 20 49 4E |MBER OF BYTES IN|
00003B80: 20 42 55 46 46 45 52 2A 2F 0D 20 20 53 54 41 54 | BUFFER*/. STAT|
00003B90: 49 43 20 49 4E 54 20 46 49 4C 45 4E 55 4D 42 45 |IC INT FILENUMBE|
00003BA0: 52 3D 31 3B 20 20 2F 2A 4E 45 58 54 20 53 55 46 |R=1; /*NEXT SUF|
00003BB0: 46 49 58 20 54 4F 20 41 44 44 20 54 4F 20 42 41 |FIX TO ADD TO BA|
00003BC0: 53 45 20 46 49 4C 45 20 4E 41 4D 45 2A 2F 0D 20 |SE FILE NAME*/. |
00003BD0: 20 43 48 41 52 20 46 49 4C 45 4E 41 4D 45 5B 31 | CHAR FILENAME[1|
00003BE0: 37 5D 3B 20 20 20 20 20 20 20 20 2F 2A 54 4F 20 |7]; /*TO |
00003BF0: 42 55 49 4C 44 20 46 49 4C 45 20 4E 41 4D 45 2A |BUILD FILE NAME*|
00003C00: 2F 0D 20 20 43 48 41 52 20 43 3B 0D 20 20 C6 C9 |/. CHAR C;. ..|
00003C10: CC C5 20 2A 53 49 44 46 49 4C 45 3B 0D 0D 20 20 |.. *SIDFILE;.. |
00003C20: 2F 2A 53 45 45 20 48 4F 57 20 4D 55 43 48 20 49 |/*SEE HOW MUCH I|
00003C30: 53 20 49 4E 20 42 55 46 46 45 52 2A 2F 0D 20 20 |S IN BUFFER*/. |
00003C40: 53 49 44 43 4F 55 4E 54 3D 53 49 44 42 55 46 50 |SIDCOUNT=SIDBUFP|
00003C50: 54 52 2D 53 49 44 42 55 46 46 45 52 3B 0D 20 20 |TR-SIDBUFFER;. |
00003C60: 49 46 28 53 49 44 43 4F 55 4E 54 3D 3D 30 29 0D |IF(SIDCOUNT==0).|
00003C70: 20 20 20 20 DB 0D 20 20 20 20 2F 2A 42 55 46 46 | .. /*BUFF|
00003C80: 45 52 20 45 4D 50 54 59 20 2D 20 43 48 45 43 4B |ER EMPTY - CHECK|
00003C90: 20 50 52 45 56 49 4F 55 53 20 42 55 46 46 45 52 | PREVIOUS BUFFER|
00003CA0: 20 43 4F 55 4E 54 2A 2F 0D 20 20 20 20 49 46 28 | COUNT*/. IF(|
00003CB0: 4F 4C 44 53 49 44 43 4F 55 4E 54 29 0D 20 20 20 |OLDSIDCOUNT). |
00003CC0: 20 20 20 DB 0D 20 20 20 20 20 20 2F 2A 50 52 45 | .. /*PRE|
00003CD0: 56 49 4F 55 53 20 42 55 46 46 45 52 20 57 41 53 |VIOUS BUFFER WAS|
00003CE0: 20 4E 4F 54 20 45 4D 50 54 59 2A 2F 0D 20 20 20 | NOT EMPTY*/. |
00003CF0: 20 20 20 2F 2A 4E 55 4C 4C 20 53 54 41 52 54 2D | /*NULL START-|
00003D00: 53 54 4F 50 20 4D 45 41 4E 53 20 54 4F 20 53 41 |STOP MEANS TO SA|
00003D10: 56 45 20 50 52 45 56 49 4F 55 53 20 53 45 51 55 |VE PREVIOUS SEQU|
00003D20: 45 4E 43 45 2A 2F 0D 20 20 20 20 20 20 50 52 49 |ENCE*/. PRI|
00003D30: 4E 54 46 28 22 D7 41 49 54 2E 2E 2E 20 22 29 3B |NTF(".AIT... ");|
00003D40: 0D 0D 20 20 20 20 20 20 2F 2A 43 52 45 41 54 45 |.. /*CREATE|
00003D50: 20 46 49 4C 45 20 4E 41 4D 45 20 42 59 20 53 55 | FILE NAME BY SU|
00003D60: 46 46 49 58 49 4E 47 20 42 41 53 45 20 46 49 4C |FFIXING BASE FIL|
00003D70: 45 20 4E 41 4D 45 20 57 49 54 48 20 4E 55 4D 42 |E NAME WITH NUMB|
00003D80: 45 52 2A 2F 0D 20 20 20 20 20 20 53 50 52 49 4E |ER*/. SPRIN|
00003D90: 54 46 28 46 49 4C 45 4E 41 4D 45 2C 22 25 53 25 |TF(FILENAME,"%S%|
00003DA0: 44 22 2C 42 41 53 45 4E 41 4D 45 2C 46 49 4C 45 |D",BASENAME,FILE|
00003DB0: 4E 55 4D 42 45 52 29 3B 0D 0D 20 20 20 20 20 20 |NUMBER);.. |
00003DC0: 2F 2A 54 52 59 20 54 4F 20 4F 50 45 4E 20 49 54 |/*TRY TO OPEN IT|
00003DD0: 20 54 4F 20 57 52 49 54 45 2A 2F 0D 20 20 20 20 | TO WRITE*/. |
00003DE0: 20 20 53 49 44 46 49 4C 45 3D 46 4F 50 45 4E 28 | SIDFILE=FOPEN(|
00003DF0: 46 49 4C 45 4E 41 4D 45 2C 22 57 22 29 3B 0D 20 |FILENAME,"W");. |
00003E00: 20 20 20 20 20 49 46 28 53 49 44 46 49 4C 45 3D | IF(SIDFILE=|
00003E10: 3D CE D5 CC CC 20 DF DF 20 46 45 52 52 4F 52 28 |=.... .. FERROR(|
00003E20: 53 49 44 46 49 4C 45 29 29 0D 20 20 20 20 20 20 |SIDFILE)). |
00003E30: 20 20 DB 0D 20 20 20 20 20 20 20 20 2F 2A 4E 4F | .. /*NO|
00003E40: 20 4C 55 43 4B 20 2D 20 42 4F 4F 53 54 20 4E 41 | LUCK - BOOST NA|
00003E50: 4D 45 20 41 4E 44 20 54 52 59 20 41 47 41 49 4E |ME AND TRY AGAIN|
00003E60: 2A 2F 0D 20 20 20 20 20 20 20 20 50 52 49 4E 54 |*/. PRINT|
00003E70: 46 28 22 C3 41 4E 27 54 20 4F 50 45 4E 20 25 53 |F(".AN'T OPEN %S|
00003E80: 20 54 4F 20 57 52 49 54 45 5C 4E 22 2C 46 49 4C | TO WRITE\N",FIL|
00003E90: 45 4E 41 4D 45 29 3B 0D 20 20 20 20 20 20 20 20 |ENAME);. |
00003EA0: 46 49 4C 45 4E 55 4D 42 45 52 2B 3D 31 30 3B 0D |FILENUMBER+=10;.|
00003EB0: 20 20 20 20 20 20 20 20 49 46 28 46 49 4C 45 4E | IF(FILEN|
00003EC0: 55 4D 42 45 52 20 3E 20 35 30 29 52 45 54 55 52 |UMBER > 50)RETUR|
00003ED0: 4E 3B 20 2F 2A 4C 49 4D 49 54 20 52 45 54 52 59 |N; /*LIMIT RETRY|
00003EE0: 20 52 45 43 55 52 53 49 4F 4E 2A 2F 0D 20 20 20 | RECURSION*/. |
00003EF0: 20 20 20 20 20 49 46 28 43 55 52 52 45 4E 54 A4 | IF(CURRENT.|
00003F00: 4B 45 59 3D 3D D2 D5 CE A4 D3 D4 CF D0 A4 CB C5 |KEY==...........|
00003F10: D9 29 52 45 54 55 52 4E 3B 0D 20 20 20 20 20 20 |.)RETURN;. |
00003F20: 20 20 53 41 56 45 53 49 44 28 29 3B 0D 20 20 20 | SAVESID();. |
00003F30: 20 20 20 20 20 52 45 54 55 52 4E 3B 0D 20 20 20 | RETURN;. |
00003F40: 20 20 20 20 20 DD 0D 0D 20 20 20 20 20 20 2F 2A | ... /*|
00003F50: 46 49 4C 45 20 4F 50 45 4E 20 4F 4B 2C 20 57 52 |FILE OPEN OK, WR|
00003F60: 49 54 45 20 54 48 45 20 42 55 46 46 45 52 20 54 |ITE THE BUFFER T|
00003F70: 4F 20 54 48 45 20 46 49 4C 45 2A 2F 0D 20 20 20 |O THE FILE*/. |
00003F80: 20 20 20 50 52 49 4E 54 46 28 22 D7 52 49 54 49 | PRINTF(".RITI|
00003F90: 4E 47 20 25 53 2E 2E 2E 20 22 2C 46 49 4C 45 4E |NG %S... ",FILEN|
00003FA0: 41 4D 45 29 3B 0D 0D 20 20 20 20 20 20 43 3D CE |AME);.. C=.|
00003FB0: D6 CF C9 C3 C5 D3 DF 30 58 46 30 3B 20 2F 2A 46 |.......0XF0; /*F|
00003FC0: 49 52 53 54 20 42 59 54 45 20 49 53 20 53 45 4E |IRST BYTE IS SEN|
00003FD0: 54 49 4E 45 4C 20 53 50 45 43 49 46 59 49 4E 47 |TINEL SPECIFYING|
00003FE0: 20 4E 55 4D 42 45 52 20 4F 46 20 56 4F 49 43 45 | NUMBER OF VOICE|
00003FF0: 53 2A 2F 0D 20 20 20 20 20 20 46 57 52 49 54 45 |S*/. FWRITE|
00004000: 28 26 43 2C 31 2C 31 2C 53 49 44 46 49 4C 45 29 |(&C,1,1,SIDFILE)|
00004010: 3B 0D 0D 20 20 20 20 20 20 46 57 52 49 54 45 28 |;.. FWRITE(|
00004020: 53 49 44 42 55 46 46 45 52 2C 4F 4C 44 53 49 44 |SIDBUFFER,OLDSID|
00004030: 43 4F 55 4E 54 2C 31 2C 53 49 44 46 49 4C 45 29 |COUNT,1,SIDFILE)|
00004040: 3B 20 2F 2A 42 55 46 46 45 52 20 49 54 53 45 4C |; /*BUFFER ITSEL|
00004050: 46 2A 2F 0D 0D 20 20 20 20 20 20 2F 2A 43 4C 4F |F*/.. /*CLO|
00004060: 53 45 20 54 48 45 20 46 49 4C 45 2A 2F 0D 20 20 |SE THE FILE*/. |
00004070: 20 20 20 20 46 43 4C 4F 53 45 28 53 49 44 46 49 | FCLOSE(SIDFI|
00004080: 4C 45 29 3B 0D 20 20 20 20 20 20 50 52 49 4E 54 |LE);. PRINT|
00004090: 46 28 22 44 4F 4E 45 2E 5C 4E 22 29 3B 0D 0D 20 |F("DONE.\N");.. |
000040A0: 20 20 20 20 20 2F 2A 42 55 4D 50 20 46 49 4C 45 | /*BUMP FILE|
000040B0: 20 4E 55 4D 42 45 52 20 53 55 46 46 49 58 20 55 | NUMBER SUFFIX U|
000040C0: 50 20 46 4F 52 20 4E 45 58 54 20 53 41 56 45 2A |P FOR NEXT SAVE*|
000040D0: 2F 0D 20 20 20 20 20 20 46 49 4C 45 4E 55 4D 42 |/. FILENUMB|
000040E0: 45 52 2B 2B 3B 0D 20 20 20 20 20 20 DD 0D 20 20 |ER++;. .. |
000040F0: 20 20 DD 0D 20 20 2F 2A 52 45 4D 45 4D 42 45 52 | .. /*REMEMBER|
00004100: 20 54 48 49 53 20 43 4F 55 4E 54 20 46 4F 52 20 | THIS COUNT FOR |
00004110: 4E 45 58 54 20 54 49 4D 45 20 43 41 4C 4C 45 44 |NEXT TIME CALLED|
00004120: 2A 2F 0D 20 20 4F 4C 44 53 49 44 43 4F 55 4E 54 |*/. OLDSIDCOUNT|
00004130: 3D 53 49 44 43 4F 55 4E 54 3B 0D 0D 20 20 2F 2A |=SIDCOUNT;.. /*|
00004140: 45 4E 44 20 4F 46 20 46 55 4E 43 54 49 4F 4E 20 |END OF FUNCTION |
00004150: 53 41 56 45 53 49 44 2A 2F 0D 20 20 DD 0D |SAVESID*/. .. |
/*MIDI TO SID SEQUENCER "MIDI-SID-SEQ"*/
./*MAKES C64 A 3 (OR 6) NOTE POLYPHONIC*
/./*MONOTIMBRAL MIDI DRIVEN SOUND SOURCE
*/./*AND SAVES SEQUENCES TO DISK FOR CON
-*/./*VERSION TO SID FILES BY MIDI TO SI
D */./*FILE CONVERTER*/../*VERSION 1.0,
BY FRANK PRINDLE, 7 SEP 89*/./*VERSION 2
.0, BY FRANK PRINDLE, 15 FEB 90*/..#INCL
UDE <STDIO.H>../*DEFAULT TO 6 VOICES UNL
ESS USER SELECTS 3 VOICES*/.INT NVOICES=
6;../*DEFAULT TO POLYPHONY UNLESS USER S
ELECTS OTHERWISE*/.INT POLYPHONY=1;../*M
IDI NOTE TO SID FREQUENCY TABLE*/.UNSIGN
ED FREQ[128]=. .. 0, 0, 0,
0,. 0, 0, 0, 0,. 0,
0, 0, 0,.. 268, 284, 301,
318,. 337, 358, 379, 401,. 42
5, 451, 477, 506,.. 536, 568, 60
2, 637,. 675, 716, 758, 803,.
851, 902, 955, 1012,.. 1072, 1136, 1
204, 1275,. 1351, 1432, 1517, 1607,.
1703, 1804, 1911, 2025,.. 2145, 2273,
2408, 2551,. 2703, 2864, 3034, 3215,.
3406, 3608, 3823, 4050,.. 4291, 454
7, 4817, 5103,. 5407, 5728, 6069, 6430
,. 6812, 7217, 7647, 8101,.. 8583, 9
094, 9634,10207,. 10814,11457,12139,128
60,. 13625,14435,15294,16203,.. 17167,
18188,19269,20415,. 21629,22915,24278,2
5721,. 27251,28871,30588,32407,.. 3433
4,36376,38539,40830,. 43258,45830,48556
,51443,. 54502,57743,61176,64814,..
0, 0, 0, 0,. 0, 0,
0, 0,. 0, 0, 0, 0,..
0, 0, 0, 0,. 0, 0,
0, 0. .;../*DUMMY 7TH VOICE*/.CHA
R NOVOICE[7];../*BASE ADDRESS OF EACH SI
D CHIP VOICE*/.CHAR *VOICE[7]=. .. 542
72, /*BUILT IN SID CHIP*/. 54279,. 54
286,. 57088, /*SECOND OPTIONAL SID CHI
P AT $DF00*/. 57095,. 57102,. 0. .;.
./*FOR VOICE THAT IS SOUNDING, MIDI NOTE
NUMBER*/.CHAR INUSE[7] = .0,0,0,0,0,0,0
.;../*VOICE TO USE FOR NEXT NOTE ON*/.IN
T NEXTVOICE = 0;../*MIDI CLOCK COUNTER*/
.INT MIDICLOCK = 0;../*SID SEQUENCE BUFF
ER AND POINTER*/.CHAR SIDBUFFER[33000];.
CHAR *SIDBUFPTR;.INT FILLCOUNT=0;../*BAS
E FILE NAME*/.CHAR BASENAME[30] = "MIDIS
EQ"; /*DEFAULT NAME*/../*SID VOICE REGIS
TER OFFSETS*/.#DEFINE FILTER 23.#DEFINE
VOLUME 24.#DEFINE FREQWD 0.#DEFINE PULSW
D 2.#DEFINE WAVE 4.#DEFINE ATTDEC 5.#D
EFINE SUSREL 6../*SYSTEM SPECIFIC DEFINI
TIONS*/.#DEFINE BACKGROUND (*((CHAR *)53
281)) /*BACKGROUND COLOR BYTE*/.#DEFINE
BORDER (*((CHAR *)53280)) /*BORDER
COLOR BYTE*/.#DEFINE CURRENT.KEY (*((CH
AR *)197)) /*CURRENT KEYSCAN CODE*/.#D
EFINE BUFFERCOLOR ((CHAR *)55464) /*C
OLOR MEMORY FOR BUFFER METER*/.#DEFINE S
TOPCOLOR ((CHAR *)55338) /*COLOR ME
MORY FOR STOP INDICATOR*/.#DEFINE STARTC
OLOR ((CHAR *)55369) /*COLOR MEMORY
FOR START INDICATOR*/.#DEFINE ACTIVECOLO
R (*((CHAR *)55336)) /*COLOR MEMORY FOR
MIDI ACTIVITY STAR*/.#DEFINE RUN.STOP.KE
Y 63 /*KEYSCAN CODE*/.#DE
FINE RESET 64738 /*KE
RNAL COLD START ENTRY POINT*/.#DEFINE BL
ACK.VALUE 0 /*COLOR MEM
ORY VALUE*/.#DEFINE RED.VALUE 2
/*COLOR MEMORY VALUE*/.#DEFIN
E GREEN.VALUE 5 /*COLOR
MEMORY VALUE*/.#DEFINE CLEAR 147
/*CHARACTER CODE*/.#DEFIN
E CYAN 159 /*CHARA
CTER CODE*/.#DEFINE LOWER 14
/*CHARACTER CODE*/.#DEFINE RE
VERSE 18 /*CHARACTER
CODE*/.#DEFINE GREEN 30
/*CHARACTER CODE*/.#DEFINE NORMAL
146 /*CHARACTER COD
E*/.#DEFINE UP 145
/*CHARACTER CODE*/.#DEFINE LEFT 157
/*CHARACTER CODE*/.
#DEFINE BLACK 144 /
*CHARACTER CODE*/.#DEFINE RED 28
/*CHARACTER CODE*/../*B
EGIN PROGRAM*/.MAIN(). .. CHAR BUFFER[
100]; /*EVENT BUFFER*/. CHAR *OUTPTR=
BUFFER;/*NEXT OUT PTR*/. INT I;
/*LOOP COUNTER*/. CHAR BYTE;
/*MIDI BYTE*/. CHAR *INPTR=BUFFER;
/*NEXT IN PTR*/. INT STATE=0; /
*MIDI STATE*/. INT NOTE; /*MI
DI NOTE*/. CHAR OFF=0; /*FLAGS
NOTE OFF*/. CHAR NONAME=1; /*FLAGS
OK NAME*/. CHAR DUMMY1; /*FAKE
MIDI INTERFACE REGISTERS IF NONE PRESENT
*/. CHAR DUMMY2=0;. INT BESTNEXT;
/*VOICE TO USE FOR NEXT NOTE ON IF ALL
VOICES IN USE*/... /*DEFINE MIDI INTER
FACE PARAMETERS*/. STRUCT. .. CHA
R *CONTROL; /*4 UART REG ADDRESSES*/.
CHAR *TXDATA;. CHAR *STATUS;. CHA
R *RXDATA;. CHAR RESET; /*CTL BYTE
FOR RESET*/. CHAR ENABLE; /*CTL BY
TE FOR ENABLE INPUT WITH INTERRUPT*/.
. MIDIPARAMS;.. /*PROMPT FOR NUMBER OF
VOICES AND BASE FILE NAME*/. BACKGROUN
D=BLACK.VALUE;. BORDER=BLACK.VALUE;. W
HILE(NONAME). .. PRINTF("%C%C\N*%C
%C STOP%C MIDI-TO-SID SEQUENCER %CST
ART%C\N",. CLEAR,BLACK,RED,LOWER,CYA
N,BLACK,CYAN);. PRINTF(" V2.0
BY FRANK PRINDLE\N\N");. PRINTF("1 T
O 6 SID VOICES? 6%C",LEFT);. GETS(SID
BUFFER);. IF(*SIDBUFFER>'0'&&*SIDBUFF
ER<'7')NVOICES=*SIDBUFFER-'0';. BESTN
EXT=NVOICES;. PRINTF("%CPOLYPHONY EFF
ECT ? Y%C",UP,LEFT);. GETS(SIDBUFFER)
;. IF(*SIDBUFFER=='N')POLYPHONY=0;.
PRINTF("%CENTER BASE SAVE FILE NAME: "
,UP);. GETS(BASENAME);. IF(*BASENA
ME==0)*BASENAME='M';. IF(STRLEN(BASEN
AME)<=10)NONAME--;. ... /*SET UP FIX
ED PORTION OF SCREEN*/. PRINTF("%CBUFFE
R: %C%C %
C%C\N",. UP,REVERSE,GREEN,NORMAL,CYAN)
;. PRINTF("BASE FILE NAME IS '%S'.\N\N"
, BASENAME);. PRINTF("HOLD RUN/STOP KEY
TO QUIT.\N\N");. /*PRINTF("%X\N\N",SID
BUFFER);*/ /*FOR CHECKING PROGRAM SIZE O
NLY*/.. /*DETECT WHAT KIND OF INTERFACE
IS IN USE AND*/. /*SET UP MIDI INTERFA
CE PARAMETERS*/.. /*TEST FOR PASSPORT*/
. *((CHAR *)0XDE08)=0X13;. *((CHAR *)0
XDE08)=0X11;. IF(*((CHAR *)0XDE08)==2).
.. /*PASSPORT INTERFACE*/. PRI
NTF("PASSPORT INTERFACE FOUND.\N\N");.
MIDIPARAMS.CONTROL = (CHAR *)0XDE08;.
MIDIPARAMS.TXDATA = (CHAR *)0XDE09;.
MIDIPARAMS.STATUS = (CHAR *)0XDE08;
. MIDIPARAMS.RXDATA = (CHAR *)0XDE09
;. MIDIPARAMS.RESET = 0X3;. MIDI
PARAMS.ENABLE = 0X95;. .. ELSE.
.. /*TEST FOR SEQUENTIAL*/. *((CHA
R *)0XDE00)=0X3;. *((CHAR *)0XDE00)=0
X15;. IF(*((CHAR *)0XDE02)==2).
.. /*SEQUENTIAL INTERFACE*/. P
RINTF("SEQUENTIAL INTERFACE FOUND.\N\N")
;. MIDIPARAMS.CONTROL = (CHAR *)0XD
E00;. MIDIPARAMS.TXDATA = (CHAR *)
0XDE01;. MIDIPARAMS.STATUS = (CHAR
*)0XDE02;. MIDIPARAMS.RXDATA = (C
HAR *)0XDE03;. MIDIPARAMS.RESET =
0X3;. MIDIPARAMS.ENABLE = 0X95;.
.. ELSE. .. /*TEST FOR
SIEL/JMS*/. *((CHAR *)0XDE04)=0X3;
. *((CHAR *)0XDE04)=0X15;. IF(
*((CHAR *)0XDE06)==2). ..
/*SIEL/JMS INTERFACE*/. PRINTF("S
IEL/JMS INTERFACE FOUND.\N\N");.
MIDIPARAMS.CONTROL = (CHAR *)0XDE04;.
MIDIPARAMS.TXDATA = (CHAR *)0XDE05
;. MIDIPARAMS.STATUS = (CHAR *)0
XDE06;. MIDIPARAMS.RXDATA = (CHA
R *)0XDE07;. MIDIPARAMS.RESET =
0X3;. MIDIPARAMS.ENABLE = 0X96;
. .. ELSE. ..
/*WHOOPS, NOTHING PLUGGED IN*/. P
RINTF("NO INTERFACE FOUND!\N");.
MIDIPARAMS.CONTROL = &DUMMY1;. MI
DIPARAMS.STATUS = &DUMMY2;. ..
.. ... /*INITIALIZE SID CHIP VOIC
ES FOR A SIMPLE PIANO LIKE SOUND*/. *(V
OICE[0]+FILTER)=0X08;. *(VOICE[3]+FILTE
R)=0X08;. *(VOICE[0]+VOLUME)=0X0C;. *(
VOICE[3]+VOLUME)=0X0C;. FOR(I=0;I<6;I++
). .. *((UNSIGNED *)(VOICE[I]+PULS
WD)). =1500;. *(VOICE[I]+WAVE)=0
X40;. *(VOICE[I]+ATTDEC)=0X0B;. *(
VOICE[I]+SUSREL)=0X19;. ... /*INITIA
LIZE DUMMY 7TH VOICE ADDRESS*/. VOICE[N
VOICES]=NOVOICE;.. /*INITIALIZE SID BUF
FER POINTER TO START OF BUFFER*/. SIDBU
FPTR=SIDBUFFER;.. /*ENABLE INTERRUPT DR
IVEN MIDI INPUT (SEE HOOKMIDI.A ASSEMBLE
D SEPARATELY)*/. /*BUFFER WILL BE FILLE
D IN A CIRCULAR FASHION AS MIDI BYTES AR
RIVE; INPTR*/. /*WILL BE UPDATED TO REF
LECT THE NEXT FREE (UNUSED) BYTE OF BUFF
ER*/. HOOKMIDI(BUFFER,BUFFER+100,&INPTR
,&MIDIPARAMS);.. /*MAIN LOOP - EXIT ONL
Y BY RUN/STOP KEY*/. FOR(;;). ..
/*IS THERE A MIDI EVENT IN THE BUFFER?*/
. IF(INPTR != OUTPTR). .. /
*YES, FETCH NEXT BYTE*/. BYTE = *OU
TPTR;.. /*IF THIS IS A NOTE-OFF STA
TUS BYTE, CONVERT IT TO A NOTE-ON BYTE*/
. /*WITH VELOCITY (TO FOLLOW) SET T
O ZERO*/. IF((BYTE&0XF0)==0X80).
.. BYTE=0X90;. OFF++;
. ... /*IF THIS BYTE IS NOT
A REAL-TIME MESSAGE,*/. /*STATE MAC
HINE WILL FOLLOW PROGRESS OF MULTI-BYTE
MIDI EVENT*/. IF((BYTE&0XF0)!=0XF0)
SWITCH(STATE). .. /*WAITIN
G FOR NOTE-ON STATUS BYTE*/. CASE
0:. .. /*IS THIS A NO
TE-ON?*/. IF((BYTE & 0XF0)==0X9
0). .. /*YES, WAIT
FOR NOTE NUMBER BYTE*/. STAT
E=2;. .. BREAK;.
... /*WAITING FOR ANOTHER N
OTE NUMBER BYTE OR A NOTE-ON STATUS BYTE
*/. CASE 1:. ..
/*IS THS A STATUS BYTE?*/. IF(
BYTE & 0X80). .. /
*YES, IS IS A NOTE-ON STATUS BYTE?*/.
IF((BYTE&0XF0)==0X90).
.. /*YES, WAIT FOR NOT
E NUMBER BYTE*/. STATE=2;.
.. ELSE.
.. /*NO, RUNNING STAT
US DISABLED - WAIT FOR NOTE-ON STATUS BY
TE*/. STATE=0;.
.. BREAK;. ..
/*NOT A STATUS BYTE - MUST BE A N
OTE NUMBER BYTE - FALL THRU*/.
... /*WAITING FOR NOTE NUMBER BYT
E*/. CASE 2:. ..
/*NOTE NUMBER BYTE OCCURRED - SAVE NOT
E*/. NOTE= BYTE;. /*WA
IT FOR VELOCITY BYTE*/. STATE=3
;. BREAK;. ...
/*WAITING FOR VELOCITY BYTE*/. CA
SE 3:. .. /*VELOCITY B
YTE OCCURRED*/. /*IF THIS WAS N
OTE-OFF, SET VELOCITY TO ZERO*/.
IF(OFF). .. BYTE
=0;. OFF--;. ..
/*IS THIS ZERO VELOCITY (MEANING
NOTE-OFF)?*/. IF(BYTE != 0).
.. /*NO, IT WAS NOTE
-ON: IF NEXT AVAIL VOICE IS SOUNDING, ST
OP IT NOW*/. IF(INUSE[NEXTVOI
CE]). .. *(VOI
CE[NEXTVOICE]+WAVE)=0X40;.
/*STASH SID SEQUENCER DATA IF BUFFER NOT
FULL*/. IF(FILLCOUNT!=32).
.. *SIDBU
FPTR++ = (NEXTVOICE<<4).0X80.(((MIDICLOC
K)>>8)&0XF);. *SIDBUFPTR+
+ = (MIDICLOCK) & 0XFF;.
.. ... /*SOUND T
HE NOTE ON NEXT AVAIL SID VOICE*/.
*((UNSIGNED *)(VOICE[NEXTVOICE]+FR
EQWD))=FREQ[NOTE];. *(VOICE[N
EXTVOICE]+WAVE)=0X41;.. /*MAR
K VOICE AS IN USE*/. INUSE[NE
XTVOICE]=NOTE;.. /*STASH SID
SEQUENCER DATA IF BUFFER NOT FULL*/.
IF(FILLCOUNT!=32).
.. *SIDBUFPTR++ = (NEXTVOIC
E<<4).((MIDICLOCK>>8)&0XF);.
*SIDBUFPTR++ = MIDICLOCK & 0XFF;.
*SIDBUFPTR++ = NOTE;.
... /*FIND NEXT AVAIL VOI
CE (VOICE NVOICES IS A DUMMY TO CATCH*/.
/*EXCESS POLYPHONIC NOTES PL
AYED*/. IF(POLYPHONY).
.. NEXTVOICE=(NEXTVO
ICE+1)%NVOICES;. ..
ELSE. .. N
EXTVOICE=0;. ..
BESTNEXT=NEXTVOICE;. INUSE[NV
OICES]=0;. WHILE(INUSE[NEXTVO
ICE]). .. NEXT
VOICE++;. .. IF(
NEXTVOICE==NVOICES && POLYPHONY).
.. NEXTVOICE=0;.
WHILE(INUSE[NEXTVOICE]).
.. NEXTVOICE++;
. .. ...
IF(NEXTVOICE==NVOICES).
.. NEXTVOICE=BESTNEXT;
. .. ELSE.
.. BESTNEXT=NVOICES
;. ... /*END PRO
CESSING OF NOTE-ON EVENT*/. .
. ELSE. ..
/*YES, IT WAS A NOTE-OFF - FIND WHICH
VOICE WAS PLAYING THIS NOTE*/.
FOR(I=0;I<NVOICES;I++). .
. /*DOES THIS VOICE HAVE MA
TCHING NOTE?*/. IF(INUSE[I]
==NOTE). ..
/*YES - FOUND, TURN OFF SOUND ON THIS
SID VOICE*/. *(VOICE[I]+W
AVE)=0X40;. INUSE[I]=0;..
/*STASH SID SEQUENCER DA
TA IF BUFFER NOT FULL*/.
IF(FILLCOUNT!=32). ..
*SIDBUFPTR++ = (I<<4).0X
80.((MIDICLOCK>>8)&0XF);.
*SIDBUFPTR++ = MIDICLOCK & 0XFF;.
... /*MAKE
VOICE AVAILABLE FOR RE-USE IF NONE WERE
AVAILABLE*/. IF(BESTNEXT!
=NVOICES). ..
NEXTVOICE=I;. B
ESTNEXT=NVOICES;. ..
ELSE IF(!POLYPHONY).
.. IF(I<NEXT
VOICE)NEXTVOICE=I;. ...
/*STOP SEARCHING*/.
BREAK;. ..
.. /*END PROCESSING
OF NOTE-OFF EVENT*/. ...
/*PROVIDE VISUAL FEEDBACK TO USER*
/. ACTIVECOLOR++;.. /*
NOW, GO WAIT FOR NOTE-ON STATUS BYTE OR
ANOTHER NOTE NUMBER BYTE*/. STA
TE=1;. BREAK;. ..
/*END PROCESSING OF NON REAL-TIME MES
SAGES*/. .. ELSE. ..
/*REAL-TIME MESSAGE*/. /*W
HICH KIND?*/. IF(BYTE==0XFA).
.. /*START MESSAGE FROM M
IDI STREAM OR F1 KEY*/. SIDBUFP
TR=SIDBUFFER; /*RESET SEQUENCE BUFFER*/.
FILLCOUNT=0;.. /*MARK
BUFFER EMPTY ON BUFFER METER (GREEN IS
EMPTY COLOR)*/. FOR(I=0;I<32;I+
+). .. BUFFERCOLOR
[I]=GREEN.VALUE;. ...
/*EXTINGUISH STOP, LIGHT START*/.
FOR(I=0;I<4;I++)STOPCOLOR[I]=BLACK.
VALUE;. FOR(I=0;I<5;I++)STARTCO
LOR[I]=GREEN.VALUE;. ..
ELSE IF(BYTE==0XF8). ..
/*MIDI CLOCK FROM MIDI STREAM OR JIFFY
CLOCK*/. MIDICLOCK++;.
.. ELSE IF(BYTE==0XFC).
.. /*STOP MESSAGE FROM MIDI S
TREAM OR F7 KEY*/. /*EXTINGUISH
START, LIGHT STOP*/. FOR(I=0;I
<4;I++)STOPCOLOR[I]=RED.VALUE;.
FOR(I=0;I<5;I++)STARTCOLOR[I]=BLACK.VAL
UE;.. /*GO SAVE SEQUENCE IF STA
RT/STOP PRESSED WITH NO NOTES IN BETWEEN
*/. SAVESID();. ..
/*END ANALYSIS OF THIS MIDI BYTE*/.
... /*TRACK MIDI EVENTS AROU
ND CIRCULAR BUFFER*/. IF(++OUTPTR==
(BUFFER+100)) OUTPTR=BUFFER;. ..
ELSE. .. /*NO NEW MIDI EVENTS
IN BUFFER RIGHT NOW - IDLE*/. /*CH
ECK FOR RUN/STOP KEY*/. IF(CURRENT.
KEY==RUN.STOP.KEY). .. /*R
ESET INTERFACE*/. *(MIDIPARAMS.CO
NTROL)=MIDIPARAMS.RESET;.. /*COLD
START C64*/. SYS(RESET);.
... /*CHECK FULLNESS OF BUFFER*/.
IF((((SIDBUFPTR-SIDBUFFER)>>10)&0X3
F) != FILLCOUNT). .. /*BUF
FER GOT 1K MORE FULL*/. /*CHANGE
THE NEXT 32ND OF BUFFER METER TO RED*/.
BUFFERCOLOR[FILLCOUNT]=RED.VALUE;
.. /*KEEP TRACK OF HOW FULL BUFFE
R IS*/. /*IF FILLCOUNT IS 32, BUF
FER IS CONSIDERED FULL (32768 OR MORE)*/
. FILLCOUNT++;. .. ..
.. /*END OF MAIN PROGRAM MIDI-SID-S
EQ*/. .../*FUNCTION TO SAVE SEQUENCE BU
FFER TO DISK*/.SAVESID(). .. STATIC IN
T SIDCOUNT; /*CURRENT NUMBER OF BYT
ES IN BUFFER*/. STATIC INT OLDSIDCOUNT=
0; /*PREVIOUS NUMBER OF BYTES IN BUFFER*
/. STATIC INT FILENUMBER=1; /*NEXT SUF
FIX TO ADD TO BASE FILE NAME*/. CHAR FI
LENAME[17]; /*TO BUILD FILE NAME*
/. CHAR C;. FILE *SIDFILE;.. /*SEE HO
W MUCH IS IN BUFFER*/. SIDCOUNT=SIDBUFP
TR-SIDBUFFER;. IF(SIDCOUNT==0). ..
/*BUFFER EMPTY - CHECK PREVIOUS BUFFER
COUNT*/. IF(OLDSIDCOUNT). ..
/*PREVIOUS BUFFER WAS NOT EMPTY*/.
/*NULL START-STOP MEANS TO SAVE PREVI
OUS SEQUENCE*/. PRINTF("WAIT... ");
.. /*CREATE FILE NAME BY SUFFIXING
BASE FILE NAME WITH NUMBER*/. SPRIN
TF(FILENAME,"%S%D",BASENAME,FILENUMBER);
.. /*TRY TO OPEN IT TO WRITE*/.
SIDFILE=FOPEN(FILENAME,"W");. IF(
SIDFILE==NULL .. FERROR(SIDFILE)).
.. /*NO LUCK - BOOST NAME AND T
RY AGAIN*/. PRINTF("CAN'T OPEN %S
TO WRITE\N",FILENAME);. FILENUMB
ER+=10;. IF(FILENUMBER > 50)RETUR
N; /*LIMIT RETRY RECURSION*/. IF(
CURRENT.KEY==RUN.STOP.KEY)RETURN;.
SAVESID();. RETURN;. ...
/*FILE OPEN OK, WRITE THE BUFFER T
O THE FILE*/. PRINTF("WRITING %S...
",FILENAME);.. C=NVOICES.0XF0; /*F
IRST BYTE IS SENTINEL SPECIFYING NUMBER
OF VOICES*/. FWRITE(&C,1,1,SIDFILE)
;.. FWRITE(SIDBUFFER,OLDSIDCOUNT,1,
SIDFILE); /*BUFFER ITSELF*/.. /*CLO
SE THE FILE*/. FCLOSE(SIDFILE);.
PRINTF("DONE.\N");.. /*BUMP FILE
NUMBER SUFFIX UP FOR NEXT SAVE*/.
FILENUMBER++;. .. .. /*REMEMBER
THIS COUNT FOR NEXT TIME CALLED*/. OLD
SIDCOUNT=SIDCOUNT;.. /*END OF FUNCTION
SAVESID*/. ..
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL