diff --git a/plugin/ic1.cpp b/plugin/ic1.cpp index 9d0adb7..f55e29b 100644 --- a/plugin/ic1.cpp +++ b/plugin/ic1.cpp @@ -148,7 +148,7 @@ // 0102: 71 bb 01 MVIW $FFBB,$01 // 0105: 58 b6 BIT 0,$FFB6 // 0107: 71 ba 10 MVIW $FFBA,$10 -// 010a: 71 be 0c MVIW $FFBE,$0C +// 010a: 71 be 0c MVIW $FFBE_transpose,$0C // 010d: 7b 9a CALF $0B9A // 010f: 78 28 CALF $0828 // 0111: 58 a8 BIT 0,$FFA8_midiSwitch @@ -203,7 +203,7 @@ // 0163: 66 0c SUI A,$0C // 0165: 37 19 LTI A,$19 // 0167: 66 0c SUI A,$0C -// 0169: 63 be STAW $FFBE +// 0169: 63 be STAW $FFBE_transpose // 016b: 77 0c EQI A,$0C // 016d: c7 JR $0175 // 016e: 01 c8 LDAW $FFC8 @@ -326,7 +326,7 @@ // 023d: 01 bd LDAW $FFBD_midiChannel // 023f: 34 40 00 LXI HL,$0040 // 0242: ac LDAX (HL+A) -// 0243: 7d 45 CALF $0D45 +// 0243: 7d 45 CALF $0D45_digitLookup // 0245: c2 JR $0248 // 0246: 7d 3c CALF $0D3C // 0248: 5b a8 BIT 3,$FFA8_midiSwitch ; MIDI CH button @@ -350,7 +350,7 @@ // 026b: 54 5d 04 JMP $045D // 026e: 5b b4 BIT 3,$FFB4 // 0270: c2 JR $0273 -// 0271: 78 5c CALF $085C +// 0271: 78 5c CALF $085C // tell the module board to zero the DAC // 0273: 01 a8 LDAW $FFA8_midiSwitch // 0275: 48 21 SLR A // 0277: 07 38 ANI A,$38 @@ -389,14 +389,14 @@ // 02b7: cf JR $02C7 // 02b8: 69 00 MVI A,$00 // 02ba: 63 b9 STAW $FFB9 -// 02bc: 7d 45 CALF $0D45 +// 02bc: 7d 45 CALF $0D45_digitLookup // 02be: cd JR $02CC // 02bf: 5a b6 BIT 2,$FFB6 // 02c1: 7d 3c CALF $0D3C // 02c3: 05 b6 fb ANIW $FFB6,$FB // 02c6: c5 JR $02CC // 02c7: 69 de MVI A,$DE -// 02c9: 40 45 0d CALL $0D45 +// 02c9: 40 45 0d CALL $0D45_digitLookup // 02cc: 5f b4 BIT 7,$FFB4 // 02ce: 4e 2f JRE $02FF // 02d0: 01 c8 LDAW $FFC8 @@ -451,7 +451,7 @@ // 0333: 07 f0 ANI A,$F0 // 0335: 1a MOV B,A // 0336: 74 98 bb ORAW $FFBB -// 0339: 7d 45 CALF $0D45 +// 0339: 7d 45 CALF $0D45_digitLookup // 033b: 01 bb LDAW $FFBB // 033d: 63 b9 STAW $FFB9 // 033f: 74 2a 00 GTI B,$00 @@ -459,7 +459,7 @@ // 0343: 7d 06 CALF $0D06 // 0345: 4e 5f JRE $03A6 // 0347: 74 98 ba ORAW $FFBA -// 034a: 7d 45 CALF $0D45 +// 034a: 7d 45 CALF $0D45_digitLookup // 034c: 7c 3c CALF $0C3C // 034e: 7c d0 CALF $0CD0 // 0350: 7c 93 CALF $0C93 @@ -487,7 +487,7 @@ // 037e: 07 0f ANI A,$0F // 0380: 1a MOV B,A // 0381: 74 98 ba ORAW $FFBA -// 0384: 7d 45 CALF $0D45 +// 0384: 7d 45 CALF $0D45_digitLookup // 0386: 01 ba LDAW $FFBA // 0388: 63 b9 STAW $FFB9 // 038a: 74 2a 00 GTI B,$00 @@ -495,7 +495,7 @@ // 038e: 7d 06 CALF $0D06 // 0390: d5 JR $03A6 // 0391: 74 98 bb ORAW $FFBB -// 0394: 7d 45 CALF $0D45 +// 0394: 7d 45 CALF $0D45_digitLookup // 0396: 7c 3c CALF $0C3C // 0398: 7c d0 CALF $0CD0 // 039a: 7c 93 CALF $0C93 @@ -520,7 +520,7 @@ // 03bf: 1b MOV C,A // 03c0: 01 ba LDAW $FFBA // 03c2: 60 9b ORA A,C -// 03c4: 7d 45 CALF $0D45 +// 03c4: 7d 45 CALF $0D45_digitLookup // 03c6: 7c d0 CALF $0CD0 // 03c8: 7c 93 CALF $0C93 // 03ca: 55 a8 10 OFFIW $FFA8_midiSwitch,$10 (MIDI Func2) @@ -549,7 +549,7 @@ // 03f6: 46 10 ADI A,$10 // 03f8: 63 ba STAW $FFBA // 03fa: 74 98 bb ORAW $FFBB -// 03fd: 7d 45 CALF $0D45 +// 03fd: 7d 45 CALF $0D45_digitLookup // 03ff: 7c 3c CALF $0C3C // 0401: 7c d0 CALF $0CD0 // 0403: 7c 93 CALF $0C93 @@ -722,7 +722,7 @@ // 0541: 41 INR A // 0542: 34 50 00 LXI HL,$0050 // 0545: ac LDAX (HL+A) -// 0546: 63 c6 STAW $FFC6 +// 0546: 63 c6 STAW $FFC6_rightDigit // 0548: 54 11 01 JMP $0111 // 054b: 10 EXA // 054c: 11 EXX @@ -730,7 +730,7 @@ // 0550: d1 JR $0562 // 0551: 34 68 ff LXI HL,$FF68 // 0554: 78 71 CALF $0871 -// 0556: 01 c5 LDAW $FFC5 +// 0556: 01 c5 LDAW $FFC5_leftDigit // 0558: 4d c1 MOV PB,A // 055a: 64 05 00 MVI PF,$00 // 055d: 64 80 00 MVI ANM,$00 @@ -822,7 +822,7 @@ // // 05f3: 67 c0 NEI A,$C0 // 05f5: c4 JR $05FA // handle patch change -// 05f6: 77 e0 EQI A,$E0 +// 05f6: 77 e0 EQI A,$E0 // skip if pitchbend? // 05f8: f6 JR $05EF // restore registers and return from interrupt // 05f9: ed JR $05E7 // handle pitch bend // @@ -855,79 +855,86 @@ // 0626: 5c 4f BIT 4,$FF4F // 0628: 4e 41 JRE $066B // 062a: 01 3f LDAW $FF3F_midiByteCount -// 062c: 37 10 LTI A,$10 -// 062e: 4e 20 JRE $0650 -// 0630: 1a MOV B,A -// 0631: 0b MOV A,C +// 062c: 37 10 LTI A,$10 // have we got 16 bytes so far? +// 062e: 4e 20 JRE $0650 // jump ahead +// 0630: 1a MOV B,A // save A +// 0631: 0b MOV A,C // 0632: 34 90 ff LXI HL,$FF90_patchRam -// 0635: bd STAX (HL+B) -// 0636: 34 08 00 LXI HL,$0008 +// 0635: bd STAX (HL+B) // store received byte in patch RAM +// 0636: 34 08 00 LXI HL,$0008 // address of note bitmask // 0639: 0a MOV A,B -// 063a: 07 07 ANI A,$07 -// 063c: ac LDAX (HL+A) -// 063d: 34 cf ff LXI HL,$FFCF -// 0640: 74 4a 08 ONI B,$08 -// 0643: 34 ce ff LXI HL,$FFCE -// 0646: 70 9b ORAX (HL) -// 0648: 3b STAX (HL) -// 0649: 20 3f INRW $FF3F_midiByteCount -// 064b: 00 NOP -// 064c: 10 EXA +// 063a: 07 07 ANI A,$07 // A = 0 to 7 +// 063c: ac LDAX (HL+A) // a = 01 to 80 +// 063d: 34 cf ff LXI HL,$FFCF // +// 0640: 74 4a 08 ONI B,$08 // bit 3 set, why? +// 0643: 34 ce ff LXI HL,$FFCE // +// 0646: 70 9b ORAX (HL) // OR in the bits at that address +// 0648: 3b STAX (HL) // store it back +// 0649: 20 3f INRW $FF3F_midiByteCount // next byte +// 064b: 00 NOP // ignore skip +// 064c: 10 EXA // return from interrupt // 064d: 11 EXX // 064e: aa EI // 064f: 62 RETI -// 0650: 67 10 NEI A,$10 -// 0652: ca JR $065D -// 0653: 67 11 NEI A,$11 -// 0655: ce JR $0664 -// 0656: 05 4f 33 ANIW $FF4F,$33 -// 0659: 71 3f 00 MVIW $FF3F_midiByteCount,$00 -// 065c: ef JR $064C -// 065d: 0b MOV A,C -// 065e: 63 8e STAW $FF8E_switches1 -// 0660: 15 b6 20 ORIW $FFB6,$20 -// 0663: e5 JR $0649 -// 0664: 0b MOV A,C -// 0665: 63 8f STAW $FF8F_switches2 -// 0667: 15 b6 40 ORIW $FFB6,$40 -// 066a: f8 JR $0663 -// 066b: 55 3f 01 OFFIW $FF3F_midiByteCount,$01 -// 066e: c3 JR $0672 -// 066f: 63 3e STAW $FF3E -// 0671: f1 JR $0663 -// 0672: 01 3e LDAW $FF3E -// 0674: 27 11 GTI A,$11 -// 0676: 4f b4 JRE $062C -// 0678: ea JR $0663 -// 0679: 75 3f 00 EQIW $FF3F_midiByteCount,$00 + +// save switch bytes from sysex +// 0650: 67 10 NEI A,$10 // skip, if we are not at byte 16 +// 0652: ca JR $065D // we are +// 0653: 67 11 NEI A,$11 // byte 17 +// 0655: ce JR $0664 // we are +// 0656: 05 4f 33 ANIW $FF4F,$33 // 18? must be the end of sysex message +// 0659: 71 3f 00 MVIW $FF3F_midiByteCount,$00 // reset the counter +// 065c: ef JR $064C // return from interrupt +// 065d: 0b MOV A,C +// 065e: 63 8e STAW $FF8E_switches1 // save the switch values +// 0660: 15 b6 20 ORIW $FFB6,$20 // set a flag +// 0663: e5 JR $0649 // next byte +// 0664: 0b MOV A,C +// 0665: 63 8f STAW $FF8F_switches2 // save the switches +// 0667: 15 b6 40 ORIW $FFB6,$40 // set a flag +// 066a: f8 JR $0663 // next byte + +// reading sysex data +// 066b: 55 3f 01 OFFIW $FF3F_midiByteCount,$01 // bit zero set +// 066e: c3 JR $0672 // yes +// 066f: 63 3e STAW $FF3E_midiParam1 // no, store count of bytes +// 0671: f1 JR $0663 // next byte +// 0672: 01 3e LDAW $FF3E_midiParam1 // get the byte count +// 0674: 27 11 GTI A,$11 // >17? +// 0676: 4f b4 JRE $062C // yes, go back and process the sysex packet +// 0678: ea JR $0663 // no, loop around for more bytes + +// identify sysex data +// 0679: 75 3f 00 EQIW $FF3F_midiByteCount,$00 // first byte? // 067c: c6 JR $0683 -// 067d: 77 41 EQI A,$41 -// 067f: 4f d5 JRE $0656 -// 0681: 4f c6 JRE $0649 -// 0683: 75 3f 01 EQIW $FF3F_midiByteCount,$01 -// 0686: d4 JR $069B -// 0687: 77 30 EQI A,$30 -// 0689: c5 JR $068F -// 068a: 15 4f 10 ORIW $FF4F,$10 -// 068d: 4f ba JRE $0649 -// 068f: 67 31 NEI A,$31 -// 0691: f8 JR $068A -// 0692: 77 32 EQI A,$32 -// 0694: 4f c0 JRE $0656 -// 0696: 05 4f ef ANIW $FF4F,$EF -// 0699: 4f ae JRE $0649 -// 069b: 75 3f 02 EQIW $FF3F_midiByteCount,$02 -// 069e: ca JR $06A9 -// 069f: 74 f8 bd EQAW $FFBD_midiChannel -// 06a2: 4f b2 JRE $0656 -// 06a4: 55 4f 10 OFFIW $FF4F,$10 -// 06a7: 4f a0 JRE $0649 -// 06a9: 15 4f 08 ORIW $FF4F,$08 -// 06ac: 71 3f 00 MVIW $FF3F_midiByteCount,$00 -// 06af: 4f 9b JRE $064C -// 06b1: 30 3f DCRW $FF3F_midiByteCount -// 06b3: 4e 59 JRE $070E -// 06b5: 25 4e 91 GTIW $FF4E_midiStatusByte,$91 +// 067d: 77 41 EQI A,$41 // yes, is it the Roland identifier? +// 067f: 4f d5 JRE $0656 // abort +// 0681: 4f c6 JRE $0649 // yes, loop around for another byte +// 0683: 75 3f 01 EQIW $FF3F_midiByteCount,$01 // second byte? +// 0686: d4 JR $069B // no +// 0687: 77 30 EQI A,$30 // yes, is it a memory patch? +// 0689: c5 JR $068F // no +// 068a: 15 4f 10 ORIW $FF4F,$10 // flag that we're receiving a patch dump +// 068d: 4f ba JRE $0649 // loop around for another byte +// 068f: 67 31 NEI A,$31 // was manual pressed? skip if not +// 0691: f8 JR $068A // manual message, jump back to flag we're receiving a full patch dump +// 0692: 77 32 EQI A,$32 // was it a single control message? +// 0694: 4f c0 JRE $0656 // no, abort +// 0696: 05 4f ef ANIW $FF4F,$EF // mask off patch dump bit +// 0699: 4f ae JRE $0649 // loop around for another byte + +// 069b: 75 3f 02 EQIW $FF3F_midiByteCount,$02 // third byte of message +// 069e: ca JR $06A9 // no +// 069f: 74 f8 bd EQAW $FFBD_midiChannel // correct MIDI channel? +// 06a2: 4f b2 JRE $0656 // abort +// 06a4: 55 4f 10 OFFIW $FF4F,$10 // single value message +// 06a7: 4f a0 JRE $0649 // no +// 06a9: 15 4f 08 ORIW $FF4F,$08 // set flag +// 06ac: 71 3f 00 MVIW $FF3F_midiByteCount,$00 // no more bytes +// 06af: 4f 9b JRE $064C // return from interrupt +// 06b1: 30 3f DCRW $FF3F_midiByteCount // count down, skip if less than zero +// 06b3: 4e 59 JRE $070E // store it in FF3E, normally param but here byte count +// 06b5: 25 4e 91 GTIW $FF4E_midiStatusByte,$91 // 06b8: d1 JR $06CA // 06b9: 65 4e b0 NEIW $FF4E_midiStatusByte,$B0 // 06bc: 4e 54 JRE $0712 @@ -936,12 +943,12 @@ // 06c3: 65 4e e0 NEIW $FF4E_midiStatusByte,$E0 // 06c6: 4e c7 JRE $078F // 06c8: 4f 8c JRE $0656 -// 06ca: 01 3e LDAW $FF3E +// 06ca: 01 3e LDAW $FF3E_midiParam1 // 06cc: 27 17 GTI A,$17 // 06ce: 4e 36 JRE $0706 // 06d0: 37 6d LTI A,$6D // 06d2: 4e 36 JRE $070A -// 06d4: 74 e0 be SUBW $FFBE +// 06d4: 74 e0 be SUBW $FFBE_transpose // 06d7: 1a MOV B,A // 06d8: 48 22 SLR B // 06da: 48 22 SLR B @@ -972,9 +979,9 @@ // 0708: 4f c2 JRE $06CC // 070a: 66 0c SUI A,$0C // 070c: 4f c2 JRE $06D0 -// 070e: 63 3e STAW $FF3E +// 070e: 63 3e STAW $FF3E_midiParam1 // 0710: 4f 3a JRE $064C -// 0712: 01 3e LDAW $FF3E +// 0712: 01 3e LDAW $FF3E_midiParam1 // 0714: 27 7a GTI A,$7A // 0716: 4e 35 JRE $074D // 0718: 45 4f 40 ONIW $FF4F,$40 @@ -1037,7 +1044,7 @@ // 0792: d7 JR $07AA // 0793: 0b MOV A,C // 0794: 18 MOV EAH,A -// 0795: 01 3e LDAW $FF3E +// 0795: 01 3e LDAW $FF3E_midiParam1 // 0797: 48 25 SLL A // 0799: 19 MOV EAL,A // 079a: 48 a4 DSLL EA @@ -1059,6 +1066,8 @@ // 07ba: 10 EXA // 07bb: aa EI // 07bc: 62 RETI + + // 07bd: 1b MOV C,A // 07be: 4c c2 MOV A,PC // 07c0: 60 93 XRA A,C @@ -1103,27 +1112,33 @@ // 07fc: 00 NOP // 07fd: 00 NOP // 07fe: 00 NOP -// 07ff: 00 NOP -// 0800: 01 be LDAW $FFBE +// 07ff: 00 NOP + +// something to do with display +// 0800: 01 be LDAW $FFBE_transpose // 0802: 37 0c LTI A,$0C // 0804: c4 JR $0809 -// 0805: 71 c5 04 MVIW $FFC5,$04 +// 0805: 71 c5 04 MVIW $FFC5_leftDigit,$04 // 0808: c3 JR $080C -// 0809: 71 c5 00 MVIW $FFC5,$00 +// 0809: 71 c5 00 MVIW $FFC5_leftDigit,$00 // 080c: 34 60 00 LXI HL,$0060 // 080f: ac LDAX (HL+A) -// 0810: 63 c6 STAW $FFC6 -// 0812: b8 RET +// 0810: 63 c6 STAW $FFC6_rightDigit +// 0812: b8 RET + +// set flags store MIDI channel // 0813: 05 4f dc ANIW $FF4F,$DC // 0816: 15 4f 21 ORIW $FF4F,$21 // 0819: 63 bd STAW $FFBD_midiChannel // 081b: 34 40 00 LXI HL,$0040 // 081e: ac LDAX (HL+A) -// 081f: 7d 45 CALF $0D45 +// 081f: 7d 45 CALF $0D45_digitLookup // 0821: 78 43 CALF $0843_sendOmniOffPoly // 0823: 7b 9a CALF $0B9A // 0825: 78 28 CALF $0828 -// 0827: b8 RET +// 0827: b8 RET + +// centre bend to module board // 0828: 69 80 MVI A,$80 // 082a: 63 a1 STAW $FFA1 // 082c: 63 a2 STAW $FFA2 @@ -1131,7 +1146,9 @@ // 0830: 79 e8 CALF $09E8_sendToTx // 0832: 69 87 MVI A,$87 // 0834: 79 e8 CALF $09E8_sendToTx -// 0836: b8 RET +// 0836: b8 RET + +// send to module board // 0837: 1b MOV C,A // 0838: 69 fd MVI A,$FD // select module board // 083a: 79 e8 CALF $09E8_sendToTx @@ -1155,6 +1172,8 @@ // 0857: 69 00 MVI A,$00 // 0859: 79 e8 CALF $09E8_sendToTx // 085b: b8 RET + +// send Zero DAC command to module board // 085c: 69 fd MVI A,$FD // select module board // 085e: 79 e8 CALF $09E8_sendToTx // 0860: 69 8f MVI A,$8F @@ -1165,7 +1184,9 @@ // 086a: 79 e8 CALF $09E8_sendToTx // 086c: 69 00 MVI A,$00 // 086e: 79 e8 CALF $09E8_sendToTx -// 0870: b8 RET +// 0870: b8 RET + +// read ADCs // 0871: 4c e0 MOV A,CR0 // 0873: 3d STAX (HL+) // 0874: 4c e1 MOV A,CR1 @@ -1174,11 +1195,13 @@ // 0879: 3d STAX (HL+) // 087a: 4c e3 MOV A,CR3 // 087c: 3b STAX (HL) -// 087d: b8 RET +// 087d: b8 RET + + // 087e: 78 c3 CALF $08C3 // 0880: 59 b6 BIT 1,$FFB6 // 0882: 4e 23 JRE $08A7 -// 0884: 55 c5 10 OFFIW $FFC5,$10 +// 0884: 55 c5 10 OFFIW $FFC5_leftDigit,$10 // 0887: df JR $08A7 // 0888: b3 PUSH HL // 0889: b2 PUSH DE @@ -1221,6 +1244,8 @@ // 08be: 17 80 ORI A,$80 // 08c0: 3a STAX (DE) // 08c1: 4f d0 JRE $0893 + +// unknown1 // 08c3: 2a LDAX (DE) // 08c4: 36 04 SUINB A,$04 // 08c6: 69 00 MVI A,$00 @@ -1232,7 +1257,9 @@ // 08d0: 69 ff MVI A,$FF // 08d2: 48 21 SLR A // 08d4: 1b MOV C,A -// 08d5: b8 RET +// 08d5: b8 RET + +// send single value sysex // 08d6: 6c 32 MVI D,$32 // 08d8: 79 15 CALF $0915_sendSysexHeader // 08da: 0d MOV A,E @@ -1243,7 +1270,9 @@ // 08e2: 79 e8 CALF $09E8_sendToTx // 08e4: 69 f7 MVI A,$F7 // 08e6: 79 e6 CALF $09E6_setRunningStatus -// 08e8: b8 RET +// 08e8: b8 RET + +// send sysex header for Manual mode // 08e9: 6c 31 MVI D,$31 // 08eb: 79 15 CALF $0915_sendSysexHeader // 08ed: 69 00 MVI A,$00 @@ -1282,14 +1311,18 @@ // 0922: 79 e8 CALF $09E8_sendToTx // 0924: 01 bd LDAW $FFBD_midiChannel // 0926: 79 e8 CALF $09E8_sendToTx -// 0928: b8 RET +// 0928: b8 RET + +// send Program Change message over MIDI // 0929: 69 f9 MVI A,$F9 // 092b: 79 e8 CALF $09E8_sendToTx // 092d: 69 c0 MVI A,$C0 // 092f: 79 d5 CALF $09D5 // 0931: 79 36 CALF $0936 // 0933: 79 e8 CALF $09E8_sendToTx -// 0935: b8 RET +// 0935: b8 RET + +// calculate patch number for MIDI // 0936: 01 bb LDAW $FFBB // 0938: 51 DCR A // 0939: 1b MOV C,A @@ -1299,7 +1332,9 @@ // 0940: 60 9b ORA A,C // 0942: 5e c8 BIT 6,$FFC8 // 0944: 17 40 ORI A,$40 -// 0946: b8 RET +// 0946: b8 RET + +// send E followed by (DE) to module board // 0947: 69 fd MVI A,$FD // select module board // 0949: 79 e8 CALF $09E8_sendToTx // 094b: 0d MOV A,E @@ -1308,7 +1343,9 @@ // 094f: 07 7f ANI A,$7F // 0951: 3a STAX (DE) // 0952: 79 e8 CALF $09E8_sendToTx -// 0954: b8 RET +// 0954: b8 RET + +// send Pitch Bend // 0955: 55 a8 20 OFFIW $FFA8_midiSwitch,$20 (MIDI Func1) // 0958: b8 RET // 0959: 2a LDAX (DE) @@ -1330,7 +1367,9 @@ // 0976: 25 6a 80 GTIW $FF6A,$80 // 0979: 17 40 ORI A,$40 // 097b: 79 e8 CALF $09E8_sendToTx -// 097d: b8 RET +// 097d: b8 RET + +// send modwheel to MIDI // 097e: 0b MOV A,C // 097f: 63 7f STAW $FF7F // 0981: 55 a8 20 OFFIW $FFA8_midiSwitch,$20 (MIDI Func1) @@ -1344,7 +1383,9 @@ // 0990: 79 e8 CALF $09E8_sendToTx // 0992: 0b MOV A,C // 0993: 79 e8 CALF $09E8_sendToTx -// 0995: b8 RET +// 0995: b8 RET + +// voice mapper? // 0996: 19 MOV EAL,A // 0997: 0a MOV A,B // 0998: 07 07 ANI A,$07 @@ -1372,7 +1413,9 @@ // 09be: e3 JR $09A2 // 09bf: a1 POP BC // 09c0: a3 POP HL -// 09c1: b8 RET +// 09c1: b8 RET + +// send Note On to MIDI // 09c2: 69 f9 MVI A,$F9 // 09c4: 79 e8 CALF $09E8_sendToTx // 09c6: 69 90 MVI A,$90 @@ -1380,13 +1423,16 @@ // 09ca: 08 MOV A,EAH // 09cb: 60 9a ORA A,B // 09cd: 46 18 ADI A,$18 -// 09cf: 74 c0 be ADDW $FFBE +// 09cf: 74 c0 be ADDW $FFBE_transpose // 09d2: 79 e8 CALF $09E8_sendToTx // 09d4: b8 RET +// add MIDI channel to status, set running status, send // 09d5: 74 c0 bd ADDW $FFBD_midiChannel // 09d8: 71 c0 00 MVIW $FFC0_runningStatus,$00 // 09db: cc JR $09E8_sendToTx + +// add MIDI channel and send // 09dc: 47 80 ONI A,$80 // 09de: c9 JR $09E8_sendToTx // 09df: 74 c0 bd ADDW $FFBD_midiChannel @@ -1419,14 +1465,19 @@ // 0a09: a2 POP DE // 0a0a: a1 POP BC // 0a0b: a3 POP HL -// 0a0c: b8 RET +// 0a0c: b8 RET + +// a / 8 into EAH, C back into A, store C at $FFC3 +// to do with note on flags // 0a0d: 48 25 SLL A // 0a0f: 48 25 SLL A // 0a11: 48 25 SLL A // 0a13: 18 MOV EAH,A // 0a14: 0b MOV A,C // 0a15: 63 c3 STAW $FFC3 -// 0a17: b8 RET +// 0a17: b8 RET + +// voice functions? // 0a18: 19 MOV EAL,A // 0a19: 0a MOV A,B // 0a1a: 7a 0d CALF $0A0D @@ -1485,6 +1536,8 @@ // 0a72: ed JR $0A60 // 0a73: 7a f8 CALF $0AF8 // 0a75: ea JR $0A60 + +// voice functions // 0a76: b3 PUSH HL // 0a77: b1 PUSH BC // 0a78: 1b MOV C,A @@ -1498,7 +1551,9 @@ // 0a84: f9 JR $0A7E // 0a85: a1 POP BC // 0a86: a3 POP HL -// 0a87: b8 RET +// 0a87: b8 RET + +// voice functions // 0a88: b3 PUSH HL // 0a89: b1 PUSH BC // 0a8a: 6e ff MVI H,$FF @@ -1521,11 +1576,13 @@ // 0aa3: 79 e8 CALF $09E8_sendToTx // 0aa5: 0b MOV A,C // 0aa6: 3b STAX (HL) -// 0aa7: 74 c0 be ADDW $FFBE +// 0aa7: 74 c0 be ADDW $FFBE_transpose // 0aaa: 79 e8 CALF $09E8_sendToTx // 0aac: a1 POP BC // 0aad: a3 POP HL -// 0aae: b8 RET +// 0aae: b8 RET + +// voice functions // 0aaf: b3 PUSH HL // 0ab0: b1 PUSH BC // 0ab1: b2 PUSH DE @@ -1570,7 +1627,7 @@ // 0ae2: 2a LDAX (DE) // 0ae3: 07 7f ANI A,$7F // 0ae5: 3a STAX (DE) -// 0ae6: 74 c0 be ADDW $FFBE +// 0ae6: 74 c0 be ADDW $FFBE_transpose // 0ae9: 1b MOV C,A // 0aea: 69 fd MVI A,$FD // select module board // 0aec: 79 e8 CALF $09E8_sendToTx @@ -1581,7 +1638,9 @@ // 0af4: a2 POP DE // 0af5: a1 POP BC // 0af6: a3 POP HL -// 0af7: b8 RET +// 0af7: b8 RET + +// voice functions // 0af8: b3 PUSH HL // 0af9: b1 PUSH BC // 0afa: b2 PUSH DE @@ -1624,7 +1683,9 @@ // 0b2c: a2 POP DE // 0b2d: a1 POP BC // 0b2e: a3 POP HL -// 0b2f: b8 RET +// 0b2f: b8 RET + +// voice functions // 0b30: b3 PUSH HL // 0b31: b1 PUSH BC // 0b32: 1b MOV C,A @@ -1651,10 +1712,12 @@ // 0b50: 79 e8 CALF $09E8_sendToTx // 0b52: a1 POP BC // 0b53: a3 POP HL -// 0b54: b8 RET +// 0b54: b8 RET + +// send note on to module board // 0b55: b3 PUSH HL // 0b56: b1 PUSH BC -// 0b57: 74 c0 be ADDW $FFBE +// 0b57: 74 c0 be ADDW $FFBE_transpose // 0b5a: 1b MOV C,A // 0b5b: 6a 05 MVI B,$05 // 0b5d: 34 88 ff LXI HL,$FF88 @@ -1685,6 +1748,7 @@ // 0b7f: a1 POP BC // 0b80: b8 RET +// something to do with voice allocation // 0b81: 34 88 ff LXI HL,$FF88 // 0b84: 6a 05 MVI B,$05 // 0b86: 69 80 MVI A,$80 @@ -1699,16 +1763,22 @@ // 0b94: 52 DCR B // 0b95: fc JR $0B92 // 0b96: 71 86 88 MVIW $FF86,$88 -// 0b99: b8 RET +// 0b99: b8 RET + +// clear MIDI on bits // 0b9a: 34 40 ff LXI HL,$FF40 // 0b9d: c3 JR $0BA1 + +// clear note on bits // 0b9e: 34 30 ff LXI HL,$FF30 // 0ba1: 6a 0d MVI B,$0D // 0ba3: 69 00 MVI A,$00 // 0ba5: 3d STAX (HL+) // 0ba6: 52 DCR B // 0ba7: fd JR $0BA5 -// 0ba8: b8 RET +// 0ba8: b8 RET + +// sends stuff to module board // 0ba9: 69 fd MVI A,$FD // select module board // select module board // 0bab: 79 e8 CALF $09E8_sendToTx // 0bad: 0b MOV A,C @@ -1727,7 +1797,9 @@ // 0bc5: 69 7f MVI A,$7F // 0bc7: 69 00 MVI A,$00 // 0bc9: 79 e8 CALF $09E8_sendToTx -// 0bcb: b8 RET +// 0bcb: b8 RET + +// switches values? // 0bcc: 01 b2 LDAW $FFB2 // 0bce: 07 07 ANI A,$07 // 0bd0: 1a MOV B,A @@ -1735,7 +1807,9 @@ // 0bd3: 07 f8 ANI A,$F8 // 0bd5: 60 9a ORA A,B // 0bd7: 63 8e STAW $FF8E_switches1 -// 0bd9: b8 RET +// 0bd9: b8 RET + +// switches values // 0bda: 01 b2 LDAW $FFB2 // 0bdc: 74 90 8e XRAW $FF8E_switches1 // 0bdf: 07 18 ANI A,$18 @@ -1744,7 +1818,9 @@ // 0be4: 07 e7 ANI A,$E7 // 0be6: 60 9a ORA A,B // 0be8: 63 8e STAW $FF8E_switches1 -// 0bea: b8 RET +// 0bea: b8 RET + +// switches values // 0beb: 01 b2 LDAW $FFB2 // 0bed: 07 e0 ANI A,$E0 // 0bef: 1a MOV B,A @@ -1752,18 +1828,22 @@ // 0bf2: 07 1f ANI A,$1F // 0bf4: 60 9a ORA A,B // 0bf6: 63 8e STAW $FF8E_switches1 -// 0bf8: b8 RET +// 0bf8: b8 RET + +// send switches1 to module board // 0bf9: 63 c7 STAW $FFC7 // 0bfb: 16 ff XRI A,$FF // 0bfd: 07 7f ANI A,$7F // 0bff: 1b MOV C,A -// 0c00: 69 fd MVI A,$FD // select module board // select module board +// 0c00: 69 fd MVI A,$FD // select module board // 0c02: 79 e8 CALF $09E8_sendToTx // 0c04: 69 8e MVI A,$8E // 0c06: 79 e8 CALF $09E8_sendToTx // 0c08: 0b MOV A,C // 0c09: 79 e8 CALF $09E8_sendToTx -// 0c0b: b8 RET +// 0c0b: b8 RET + +// adjust switches2 // 0c0c: 7d 5b CALF $0D5B // 0c0e: 55 ad 18 OFFIW $FFAD,$18 // 0c11: 15 ad 18 ORIW $FFAD,$18 @@ -1776,7 +1856,9 @@ // 0c21: 01 a7 LDAW $FFA7 // 0c23: 74 88 b7 ANAW $FFB7 // 0c26: 60 9a ORA A,B -// 0c28: b8 RET +// 0c28: b8 RET + +// send switches2 to module board // 0c29: 63 8f STAW $FF8F_switches2 // 0c2b: 16 ff XRI A,$FF // 0c2d: 07 1f ANI A,$1F @@ -1787,18 +1869,24 @@ // 0c36: 79 e8 CALF $09E8_sendToTx // 0c38: 0b MOV A,C // 0c39: 79 e8 CALF $09E8_sendToTx -// 0c3b: b8 RET +// 0c3b: b8 RET + +// test bits, juggle switches around // 0c3c: 59 b6 BIT 1,$FFB6 // 0c3e: c7 JR $0C46 // 0c3f: 01 8e LDAW $FF8E_switches1 // 0c41: 63 b8 STAW $FFB8 // 0c43: 05 b6 fd ANIW $FFB6,$FD -// 0c46: b8 RET +// 0c46: b8 RET + +// manual mode middle bars // 0c47: 71 b7 00 MVIW $FFB7,$00 -// 0c4a: 71 c5 04 MVIW $FFC5,$04 -// 0c4d: 71 c6 04 MVIW $FFC6,$04 +// 0c4a: 71 c5 04 MVIW $FFC5_leftDigit,$04 +// 0c4d: 71 c6 04 MVIW $FFC6_rightDigit,$04 // 0c50: 01 c7 LDAW $FFC7 // 0c52: 59 b6 BIT 1,$FFB6 + +// switches? falls through from previous // 0c54: 01 b8 LDAW $FFB8 // 0c56: 63 8e STAW $FF8E_switches1 // 0c58: 7b f9 CALF $0BF9 @@ -1835,77 +1923,92 @@ // 0c8a: 45 a8 30 ONIW $FFA8_midiSwitch,$30 (MIDI Func1+2) // 0c8d: 78 e9 CALF $08E9 // 0c8f: 15 b6 02 ORIW $FFB6,$02 -// 0c92: b8 RET +// 0c92: b8 RET + +// decimal points off? // 0c93: 71 b7 00 MVIW $FFB7,$00 -// 0c96: 05 c5 ef ANIW $FFC5,$EF -// 0c99: 05 c6 ef ANIW $FFC6,$EF -// 0c9c: b8 RET +// 0c96: 05 c5 ef ANIW $FFC5_leftDigit,$EF +// 0c99: 05 c6 ef ANIW $FFC6_rightDigit,$EF +// 0c9c: b8 RET + +// shift bits in a and count? // 0c9d: 6a 01 MVI B,$01 // 0c9f: 48 01 SLRC A // 0ca1: c2 JR $0CA4 // 0ca2: 0a MOV A,B -// 0ca3: b8 RET +// 0ca3: b8 RET + // 0ca4: 42 INR B // 0ca5: f9 JR $0C9F -// 0ca6: b8 RET -// 0ca7: 58 b6 BIT 0,$FFB6 -// 0ca9: c8 JR $0CB2 -// 0caa: 6e 0f MVI H,$0F -// 0cac: 07 f0 ANI A,$F0 -// 0cae: 46 70 ADI A,$70 -// 0cb0: 1f MOV L,A -// 0cb1: dd JR $0CCF -// 0cb2: 01 bb LDAW $FFBB -// 0cb4: 51 DCR A -// 0cb5: 1b MOV C,A -// 0cb6: 01 ba LDAW $FFBA -// 0cb8: 66 10 SUI A,$10 -// 0cba: 48 21 SLR A -// 0cbc: 60 9b ORA A,C -// 0cbe: 5e c8 BIT 6,$FFC8 -// 0cc0: 17 40 ORI A,$40 -// 0cc2: 44 00 02 LXI EA,$0200 -// 0cc5: 19 MOV EAL,A +// 0ca6: b8 RET + +// calculate address for patch data +// 0ca7: 58 b6 BIT 0,$FFB6 // are we in test mode +// 0ca9: c8 JR $0CB2 // no, skip ahead +// 0caa: 6e 0f MVI H,$0F // address is $0f00 +// 0cac: 07 f0 ANI A,$F0 +// 0cae: 46 70 ADI A,$70 +// 0cb0: 1f MOV L,A // address is now $0f80 to $fd0 +// 0cb1: dd JR $0CCF // return +// 0cb2: 01 bb LDAW $FFBB // patch digit? +// 0cb4: 51 DCR A // -1 +// 0cb5: 1b MOV C,A // save +// 0cb6: 01 ba LDAW $FFBA // bank digit +// 0cb8: 66 10 SUI A,$10 // -16 +// 0cba: 48 21 SLR A // double it +// 0cbc: 60 9b ORA A,C // OR in patch digit +// 0cbe: 5e c8 BIT 6,$FFC8 // upper/lower? +// 0cc0: 17 40 ORI A,$40 // OR in that too +// 0cc2: 44 00 02 LXI EA,$0200 // form the address in RAM +// 0cc5: 19 MOV EAL,A // address // 0cc6: 48 a4 DSLL EA // 0cc8: 48 a4 DSLL EA // 0cca: 48 a4 DSLL EA -// 0ccc: 48 a4 DSLL EA -// 0cce: b7 DMOV HL,EA -// 0ccf: b8 RET -// 0cd0: 69 fd MVI A,$FD // select module board // select module board +// 0ccc: 48 a4 DSLL EA // multiply by 16 bytes +// 0cce: b7 DMOV HL,EA // HL now looks like $2nn0 +// 0ccf: b8 RET // return + +// change patch +// called with patch value in C +// 0cd0: 69 fd MVI A,$FD // select module board // select module board // 0cd2: 79 e8 CALF $09E8_sendToTx -// 0cd4: 69 90 MVI A,$90 +// 0cd4: 69 90 MVI A,$90 // start with LFO rate, first slider // 0cd6: 79 e8 CALF $09E8_sendToTx // 0cd8: 0b MOV A,C -// 0cd9: 7c a7 CALF $0CA7 -// 0cdb: 24 90 ff LXI DE,$FF90_patchRam -// 0cde: 7c f1 CALF $0CF1 -// 0ce0: 0b MOV A,C -// 0ce1: 63 8e STAW $FF8E_switches1 -// 0ce3: 7b f9 CALF $0BF9 -// 0ce5: 69 98 MVI A,$98 -// 0ce7: 79 e8 CALF $09E8_sendToTx -// 0ce9: 7c f1 CALF $0CF1 -// 0ceb: 0b MOV A,C -// 0cec: 63 8f STAW $FF8F_switches2 -// 0cee: 7c 29 CALF $0C29 -// 0cf0: b8 RET -// 0cf1: 6a 07 MVI B,$07 -// 0cf3: 6b 00 MVI C,$00 -// 0cf5: 2d LDAX (HL+) -// 0cf6: 48 2a CLC -// 0cf8: 57 80 OFFI A,$80 -// 0cfa: 48 2b STC -// 0cfc: 48 33 RLR C -// 0cfe: 07 7f ANI A,$7F -// 0d00: 3c STAX (DE+) +// 0cd9: 7c a7 CALF $0CA7_calcPatchAddr // HL has the address of the patch in RAM +// 0cdb: 24 90 ff LXI DE,$FF90_patchRam // address to copy to +// 0cde: 7c f1 CALF $0CF1 // send 8 bytes +// 0ce0: 0b MOV A,C // get the switches value +// 0ce1: 63 8e STAW $FF8E_switches1 // save in patchRam +// 0ce3: 7b f9 CALF $0BF9 // send switches1 to module +// 0ce5: 69 98 MVI A,$98 // VCF LFO depth +// 0ce7: 79 e8 CALF $09E8_sendToTx // start it +// 0ce9: 7c f1 CALF $0CF1 // send the next 8 bytes +// 0ceb: 0b MOV A,C // get switches value +// 0cec: 63 8f STAW $FF8F_switches2 // save in patchRam +// 0cee: 7c 29 CALF $0C29 // send switches2 to module +// 0cf0: b8 RET + +// transmit patch bytes to module board +// decodes bit 7 into C and returns it to send to the switches +// 0cf1: 6a 07 MVI B,$07 // seven bits +// 0cf3: 6b 00 MVI C,$00 // clear +// 0cf5: 2d LDAX (HL+) // get byte +// 0cf6: 48 2a CLC // clear carry +// 0cf8: 57 80 OFFI A,$80 // if top bit clear +// 0cfa: 48 2b STC // set carry +// 0cfc: 48 33 RLR C // rotate into C +// 0cfe: 07 7f ANI A,$7F // mask top bit +// 0d00: 3c STAX (DE+) // store at patchRam // 0d01: 79 e8 CALF $09E8_sendToTx -// 0d03: 52 DCR B -// 0d04: f0 JR $0CF5 -// 0d05: b8 RET +// 0d03: 52 DCR B // count down +// 0d04: f0 JR $0CF5 // loop back around for next byte +// 0d05: b8 RET + +// something to do with patches, possibly packing? // 0d06: 0b MOV A,C // 0d07: 63 b9 STAW $FFB9 -// 0d09: 7c a7 CALF $0CA7 +// 0d09: 7c a7 CALF $0CA7_calcPatchAddr // 0d0b: 24 90 ff LXI DE,$FF90_patchRam // 0d0e: 01 8e LDAW $FF8E_switches1 // 0d10: 1b MOV C,A @@ -1919,7 +2022,9 @@ // 0d1f: 1b MOV C,A // 0d20: 7c d0 CALF $0CD0 // 0d22: 7c 93 CALF $0C93 -// 0d24: b8 RET +// 0d24: b8 RET + +// encode switches byte into upper bits? // 0d25: 6a 07 MVI B,$07 // 0d27: 2c LDAX (DE+) // 0d28: 07 7f ANI A,$7F @@ -1929,48 +2034,59 @@ // 0d2f: 3d STAX (HL+) // 0d30: 52 DCR B // 0d31: f5 JR $0D27 -// 0d32: b8 RET -// 0d33: 01 c5 LDAW $FFC5 +// 0d32: b8 RET + +// save digit pattern +// 0d33: 01 c5 LDAW $FFC5_leftDigit // 0d35: 63 c9 STAW $FFC9 -// 0d37: 01 c6 LDAW $FFC6 +// 0d37: 01 c6 LDAW $FFC6_rightDigit // 0d39: 63 ca STAW $FFCA // 0d3b: b8 RET + +// restore digit pattern // 0d3c: 01 c9 LDAW $FFC9 -// 0d3e: 63 c5 STAW $FFC5 +// 0d3e: 63 c5 STAW $FFC5_leftDigit // 0d40: 01 ca LDAW $FFCA -// 0d42: 63 c6 STAW $FFC6 -// 0d44: b8 RET -// 0d45: 34 50 00 LXI HL,$0050 -// 0d48: 1b MOV C,A +// 0d42: 63 c6 STAW $FFC6_rightDigit +// 0d44: b8 RET + +// look up digit in table +// called with value in A to show on LED +// 0d45: 34 50 00 LXI HL,$0050 // bitmap +// 0d48: 1b MOV C,A // save // 0d49: 48 21 SLR A // 0d4b: 48 21 SLR A // 0d4d: 48 21 SLR A -// 0d4f: 48 21 SLR A -// 0d51: ac LDAX (HL+A) -// 0d52: 63 c5 STAW $FFC5 +// 0d4f: 48 21 SLR A // upper nybble +// 0d51: ac LDAX (HL+A) // fetch bit pattern from table +// 0d52: 63 c5 STAW $FFC5_leftDigit // store // 0d54: 0b MOV A,C -// 0d55: 07 0f ANI A,$0F -// 0d57: ac LDAX (HL+A) -// 0d58: 63 c6 STAW $FFC6 -// 0d5a: b8 RET -// 0d5b: 15 c5 10 ORIW $FFC5,$10 -// 0d5e: 15 c6 10 ORIW $FFC6,$10 -// 0d61: b8 RET -// 0d62: 07 38 ANI A,$38 +// 0d55: 07 0f ANI A,$0F // lower nybble +// 0d57: ac LDAX (HL+A) // fetch bit pattern from table +// 0d58: 63 c6 STAW $FFC6_rightDigit // store +// 0d5a: b8 RET + +// switch on decimal points +// 0d5b: 15 c5 10 ORIW $FFC5_leftDigit_leftDigit,$10 +// 0d5e: 15 c6 10 ORIW $FFC6_rightDigit,$10 +// 0d61: b8 RET + +// probably something to do with tape +// 0d62: 07 38 ANI A,$38 // mask off all but LOAD/SAVE/VERIFY // 0d64: 5f c8 BIT 7,$FFC8 -// 0d66: 17 04 ORI A,$04 -// 0d68: 63 d1 STAW $FFD1 -// 0d6a: 64 05 ff MVI PF,$FF -// 0d6d: 4d c1 MOV PB,A +// 0d66: 17 04 ORI A,$04 // poly 2 LED? +// 0d68: 63 d1 STAW $FFD1 // save somewhere +// 0d6a: 64 05 ff MVI PF,$FF // column 3 LEDs +// 0d6d: 4d c1 MOV PB,A // enable // 0d6f: 24 ff 1f LXI DE,$1FFF // 0d72: 4a df MVIX DE,$DF -// 0d74: 7b 70 CALF $0B70_stopAllNotes -// 0d76: 69 87 MVI A,$87 -// 0d78: 79 e8 CALF $09E8_sendToTx +// 0d74: 7b 70 CALF $0B70_stopAllNotes // +// 0d76: 69 87 MVI A,$87 // and also sustain off +// 0d78: 79 e8 CALF $09E8_sendToTx // // 0d7a: 6a ff MVI B,$FF // 0d7c: 48 2d MUL A // 0d7e: 52 DCR B -// 0d7f: fc JR $0D7C +// 0d7f: fc JR $0D7C // wait // 0d80: ba DI // 0d81: 64 01 00 MVI PB,$00 // 0d84: 64 05 c0 MVI PF,$C0 @@ -2113,13 +2229,15 @@ // 0e9c: 69 ce MVI A,$CE // 0e9e: 5f d1 BIT 7,$FFD1 // 0ea0: 69 de MVI A,$DE -// 0ea2: 7d 45 CALF $0D45 +// 0ea2: 7d 45 CALF $0D45_digitLookup // 0ea4: 04 ff ff LXI SP,$FFFF // 0ea7: 64 80 08 MVI ANM,$08 // 0eaa: 54 79 00 JMP $0079 -// 0ead: 71 c5 04 MVIW $FFC5,$04 -// 0eb0: 71 c6 04 MVIW $FFC6,$04 +// 0ead: 71 c5 04 MVIW $FFC5_leftDigit,$04 +// 0eb0: 71 c6 04 MVIW $FFC6_rightDigit,$04 // 0eb3: f0 JR $0EA4 + +// uknown2 // 0eb4: 6a 18 MVI B,$18 // 0eb6: 6b ff MVI C,$FF // 0eb8: 7e d5 CALF $0ED5 @@ -2129,7 +2247,9 @@ // 0ebe: 7f 01 CALF $0F01 // 0ec0: 52 DCR B // 0ec1: f4 JR $0EB6 -// 0ec2: b8 RET +// 0ec2: b8 RET + + // 0ec3: 0d MOV A,E // 0ec4: 58 d1 BIT 0,$FFD1 // 0ec6: c8 JR $0ECF @@ -2137,10 +2257,14 @@ // 0ec9: 1d MOV E,A // 0eca: 69 05 MVI A,$05 // 0ecc: 7e e7 CALF $0EE7 -// 0ece: b8 RET +// 0ece: b8 RET + + // 0ecf: 15 d1 01 ORIW $FFD1,$01 // 0ed2: 16 80 XRI A,$80 // 0ed4: f4 JR $0EC9 + +// unknown5, probably still tape // 0ed5: 0d MOV A,E // 0ed6: 58 d1 BIT 0,$FFD1 // 0ed8: cb JR $0EE4 @@ -2152,24 +2276,35 @@ // 0ee3: b8 RET // 0ee4: 16 c0 XRI A,$C0 // 0ee6: f7 JR $0EDE + +// unknown3 // 0ee7: 48 42 SKIT FT1 // 0ee9: fd JR $0EE7 // 0eea: 4d db MOV TM1,A // 0eec: 0d MOV A,E // 0eed: 4d c2 MOV PC,A -// 0eef: b8 RET -// 0ef0: 5a d1 BIT 2,$FFD1 +// 0eef: b8 RET + +// called from seven places +// possibly to do with tape +// 0ef0: 5a d1 BIT 2,$FFD1 // status bit? // 0ef2: c4 JR $0EF7 -// 0ef3: 64 11 40 XRI PB,$40 +// 0ef3: 64 11 40 XRI PB,$40 // toggle a scan line for LEDs? // 0ef6: b8 RET -// 0ef7: 64 11 80 XRI PB,$80 -// 0efa: b8 RET +// 0ef7: 64 11 80 XRI PB,$80 // toggle a scan line for LEDs? +// 0efa: b8 RET + +// memory protect switch // 0efb: 64 4a 10 ONI PC,$10 // 0efe: 4f 8c JRE $0E8C -// 0f00: b8 RET +// 0f00: b8 RET + +// two keys pressed together, maybe poly1+2? // 0f01: 64 48 06 ONI PA,$06 -// 0f04: b8 RET +// 0f04: b8 RET // 0f05: 4f 89 JRE $0E90 + +// possibly to do with tape // 0f07: 6b 07 MVI C,$07 // 0f09: 7e c3 CALF $0EC3 // 0f0b: 48 02 SLRC B @@ -2180,7 +2315,9 @@ // 0f13: 53 DCR C // 0f14: f6 JR $0F0B // 0f15: 7e d5 CALF $0ED5 -// 0f17: b8 RET +// 0f17: b8 RET + +// unknown6 // 0f18: 5a d1 BIT 2,$FFD1 // 0f1a: c4 JR $0F1F // 0f1b: 64 11 40 XRI PB,$40 @@ -2189,6 +2326,8 @@ // 0f22: 7f 38 CALF $0F38 // 0f24: 48 1a SKN CY // 0f26: ce JR $0F35 + +// // 0f27: 69 00 MVI A,$00 // 0f29: 6a 07 MVI B,$07 // 0f2b: 7f 38 CALF $0F38 @@ -2198,7 +2337,9 @@ // 0f31: 7f 38 CALF $0F38 // 0f33: 48 0a SK CY // 0f35: 4f 55 JRE $0E8C -// 0f37: b8 RET +// 0f37: b8 RET + +// unknown7 // 0f38: 7f 01 CALF $0F01 // 0f3a: 58 d1 BIT 0,$FFD1 // 0f3c: cc JR $0F49 @@ -2222,6 +2363,8 @@ // 0f60: b8 RET // 0f61: 48 2a CLC // 0f63: f6 JR $0F5A + +// unknown4 // 0f64: 55 d1 02 OFFIW $FFD1,$02 // 0f67: 4f 23 JRE $0E8C // 0f69: 64 95 90 XRI TMM,$90