_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

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 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL