------------------------------------------------ --- $FFE0 -------------------------------------- --- continued from ROMLOW $0ffe ------------------------------------------------ 0000: 34 04 PSHS B 0002: 26 19 BNE $001D ; VDBh: song position 0004: 20 0A BRA $0010 ; VDBh: song select --- via $8077, $8085, $8077 ------------------------------------------------ 0006: 34 01 PSHS CC 0008: C6 02 LDB #$02 ; VDBh: sequencer start 000A: 35 01 PULS CC ; VDBh: sequencer continue 000C: 34 04 PSHS B ; VDBh: sequencer stop 000E: 26 0D BNE $001D ; b!=0 -> $801d 0010: 44 LSRA ; /32 0011: 44 LSRA 0012: 44 LSRA 0013: 44 LSRA 0014: 44 LSRA 0015: A1 E4 CMPA ,S 0017: 23 17 BLS $0030 0019: A6 E4 LDA ,S 001B: 20 13 BRA $0030 ------------------------------------------------ 001D: A6 C4 LDA ,U 001F: 84 7F ANDA #$7F 0021: 0D C9 TST $C9 0023: 2B 07 BMI $002C 0025: A1 E4 CMPA ,S 0027: 24 0B BCC $0034 0029: 4C INCA 002A: 20 04 BRA $0030 ------------------------------------------------ 002C: 4D TSTA 002D: 27 05 BEQ $0034 002F: 4A DECA ; byte to be ORed with 0030: C6 80 LDB #$80 ; byte to be ANDed with 0032: 8D 03 BSR $0037 ; U = U & B | A 0034: 32 61 LEAS +$01,S ; s++ 0036: 39 RTS --- (U) = (U) & B | A ------------------------------------------------ 0037: 34 04 PSHS B ; byte to be ANDed with 0039: E6 C4 LDB ,U ; get byte from U 003B: E4 E4 ANDB ,S ; AND with byte from S 003D: E7 C4 STB ,U 003F: AA C4 ORA ,U ; OR with A 0041: A7 C4 STA ,U ; write back 0043: 35 84 PULS PC,B ------------------------------------------------ --- 36 vectors referring to ROMLOW $0000 --- accessed by ROMLOW $04e0, $07bf 0045: 7B 5E FDB $7B5E 0047: 7B 92 FDB $7B92 0049: 7B 65 FDB $7B65 004B: 7B 60 FDB $7B60 004D: 7B F7 FDB $7BF7 004F: 7B BE FDB $7BBE 0051: 7C 3B FDB $7C3B 0053: 7F A8 FDB $7FA8 0055: 7C 96 FDB $7C96 0057: 7C C4 FDB $7CC4 0059: 7C F7 FDB $7CF7 005B: 7D 31 FDB $7D31 005D: 7D 67 FDB $7D67 005F: 7D 8A FDB $7D8A 0061: 7F CC FDB $7FCC 0063: 7D C4 FDB $7DC4 0065: 7D E2 FDB $7DE2 0067: 7D C4 FDB $7DC4 0069: 7D E2 FDB $7DE2 006B: 7E 00 FDB $7E00 006D: 7E 1D FDB $7E1D 006F: 7E 3F FDB $7E3F 0071: 7E 60 FDB $7E60 0073: 7E 83 FDB $7E83 0075: 7F FA FDB $7FFA 0077: 80 06 FDB $8006 0079: 7F 4C FDB $7F4C 007B: 7F 8A FDB $7F8A 007D: 7E FD FDB $7EFD 007F: 7F 26 FDB $7F26 0081: 7E C1 FDB $7EC1 0083: 7F E2 FDB $7FE2 0085: 80 06 FDB $8006 0087: 80 06 FDB $8006 0089: 7F EE FDB $7FEE 008B: 7F C0 FDB $7FC0 008D: 7D C4 FDB $7DC4 008F: 7F B4 FDB $7FB4 0091: 7D C4 FDB $7DC4 0093: BF 0A FDB $BF0A 0095: 7C 20 FDB $7C20 ------------------------------------------------ --- jump to selected track menu ---------------- ------------------------------------------------ 0097: 96 CE LDA $CE ; get track menu 0099: 48 LSLA 009A: 8E 80 9F LDX #$809F ; track menu address base 009D: 6E 96 JMP [A,X] ; jump to menu handler ------------------------------------------------ --- track menu vectors ------------------------- ------------------------------------------------ 009F: 81 02 FDB $8102 ; TRACK MIX menu 00A1: 81 AF FDB $81AF ; TRACK MIDI CHAN menu 00A3: 82 0B FDB $820B ; TRACK STATUS menu 00A5: 82 66 FDB $8266 ; TRACK PROG NUM menu ------------------------------------------------ 00A7: 0F B0 CLR $B0 00A9: 96 B6 LDA $B6 ; track to be modified 00AB: 27 0F BEQ $00BC ; track is 0 -> proceed 00AD: BE 0D 0B LDX $0D0B 00B0: 6D 02 TST +$02,X 00B2: 2A 08 BPL $00BC 00B4: 5F CLRB ; 00B5: BD AB 0B JSR $AB0B 00B8: 96 A8 LDA $A8 ; get function code 00BA: 20 09 BRA $00C5 ; parse it ------------------------------------------------ 00BC: 96 A8 LDA $A8 ; get function code ------------------------------------------------ --- function 3: TRACK TYPE --------------------- ------------------------------------------------ 00BE: 81 03 CMPA #$03 00C0: 26 03 BNE $00C5 00C2: 7E C2 A9 JMP $C2A9 ; TRACK TYPE menu ------------------------------------------------ --- function 4-7: TRACK menu ------------------- ------------------------------------------------ 00C5: 81 04 CMPA #$04 00C7: 25 06 BCS $00CF ; check for MAIN menu 00C9: 81 07 CMPA #$07 00CB: 22 02 BHI $00CF ; check for MAIN menu 00CD: 20 C8 BRA $0097 ; TRACK menu ------------------------------------------------ --- function 8: MAIN menu ---------------------- ------------------------------------------------ 00CF: 81 08 CMPA #$08 00D1: 26 03 BNE $00D6 ; check for CONTROL menu 00D3: 7E BF AD JMP $BFAD ; MAIN menu ------------------------------------------------ --- function 9: CONTROL menu ------------------- ------------------------------------------------ 00D6: 81 09 CMPA #$09 00D8: 26 05 BNE $00DF 00DA: 86 14 LDA #$14 ; simulate control button 00DC: 7E 7A 53 JMP $7A53 ; CONTROL menu ($0a53) ------------------------------------------------ 00DF: 39 RTS ------------------------------------------------ --- $a8-function $04: print track volumes ------ ------------------------------------------------ 00E0: 96 A8 LDA $A8 ; function = 00E2: 81 04 CMPA #$04 ; print track volumes 00E4: 26 1B BNE $0101 ; no -> RTS 00E6: CC 81 24 LDD #$8124 ; prepare track vol. printing 00E9: 8C 02 D4 CMPX #$02D4 ; return if TDB start reached 00EC: 27 13 BEQ $0101 ; 00EE: 34 06 PSHS B,A ; print handler to stack 00F0: 1F 13 TFR X,U ; u points to actual TDB 00F2: 5F CLRB ; track = 0 00F3: 8C 02 D4 CMPX #$02D4 ; end of TDB reached? 00F6: 27 06 BEQ $00FE ; yes -> jump 00F8: 5C INCB ; track++ 00F9: 30 88 E5 LEAX -$1B,X ; next track data block 00FC: 20 F5 BRA $00F3 ------------------------------------------------ 00FE: 5A DECB ; track to pointer 00FF: 6E F1 JMP [,S++] ; jump to track vol. printing ------------------------------------------------ 0101: 39 RTS ------------------------------------------------ --- TRACK MIX menu ----------------------------- ------------------------------------------------ 0102: CE F8 36 LDU #$F836 ; "TRACK MIX *MORE*" 0105: BD 99 56 JSR $9956 0108: C6 03 LDB #$03 010A: 10 8E F8 48 LDY #$F848 ; get display position 010E: BD 82 D7 JSR $82D7 ; print XXX to track 0111: 8E 81 6C LDX #$816C ; button handler $816c 0114: 86 04 LDA #$04 0116: C6 7E LDB #$7E ; max. value for volume 0118: BD 82 ED JSR $82ED 011B: 8E 81 24 LDX #$8124 ; prepare track vol. printing 011E: 7E 82 C1 JMP $82C1 ; print all 8 tracks ------------------------------------------------ --- print volume of track in $b6 --------------- ------------------------------------------------ 0121: D6 B6 LDB $B6 ; track to display 0123: 5A DECB ; track number to offset ------------------------------------------------ --- print volume of track in B ----------------- ------------------------------------------------ 0124: 10 8E F8 48 LDY #$F848 ; track display position 0128: A6 A5 LDA B,Y ; get track's position 012A: C6 E8 LDB #$E8 ; position cursor, print #$e8 012C: BD 99 7D JSR $997D ; 012F: 10 8E 0D 1C LDY #$0D1C 0133: A6 4C LDA +$0C,U ; get track volume 0135: 27 15 BEQ $014C ; track volume 0 -> OFF 0137: 81 7F CMPA #$7F 0139: 23 01 BLS $013C 013B: 39 RTS ------------------------------------------------ --- track volume 1-63 as number to buffer ------ ------------------------------------------------ 013C: 44 LSRA ; 7bit to 6bit 013D: BD BB B4 JSR $BBB4 ; a=int(b/10) 0140: 8B 30 ADDA #$30 ; a to ascii 0142: CB 30 ADDB #$30 ; b to ascii 0144: ED 21 STD +$01,Y ; 2 numbers to buffer 0146: 86 20 LDA #$20 ; space to buffer 0148: A7 23 STA +$03,Y ; 014A: 20 09 BRA $0155 ------------------------------------------------ --- track volume 0 as OFF to buffer ------------ ------------------------------------------------ 014C: CC 4F 46 LDD #$4F46 ; "OFF" to buffer 014F: ED 21 STD +$01,Y ; 0151: 86 46 LDA #$46 ; 0153: A7 23 STA +$03,Y ; 0155: A6 45 LDA +$05,U ; track muted? 0157: 26 05 BNE $015E ; yes -> use mute symbols 0159: CC 20 20 LDD #$2020 ; encapsulate volume within 015C: 20 03 BRA $0161 ; spaces ------------------------------------------------ --- encapsulate track volume within < > -------- ------------------------------------------------ 015E: CC 3C 3E LDD #$3C3E ; encapsulate volume within 0161: A7 A4 STA ,Y ; < > 0163: E7 24 STB +$04,Y ; 0165: 6F 25 CLR +$05,Y 0167: 1F 23 TFR Y,U 0169: 7E 99 56 JMP $9956 ------------------------------------------------ --- TRACK MIX menu: softbutton 0 --------------- ------------------------------------------------ 016C: C1 00 CMPB #$00 016E: 26 01 BNE $0171 0170: 39 RTS ------------------------------------------------ --- TRACK MIX menu: softbutton 5 (MORE) -------- ------------------------------------------------ 0171: C1 05 CMPB #$05 0173: 26 07 BNE $017C 0175: 86 01 LDA #$01 ; track menu = MIDI channel 0177: 97 CE STA $CE 0179: 7E 80 97 JMP $8097 ; prepare track menu ------------------------------------------------ --- TRACK MIX menu: softbutton 6 --------------- ------------------------------------------------ 017C: C1 06 CMPB #$06 ; tracks 1-4 017E: 25 05 BCS $0185 ------------------------------------------------ --- TRACK MIX menu: softbutton 9 --------------- ------------------------------------------------ 0180: C1 09 CMPB #$09 ; tracks 5-8 0182: 22 01 BHI $0185 0184: 5A DECB ; track no. to offset 0185: 34 04 PSHS B ; track offset to stack 0187: CE 02 D4 LDU #$02D4 ; TDB table base 018A: 86 1B LDA #$1B ; table length 018C: 3D MUL ; get track entry from 018D: 33 CB LEAU D,U ; TDB table 018F: 35 04 PULS B ; current track is 0191: D1 B6 CMPB $B6 ; selected track? 0193: 26 14 BNE $01A9 ; no -> $81a9 0195: 30 45 LEAX +$05,U ; check track-muted flag 0197: 6D 84 TST ,X 0199: 27 04 BEQ $019F ; track is not muted ------------------------------------------------; mute track 019B: 6F 84 CLR ,X 019D: 20 0D BRA $01AC ; prepare track menu ------------------------------------------------; unmute track 019F: 6C 84 INC ,X 01A1: 1F 98 TFR B,A 01A3: 4A DECA 01A4: BD CA 37 JSR $CA37 01A7: 20 03 BRA $01AC ; prepare track menu ------------------------------------------------ 01A9: BD AB 0B JSR $AB0B 01AC: 7E 80 97 JMP $8097 ; prepare track menu ------------------------------------------------ --- TRACK MIDI CHAN menu ----------------------- ------------------------------------------------ 01AF: CE F8 50 LDU #$F850 ; "TRACK MIDI CHAN *MORE*" 01B2: BD 99 56 JSR $9956 01B5: C6 02 LDB #$02 01B7: 10 8E F8 68 LDY #$F868 ; position on display 01BB: BD 82 D7 JSR $82D7 01BE: 8E 81 EC LDX #$81EC ; button handler 01C1: 86 05 LDA #$05 01C3: C6 78 LDB #$78 01C5: BD 82 ED JSR $82ED 01C8: 8E 81 D1 LDX #$81D1 ; track channels to display 01CB: 7E 82 C1 JMP $82C1 ------------------------------------------------ 01CE: D6 B6 LDB $B6 01D0: 5A DECB 01D1: 10 8E F8 68 LDY #$F868 ; "TRACK STATUS *MORE*" 01D5: A6 A5 LDA B,Y 01D7: BD 99 81 JSR $9981 01DA: 96 E2 LDA $E2 01DC: 81 03 CMPA #$03 01DE: 26 06 BNE $01E6 01E0: 1F 98 TFR B,A 01E2: 9B DE ADDA $DE 01E4: 20 02 BRA $01E8 ------------------------------------------------ 01E6: A6 44 LDA +$04,U 01E8: 4C INCA 01E9: 7E BB AB JMP $BBAB ; print A ------------------------------------------------ --- TRACK MIDI chan: softbutton 0 -------------- ------------------------------------------------ 01EC: C1 00 CMPB #$00 01EE: 26 01 BNE $01F1 01F0: 39 RTS ------------------------------------------------ --- TRACK MIDI chan: softbutton 5 (MORE) ------- ------------------------------------------------ 01F1: C1 05 CMPB #$05 01F3: 26 07 BNE $01FC 01F5: 86 02 LDA #$02 ; TRACK STATUS menu 01F7: 97 CE STA $CE 01F9: 7E 80 97 JMP $8097 ; jump to selected track menu ------------------------------------------------ --- TRACK MIDI chan: softbutton 6 -------------- ------------------------------------------------ 01FC: C1 06 CMPB #$06 ; track 1-4 01FE: 25 05 BCS $0205 ------------------------------------------------ --- TRACK MIDI chan: softbutton 9 -------------- ------------------------------------------------ 0200: C1 09 CMPB #$09 ; track 5-8 0202: 22 01 BHI $0205 0204: 5A DECB 0205: BD AB 06 JSR $AB06 0208: 7E 80 97 JMP $8097 ; jump to selected track menu ------------------------------------------------ --- TRACK STATUS menu -------------------------- ------------------------------------------------ 020B: CE F8 70 LDU #$F870 ; "TRACK STATUS *MORE*" 020E: BD 99 56 JSR $9956 0211: C6 05 LDB #$05 0213: 10 8E F8 85 LDY #$F885 ; track status display pos. 0217: BD 82 D7 JSR $82D7 ; print XXX to track 021A: 8E 82 47 LDX #$8247 ; button handler 021D: 86 06 LDA #$06 021F: C6 78 LDB #$78 0221: BD 82 ED JSR $82ED 0224: 8E 82 2D LDX #$822D ; display track status 0227: 7E 82 C1 JMP $82C1 ------------------------------------------------ --- show track status -------------------------- ------------------------------------------------ 022A: D6 B6 LDB $B6 ; get track number 022C: 5A DECB 022D: 10 8E F8 85 LDY #$F885 ; track status display pos. 0231: A6 A5 LDA B,Y 0233: BD 99 81 JSR $9981 0236: A6 43 LDA +$03,U ; get track status 0238: 84 C0 ANDA #$C0 023A: 1C FE ANDCC #$FE ; clear carry 023C: 49 ROLA 023D: 49 ROLA 023E: 49 ROLA 023F: 8E 76 D3 LDX #$76D3 ; -SEQ-/LOCAL/MIDI/BOTH 0242: C6 05 LDB #$05 ; length 5 0244: 7E B9 71 JMP $B971 ; print ------------------------------------------------ --- TRACK STATUS menu: softbutton 0 ------------ ------------------------------------------------ 0247: C1 00 CMPB #$00 0249: 26 01 BNE $024C 024B: 39 RTS ------------------------------------------------ --- TRACK STATUS menu: softbutton 5 ------------ ------------------------------------------------ 024C: C1 05 CMPB #$05 ; more 024E: 26 07 BNE $0257 0250: 86 03 LDA #$03 ; TRACK PROGRAM NUM menu 0252: 97 CE STA $CE 0254: 7E 80 97 JMP $8097 ; jump to selected track menu ------------------------------------------------ --- TRACK STATUS menu: softbutton 6 ------------ ------------------------------------------------ 0257: C1 06 CMPB #$06 ; track 1-4 0259: 25 05 BCS $0260 ------------------------------------------------ --- TRACK STATUS menu: softbutton 9 ------------ ------------------------------------------------ 025B: C1 09 CMPB #$09 ; track 5-8 025D: 22 01 BHI $0260 025F: 5A DECB 0260: BD AB 06 JSR $AB06 0263: 7E 80 97 JMP $8097 ; jump to selected track menu ------------------------------------------------ --- TRACK PROG NUM menu ------------------------ ------------------------------------------------ 0266: CE F8 8D LDU #$F88D ; "TRACK PROG NUM *MORE*" 0269: BD 99 56 JSR $9956 026C: C6 03 LDB #$03 026E: 10 8E F8 A4 LDY #$F8A4 ; track display pos. base 0272: BD 82 D7 JSR $82D7 ; print XXX to track 0275: 8E 82 A2 LDX #$82A2 ; button handler 0278: 86 07 LDA #$07 ; items to change (?) 027A: C6 7F LDB #$7F ; parameter maximum (?) 027C: BD 82 ED JSR $82ED 027F: 8E 82 88 LDX #$8288 ; display program numbers 0282: 7E 82 C1 JMP $82C1 ------------------------------------------------ --- print XXX to track selected by $b6 --------- --- if unused (track status pointer: U) -------- ------------------------------------------------ 0285: D6 B6 LDB $B6 ; track 0287: 5A DECB 0288: 10 8E F8 A4 LDY #$F8A4 ; get track's display position 028C: A6 A5 LDA B,Y 028E: BD 99 81 JSR $9981 ; position cursor to track 0291: E6 42 LDB +$02,U ; b=u+2 (u=track pointer?) 0293: C1 FF CMPB #$FF ; track unused? 0295: 26 06 BNE $029D ; no -> $029d 0297: CE F8 AC LDU #$F8AC ; "XXX" 029A: 7E 99 56 JMP $9956 ------------------------------------------------ 029D: 4F CLRA 029E: 5C INCB 029F: 7E C3 CA JMP $C3CA ; print result of x=int(d/100) ------------------------------------------------ --- TRACK PROGRAM menu: softbutton 0 ----------- ------------------------------------------------ 02A2: C1 00 CMPB #$00 02A4: 26 01 BNE $02A7 02A6: 39 RTS ------------------------------------------------ --- TRACK PROGRAM menu: softbutton 5 (MORE) ---- ------------------------------------------------ 02A7: C1 05 CMPB #$05 02A9: 26 07 BNE $02B2 02AB: 86 00 LDA #$00 ; TRACK MIX menu 02AD: 97 CE STA $CE 02AF: 7E 80 97 JMP $8097 ; prepare track menu ------------------------------------------------ --- TRACK PROGRAM menu: softbutton 6 ----------- ------------------------------------------------ 02B2: C1 06 CMPB #$06 ; track 1-4 02B4: 25 05 BCS $02BB ------------------------------------------------ --- TRACK PROGRAM menu: softbutton 9 ----------- ------------------------------------------------ 02B6: C1 09 CMPB #$09 ; track 4-8 02B8: 22 01 BHI $02BB 02BA: 5A DECB 02BB: BD AB 06 JSR $AB06 02BE: 7E 80 97 JMP $8097 ; prepare menu ------------------------------------------------ --- create track data table for display -------- ------------------------------------------------ 02C1: 5F CLRB ; track count 02C2: CE 02 D4 LDU #$02D4 ; track table base 02C5: 33 C8 1B LEAU +$1B,U ; next track table block 02C8: 34 54 PSHS U,X,B 02CA: AD 84 JSR ,X ; -> handler 02CC: 35 54 PULS U,X,B 02CE: 33 C8 1B LEAU +$1B,U ; next track table block 02D1: 5C INCB ; all 8 tracks done? 02D2: C1 07 CMPB #$07 ; loop until all tracks done 02D4: 23 F2 BLS $02C8 02D6: 39 RTS ------------------------------------------------ --- print XXX to track specified by $b6 -------- ------------------------------------------------ 02D7: 96 B6 LDA $B6 ; track to be modified 02D9: 27 11 BEQ $02EC ; none selected -> $82ec 02DB: 4A DECA ; get track's position on 02DC: A6 A6 LDA A,Y ; display 02DE: 34 04 PSHS B 02E0: D6 CE LDB $CE ; if $ce<>0 then a++ 02E2: C1 00 CMPB #$00 02E4: 26 01 BNE $02E7 02E6: 4C INCA 02E7: 35 04 PULS B 02E9: BD BB DA JSR $BBDA ; print stuff 02EC: 39 RTS ------------------------------------------------ --- TRACK menu --------------------------------- --- set number of items ($a8) ------------------ --- set max. value of parameters ($c8) --------- --- set softbutton handler ($0d11) ------------- ------------------------------------------------ 02ED: 97 A8 STA $A8 ; # of items to change (?) 02EF: D7 C8 STB $C8 ; parameter max. value (?) 02F1: BF 0D 11 STX $0D11 ; handler hook 02F4: BD C3 63 JSR $C363 ; print seq. mode 02F7: 86 E8 LDA #$E8 ; print #$e8 02F9: BD 99 81 JSR $9981 ; 02FC: 7E BC AE JMP $BCAE ; clear $ac, $ad ------------------------------------------------ --- SWI2 --------------------------------------- ------------------------------------------------ 02FF: 86 02 LDA #$02 ; SWI mode = 2 0301: 20 02 BRA $0305 ------------------------------------------------ --- SWI3 --------------------------------------- ------------------------------------------------ 0303: 86 03 LDA #$03 ; SWI mode = 3 0305: B7 0B 8B STA $0B8B ; SWI mode 0308: 1A 50 ORCC #$50 ; disable FIRQ/IRQ ------------------------------------------------ --- RESET / SWI -------------------------------- ------------------------------------------------ 030A: 10 CE 0F BD LDS #$0FBD ; sstack = $0fbd 030E: CC 00 0E LDD #$000E ; A=$00, B=$0E 0311: 1F 8B TFR A,DP ; select zeropage 0313: B6 64 0D LDA $640D ; ramcard inserted? 0316: 85 04 BITA #$04 0318: 27 0A BEQ $0324 031A: B6 3F FF LDA $3FFF ; yes, ramcard formatted? 031D: 81 55 CMPA #$55 031F: 26 03 BNE $0324 0321: 7E 20 00 JMP $2000 ; yes, jump to ramcard ------------------------------------------------ --- DOC master reset --------------------------- ------------------------------------------------ 0324: 86 2E LDA #$2E ; activate 24 oscillators 0326: B7 60 E1 STA $60E1 0329: 8E 60 00 LDX #$6000 ; reset all voices 032C: 6F 80 CLR ,X+ 032E: 8C 60 E1 CMPX #$60E1 0331: 26 F9 BNE $032C 0333: BD 85 16 JSR $8516 ; init DOC 0336: BD 85 65 JSR $8565 ; init DUART 0339: 86 E7 LDA #$E7 ; transmit $E7 to panel 033B: B7 64 0B STA $640B 033E: 7F 64 0D CLR $640D ; all outputs = 1 0341: 86 AB LDA #$AB ; irq on input port change, 0343: B7 64 05 STA $6405 ; rxB, counter rdy, breakA, txA 0346: 8E 0B 4F LDX #$0B4F ; clear $0b4f to $0b8a 0349: 6F 80 CLR ,X+ 034B: 8C 0B 8B CMPX #$0B8B 034E: 25 F9 BCS $0349 0350: 8E 00 00 LDX #$0000 ; clear $0000 to $00c7 0353: 6F 80 CLR ,X+ 0355: 8C 00 C7 CMPX #$00C7 0358: 25 F9 BCS $0353 035A: 8E 10 0C LDX #$100C 035D: 4F CLRA ; if $100c/d/e/f=0 then perform 035E: A1 80 CMPA ,X+ ; ordinary reset 0360: 27 29 BEQ $038B ; ($838b) ------------------------------------------------ --- voice bank initialization ------------------ ------------------------------------------------ 0362: 8E 00 00 LDX #$0000 ; else 0365: 6F 80 CLR ,X+ ; clear $0000 to $100c 0367: 8C 10 0C CMPX #$100C 036A: 25 F9 BCS $0365 036C: BD C4 A4 JSR $C4A4 ; copy stuff to display buffer 036F: BD A6 63 JSR $A663 ; select ROMLOW $3000 0372: BD 85 EF JSR $85EF ; copy factory presets 0375: CC 0E 04 LDD #$0E04 ; select ROMLOW $2000 0378: FD 64 0E STD $640E ; 037B: BD 7F 5E JSR $7F5E ; edit buffer init (?) 037E: 8E 10 0C LDX #$100C ; $100C/D/E/F = 0/1/2/3 0381: 4F CLRA 0382: A7 80 STA ,X+ 0384: 4C INCA 0385: 81 04 CMPA #$04 0387: 26 F9 BNE $0382 0389: 20 05 BRA $0390 ; do rest of reset routine ------------------------------------------------ --- ordinary reset ----------------------------- ------------------------------------------------ 038B: 4C INCA ; a=a+1 038C: 81 04 CMPA #$04 ; if a!=4 return 038E: 26 CE BNE $035E 0390: CC 0E 04 LDD #$0E04 ; select ROMLOW $2000 0393: FD 64 0E STD $640E ; 0396: FD 0B 8C STD $0B8C ; 0399: BD 7C C3 JSR $7CC3 ; init DOSRAM, do magic ($1859) 039C: CC 0E 00 LDD #$0E00 ; select ROMLOW $0000 039F: FD 64 0E STD $640E ; 03A2: FD 0B 8C STD $0B8C ; 03A5: BD 89 B0 JSR $89B0 ; misc DUART 03A8: BD 99 4A JSR $994A ; $003b/$003d=$0cf7, $3f=$00 03AB: BD 99 DB JSR $99DB ; output S/R = $8040 03AE: BD 89 E7 JSR $89E7 ; ? 03B1: BD A6 4B JSR $A64B ; save D, CC, set ROMLOW $2000 03B4: BD 70 00 JSR $7000 ; floppy reset 03B7: 8E 03 C7 LDX #$03C7 ; struct ramtable 03BA: 9F 10 STX $10 03BC: 33 08 LEAU +$08,X ; u=[x+8] 03BE: EF 84 STU ,X ; 03C0: 1F 31 TFR U,X 03C2: CC 00 00 LDD #$0000 03C5: ED C4 STD ,U 03C7: 8C 0B 47 CMPX #$0B47 03CA: 26 F0 BNE $03BC 03CC: 8E F7 5E LDX #$F75E ; transfer $f75e - $f77a 03CF: CE 0B 4F LDU #$0B4F ; jump base 03D2: 10 EE 81 LDS ,X++ ; s = [x] (destination addr) 03D5: EC 81 LDD ,X++ ; d = [x+2] (jump addr) 03D7: 34 06 PSHS B,A ; -> stack 03D9: EC 81 LDD ,X++ ; d = [x+4] (outport) 03DB: 34 06 PSHS B,A ; -> stack 03DD: 10 EF 4D STS +$0D,U ; save destination addr+4 03E0: A6 80 LDA ,X+ ; a = [x+6] (step ?) 03E2: A7 43 STA +$03,U ; save step(?) 03E4: 33 4F LEAU +$0F,U ; next U block 03E6: 8C F7 7A CMPX #$F77A ; repeat until 03E9: 25 E7 BCS $03D2 ; all data transferred 03EB: BD 85 65 JSR $8565 ; init DUART 03EE: BD 87 0A JSR $870A ; reset MRb, $14 to $873E 03F1: 20 0A BRA $03FD ------------------------------------------------ --- perform jump to handler routine ----------- ------------------------------------------------ 03F3: DE 0E LDU $0E ; stackpointer hook 03F5: FC 0B 8C LDD $0B8C ; outport config 03F8: 34 06 PSHS B,A ; to stack 03FA: 10 EF 4D STS +$0D,U ; stack address to stack+13 03FD: 1A 10 ORCC #$10 ; disable IRQ 03FF: 8E 0B 4F LDX #$0B4F ; jump base 0402: A6 02 LDA +$02,X ; get step 0404: 26 18 BNE $041E ; if step>0 0406: 10 EE 0D LDS +$0D,X ; get destination address 0409: 10 AE 04 LDY +$04,X ; get "?" 040C: CC 00 00 LDD #$0000 040F: ED 04 STD +$04,X ; clear "?" 0411: 9F 0E STX $0E ; jump base as stack pointer 0413: 1C EF ANDCC #$EF ; enable IRQ 0415: 35 06 PULS B,A ; restore ROMLOW 0417: FD 64 0E STD $640E 041A: FD 0B 8C STD $0B8C 041D: 39 RTS ; jump to destination address ------------------------------------------------; else 041E: 30 0F LEAX +$0F,X ; get next set 0420: 8C 0B 8B CMPX #$0B8B ; end of set? 0423: 25 DD BCS $0402 ; yes -> $0402 0425: 3C CWAI ; end of set: wait for IRQ 0427: 20 D4 BRA $03FD --- stack manipulation ------------------------------------------------ 0429: DE 0E LDU $0E ; voice block hook (?) 042B: 1A 10 ORCC #$10 ; disable IRQ 042D: E6 42 LDB +$02,U 042F: AE 46 LDX +$06,U 0431: 27 11 BEQ $0444 0433: AF 44 STX +$04,U 0435: 10 AE 84 LDY ,X 0438: 10 AF 46 STY +$06,U 043B: 26 03 BNE $0440 043D: 10 AF 48 STY +$08,U 0440: C4 FE ANDB #$FE 0442: 20 02 BRA $0446 ------------------------------------------------ 0444: CA 01 ORB #$01 0446: E7 42 STB +$02,U 0448: 7E 83 F5 JMP $83F5 ; master loop --- prepare WAVEROM 0/1 access (?) ------------------------------------------------ 044B: DE 0E LDU $0E ; stackpointer hook 044D: 1A 10 ORCC #$10 ; disable IRQ 044F: E6 42 LDB +$02,U ; b = stack+2 0451: A6 4C LDA +$0C,U ; a = stack+12 0453: 26 04 BNE $0459 ; if a=0 then 0455: C4 FD ANDB #$FD ; mask out bit 1 of B 0457: 20 02 BRA $045B ------------------------------------------------; else 0459: CA 02 ORB #$02 ; mask in bit 1 of B 045B: E7 42 STB +$02,U ; stack+2 = b 045D: 7E 83 F5 JMP $83F5 ; master loop ------------------------------------------------ --- store A to [$0e]+$0c ----------------------- ------------------------------------------------ 0460: 34 10 PSHS X 0462: 9E 0E LDX $0E ; stackpointer hook 0464: A7 0C STA +$0C,X ; a to stack+12 0466: 35 90 PULS PC,X ------------------------------------------------ --- carry manipulation: compare $12 to #$b4 ---- ------------------------------------------------ 0468: 34 02 PSHS A 046A: 96 12 LDA $12 046C: 81 B4 CMPA #$B4 046E: 25 05 BCS $0475 0470: 35 02 PULS A 0472: 1A 01 ORCC #$01 ; set carry 0474: 39 RTS ------------------------------------------------ 0475: 35 02 PULS A 0477: 1C FE ANDCC #$FE ; clear carry ------------------------------------------------ --- $FFE2 -------------------------------------- --- check for set VDB handler ($10) ------------ --- process if set, else SWI ------------------- ------------------------------------------------ 0479: 34 13 PSHS X,A,CC ; store X, A, CC 047B: 1A 10 ORCC #$10 ; disable IRQ 047D: 10 9E 10 LDY $10 ; get VDB handler 0480: 26 08 BNE $048A ; handler set -> process 0482: 86 01 LDA #$01 ; else perform SWI1 0484: B7 0B 8B STA $0B8B ; 0487: 7E 83 0A JMP $830A ; reset ------------------------------------------------ --- next VDB handler to $10 -------------------- --- zero next VDB handler in Y structure ------- --- inc. VDB counter and set new maximum value - ------------------------------------------------ 048A: AE A4 LDX ,Y ; get next VDB handler 048C: 9F 10 STX $10 ; store to $10 048E: 8E 00 00 LDX #$0000 ; zero next VDB handler 0491: AF A4 STX ,Y ; 0493: 0C 12 INC $12 ; inc. voice counter 0495: 96 12 LDA $12 ; if necessary, 0497: 91 13 CMPA $13 ; set new VDB counter max. 0499: 23 02 BLS $049D ; 049B: 97 13 STA $13 ; 049D: 35 93 PULS PC,X,A,CC ------------------------------------------------ --- $FFE4 -------------------------------------- --- get next VDB handler and dec. VDB counter -- ------------------------------------------------ 049F: 34 11 PSHS X,CC 04A1: 1A 10 ORCC #$10 ; disable IRQ 04A3: 9E 10 LDX $10 ; x = next VDB handler 04A5: 10 9F 10 STY $10 ; $10 = current VDB handler 04A8: AF A4 STX ,Y ; set next VDB handler 04AA: 0A 12 DEC $12 ; dec VDB counter 04AC: 35 91 PULS PC,X,CC --- if $cc cleared process postcode --- else get next VDB handler ------------------------------------------------ 04AE: 34 11 PSHS X,CC ; save X, CC 04B0: 1A 10 ORCC #$10 ; disable IRQ 04B2: 0D CC TST $CC ; if $cc cleared 04B4: 27 02 BEQ $04B8 ; process routine 04B6: 20 EB BRA $04A3 ; else next VDB handler --- process postcode ------------------------------------------------ 04B8: 35 11 PULS X,CC ; restore X, CC 04BA: 34 57 PSHS U,X,B,A,CC ; store regs (7) 04BC: 1A 10 ORCC #$10 ; disable IRQ 04BE: AE 67 LDX +$07,S ; x=PC 04C0: EE 81 LDU ,X++ ; U = "postcode" (address) 04C2: AF 67 STX +$07,S ; return address after postcode 04C4: AE 48 LDX +$08,U ; get address 04C6: 27 08 BEQ $04D0 ; if x=0 goto $84D0 04C8: 10 AF 84 STY ,X ; (address+8)=y 04CB: 10 AF 48 STY +$08,U ; address+8=y 04CE: 20 15 BRA $04E5 ; --------+ ------------------------------------------------ | 04D0: A6 42 LDA +$02,U ; a=[address+2] | 04D2: 85 01 BITA #$01 ; bit 0 set? | 04D4: 27 09 BEQ $04DF ; no -> $84DF -----+ | 04D6: EC 44 LDD +$04,U ; d=[address+4/5] | | 04D8: 26 05 BNE $04DF ; <>0 -------------+ | 04DA: 10 AF 44 STY +$04,U ; [address+4/5]=y | | 04DD: 20 06 BRA $04E5 ; ---------- | ---+ ------------------------------------------------ | | 04DF: 10 AF 46 STY +$06,U ; [address+6/7]=y <+ | 04E2: 10 AF 48 STY +$08,U ; [address+8/9]=y | 04E5: 8E 00 00 LDX #$0000 ; x=$0000 <-------+ 04E8: AF A4 STX ,Y ; [y]=$0000 04EA: A6 42 LDA +$02,U ; a=[address+2] 04EC: 84 FE ANDA #$FE ; demask bit 0 04EE: A7 42 STA +$02,U ; ...store back 04F0: 35 D7 PULS PC,U,X,B,A,CC ; return to PC+2 --- process 5 sets of #$0c sized data blocks ------------------------------------------------ 04F2: 8E 0B 4F LDX #$0B4F ; start of data block area 04F5: A6 0C LDA +$0C,X 04F7: 27 0B BEQ $0504 04F9: 4A DECA 04FA: A7 0C STA +$0C,X 04FC: 26 06 BNE $0504 04FE: A6 02 LDA +$02,X 0500: 84 FD ANDA #$FD 0502: A7 02 STA +$02,X 0504: 30 0F LEAX +$0F,X 0506: 8C 0B 8B CMPX #$0B8B ; loop until end of 0509: 25 EA BCS $04F5 ; data block area reached 050B: BE 0D EF LDX $0DEF ; if $0def not zero 050E: 27 05 BEQ $0515 ; decrement $0def 0510: 30 1F LEAX -$01,X 0512: BF 0D EF STX $0DEF 0515: 39 RTS ------------------------------------------------ --- init 5503 DOC ------------------------------ ------------------------------------------------ 0516: 8E 60 80 LDX #$6080 ; set all wavetable pages to 0519: 86 01 LDA #$01 ; page $01 051B: A7 80 STA ,X+ 051D: 8C 60 A0 CMPX #$60A0 0520: 26 F7 BNE $0519 0522: 8E 60 A0 LDX #$60A0 ; halt all oscillators, 0525: 86 01 LDA #$01 ; no IRQ 0527: A7 80 STA ,X+ 0529: 8C 60 C0 CMPX #$60C0 052C: 26 F7 BNE $0525 052E: C6 20 LDB #$20 0530: B6 60 E0 LDA $60E0 ; clear interrupt register 0533: 10 8E 00 31 LDY #$0031 ; wait for DOC ready 0537: 31 3F LEAY -$01,Y 0539: 5A DECB 053A: 26 FB BNE $0537 053C: 39 RTS ------------------------------------------------ --- IRQ ---------------------------------------- ------------------------------------------------ 053D: B6 64 05 LDA $6405 ; get IRQ flags 0540: 85 07 BITA #$07 ; serial port A? (MIDI) 0542: 27 03 BEQ $0547 0544: 7E 8C 2F JMP $8C2F ; port A IRQ handling ------------------------------------------------ 0547: 85 08 BITA #$08 ; counter ready? 0549: 27 03 BEQ $054E 054B: 7E 99 E6 JMP $99E6 ; counter IRQ handling ------------------------------------------------ 054E: 85 80 BITA #$80 ; inport change? (RAMcard?) 0550: 27 03 BEQ $0555 0552: 7E 9A 3E JMP $9A3E ; inport change IRQ handling ------------------------------------------------ 0555: 85 20 BITA #$20 ; port B rx IRQ? (Panel) 0557: 27 03 BEQ $055C 0559: 7E 87 2B JMP $872B ; port B rx IRQ handler ------------------------------------------------ 055C: 85 10 BITA #$10 ; port B txrdy IRQ? (Panel) 055E: 27 03 BEQ $0563 0560: 7E 99 B5 JMP $99B5 ; port B txrdy IRQ handler ------------------------------------------------ 0563: 11 3F SWI3 ; spurious interrupt ------------------------------------------------ --- init DUART --------------------------------- ------------------------------------------------ 0565: 0F FB CLR $FB ; $00fa = $0000 0567: 0F FA CLR $FA 0569: CC 07 D0 LDD #$07D0 ; timerA = $d007 056C: FD 64 06 STD $6406 056F: 86 60 LDA #$60 ; baud rate 2, 0571: B7 64 04 STA $6404 ; clocked by xtal 0574: 86 20 LDA #$20 ; reset receiver 0576: B7 64 0A STA $640A 0579: 86 30 LDA #$30 ; reset transmitter 057B: B7 64 0A STA $640A 057E: 86 10 LDA #$10 ; mr pointer = mr1 0580: B7 64 0A STA $640A 0583: 86 13 LDA #$13 ; select 8n2 0585: B7 64 08 STA $6408 0588: C6 0F LDB #$0F 058A: F7 64 08 STB $6408 058D: 86 EE LDA #$EE ; rx/tx clock = IP6/5-16x 058F: B7 64 09 STA $6409 0592: 86 05 LDA #$05 ; enable rx/tx 0594: B7 64 0A STA $640A 0597: 10 8E 00 00 LDY #$0000 ; delay loop 059B: 31 3F LEAY -$01,Y 059D: 26 FC BNE $059B 059F: 39 RTS ------------------------------------------------ --- restore outport configuration -------------- ------------------------------------------------ 05A0: FC 0B 8C LDD $0B8C ; outport storage 05A3: FD 64 0E STD $640E 05A6: 39 RTS ------------------------------------------------ --- jump to ROMLOW $2b2b ----------------------- ------------------------------------------------ 05A7: 34 06 PSHS B,A 05A9: CC 7B 2B LDD #$7B2B ; ROMLOW $2b2b 05AC: 34 06 PSHS B,A 05AE: CC 0E 04 LDD #$0E04 ; ROMLOW $2000 05B1: 8D 01 BSR $05B4 05B3: 39 RTS ------------------------------------------------ --- do indirect jump within ROMLOW ------------- --- input: D romlow-bank --- [S] jumpto address 2 --- [S-2] jumpto address 1 --- [S-4] parameter --- output: D ------------------------------------------------ 05B4: FD 64 0E STD $640E ; set ROMLOW 05B7: FD 0B 8E STD $0B8E 05BA: 35 06 PULS B,A ; get jumpto address 2 05BC: FD 0B 90 STD $0B90 05BF: 35 06 PULS B,A ; get jumpto address 1 05C1: FD 0B 92 STD $0B92 05C4: 35 06 PULS B,A ; get parameter 05C6: FD 0B 94 STD $0B94 05C9: FC 0B 90 LDD $0B90 ; jumpto address to stack 05CC: 34 06 PSHS B,A 05CE: FC 0B 8C LDD $0B8C ; old ROMLOW to stack 05D1: 34 06 PSHS B,A 05D3: FC 0B 8E LDD $0B8E ; old ROMLOW = new ROMLOW 05D6: FD 0B 8C STD $0B8C 05D9: FC 0B 94 LDD $0B94 ; get parameter 05DC: AD 9F 0B 92 JSR [$0B92] ; jsr to #1 05E0: FD 0B 94 STD $0B94 ; save parameter 05E3: 35 06 PULS B,A ; restore old ROMLOW 05E5: FD 64 0E STD $640E 05E8: FD 0B 8C STD $0B8C 05EB: FC 0B 94 LDD $0B94 ; restore parameter 05EE: 39 RTS ------------------------------------------------ --- copy factory presets ----------------------- ------------------------------------------------ 05EF: BD EB 2B JSR $EB2B ; check for ramcard 05F2: CE 10 10 LDU #$1010 ; copy factory presets to 05F5: 8E 70 00 LDX #$7000 ; $1010 05F8: A6 80 LDA ,X+ 05FA: A7 C0 STA ,U+ 05FC: 8C 7F F0 CMPX #$7FF0 05FF: 25 F7 BCS $05F8 0601: 39 RTS ------------------------------------------------ --- master init -------------------------------- ------------------------------------------------ 0602: 34 06 PSHS B,A 0604: 86 1E LDA #$1E 0606: BD 84 60 JSR $8460 ; store $1E to stack+12 0609: BD 84 4B JSR $844B ; stack magic 060C: 35 06 PULS B,A 060E: 34 06 PSHS B,A 0610: 1F A8 TFR CC,A ; rescue CC 0612: 1A 50 ORCC #$50 ; disable FIRQ/IRQ 0614: 7F 64 05 CLR $6405 ; disable all DUART IRQ 0617: B7 0B 96 STA $0B96 ; store CC 061A: BD 85 16 JSR $8516 ; init DOC 061D: BD BB E5 JSR $BBE5 ; clear $a2/$a3 0620: BD D8 99 JSR $D899 0623: 8D 11 BSR $0636 ; reset & disable MIDI 0625: 8D 31 BSR $0658 ; reset & disable panel 0627: 34 06 PSHS B,A 0629: CC 78 59 LDD #$7859 ; jump to ROMLOW $1859 062C: 34 06 PSHS B,A ; 062E: CC 0E 02 LDD #$0E02 ; 0631: BD 85 B4 JSR $85B4 ; 0634: 35 86 PULS PC,B,A ------------------------------------------------ --- Reset & Disable RX/TX Port A --------------- ------------------------------------------------ 0636: F6 64 03 LDB $6403 ; rxA -> B 0639: 86 40 LDA #$40 ; reset error status A 063B: B7 64 02 STA $6402 063E: 86 50 LDA #$50 ; rst break change i.rupt A 0640: B7 64 02 STA $6402 0643: 86 20 LDA #$20 ; reset receiver A 0645: B7 64 02 STA $6402 0648: 86 02 LDA #$02 ; disable receiver A 064A: B7 64 02 STA $6402 064D: 86 30 LDA #$30 ; reset transmitter A 064F: B7 64 02 STA $6402 0652: 86 08 LDA #$08 ; disable transmitter A 0654: B7 64 02 STA $6402 0657: 39 RTS ------------------------------------------------ --- Reset & Disable RX/TX Port B --------------- ------------------------------------------------ 0658: F6 64 0B LDB $640B ; data B -> B 065B: 86 40 LDA #$40 ; reset error status B 065D: B7 64 0A STA $640A 0660: 86 50 LDA #$50 ; rst break change i.rupt B 0662: B7 64 0A STA $640A 0665: 86 20 LDA #$20 ; reset receiver B 0667: B7 64 0A STA $640A 066A: 86 02 LDA #$02 ; disable receiver B 066C: B7 64 0A STA $640A 066F: 86 30 LDA #$30 ; reset transmitter B 0671: B7 64 0A STA $640A 0674: 86 08 LDA #$08 ; disable transmitter B 0676: B7 64 0A STA $640A 0679: 86 04 LDA #$04 ; enable transmitter A 067B: B7 64 0A STA $640A 067E: BD 87 02 JSR $8702 ; get status B, wait for rdy 0681: C6 FF LDB #$FF 0683: 8D 6C BSR $06F1 ; enable transmitter B 0685: 86 08 LDA #$08 ; disable transmitter A 0687: B7 64 0A STA $640A 068A: 10 8E 05 DC LDY #$05DC 068E: 31 3F LEAY -$01,Y 0690: 26 FC BNE $068E 0692: 39 RTS --- jump to $2cc3 --- init DUART --- panel IRQ to $873e ------------------------------------------------ 0693: 34 06 PSHS B,A 0695: 1A 50 ORCC #$50 ; disable FIRQ/IRQ 0697: 34 06 PSHS B,A 0699: CC 7C C3 LDD #$7CC3 ; jump to ROMLOW $2CC3 069C: 34 06 PSHS B,A ; 069E: CC 0E 04 LDD #$0E04 ; 06A1: BD 85 B4 JSR $85B4 ; 06A4: 8D 90 BSR $8636 ; reset & disable MIDI 06A6: BD 85 65 JSR $8565 ; init DUART 06A9: BD 89 B0 JSR $89B0 ; init MIDI 06AC: BD 87 0A JSR $870A ; reset panel, pIRQ to $873E 06AF: 86 09 LDA #$09 ; disable txA, enable rxA 06B1: B7 64 02 STA $6402 ; 06B4: 86 05 LDA #$05 ; enable rx/tx B 06B6: B7 64 0A STA $640A ; 06B9: B6 0B 96 LDA $0B96 06BC: 34 02 PSHS A 06BE: BD 85 A0 JSR $85A0 ; $0b8c/d -> outport 06C1: 86 AB LDA #$AB ; IRQ on inport change, 06C3: B7 64 05 STA $6405 ; rxrdy/ffullAB, txrdy A 06C6: 35 87 PULS PC,B,A,CC ; counter ready ------------------------------------------------ --- send $FCF0 to panel ------------------------ ------------------------------------------------ 06C8: C6 F0 LDB #$F0 06CA: 8D 25 BSR $06F1 ; enable txB, send #$FCF0 06CC: 86 08 LDA #$08 ; disable txB 06CE: B7 64 0A STA $640A 06D1: 39 RTS ------------------------------------------------ --- reset display ------------------------------ ------------------------------------------------ 06D2: BD 86 02 JSR $8602 ; master init 06D5: C6 FD LDB #$FD 06D7: 8D 18 BSR $06F1 06D9: 86 09 LDA #$09 ; disable txB, enable rxB 06DB: B7 64 0A STA $640A 06DE: B6 64 09 LDA $6409 ; wait for rxrdy 06E1: 85 01 BITA #$01 ; 06E3: 27 F9 BEQ $06DE ; 06E5: F6 64 0B LDB $640B ; get data B 06E8: BD 87 14 JSR $8714 ; S/R to xx01->0101 06EB: C1 C0 CMPB #$C0 ; repeat if B < 192 06ED: 25 EF BCS $06DE 06EF: 20 A2 BRA $0693 ; initialization post proc. ------------------------------------------------ --- enable transmitter B, send #$FB(B), wait for answer ------------------------------------------------ 06F1: 86 04 LDA #$04 ; enable transmitter B 06F3: B7 64 0A STA $640A 06F6: 8D 0A BSR $0702 ; wait for receiver B ready 06F8: 86 FB LDA #$FB ; transmit #$FB 06FA: B7 64 0B STA $640B 06FD: 8D 03 BSR $0702 ; wait for receiver B ready 06FF: F7 64 0B STB $640B 0702: B6 64 09 LDA $6409 ; get status B 0705: 84 04 ANDA #$04 ; receiver ready? 0707: 27 F9 BEQ $0702 ; no -> wait 0709: 39 RTS ; yes -> return --- send #$fcf0 to panel, panel IRQ to $873e ------------------------------------------------ 070A: BD 86 C8 JSR $86C8 ; #$fcf0 to panel 070D: CC 87 3E LDD #$873E ; prepare jump to $873E 0710: DD 14 STD $14 0712: 20 0C BRA $0720 ------------------------------------------------ --- outport sequence xx01->0101 ---------------- ------------------------------------------------ 0714: 86 01 LDA #$01 ; reset bit 0 of outport 0716: B7 64 0F STA $640F 0719: B7 64 0E STA $640E ; set bit 0 of outport 071C: B7 64 0F STA $640F ; reset bit 0 of outport 071F: 39 RTS ------------------------------------------------ --- clear panel communication buffer ----------- ------------------------------------------------ 0720: 8E 0B 97 LDX #$0B97 ; clear $0b97 to $0b9e 0723: 6F 80 CLR ,X+ 0725: 8C 0B 9F CMPX #$0B9F 0728: 26 F9 BNE $0723 072A: 39 RTS ------------------------------------------------ --- port B (Panel) receive interrupt ----------- ------------------------------------------------ 072B: B6 64 09 LDA $6409 ; status B 072E: 85 F0 BITA #$F0 ; error occured? 0730: 27 02 BEQ $0734 ; no 0732: 11 3F SWI3 ; yes -> swi3 ------------------------------------------------ 0734: F6 64 0B LDB $640B ; get data B 0737: AD 9F 00 14 JSR [$0014] ; rx interrupt 073B: 8D D7 BSR $0714 ; outport to $0101 073D: 3B RTI ; return from interrupt ------------------------------------------------ --- panel receive interrupt -------------------- ------------------------------------------------ 073E: C1 C8 CMPB #$C8 ; got keyb. proc. error #1 0740: 27 04 BEQ $0746 ; 0742: C1 C7 CMPB #$C7 ; got keyb. proc. error #2 0744: 26 16 BNE $075C ; 0746: C4 01 ANDB #$01 ; get error number 0748: 27 02 BEQ $074C ; error 2 -> don't change pIRQh 074A: 8D 14 BSR $0760 ; error 1 -> set pIRQh to $8766 074C: 8E 70 D6 LDX #$70D6 ; keyboard proc. error handler 074F: BD 84 79 JSR $8479 ; [$FFE2] 0752: E7 24 STB +$04,Y ; error number 0754: AF 22 STX +$02,Y ; VDB handler to $70d6 0756: BD 84 AE JSR $84AE : process $0b4f 0759: 0B 4F fdb $0B4F ; address for U pointer 075B: 39 RTS ------------------------------------------------ --- panel IRQ: $ff received -> pIRQh = $8766 --- ------------------------------------------------ 075C: C1 FF CMPB #$FF ; $ff not received -> return 075E: 26 05 BNE $0765 0760: 8E 87 66 LDX #$8766 ; panel IRQ vector to $8766 0763: 9F 14 STX $14 0765: 39 RTS ------------------------------------------------ --- panel IRQ: 2nd part ------------------------ ------------------------------------------------ 0766: 2A 14 BPL $077C ; received data <$80 0768: C1 C0 CMPB #$C0 ; received data $80-$bf 076A: 25 0B BCS $0777 076C: C1 FC CMPB #$FC ; received #$fc 076E: 27 02 BEQ $0772 0770: 10 3F SWI2 ------------------------------------------------ --- panel IRQ: $fc received -> pIRQh = $878f --- ------------------------------------------------ 0772: 8E 87 8F LDX #$878F ; panel IRQ handler to $878f 0775: 20 03 BRA $077A ------------------------------------------------ --- panel IRQ: $80-$bf received -> pIRQh = $8898 ------------------------------------------------ 0777: 8E 88 98 LDX #$8898 ; panel IRQ handler to $8898 077A: 20 0C BRA $0788 ------------------------------------------------ --- panel IRQ: $00-$7f received ---------------- ------------------------------------------------ 077C: C1 40 CMPB #$40 ; $00-$3f received 077E: 25 05 BCS $0785 ; -> panel IRQ h. to $87fa 0780: 8E 87 98 LDX #$8798 ; $40-$7f received 0783: 20 03 BRA $0788 ; -> panel IRQ h. to $8798 ------------------------------------------------ --- panel IRQ: $00-$3f received -> pIRQh = $878f ------------------------------------------------ 0785: 8E 87 FA LDX #$87FA ; panel IRQ handler to $87fa 0788: C4 3F ANDB #$3F ; limit b to 0-63 078A: D7 16 STB $16 ; store b 078C: 9F 14 STX $14 ; prepare jump to $87FA 078E: 39 RTS ------------------------------------------------ --- panel IRQ: received $fc ------------- ------------------------------------------------ 078F: 8E 87 66 LDX #$8766 ; panel IRQ handler to $8766 0792: 9F 14 STX $14 ; 0794: F7 0B 9F STB $0B9F ; store data 0797: 39 RTS ------------------------------------------------ --- panel IRQ: received ----------- --- $40 <= cmd <= $7f --------------- ------------------------------------------------ 0798: 8E 87 66 LDX #$8766 ; panel IRQ handler to $8766 079B: 9F 14 STX $14 079D: 0D CC TST $CC ; process only if $cc cleared 079F: 27 01 BEQ $07A2 ; 07A1: 39 RTS ; ------------------------------------------------ 07A2: 9E C1 LDX $C1 07A4: 96 16 LDA $16 ; increase received byte 07A6: 8B 24 ADDA #$24 ; by 36 07A8: 97 16 STA $16 07AA: 81 61 CMPA #$61 ; a<97: polyphonic aftertouch 07AC: 25 05 BCS $07B3 ; a>96: channel aftertouch 07AE: BD 8A E8 JSR $8AE8 ; send channel aftertouch 07B1: 20 03 BRA $07B6 ------------------------------------------------ 07B3: BD 8B DA JSR $8BDA ; send polyphonic aftertouch 07B6: 34 06 PSHS B,A 07B8: 81 61 CMPA #$61 ; if a>96 (channel AT) 07BA: 25 02 BCS $07BE ; set bit 7 07BC: 8A 80 ORA #$80 ; of accu a 07BE: BD 84 68 JSR $8468 ; $12 checking: 07C1: 25 19 BCS $07DC ; $12 > 180 ($b4) 07C3: AF 24 STX +$04,Y ; content of $c1 07C5: ED 26 STD +$06,Y ; byte1+$24, byte2 07C7: CC 7C 65 LDD #$7C65 ; handler to $2c65 07CA: ED 22 STD +$02,Y ; 07CC: 86 40 LDA #$40 07CE: A4 03 ANDA +$03,X 07D0: 27 07 BEQ $07D9 07D2: BD 84 AE JSR $84AE 07D5: 0B 5E fdb $0B5E ; U pointer to $0b5e 07D7: 20 03 BRA $07DC ------------------------------------------------ 07D9: BD 84 9F JSR $849F ; next VDB handler 07DC: 35 06 PULS B,A 07DE: BD 84 68 JSR $8468 ; $12>#$b3 -> RTS 07E1: 25 16 BCS $07F9 07E3: 81 61 CMPA #$61 ; polyphonic aftertouch 07E5: 25 04 BCS $07EB 07E7: 86 05 LDA #$05 ; a = 5 07E9: 20 02 BRA $07ED ------------------------------------------------ 07EB: 8A 80 ORA #$80 ; set bit 7 07ED: ED 24 STD +$04,Y 07EF: CE 00 14 LDU #$0014 ; VDB handler to $0014 07F2: EF 22 STU +$02,Y ; 07F4: BD 84 AE JSR $84AE 07F7: 0B 6D fdb $0B6D ; U pointer to $0b6d 07F9: 39 RTS ------------------------------------------------ --- panel IRQ: received ----------- --- $00 <= cmd <= $3f --------------- ------------------------------------------------ 07FA: CE 87 66 LDU #$8766 ; pIRQh to $8766 07FD: DF 14 STU $14 ; 07FF: C1 00 CMPB #$00 0801: 26 39 BNE $083C ------------------------------------------------; received $ff cmd $00 0803: 96 16 LDA $16 ; previously received byte 0805: 81 00 CMPA #$00 0807: 26 1C BNE $0825 0809: 9E C1 LDX $C1 080B: 6F 07 CLR +$07,X 080D: 5F CLRB 080E: 8D 76 BSR $0886 0810: BD 84 79 JSR $8479 0813: AF 24 STX +$04,Y 0815: CC 7B 62 LDD #$7B62 ; VDB handler +$02,Y to $2b62 0818: ED 22 STD +$02,Y ; 081A: BD 84 AE JSR $84AE 081D: 0B 5E fdb $0B5E ; U pointer = $0b5e 081F: 86 01 LDA #$01 0821: 5F CLRB 0822: 7E 8B B8 JMP $8BB8 ------------------------------------------------ 0825: 81 01 CMPA #$01 0827: 26 01 BNE $082A 0829: 39 RTS ------------------------------------------------ 082A: BD 84 79 JSR $8479 082D: 80 02 SUBA #$02 082F: A7 24 STA +$04,Y 0831: CC 73 8B LDD #$738B ; VDB handler +$02,Y to $238b 0834: ED 22 STD +$02,Y ; 0836: BD 84 AE JSR $84AE 0839: 0B 4F fdb $0B4F ; U pointer = $0b4f 083B: 39 RTS ------------------------------------------------; received $ff cmd $xx 083C: 0D CC TST $CC ; keyboard on? 083E: 27 01 BEQ $0841 0840: 39 RTS ------------------------------------------------ 0841: 9E C1 LDX $C1 0843: 96 16 LDA $16 ; increase received byte 0845: 8B 24 ADDA #$24 ; by 36 0847: 97 16 STA $16 0849: BD 8B 7A JSR $8B7A ; note on (2) 084C: BD 84 79 JSR $8479 084F: ED 24 STD +$04,Y 0851: CE 00 12 LDU #$0012 ; VDB handler to $0012 0854: EF 22 STU +$02,Y ; 0856: BD 84 AE JSR $84AE 0859: 0B 6D fdb $0B6D ; U pointer = $0b6d 0A5B: BD 84 79 JSR $8479 085E: ED 26 STD +$06,Y 0860: DC C1 LDD $C1 0862: ED 24 STD +$04,Y 0864: CC 7A E1 LDD #$7AE1 ; VDB handler to ROMLOW $2ae1 0867: ED 22 STD +$02,Y ; 0869: BD 84 AE JSR $84AE 086C: 0B 5E fdb $0B5E ; U pointer = $0b5e 086E: D6 16 LDB $16 0870: C0 24 SUBB #$24 0872: CE 0B 97 LDU #$0B97 ; U pointer = $0b97 0875: 1F 98 TFR B,A 0877: 44 LSRA 0878: 44 LSRA 0879: 44 LSRA 087A: C4 07 ANDB #$07 ; limit b to 0-7 087C: 8E 89 A8 LDX #$89A8 ; offset table 087F: E6 85 LDB B,X ; get value from table 0881: E4 C6 ANDB A,U 0883: E7 C6 STB A,U 0885: 39 RTS ------------------------------------------------ 0886: BD 84 79 JSR $8479 0889: CE 00 14 LDU #$0014 ; VDB handler +$02,Y to $0014 088C: EF 22 STU +$02,Y ; 088E: 86 01 LDA #$01 0890: ED 24 STD +$04,Y 0892: BD 84 AE JSR $84AE 0895: 0B 6D fdb $0B6D ; U pointer = $0b6d 0897: 39 RTS ------------------------------------------------ --- $80-$bf received (2) -> pIRQh = $8766 ------ ------------------------------------------------ 0898: CE 87 66 LDU #$8766 ; panel IRQ handler to $8766 089B: DF 14 STU $14 ; 089D: C1 00 CMPB #$00 089F: 26 30 BNE $08D1 08A1: 96 16 LDA $16 08A3: 81 00 CMPA #$00 08A5: 26 0F BNE $08B6 08A7: 9E C1 LDX $C1 08A9: C6 7F LDB #$7F 08AB: E7 07 STB +$07,X 08AD: 8D D7 BSR $0886 08AF: 86 01 LDA #$01 08B1: BD 8B B8 JSR $8BB8 ; send controller in B / $e0 08B4: 20 1A BRA $08D0 ------------------------------------------------ 08B6: 81 01 CMPA #$01 08B8: 26 05 BNE $08BF 08BA: BD DC A5 JSR $DCA5 08BD: 20 11 BRA $08D0 ------------------------------------------------ 08BF: BD 84 79 JSR $8479 08C2: 80 02 SUBA #$02 08C4: A7 24 STA +$04,Y 08C6: CC 71 34 LDD #$7134 ; VDB handler to ROMLOW $2134 08C9: ED 22 STD +$02,Y ; 08CB: BD 84 BA JSR $84BA 08CE: 0B FDB $0B4F ; U pointer to $0b4f 08D0: 39 RTS ------------------------------------------------ 08D1: 0D CC TST $CC ; keyboard processing ok? 08D3: 27 01 BEQ $08D6 08D5: 39 RTS ------------------------------------------------ 08D6: 9E C1 LDX $C1 08D8: 96 16 LDA $16 08DA: 8B 24 ADDA #$24 08DC: 97 16 STA $16 08DE: BD 8B 53 JSR $8B53 ; note off (2) 08E1: BD 84 79 JSR $8479 08E4: ED 24 STD +$04,Y 08E6: CE 00 10 LDU #$0010 ; VDB handler to $0010 08E9: EF 22 STU +$02,Y ; 08EB: BD 84 AE JSR $84AE 08EE: 0B 6D fdb $0B6D 08F0: BD 84 79 JSR $8479 08F3: ED 26 STD +$06,Y 08F5: 9E C1 LDX $C1 08F7: AF 24 STX +$04,Y 08F9: CC 7A 52 LDD #$7A52 ; VDB handler to $2a52 08FC: ED 22 STD +$02,Y ; 08FE: 86 40 LDA #$40 0900: A4 03 ANDA +$03,X 0902: 27 07 BEQ $090B 0904: BD 84 AE JSR $84AE 0907: 0B 5E fdb $0B5E 0909: 20 03 BRA $090E ------------------------------------------------ 090B: BD 84 9F JSR $849F 090E: D6 16 LDB $16 0910: 96 A9 LDA $A9 0912: 81 06 CMPA #$06 0914: 26 17 BNE $092D 0916: BD 84 79 JSR $8479 0919: E7 24 STB +$04,Y 091B: 8E 74 5F LDX #$745F ; VDB handler to $245f 091E: AF 22 STX +$02,Y ; 0920: BD 84 AE JSR $84AE 0923: 0B 4F fdb $0B4F ; U pointer to $0b4f 0925: 86 07 LDA #$07 ; number of tracks 0927: 8E 02 D4 LDX #$02D4 ; track table base 092A: BD 8B B8 JSR $8BB8 ; send controller in B / $e0 092D: C0 24 SUBB #$24 092F: CE 0B 97 LDU #$0B97 0932: 1F 98 TFR B,A 0934: 44 LSRA 0935: 44 LSRA 0936: 44 LSRA ------------------------------------------------ --- merge value referring to B from $89a0 to A,U ------------------------------------------------ 0937: C4 07 ANDB #$07 ; limit to max. tracks 0939: 8E 89 A0 LDX #$89A0 ; table at $89a0 093C: E6 85 LDB B,X 093E: EA C6 ORB A,U 0940: E7 C6 STB A,U 0942: 39 RTS ------------------------------------------------ 0943: 34 10 PSHS X 0945: CE 0B 97 LDU #$0B97 ; panel comm. buffer 0948: 5F CLRB ; for b=0 to 64 step 8 0949: A6 C0 LDA ,U+ 094B: 27 02 BEQ $094F 094D: 8D 17 BSR $0966 094F: CB 08 ADDB #$08 ; 0951: C1 40 CMPB #$40 ; 0953: 26 F4 BNE $0949 ; end for 0955: BD 87 20 JSR $8720 ; clear panel comm. buffer 0958: 96 E5 LDA $E5 095A: 2A 05 BPL $0961 095C: 9E C1 LDX $C1 095E: BD E4 89 JSR $E489 0961: EC E1 LDD ,S++ 0963: DD C1 STD $C1 0965: 39 RTS ------------------------------------------------ 0966: 34 06 PSHS B,A 0968: 6F E2 CLR ,-S 096A: 67 61 ASR +$01,S 096C: 24 26 BCC $0994 096E: 86 24 LDA #$24 0970: AB 62 ADDA +$02,S 0972: AB E4 ADDA ,S 0974: 34 02 PSHS A 0976: 9E C1 LDX $C1 0978: C6 40 LDB #$40 097A: BD 8B 77 JSR $8B77 ; note on (2) 097D: BD 84 79 JSR $8479 0980: 35 02 PULS A 0982: C6 40 LDB #$40 0984: ED 26 STD +$06,Y 0986: DC C1 LDD $C1 0988: ED 24 STD +$04,Y 098A: CC 7A E1 LDD #$7AE1 ; VDB handler to ROMLOW $2ae1 098D: ED 22 STD +$02,Y ; 098F: BD 84 AE JSR $84AE 0992: 0B 5E fdb $0B5E ; U pointer to $0b5e 0994: 6C E4 INC ,S 0996: A6 E4 LDA ,S 0998: 81 08 CMPA #$08 099A: 26 CE BNE $096A 099C: 32 61 LEAS +$01,S 099E: 35 86 PULS PC,B,A ------------------------------------------------ --- 00000001 00000010 00000100 00001000 --- 00010000 00100000 01000000 10000000 09A0: 01 02 04 08 10 20 40 80 ..... @. --- 11111110 11111101 11111011 11110111 --- 11101111 11011111 10111111 01111111 09A8: FE FD FB F7 EF DF BF 7F ........ ------------------------------------------------ --- reset & initialize MIDI interface ---------- ------------------------------------------------ 09B0: 7F 00 CC CLR $00CC ; MIDI receive mode 09B3: 7F 0B A2 CLR $0BA2 09B6: 7F 0B A5 CLR $0BA5 09B9: BD 86 36 JSR $8636 ; reset & disable MIDI 09BC: 86 10 LDA #$10 ; reset MR pointer 09BE: B7 64 02 STA $6402 09C1: 86 13 LDA #$13 ; A: force odd parity, 8bit 09C3: B7 64 00 STA $6400 09C6: C6 07 LDB #$07 ; A: 1 stop bit 09C8: F7 64 00 STB $6400 09CB: 86 EE LDA #$EE ; A clk: inport 4 x 16 09CD: B7 64 01 STA $6401 09D0: 86 01 LDA #$01 ; enable Rx 09D2: B7 64 02 STA $6402 09D5: CC 8C 76 LDD #$8C76 ; MIDI tx handler to 09D8: DD 25 STD $25 ; $8c76 09DA: CC 8D 47 LDD #$8D47 ; MIDI rx handler to 09DD: DD 1C STD $1C ; $8d47 09DF: CC 0B A6 LDD #$0BA6 ; MIDI tx buffer to 09E2: DD 18 STD $18 ; $0ba6 09E4: DD 1A STD $1A ; "not sent" ptr to buffer 09E6: 39 RTS ------------------------------------------------ 09E7: CE 0B C6 LDU #$0BC6 ; clear MIDI receive buffer 09EA: 6F C0 CLR ,U+ ; 09EC: 11 83 0B E6 CMPU #$0BE6 ; 09F0: 26 F8 BNE $09EA ; 09F2: 96 E2 LDA $E2 09F4: 81 03 CMPA #$03 09F6: 27 24 BEQ $0A1C 09F8: 8E 03 AC LDX #$03AC ; track data block table end 09FB: CE 0B C6 LDU #$0BC6 ; MIDI receive buffer base 09FE: E6 04 LDB +$04,X 0A00: 58 LSLB 0A01: A6 03 LDA +$03,X 0A03: 84 C0 ANDA #$C0 0A05: 2E 06 BGT $0A0D 0A07: A6 02 LDA +$02,XA 0A09: 2B 02 BMI $0A0D 0A0B: AF C5 STX B,U 0A0D: 30 88 E5 LEAX -$1B,X ; next track data block 0A10: 8C 02 D4 CMPX #$02D4 ; loop until all track data 0A13: 26 E9 BNE $09FE ; blocks processed 0A15: D6 DE LDB $DE 0A17: 58 LSLB 0A18: AF C5 STX B,U 0A1A: 20 35 BRA $0A51 ------------------------------------------------ 0A1C: CE 0B C6 LDU #$0BC6 ; MIDI receive buffer 0A1F: D6 DE LDB $DE 0A21: C1 08 CMPB #$08 0A23: 23 07 BLS $0A2C 0A25: C0 09 SUBB #$09 0A27: F7 02 D8 STB $02D8 0A2A: D7 DE STB $DE 0A2C: 5A DECB 0A2D: C4 0F ANDB #$0F 0A2F: D7 23 STB $23 0A31: D6 DE LDB $DE 0A33: 58 LSLB 0A34: 33 C5 LEAU B,U 0A36: 8E 02 EF LDX #$02EF ; track block table 0A39: A6 02 LDA +$02,X 0A3B: 2A 0A BPL $0A47 0A3D: B6 02 D6 LDA $02D6 0A40: A7 02 STA +$02,X 0A42: FC 02 D4 LDD $02D4 ; track table base 0A45: ED 84 STD ,X 0A47: AF C1 STX ,U++ 0A49: 30 88 1B LEAX +$1B,X 0A4C: 8C 03 AC CMPX #$03AC ; loop until all track 0A4F: 23 E8 BLS $0A39 ; blocks processed 0A51: 39 RTS --- get song position (?) ------------------------------------------------ 0A52: 34 16 PSHS X,B,A 0A54: 96 29 LDA $29 0A56: 81 08 CMPA #$08 0A58: 25 30 BCS $0A8A 0A5A: 9E 0E LDX $0E 0A5C: A6 02 LDA +$02,X ; mask bit 2 0A5E: 8A 04 ORA #$04 ; 0A60: A7 02 STA +$02,X ; 0A62: 1A 10 ORCC #$10 ; disable IRQ 0A64: 9E 27 LDX $27 ; MIDI vector 0A66: 27 0E BEQ $0A76 ; cleared -> $8a76 0A68: EC 84 LDD ,X 0A6A: 27 02 BEQ $0A6E 0A6C: 1F 01 TFR D,X 0A6E: 26 F8 BNE $0A68 0A70: DC 0E LDD $0E 0A72: ED 84 STD ,X 0A74: 20 04 BRA $0A7A ------------------------------------------------ 0A76: 9E 0E LDX $0E 0A78: 9F 27 STX $27 0A7A: CC 00 00 LDD #$0000 ; zero [$000e] 0A7D: ED 9F 00 0E STD [$000E] 0A81: 34 60 PSHS U,Y 0A83: 1C EF ANDCC #$EF ; enable IRQ 0A85: BD 83 F3 JSR $83F3 0A88: 35 60 PULS U,Y 0A8A: 35 96 PULS PC,X,B,A ------------------------------------------------ --- send compare button status message --------- ------------------------------------------------ 0A8C: 8D C4 BSR $0A52 0A8E: 34 01 PSHS CC 0A90: 1A 10 ORCC #$10 ; disable IRQ 0A92: C6 F0 LDB #$F0 ; transmit sysex header 0A94: BD 8C 16 JSR $8C16 0A97: C6 0F LDB #$0F ; transmit ensoniq code 0A99: BD 8C 16 JSR $8C16 0A9C: C6 02 LDB #$02 ; sq80 product code 0A9E: BD 8C 16 JSR $8C16 0AA1: D6 DE LDB $DE ; MIDI channel number 0AA3: BD 8C 16 JSR $8C16 0AA6: C6 10 LDB #$10 ; compare status cmd. code 0AA8: BD 8C 16 JSR $8C16 0AAB: D6 C7 LDB $C7 ; button status 0AAD: C4 01 ANDB #$01 ; get compare button status 0AAF: BD 8C 16 JSR $8C16 ; tx compare button status 0AB2: C6 F7 LDB #$F7 ; end of sysex 0AB4: D7 17 STB $17 ; set & transmit command 0AB6: BD 8C 16 JSR $8C16 ; 0AB9: 35 81 PULS PC,CC ------------------------------------------------ --- send PROGRAM CHANGE ------------------------ ------------------------------------------------ 0ABB: 8D 95 BSR $0A52 0ABD: 34 01 PSHS CC 0ABF: 1A 10 ORCC #$10 ; disable IRQ 0AC1: A6 03 LDA +$03,X 0AC3: 84 C0 ANDA #$C0 0AC5: 2F 04 BLE $0ACB 0AC7: 96 DF LDA $DF ; keyboard only local? 0AC9: 27 18 BEQ $0AE3 ; yes -> skip 0ACB: 96 E3 LDA $E3 0ACD: 81 02 CMPA #$02 0ACF: 25 12 BCS $0AE3 0AD1: 34 04 PSHS B 0AD3: C6 C0 LDB #$C0 ; program change 0AD5: EA 04 ORB +$04,X ; MIDI channel 0AD7: D7 17 STB $17 ; -> byte to transmit 0AD9: 1A 10 ORCC #$10 ; disable IRQ 0ADB: BD 8C 16 JSR $8C16 ; transmit prog. change command 0ADE: 35 04 PULS B ; transmit data 0AE0: BD 8C 16 JSR $8C16 ; 0AE3: 35 81 PULS PC,CC ------------------------------------------------ --- send CHANNEL PRESSURE ---------------------- ------------------------------------------------ 0AE5: BD 8A 52 JSR $8A52 0AE8: 34 07 PSHS B,A,CC 0AEA: 1A 10 ORCC #$10 ; disable IRQ 0AEC: D7 1E STB $1E 0AEE: C6 D0 LDB #$D0 ; channel pressure 0AF0: EA 04 ORB +$04,X ; MIDI channel 0AF2: A6 03 LDA +$03,X 0AF4: 84 C0 ANDA #$C0 0AF6: 2E 0E BGT $0B06 0AF8: D1 17 CMPB $17 ; same command as before? 0AFA: 27 05 BEQ $0B01 ; yes -> skip header tx 0AFC: D7 17 STB $17 ; set & transmit command 0AFE: BD 8C 16 JSR $8C16 ; 0B01: D6 1E LDB $1E ; transmit pressure 0B03: BD 8C 16 JSR $8C16 ; 0B06: 35 87 PULS PC,B,A,CC ------------------------------------------------ --- send SONG SELECT --------------------------- ------------------------------------------------ 0B08: BD 8A 52 JSR $8A52 0B0B: 34 01 PSHS CC 0B0D: 1A 10 ORCC #$10 ; disable IRQ 0B0F: D7 1E STB $1E ; save data byte 0B11: C6 F3 LDB #$F3 ; transmit song select cmd 0B13: 0F 17 CLR $17 ; clear command register 0B15: BD 8C 16 JSR $8C16 ; 0B18: D6 1E LDB $1E ; transmit song number 0B1A: BD 8C 16 JSR $8C16 ; transmit data byte 0B1D: 35 81 PULS PC,CC ------------------------------------------------ --- send SONG POSITION ------------------------- ------------------------------------------------ 0B1F: BD 8A 52 JSR $8A52 ; get song position (?) 0B22: 34 01 PSHS CC 0B24: 1A 10 ORCC #$10 ; disable IRQ 0B26: 1E 98 EXG B,A ; swap bytes in song position 0B28: DD 1E STD $1E ; store song position for tx 0B2A: C6 F2 LDB #$F2 ; transmit song position cmd 0B2C: 0F 17 CLR $17 ; clear command register 0B2E: 7E 8C 00 JMP $8C00 ; perform transmission ------------------------------------------------ --- send SEQUENCER START ----------------------- ------------------------------------------------ 0B31: C6 FA LDB #$FA ; sequencer start 0B33: 20 06 BRA $0B3B ------------------------------------------------ --- send SEQUENCER STOP ------------------------ ------------------------------------------------ 0B35: C6 FC LDB #$FC ; sequencer stop 0B37: 20 02 BRA $0B3B ------------------------------------------------ --- send SEQUENCER CONTINUE -------------------- ------------------------------------------------ 0B39: C6 FB LDB #$FB ; sequencer continue 0B3B: D7 17 STB $17 ; set command register 0B3D: 1A 10 ORCC #$10 ; disable IRQ 0B3F: BD 8C 16 JSR $8C16 ; perform transmission 0B42: 1C EF ANDCC #$EF ; enable IRQ 0B44: 39 RTS ------------------------------------------------ --- send NOTE OFF (1) -------------------------- ------------------------------------------------ 0B45: BD 8A 52 JSR $8A52 0B48: 34 01 PSHS CC 0B4A: 1A 10 ORCC #$10 ; disable IRQ 0B4C: DD 1E STD $1E ; key + velocity 0B4E: 20 13 BRA $0B63 ------------------------------------------------ --- send NOTE OFF (2) -------------------------- ------------------------------------------------ 0B50: BD 8A 52 JSR $8A52 0B53: 34 01 PSHS CC 0B55: 1A 10 ORCC #$10 ; disable IRQ 0B57: DD 1E STD $1E ; set key + velocity 0B59: E6 03 LDB +$03,X 0B5B: C5 40 BITB #$40 0B5D: 27 04 BEQ $0B63 0B5F: 96 DF LDA $DF ; skip transmission of note 0B61: 26 05 BNE $0B68 ; off if keyboard local ------------------------------------------------ 0B63: C6 90 LDB #$90 ; note off command ($90) 0B65: 7E 8B F4 JMP $8BF4 ; perform transmission ------------------------------------------------ 0B68: DC 1E LDD $1E : get key + velocity 0B6A: 35 81 PULS PC,CC ------------------------------------------------ --- send NOTE ON (1) --------------------------- ------------------------------------------------ 0B6C: BD 8A 52 JSR $8A52 0B6F: 34 01 PSHS CC 0B71: 1A 10 ORCC #$10 ; disable IRQ 0B73: DD 1E STD $1E ; set key & velocity 0B75: 20 2A BRA $0BA1 ------------------------------------------------ --- send NOTE ON (2) --------------------------- ------------------------------------------------ 0B77: BD 8A 52 JSR $8A52 0B7A: 34 01 PSHS CC 0B7C: 1A 10 ORCC #$10 ; disable IRQ 0B7E: DD 1E STD $1E ; store key & velocity 0B80: E6 03 LDB +$03,X 0B82: C5 40 BITB #$40 0B84: 27 1B BEQ $0BA1 ; note on (3) 0B86: 96 DF LDA $DF ; skip sound processing if 0B88: 27 17 BEQ $0BA1 ; keyboard set to MIDI 0B8A: BD 84 79 JSR $8479 0B8D: AF 24 STX +$04,Y 0B8F: DC 1E LDD $1E ; set VDB key & velocity 0B91: ED 26 STD +$06,Y ; 0B93: CC 7A 48 LDD #$7A48 ; VDB handler to ROMLOW $2a48 0B96: ED 22 STD +$02,Y ; 0B98: BD 84 AE JSR $84AE 0B9B: 0B 5E fdb $0B5E 0B9D: DC 1E LDD $1E ; get key & velocity 0B9F: 35 81 PULS PC,CC ------------------------------------------------ --- send NOTE ON (3) --------------------------- ------------------------------------------------ 0BA1: C6 80 LDB #$80 ; note on command ($80) 0BA3: 20 4F BRA $0BF4 ------------------------------------------------ --- send PITCH BEND ---------------------------- ------------------------------------------------ 0BA5: BD 8A 52 JSR $8A52 0BA8: 34 01 PSHS CC 0BAA: 1A 10 ORCC #$10 ; disable IRQ 0BAC: 4F CLRA 0BAD: DD 1E STD $1E ; pitch bend value 0BAF: C6 E0 LDB #$E0 ; pitch bend command ($e0) 0BB1: EA 04 ORB +$04,X ; merge in MIDI channel 0BB3: 20 1C BRA $0BD1 ------------------------------------------------ --- send controller in B with value in $E0 ----- ------------------------------------------------ 0BB5: BD 8A 52 JSR $8A52 0BB8: 34 01 PSHS CC 0BBA: 1A 10 ORCC #$10 ; disable IRQ 0BBC: 81 04 CMPA #$04 0BBE: 26 04 BNE $0BC4 0BC0: 96 E0 LDA $E0 ; controller value 0BC2: 20 09 BRA $0BCD ------------------------------------------------ --- init CONTROLLER ---------------------------- ------------------------------------------------ 0BC4: 34 10 PSHS X 0BC6: 8E 90 B1 LDX #$90B1 ; get data byte 0BC9: A6 86 LDA A,X ; for controller 0BCB: 35 10 PULS X ------------------------------------------------ --- send CONTROLLER ---------------------------- ------------------------------------------------ 0BCD: DD 1E STD $1E ; store for transmission 0BCF: C6 B0 LDB #$B0 ; controller byte ($b0) 0BD1: 96 E3 LDA $E3 0BD3: 27 3B BEQ $0C10 0BD5: 20 1D BRA $0BF4 ; transmit controller + data ------------------------------------------------ --- send POLYPHONIC PRESSURE ------------------- ------------------------------------------------ 0BD7: BD 8A 52 JSR $8A52 0BDA: 34 01 PSHS CC 0BDC: 1A 10 ORCC #$10 ; disable IRQ 0BDE: DD 1E STD $1E ; store key & amount 0BE0: C6 A0 LDB #$A0 ; polypressure command ($a0) 0BE2: 20 ED BRA $0BD1 ------------------------------------------------ --- send ALL NOTES OFF ------------------------- ------------------------------------------------ 0BE4: BD 8A 52 JSR $8A52 0BE7: 34 01 PSHS CC 0BE9: 1A 10 ORCC #$10 ; disable IRQ 0BEB: CC 7B 00 LDD #$7B00 ; all notes off controller 0BEE: DD 1E STD $1E ; 0BF0: C6 B0 LDB #$B0 ; controller command 0BF2: 20 00 BRA $0BF4 ------------------------------------------------ --- send 2 byte command via MIDI --------------- ------------------------------------------------ 0BF4: EA 04 ORB +$04,X ; merge in MIDI channel 0BF6: A6 03 LDA +$03,X 0BF8: 84 C0 ANDA #$C0 0BFA: 2F 04 BLE $0C00 0BFC: 96 DF LDA $DF ; skip MIDI tx if keyboard 0BFE: 27 10 BEQ $0C10 ; set to local 0C00: D1 17 CMPB $17 ; skip command byte if same 0C02: 27 04 BEQ $0C08 ; as last command 0C04: D7 17 STB $17 ; set & transmit command 0C06: 8D 0E BSR $0C16 ; 0C08: D6 1E LDB $1E ; send data byte 1 0C0A: 8D 0A BSR $0C16 ; 0C0C: D6 1F LDB $1F ; send data byte 2 0C0E: 8D 06 BSR $0C16 ; 0C10: DC 1E LDD $1E ; reload sent data 0C12: 35 81 PULS PC,CC ------------------------------------------------ --- send TIMING CLOCK -------------------------- ------------------------------------------------ 0C14: C6 F8 LDB #$F8 ; timing clock command ------------------------------------------------ --- prepare transmittion of databyte in B ------ ------------------------------------------------ 0C16: 34 10 PSHS X 0C18: 0C 29 INC $29 ; increase data size counter 0C1A: 9E 18 LDX $18 ; get tx buffer position 0C1C: E7 80 STB ,X+ ; store B to tx buffer 0C1E: 8C 0B C6 CMPX #$0BC6 ; end of buffer reached? 0C21: 25 03 BCS $0C26 0C23: 8E 0B A6 LDX #$0BA6 ; yes, reset pointer 0C26: 9F 18 STX $18 ; 0C28: 86 04 LDA #$04 ; enable transmission 0C2A: B7 64 02 STA $6402 ; 0C2D: 35 90 PULS PC,X ------------------------------------------------ --- Serial Interrupt: Port A (MIDI) ------------ ------------------------------------------------ 0C2F: B6 64 01 LDA $6401 ; get status A 0C32: 27 08 BEQ $0C3C ; no status -> skip check 0C34: 85 04 BITA #$04 ; transmitter empty? 0C36: 26 38 BNE $0C70 ; yes, handler 0C38: 85 F0 BITA #$F0 ; break or error? 0C3A: 27 23 BEQ $0C5F ; no 0C3C: 8E 02 EF LDX #$02EF ; 8 sets at $02ef/$03c6 0C3F: 6F 07 CLR +$07,X ; x+7 = 0 0C41: 30 88 1B LEAX +$1B,X ; x=x+$1b 0C44: 8C 03 C7 CMPX #$03C7 0C47: 25 F6 BCS $0C3F 0C49: BD 84 79 JSR $8479 ; if $10=0 goto $848a else SWI 0C4C: CC 7C 90 LDD #$7C90 ; VDB handler to ROMLOW $2c90 0C4F: ED 22 STD +$02,Y ; 0C51: CC 00 00 LDD #$0000 0C54: ED 24 STD +$04,Y ; ($10)+4 = $0000 0C56: BD 84 AE JSR $84AE 0C59: 0B 5E fdb $0B5E 0C5B: BD 89 B0 JSR $89B0 0C5E: 3B RTI ------------------------------------------------ --- DUART interrupt source checking ------------ ------------------------------------------------ 0C5F: 85 01 BITA #$01 ; rxrdy IRQ? 0C61: 27 02 BEQ $0C65 0C63: 8D 42 BSR $0CA7 0C65: 3B RTI ------------------------------------------------ --- move MIDI rx handler from stack to $1c ----- ------------------------------------------------ 0C66: 35 06 PULS B,A 0C68: DD 1C STD $1C 0C6A: 39 RTS ------------------------------------------------ --- move MIDI tx handler from stack to $25 ----- ------------------------------------------------ 0C6B: 35 06 PULS B,A 0C6D: DD 25 STD $25 0C6F: 39 RTS ------------------------------------------------ --- DUART interrupt: MIDI transmitter empty ---- ------------------------------------------------ 0C70: AD 9F 00 25 JSR [$0025] ; jump to tx handler 0C74: 20 EF BRA $0C65 ; RTI ------------------------------------------------ --- MIDI transmit routine ---------------------- ------------------------------------------------ 0C76: 0A 29 DEC $29 ; clean up length of ptr. 0C78: 9E 27 LDX $27 0C7A: 27 10 BEQ $0C8C 0C7C: 96 29 LDA $29 ; get length of MIDI cmd. 0C7E: 81 04 CMPA #$04 ; more than 4? 0C80: 22 0A BHI $0C8C ; yes -> $8c8c 0C82: A6 02 LDA +$02,X ; get third byte from buffer 0C84: 84 FB ANDA #$FB ; clear bit 3 0C86: A7 02 STA +$02,X ; write back byte 0C88: EC 84 LDD ,X ; get first two bytes from 0C8A: DD 27 STD $27 ; buffer and use as tx ptr. 0C8C: 9E 1A LDX $1A ; transmit unsent bytes 0C8E: A6 80 LDA ,X+ ; from tx buffer 0C90: B7 64 03 STA $6403 0C93: 8C 0B C6 CMPX #$0BC6 0C96: 25 03 BCS $0C9B 0C98: 8E 0B A6 LDX #$0BA6 ; tx buffer base 0C9B: 9C 18 CMPX $18 ; same as actual tx-write base? 0C9D: 26 05 BNE $0CA4 ; no -> return 0C9F: C6 08 LDB #$08 ; yes, disable transmitter 0CA1: F7 64 02 STB $6402 0CA4: 9F 1A STX $1A 0CA6: 39 RTS ------------------------------------------------ --- DUART interrupt: MIDI receiver ready ------- ------------------------------------------------ 0CA7: F6 64 03 LDB $6403 ; receive register 0CAA: 96 A8 LDA $A8 0CAC: 81 11 CMPA #$11 0CAE: 26 03 BNE $0CB3 0CB0: 7E 8D 44 JMP $8D44 ; get MIDI rx h. from stack ------------------------------------------------ --- MIDI receive mode "$11" -------------------- ------------------------------------------------ 0CB3: 5D TSTB 0CB4: 2B 06 BMI $0CBC ; process MIDI command 0CB6: 6E 9F 00 1C JMP [$001C] ; process rx'ed MIDI data ------------------------------------------------ 0CBA: 20 14 BRA $0CD0 ; sysex handling ------------------------------------------------ --- MIDI receive: command received ------------- ------------------------------------------------ 0CBC: 7D 00 CC TST $00CC ; awaiting sysex data? 0CBF: 27 0F BEQ $0CD0 ; yes, process data 0CC1: C1 F8 CMPB #$F8 ; sysex received? 0CC3: 25 01 BCS $0CC6 ; yes, process sysex 0CC5: 39 RTS ------------------------------------------------ --- MIDI receive: sysex message received ------- ------------------------------------------------ 0CC6: C1 F0 CMPB #$F0 ; sysex 0CC8: 27 06 BEQ $0CD0 0CCA: C1 F7 CMPB #$F7 ; EOX 0CCC: 10 26 00 74 LBNE $0D44 ; get MIDI rx h. from stack ------------------------------------------------ --- MIDI receive: sysex received --------------- ------------------------------------------------ 0CD0: D7 2E STB $2E ; byte received 0CD2: C4 70 ANDB #$70 ; stripe off sysex command 0CD4: C1 70 CMPB #$70 0CD6: 27 62 BEQ $0D3A ; byte = $70 0CD8: D6 2E LDB $2E ; restore received byte 0CDA: C4 0F ANDB #$0F ; get bit 3-0 0CDC: D7 20 STB $20 ; store received nibble 0CDE: D7 22 STB $22 ; store received nibble 0CE0: CE 90 91 LDU #$9091 ; handler? 0CE3: 0F 24 CLR $24 0CE5: 96 E2 LDA $E2 0CE7: 81 02 CMPA #$02 0CE9: 27 04 BEQ $0CEF 0CEB: 81 03 CMPA #$03 0CED: 26 24 BNE $0D13 0CEF: 1F 98 TFR B,A ; $E2 = 2 0CF1: 48 LSLA ; double nibble 0CF2: 8E 0B C6 LDX #$0BC6 ; MIDI receive buffer 0CF5: AE 86 LDX A,X ; x = buffer + 2*A 0CF7: 9F 2C STX $2C ; store value 0CF9: 26 16 BNE $0D11 ; value != 0 0CFB: 96 E2 LDA $E2 0CFD: 81 03 CMPA #$03 0CFF: 26 0D BNE $0D0E 0D01: 96 22 LDA $22 0D03: 91 23 CMPA $23 0D05: 26 07 BNE $0D0E 0D07: CE 90 A1 LDU #$90A1 0D0A: 0A 24 DEC $24 0D0C: 20 03 BRA $0D11 ------------------------------------------------ 0D0E: 7E 8D 44 JMP $8D44 ; rx handler stack->$1c ------------------------------------------------ 0D11: 20 1B BRA $0D2E ------------------------------------------------ 0D13: 9E C1 LDX $C1 ; $E2 = 3 0D15: 9F 2C STX $2C 0D17: 96 E2 LDA $E2 0D19: 81 01 CMPA #$01 0D1B: 26 07 BNE $0D24 0D1D: D1 DE CMPB $DE 0D1F: 27 03 BEQ $0D24 0D21: 7E 8D 44 JMP $8D44 ------------------------------------------------ 0D24: A6 03 LDA +$03,X 0D26: 84 C0 ANDA #$C0 0D28: 81 40 CMPA #$40 0D2A: 10 27 00 16 LBEQ $0D44 0D2E: D6 2E LDB $2E ; get rx'ed command 0D30: C4 70 ANDB #$70 ; limit to command part 0D32: 57 ASRB ; part to table offset 0D33: 57 ASRB ; 0D34: 57 ASRB ; 0D35: EC C5 LDD B,U ; set MIDI rx data proc. handler 0D37: DD 1C STD $1C ; 0D39: 39 RTS ------------------------------------------------ --- jump to sysex processing handler ----------- ------------------------------------------------ 0D3A: D6 2E LDB $2E ; get rx'ed command 0D3C: C4 0F ANDB #$0F ; get sysex command 0D3E: 8E 90 BD LDX #$90BD ; indirect jump to 0D41: 58 LSLB ; data processing handler 0D42: 6E 95 JMP [B,X] ------------------------------------------------ --- move MIDI rx handler from stack to $1c ----- ------------------------------------------------ 0D44: BD 8C 66 JSR $8C66 0D47: 39 RTS ------------------------------------------------ 0D48: D7 20 STB $20 0D4A: BD 8C 66 JSR $8C66 ; rx handler stack->$1c 0D4D: 96 20 LDA $20 0D4F: CE 8D 48 LDU #$8D48 ; rx handler to $8d48 0D52: DF 1C STU $1C ; 0D54: 9E 2C LDX $2C 0D56: 9C C1 CMPX $C1 0D58: 26 0F BNE $0D69 0D5A: BD 84 79 JSR $8479 ; $10==0 ? $848a : SWI 0D5D: ED 24 STD +$04,Y 0D5F: CE 00 12 LDU #$0012 ; VDB handler to $0012 0D62: EF 22 STU +$02,Y ; 0D64: BD 84 AE JSR $84AE 0D67: 0B 6D fdb $0B6D 0D69: 96 DF LDA $DF 0D6B: 27 0D BEQ $0D7A 0D6D: A6 03 LDA +$03,X 0D6F: 84 C0 ANDA #$C0 0D71: 27 07 BEQ $0D7A 0D73: 96 20 LDA $20 0D75: CE 7A 48 LDU #$7A48 ; VDB handler to ROMLOW $2a48 0D78: 8D 05 BSR $0D7F 0D7A: 96 20 LDA $20 0D7C: CE 7A E1 LDU #$7AE1 ; VDB handler to ROMLOW $2ae1 0D7F: BD 84 79 JSR $8479 ; $10==0 ? $848a : SWI 0D82: AF 24 STX +$04,Y ; set address for U pointer 0D84: EF 22 STU +$02,Y ; set VDC handler 0D86: ED 26 STD +$06,Y ; set SEQRAM address pointer 0D88: A6 03 LDA +$03,X 0D8A: 84 C0 ANDA #$C0 0D8C: 26 05 BNE $0D93 0D8E: BD 84 9F JSR $849F ; $10->[$10], Y->$10, $12-- 0D91: 20 05 BRA $0D98 ------------------------------------------------ 0D93: BD 84 AE JSR $84AE 0D96: 0B 5E fdb $0B5E 0D98: 39 RTS ------------------------------------------------ 0D99: D7 20 STB $20 0D9B: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 0D9E: 96 20 LDA $20 0DA0: C1 00 CMPB #$00 0DA2: 26 0B BNE $0DAF 0DA4: C6 40 LDB #$40 0DA6: 96 20 LDA $20 0DA8: CE 8D 99 LDU #$8D99 ; rx handler to $8d99 0DAB: DF 1C STU $1C 0DAD: 20 A5 BRA $0D54 ------------------------------------------------ 0DAF: 96 20 LDA $20 0DB1: CE 8D 99 LDU #$8D99 ; rx handler to $8d99 0DB4: DF 1C STU $1C 0DB6: 9E 2C LDX $2C 0DB8: 9C C1 CMPX $C1 0DBA: 26 0F BNE $0DCB 0DBC: BD 84 79 JSR $8479 0DBF: ED 24 STD +$04,Y 0DC1: CE 00 10 LDU #$0010 ; VDB handler to $0010 0DC4: EF 22 STU +$02,Y 0DC6: BD 84 AE JSR $84AE 0DC9: 0B 6D fdb $0B6D 0DCB: CE 7A 52 LDU #$7A52 ; VDB handler to $2a52 0DCE: 20 AF BRA $0D7F ------------------------------------------------ --- MIDI controller parsing -------------------- ------------------------------------------------ 0DD0: BD 8C 66 JSR $8C66 ; rx handler stack -> $1c 0DD3: C1 01 CMPB #$01 ; mod. wheel ctrl 0DD5: 26 06 BNE $0DDD 0DD7: CC 8F 0A LDD #$8F0A ; rx handler to $8f0a 0DDA: DD 1C STD $1C 0DDC: 39 RTS ------------------------------------------------ 0DDD: C1 40 CMPB #$40 ; sustain pedal ctrl 0DDF: 26 06 BNE $0DE7 0DE1: CC 8F 0E LDD #$8F0E ; rx handler to $8f0e 0DE4: DD 1C STD $1C 0DE6: 39 RTS ------------------------------------------------ 0DE7: C1 04 CMPB #$04 ; foot controller 0DE9: 26 06 BNE $0DF1 0DEB: CC 8F 2E LDD #$8F2E ; rx handler to $8f2e 0DEE: DD 1C STD $1C 0DF0: 39 RTS ------------------------------------------------ 0DF1: C1 07 CMPB #$07 ; main volume ctrl 0DF3: 26 06 BNE $0DFB 0DF5: CC 8E F5 LDD #$8EF5 ; rx handler to $8ef5 0DF8: DD 1C STD $1C 0DFA: 39 RTS ------------------------------------------------ 0DFB: D1 E0 CMPB $E0 ; user defined (XCTRL) ctrl. 0DFD: 26 06 BNE $0E05 0DFF: CC 8F 32 LDD #$8F32 ; rx handler to $8f32 0E02: DD 1C STD $1C 0E04: 39 RTS ------------------------------------------------; non-processed controller 0E05: CE 8F 81 LDU #$8F81 ; rx handler to $8f81 0E08: DF 1C STU $1C 0E0A: 96 22 LDA $22 0E0C: 91 DE CMPA $DE 0E0E: 10 26 00 5D LBNE $0E6F 0E12: 96 E3 LDA $E3 0E14: 81 04 CMPA #$04 0E16: 26 57 BNE $0E6F 0E18: 96 A8 LDA $A8 0E1A: 81 01 CMPA #$01 0E1C: 26 51 BNE $0E6F 0E1E: C1 06 CMPB #$06 ; data entry ctrl 0E20: 26 05 BNE $0E27 0E22: CE 8E 70 LDU #$8E70 ; rx handler to $8e70 0E25: 20 14 BRA $0E3B ------------------------------------------------ 0E27: C1 60 CMPB #$60 ; data increment ctrl 0E29: 26 05 BNE $0E30 0E2B: CE 8E 82 LDU #$8E82 ; rx handler to $8e82 0E2E: 20 0B BRA $0E3B ------------------------------------------------ 0E30: C1 61 CMPB #$61 ; data decrement ctrl 0E32: 26 05 BNE $0E39 0E34: CE 8E 86 LDU #$8E86 ; rx handler to $8e86 0E37: 20 02 BRA $0E3B ------------------------------------------------ 0E39: 20 0C BRA $0E47 ------------------------------------------------ 0E3B: 96 B4 LDA $B4 0E3D: 81 89 CMPA #$89 0E3F: 25 03 BCS $0E44 0E41: CE 8F 81 LDU #$8F81 ; rx handler to $8f81 0E44: DF 1C STU $1C 0E46: 39 RTS ------------------------------------------------ 0E47: C1 62 CMPB #$62 ; param. select lsb ctrl 0E49: 26 06 BNE $0E51 0E4B: CC 8E A1 LDD #$8EA1 ; rx handler to $8ea1 0E4E: DD 1C STD $1C 0E50: 39 RTS ------------------------------------------------ 0E51: C1 63 CMPB #$63 ; param. select msb ctrl 0E53: 26 06 BNE $0E5B 0E55: CC 8E AD LDD #$8EAD ; rx handler to $8ead 0E58: DD 1C STD $1C 0E5A: 39 RTS ------------------------------------------------ 0E5B: C1 64 CMPB #$64 ; r. param lsb ctrl 0E5D: 26 06 BNE $0E65 0E5F: CC 8E 9E LDD #$8E9E ; rx handler to $8e9e 0E62: DD 1C STD $1C 0E64: 39 RTS ------------------------------------------------ 0E65: C1 65 CMPB #$65 ; r. param msb ctrl 0E67: 26 06 BNE $0E6F 0E69: CC 8E 9E LDD #$8E9E ; rx handler to $8e9e 0E6C: DD 1C STD $1C 0E6E: 39 RTS ------------------------------------------------ 0E6F: 39 RTS ------------------------------------------------ --- data entry controller receive handler ------ ------------------------------------------------ 0E70: BD 84 79 JSR $8479 0E73: E7 24 STB +$04,Y 0E75: CC 74 5F LDD #$745F ; voice block to $245f 0E78: ED 22 STD +$02,Y 0E7A: BD 84 AE JSR $84AE 0E7D: 0B 4F fdb $0B4F 0E7F: 7E 8D D0 JMP $8DD0 ; back to controller parsing ------------------------------------------------ --- data increment controller receive handler -- ------------------------------------------------ 0E82: C6 18 LDB #$18 ; INC button code 0E84: 20 02 BRA $0E88 ------------------------------------------------ --- data decrement controller receive handler -- ------------------------------------------------ 0E86: C6 19 LDB #$19 ; DEC button code 0E88: BD 84 79 JSR $8479 0E8B: E7 24 STB +$04,Y ; set keycode 0E8D: 86 01 LDA #$01 ; key down (?) 0E8F: A7 25 STA +$05,Y ; 0E91: CC 74 71 LDD #$7471 ; VDB handler to ROMLOW $2471 0E94: ED 22 STD +$02,Y ; 0E96: BD 84 AE JSR $84AE 0E99: 0B 4F fdb $0B4F 0E9B: 7E 8D D0 JMP $8DD0 ; back to controller parsing ------------------------------------------------ --- registered parameter controller rx handler - ------------------------------------------------ 0E9E: 7E 8D D0 JMP $8DD0 ; back to controller parsing ------------------------------------------------ --- non-reg. param. lsb controller rx handler -- ------------------------------------------------ 0EA1: 8E 0B A3 LDX #$0BA3 0EA4: CE A6 1C LDU #$A61C ; voice block to $a61c 0EA7: E7 01 STB +$01,X 0EA9: 86 40 LDA #$40 0EAB: 20 0A BRA $0EB7 ------------------------------------------------ --- non-reg. param. msb controller rx handler -- ------------------------------------------------ 0EAD: 8E 0B A3 LDX #$0BA3 0EB0: CE A6 1C LDU #$A61C ; VDB handler to $a61c 0EB3: E7 84 STB ,X 0EB5: 86 80 LDA #$80 0EB7: AA 02 ORA +$02,X 0EB9: A7 02 STA +$02,X 0EBB: 81 C0 CMPA #$C0 0EBD: 26 13 BNE $0ED2 0EBF: BD 84 79 JSR $8479 0EC2: EF 22 STU +$02,Y 0EC4: EC 84 LDD ,X 0EC6: 44 LSRA 0EC7: 24 02 BCC $0ECB 0EC9: CA 80 ORB #$80 0ECB: ED 24 STD +$04,Y ; set VDB handler 0ECD: BD 84 AE JSR $84AE 0ED0: 0B 4F fdb $0B4F 0ED2: 7E 8D D0 JMP $8DD0 ; back to controller parsing ------------------------------------------------ 0ED5: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 0ED8: 0D DF TST $DF 0EDA: 27 0F BEQ $0EEB 0EDC: 9E 2C LDX $2C 0EDE: A6 03 LDA +$03,X 0EE0: 84 C0 ANDA #$C0 0EE2: 27 07 BEQ $0EEB 0EE4: 34 04 PSHS B 0EE6: BD 8B A8 JSR $8BA8 ; pitch bend 0EE9: 35 04 PULS B 0EEB: 86 06 LDA #$06 0EED: 8D 5C BSR $0F4B 0EEF: CC 8E D5 LDD #$8ED5 ; MIDI rx handler to $8ed5 0EF2: DD 1C STD $1C 0EF4: 39 RTS ------------------------------------------------ --- main volume controller receive handler ----- ------------------------------------------------ 0EF5: 86 0C LDA #$0C 0EF7: BD 84 79 JSR $8479 0EFA: 8E 80 E0 LDX #$80E0 ; VDB handler to $80e0 0EFD: AF 22 STX +$02,Y ; 0EFF: 9E 2C LDX $2C 0F01: AF 26 STX +$06,Y 0F03: BD 84 AE JSR $84AE 0F06: 0B 4F fdb $0B4F 0F08: 20 2A BRA $0F34 ------------------------------------------------ --- modulation wheel receive handler ----------- ------------------------------------------------ 0F0A: 86 08 LDA #$08 0F0C: 20 26 BRA $0F34 ------------------------------------------------ --- sustain pedal receive handler -------------- ------------------------------------------------ 0F0E: 96 E3 LDA $E3 0F10: 27 1B BEQ $0F2D 0F12: 86 07 LDA #$07 0F14: 34 04 PSHS B 0F16: 8D 1C BSR $0F34 0F18: 35 04 PULS B 0F1A: C4 40 ANDB #$40 0F1C: 26 0F BNE $0F2D 0F1E: BD 84 79 JSR $8479 0F21: AF 24 STX +$04,Y 0F23: CC 7B 62 LDD #$7B62 ; VDB handler to $2b62 0F26: ED 22 STD +$02,Y ; 0F28: BD 84 AE JSR $84AE 0F2B: 0B 5E fdb $0B5E 0F2D: 39 RTS ------------------------------------------------ --- foot controller receive handler ------------ ------------------------------------------------ 0F2E: 86 09 LDA #$09 0F30: 20 02 BRA $0F34 ------------------------------------------------ --- user defined controller (XCTRL) handler ---- ------------------------------------------------ 0F32: 86 0A LDA #$0A 0F34: 0D DF TST $DF 0F36: 27 13 BEQ $0F4B 0F38: 9E 2C LDX $2C 0F3A: 34 06 PSHS B,A 0F3C: A6 03 LDA +$03,X 0F3E: 84 C0 ANDA #$C0 0F40: 27 07 BEQ $0F49 0F42: A6 E4 LDA ,S 0F44: 80 06 SUBA #$06 0F46: BD 8B B8 JSR $8BB8 0F49: 35 06 PULS B,A 0F4B: CE 8D D3 LDU #$8DD3 ; rx handler to $8dd3 0F4E: DF 1C STU $1C 0F50: 9E 2C LDX $2C 0F52: 0D E3 TST $E3 0F54: 27 2B BEQ $0F81 0F56: 0D 24 TST $24 0F58: 26 1A BNE $0F74 0F5A: E7 86 STB A,X 0F5C: 80 06 SUBA #$06 0F5E: 9C C1 CMPX $C1 0F60: 26 0F BNE $0F71 0F62: BD 84 79 JSR $8479 0F65: ED 24 STD +$04,Y 0F67: CE 00 14 LDU #$0014 ; VDB handler to $0014 0F6A: EF 22 STU +$02,Y ; 0F6C: BD 84 AE JSR $84AE 0F6F: 0B 6D fdb $0B6D 0F71: 39 RTS ------------------------------------------------ 0F72: 20 0D BRA $0F81 ------------------------------------------------ --- store B to track table position A ---------- --- for all tracks but track 0 ----------------- ------------------------------------------------ 0F74: 8E 02 EF LDX #$02EF ; track table base +$1b 0F77: E7 86 STB A,X ; write b to position a 0F79: 30 88 1B LEAX +$1B,X ; next track 0F7C: 8C 03 AC CMPX #$03AC ; all tracks processed? 0F7F: 23 F6 BLS $0F77 ------------------------------------------------ --- not-processed controller receive handler --- ------------------------------------------------ 0F81: CE 8D D3 LDU #$8DD3 ; rx handler to $8dd3 0F84: DF 1C STU $1C 0F86: 39 RTS ------------------------------------------------ 0F87: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 0F8A: 96 E1 LDA $E1 0F8C: 27 19 BEQ $0FA7 0F8E: 86 05 LDA #$05 0F90: 8D CC BSR $0F5E 0F92: 86 80 LDA #$80 0F94: BD 84 79 JSR $8479 0F97: ED 26 STD +$06,Y 0F99: CE 7C 65 LDU #$7C65 ; VDB handler to ROMLOW $2c65 0F9C: EF 22 STU +$02,Y ; 0F9E: 9E 2C LDX $2C 0FA0: AF 24 STX +$04,Y 0FA2: BD 84 AE JSR $84AE 0FA5: 0B 5E fdb $0B5E 0FA7: 20 DE BRA $0F87 ------------------------------------------------ 0FA9: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 0FAC: 96 E3 LDA $E3 0FAE: 10 27 FD 92 LBEQ $0D44 0FB2: 96 E1 LDA $E1 0FB4: 10 27 FD 8C LBEQ $0D44 0FB8: D7 20 STB $20 0FBA: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 0FBD: 96 20 LDA $20 0FBF: 9E 2C LDX $2C 0FC1: BD 84 79 JSR $8479 0FC4: CE 7C 65 LDU #$7C65 ; VDB handler to ROMLOW $2c65 0FC7: EF 22 STU +$02,Y ; 0FC9: AF 24 STX +$04,Y 0FCB: ED 26 STD +$06,Y 0FCD: BD 84 AE JSR $84AE 0FD0: 0B 5E fdb $0B5E 0FD2: 8A 80 ORA #$80 0FD4: 8D 88 BSR $0F5E 0FD6: 20 D1 BRA $0FA9 ------------------------------------------------ 0FD8: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 0FDB: 9E 2C LDX $2C 0FDD: 96 E3 LDA $E3 0FDF: 81 02 CMPA #$02 0FE1: 25 3C BCS $101F 0FE3: 96 A8 LDA $A8 0FE5: 81 0E CMPA #$0E 0FE7: 27 36 BEQ $101F 0FE9: 96 DF LDA $DF 0FEB: 27 13 BEQ $1000 0FED: A6 03 LDA +$03,X 0FEF: 34 12 PSHS X,A 0FF1: 84 C0 ANDA #$C0 0FF3: 27 07 BEQ $0FFC 0FF5: 86 80 LDA #$80 0FF7: A7 03 STA +$03,X 0FF9: BD 8A BD JSR $8ABD 0FFC: 35 12 PULS X,A 0FFE: A7 03 STA +$03,X 1000: C1 78 CMPB #$78 1002: 24 1B BCC $101F 1004: BD 84 79 JSR $8479 1007: CE 74 01 LDU #$7401 ; VDB handler to ROMLOW $2401 100A: EF 22 STU +$02,Y ; 100C: E7 24 STB +$04,Y 100E: AF 26 STX +$06,Y 1010: BD 84 AE JSR $84AE 1013: 0B 4F fdb $0B4F 1015: E7 02 STB +$02,X 1017: 86 66 LDA #$66 ; PCB length 1019: 3D MUL 101A: C3 10 4A ADDD #$104A ; get program address 101D: ED 84 STD ,X 101F: 20 B7 BRA $0FD8 ------------------------------------------------ 1021: 96 E5 LDA $E5 1023: 81 01 CMPA #$01 1025: 27 04 BEQ $102B 1027: 81 81 CMPA #$81 1029: 26 03 BNE $102E 102B: 7E 9A 94 JMP $9A94 ------------------------------------------------ 102E: 39 RTS ------------------------------------------------ --- sysex received: sequencer start ------------ ------------------------------------------------ 102F: 8E 00 08 LDX #$0008 ; VDB handler to $0008 1032: 20 08 BRA $103C ------------------------------------------------ --- sysex received: sequencer stop ------------- ------------------------------------------------ 1034: 8E 00 0C LDX #$000C ; VDB handler to $000c 1037: 20 03 BRA $103C ------------------------------------------------ --- sysex received: sequencer continue --------- ------------------------------------------------ 1039: 8E 00 0A LDX #$000A ; VDB handler to $000a 103C: 96 E5 LDA $E5 103E: 84 7F ANDA #$7F 1040: 81 01 CMPA #$01 1042: 26 0E BNE $1052 1044: BD 84 79 JSR $8479 1047: AF 22 STX +$02,Y ; set VDB handler 1049: A7 24 STA +$04,Y 104B: A7 26 STA +$06,Y 104D: BD 84 AE JSR $84AE 1050: 0B 6D fdb $0B6D ------------------------------------------------ --- sysex received: active sensing ------------- --- system reset --------------- ------------------------------------------------ 1052: 39 RTS ------------------------------------------------ --- sysex received: song position -------------- ------------------------------------------------ 1053: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 1056: D7 2E STB $2E 1058: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 105B: 1F 98 TFR B,A 105D: D6 2E LDB $2E 105F: BD 84 79 JSR $8479 1062: 8E 00 02 LDX #$0002 ; VDB handler to $0002 1065: AF 22 STX +$02,Y ; 1067: ED 24 STD +$04,Y 1069: BD 84 AE JSR $84AE 106C: 0B 6D fdb $0B6D 106E: 20 E3 BRA $1053 ------------------------------------------------ --- sysex received: song select ---------------- ------------------------------------------------ 1070: BD 8C 66 JSR $8C66 ; rx-handler stack -> $1c 1073: 96 E3 LDA $E3 1075: 81 03 CMPA #$03 1077: 24 03 BCC $107C 1079: 7E 8D 44 JMP $8D44 ------------------------------------------------ 107C: BD 84 79 JSR $8479 107F: E7 24 STB +$04,Y 1081: CC 00 04 LDD #$0004 ; VDB handler to $0004 1084: ED 22 STD +$02,Y ; 1086: 86 FF LDA #$FF 1088: A7 26 STA +$06,Y 108A: BD 84 AE JSR $84AE 108D: 0B 6D fdb $0B6D 108F: 20 DF BRA $1070 ------------------------------------------------ ------------------------------------------------ --- MIDI handlers ------------------------------ ------------------------------------------------ 1091: 8D 48 FDB $8D48 ; MIDI rx handler (1) 1093: 8D 99 FDB $8D99 ; MIDI rx handler (2) 1095: 8F AC FDB $8FAC ; MIDI related 1097: 8D D3 FDB $8DD3 ; MIDI rx handler (data proc?) 1099: 8F DB FDB $8FDB ; MIDI related 109B: 8F 8A FDB $8F8A ; MIDI related 109D: 8E D5 FDB $8ED5 ; pitch bend related 109F: 8D 47 FDB $8D47 ; RTS 10A1: 8D 47 FDB $8D47 ; RTS 10A3: 8D 47 FDB $8D47 ; RTS 10A5: 8D 47 FDB $8D47 ; RTS 10A7: 8D D3 FDB $8DD3 ; MIDI rx handler (data proc?) 10A9: 8D 47 FDB $8D47 ; RTS 10AB: 8F 8A FDB $8F8A ; MIDI related 10AD: 8E D5 FDB $8ED5 ; pitch bend related 10AF: 8D 47 FDB $8D47 ; RTS ------------------------------------------------ --- MIDI controller init values (byte 1/2) ------------------------------------------------ 10B1: 00 40 10B3: 01 04 10B5: 00 00 10B7: 07 06 10B9: 60 61 10BA: 62 63 ------------------------------------------------ --- MIDI sysex processing handler -------------- ------------------------------------------------ 10BD: 94 E3 FDB $94E3 ; universal sysex message 10BF: 8D 44 FDB $8D44 ; time code, rx h. from stack to $1c 10C1: 90 53 FDB $9053 ; song position 10C3: 90 70 FDB $9070 ; song select 10C5: 8D 44 FDB $8D44 ; ndef, rx handler from stack to $1c 10C7: 8D 44 FDB $8D44 ; ndef, rx handler from stack to $1c 10C9: 8D 44 FDB $8D44 ; tune request, rx h. from stack to $1c 10CB: 94 B7 FDB $94B7 ; end of sysex 10CD: 90 21 FDB $9021 ; timing clock 10CF: 8D 44 FDB $8D44 ; ndef, rx handler from stack to $1c 10D1: 90 2F FDB $902F ; sequencer start 10D3: 90 39 FDB $9039 ; sequencer continue 10D5: 90 34 FDB $9034 ; sequencer stop 10D7: 8D 44 FDB $8D44 ; ndef, rx handler from stack to $1c 10D9: 90 52 FDB $9052 ; active sensing, RTS 10DB: 90 52 FDB $9052 ; system reset, RTS ------------------------------------------------ 10DD: 0F 0D CLR $0D 10DF: 0F 1E CLR $1E 10E1: 0F 17 CLR $17 10E3: 86 FF LDA #$FF 10E5: 97 1F STA $1F 10E7: 1F 41 TFR S,X ; stack base to X 10E9: 30 02 LEAX +$02,X ; stack base + 2 10EB: 9F 37 STX $37 ; to $37 10ED: 7E 86 02 JMP $8602 ------------------------------------------------ 10F0: BD 97 C8 JSR $97C8 ; delay & reset DUART port A 10F3: 96 0D LDA $0D 10F5: 81 02 CMPA #$02 10F7: 26 06 BNE $10FF 10F9: BD C4 D5 JSR $C4D5 ; clear/init buffers 10FC: BD C4 03 JSR $C403 ; buffer stuff 10FF: 86 4A LDA #$4A ; reset errors, disable tx/rx 1101: B7 64 02 STA $6402 1104: 86 5A LDA #$5A ; reset break irq, disable tx/rx 1106: B7 64 02 STA $6402 1109: 10 DE 37 LDS $37 110C: 96 1E LDA $1E 110E: 27 04 BEQ $1114 1110: 96 0D LDA $0D 1112: 27 03 BEQ $1117 1114: 7E 86 93 JMP $8693 ------------------------------------------------ 1117: 32 7E LEAS -$02,S 1119: 0F 1E CLR $1E 111B: 86 06 LDA #$06 111D: 97 0D STA $0D 111F: 6E 9F 0B E9 JMP [$0BE9] ; jump to hook address ------------------------------------------------ 1123: 8D B8 BSR $10DD 1125: BD 96 C4 JSR $96C4 1128: C6 01 LDB #$01 112A: BD 98 0D JSR $980D 112D: FC 02 D4 LDD $02D4 ; track table base 1130: C3 FF C6 ADDD #$FFC6 1133: 1F 01 TFR D,X 1135: C3 00 66 ADDD #$0066 ; PCB length ? 1138: 34 06 PSHS B,A 113A: E6 80 LDB ,X+ 113C: BD 98 18 JSR $9818 113F: AC E4 CMPX ,S 1141: 26 F7 BNE $113A 1143: 32 62 LEAS +$02,S 1145: 20 17 BRA $115E ------------------------------------------------ --- dump internal sound bank via MIDI ---------- ------------------------------------------------ 1147: 8D 94 BSR $10DD 1149: BD 96 C4 JSR $96C4 ; transmit 114C: C6 02 LDB #$02 ; sysex/all program dump header 114E: BD 98 0D JSR $980D 1151: 8E 10 10 LDX #$1010 ; sound program 1154: E6 80 LDB ,X+ ; B <- sound parameters 1156: BD 98 18 JSR $9818 ; transmit B via MIDI 1159: 8C 20 00 CMPX #$2000 115C: 26 F6 BNE $1154 115E: C6 F7 LDB #$F7 ; transmit eof sysex 1160: BD 98 0D JSR $980D 1163: 96 0D LDA $0D 1165: 26 04 BNE $116B 1167: 86 01 LDA #$01 1169: 97 0D STA $0D 116B: 20 83 BRA $10F0 ------------------------------------------------ 116D: 8D 02 BSR $1171 116F: 20 F2 BRA $1163 ------------------------------------------------ 1171: 7D 0B E6 TST $0BE6 1174: 27 02 BEQ $1178 1176: 8D 45 BSR $11BD 1178: 0F CD CLR $CD 117A: 96 F5 LDA $F5 117C: 2B 1C BMI $119A 117E: 8E 02 03 LDX #$0203 1181: 6D 86 TST A,X 1183: 2B 15 BMI $119A 1185: BD 84 79 JSR $8479 1188: A7 24 STA +$04,Y 118A: C6 01 LDB #$01 118C: E7 26 STB +$06,Y 118E: 8E 00 04 LDX #$0004 ; VDB handler to $0004 1191: AF 22 STX +$02,Y ; 1193: BD 84 AE JSR $84AE 1196: 0B 6D fdb $0B6D 1198: 20 05 BRA $119F ------------------------------------------------ 119A: 86 FF LDA #$FF 119C: BD B0 AD JSR $B0AD 119F: BD E2 85 JSR $E285 11A2: BD 84 79 JSR $8479 11A5: CC 00 00 LDD #$0000 11A8: ED 24 STD +$04,Y 11AA: CC AB 0B LDD #$AB0B ; VDB handler to $ab0b 11AD: ED 22 STD +$02,Y ; 11AF: BD 84 AE JSR $84AE 11B2: 0B 4F fdb $0B4F 11B4: 0F ED CLR $ED 11B6: 86 18 LDA #$18 11B8: 97 FC STA $FC 11BA: 7E C4 03 JMP $C403 ------------------------------------------------ 11BD: 7F 0B E6 CLR $0BE6 11C0: BD A6 69 JSR $A669 ; select ROMLOW $0000 11C3: BD A4 5A JSR $A45A 11C6: BD 85 A0 JSR $85A0 11C9: 8E 01 9F LDX #$019F ; transfer $019f-$01db 11CC: 33 88 78 LEAU +$78,X ; to $0217-$0253 11CF: CC 00 3C LDD #$003C ; 11D2: 8D 50 BSR $1224 ; perform transfer 11D4: 8E 01 95 LDX #$0195 ; transfer $0195-$019f 11D7: 33 88 6E LEAU +$6E,X ; to $0203-$020d 11DA: CC FF 0A LDD #$FF0A ; #$ff to $020e 11DD: 8D 45 BSR $1224 ; perform transfer 11DF: 8E 01 77 LDX #$0177 ; transfer $0177-$0195 11E2: 33 88 50 LEAU +$50,X ; to $01c7-$01e5 11E5: CC FF 1E LDD #$FF1E ; #$ff to $01e6 11E8: 8D 3A BSR $1224 ; perform transfer 11EA: 8E 01 63 LDX #$0163 ; transfer $0163-$0177 11ED: 33 88 3C LEAU +$3C,X ; to $019f-$01b3 11F0: CC 00 14 LDD #$0014 ; #$00, 14 times 11F3: 8D 2F BSR $1224 ; perform transfer 11F5: 8E 02 03 LDX #$0203 11F8: 4F CLRA 11F9: 34 12 PSHS X,A 11FB: 6D 86 TST A,X 11FD: 2B 1D BMI $121C 11FF: CE 01 9F LDU #$019F 1202: 48 LSLA 1203: EC C6 LDD A,U 1205: C3 00 04 ADDD #$0004 1208: 6F E2 CLR ,-S 120A: BD D8 16 JSR $D816 120D: 34 06 PSHS B,A 120F: A6 62 LDA +$02,S 1211: 8B 1E ADDA #$1E 1213: A7 62 STA +$02,S 1215: 35 06 PULS B,A ; get SEQRAM address 1217: BD D7 E6 JSR $D7E6 ; byte from stack to SEQRAM 121A: 32 61 LEAS +$01,S ; get next byte 121C: 35 12 PULS X,A 121E: 4C INCA 121F: 81 0A CMPA #$0A 1221: 25 D6 BCS $11F9 1223: 39 RTS ------------------------------------------------ --- transfer B bytes from [X] to [U] ----------- --- if A!=0 transfer A to [U+1] ---------------- ------------------------------------------------ 1224: 34 06 PSHS B,A 1226: A6 80 LDA ,X+ 1228: A7 C0 STA ,U+ 122A: 5A DECB 122B: 26 F9 BNE $1226 122D: 35 06 PULS B,A 122F: 4D TSTA 1230: 27 05 BEQ $1237 1232: A7 C0 STA ,U+ 1234: 5A DECB 1235: 26 FB BNE $1232 1237: 39 RTS ------------------------------------------------ 1238: BD 90 DD JSR $90DD 123B: CC 92 50 LDD #$9250 ; set hook to $9250 123E: FD 0B E9 STD $0BE9 1241: 0C 1E INC $1E 1243: 86 80 LDA #$80 1245: 97 1F STA $1F 1247: FC 01 21 LDD $0121 124A: 34 06 PSHS B,A 124C: C6 21 LDB #$21 124E: 8D 57 BSR $12A7 --- pointed to by $0be9 ------------------------------------------------ 1250: BD 96 C4 JSR $96C4 ; tx all prog. dump header 1253: C6 20 LDB #$20 ; SQ80 sequence dump code 1255: BD 98 0D JSR $980D 1258: 8E 00 EE LDX #$00EE 125B: E6 80 LDB ,X+ 125D: BD 98 18 JSR $9818 1260: 8C 02 D4 CMPX #$02D4 1263: 26 F6 BNE $125B 1265: 8E 00 00 LDX #$0000 1268: 34 04 PSHS B 126A: 1F 10 TFR X,D 126C: BD D8 16 JSR $D816 126F: 35 04 PULS B 1271: BD 98 18 JSR $9818 1274: 30 01 LEAX +$01,X 1276: AC E4 CMPX ,S 1278: 26 EE BNE $1268 127A: 7E 91 5E JMP $915E ------------------------------------------------ 127D: BD 90 DD JSR $90DD 1280: CC 92 95 LDD #$9295 ; set hook to $9295 1283: FD 0B E9 STD $0BE9 ; 1286: 0C 1E INC $1E 1288: 86 80 LDA #$80 128A: 97 1F STA $1F 128C: BD E9 5F JSR $E95F 128F: 34 06 PSHS B,A 1291: C6 07 LDB #$07 ; first byte to transmit 1293: 8D 12 BSR $12A7 --- pointed to by $0be9 ------------------------------------------------ 1295: BD 96 C4 JSR $96C4 1298: C6 08 LDB #$08 129A: BD 98 0D JSR $980D 129D: 9E F0 LDX $F0 129F: 1F 10 TFR X,D 12A1: E3 E1 ADDD ,S++ 12A3: 34 06 PSHS B,A 12A5: 20 C1 BRA $1268 ------------------------------------------------ 12A7: 34 04 PSHS B 12A9: BD D3 05 JSR $D305 12AC: BD 96 C4 JSR $96C4 12AF: 35 04 PULS B 12B1: BD 98 0D JSR $980D ; transmit B via MIDI 12B4: E6 63 LDB +$03,S 12B6: BD 98 18 JSR $9818 ; transmit B as 2x4bit 12B9: E6 62 LDB +$02,S 12BB: C4 0F ANDB #$0F 12BD: BD 98 0D JSR $980D ; transmit B via MIDI 12C0: E6 62 LDB +$02,S 12C2: 54 LSRB 12C3: 54 LSRB 12C4: 54 LSRB 12C5: 54 LSRB 12C6: BD 97 33 JSR $9733 12C9: BD 96 FE JSR $96FE 12CC: C1 05 CMPB #$05 ; sequence reject code 12CE: 26 06 BNE $12D6 12D0: 86 04 LDA #$04 12D2: 97 0D STA $0D 12D4: 20 0F BRA $12E5 ------------------------------------------------ 12D6: C1 0D CMPB #$0D ; no free sequence reject code 12D8: 26 06 BNE $12E0 12DA: 86 05 LDA #$05 12DC: 97 0D STA $0D 12DE: 20 05 BRA $12E5 ------------------------------------------------ 12E0: C1 04 CMPB #$04 ; sequence accept code 12E2: 26 01 BNE $12E5 12E4: 39 RTS ------------------------------------------------ 12E5: 7E 90 F0 JMP $90F0 ------------------------------------------------ 12E8: BD 90 DD