1751 lines
63 KiB
C++
1751 lines
63 KiB
C++
///Disassembly of voice.bin, 8192 bytes [0x0 to 0x1fff]
|
|
// 0000: 54 80 02 JMP $0280
|
|
// 0003: 00 NOP
|
|
|
|
// NMI ISR
|
|
// 0004: aa EI
|
|
// 0005: 62 RETI
|
|
// 0006: 00 NOP
|
|
// 0007: 00 NOP
|
|
//
|
|
// bitmask lookup table
|
|
// 0008: fe fd fb f7 ef df
|
|
|
|
// External INT1/2 ISR
|
|
// 0010: aa EI
|
|
// 0011: 62 RETI
|
|
|
|
// bitmask lookup table
|
|
// 0012: 01 02 04 08 10 20
|
|
|
|
|
|
// Timer/Counter INTE0/1 ISR
|
|
// 0018: aa EI
|
|
// 0019: 62 RETI
|
|
// 001a: 00 NOP
|
|
// 001b: 00 NOP
|
|
// 001c: 00 NOP
|
|
// 001d: 00 NOP
|
|
// 001e: 00 NOP
|
|
// 001f: 00 NOP
|
|
|
|
// Timer/Counter/ADC ISR
|
|
// 0020: 4e 4e JRE $0070
|
|
// 0022: 00 NOP
|
|
// 0023: 00 NOP
|
|
// 0024: 00 NOP
|
|
// 0025: 00 NOP
|
|
// 0026: 00 NOP
|
|
// 0027: 00 NOP
|
|
|
|
// Serial ISR
|
|
// 0028: 4e 64 JRE $008E
|
|
// 002a: 00 NOP
|
|
// 002b: 00 NOP
|
|
// 002c: 00 NOP
|
|
// 002d: 00 NOP
|
|
// 002e: 00 NOP
|
|
// 002f: 00 NOP
|
|
// 0030: 00 NOP
|
|
// 0031: 00 NOP
|
|
// 0032: 00 NOP
|
|
// 0033: 00 NOP
|
|
// 0034: 00 NOP
|
|
// 0035: 00 NOP
|
|
// 0036: 00 NOP
|
|
// 0037: 00 NOP
|
|
// 0038: 00 NOP
|
|
// 0039: 00 NOP
|
|
// 003a: 00 NOP
|
|
// 003b: 00 NOP
|
|
// 003c: 00 NOP
|
|
// 003d: 00 NOP
|
|
// 003e: 00 NOP
|
|
// 003f: 00 NOP
|
|
// 0040: 00 NOP
|
|
// 0041: 00 NOP
|
|
// 0042: 00 NOP
|
|
// 0043: 00 NOP
|
|
// 0044: 00 NOP
|
|
// 0045: 00 NOP
|
|
// 0046: 00 NOP
|
|
// 0047: 00 NOP
|
|
// 0048: 00 NOP
|
|
// 0049: 00 NOP
|
|
// 004a: 00 NOP
|
|
// 004b: 00 NOP
|
|
// 004c: 00 NOP
|
|
// 004d: 00 NOP
|
|
// 004e: 00 NOP
|
|
// 004f: 00 NOP
|
|
// 0050: 00 NOP
|
|
// 0051: 00 NOP
|
|
// 0052: 00 NOP
|
|
// 0053: 00 NOP
|
|
// 0054: 00 NOP
|
|
// 0055: 00 NOP
|
|
// 0056: 00 NOP
|
|
// 0057: 00 NOP
|
|
// 0058: 00 NOP
|
|
// 0059: 00 NOP
|
|
// 005a: 00 NOP
|
|
// 005b: 00 NOP
|
|
// 005c: 00 NOP
|
|
// 005d: 00 NOP
|
|
// 005e: 00 NOP
|
|
// 005f: 00 NOP
|
|
|
|
// SWI ISR
|
|
// 0060: aa EI
|
|
// 0061: 62 RETI
|
|
// 0062: 00 NOP
|
|
// 0063: 00 NOP
|
|
// 0064: 00 NOP
|
|
// 0065: 00 NOP
|
|
// 0066: 00 NOP
|
|
// 0067: 00 NOP
|
|
// 0068: 00 NOP
|
|
// 0069: 00 NOP
|
|
// 006a: 00 NOP
|
|
// 006b: 00 NOP
|
|
// 006c: 00 NOP
|
|
// 006d: 00 NOP
|
|
// 006e: 00 NOP
|
|
// 006f: 00 NOP
|
|
|
|
// AD Converter ISR
|
|
// 0070: 10 EXA
|
|
// 0071: 11 EXX
|
|
// 0072: 4c c8 MOV A,ANM
|
|
// 0074: 64 90 08 XRI ANM,$08
|
|
// 0077: 34 5c ff LXI HL,$FF5C
|
|
// 007a: 3d STAX (HL+)
|
|
// 007b: 4c e0 MOV A,CR0
|
|
// 007d: 3d STAX (HL+)
|
|
// 007e: 4c e1 MOV A,CR1
|
|
// 0080: 3d STAX (HL+)
|
|
// 0081: 4c e2 MOV A,CR2
|
|
// 0083: 3d STAX (HL+)
|
|
// 0084: 4c e3 MOV A,CR3
|
|
// 0086: 3b STAX (HL)
|
|
// 0087: 64 06 05 MVI MKH,$05
|
|
// 008a: 10 EXA
|
|
// 008b: 11 EXX
|
|
// 008c: aa EI
|
|
// 008d: 62 RETI
|
|
|
|
// serial interrupt handler
|
|
// 008e: 10 EXA
|
|
// 008f: 11 EXX
|
|
// 0090: 4c d9 MOV A,RXB // fetch the received byte
|
|
// 0092: 47 80 ONI A,$80 // is it a command byte
|
|
// 0094: 4e 2e JRE $00C4 // yes
|
|
// 0096: 63 36 STAW $FF36_cmdByte // store it as the current command byte
|
|
// 0098: 37 88 LTI A,$88 // less than $88 (voice off, sustain on/off message)
|
|
// 009a: 4e 6d JRE $0109_retSerialIsr // no
|
|
// 009c: 37 86 LTI A,$86 // less than $86 (voice off)
|
|
// 009e: d8 JR $00B7 // no
|
|
// 009f: 66 76 SUI A,$76 // get voice number
|
|
// 00a1: 1f MOV L,A
|
|
// 00a2: 6e 00 MVI H,$00 // hl now points to the inverted mask table
|
|
// 00a4: 2b LDAX (HL) // fetch mask in A
|
|
// 00a5: 74 88 10 ANAW $FF10_noteHeld // AND it with the note flags
|
|
// 00a8: 63 10 STAW $FF10_noteHeld // save it back
|
|
// 00aa: 55 1e 01 OFFIW $FF1E_flags1,$01 // sustain?
|
|
// 00ad: 4e 9a JRE $0149
|
|
// 00af: 2b LDAX (HL) // do the same to these flags
|
|
// 00b0: 74 88 33 ANAW $FF33_rlsPhase
|
|
// 00b3: 63 33 STAW $FF33_rlsPhase
|
|
// 00b5: 4e 92 JRE $0149
|
|
|
|
// handle a sustain message
|
|
// 00b7: 77 86 EQI A,$86 // sustain on
|
|
// 00b9: c5 JR $00BF // no, do sustain off
|
|
// 00ba: 15 1e 01 ORIW $FF1E_flags1,$01 // yes, set flag
|
|
// 00bd: 4e 4a JRE $0109_retSerialIsr
|
|
// 00bf: 05 1e fe ANIW $FF1E_flags1,$FE // mask off sustain bit
|
|
// 00c2: 4e 45 JRE $0109_retSerialIsr
|
|
|
|
// handle a value byte
|
|
// 00c4: 1c MOV D,A
|
|
// 00c5: 01 36 LDAW $FF36_cmdByte // fetch command byte
|
|
// 00c7: 27 87 GTI A,$87 // voice off and sustain messages don't take a parameter so return
|
|
// 00c9: 4e 3e JRE $0109_retSerialIsr
|
|
// 00cb: 37 a4 LTI A,$A4 // no commands above $A4 so return
|
|
// 00cd: 4e 3a JRE $0109_retSerialIsr
|
|
// 00cf: 27 8d GTI A,$8D // $88-$8d are voice on, greater?
|
|
// 00d1: 4e 3a JRE $010d_voiceOn // no, handle voice on
|
|
// 00d3: 66 8e SUI A,$8E // yes, get the control value
|
|
// 00d5: 48 25 SLL A // double it
|
|
// okay the next two instructions are fun
|
|
// TABLE will return the value at PC + A + 1 in BC
|
|
// JB will then jump to BC
|
|
// 00d7: 48 a8 TABLE
|
|
// 00d9: 21 JB
|
|
//
|
|
// this table then holds the addresses of the routines to handle incoming parameter values
|
|
// these are in the same order they appear in sysex, which makes life easier
|
|
// 00da: 014f 0184 0198
|
|
// 00e0: 0200 023a 01ab 01c8 01cc 01d0 01af 01b3
|
|
// 00f0: 01b7 01d4 01e2 01ed 01c4 01e9 01c0 0223
|
|
// 0100 0227 01a7 0246
|
|
//
|
|
// return from interrupt after handling value
|
|
// this increments the command byte implementing a kind of "running status"
|
|
// so we can just blast patch values at the voice CPU and have it update them all
|
|
// or send an individual single value
|
|
// 0106: 20 36 INRW $FF36_cmdByte
|
|
// 0108: 00 NOP // INRW might skip
|
|
// 0109: 10 EXA
|
|
// 010a: 11 EXX
|
|
// 010b: aa EI
|
|
// 010c: 62 RETI
|
|
|
|
// voice on commands
|
|
// command in A, note value in D
|
|
// 010d: 1a MOV B,A // save command
|
|
// 010e: 66 76 SUI A,$76 // form offset to bitmask table
|
|
// 0110: 1f MOV L,A
|
|
// 0111: 6e 00 MVI H,$00
|
|
// 0113: 2b LDAX (HL) // bit for voice
|
|
// 0114: 1d MOV E,A // save
|
|
// 0115: 74 98 10 ORAW $FF10_noteHeld // OR it into voice on table
|
|
// 0118: 63 10 STAW $FF10_noteHeld
|
|
// 011a: 0d MOV A,E // fetch the bit again
|
|
// 011b: 74 98 07 ORAW $FF07_atkPhase // enable attack phase
|
|
// 011e: 63 07 STAW $FF07_atkPhase
|
|
// 0120: 0a MOV A,B // get the command back
|
|
// 0121: 66 88 SUI A,$88 // work out the voice number
|
|
// 0123: 1a MOV B,A // to get the existing note value
|
|
// 0124: 34 09 ff LXI HL,$FF09_voice1Note
|
|
// 0127: ad LDAX (HL+B) // read the note value
|
|
// 0128: 60 ec NEA A,D // is it the same note number
|
|
// 012a: d9 JR $0144 // yes
|
|
// 012b: 0c MOV A,D // no
|
|
// 012c: bd STAX (HL+B) // store it in the voice note table
|
|
// 012d: 0d MOV A,E // fetch the bit again
|
|
// 012e: 74 c8 11 ONAW $FF11 // is the bit on in these flags
|
|
// 0131: cc JR $013E // no
|
|
// 0132: 74 c8 33 ONAW $FF33_rlsPhase // yes, is the voice in release
|
|
// 0135: d3 JR $0149 // no
|
|
// 0136: 16 ff XRI A,$FF // invert the bit
|
|
// 0138: 74 88 33 ANAW $FF33_rlsPhase // mask off release flag
|
|
// 013b: 63 33 STAW $FF33_rlsPhase
|
|
// 013d: cb JR $0149
|
|
// 013e: 74 98 00 ORAW $FF00_resetVoiceBits
|
|
// 0141: 63 00 STAW $FF00_resetVoiceBits
|
|
// 0143: c5 JR $0149
|
|
// same note
|
|
// 0144: 0d MOV A,E // get voice bit back
|
|
// 0145: 74 d8 11 OFFAW $FF11 // off in this flag
|
|
// 0148: e9 JR $0132 // no, jump back and check for release
|
|
// clobber stack return
|
|
// 0149: 04 ff ff LXI SP,$FFFF // clobber the stack
|
|
// 014c: 54 eb 02 JMP $02EB // jump ahead
|
|
|
|
// handle voice parameters
|
|
//
|
|
// switch 1 values
|
|
// 014f: 0c MOV A,D // save value
|
|
// 0150: 63 7f STAW $FF7F_switch1 // save raw value in RAM
|
|
// 0152: 07 10 ANI A,$10 // saw off/on
|
|
// 0154: 1a MOV B,A
|
|
// 0155: 01 46 LDAW $FF46_ic40Latch // fetch stored value for latch
|
|
// 0157: 07 0c ANI A,$0C // mask off HPF bits
|
|
// 0159: 60 9a ORA A,B // OR in saw on/off
|
|
// 015b: 5d 7f BIT 5,$FF7F_switch1 // chorus on/off
|
|
// 015d: 17 01 ORI A,$01 // bit 0 turns on chorus
|
|
// 015f: 74 5c 40 OFFI D,$40 // chorus fast/slow
|
|
// 0162: 17 02 ORI A,$02 // OR it in
|
|
// 0164: 63 46 STAW $FF46_ic40Latch // store this to be latched into IC40
|
|
// 0166: 15 1e 40 ORIW $FF1E_flags1,$40 // sqr on
|
|
// 0169: 74 5c 08 OFFI D,$08 // is it off in the command
|
|
// 016c: 05 1e bf ANIW $FF1E_flags1,$BF // turn sqr off
|
|
// 016f: 74 5c 04 OFFI D,$04 // convert lower three bits to divider value
|
|
// 0172: c4 JR $0177
|
|
// 0173: 64 05 c0 MVI PF,$C0 // upper two bits of PF set ratio
|
|
// 0176: cb JR $0182
|
|
// 0177: 74 5c 02 OFFI D,$02
|
|
// 017a: c4 JR $017F
|
|
// 017b: 64 05 40 MVI PF,$40
|
|
// 017e: c3 JR $0182
|
|
// 017f: 64 05 00 MVI PF,$00
|
|
// 0182: 4f 82 JRE $0106_retSerialValue
|
|
|
|
// switch 2 values
|
|
// only the HPF bits need special consideration
|
|
// 0184: 0c MOV A,D
|
|
// 0185: 63 37 STAW $FF37_switch2 // save value
|
|
// 0187: 16 18 XRI A,$18 // invert the HPF bits
|
|
// 0189: 07 18 ANI A,$18 // get only the HPF bits
|
|
// 018b: 48 21 SLR A // shift right ($18 >> 1 = $0c)
|
|
// 018d: 1a MOV B,A
|
|
// 018e: 01 46 LDAW $FF46_ic40Latch // fetch stored value for latch
|
|
// 0190: 07 f3 ANI A,$F3 // mask out HPF bits
|
|
// 0192: 60 9a ORA A,B // OR them in
|
|
// 0194: 63 46 STAW $FF46_ic40Latch // save it back
|
|
// 0196: 4f 6e JRE $0106_retSerialValue
|
|
|
|
// LFO rate
|
|
// 0198: 0c MOV A,D
|
|
// 0199: 48 25 SLL A // 2-byte values
|
|
// 019b: 34 60 0c LXI HL,$0C60_lfoSpeedTbl
|
|
// 019e: 24 4b ff LXI DE,$FF4B_lfoRateCoeff
|
|
// 01a1: 48 8c LDEAX (HL+A) // look up LFO coefficient
|
|
// 01a3: 48 92 STEAX (DE) // save
|
|
// 01a5: 4f 5f JRE $0106_retSerialValue
|
|
|
|
// these values are simply doubled to go from 0-127 to 0-254
|
|
// and then saved as single bytes
|
|
// 01a7: 34 63 ff LXI HL,$FF63 // unsure what this is
|
|
// 01aa: cf JR $01BA_storeDoubled // store
|
|
// 01ab: 34 47 ff LXI HL,$FF47_pwmDepth
|
|
// 01ae: cb JR $01BA_storeDoubled // store
|
|
// 01af: 34 41 ff LXI HL,$FF41
|
|
// 01b2: c7 JR $01BA_storeDoubled
|
|
// 01b3: 34 48 ff LXI HL,$FF48_lfoToVcf
|
|
// 01b6: c3 JR $01BA_storeDoubled
|
|
// 01b7: 34 42 ff LXI HL,$FF42_vcfKeyTrack
|
|
|
|
// 01BA_storeDoubled: 0c MOV A,D
|
|
// 01bb: 48 25 SLL A
|
|
// 01bd: 3b STAX (HL)
|
|
// 01be: 4f 46 JRE $0106_retSerialValue
|
|
|
|
// these values are converted to a 16-bit value
|
|
// they change from 0-127 to 0-$3f80
|
|
// 01c0: 34 3b ff LXI HL,$FF3B_subOscLev
|
|
// 01c3: d3 JR $01D7_store16Bit
|
|
// 01c4: 34 23 ff LXI HL,$FF23_envSustainLev
|
|
// 01c7: cf JR $01D7_store16Bit
|
|
// 01c8: 34 39 ff LXI HL,$FF39_noiseLevel
|
|
// 01cb: cb JR $01D7_store16Bit
|
|
// 01cc: 34 3d ff LXI HL,$FF3D_vcfCutoff
|
|
// 01cf: c7 JR $01D7_store16Bit
|
|
// 01d0: 34 3f ff LXI HL,$FF3F_vcfReso
|
|
// 01d3: c3 JR $01D7_store16Bit
|
|
// 01d4: 34 43 ff LXI HL,$FF43_vcaMaster_vcaMaster
|
|
// 01D7_store16Bit: 44 00 00 LXI EA,$0000
|
|
// 01da: 0c MOV A,D
|
|
// 01db: 18 MOV EAH,A
|
|
// 01dc: 48 a0 DSLR EA
|
|
// 01de: 48 93 STEAX (HL)
|
|
// 01e0: 4f 24 JRE $0106_retSerialValue
|
|
|
|
// attack is just saved as an 8-bit value
|
|
// it is looked up later
|
|
// 01e2: 34 45 ff LXI HL,$FF45_envAtkVal
|
|
// 01e5: 0c MOV A,D
|
|
// 01e6: 3b STAX (HL)
|
|
// 01e7: 4f 1d JRE $0106_retSerialValue
|
|
|
|
// release and decay are looked up in a table
|
|
// 01e9: 34 25 ff LXI HL,$FF25_envRlsCoeff
|
|
// 01ec: c3 JR $01F0
|
|
// 01ed: 34 21 ff LXI HL,$FF21_envDcyCoeff
|
|
// 01f0: 0c MOV A,D
|
|
// 01f1: 48 25 SLL A
|
|
// 01f3: 44 60 0d LXI EA,$0D60_envDecRelTbl
|
|
// 01f6: 70 41 EADD EA,A
|
|
// 01f8: b6 DMOV DE,EA
|
|
// 01f9: 48 82 LDEAX (DE)
|
|
// 01fb: 48 93 STEAX (HL)
|
|
// 01fd: 54 06 01 JMP $0106_retSerialValue
|
|
|
|
// LFO Delay requires a bit of special attention
|
|
// 0200: 0c MOV A,D
|
|
// 0201: 48 21 SLR A
|
|
// 0203: 48 21 SLR A
|
|
// 0205: 48 21 SLR A
|
|
// 0207: 07 0e ANI A,$0E
|
|
// 0209: 34 30 0b LXI HL,$0B30_lfoDelayTbl1
|
|
// 020c: 48 8c LDEAX (HL+A)
|
|
// 020e: 34 6c ff LXI HL,$FF6C_lfoHoldoffCoeff
|
|
// 0211: 48 93 STEAX (HL)
|
|
// 0213: 0c MOV A,D
|
|
// 0214: 48 25 SLL A
|
|
// 0216: 34 60 0b LXI HL,$0B60_envAtkTbl
|
|
// 0219: 48 8c LDEAX (HL+A)
|
|
// 021b: 24 58 ff LXI DE,$FF58_lfoDelayCoeff
|
|
// 021e: 48 92 STEAX (DE)
|
|
// 0220: 54 06 01 JMP $0106_retSerialValue
|
|
|
|
// negative bend value
|
|
// 0223: 05 1e ef ANIW $FF1E_flags1,$EF // bend negative
|
|
// 0226: c3 JR $022A
|
|
// positive bend value
|
|
// 0227: 15 1e 10 ORIW $FF1E_flags1,$10 // bend positive
|
|
// 022a: 0c MOV A,D
|
|
// 022b: 67 00 NEI A,$00 // bend is zero?
|
|
// 022d: c4 JR $0232 // yes
|
|
// 022e: 48 2b STC
|
|
// 0230: 48 35 RLL A // double it and add 1
|
|
// 0232: 63 62 STAW $FF62_midiBendAmt
|
|
// 0234: 71 05 01 MVIW $FF05_bendPolarity,$01
|
|
// 0237: 54 06 01 JMP $0106_retSerialValue
|
|
|
|
// DCO LFO depth is looked up in a table of 8-bit values
|
|
// 023a: 0c MOV A,D
|
|
// 023b: 34 80 0a LXI HL,$0A80_lfoDepthTbl
|
|
// 023e: 24 49 ff LXI DE,$FF49_lfoToPitchScaler
|
|
// 0241: ac LDAX (HL+A)
|
|
// 0242: 3a STAX (DE)
|
|
// 0243: 54 06 01 JMP $0106_retSerialValue
|
|
|
|
// Set DAC to Zero command for test mode
|
|
// 0246: 5e 37 BIT 6,$FF37_switch2
|
|
// 0248: 54 09 01 JMP $0109_retSerialIsr // test mode not armed
|
|
// 024b: 0c MOV A,D
|
|
// 024c: 63 01 STAW $FF01 // set test mode flag
|
|
// 024e: 10 EXA
|
|
// 024f: 11 EXX
|
|
// 0250: aa EI
|
|
// 0251: 54 b8 07 JMP $07B8
|
|
|
|
// 0254: 00 NOP
|
|
// 0255: 00 NOP
|
|
// 0256: 00 NOP
|
|
// 0257: 00 NOP
|
|
// 0258: 00 NOP
|
|
// 0259: 00 NOP
|
|
// 025a: 00 NOP
|
|
// 025b: 00 NOP
|
|
// 025c: 00 NOP
|
|
// 025d: 00 NOP
|
|
// 025e: 00 NOP
|
|
// 025f: 00 NOP
|
|
// 0260: 00 NOP
|
|
// 0261: 00 NOP
|
|
// 0262: 00 NOP
|
|
// 0263: 00 NOP
|
|
// 0264: 00 NOP
|
|
// 0265: 00 NOP
|
|
// 0266: 00 NOP
|
|
// 0267: 00 NOP
|
|
// 0268: 00 NOP
|
|
// 0269: 00 NOP
|
|
// 026a: 00 NOP
|
|
// 026b: 00 NOP
|
|
// 026c: 00 NOP
|
|
// 026d: 00 NOP
|
|
// 026e: 00 NOP
|
|
// 026f: 00 NOP
|
|
// 0270: 00 NOP
|
|
// 0271: 00 NOP
|
|
// 0272: 00 NOP
|
|
// 0273: 00 NOP
|
|
// 0274: 00 NOP
|
|
// 0275: 00 NOP
|
|
// 0276: 00 NOP
|
|
// 0277: 00 NOP
|
|
// 0278: 00 NOP
|
|
// 0279: 00 NOP
|
|
// 027a: 00 NOP
|
|
// 027b: 00 NOP
|
|
// 027c: 00 NOP
|
|
// 027d: 00 NOP
|
|
// 027e: 00 NOP
|
|
// 027f: 00 NOP
|
|
|
|
// cold start
|
|
// 0280: 69 0e MVI A,$0E
|
|
// 0282: 4d d0 MOV MM,A
|
|
// 0284: 68 ff MVI V,$FF
|
|
// 0286: 10 EXA
|
|
// 0287: 68 ff MVI V,$FF
|
|
// 0289: 04 ff ff LXI SP,$FFFF
|
|
// 028c: 69 00 MVI A,$00
|
|
// 028e: 4d d2 MOV MA,A
|
|
// 0290: 4d d3 MOV MB,A
|
|
// 0292: 4d d4 MOV MC,A
|
|
// 0294: 4d d7 MOV MF,A
|
|
// 0296: 4d c8 MOV ANM,A
|
|
// 0298: 34 00 ff LXI HL,$FF00 // bottom of RAM
|
|
// 029b: 3d STAX (HL+)
|
|
// 029c: 74 7f 00 EQI L,$00
|
|
// 029f: fb JR $029B // loop around until RAM is cleared
|
|
// 02a0: 69 02 MVI A,$02
|
|
// 02a2: 4d d1 MOV MCC,A
|
|
// 02a4: 69 4e MVI A,$4E
|
|
// 02a6: 4d ca MOV SML,A
|
|
// 02a8: 69 0a MVI A,$0A
|
|
// 02aa: 4d c9 MOV SMH,A
|
|
// 02ac: 34 09 ff LXI HL,$FF09_voice1Note
|
|
// 02af: 6b 05 MVI C,$05 // six voices
|
|
// 02b1: 69 3c MVI A,$3C // Middle C
|
|
// 02b3: 3d STAX (HL+) // initialise Note setting
|
|
// 02b4: 53 DCR C
|
|
// 02b5: fd JR $02B3 // loop around
|
|
// 02b6: 64 05 40 MVI PF,$40 // 8' divider
|
|
// 02b9: 71 1e 40 MVIW $FF1E_flags1,$40 // sqr off/on
|
|
// 02bc: 71 46 15 MVIW $FF46_ic40Latch,$15
|
|
// 02bf: 71 37 06 MVIW $FF37_switch2,$06
|
|
// 02c2: 14 80 3f LXI BC,$3F80 // env, cutoff to maximum
|
|
// 02c5: 70 1e 23 ff SBCD $FF23_envSustainLev
|
|
// 02c9: 70 1e 3d ff SBCD $FF3D_vcfCutoff
|
|
// 02cd: 14 00 20 LXI BC,$2000 // VCA about half way up
|
|
// 02d0: 70 1e 43 ff SBCD $FF43_vcaMaster
|
|
// 02d4: 14 00 02 LXI BC,$0200 // LFO rate slow
|
|
// 02d7: 70 1e 4b ff SBCD $FF4B_lfoRateCoeff
|
|
// 02db: 34 00 23 LXI HL,$2300 // program dividers
|
|
// 02de: 78 25 CALF $0825_setModeWord
|
|
// 02e0: 34 00 13 LXI HL,$1300
|
|
// 02e3: 78 25 CALF $0825_setModeWord
|
|
// 02e5: 48 48 SKIT FAD
|
|
// 02e7: 00 NOP
|
|
// 02e8: 64 06 04 MVI MKH,$04
|
|
// 02eb: aa EI
|
|
|
|
// here's the main loop
|
|
// 02ec: 01 46 LDAW $FF46_ic40Latch
|
|
// 02ee: 70 79 00 30 MOV ($3000),A // set chorus and HPF outputs
|
|
// 02f2: 58 1e BIT 0,$FF1E_flags1 // sustained?
|
|
// 02f4: c8 JR $02FD
|
|
// 02f5: 01 11 LDAW $FF11
|
|
// 02f7: 74 98 10 ORAW $FF10_noteHeld
|
|
// 02fa: 63 11 STAW $FF11
|
|
// 02fc: c4 JR $0301
|
|
// 02fd: 01 10 LDAW $FF10_noteHeld
|
|
// 02ff: 63 11 STAW $FF11
|
|
// 0301: 34 3f ff LXI HL,$FF3F_vcfReso
|
|
// 0304: 48 83 LDEAX (HL)
|
|
// 0306: 69 06 MVI A,$06
|
|
// 0308: 78 2f CALF $082F_setDacOut
|
|
// 030a: 64 08 bf ANI PA,$BF
|
|
// 030d: 45 11 3f ONIW $FF11,$3F // are any voices started
|
|
// 0310: 4e 59 JRE $036B // no
|
|
// 0312: 5b 1e BIT 3,$FF1E_flags1 // yes but we've already started the LFO delay
|
|
// 0314: ce JR $0323
|
|
// 0315: 14 00 00 LXI BC,$0000 // no
|
|
// 0318: 70 1e 56 ff SBCD $FF56_lfoHoldOff // zero out the holdoff time and envelope
|
|
// 031c: 70 1e 5a ff SBCD $FF5A_lfoDelayEnv
|
|
// 0320: 05 1e f1 ANIW $FF1E_flags1,$F1 // clear LFO delay bits
|
|
// 0323: 59 1e BIT 1,$FF1E_flags1 // LFO holdoff time
|
|
// 0325: 4e 49 JRE $0370
|
|
// 0327: 5a 1e BIT 2,$FF1E_flags1 // LFO attack time
|
|
// 0329: 4e 5d JRE $0388
|
|
// 032b: 6a ff MVI B,$FF
|
|
// 032d: b1 PUSH BC
|
|
// 032e: 01 49 LDAW $FF49_lfoToPitchScaler
|
|
// 0330: 48 2e MUL B
|
|
// 0332: 08 MOV A,EAH
|
|
// 0333: 74 a0 64 ADDNCW $FF64_lfoModToPitch
|
|
// 0336: 69 ff MVI A,$FF
|
|
// 0338: 34 51 ff LXI HL,$FF51_lfoToPitch
|
|
// 033b: 70 1f 4d ff LBCD $FF4D_lfoVal
|
|
// 033f: 48 2f MUL C
|
|
// 0341: 1c MOV D,A
|
|
// 0342: 08 MOV A,EAH
|
|
// 0343: 1b MOV C,A
|
|
// 0344: 0c MOV A,D
|
|
// 0345: 48 2e MUL B
|
|
// 0347: 70 43 EADD EA,C
|
|
// 0349: 48 a0 DSLR EA
|
|
// 034b: 48 a0 DSLR EA
|
|
// 034d: 48 a0 DSLR EA
|
|
// 034f: 48 95 STEAX (HL++)
|
|
// 0351: a1 POP BC
|
|
// 0352: 01 48 LDAW $FF48_lfoToVcf
|
|
// 0354: 48 2e MUL B
|
|
// 0356: 08 MOV A,EAH
|
|
// 0357: 70 1f 4d ff LBCD $FF4D_lfoVal
|
|
// 035b: 48 2f MUL C
|
|
// 035d: 1c MOV D,A
|
|
// 035e: 08 MOV A,EAH
|
|
// 035f: 1b MOV C,A
|
|
// 0360: 0c MOV A,D
|
|
// 0361: 48 2e MUL B
|
|
// 0363: 70 43 EADD EA,C
|
|
// 0365: 48 a0 DSLR EA
|
|
// 0367: 48 93 STEAX (HL)
|
|
// 0369: 4e 36 JRE $03A1
|
|
// 036b: 15 1e 08 ORIW $FF1E_flags1,$08
|
|
// 036e: 4f b3 JRE $0323
|
|
// 0370: 24 56 ff LXI DE,$FF56_lfoHoldOff
|
|
// 0373: 48 82 LDEAX (DE)
|
|
// 0375: 70 1f 58 ff LBCD $FF58_lfoDelayCoeff
|
|
// 0379: 74 c5 DADD EA,BC
|
|
// 037b: 48 92 STEAX (DE)
|
|
// 037d: 08 MOV A,EAH
|
|
// 037e: 57 c0 OFFI A,$C0
|
|
// 0380: c4 JR $0385
|
|
// 0381: 6a 00 MVI B,$00
|
|
// 0383: 4f a8 JRE $032D
|
|
// 0385: 15 1e 02 ORIW $FF1E_flags1,$02
|
|
// 0388: 34 5a ff LXI HL,$FF5A_lfoDelayEnv
|
|
// 038b: 48 83 LDEAX (HL)
|
|
// 038d: 70 1f 6c ff LBCD $FF6C_lfoHoldoffCoeff
|
|
// 0391: 74 a5 DADDNC EA,BC
|
|
// 0393: c6 JR $039A
|
|
// 0394: 48 93 STEAX (HL)
|
|
// 0396: 08 MOV A,EAH
|
|
// 0397: 1a MOV B,A
|
|
// 0398: 4f 93 JRE $032D
|
|
// 039a: 15 1e 04 ORIW $FF1E_flags1,$04
|
|
// 039d: 6a ff MVI B,$FF
|
|
// 039f: 4f 8c JRE $032D
|
|
// 03a1: 69 06 MVI A,$06
|
|
// 03a3: 34 43 ff LXI HL,$FF43_vcaMaster
|
|
// 03a6: 48 83 LDEAX (HL)
|
|
// 03a8: 78 2f CALF $082F_setDacOut
|
|
// 03aa: 64 08 df ANI PA,$DF
|
|
// 03ad: 44 18 18 LXI EA,$1818
|
|
// 03b0: 01 61 LDAW $FF61_tuningAmt
|
|
// 03b2: 5f 1e BIT 7,$FF1E_flags1
|
|
// 03b4: c3 JR $03B8
|
|
// 03b5: 70 61 ESUB EA,A
|
|
// 03b7: c2 JR $03BA
|
|
// 03b8: 70 41 EADD EA,A
|
|
// 03ba: 70 1f 51 ff LBCD $FF51_lfoToPitch
|
|
// 03be: 59 4a BIT 1,$FF4A_lfoPol // polarity
|
|
// 03c0: c3 JR $03C4
|
|
// 03c1: 74 e5 DSUB EA,BC
|
|
// 03c3: c2 JR $03C6
|
|
// 03c4: 74 c5 DADD EA,BC
|
|
// 03c6: 70 1f 68 ff LBCD $FF68
|
|
// 03ca: 5d 1e BIT 5,$FF1E_flags1
|
|
// 03cc: c3 JR $03D0
|
|
// 03cd: 74 e5 DSUB EA,BC
|
|
// 03cf: c2 JR $03D2
|
|
// 03d0: 74 c5 DADD EA,BC
|
|
// 03d2: 24 6f ff LXI DE,$FF6F_tuneLfoBend
|
|
// 03d5: 48 92 STEAX (DE)
|
|
// 03d7: 71 0f 00 MVIW $FF0F_voicePtr,$00
|
|
// 03da: 24 71 ff LXI DE,$FF71_notePitchFrac
|
|
// 03dd: 34 09 ff LXI HL,$FF09_voice1Note
|
|
// 03e0: 48 82 LDEAX (DE)
|
|
// 03e2: 2d LDAX (HL+)
|
|
// 03e3: 1a MOV B,A
|
|
// 03e4: 6b 00 MVI C,$00
|
|
// 03e6: 01 7d LDAW $FF7D_portaCoeff
|
|
// 03e8: 77 00 EQI A,$00
|
|
// 03ea: ca JR $03F5
|
|
// 03eb: a5 DMOV EA,BC
|
|
// 03ec: 48 94 STEAX (DE++)
|
|
// 03ee: 20 0f INRW $FF0F_voicePtr
|
|
// 03f0: 75 0f 06 EQIW $FF0F_voicePtr,$06
|
|
// 03f3: ec JR $03E0
|
|
// 03f4: d2 JR $0407
|
|
// 03f5: 74 ed DNE EA,BC
|
|
// 03f7: f4 JR $03EC
|
|
// 03f8: 74 ad DGT EA,BC
|
|
// 03fa: c6 JR $0401
|
|
// 03fb: 70 61 ESUB EA,A
|
|
// 03fd: 74 ad DGT EA,BC
|
|
// 03ff: a5 DMOV EA,BC
|
|
// 0400: eb JR $03EC
|
|
// 0401: 70 41 EADD EA,A
|
|
// 0403: 74 bd DLT EA,BC
|
|
// 0405: a5 DMOV EA,BC
|
|
// 0406: e5 JR $03EC
|
|
// 0407: 69 06 MVI A,$06
|
|
// 0409: 34 3b ff LXI HL,$FF3B_subOscLev
|
|
// 040c: 48 83 LDEAX (HL)
|
|
// 040e: 78 2f CALF $082F_setDacOut
|
|
// 0410: 64 08 ef ANI PA,$EF
|
|
// 0413: 71 0f 00 MVIW $FF0F_voicePtr,$00
|
|
// 0416: 71 34 01 MVIW $FF34,$01
|
|
// 0419: 24 71 ff LXI DE,$FF71_notePitchFrac
|
|
// 041c: 48 84 LDEAX (DE++)
|
|
// 041e: 70 1f 6f ff LBCD $FF6F_tuneLfoBend
|
|
// 0422: 74 c5 DADD EA,BC
|
|
// 0424: 09 MOV A,EAL
|
|
// 0425: 63 6e STAW $FF63_fracPitchAmt
|
|
// 0427: 08 MOV A,EAH
|
|
// 0428: 27 2f GTI A,$2F
|
|
// 042a: 4e 79 JRE $04A5
|
|
// 042c: 37 97 LTI A,$97
|
|
// 042e: 4e 7c JRE $04AC
|
|
// 0430: 66 30 SUI A,$30
|
|
// 0432: 48 25 SLL A
|
|
// 0434: 44 60 0e LXI EA,$0E60_noteCvDacTbl
|
|
// 0437: 70 41 EADD EA,A
|
|
// 0439: b4 PUSH EA
|
|
// 043a: 44 30 0f LXI EA,$0F30_noteClkDivTbl
|
|
// 043d: 70 41 EADD EA,A
|
|
// 043f: b7 DMOV HL,EA
|
|
// 0440: 48 8f 02 LDEAX (HL+$02)
|
|
// 0443: b5 DMOV BC,EA
|
|
// 0444: 48 83 LDEAX (HL)
|
|
// 0446: b4 PUSH EA
|
|
// 0447: 74 e5 DSUB EA,BC
|
|
// 0449: b5 DMOV BC,EA
|
|
// 044a: 01 6e LDAW $FF63_fracPitchAmt
|
|
// 044c: 48 2f MUL C
|
|
// 044e: 08 MOV A,EAH
|
|
// 044f: 1b MOV C,A
|
|
// 0450: 01 6e LDAW $FF63_fracPitchAmt
|
|
// 0452: 48 2e MUL B
|
|
// 0454: 70 43 EADD EA,C
|
|
// 0456: b5 DMOV BC,EA
|
|
// 0457: a4 POP EA
|
|
// 0458: 74 e5 DSUB EA,BC
|
|
// 045a: 01 0f LDAW $FF0F_voicePtr
|
|
// 045c: 1a MOV B,A
|
|
// 045d: 01 34 LDAW $FF34
|
|
// 045f: 74 d8 00 OFFAW $FF00_resetVoiceBits
|
|
// 0462: 4e 4f JRE $04B3
|
|
// 0464: ba DI
|
|
// 0465: 34 50 0b LXI HL,$0B50
|
|
// 0468: ad LDAX (HL+B)
|
|
// 0469: 1e MOV H,A
|
|
// 046a: 6f 00 MVI L,$00
|
|
// 046c: 09 MOV A,EAL
|
|
// 046d: 3b STAX (HL)
|
|
// 046e: 08 MOV A,EAH
|
|
// 046f: 3b STAX (HL)
|
|
// 0470: aa EI
|
|
// 0471: a3 POP HL
|
|
// 0472: 48 85 LDEAX (HL++)
|
|
// 0474: b5 DMOV BC,EA
|
|
// 0475: b4 PUSH EA
|
|
// 0476: 48 83 LDEAX (HL)
|
|
// 0478: 74 e5 DSUB EA,BC
|
|
// 047a: b5 DMOV BC,EA
|
|
// 047b: 01 6e LDAW $FF63_fracPitchAmt
|
|
// 047d: 48 2f MUL C
|
|
// 047f: 08 MOV A,EAH
|
|
// 0480: 1b MOV C,A
|
|
// 0481: 01 6e LDAW $FF63_fracPitchAmt
|
|
// 0483: 48 2e MUL B
|
|
// 0485: 70 43 EADD EA,C
|
|
// 0487: b5 DMOV BC,EA
|
|
// 0488: a4 POP EA
|
|
// 0489: 74 c5 DADD EA,BC
|
|
// 048b: 48 a4 DSLL EA
|
|
// 048d: 48 a4 DSLL EA
|
|
// 048f: 01 0f LDAW $FF0F_voicePtr
|
|
// 0491: 78 2f CALF $082F_setDacOut
|
|
// 0493: 64 08 ef ANI PA,$EF
|
|
// 0496: 01 34 LDAW $FF34
|
|
// 0498: 48 25 SLL A
|
|
// 049a: 63 34 STAW $FF34
|
|
// 049c: 20 0f INRW $FF0F_voicePtr
|
|
// 049e: 75 0f 06 EQIW $FF0F_voicePtr,$06
|
|
// 04a1: 4f 79 JRE $041C
|
|
// 04a3: 4e 30 JRE $04D5
|
|
// 04a5: 71 6e 00 MVIW $FF63_fracPitchAmt,$00
|
|
// 04a8: 69 00 MVI A,$00
|
|
// 04aa: 4f 86 JRE $0432
|
|
// 04ac: 71 6e 00 MVIW $FF63_fracPitchAmt,$00
|
|
// 04af: 69 66 MVI A,$66
|
|
// 04b1: 4f 7f JRE $0432
|
|
// 04b3: 16 ff XRI A,$FF
|
|
// 04b5: 74 88 00 ANAW $FF00_resetVoiceBits
|
|
// 04b8: 63 00 STAW $FF00_resetVoiceBits
|
|
// 04ba: 34 56 0b LXI HL,$0B56
|
|
// 04bd: ad LDAX (HL+B)
|
|
// 04be: 6e 23 MVI H,$23
|
|
// 04c0: 74 3a 03 LTI B,$03
|
|
// 04c3: 6e 13 MVI H,$13
|
|
// 04c5: 6f 00 MVI L,$00
|
|
// 04c7: ba DI
|
|
// 04c8: 3b STAX (HL)
|
|
// 04c9: 4f 9a JRE $0465
|
|
// 04cb: 74 c5 DADD EA,BC
|
|
// 04cd: db JR $04E9
|
|
// 04ce: 74 a5 DADDNC EA,BC
|
|
// 04d0: 71 6a 00 MVIW $FF6A_vcfUnderflow1,$00
|
|
// 04d3: 4e 21 JRE $04F6
|
|
// 04d5: 71 6a 00 MVIW $FF6A_vcfUnderflow1,$00
|
|
// 04d8: 70 1f 3d ff LBCD $FF3D_vcfCutoff
|
|
// 04dc: a5 DMOV EA,BC
|
|
// 04dd: 70 1f 53 ff LBCD $FF53
|
|
// 04e1: 59 4a BIT 1,$FF4A_lfoPol // polarity
|
|
// 04e3: e7 JR $04CB
|
|
// 04e4: 74 b5 DSUBNB EA,BC
|
|
// 04e6: 71 6a 01 MVIW $FF6A_vcfUnderflow1,$01
|
|
// 04e9: 70 1f 65 ff LBCD $FF65
|
|
// 04ed: 5d 1e BIT 5,$FF1E_flags1
|
|
// 04ef: 4f dd JRE $04CE
|
|
// 04f1: 74 b5 DSUBNB EA,BC
|
|
// 04f3: 71 6a 01 MVIW $FF6A_vcfUnderflow1,$01
|
|
// 04f6: b4 PUSH EA
|
|
// 04f7: 71 0f 00 MVIW $FF0F_voicePtr,$00
|
|
// 04fa: 71 34 01 MVIW $FF34,$01
|
|
// 04fd: 34 71 ff LXI HL,$FF71_notePitchFrac
|
|
// 0500: 24 25 ff LXI DE,$FF25_envRlsCoeff
|
|
// 0503: b3 PUSH HL
|
|
// 0504: 48 8b 02 LDEAX (DE+$02)
|
|
// 0507: 01 34 LDAW $FF34
|
|
// 0509: 74 c8 11 ONAW $FF11
|
|
// 050c: 4e 2a JRE $0538
|
|
// 050e: 74 c8 33 ONAW $FF33_rlsPhase
|
|
// 0511: 4e 50 JRE $0563
|
|
// 0513: 74 c8 07 ONAW $FF07_atkPhase
|
|
// 0516: c7 JR $051E
|
|
// 0517: 16 ff XRI A,$FF
|
|
// 0519: 74 88 07 ANAW $FF07_atkPhase
|
|
// 051c: 63 07 STAW $FF07_atkPhase
|
|
// 051e: 70 1f 23 ff LBCD $FF23_envSustainLev
|
|
// 0522: 74 ad DGT EA,BC
|
|
// 0524: a5 DMOV EA,BC
|
|
// 0525: 74 e5 DSUB EA,BC
|
|
// 0527: b5 DMOV BC,EA
|
|
// 0528: 01 22 LDAW $FF22
|
|
// 052a: 63 35 STAW $FF35
|
|
// 052c: 01 21 LDAW $FF21_envDcyCoeff
|
|
// 052e: 78 3d CALF $083D
|
|
// 0530: 70 1f 23 ff LBCD $FF23_envSustainLev
|
|
// 0534: 74 c5 DADD EA,BC
|
|
// 0536: 4e 58 JRE $0590
|
|
// 0538: 74 c8 07 ONAW $FF07_atkPhase
|
|
// 053b: ce JR $054A
|
|
// 053c: 74 d8 08 OFFAW $FF08_dcyPhase
|
|
// 053f: 4f d6 JRE $0517
|
|
// 0541: 1a MOV B,A
|
|
// 0542: 16 ff XRI A,$FF
|
|
// 0544: 74 88 07 ANAW $FF07_atkPhase
|
|
// 0547: 63 07 STAW $FF07_atkPhase
|
|
// 0549: 0a MOV A,B
|
|
// 054a: 16 ff XRI A,$FF
|
|
// 054c: 1a MOV B,A
|
|
// 054d: 74 88 33 ANAW $FF33_rlsPhase
|
|
// 0550: 63 33 STAW $FF33_rlsPhase
|
|
// 0552: 0a MOV A,B
|
|
// 0553: 74 88 08 ANAW $FF08_dcyPhase
|
|
// 0556: 63 08 STAW $FF08_dcyPhase
|
|
// 0558: b5 DMOV BC,EA
|
|
// 0559: 01 26 LDAW $FF26
|
|
// 055b: 63 35 STAW $FF35
|
|
// 055d: 01 25 LDAW $FF25_envRlsCoeff
|
|
// 055f: 78 3d CALF $083D
|
|
// 0561: 4e 2d JRE $0590
|
|
// 0563: 01 34 LDAW $FF34
|
|
// 0565: 16 ff XRI A,$FF
|
|
// 0567: 74 88 08 ANAW $FF08_dcyPhase
|
|
// 056a: 63 08 STAW $FF08_dcyPhase
|
|
// 056c: 01 45 LDAW $FF45_envAtkVal
|
|
// 056e: 48 25 SLL A
|
|
// 0570: 34 60 0b LXI HL,$0B60_envAtkTbl
|
|
// 0573: 48 8c LDEAX (HL+A)
|
|
// 0575: b5 DMOV BC,EA
|
|
// 0576: 48 8b 02 LDEAX (DE+$02)
|
|
// 0579: 74 c5 DADD EA,BC
|
|
// 057b: 08 MOV A,EAH
|
|
// 057c: 47 c0 ONI A,$C0
|
|
// 057e: d1 JR $0590
|
|
// 057f: 44 ff 3f LXI EA,$3FFF
|
|
// 0582: 01 34 LDAW $FF34
|
|
// 0584: 74 98 33 ORAW $FF33_rlsPhase
|
|
// 0587: 63 33 STAW $FF33_rlsPhase
|
|
// 0589: 01 34 LDAW $FF34
|
|
// 058b: 74 98 08 ORAW $FF08_dcyPhase
|
|
// 058e: 63 08 STAW $FF08_dcyPhase
|
|
// 0590: 48 9b 02 STEAX (DE+$02)
|
|
// 0593: 48 84 LDEAX (DE++)
|
|
// 0595: 75 0f 00 EQIW $FF0F_voicePtr,$00
|
|
// 0598: cd JR $05A6
|
|
// 0599: 70 1f 4f ff LBCD $FF4F
|
|
// 059d: a5 DMOV EA,BC
|
|
// 059e: 69 07 MVI A,$07
|
|
// 05a0: 78 2f CALF $082F_setDacOut
|
|
// 05a2: 64 08 df ANI PA,$DF
|
|
// 05a5: da JR $05C0
|
|
// 05a6: 5a 37 BIT 2,$FF37_switch2
|
|
// 05a8: c9 JR $05B2
|
|
// 05a9: 01 0f LDAW $FF0F_voicePtr
|
|
// 05ab: 51 DCR A
|
|
// 05ac: 78 2f CALF $082F_setDacOut
|
|
// 05ae: 64 08 bf ANI PA,$BF
|
|
// 05b1: ce JR $05C0
|
|
// 05b2: 01 34 LDAW $FF34
|
|
// 05b4: 48 21 SLR A
|
|
// 05b6: 44 ff 3f LXI EA,$3FFF
|
|
// 05b9: 74 c8 11 ONAW $FF11
|
|
// 05bc: 44 00 00 LXI EA,$0000
|
|
// 05bf: e9 JR $05A9
|
|
// 05c0: a3 POP HL
|
|
// 05c1: 01 6a LDAW $FF6A_vcfUnderflow1
|
|
// 05c3: 63 6b STAW $FF6B_vcfUnderflow2
|
|
// 05c5: 48 82 LDEAX (DE)
|
|
// 05c7: b5 DMOV BC,EA
|
|
// 05c8: 01 41 LDAW $FF41
|
|
// 05ca: 48 2f MUL C
|
|
// 05cc: 08 MOV A,EAH
|
|
// 05cd: 1b MOV C,A
|
|
// 05ce: 01 41 LDAW $FF41
|
|
// 05d0: 48 2e MUL B
|
|
// 05d2: 70 43 EADD EA,C
|
|
// 05d4: b5 DMOV BC,EA
|
|
// 05d5: a4 POP EA
|
|
// 05d6: b4 PUSH EA
|
|
// 05d7: 59 37 BIT 1,$FF37_switch2
|
|
// 05d9: 4e 3e JRE $0619
|
|
// 05db: 74 a5 DADDNC EA,BC
|
|
// 05dd: 71 6b 00 MVIW $FF6B_vcfUnderflow2,$00
|
|
// 05e0: b4 PUSH EA
|
|
// 05e1: 48 85 LDEAX (HL++)
|
|
// 05e3: 48 a0 DSLR EA
|
|
// 05e5: 48 a0 DSLR EA
|
|
// 05e7: b5 DMOV BC,EA
|
|
// 05e8: 48 a0 DSLR EA
|
|
// 05ea: 74 c5 DADD EA,BC
|
|
// 05ec: 14 80 16 LXI BC,$1680
|
|
// 05ef: 74 ad DGT EA,BC
|
|
// 05f1: 4e 2d JRE $0620
|
|
// 05f3: 74 e5 DSUB EA,BC
|
|
// 05f5: b5 DMOV BC,EA
|
|
// 05f6: 01 42 LDAW $FF42_vcfKeyTrack
|
|
// 05f8: 48 2f MUL C
|
|
// 05fa: 08 MOV A,EAH
|
|
// 05fb: 1b MOV C,A
|
|
// 05fc: 01 42 LDAW $FF42_vcfKeyTrack
|
|
// 05fe: 48 2e MUL B
|
|
// 0600: 70 43 EADD EA,C
|
|
// 0602: b5 DMOV BC,EA
|
|
// 0603: a4 POP EA
|
|
// 0604: 74 a5 DADDNC EA,BC
|
|
// 0606: 71 6b 00 MVIW $FF6B_vcfUnderflow2,$00
|
|
// 0609: 08 MOV A,EAH
|
|
// 060a: 47 c0 ONI A,$C0
|
|
// 060c: 4e 2e JRE $063C
|
|
// 060e: 44 00 00 LXI EA,$0000
|
|
// 0611: 45 6b 01 ONIW $FF6B_vcfUnderflow2,$01
|
|
// 0614: 44 ff 3f LXI EA,$3FFF
|
|
// 0617: 4e 23 JRE $063C
|
|
// 0619: 74 b5 DSUBNB EA,BC
|
|
// 061b: 71 6b 01 MVIW $FF6B_vcfUnderflow2,$01
|
|
// 061e: 4f c0 JRE $05E0
|
|
// 0620: b5 DMOV BC,EA
|
|
// 0621: 44 80 16 LXI EA,$1680
|
|
// 0624: 74 e5 DSUB EA,BC
|
|
// 0626: b5 DMOV BC,EA
|
|
// 0627: 01 42 LDAW $FF42_vcfKeyTrack
|
|
// 0629: 48 2f MUL C
|
|
// 062b: 08 MOV A,EAH
|
|
// 062c: 1b MOV C,A
|
|
// 062d: 01 42 LDAW $FF42_vcfKeyTrack
|
|
// 062f: 48 2e MUL B
|
|
// 0631: 70 43 EADD EA,C
|
|
// 0633: b5 DMOV BC,EA
|
|
// 0634: a4 POP EA
|
|
// 0635: 74 b5 DSUBNB EA,BC
|
|
// 0637: 71 6b 01 MVIW $FF6B_vcfUnderflow2,$01
|
|
// 063a: 4f cd JRE $0609
|
|
// 063c: 01 0f LDAW $FF0F_voicePtr
|
|
// 063e: 78 2f CALF $082F_setDacOut
|
|
// 0640: 64 08 df ANI PA,$DF
|
|
// 0643: 01 34 LDAW $FF34
|
|
// 0645: 48 25 SLL A
|
|
// 0647: 63 34 STAW $FF34
|
|
// 0649: 20 0f INRW $FF0F_voicePtr
|
|
// 064b: 75 0f 06 EQIW $FF0F_voicePtr,$06
|
|
// 064e: 54 03 05 JMP $0503
|
|
// 0651: a4 POP EA
|
|
// 0652: b2 PUSH DE
|
|
// 0653: 34 5d ff LXI HL,$FF5D
|
|
// 0656: 5b 5c BIT 3,$FF5C
|
|
// 0658: 4e 88 JRE $06E2
|
|
// 065a: 24 84 ff LXI DE,$FF84
|
|
// 065d: 78 00 CALF $0800
|
|
// 065f: 01 8e LDAW $FF8E
|
|
// 0661: 74 90 02 XRAW $FF02
|
|
// 0664: 57 80 OFFI A,$80
|
|
// 0666: 4e 55 JRE $06BD
|
|
// 0668: 01 8f LDAW $FF8F
|
|
// 066a: 74 f8 03 EQAW $FF03
|
|
// 066d: 4e 4e JRE $06BD
|
|
// 066f: 55 05 01 OFFIW $FF05_bendPolarity,$01
|
|
// 0672: 4e 5c JRE $06D0
|
|
// 0674: 01 06 LDAW $FF06
|
|
// 0676: 1a MOV B,A
|
|
// 0677: 1c MOV D,A
|
|
// 0678: 01 8c LDAW $FF8C
|
|
// 067a: 48 2e MUL B
|
|
// 067c: 48 a0 DSLR EA
|
|
// 067e: 48 a0 DSLR EA
|
|
// 0680: 48 a0 DSLR EA
|
|
// 0682: 48 a0 DSLR EA
|
|
// 0684: 34 65 ff LXI HL,$FF65
|
|
// 0687: 48 95 STEAX (HL++)
|
|
// 0689: 0c MOV A,D
|
|
// 068a: 1a MOV B,A
|
|
// 068b: 01 8d LDAW $FF8D
|
|
// 068d: 48 2e MUL B
|
|
// 068f: 08 MOV A,EAH
|
|
// 0690: 1c MOV D,A
|
|
// 0691: 48 a0 DSLR EA
|
|
// 0693: b5 DMOV BC,EA
|
|
// 0694: 48 a0 DSLR EA
|
|
// 0696: 74 c5 DADD EA,BC
|
|
// 0698: 0c MOV A,D
|
|
// 0699: 70 41 EADD EA,A
|
|
// 069b: 48 2a CLC
|
|
// 069d: 69 00 MVI A,$00
|
|
// 069f: 48 a4 DSLL EA
|
|
// 06a1: 48 35 RLL A
|
|
// 06a3: 48 a4 DSLL EA
|
|
// 06a5: 48 35 RLL A
|
|
// 06a7: 48 a4 DSLL EA
|
|
// 06a9: 48 35 RLL A
|
|
// 06ab: 48 a4 DSLL EA
|
|
// 06ad: 48 35 RLL A
|
|
// 06af: 63 69 STAW $FF69
|
|
// 06b1: 48 93 STEAX (HL)
|
|
// 06b3: ba DI
|
|
// 06b4: 48 48 SKIT FAD
|
|
// 06b6: 00 NOP
|
|
// 06b7: 64 06 04 MVI MKH,$04
|
|
// 06ba: aa EI
|
|
// 06bb: 4e 7a JRE $0737
|
|
// 06bd: 01 8e LDAW $FF8E
|
|
// 06bf: 63 02 STAW $FF02
|
|
// 06c1: 05 1e df ANIW $FF1E_flags1,$DF
|
|
// 06c4: 57 80 OFFI A,$80
|
|
// 06c6: 15 1e 20 ORIW $FF1E_flags1,$20
|
|
// 06c9: 01 8f LDAW $FF8F
|
|
// 06cb: 63 03 STAW $FF03
|
|
// 06cd: 63 06 STAW $FF06
|
|
// 06cf: cd JR $06DD
|
|
// 06d0: 05 1e df ANIW $FF1E_flags1,$DF
|
|
// 06d3: 55 1e 10 OFFIW $FF1E_flags1,$10 // bend positive // bend positive
|
|
// 06d6: 15 1e 20 ORIW $FF1E_flags1,$20
|
|
// 06d9: 01 62 LDAW $FF62_midiBendAmt
|
|
// 06db: 63 06 STAW $FF06
|
|
// 06dd: 71 05 00 MVIW $FF05_bendPolarity,$00
|
|
// 06e0: 4f 94 JRE $0676
|
|
// 06e2: 24 80 ff LXI DE,$FF80
|
|
// 06e5: 78 00 CALF $0800
|
|
// 06e7: 01 89 LDAW $FF89
|
|
// 06e9: 67 00 NEI A,$00
|
|
// 06eb: c6 JR $06F2
|
|
// 06ec: 48 21 SLR A
|
|
// 06ee: 34 00 0a LXI HL,$0A00_portCoeffTbl
|
|
// 06f1: ac LDAX (HL+A)
|
|
// 06f2: 63 7d STAW $FF7D_portaCoeff
|
|
// 06f4: 45 8a 80 ONIW $FF8A,$80
|
|
// 06f7: 4e 2d JRE $0726
|
|
// 06f9: 71 7e 00 MVIW $FF7E,$00
|
|
// 06fc: 69 00 MVI A,$00
|
|
// 06fe: 1b MOV C,A
|
|
// 06ff: 01 8b LDAW $FF8B
|
|
// 0701: 1a MOV B,A
|
|
// 0702: 01 63 LDAW $FF63
|
|
// 0704: 48 2e MUL B
|
|
// 0706: 08 MOV A,EAH
|
|
// 0707: 60 ab GTA A,C
|
|
// 0709: 0b MOV A,C
|
|
// 070a: 63 64 STAW $FF64_lfoModToPitch
|
|
// 070c: 01 88 LDAW $FF88
|
|
// 070e: 47 80 ONI A,$80
|
|
// 0710: c9 JR $071A
|
|
// 0711: 07 7f ANI A,$7F
|
|
// 0713: 63 61 STAW $FF61_tuningAmt
|
|
// 0715: 05 1e 7f ANIW $FF1E_flags1,$7F
|
|
// 0718: 4f 99 JRE $06B3
|
|
// 071a: 1a MOV B,A
|
|
// 071b: 69 80 MVI A,$80
|
|
// 071d: 60 e2 SUB A,B
|
|
// 071f: 63 61 STAW $FF61_tuningAmt
|
|
// 0721: 15 1e 80 ORIW $FF1E_flags1,$80
|
|
// 0724: 4f 8d JRE $06B3
|
|
// 0726: 01 8b LDAW $FF8B
|
|
// 0728: 74 a8 7e GTAW $FF7E
|
|
// 072b: 4f d1 JRE $06FE
|
|
// 072d: 01 7e LDAW $FF7E
|
|
// 072f: 26 0a ADINC A,$0A
|
|
// 0731: 69 ff MVI A,$FF
|
|
// 0733: 63 7e STAW $FF7E
|
|
// 0735: 4f c7 JRE $06FE
|
|
// 0737: a2 POP DE
|
|
// 0738: 48 82 LDEAX (DE)
|
|
// 073a: 5a 37 BIT 2,$FF37_switch2
|
|
// 073c: c1 JR $073E
|
|
// 073d: c9 JR $0747
|
|
// 073e: 44 ff 3f LXI EA,$3FFF
|
|
// 0741: 45 11 20 ONIW $FF11,$20
|
|
// 0744: 44 00 00 LXI EA,$0000
|
|
// 0747: 69 05 MVI A,$05
|
|
// 0749: 78 2f CALF $082F_setDacOut
|
|
// 074b: 64 08 bf ANI PA,$BF
|
|
// 074e: 34 4d ff LXI HL,$FF4D_lfoVal
|
|
// 0751: 48 83 LDEAX (HL)
|
|
// 0753: 70 1f 4b ff LBCD $FF4B_lfoRateCoeff
|
|
// 0757: 58 4a BIT 0,$FF4A_lfoPol // rise/fall
|
|
// 0759: 4e 30 JRE $078B
|
|
// 075b: 74 b5 DSUBNB EA,BC
|
|
// 075d: 4e 3b JRE $079A
|
|
// 075f: 48 95 STEAX (HL++)
|
|
// 0761: 59 4a BIT 1,$FF4A_lfoPol // polarity
|
|
// 0763: 4e 3d JRE $07A2
|
|
// 0765: b5 DMOV BC,EA
|
|
// 0766: 44 00 20 LXI EA,$2000
|
|
// 0769: 74 e5 DSUB EA,BC
|
|
// 076b: b5 DMOV BC,EA
|
|
// 076c: 58 37 BIT 0,$FF37_switch2
|
|
// 076e: 14 ff 3f LXI BC,$3FFF
|
|
// 0771: 01 47 LDAW $FF47_pwmDepth
|
|
// 0773: 48 2f MUL C
|
|
// 0775: 08 MOV A,EAH
|
|
// 0776: 1b MOV C,A
|
|
// 0777: 01 47 LDAW $FF47_pwmDepth
|
|
// 0779: 48 2e MUL B
|
|
// 077b: 70 43 EADD EA,C
|
|
// 077d: b5 DMOV BC,EA
|
|
// 077e: 44 ff 3f LXI EA,$3FFF
|
|
// 0781: 74 e5 DSUB EA,BC
|
|
// 0783: 5e 1e BIT 6,$FF1E_flags1 // square off/on
|
|
// 0785: 44 00 00 LXI EA,$0000
|
|
// 0788: 48 93 STEAX (HL)
|
|
// 078a: de JR $07A9
|
|
// 078b: 74 c5 DADD EA,BC
|
|
// 078d: 08 MOV A,EAH
|
|
// 078e: 47 e0 ONI A,$E0
|
|
// 0790: 4f cd JRE $075F
|
|
// 0792: 44 ff 1f LXI EA,$1FFF
|
|
// 0795: 20 4a INRW $FF4A
|
|
// 0797: 00 NOP
|
|
// 0798: 4f c5 JRE $075F
|
|
// 079a: 44 00 00 LXI EA,$0000
|
|
// 079d: 20 4a INRW $FF4A
|
|
// 079f: 00 NOP
|
|
// 07a0: 4f bd JRE $075F
|
|
// 07a2: 14 00 20 LXI BC,$2000
|
|
// 07a5: 74 c5 DADD EA,BC
|
|
// 07a7: 4f c2 JRE $076B
|
|
// 07a9: 34 39 ff LXI HL,$FF39_noiseLevel
|
|
// 07ac: 48 83 LDEAX (HL)
|
|
// 07ae: 69 07 MVI A,$07
|
|
// 07b0: 78 2f CALF $082F_setDacOut
|
|
// 07b2: 64 08 bf ANI PA,$BF
|
|
// 07b5: 54 ec 02 JMP $02EC
|
|
// 07b8: 01 01 LDAW $FF01
|
|
// 07ba: 37 01 LTI A,$01
|
|
// 07bc: 54 80 02 JMP $0280
|
|
// 07bf: 48 25 SLL A
|
|
// 07c1: 48 a8 TABLE
|
|
// 07c3: 21 JB
|
|
// 07c4: c6 JR $07CB
|
|
// 07c5: 07 78 ANI A,$78
|
|
// 07c7: 51 DCR A
|
|
// 07c8: 01 46 LDAW $FF46_ic40Latch
|
|
// 07ca: 70 79 00 30 MOV ($3000),A
|
|
// 07ce: 6b ef MVI C,$EF
|
|
// 07d0: 71 0f 00 MVIW $FF0F_voicePtr,$00
|
|
// 07d3: 44 00 00 LXI EA,$0000
|
|
// 07d6: 01 0f LDAW $FF0F_voicePtr
|
|
// 07d8: 78 2f CALF $082F_setDacOut
|
|
// 07da: 0b MOV A,C
|
|
// 07db: 07 f0 ANI A,$F0
|
|
// 07dd: 74 98 0f ORAW $FF0F_voicePtr
|
|
// 07e0: 4d c0 MOV PA,A
|
|
// 07e2: 78 57 CALF $0857
|
|
// 07e4: 20 0f INRW $FF0F_voicePtr
|
|
// 07e6: 75 0f 08 EQIW $FF0F_voicePtr,$08
|
|
// 07e9: e9 JR $07D3
|
|
// 07ea: 48 27 SLL C
|
|
// 07ec: 74 5b 80 OFFI C,$80
|
|
// 07ef: 4f df JRE $07D0
|
|
// 07f1: 4f d3 JRE $07C6
|
|
// 07f3: 00 NOP
|
|
// 07f4: 00 NOP
|
|
// 07f5: 00 NOP
|
|
// 07f6: 00 NOP
|
|
// 07f7: 00 NOP
|
|
// 07f8: 00 NOP
|
|
// 07f9: 00 NOP
|
|
// 07fa: 00 NOP
|
|
// 07fb: 00 NOP
|
|
// 07fc: 00 NOP
|
|
// 07fd: 00 NOP
|
|
// 07fe: 00 NOP
|
|
// 07ff: 00 NOP
|
|
// 0800: 6b 03 MVI C,$03
|
|
// 0802: 2b LDAX (HL)
|
|
// 0803: 70 b2 SUBNBX (DE)
|
|
// 0805: 48 3a NEGA
|
|
// 0807: 27 01 GTI A,$01
|
|
// 0809: d8 JR $0822
|
|
// 080a: 2b LDAX (HL)
|
|
// 080b: 3a STAX (DE)
|
|
// 080c: 36 04 SUINB A,$04
|
|
// 080e: 69 00 MVI A,$00
|
|
// 0810: 1a MOV B,A
|
|
// 0811: 36 eb SUINB A,$EB
|
|
// 0813: c5 JR $0819
|
|
// 0814: 60 a2 ADDNC A,B
|
|
// 0816: 69 ff MVI A,$FF
|
|
// 0818: c1 JR $081A
|
|
// 0819: 0a MOV A,B
|
|
// 081a: bb 08 STAX (DE+$08)
|
|
// 081c: 22 INX DE
|
|
// 081d: 32 INX HL
|
|
// 081e: 53 DCR C
|
|
// 081f: 4f e1 JRE $0802
|
|
// 0821: b8 RET
|
|
// 0822: 2a LDAX (DE)
|
|
// 0823: 4f e7 JRE $080C
|
|
// 0825: 69 36 MVI A,$36
|
|
// 0827: 3b STAX (HL)
|
|
// 0828: 46 40 ADI A,$40
|
|
// 082a: 3b STAX (HL)
|
|
// 082b: 46 40 ADI A,$40
|
|
// 082d: 3b STAX (HL)
|
|
// 082e: b8 RET
|
|
// 082f: 64 18 f0 ORI PA,$F0
|
|
// 0832: 17 f0 ORI A,$F0
|
|
// 0834: 4d c0 MOV PA,A
|
|
// 0836: 08 MOV A,EAH
|
|
// 0837: 4d c1 MOV PB,A
|
|
// 0839: 09 MOV A,EAL
|
|
// 083a: 4d c2 MOV PC,A
|
|
// 083c: b8 RET
|
|
// 083d: 48 2e MUL B
|
|
// 083f: 08 MOV A,EAH
|
|
// 0840: 1e MOV H,A
|
|
// 0841: 01 35 LDAW $FF35
|
|
// 0843: 48 2f MUL C
|
|
// 0845: 1f MOV L,A
|
|
// 0846: 08 MOV A,EAH
|
|
// 0847: 1b MOV C,A
|
|
// 0848: 0f MOV A,L
|
|
// 0849: 48 2e MUL B
|
|
// 084b: 0e MOV A,H
|
|
// 084c: 70 41 EADD EA,A
|
|
// 084e: 70 43 EADD EA,C
|
|
// 0850: b8 RET
|
|
// 0851: 5e 37 BIT 6,$FF37_switch2
|
|
// 0853: 54 80 02 JMP $0280
|
|
// 0856: b8 RET
|
|
// 0857: 6a 03 MVI B,$03
|
|
// 0859: 44 10 00 LXI EA,$0010
|
|
// 085c: 69 02 MVI A,$02
|
|
// 085e: 48 3d DIV A
|
|
// 0860: 52 DCR B
|
|
// 0861: f7 JR $0859
|
|
// 0862: b8 RET
|
|
// 0863: 00 NOP
|
|
// 0864: 00 NOP
|
|
// 0865: 00 NOP
|
|
// 0866: 00 NOP
|
|
// 0867: 00 NOP
|
|
// 0868: 00 NOP
|
|
// 0869: 00 NOP
|
|
// 086a: 00 NOP
|
|
// 086b: 00 NOP
|
|
// 086c: 00 NOP
|
|
// 086d: 00 NOP
|
|
// 086e: 00 NOP
|
|
// 086f: 00 NOP
|
|
// 0870: 00 NOP
|
|
// 0871: 00 NOP
|
|
// 0872: 00 NOP
|
|
// 0873: 00 NOP
|
|
// 0874: 00 NOP
|
|
// 0875: 00 NOP
|
|
// 0876: 00 NOP
|
|
// 0877: 00 NOP
|
|
// 0878: 00 NOP
|
|
// 0879: 00 NOP
|
|
// 087a: 00 NOP
|
|
// 087b: 00 NOP
|
|
// 087c: 00 NOP
|
|
// 087d: 00 NOP
|
|
// 087e: 00 NOP
|
|
// 087f: 00 NOP
|
|
// 0880: 00 NOP
|
|
// 0881: 00 NOP
|
|
// 0882: 00 NOP
|
|
// 0883: 00 NOP
|
|
// 0884: 00 NOP
|
|
// 0885: 00 NOP
|
|
// 0886: 00 NOP
|
|
// 0887: 00 NOP
|
|
// 0888: 00 NOP
|
|
// 0889: 00 NOP
|
|
// 088a: 00 NOP
|
|
// 088b: 00 NOP
|
|
// 088c: 00 NOP
|
|
// 088d: 00 NOP
|
|
// 088e: 00 NOP
|
|
// 088f: 00 NOP
|
|
// 0890: 00 NOP
|
|
// 0891: 00 NOP
|
|
// 0892: 00 NOP
|
|
// 0893: 00 NOP
|
|
// 0894: 00 NOP
|
|
// 0895: 00 NOP
|
|
// 0896: 00 NOP
|
|
// 0897: 00 NOP
|
|
// 0898: 00 NOP
|
|
// 0899: 00 NOP
|
|
// 089a: 00 NOP
|
|
// 089b: 00 NOP
|
|
// 089c: 00 NOP
|
|
// 089d: 00 NOP
|
|
// 089e: 00 NOP
|
|
// 089f: 00 NOP
|
|
// 08a0: 00 NOP
|
|
// 08a1: 00 NOP
|
|
// 08a2: 00 NOP
|
|
// 08a3: 00 NOP
|
|
// 08a4: 00 NOP
|
|
// 08a5: 00 NOP
|
|
// 08a6: 00 NOP
|
|
// 08a7: 00 NOP
|
|
// 08a8: 00 NOP
|
|
// 08a9: 00 NOP
|
|
// 08aa: 00 NOP
|
|
// 08ab: 00 NOP
|
|
// 08ac: 00 NOP
|
|
// 08ad: 00 NOP
|
|
// 08ae: 00 NOP
|
|
// 08af: 00 NOP
|
|
// 08b0: 00 NOP
|
|
// 08b1: 00 NOP
|
|
// 08b2: 00 NOP
|
|
// 08b3: 00 NOP
|
|
// 08b4: 00 NOP
|
|
// 08b5: 00 NOP
|
|
// 08b6: 00 NOP
|
|
// 08b7: 00 NOP
|
|
// 08b8: 00 NOP
|
|
// 08b9: 00 NOP
|
|
// 08ba: 00 NOP
|
|
// 08bb: 00 NOP
|
|
// 08bc: 00 NOP
|
|
// 08bd: 00 NOP
|
|
// 08be: 00 NOP
|
|
// 08bf: 00 NOP
|
|
// 08c0: 00 NOP
|
|
// 08c1: 00 NOP
|
|
// 08c2: 00 NOP
|
|
// 08c3: 00 NOP
|
|
// 08c4: 00 NOP
|
|
// 08c5: 00 NOP
|
|
// 08c6: 00 NOP
|
|
// 08c7: 00 NOP
|
|
// 08c8: 00 NOP
|
|
// 08c9: 00 NOP
|
|
// 08ca: 00 NOP
|
|
// 08cb: 00 NOP
|
|
// 08cc: 00 NOP
|
|
// 08cd: 00 NOP
|
|
// 08ce: 00 NOP
|
|
// 08cf: 00 NOP
|
|
// 08d0: 00 NOP
|
|
// 08d1: 00 NOP
|
|
// 08d2: 00 NOP
|
|
// 08d3: 00 NOP
|
|
// 08d4: 00 NOP
|
|
// 08d5: 00 NOP
|
|
// 08d6: 00 NOP
|
|
// 08d7: 00 NOP
|
|
// 08d8: 00 NOP
|
|
// 08d9: 00 NOP
|
|
// 08da: 00 NOP
|
|
// 08db: 00 NOP
|
|
// 08dc: 00 NOP
|
|
// 08dd: 00 NOP
|
|
// 08de: 00 NOP
|
|
// 08df: 00 NOP
|
|
// 08e0: 00 NOP
|
|
// 08e1: 00 NOP
|
|
// 08e2: 00 NOP
|
|
// 08e3: 00 NOP
|
|
// 08e4: 00 NOP
|
|
// 08e5: 00 NOP
|
|
// 08e6: 00 NOP
|
|
// 08e7: 00 NOP
|
|
// 08e8: 00 NOP
|
|
// 08e9: 00 NOP
|
|
// 08ea: 00 NOP
|
|
// 08eb: 00 NOP
|
|
// 08ec: 00 NOP
|
|
// 08ed: 00 NOP
|
|
// 08ee: 00 NOP
|
|
// 08ef: 00 NOP
|
|
// 08f0: 00 NOP
|
|
// 08f1: 00 NOP
|
|
// 08f2: 00 NOP
|
|
// 08f3: 00 NOP
|
|
// 08f4: 00 NOP
|
|
// 08f5: 00 NOP
|
|
// 08f6: 00 NOP
|
|
// 08f7: 00 NOP
|
|
// 08f8: 00 NOP
|
|
// 08f9: 00 NOP
|
|
// 08fa: 00 NOP
|
|
// 08fb: 00 NOP
|
|
// 08fc: 00 NOP
|
|
// 08fd: 00 NOP
|
|
// 08fe: 00 NOP
|
|
// 08ff: 00 NOP
|
|
// 0900: 00 NOP
|
|
// 0901: 00 NOP
|
|
// 0902: 00 NOP
|
|
// 0903: 00 NOP
|
|
// 0904: 00 NOP
|
|
// 0905: 00 NOP
|
|
// 0906: 00 NOP
|
|
// 0907: 00 NOP
|
|
// 0908: 00 NOP
|
|
// 0909: 00 NOP
|
|
// 090a: 00 NOP
|
|
// 090b: 00 NOP
|
|
// 090c: 00 NOP
|
|
// 090d: 00 NOP
|
|
// 090e: 00 NOP
|
|
// 090f: 00 NOP
|
|
// 0910: 00 NOP
|
|
// 0911: 00 NOP
|
|
// 0912: 00 NOP
|
|
// 0913: 00 NOP
|
|
// 0914: 00 NOP
|
|
// 0915: 00 NOP
|
|
// 0916: 00 NOP
|
|
// 0917: 00 NOP
|
|
// 0918: 00 NOP
|
|
// 0919: 00 NOP
|
|
// 091a: 00 NOP
|
|
// 091b: 00 NOP
|
|
// 091c: 00 NOP
|
|
// 091d: 00 NOP
|
|
// 091e: 00 NOP
|
|
// 091f: 00 NOP
|
|
// 0920: 00 NOP
|
|
// 0921: 00 NOP
|
|
// 0922: 00 NOP
|
|
// 0923: 00 NOP
|
|
// 0924: 00 NOP
|
|
// 0925: 00 NOP
|
|
// 0926: 00 NOP
|
|
// 0927: 00 NOP
|
|
// 0928: 00 NOP
|
|
// 0929: 00 NOP
|
|
// 092a: 00 NOP
|
|
// 092b: 00 NOP
|
|
// 092c: 00 NOP
|
|
// 092d: 00 NOP
|
|
// 092e: 00 NOP
|
|
// 092f: 00 NOP
|
|
// 0930: 00 NOP
|
|
// 0931: 00 NOP
|
|
// 0932: 00 NOP
|
|
// 0933: 00 NOP
|
|
// 0934: 00 NOP
|
|
// 0935: 00 NOP
|
|
// 0936: 00 NOP
|
|
// 0937: 00 NOP
|
|
// 0938: 00 NOP
|
|
// 0939: 00 NOP
|
|
// 093a: 00 NOP
|
|
// 093b: 00 NOP
|
|
// 093c: 00 NOP
|
|
// 093d: 00 NOP
|
|
// 093e: 00 NOP
|
|
// 093f: 00 NOP
|
|
// 0940: 00 NOP
|
|
// 0941: 00 NOP
|
|
// 0942: 00 NOP
|
|
// 0943: 00 NOP
|
|
// 0944: 00 NOP
|
|
// 0945: 00 NOP
|
|
// 0946: 00 NOP
|
|
// 0947: 00 NOP
|
|
// 0948: 00 NOP
|
|
// 0949: 00 NOP
|
|
// 094a: 00 NOP
|
|
// 094b: 00 NOP
|
|
// 094c: 00 NOP
|
|
// 094d: 00 NOP
|
|
// 094e: 00 NOP
|
|
// 094f: 00 NOP
|
|
// 0950: 00 NOP
|
|
// 0951: 00 NOP
|
|
// 0952: 00 NOP
|
|
// 0953: 00 NOP
|
|
// 0954: 00 NOP
|
|
// 0955: 00 NOP
|
|
// 0956: 00 NOP
|
|
// 0957: 00 NOP
|
|
// 0958: 00 NOP
|
|
// 0959: 00 NOP
|
|
// 095a: 00 NOP
|
|
// 095b: 00 NOP
|
|
// 095c: 00 NOP
|
|
// 095d: 00 NOP
|
|
// 095e: 00 NOP
|
|
// 095f: 00 NOP
|
|
// 0960: 00 NOP
|
|
// 0961: 00 NOP
|
|
// 0962: 00 NOP
|
|
// 0963: 00 NOP
|
|
// 0964: 00 NOP
|
|
// 0965: 00 NOP
|
|
// 0966: 00 NOP
|
|
// 0967: 00 NOP
|
|
// 0968: 00 NOP
|
|
// 0969: 00 NOP
|
|
// 096a: 00 NOP
|
|
// 096b: 00 NOP
|
|
// 096c: 00 NOP
|
|
// 096d: 00 NOP
|
|
// 096e: 00 NOP
|
|
// 096f: 00 NOP
|
|
// 0970: 00 NOP
|
|
// 0971: 00 NOP
|
|
// 0972: 00 NOP
|
|
// 0973: 00 NOP
|
|
// 0974: 00 NOP
|
|
// 0975: 00 NOP
|
|
// 0976: 00 NOP
|
|
// 0977: 00 NOP
|
|
// 0978: 00 NOP
|
|
// 0979: 00 NOP
|
|
// 097a: 00 NOP
|
|
// 097b: 00 NOP
|
|
// 097c: 00 NOP
|
|
// 097d: 00 NOP
|
|
// 097e: 00 NOP
|
|
// 097f: 00 NOP
|
|
// 0980: 00 NOP
|
|
// 0981: 00 NOP
|
|
// 0982: 00 NOP
|
|
// 0983: 00 NOP
|
|
// 0984: 00 NOP
|
|
// 0985: 00 NOP
|
|
// 0986: 00 NOP
|
|
// 0987: 00 NOP
|
|
// 0988: 00 NOP
|
|
// 0989: 00 NOP
|
|
// 098a: 00 NOP
|
|
// 098b: 00 NOP
|
|
// 098c: 00 NOP
|
|
// 098d: 00 NOP
|
|
// 098e: 00 NOP
|
|
// 098f: 00 NOP
|
|
// 0990: 00 NOP
|
|
// 0991: 00 NOP
|
|
// 0992: 00 NOP
|
|
// 0993: 00 NOP
|
|
// 0994: 00 NOP
|
|
// 0995: 00 NOP
|
|
// 0996: 00 NOP
|
|
// 0997: 00 NOP
|
|
// 0998: 00 NOP
|
|
// 0999: 00 NOP
|
|
// 099a: 00 NOP
|
|
// 099b: 00 NOP
|
|
// 099c: 00 NOP
|
|
// 099d: 00 NOP
|
|
// 099e: 00 NOP
|
|
// 099f: 00 NOP
|
|
// 09a0: 00 NOP
|
|
// 09a1: 00 NOP
|
|
// 09a2: 00 NOP
|
|
// 09a3: 00 NOP
|
|
// 09a4: 00 NOP
|
|
// 09a5: 00 NOP
|
|
// 09a6: 00 NOP
|
|
// 09a7: 00 NOP
|
|
// 09a8: 00 NOP
|
|
// 09a9: 00 NOP
|
|
// 09aa: 00 NOP
|
|
// 09ab: 00 NOP
|
|
// 09ac: 00 NOP
|
|
// 09ad: 00 NOP
|
|
// 09ae: 00 NOP
|
|
// 09af: 00 NOP
|
|
// 09b0: 00 NOP
|
|
// 09b1: 00 NOP
|
|
// 09b2: 00 NOP
|
|
// 09b3: 00 NOP
|
|
// 09b4: 00 NOP
|
|
// 09b5: 00 NOP
|
|
// 09b6: 00 NOP
|
|
// 09b7: 00 NOP
|
|
// 09b8: 00 NOP
|
|
// 09b9: 00 NOP
|
|
// 09ba: 00 NOP
|
|
// 09bb: 00 NOP
|
|
// 09bc: 00 NOP
|
|
// 09bd: 00 NOP
|
|
// 09be: 00 NOP
|
|
// 09bf: 00 NOP
|
|
// 09c0: 00 NOP
|
|
// 09c1: 00 NOP
|
|
// 09c2: 00 NOP
|
|
// 09c3: 00 NOP
|
|
// 09c4: 00 NOP
|
|
// 09c5: 00 NOP
|
|
// 09c6: 00 NOP
|
|
// 09c7: 00 NOP
|
|
// 09c8: 00 NOP
|
|
// 09c9: 00 NOP
|
|
// 09ca: 00 NOP
|
|
// 09cb: 00 NOP
|
|
// 09cc: 00 NOP
|
|
// 09cd: 00 NOP
|
|
// 09ce: 00 NOP
|
|
// 09cf: 00 NOP
|
|
// 09d0: 00 NOP
|
|
// 09d1: 00 NOP
|
|
// 09d2: 00 NOP
|
|
// 09d3: 00 NOP
|
|
// 09d4: 00 NOP
|
|
// 09d5: 00 NOP
|
|
// 09d6: 00 NOP
|
|
// 09d7: 00 NOP
|
|
// 09d8: 00 NOP
|
|
// 09d9: 00 NOP
|
|
// 09da: 00 NOP
|
|
// 09db: 00 NOP
|
|
// 09dc: 00 NOP
|
|
// 09dd: 00 NOP
|
|
// 09de: 00 NOP
|
|
// 09df: 00 NOP
|
|
// 09e0: 00 NOP
|
|
// 09e1: 00 NOP
|
|
// 09e2: 00 NOP
|
|
// 09e3: 00 NOP
|
|
// 09e4: 00 NOP
|
|
// 09e5: 00 NOP
|
|
// 09e6: 00 NOP
|
|
// 09e7: 00 NOP
|
|
// 09e8: 00 NOP
|
|
// 09e9: 00 NOP
|
|
// 09ea: 00 NOP
|
|
// 09eb: 00 NOP
|
|
// 09ec: 00 NOP
|
|
// 09ed: 00 NOP
|
|
// 09ee: 00 NOP
|
|
// 09ef: 00 NOP
|
|
// 09f0: 00 NOP
|
|
// 09f1: 00 NOP
|
|
// 09f2: 00 NOP
|
|
// 09f3: 00 NOP
|
|
// 09f4: 00 NOP
|
|
// 09f5: 00 NOP
|
|
// 09f6: 00 NOP
|
|
// 09f7: 00 NOP
|
|
// 09f8: 00 NOP
|
|
// 09f9: 00 NOP
|
|
// 09fa: 00 NOP
|
|
// 09fb: 00 NOP
|
|
// 09fc: 00 NOP
|
|
// 09fd: 00 NOP
|
|
// 09fe: 00 NOP
|
|
// 09ff: 00 NOP
|
|
//
|
|
// Lookup tables for the various controls
|
|
//
|
|
// 0A00_portCoeffTbl:
|
|
// 0a00: 00 ff f7 ef e7 df d7 cf c7 bf b7 af a7 9f 97 8f
|
|
// 0a10: 87 7f 77 6f 67 5f 57 4f 47 3f 3d 3b 39 37 35 33
|
|
// 0a20: 31 2f 2d 2b 29 27 25 23 21 1f 1d 1b 19 17 15 13
|
|
// 0a30: 12 11 10 10 10 10 0f 0f 0f 0f 0e 0e 0e 0e 0d 0d
|
|
// 0a40: 0d 0d 0d 0c 0c 0c 0c 0c 0b 0b 0b 0b 0b 0a 0a 0a
|
|
// 0a50: 0a 0a 09 09 09 09 09 08 08 08 08 08 07 07 07 07
|
|
// 0a60: 07 06 06 06 06 06 05 05 05 05 05 04 04 04 04 04
|
|
// 0a70: 03 03 03 03 03 02 02 02 02 02 01 01 01 01 01 01
|
|
// 0a80: 00 00 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
|
|
// 0a90: 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d
|
|
// 0aa0: 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d
|
|
// 0ab0: 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d
|
|
// 0ac0: 3e 40 42 44 46 48 4a 4c 4e 50 52 54 56 58 5a 5c
|
|
// 0ad0: 5e 60 62 64 66 68 6a 6c 6e 70 72 74 76 78 7a 7c
|
|
// 0ae0: 80 84 88 8c 90 94 98 9c a0 a4 a8 ac b0 b4 b8 bc
|
|
// 0af0: c0 c4 c8 cc d0 d4 d8 dc e0 e4 e8 ec f0 f8 ff ff
|
|
///
|
|
// not used, 0x30 bytes of 0
|
|
// 0b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
// 0b10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
// 0b20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
//
|
|
// 0B30_lfoDelayTbl1:
|
|
// 0b30: ffff 0419 020c 015e 0100 0100 0100 0100
|
|
|
|
// voice to clock address lookup table
|
|
// 0b50: 20 21 22 10 11 12
|
|
|
|
// CTC programming command for clock chip
|
|
// 0b56: 36 76 b6 36 76 b6
|
|
|
|
// 0b5c: 00 00 00 00
|
|
|
|
|
|
// 0b60_envAtkTbl:
|
|
// 0b60: 4000 2000 1000 0aaa 0800 0666 0555 0492
|
|
// 0b70: 0400 038e 0333 02e9 02ab 0276 0249 0222
|
|
// 0b80: 0200 01e2 01c7 01af 0199 0186 0174 0164
|
|
// 0b90: 0155 0148 013b 012f 0124 011a 0111 0108
|
|
// 0ba0: 0100 00f8 00f1 00ea 00e4 00dd 00d8 00d2
|
|
// 0bb0: 00cd 00c8 00c3 00bf 00ba 00b6 00b2 00ae
|
|
// 0bc0: 00ab 00a7 00a4 00a1 009e 009b 0098 0095
|
|
// 0bd0: 0092 0090 008d 008b 0089 0086 0084 0082
|
|
// 0be0: 007f 007d 007a 0077 0074 0072 006f 006c
|
|
// 0bf0: 0069 0067 0064 0061 005e 005c 0059 0056
|
|
// 0c00: 0053 0050 004e 004b 0048 0045 0042 0040
|
|
// 0c10: 003f 003d 003c 003a 0039 0037 0036 0034
|
|
// 0c20: 0033 0031 0030 002e 002d 002b 002a 0028
|
|
// 0c30: 0027 0025 0024 0022 0021 0021 0020 0020
|
|
// 0c40: 001f 001f 001e 001e 001d 001d 001c 001c
|
|
// 0c50: 001b 001b 001a 0019 0018 0017 0016 0015
|
|
|
|
// 0c60_lfoSpeedTbl:
|
|
// 0c60: 0005 000f 0019 0028 0037 0046 0050 005a
|
|
// 0c70: 0064 006e 0078 0082 008c 0096 00a0 00aa
|
|
// 0c80: 00b4 00be 00c8 00d2 00dc 00e6 00f0 00fa
|
|
// 0c90: 0104 010e 0118 0122 012c 0136 0140 014a
|
|
// 0ca0: 0154 015e 0168 0172 017c 0186 0190 019a
|
|
// 0cb0: 01a4 01ae 01b8 01c2 01cc 01d6 01e0 01ea
|
|
// 0cc0: 01f4 01fe 0208 0212 021c 0226 0230 023a
|
|
// 0cd0: 0244 024e 0258 0262 026c 0276 0280 028a
|
|
// 0ce0: 029a 02aa 02ba 02ca 02da 02ea 02fa 030a
|
|
// 0cf0: 031a 032a 033a 034a 035a 036a 037a 038a
|
|
// 0d00: 039a 03aa 03ba 03ca 03da 03ea 03fa 040a
|
|
// 0d10: 041a 042a 043a 044a 045a 046a 047a 048a
|
|
// 0d20: 04be 04f2 0526 055a 058e 05c2 05f6 062c
|
|
// 0d30: 0672 06b8 0708 0758 07a8 07f8 085c 08c0
|
|
// 0d40: 0924 0988 09ec 0a50 0ab4 0b18 0b7c 0be0
|
|
// 0d50: 0c58 0cd0 0d48 0dde 0e74 0f0a 0fa0 1000
|
|
// 0d60: 1000 3000 5000 7000 9000 a000 a800 b000
|
|
|
|
// 0D60_envDecRelTbl:
|
|
// 0d70: b800 c000 c800 d000 d800 e000 e800 f000
|
|
// 0d80: f080 f100 f180 f200 f280 f300 f380 f400
|
|
// 0d90: f480 f500 f580 f600 f680 f700 f780 f800
|
|
// 0da0: f880 f900 f980 fa00 fa80 fb00 fb80 fc00
|
|
// 0db0: fc80 fd00 fd80 fe00 fe0c fe18 fe24 fe30
|
|
// 0dc0: fe3c fe48 fe54 fe60 fe6c fe78 fe84 fe90
|
|
// 0dd0: fe9c fea8 feb4 fec0 fecc fed8 fee4 fef0
|
|
// 0de0: fefc ff08 ff0c ff10 ff14 ff18 ff1c ff20
|
|
// 0df0: ff24 ff28 ff2c ff30 ff34 ff38 ff3c ff40
|
|
// 0e00: ff44 ff48 ff4c ff50 ff54 ff58 ff5c ff60
|
|
// 0e10: ff64 ff68 FF6C ff70 ff74 ff78 ff7c ff80
|
|
// 0e20: ff84 ff88 ff8c ff90 ff94 ff98 ff9c ffa0
|
|
// 0e30: ffa4 ffa8 ffac ffb0 ffb4 ffb8 ffbc ffc0
|
|
// 0e40: ffc4 ffc8 ffcc ffd0 ffd4 ffd8 ffdc ffe0
|
|
// 0e50: ffe4 ffe8 ffec fff0 fff1 fff2 fff3 fff4
|
|
|
|
// 0E60_noteCvDacTbl:
|
|
// 0e60: 0020 0022 0024 0026 0028 002b 002d 0030
|
|
// 0e70: 0033 0036 0039 003c 0040 0044 0048 004c
|
|
// 0e80: 0050 0055 005a 005f 0065 006b 0072 0079
|
|
// 0e90: 0080 0087 008f 0098 00a1 00ab 00b5 00c0
|
|
// 0ea0: 00cb 00d7 00e4 00f2 0100 010f 011f 0130
|
|
// 0eb0: 0142 0156 016a 017f 0196 01ae 01c8 01e3
|
|
// 0ec0: 0200 021e 023e 0261 0285 02ab 02d4 02ff
|
|
// 0ed0: 032d 035d 0390 03c7 0400 043d 047d 04c2
|
|
// 0ee0: 050a 0557 05a9 05fe 0659 06ba 0721 078d
|
|
// 0ef0: 0800 0879 08fb 0984 0a15 0aae 0b51 0bfc
|
|
// 0f00: 0cb2 0d74 0e42 0f1b 0fff 0fff 0fff 0fff
|
|
// 0f10: 0fff 0fff 0fff 0fff 0fff 0fff 0fff 0fff
|
|
// 0f20: 0fff 0fff 0fff 0fff 0fff 0fff 0fff 0fff
|
|
|
|
// 0F30_noteClkDivTbl:
|
|
// 0f30: f06e e2e9 d61f ca18 beba b404 a9e0 a052
|
|
// 0f40: 974f 8ecc 86c5 7f33 780f 7151 6aef 64ee
|
|
// 0f50: 5f42 59e9 54d9 5015 4b95 4754 4353 3f8d
|
|
// 0f60: 3bfc 389e 356e 326e 2f99 2ced 2a66 2805
|
|
// 0f70: 25c5 23a5 21a5 1fc3 1dfb 1c4c 1ab4 1934
|
|
// 0f80: 17ca 1674 1531 1401 12e1 11d1 10d1 0fe1
|
|
// 0f90: 0efd 0e25 0d59 0c99 0be4 0b39 0a98 0a00
|
|
// 0fa0: 0970 08e8 0868 07f0 077e 0712 06ac 064c
|
|
// 0fb0: 05f2 059c 054c 0500 04b8 0474 0434 03f8
|
|
// 0fc0: 03bf 0389 0356 0326 02f9 02ce 02a6 0280
|
|
// 0fd0: 025c 023a 021a 01fc 01df 01c4 01ab 0193
|
|
// 0fe0: 017c 0167 0153 0140 012e 011d 010d 00fe
|
|
// 0ff0: 00f0 00e2 00d5 00c9 00be 00b3 00a9 00a0
|