HOOKMIDI.A
FILE INFORMATION
FILENAME(S): HOOKMIDI.A
FILE TYPE(S): SEQ
FILE SIZE: 6.9K
FIRST SEEN: 2025-10-20 14:31:50
APPEARS ON: 1 disk(s)
FILE HASH
3698dfe351ac1af7c6e1934225ff0bbaedf2c0036f31940f5fbb9e4967cc71aa
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| MIDI SID CONNECT | HOOKMIDI.A | SEQ | Treasure Chest - Klaus Der Suhler | 30 | 8 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 3B 20 D4 48 49 53 20 C3 2D D0 4F 57 45 52 20 41 |; .HIS .-.OWER A| 00000010: 53 53 45 4D 42 4C 59 20 4D 4F 44 55 4C 45 20 44 |SSEMBLY MODULE D| 00000020: 45 46 49 4E 45 53 20 46 55 4E 43 54 49 4F 4E 20 |EFINES FUNCTION | 00000030: 48 4F 4F 4B 4D 49 44 49 2C 20 57 48 49 43 48 20 |HOOKMIDI, WHICH | 00000040: 45 4E 41 42 4C 45 53 0D 3B 20 CD C9 C4 C9 20 49 |ENABLES.; .... I| 00000050: 4E 54 45 52 46 41 43 45 20 52 45 43 45 50 54 49 |NTERFACE RECEPTI| 00000060: 4F 4E 20 41 4E 44 20 48 4F 4F 4B 53 20 49 4E 54 |ON AND HOOKS INT| 00000070: 4F 20 49 4E 54 45 52 52 55 50 54 20 48 41 4E 44 |O INTERRUPT HAND| 00000080: 4C 49 4E 47 20 54 48 52 45 41 44 20 46 4F 52 0D |LING THREAD FOR.| 00000090: 3B 20 53 55 42 53 45 51 55 45 4E 54 20 49 4E 54 |; SUBSEQUENT INT| 000000A0: 45 52 52 55 50 54 20 44 52 49 56 45 4E 20 52 45 |ERRUPT DRIVEN RE| 000000B0: 43 45 50 54 49 4F 4E 20 4F 46 20 42 59 54 45 53 |CEPTION OF BYTES| 000000C0: 20 46 52 4F 4D 20 54 48 45 20 CD C9 C4 C9 20 49 | FROM THE .... I| 000000D0: 4E 54 45 52 46 41 43 45 2E 0D 3B 20 C6 4F 52 20 |NTERFACE..; .OR | 000000E0: D6 31 2E 30 20 4F 46 20 CD C9 C4 C9 2D D3 C9 C4 |.1.0 OF ....-...| 000000F0: 2D D3 C5 D1 20 42 59 20 C6 52 41 4E 4B 20 D0 52 |-... BY .RANK .R| 00000100: 49 4E 44 4C 45 2C 20 37 20 D3 45 50 20 38 39 0D |INDLE, 7 .EP 89.| 00000110: 0D 20 20 20 20 20 20 20 20 20 20 2E 52 45 46 20 |. .REF | 00000120: 43 24 46 55 4E 43 54 A4 49 4E 49 54 0D 20 20 20 |C$FUNCT.INIT. | 00000130: 20 20 20 20 20 20 20 2E 52 45 46 20 43 24 53 54 | .REF C$ST| 00000140: 41 52 54 0D 20 20 20 20 20 20 20 20 20 20 2E 44 |ART. .D| 00000150: 45 46 20 48 4F 4F 4B 4D 49 44 49 0D 0D 3B 20 4C |EF HOOKMIDI..; L| 00000160: 4F 57 20 4D 45 4D 4F 52 59 20 41 4E 44 20 43 4F |OW MEMORY AND CO| 00000170: 4E 53 54 41 4E 54 20 44 45 46 49 4E 49 54 49 4F |NSTANT DEFINITIO| 00000180: 4E 53 0D 0D 43 49 4E 56 20 20 20 20 20 20 3D 20 |NS..CINV = | 00000190: 20 20 20 24 30 33 31 34 20 20 20 20 3B 20 C9 D2 | $0314 ; ..| 000001A0: D1 20 49 4E 54 45 52 52 55 50 54 20 56 45 43 54 |. INTERRUPT VECT| 000001B0: 4F 52 0D 43 4F 4E 54 52 4F 4C 20 20 20 3D 20 20 |OR.CONTROL = | 000001C0: 20 20 24 42 30 20 20 20 20 20 20 3B 20 57 4F 52 | $B0 ; WOR| 000001D0: 44 20 48 4F 4C 44 53 20 CD C9 C4 C9 20 43 4F 4E |D HOLDS .... CON| 000001E0: 54 52 4F 4C 20 52 45 47 49 53 54 45 52 20 41 44 |TROL REGISTER AD| 000001F0: 44 52 45 53 53 0D 54 58 44 41 54 41 20 20 20 20 |DRESS.TXDATA | 00000200: 3D 20 20 20 20 24 41 45 20 20 20 20 20 20 3B 20 |= $AE ; | 00000210: 57 4F 52 44 20 48 4F 4C 44 53 20 CD C9 C4 C9 20 |WORD HOLDS .... | 00000220: 54 52 41 4E 53 4D 49 54 20 44 41 54 41 20 52 45 |TRANSMIT DATA RE| 00000230: 47 49 53 54 45 52 20 41 44 44 52 45 53 53 0D 53 |GISTER ADDRESS.S| 00000240: 54 41 54 55 53 20 20 20 20 3D 20 20 20 20 24 42 |TATUS = $B| 00000250: 34 20 20 20 20 20 20 3B 20 57 4F 52 44 20 48 4F |4 ; WORD HO| 00000260: 4C 44 53 20 CD C9 C4 C9 20 53 54 41 54 55 53 20 |LDS .... STATUS | 00000270: 52 45 47 49 53 54 45 52 20 41 44 44 52 45 53 53 |REGISTER ADDRESS| 00000280: 0D 52 58 44 41 54 41 20 20 20 20 3D 20 20 20 20 |.RXDATA = | 00000290: 24 42 32 20 20 20 20 20 20 3B 20 57 4F 52 44 20 |$B2 ; WORD | 000002A0: 48 4F 4C 44 53 20 CD C9 C4 C9 20 52 45 43 45 49 |HOLDS .... RECEI| 000002B0: 56 45 20 44 41 54 41 20 52 45 47 49 53 54 45 52 |VE DATA REGISTER| 000002C0: 20 41 44 44 52 45 53 53 0D 42 55 46 50 54 52 20 | ADDRESS.BUFPTR | 000002D0: 20 20 20 3D 20 20 20 20 24 46 37 20 20 20 20 20 | = $F7 | 000002E0: 20 3B 20 57 4F 52 44 20 48 4F 4C 44 53 20 CD C9 | ; WORD HOLDS ..| 000002F0: C4 C9 20 42 55 46 46 45 52 20 50 4F 49 4E 54 45 |.. BUFFER POINTE| 00000300: 52 0D 50 54 52 20 20 20 20 20 20 20 3D 20 20 20 |R.PTR = | 00000310: 20 24 46 39 20 20 20 20 20 20 3B 20 57 4F 52 44 | $F9 ; WORD| 00000320: 20 48 4F 4C 44 53 20 CD C9 C4 C9 20 42 55 46 46 | HOLDS .... BUFF| 00000330: 45 52 20 50 4F 49 4E 54 45 52 20 52 45 54 55 52 |ER POINTER RETUR| 00000340: 4E 20 50 4F 49 4E 54 45 52 0D 4E 44 58 20 20 20 |N POINTER.NDX | 00000350: 20 20 20 20 3D 20 20 20 20 24 43 36 20 20 20 20 | = $C6 | 00000360: 20 20 3B 20 4E 55 4D 42 45 52 20 4F 46 20 43 48 | ; NUMBER OF CH| 00000370: 41 52 41 43 54 45 52 53 20 49 4E 20 4B 45 59 42 |ARACTERS IN KEYB| 00000380: 4F 41 52 44 20 42 55 46 46 45 52 0D 4B 45 59 44 |OARD BUFFER.KEYD| 00000390: 20 20 20 20 20 20 3D 20 20 20 20 24 30 32 37 37 | = $0277| 000003A0: 20 20 20 20 3B 20 4B 45 59 42 4F 41 52 44 20 42 | ; KEYBOARD B| 000003B0: 55 46 46 45 52 0D 50 41 52 4D 42 41 53 45 20 20 |UFFER.PARMBASE | 000003C0: 3D 20 20 20 20 24 30 33 33 43 20 20 20 20 3B 20 |= $033C ; | 000003D0: C3 2D D0 4F 57 45 52 20 50 41 52 41 4D 45 54 45 |.-.OWER PARAMETE| 000003E0: 52 20 4C 49 53 54 20 42 41 53 45 0D 46 31 43 4F |R LIST BASE.F1CO| 000003F0: 44 45 20 20 20 20 3D 20 20 20 20 24 38 35 20 20 |DE = $85 | 00000400: 20 20 20 20 3B 20 43 48 41 52 41 43 54 45 52 20 | ; CHARACTER | 00000410: 43 4F 44 45 20 46 4F 52 20 46 31 20 4B 45 59 0D |CODE FOR F1 KEY.| 00000420: 46 37 43 4F 44 45 20 20 20 20 3D 20 20 20 20 24 |F7CODE = $| 00000430: 38 38 20 20 20 20 20 20 3B 20 43 48 41 52 41 43 |88 ; CHARAC| 00000440: 54 45 52 20 43 4F 44 45 20 46 4F 52 20 46 37 20 |TER CODE FOR F7 | 00000450: 4B 45 59 0D 4D 53 54 41 52 54 20 20 20 20 3D 20 |KEY.MSTART = | 00000460: 20 20 20 24 46 41 20 20 20 20 20 20 3B 20 41 20 | $FA ; A | 00000470: CD C9 C4 C9 20 53 54 41 52 54 20 52 45 41 4C 2D |.... START REAL-| 00000480: 54 49 4D 45 20 53 54 41 54 55 53 20 42 59 54 45 |TIME STATUS BYTE| 00000490: 0D 4D 53 54 4F 50 20 20 20 20 20 3D 20 20 20 20 |.MSTOP = | 000004A0: 24 46 43 20 20 20 20 20 20 3B 20 41 20 CD C9 C4 |$FC ; A ...| 000004B0: C9 20 53 54 4F 50 20 52 45 41 4C 2D 54 49 4D 45 |. STOP REAL-TIME| 000004C0: 20 53 54 41 54 55 53 20 42 59 54 45 0D 4D 43 4C | STATUS BYTE.MCL| 000004D0: 4F 43 4B 20 20 20 20 3D 20 20 20 20 24 46 38 20 |OCK = $F8 | 000004E0: 20 20 20 20 20 3B 20 41 20 CD C9 C4 C9 20 43 4C | ; A .... CL| 000004F0: 4F 43 4B 20 52 45 41 4C 2D 54 49 4D 45 20 53 54 |OCK REAL-TIME ST| 00000500: 41 54 55 53 20 42 59 54 45 0D 0D 20 20 20 20 20 |ATUS BYTE.. | 00000510: 20 20 20 20 20 4A 4D 50 20 43 24 53 54 41 52 54 | JMP C$START| 00000520: 20 20 20 3B 20 49 4E 20 43 41 53 45 20 54 48 49 | ; IN CASE THI| 00000530: 53 20 4D 4F 44 55 4C 45 20 4C 49 4E 4B 45 44 20 |S MODULE LINKED | 00000540: 46 49 52 53 54 0D 0D 3B 20 4C 4F 43 41 4C 20 56 |FIRST..; LOCAL V| 00000550: 41 52 49 41 42 4C 45 53 0D 0D 4F 4C 44 56 45 43 |ARIABLES..OLDVEC| 00000560: 20 20 20 20 2E 57 4F 52 44 20 30 20 20 20 20 20 | .WORD 0 | 00000570: 20 20 3B 20 57 4F 52 44 20 48 4F 4C 44 53 20 4F | ; WORD HOLDS O| 00000580: 52 49 47 49 4E 41 4C 20 C9 D2 D1 20 56 45 43 54 |RIGINAL ... VECT| 00000590: 4F 52 0D 42 55 46 42 45 47 20 20 20 20 2E 57 4F |OR.BUFBEG .WO| 000005A0: 52 44 20 30 20 20 20 20 20 20 20 3B 20 57 4F 52 |RD 0 ; WOR| 000005B0: 44 20 48 4F 4C 44 53 20 CD C9 C4 C9 20 42 55 46 |D HOLDS .... BUF| 000005C0: 46 45 52 20 53 54 41 52 54 20 41 44 44 52 45 53 |FER START ADDRES| 000005D0: 53 0D 42 55 46 45 4E 44 20 20 20 20 2E 57 4F 52 |S.BUFEND .WOR| 000005E0: 44 20 30 20 20 20 20 20 20 20 3B 20 57 4F 52 44 |D 0 ; WORD| 000005F0: 20 48 4F 4C 44 53 20 CD C9 C4 C9 20 42 55 46 46 | HOLDS .... BUFF| 00000600: 45 52 20 45 4E 44 20 41 44 44 52 45 53 53 20 2B |ER END ADDRESS +| 00000610: 20 31 0D 52 45 53 45 54 20 20 20 20 20 2E 42 59 | 1.RESET .BY| 00000620: 54 45 20 30 20 20 20 20 20 20 20 3B 20 CD C9 C4 |TE 0 ; ...| 00000630: C9 20 49 4E 54 45 52 46 41 43 45 20 43 4F 4E 54 |. INTERFACE CONT| 00000640: 52 4F 4C 20 43 4F 44 45 20 54 4F 20 52 45 53 45 |ROL CODE TO RESE| 00000650: 54 20 49 4E 54 45 52 46 41 43 45 0D 45 4E 41 42 |T INTERFACE.ENAB| 00000660: 4C 45 20 20 20 20 2E 42 59 54 45 20 30 20 20 20 |LE .BYTE 0 | 00000670: 20 20 20 20 3B 20 CD C9 C4 C9 20 49 4E 54 45 52 | ; .... INTER| 00000680: 46 41 43 45 20 43 4F 4E 54 52 4F 4C 20 43 4F 44 |FACE CONTROL COD| 00000690: 45 20 54 4F 20 45 4E 41 42 4C 45 20 57 2F 49 4E |E TO ENABLE W/IN| 000006A0: 54 45 52 52 55 50 54 0D 54 49 4D 45 52 4F 4E 20 |TERRUPT.TIMERON | 000006B0: 20 20 2E 42 59 54 45 20 30 20 20 20 20 20 20 20 | .BYTE 0 | 000006C0: 3B 20 46 4C 41 47 20 4E 4F 4E 2D 5A 45 52 4F 20 |; FLAG NON-ZERO | 000006D0: 49 46 20 4A 49 46 46 59 20 49 4E 54 45 52 52 55 |IF JIFFY INTERRU| 000006E0: 50 54 53 20 47 45 4E 45 52 41 54 45 20 CD C9 C4 |PTS GENERATE ...| 000006F0: C9 20 43 4C 4F 43 4B 0D 0D 3B 20 48 4F 4F 4B 20 |. CLOCK..; HOOK | 00000700: 46 55 4E 43 54 49 4F 4E 20 28 43 41 4C 4C 41 42 |FUNCTION (CALLAB| 00000710: 4C 45 20 46 52 4F 4D 20 C3 29 0D 3B 20 56 4F 49 |LE FROM .).; VOI| 00000720: 44 20 48 4F 4F 4B 4D 49 44 49 28 42 55 46 46 45 |D HOOKMIDI(BUFFE| 00000730: 52 53 54 41 52 54 2C 42 55 46 46 45 52 45 4E 44 |RSTART,BUFFEREND| 00000740: 2C 42 55 46 46 45 52 50 4F 49 4E 54 45 52 2C 4D |,BUFFERPOINTER,M| 00000750: 49 44 49 50 41 52 41 4D 45 54 45 52 53 29 0D 3B |IDIPARAMETERS).;| 00000760: 20 20 43 48 41 52 20 2A 42 55 46 46 45 52 53 54 | CHAR *BUFFERST| 00000770: 41 52 54 3B 20 20 20 20 20 20 20 20 20 20 20 20 |ART; | 00000780: 20 20 20 20 20 3B 20 42 55 46 46 45 52 20 53 54 | ; BUFFER ST| 00000790: 41 52 54 20 41 44 44 52 45 53 53 0D 3B 20 20 43 |ART ADDRESS.; C| 000007A0: 48 41 52 20 2A 42 55 46 46 45 52 45 4E 44 3B 20 |HAR *BUFFEREND; | 000007B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000007C0: 20 20 3B 20 42 55 46 46 45 52 20 45 4E 44 20 41 | ; BUFFER END A| 000007D0: 44 44 52 45 53 53 0D 3B 20 20 43 48 41 52 20 2A |DDRESS.; CHAR *| 000007E0: 2A 42 55 46 46 45 52 50 4F 49 4E 54 45 52 3B 20 |*BUFFERPOINTER; | 000007F0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3B 20 41 | ; A| 00000800: 44 44 52 45 53 53 20 54 4F 20 53 54 4F 52 45 20 |DDRESS TO STORE | 00000810: 43 55 52 52 45 4E 54 20 42 55 46 46 45 52 20 41 |CURRENT BUFFER A| 00000820: 44 44 52 0D 3B 20 20 53 54 52 55 43 54 20 4D 49 |DDR.; STRUCT MI| 00000830: 44 49 50 41 52 41 4D 53 20 2A 4D 49 44 49 50 41 |DIPARAMS *MIDIPA| 00000840: 52 41 4D 45 54 45 52 53 3B 20 3B 20 41 44 44 52 |RAMETERS; ; ADDR| 00000850: 45 53 53 20 4F 46 20 4D 49 44 49 20 50 41 52 41 |ESS OF MIDI PARA| 00000860: 4D 45 54 45 52 20 53 54 52 55 43 54 55 52 45 0D |METER STRUCTURE.| 00000870: 0D 48 4F 4F 4B 4D 49 44 49 20 20 4A 53 52 20 43 |.HOOKMIDI JSR C| 00000880: 24 46 55 4E 43 54 A4 49 4E 49 54 20 20 20 20 20 |$FUNCT.INIT | 00000890: 20 20 20 20 20 20 20 3B 20 C3 2D 50 4F 57 45 52 | ; .-POWER| 000008A0: 20 4E 4F 4E 2D 52 45 45 4E 54 52 41 4E 54 20 45 | NON-REENTRANT E| 000008B0: 4E 54 52 59 0D 20 20 20 20 20 20 20 20 20 20 4C |NTRY. L| 000008C0: 44 41 20 50 41 52 4D 42 41 53 45 2C 58 20 20 20 |DA PARMBASE,X | 000008D0: 20 20 20 20 20 20 20 20 20 20 20 3B 20 46 45 54 | ; FET| 000008E0: 43 48 20 41 4E 44 20 53 41 56 45 20 42 55 46 46 |CH AND SAVE BUFF| 000008F0: 45 52 20 53 54 41 52 54 20 41 44 44 52 45 53 53 |ER START ADDRESS| 00000900: 0D 20 20 20 20 20 20 20 20 20 20 53 54 41 20 42 |. STA B| 00000910: 55 46 42 45 47 0D 20 20 20 20 20 20 20 20 20 20 |UFBEG. | 00000920: 53 54 41 20 42 55 46 50 54 52 0D 20 20 20 20 20 |STA BUFPTR. | 00000930: 20 20 20 20 20 4C 44 41 20 50 41 52 4D 42 41 53 | LDA PARMBAS| 00000940: 45 2B 31 2C 58 0D 20 20 20 20 20 20 20 20 20 20 |E+1,X. | 00000950: 53 54 41 20 42 55 46 42 45 47 2B 31 0D 20 20 20 |STA BUFBEG+1. | 00000960: 20 20 20 20 20 20 20 53 54 41 20 42 55 46 50 54 | STA BUFPT| 00000970: 52 2B 31 0D 20 20 20 20 20 20 20 20 20 20 4C 44 |R+1. LD| 00000980: 41 20 50 41 52 4D 42 41 53 45 2B 32 2C 58 20 20 |A PARMBASE+2,X | 00000990: 20 20 20 20 20 20 20 20 20 20 3B 20 46 45 54 43 | ; FETC| 000009A0: 48 20 41 4E 44 20 53 41 56 45 20 42 55 46 46 45 |H AND SAVE BUFFE| 000009B0: 52 20 45 4E 44 20 41 44 44 52 45 53 53 0D 20 20 |R END ADDRESS. | 000009C0: 20 20 20 20 20 20 20 20 53 54 41 20 42 55 46 45 | STA BUFE| 000009D0: 4E 44 0D 20 20 20 20 20 20 20 20 20 20 4C 44 41 |ND. LDA| 000009E0: 20 50 41 52 4D 42 41 53 45 2B 33 2C 58 0D 20 20 | PARMBASE+3,X. | 000009F0: 20 20 20 20 20 20 20 20 53 54 41 20 42 55 46 45 | STA BUFE| 00000A00: 4E 44 2B 31 0D 20 20 20 20 20 20 20 20 20 20 4C |ND+1. L| 00000A10: 44 41 20 50 41 52 4D 42 41 53 45 2B 36 2C 58 20 |DA PARMBASE+6,X | 00000A20: 20 20 20 20 20 20 20 20 20 20 20 3B 20 46 45 54 | ; FET| 00000A30: 43 48 20 50 4F 49 4E 54 45 52 20 54 4F 20 50 41 |CH POINTER TO PA| 00000A40: 52 41 4D 45 54 45 52 20 53 54 52 55 43 54 55 52 |RAMETER STRUCTUR| 00000A50: 45 0D 20 20 20 20 20 20 20 20 20 20 53 54 41 20 |E. STA | 00000A60: 50 54 52 0D 20 20 20 20 20 20 20 20 20 20 4C 44 |PTR. LD| 00000A70: 41 20 50 41 52 4D 42 41 53 45 2B 37 2C 58 0D 20 |A PARMBASE+7,X. | 00000A80: 20 20 20 20 20 20 20 20 20 53 54 41 20 50 54 52 | STA PTR| 00000A90: 2B 31 0D 20 20 20 20 20 20 20 20 20 20 4C 44 59 |+1. LDY| 00000AA0: 20 23 30 20 20 20 20 20 20 20 20 20 20 20 20 20 | #0 | 00000AB0: 20 20 20 20 20 20 20 20 20 3B 20 46 45 54 43 48 | ; FETCH| 00000AC0: 2F 53 41 56 45 20 49 4E 44 49 56 49 44 55 41 4C |/SAVE INDIVIDUAL| 00000AD0: 20 CD C9 C4 C9 20 50 41 52 41 4D 45 54 45 52 53 | .... PARAMETERS| 00000AE0: 0D 20 20 20 20 20 20 20 20 20 20 4C 44 41 20 28 |. LDA (| 00000AF0: 50 54 52 29 2C 59 20 20 20 20 20 20 20 20 20 20 |PTR),Y | 00000B00: 20 20 20 20 20 20 20 3B 20 2E 2E 2E 20 43 4F 4E | ; ... CON| 00000B10: 54 52 4F 4C 20 52 45 47 49 53 54 45 52 20 41 44 |TROL REGISTER AD| 00000B20: 44 52 45 53 53 0D 20 20 20 20 20 20 20 20 20 20 |DRESS. | 00000B30: 53 54 41 20 43 4F 4E 54 52 4F 4C 0D 20 20 20 20 |STA CONTROL. | 00000B40: 20 20 20 20 20 20 49 4E 59 0D 20 20 20 20 20 20 | INY. | 00000B50: 20 20 20 20 4C 44 41 20 28 50 54 52 29 2C 59 0D | LDA (PTR),Y.| 00000B60: 20 20 20 20 20 20 20 20 20 20 53 54 41 20 43 4F | STA CO| 00000B70: 4E 54 52 4F 4C 2B 31 0D 20 20 20 20 20 20 20 20 |NTROL+1. | 00000B80: 20 20 49 4E 59 0D 20 20 20 20 20 20 20 20 20 20 | INY. | 00000B90: 4C 44 41 20 28 50 54 52 29 2C 59 20 20 20 20 20 |LDA (PTR),Y | 00000BA0: 20 20 20 20 20 20 20 20 20 20 20 20 3B 20 2E 2E | ; ..| 00000BB0: 2E 20 54 52 41 4E 53 4D 49 54 20 44 41 54 41 20 |. TRANSMIT DATA | 00000BC0: 52 45 47 49 53 54 45 52 20 41 44 44 52 45 53 53 |REGISTER ADDRESS| 00000BD0: 0D 20 20 20 20 20 20 20 20 20 20 53 54 41 20 54 |. STA T| 00000BE0: 58 44 41 54 41 0D 20 20 20 20 20 20 20 20 20 20 |XDATA. | 00000BF0: 49 4E 59 0D 20 20 20 20 20 20 20 20 20 20 4C 44 |INY. LD| 00000C00: 41 20 28 50 54 52 29 2C 59 0D 20 20 20 20 20 20 |A (PTR),Y. | 00000C10: 20 20 20 20 53 54 41 20 54 58 44 41 54 41 2B 31 | STA TXDATA+1| 00000C20: 0D 20 20 20 20 20 20 20 20 20 20 49 4E 59 0D 20 |. INY. | 00000C30: 20 20 20 20 20 20 20 20 20 4C 44 41 20 28 50 54 | LDA (PT| 00000C40: 52 29 2C 59 20 20 20 20 20 20 20 20 20 20 20 20 |R),Y | 00000C50: 20 20 20 20 20 3B 20 2E 2E 2E 20 53 54 41 54 55 | ; ... STATU| 00000C60: 53 20 52 45 47 49 53 54 45 52 20 41 44 44 52 45 |S REGISTER ADDRE| 00000C70: 53 53 0D 20 20 20 20 20 20 20 20 20 20 53 54 41 |SS. STA| 00000C80: 20 53 54 41 54 55 53 0D 20 20 20 20 20 20 20 20 | STATUS. | 00000C90: 20 20 49 4E 59 0D 20 20 20 20 20 20 20 20 20 20 | INY. | 00000CA0: 4C 44 41 20 28 50 54 52 29 2C 59 0D 20 20 20 20 |LDA (PTR),Y. | 00000CB0: 20 20 20 20 20 20 53 54 41 20 53 54 41 54 55 53 | STA STATUS| 00000CC0: 2B 31 0D 20 20 20 20 20 20 20 20 20 20 49 4E 59 |+1. INY| 00000CD0: 0D 20 20 20 20 20 20 20 20 20 20 4C 44 41 20 28 |. LDA (| 00000CE0: 50 54 52 29 2C 59 20 20 20 20 20 20 20 20 20 20 |PTR),Y | 00000CF0: 20 20 20 20 20 20 20 3B 20 2E 2E 2E 20 52 45 43 | ; ... REC| 00000D00: 45 49 56 45 20 44 41 54 41 20 52 45 47 49 53 54 |EIVE DATA REGIST| 00000D10: 45 52 20 41 44 44 52 45 53 53 0D 20 20 20 20 20 |ER ADDRESS. | 00000D20: 20 20 20 20 20 53 54 41 20 52 58 44 41 54 41 0D | STA RXDATA.| 00000D30: 20 20 20 20 20 20 20 20 20 20 49 4E 59 0D 20 20 | INY. | 00000D40: 20 20 20 20 20 20 20 20 4C 44 41 20 28 50 54 52 | LDA (PTR| 00000D50: 29 2C 59 0D 20 20 20 20 20 20 20 20 20 20 53 54 |),Y. ST| 00000D60: 41 20 52 58 44 41 54 41 2B 31 0D 20 20 20 20 20 |A RXDATA+1. | 00000D70: 20 20 20 20 20 49 4E 59 0D 20 20 20 20 20 20 20 | INY. | 00000D80: 20 20 20 4C 44 41 20 28 50 54 52 29 2C 59 20 20 | LDA (PTR),Y | 00000D90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3B | ;| 00000DA0: 20 2E 2E 2E 20 52 45 53 45 54 20 43 4F 4E 54 52 | ... RESET CONTR| 00000DB0: 4F 4C 20 42 59 54 45 20 0D 20 20 20 20 20 20 20 |OL BYTE . | 00000DC0: 20 20 20 53 54 41 20 52 45 53 45 54 0D 20 20 20 | STA RESET. | 00000DD0: 20 20 20 20 20 20 20 49 4E 59 0D 20 20 20 20 20 | INY. | 00000DE0: 20 20 20 20 20 4C 44 41 20 28 50 54 52 29 2C 59 | LDA (PTR),Y| 00000DF0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000E00: 20 3B 20 2E 2E 2E 20 45 4E 41 42 4C 45 20 43 4F | ; ... ENABLE CO| 00000E10: 4E 54 52 4F 4C 20 42 59 54 45 0D 20 20 20 20 20 |NTROL BYTE. | 00000E20: 20 20 20 20 20 53 54 41 20 45 4E 41 42 4C 45 0D | STA ENABLE.| 00000E30: 20 20 20 20 20 20 20 20 20 20 4C 44 41 20 50 41 | LDA PA| 00000E40: 52 4D 42 41 53 45 2B 34 2C 58 20 20 20 20 20 20 |RMBASE+4,X | 00000E50: 20 20 20 20 20 20 3B 20 46 45 54 43 48 2F 53 41 | ; FETCH/SA| 00000E60: 56 45 20 41 44 44 52 20 54 4F 20 52 45 54 55 52 |VE ADDR TO RETUR| 00000E70: 4E 20 42 55 46 46 45 52 20 41 44 44 52 0D 20 20 |N BUFFER ADDR. | 00000E80: 20 20 20 20 20 20 20 20 53 54 41 20 50 54 52 0D | STA PTR.| 00000E90: 20 20 20 20 20 20 20 20 20 20 4C 44 41 20 50 41 | LDA PA| 00000EA0: 52 4D 42 41 53 45 2B 35 2C 58 0D 20 20 20 20 20 |RMBASE+5,X. | 00000EB0: 20 20 20 20 20 53 54 41 20 50 54 52 2B 31 0D 0D | STA PTR+1..| 00000EC0: 20 20 20 20 20 20 20 20 20 20 4C 44 41 20 52 45 | LDA RE| 00000ED0: 53 45 54 20 20 20 20 20 20 20 20 20 20 20 20 20 |SET | 00000EE0: 20 20 20 20 20 20 3B 20 53 45 54 20 55 50 20 49 | ; SET UP I| 00000EF0: 4E 54 45 52 46 41 43 45 20 46 4F 52 20 52 45 43 |NTERFACE FOR REC| 00000F00: 45 50 54 49 4F 4E 20 57 2F 49 4E 54 52 2E 0D 20 |EPTION W/INTR.. | 00000F10: 20 20 20 20 20 20 20 20 20 4C 44 59 20 23 30 0D | LDY #0.| 00000F20: 20 20 20 20 20 20 20 20 20 20 53 54 41 20 28 43 | STA (C| 00000F30: 4F 4E 54 52 4F 4C 29 2C 59 0D 20 20 20 20 20 20 |ONTROL),Y. | 00000F40: 20 20 20 20 4C 44 41 20 45 4E 41 42 4C 45 0D 20 | LDA ENABLE. | 00000F50: 20 20 20 20 20 20 20 20 20 53 54 41 20 28 43 4F | STA (CO| 00000F60: 4E 54 52 4F 4C 29 2C 59 0D 0D 20 20 20 20 20 20 |NTROL),Y.. | 00000F70: 20 20 20 20 53 45 49 20 20 20 20 20 20 20 20 20 | SEI | 00000F80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000F90: 3B 20 50 41 54 43 48 20 CD C9 C4 C9 20 57 45 44 |; PATCH .... WED| 00000FA0: 47 45 20 28 4D 49 44 49 57 44 47 29 20 49 4E 54 |GE (MIDIWDG) INT| 00000FB0: 4F 20 C9 D2 D1 20 56 45 43 2E 0D 20 20 20 20 20 |O ... VEC.. | 00000FC0: 20 20 20 20 20 4C 44 41 20 43 49 4E 56 0D 20 20 | LDA CINV. | 00000FD0: 20 20 20 20 20 20 20 20 53 54 41 20 4F 4C 44 56 | STA OLDV| 00000FE0: 45 43 0D 20 20 20 20 20 20 20 20 20 20 4C 44 41 |EC. LDA| 00000FF0: 20 43 49 4E 56 2B 31 0D 20 20 20 20 20 20 20 20 | CINV+1. | 00001000: 20 20 53 54 41 20 4F 4C 44 56 45 43 2B 31 0D 20 | STA OLDVEC+1. | 00001010: 20 20 20 20 20 20 20 20 20 4C 44 41 20 23 3C 4D | LDA #<M| 00001020: 49 44 49 57 44 47 0D 20 20 20 20 20 20 20 20 20 |IDIWDG. | 00001030: 20 53 54 41 20 43 49 4E 56 0D 20 20 20 20 20 20 | STA CINV. | 00001040: 20 20 20 20 4C 44 41 20 23 3E 4D 49 44 49 57 44 | LDA #>MIDIWD| 00001050: 47 0D 20 20 20 20 20 20 20 20 20 20 53 54 41 20 |G. STA | 00001060: 43 49 4E 56 2B 31 0D 20 20 20 20 20 20 20 20 20 |CINV+1. | 00001070: 20 43 4C 49 0D 20 20 20 20 20 20 20 20 20 20 52 | CLI. R| 00001080: 54 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |TS | 00001090: 20 20 20 20 20 20 20 20 20 20 20 3B 20 52 45 54 | ; RET| 000010A0: 55 52 4E 20 46 52 4F 4D 20 43 41 4C 4C 41 42 4C |URN FROM CALLABL| 000010B0: 45 20 C3 20 46 55 4E 43 54 49 4F 4E 0D 0D 0D 3B |E . FUNCTION...;| 000010C0: 20 CD C9 C4 C9 20 57 45 44 47 45 20 43 41 4C 4C | .... WEDGE CALL| 000010D0: 45 44 20 45 56 45 52 59 54 49 4D 45 20 41 4E 20 |ED EVERYTIME AN | 000010E0: C9 D2 D1 20 49 4E 54 45 52 52 55 50 54 20 4F 43 |... INTERRUPT OC| 000010F0: 43 55 52 53 0D 0D 3B 20 49 4E 49 54 49 41 4C 20 |CURS..; INITIAL | 00001100: 43 4C 41 53 53 49 46 49 43 41 54 49 4F 4E 20 4F |CLASSIFICATION O| 00001110: 46 20 49 4E 54 45 52 52 55 50 54 0D 4D 49 44 49 |F INTERRUPT.MIDI| 00001120: 57 44 47 20 20 20 4C 44 59 20 23 30 20 20 20 20 |WDG LDY #0 | 00001130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001140: 20 20 3B 20 53 45 45 20 49 46 20 CD C9 C4 C9 20 | ; SEE IF .... | 00001150: 49 4E 54 45 52 46 41 43 45 20 49 4E 54 45 52 52 |INTERFACE INTERR| 00001160: 55 50 54 45 44 0D 20 20 20 20 20 20 20 20 20 20 |UPTED. | 00001170: 4C 44 41 20 28 53 54 41 54 55 53 29 2C 59 0D 20 |LDA (STATUS),Y. | 00001180: 20 20 20 20 20 20 20 20 20 41 4E 44 20 23 31 0D | AND #1.| 00001190: 20 20 20 20 20 20 20 20 20 20 42 4E 45 20 42 59 | BNE BY| 000011A0: 54 45 48 45 52 45 20 20 20 20 20 20 20 20 20 20 |TEHERE | 000011B0: 20 20 20 20 20 20 3B 20 59 45 53 20 49 54 20 44 | ; YES IT D| 000011C0: 49 44 20 2D 20 47 4F 20 50 52 4F 43 45 53 53 20 |ID - GO PROCESS | 000011D0: 52 45 43 45 49 56 45 44 20 42 59 54 45 0D 0D 3B |RECEIVED BYTE..;| 000011E0: 20 43 48 45 43 4B 20 46 4F 52 20 41 4E 44 20 50 | CHECK FOR AND P| 000011F0: 52 4F 43 45 53 53 20 C6 31 2F C6 37 20 4B 45 59 |ROCESS .1/.7 KEY| 00001200: 53 0D 54 49 4D 45 52 20 20 20 20 20 4C 44 41 20 |S.TIMER LDA | 00001210: 4E 44 58 20 20 20 20 20 20 20 20 20 20 20 20 20 |NDX | 00001220: 20 20 20 20 20 20 20 20 3B 20 4E 4F 2C 20 4D 55 | ; NO, MU| 00001230: 53 54 20 42 45 20 4A 49 46 46 59 20 2D 20 49 53 |ST BE JIFFY - IS| 00001240: 20 41 20 4B 45 59 20 51 55 45 55 45 44 20 55 50 | A KEY QUEUED UP| 00001250: 3F 0D 20 20 20 20 20 20 20 20 20 20 42 45 51 20 |?. BEQ | 00001260: 45 4E 44 4B 45 59 53 20 20 20 20 20 20 20 20 20 |ENDKEYS | 00001270: 20 20 20 20 20 20 20 20 3B 20 4E 4F 20 4B 45 59 | ; NO KEY| 00001280: 53 20 54 4F 20 50 52 4F 43 45 53 53 0D 20 20 20 |S TO PROCESS. | 00001290: 20 20 20 20 20 20 20 4C 44 41 20 23 30 20 20 20 | LDA #0 | 000012A0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000012B0: 20 20 20 3B 20 50 52 4F 43 45 53 53 20 41 20 4B | ; PROCESS A K| 000012C0: 45 59 20 2D 20 46 49 52 53 54 20 43 4C 45 41 52 |EY - FIRST CLEAR| 000012D0: 20 51 55 45 55 45 44 20 4B 45 59 53 0D 20 20 20 | QUEUED KEYS. | 000012E0: 20 20 20 20 20 20 20 53 54 41 20 4E 44 58 0D 20 | STA NDX. | 000012F0: 20 20 20 20 20 20 20 20 20 4C 44 41 20 4B 45 59 | LDA KEY| 00001300: 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |D | 00001310: 20 20 20 20 20 3B 20 4C 4F 4F 4B 20 41 54 20 4B | ; LOOK AT K| 00001320: 45 59 20 51 55 45 55 45 44 0D 20 20 20 20 20 20 |EY QUEUED. | 00001330: 20 20 20 20 43 4D 50 20 23 46 31 43 4F 44 45 20 | CMP #F1CODE | 00001340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001350: 3B 20 57 41 53 20 49 54 20 C6 31 3F 0D 20 20 20 |; WAS IT .1?. | 00001360: 20 20 20 20 20 20 20 42 4E 45 20 4E 4F 54 46 31 | BNE NOTF1| 00001370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001380: 20 20 20 3B 20 4E 4F 0D 20 20 20 20 20 20 20 20 | ; NO. | 00001390: 20 20 4C 44 41 20 23 31 20 20 20 20 20 20 20 20 | LDA #1 | 000013A0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3B 20 | ; | 000013B0: 59 45 53 2C 20 46 4C 41 47 20 54 49 4D 45 52 20 |YES, FLAG TIMER | 000013C0: 4F 4E 0D 20 20 20 20 20 20 20 20 20 20 53 54 41 |ON. STA| 000013D0: 20 54 49 4D 45 52 4F 4E 0D 20 20 20 20 20 20 20 | TIMERON. | 000013E0: 20 20 20 4C 44 41 20 23 4D 53 54 41 52 54 20 20 | LDA #MSTART | 000013F0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3B | ;| 00001400: 20 41 4E 44 20 47 4F 20 50 55 54 20 41 20 53 54 | AND GO PUT A ST| 00001410: 41 52 54 20 42 59 54 45 20 49 4E 20 CD C9 C4 C9 |ART BYTE IN ....| 00001420: 20 53 54 52 45 41 4D 0D 20 20 20 20 20 20 20 20 | STREAM. | 00001430: 20 20 42 4E 45 20 41 52 42 42 59 54 45 0D 4E 4F | BNE ARBBYTE.NO| 00001440: 54 46 31 20 20 20 20 20 43 4D 50 20 23 46 37 43 |TF1 CMP #F7C| 00001450: 4F 44 45 20 20 20 20 20 20 20 20 20 20 20 20 20 |ODE | 00001460: 20 20 20 20 3B 20 57 41 53 20 4B 45 59 20 C6 37 | ; WAS KEY .7| 00001470: 3F 0D 20 20 20 20 20 20 20 20 20 20 42 4E 45 20 |?. BNE | 00001480: 45 4E 44 4B 45 59 53 20 20 20 20 20 20 20 20 20 |ENDKEYS | 00001490: 20 20 20 20 20 20 20 20 3B 20 4E 4F 2C 20 49 47 | ; NO, IG| 000014A0: 4E 4F 52 45 20 41 4E 59 20 4F 54 48 45 52 20 4B |NORE ANY OTHER K| 000014B0: 45 59 53 0D 20 20 20 20 20 20 20 20 20 20 4C 44 |EYS. LD| 000014C0: 41 20 23 30 20 20 20 20 20 20 20 20 20 20 20 20 |A #0 | 000014D0: 20 20 20 20 20 20 20 20 20 20 3B 20 59 45 53 2C | ; YES,| 000014E0: 20 46 4C 41 47 20 54 49 4D 45 52 20 4F 46 46 0D | FLAG TIMER OFF.| 000014F0: 20 20 20 20 20 20 20 20 20 20 53 54 41 20 54 49 | STA TI| 00001500: 4D 45 52 4F 4E 0D 20 20 20 20 20 20 20 20 20 20 |MERON. | 00001510: 4C 44 41 20 23 4D 53 54 4F 50 20 20 20 20 20 20 |LDA #MSTOP | 00001520: 20 20 20 20 20 20 20 20 20 20 20 20 3B 20 41 4E | ; AN| 00001530: 44 20 47 4F 20 50 55 54 20 41 20 53 54 4F 50 20 |D GO PUT A STOP | 00001540: 42 59 54 45 20 49 4E 20 CD C9 C4 C9 20 53 54 52 |BYTE IN .... STR| 00001550: 45 41 4D 0D 20 20 20 20 20 20 20 20 20 20 42 4E |EAM. BN| 00001560: 45 20 41 52 42 42 59 54 45 0D 0D 3B 20 47 45 4E |E ARBBYTE..; GEN| 00001570: 45 52 41 54 45 20 50 53 45 55 44 4F 20 4D 49 44 |ERATE PSEUDO MID| 00001580: 49 2D 43 4C 4F 43 4B 20 42 41 53 45 44 20 4F 4E |I-CLOCK BASED ON| 00001590: 20 4A 49 46 46 59 20 54 49 4D 45 52 20 49 46 20 | JIFFY TIMER IF | 000015A0: 52 45 51 55 49 52 45 44 0D 45 4E 44 4B 45 59 53 |REQUIRED.ENDKEYS| 000015B0: 20 20 20 4C 44 41 20 54 49 4D 45 52 4F 4E 20 20 | LDA TIMERON | 000015C0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3B | ;| 000015D0: 20 49 53 20 4A 49 46 46 59 20 54 49 4D 45 52 20 | IS JIFFY TIMER | 000015E0: 47 45 4E 45 52 41 54 45 44 20 CD C9 C4 C9 20 43 |GENERATED .... C| 000015F0: 4C 4F 43 4B 20 4F 4E 3F 0D 20 20 20 20 20 20 20 |LOCK ON?. | 00001600: 20 20 20 42 45 51 20 45 4E 44 54 49 4D 45 52 20 | BEQ ENDTIMER | 00001610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3B | ;| 00001620: 20 4E 4F 2C 20 4A 55 53 54 20 4C 45 54 20 4B 45 | NO, JUST LET KE| 00001630: 52 4E 41 4C 20 50 52 4F 43 45 53 53 20 54 48 49 |RNAL PROCESS THI| 00001640: 53 20 C9 D2 D1 0D 20 20 20 20 20 20 20 20 20 20 |S .... | 00001650: 43 4D 50 20 23 31 20 20 20 20 20 20 20 20 20 20 |CMP #1 | 00001660: 20 20 20 20 20 20 20 20 20 20 20 20 3B 20 59 45 | ; YE| 00001670: 53 2C 20 49 53 20 54 48 49 53 20 46 49 52 53 54 |S, IS THIS FIRST| 00001680: 20 49 4E 54 45 52 52 55 50 54 20 54 48 49 53 20 | INTERRUPT THIS | 00001690: 4A 49 46 46 59 3F 0D 20 20 20 20 20 20 20 20 20 |JIFFY?. | 000016A0: 20 42 4E 45 20 44 4F 4B 45 52 4E 41 4C 20 20 20 | BNE DOKERNAL | 000016B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3B 20 4E | ; N| 000016C0: 4F 2C 20 4A 55 53 54 20 4C 45 54 20 4B 45 52 4E |O, JUST LET KERN| 000016D0: 41 4C 20 50 52 4F 43 45 53 53 20 54 48 49 53 20 |AL PROCESS THIS | 000016E0: C9 D2 D1 0D 20 20 20 20 20 20 20 20 20 20 49 4E |.... IN| 000016F0: 43 20 54 49 4D 45 52 4F 4E 20 20 20 20 20 20 20 |C TIMERON | 00001700: 20 20 20 20 20 20 20 20 20 20 3B 20 53 45 54 20 | ; SET | 00001710: 55 50 20 54 4F 20 4C 45 54 20 54 48 49 53 20 4A |UP TO LET THIS J| 00001720: 49 46 46 59 20 C9 D2 D1 20 47 4F 20 42 59 20 4C |IFFY ... GO BY L| 00001730: 41 54 45 52 0D 20 20 20 20 20 20 20 20 20 20 4C |ATER. L| 00001740: 44 41 20 23 4D 43 4C 4F 43 4B 20 20 20 20 20 20 |DA #MCLOCK | 00001750: 20 20 20 20 20 20 20 20 20 20 20 3B 20 41 4E 44 | ; AND| 00001760: 20 47 4F 20 50 55 54 20 41 20 43 4C 4F 43 4B 20 | GO PUT A CLOCK | 00001770: 42 59 54 45 20 49 4E 20 CD C9 C4 C9 20 53 54 52 |BYTE IN .... STR| 00001780: 45 41 4D 0D 20 20 20 20 20 20 20 20 20 20 42 4E |EAM. BN| 00001790: 45 20 41 52 42 42 59 54 45 0D 44 4F 4B 45 52 4E |E ARBBYTE.DOKERN| 000017A0: 41 4C 20 20 44 45 43 20 54 49 4D 45 52 4F 4E 20 |AL DEC TIMERON | 000017B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000017C0: 3B 20 53 45 54 20 55 50 20 54 4F 20 47 45 4E 20 |; SET UP TO GEN | 000017D0: 43 4C 4F 43 4B 20 42 59 54 45 20 4E 45 58 54 20 |CLOCK BYTE NEXT | 000017E0: 4A 49 46 46 59 20 C9 D2 D1 0D 45 4E 44 54 49 4D |JIFFY ....ENDTIM| 000017F0: 45 52 20 20 4A 4D 50 20 28 4F 4C 44 56 45 43 29 |ER JMP (OLDVEC)| 00001800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001810: 3B 20 4B 45 52 4E 41 4C 20 57 49 4C 4C 20 43 4C |; KERNAL WILL CL| 00001820: 45 41 52 20 4A 49 46 46 59 20 C9 D2 D1 20 43 41 |EAR JIFFY ... CA| 00001830: 55 53 45 0D 0D 3B 20 42 55 46 46 45 52 20 49 4E |USE..; BUFFER IN| 00001840: 43 4F 4D 49 4E 47 20 44 41 54 41 20 46 52 4F 4D |COMING DATA FROM| 00001850: 20 CD C9 C4 C9 20 49 4E 54 45 52 46 41 43 45 0D | .... INTERFACE.| 00001860: 42 59 54 45 48 45 52 45 20 20 4C 44 41 20 28 52 |BYTEHERE LDA (R| 00001870: 58 44 41 54 41 29 2C 59 20 20 20 20 20 20 20 20 |XDATA),Y | 00001880: 20 20 20 20 20 20 3B 20 46 45 54 43 48 20 52 45 | ; FETCH RE| 00001890: 43 45 49 56 45 44 20 42 59 54 45 20 46 52 4F 4D |CEIVED BYTE FROM| 000018A0: 20 CD C9 C4 C9 20 49 4E 54 45 52 46 41 43 45 0D | .... INTERFACE.| 000018B0: 41 52 42 42 59 54 45 20 20 20 53 54 41 20 28 42 |ARBBYTE STA (B| 000018C0: 55 46 50 54 52 29 2C 59 20 20 20 20 20 20 20 20 |UFPTR),Y | 000018D0: 20 20 20 20 20 20 3B 20 53 54 4F 52 45 20 49 4E | ; STORE IN| 000018E0: 20 55 53 45 52 20 53 50 45 43 49 46 49 45 44 20 | USER SPECIFIED | 000018F0: 42 55 46 46 45 52 0D 20 20 20 20 20 20 20 20 20 |BUFFER. | 00001900: 20 49 4E 43 20 42 55 46 50 54 52 20 20 20 20 20 | INC BUFPTR | 00001910: 20 20 20 20 20 20 20 20 20 20 20 20 20 3B 20 43 | ; C| 00001920: 49 52 43 55 4C 41 52 4C 59 20 49 4E 43 52 45 4D |IRCULARLY INCREM| 00001930: 45 4E 54 20 42 55 46 46 45 52 20 50 4F 49 4E 54 |ENT BUFFER POINT| 00001940: 45 52 0D 20 20 20 20 20 20 20 20 20 20 42 4E 45 |ER. BNE| 00001950: 20 44 4F 4E 45 49 4E 43 0D 20 20 20 20 20 20 20 | DONEINC. | 00001960: 20 20 20 49 4E 43 20 42 55 46 50 54 52 2B 31 0D | INC BUFPTR+1.| 00001970: 44 4F 4E 45 49 4E 43 20 20 20 4C 44 41 20 42 55 |DONEINC LDA BU| 00001980: 46 50 54 52 0D 20 20 20 20 20 20 20 20 20 20 43 |FPTR. C| 00001990: 4D 50 20 42 55 46 45 4E 44 0D 20 20 20 20 20 20 |MP BUFEND. | 000019A0: 20 20 20 20 42 4E 45 20 4E 4F 54 45 4E 44 0D 20 | BNE NOTEND. | 000019B0: 20 20 20 20 20 20 20 20 20 4C 44 41 20 42 55 46 | LDA BUF| 000019C0: 50 54 52 2B 31 0D 20 20 20 20 20 20 20 20 20 20 |PTR+1. | 000019D0: 43 4D 50 20 42 55 46 45 4E 44 2B 31 0D 20 20 20 |CMP BUFEND+1. | 000019E0: 20 20 20 20 20 20 20 42 4E 45 20 4E 4F 54 45 4E | BNE NOTEN| 000019F0: 44 0D 20 20 20 20 20 20 20 20 20 20 4C 44 41 20 |D. LDA | 00001A00: 42 55 46 42 45 47 0D 20 20 20 20 20 20 20 20 20 |BUFBEG. | 00001A10: 20 53 54 41 20 42 55 46 50 54 52 0D 20 20 20 20 | STA BUFPTR. | 00001A20: 20 20 20 20 20 20 4C 44 41 20 42 55 46 42 45 47 | LDA BUFBEG| 00001A30: 2B 31 0D 20 20 20 20 20 20 20 20 20 20 53 54 41 |+1. STA| 00001A40: 20 42 55 46 50 54 52 2B 31 0D 4E 4F 54 45 4E 44 | BUFPTR+1.NOTEND| 00001A50: 20 20 20 20 4C 44 41 20 42 55 46 50 54 52 20 20 | LDA BUFPTR | 00001A60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001A70: 3B 20 52 45 54 55 52 4E 20 42 55 46 46 45 52 20 |; RETURN BUFFER | 00001A80: 50 4F 49 4E 54 45 52 20 54 4F 20 55 53 45 52 0D |POINTER TO USER.| 00001A90: 20 20 20 20 20 20 20 20 20 20 53 54 41 20 28 50 | STA (P| 00001AA0: 54 52 29 2C 59 0D 20 20 20 20 20 20 20 20 20 20 |TR),Y. | 00001AB0: 4C 44 41 20 42 55 46 50 54 52 2B 31 0D 20 20 20 |LDA BUFPTR+1. | 00001AC0: 20 20 20 20 20 20 20 49 4E 59 0D 20 20 20 20 20 | INY. | 00001AD0: 20 20 20 20 20 53 54 41 20 28 50 54 52 29 2C 59 | STA (PTR),Y| 00001AE0: 0D 20 20 20 20 20 20 20 20 20 20 50 4C 41 20 20 |. PLA | 00001AF0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001B00: 20 20 20 20 20 20 20 3B 20 52 45 54 55 52 4E 20 | ; RETURN | 00001B10: 46 52 4F 4D 20 49 4E 54 45 52 52 55 50 54 20 57 |FROM INTERRUPT W| 00001B20: 49 54 48 4F 55 54 20 47 4F 49 4E 47 0D 20 20 20 |ITHOUT GOING. | 00001B30: 20 20 20 20 20 20 20 54 41 59 20 20 20 20 20 20 | TAY | 00001B40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001B50: 20 20 20 3B 20 54 48 52 4F 55 47 48 20 4B 45 52 | ; THROUGH KER| 00001B60: 4E 41 4C 20 C9 D2 D1 20 48 41 4E 44 4C 45 52 0D |NAL ... HANDLER.| 00001B70: 20 20 20 20 20 20 20 20 20 20 50 4C 41 0D 20 20 | PLA. | 00001B80: 20 20 20 20 20 20 20 20 54 41 58 0D 20 20 20 20 | TAX. | 00001B90: 20 20 20 20 20 20 50 4C 41 0D 20 20 20 20 20 20 | PLA. | 00001BA0: 20 20 20 20 52 54 49 0D | RTI. |
; THIS C-POWER ASSEMBLY MODULE DEFINES F
UNCTION HOOKMIDI, WHICH ENABLES.; MIDI I
NTERFACE RECEPTION AND HOOKS INTO INTERR
UPT HANDLING THREAD FOR.; SUBSEQUENT INT
ERRUPT DRIVEN RECEPTION OF BYTES FROM TH
E MIDI INTERFACE..; FOR V1.0 OF MIDI-SID
-SEQ BY FRANK PRINDLE, 7 SEP 89..
.REF C$FUNCT.INIT. .REF C$ST
ART. .DEF HOOKMIDI..; LOW MEMOR
Y AND CONSTANT DEFINITIONS..CINV =
$0314 ; IRQ INTERRUPT VECTOR.CONTR
OL = $B0 ; WORD HOLDS MIDI CON
TROL REGISTER ADDRESS.TXDATA = $AE
; WORD HOLDS MIDI TRANSMIT DATA RE
GISTER ADDRESS.STATUS = $B4 ;
WORD HOLDS MIDI STATUS REGISTER ADDRESS
.RXDATA = $B2 ; WORD HOLDS MI
DI RECEIVE DATA REGISTER ADDRESS.BUFPTR
= $F7 ; WORD HOLDS MIDI BUFFE
R POINTER.PTR = $F9 ; WORD
HOLDS MIDI BUFFER POINTER RETURN POINTE
R.NDX = $C6 ; NUMBER OF CH
ARACTERS IN KEYBOARD BUFFER.KEYD =
$0277 ; KEYBOARD BUFFER.PARMBASE
= $033C ; C-POWER PARAMETER LIST B
ASE.F1CODE = $85 ; CHARACTER
CODE FOR F1 KEY.F7CODE = $88
; CHARACTER CODE FOR F7 KEY.MSTART =
$FA ; A MIDI START REAL-TIME STA
TUS BYTE.MSTOP = $FC ; A MID
I STOP REAL-TIME STATUS BYTE.MCLOCK =
$F8 ; A MIDI CLOCK REAL-TIME ST
ATUS BYTE.. JMP C$START ; IN
CASE THIS MODULE LINKED FIRST..; LOCAL V
ARIABLES..OLDVEC .WORD 0 ; WORD
HOLDS ORIGINAL IRQ VECTOR.BUFBEG .WO
RD 0 ; WORD HOLDS MIDI BUFFER STAR
T ADDRESS.BUFEND .WORD 0 ; WORD
HOLDS MIDI BUFFER END ADDRESS + 1.RESET
.BYTE 0 ; MIDI INTERFACE CONT
ROL CODE TO RESET INTERFACE.ENABLE .B
YTE 0 ; MIDI INTERFACE CONTROL COD
E TO ENABLE W/INTERRUPT.TIMERON .BYTE
0 ; FLAG NON-ZERO IF JIFFY INTERRU
PTS GENERATE MIDI CLOCK..; HOOK FUNCTION
(CALLABLE FROM C).; VOID HOOKMIDI(BUFFE
RSTART,BUFFEREND,BUFFERPOINTER,MIDIPARAM
ETERS).; CHAR *BUFFERSTART;
; BUFFER START ADDRESS.; CHAR *BUF
FEREND; ; BUFFER END A
DDRESS.; CHAR **BUFFERPOINTER;
; ADDRESS TO STORE CURRENT BUFFER A
DDR.; STRUCT MIDIPARAMS *MIDIPARAMETERS
; ; ADDRESS OF MIDI PARAMETER STRUCTURE.
.HOOKMIDI JSR C$FUNCT.INIT ;
C-POWER NON-REENTRANT ENTRY. L
DA PARMBASE,X ; FETCH AND S
AVE BUFFER START ADDRESS. STA B
UFBEG. STA BUFPTR. LDA
PARMBASE+1,X. STA BUFBEG+1.
STA BUFPTR+1. LDA PARMBA
SE+2,X ; FETCH AND SAVE BUFFE
R END ADDRESS. STA BUFEND.
LDA PARMBASE+3,X. STA BUFE
ND+1. LDA PARMBASE+6,X
; FETCH POINTER TO PARAMETER STRUCTUR
E. STA PTR. LDA PARMBA
SE+7,X. STA PTR+1. LDY
#0 ; FETCH/SAVE IN
DIVIDUAL MIDI PARAMETERS. LDA (
PTR),Y ; ... CONTROL REG
ISTER ADDRESS. STA CONTROL.
INY. LDA (PTR),Y.
STA CONTROL+1. INY.
LDA (PTR),Y ; ... TRANSM
IT DATA REGISTER ADDRESS. STA T
XDATA. INY. LDA (PTR),
Y. STA TXDATA+1. INY.
LDA (PTR),Y ; .
.. STATUS REGISTER ADDRESS. STA
STATUS. INY. LDA (PTR
),Y. STA STATUS+1. INY
. LDA (PTR),Y ;
... RECEIVE DATA REGISTER ADDRESS.
STA RXDATA. INY.
LDA (PTR),Y. STA RXDATA+1.
INY. LDA (PTR),Y
; ... RESET CONTROL BYTE .
STA RESET. INY. LDA
(PTR),Y ; ... ENABLE CO
NTROL BYTE. STA ENABLE.
LDA PARMBASE+4,X ; FETCH/SA
VE ADDR TO RETURN BUFFER ADDR.
STA PTR. LDA PARMBASE+5,X.
STA PTR+1.. LDA RESET
; SET UP INTERFACE FOR REC
EPTION W/INTR.. LDY #0.
STA (CONTROL),Y. LDA ENABLE.
STA (CONTROL),Y.. SEI
; PATCH MIDI WED
GE (MIDIWDG) INTO IRQ VEC.. LDA
CINV. STA OLDVEC. LDA
CINV+1. STA OLDVEC+1.
LDA #<MIDIWDG. STA CINV.
LDA #>MIDIWDG. STA CINV+1.
CLI. RTS
; RETURN FROM CALLABLE C FUNC
TION...; MIDI WEDGE CALLED EVERYTIME AN
IRQ INTERRUPT OCCURS..; INITIAL CLASSIFI
CATION OF INTERRUPT.MIDIWDG LDY #0
; SEE IF MIDI INTERFAC
E INTERRUPTED. LDA (STATUS),Y.
AND #1. BNE BYTEHERE
; YES IT DID - GO PROCESS
RECEIVED BYTE..; CHECK FOR AND PROCESS F
1/F7 KEYS.TIMER LDA NDX
; NO, MUST BE JIFFY - IS A KEY Q
UEUED UP?. BEQ ENDKEYS
; NO KEYS TO PROCESS. L
DA #0 ; PROCESS A K
EY - FIRST CLEAR QUEUED KEYS. S
TA NDX. LDA KEYD
; LOOK AT KEY QUEUED. CMP
#F1CODE ; WAS IT F1?.
BNE NOTF1 ; NO.
LDA #1 ;
YES, FLAG TIMER ON. STA TIMERON
. LDA #MSTART ;
AND GO PUT A START BYTE IN MIDI STREAM.
BNE ARBBYTE.NOTF1 CMP #F7C
ODE ; WAS KEY F7?.
BNE ENDKEYS ; NO, IG
NORE ANY OTHER KEYS. LDA #0
; YES, FLAG TIMER OFF.
STA TIMERON. LDA #MST
OP ; AND GO PUT A STOP
BYTE IN MIDI STREAM. BNE ARBBYT
E..; GENERATE PSEUDO MIDI-CLOCK BASED ON
JIFFY TIMER IF REQUIRED.ENDKEYS LDA T
IMERON ; IS JIFFY TIMER
GENERATED MIDI CLOCK ON?. BEQ E
NDTIMER ; NO, JUST LET KE
RNAL PROCESS THIS IRQ. CMP #1
; YES, IS THIS FIRST
INTERRUPT THIS JIFFY?. BNE DOK
ERNAL ; NO, JUST LET KERN
AL PROCESS THIS IRQ. INC TIMERO
N ; SET UP TO LET THIS J
IFFY IRQ GO BY LATER. LDA #MCLO
CK ; AND GO PUT A CLOCK
BYTE IN MIDI STREAM. BNE ARBBYT
E.DOKERNAL DEC TIMERON
; SET UP TO GEN CLOCK BYTE NEXT JIFFY IR
Q.ENDTIMER JMP (OLDVEC)
; KERNAL WILL CLEAR JIFFY IRQ CAUSE..; B
UFFER INCOMING DATA FROM MIDI INTERFACE.
BYTEHERE LDA (RXDATA),Y ;
FETCH RECEIVED BYTE FROM MIDI INTERFACE.
ARBBYTE STA (BUFPTR),Y ;
STORE IN USER SPECIFIED BUFFER.
INC BUFPTR ; CIRCULARL
Y INCREMENT BUFFER POINTER. BNE
DONEINC. INC BUFPTR+1.DONEINC
LDA BUFPTR. CMP BUFEND.
BNE NOTEND. LDA BUFPTR+1.
CMP BUFEND+1. BNE NOTEN
D. LDA BUFBEG. STA BUF
PTR. LDA BUFBEG+1. STA
BUFPTR+1.NOTEND LDA BUFPTR
; RETURN BUFFER POINTER TO USER.
STA (PTR),Y. LDA BUFP
TR+1. INY. STA (PTR),Y
. PLA ;
RETURN FROM INTERRUPT WITHOUT GOING.
TAY ; THR
OUGH KERNAL IRQ HANDLER. PLA.
TAX. PLA. RTI.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL