From 0a9c19f83f6a08f18871c9728c8cc474a615a3be Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 27 Feb 2018 10:38:17 +0100 Subject: MPLab X garbage --- src/disassembly/listing.disasm | 1598 +++++++++++++++++++++++----------------- 1 file changed, 913 insertions(+), 685 deletions(-) (limited to 'src/disassembly/listing.disasm') diff --git a/src/disassembly/listing.disasm b/src/disassembly/listing.disasm index e830f54..282aa13 100644 --- a/src/disassembly/listing.disasm +++ b/src/disassembly/listing.disasm @@ -1,7 +1,7 @@ Disassembly Listing for Xilofono Generated From: Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf -23-feb-2018 16:30:03 +27-feb-2018 09:19:21 --- Z:/SAMB_4/projects/xilofono/src/rs232.c ----------------------------------------------------------- 1: #include "rs232.h" @@ -11,35 +11,35 @@ Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf 5: { 6: // set Async and 8 bits frame 7: TXSTA1bits.SYNC = 0; -03FC 98AC BCF TXSTA1, 4, ACCESS +0598 98AC BCF TXSTA1, 4, ACCESS 8: TXSTA1bits.TX9 = 0; -03FE 9CAC BCF TXSTA1, 6, ACCESS +059A 9CAC BCF TXSTA1, 6, ACCESS 9: 10: // baud prescaler 11: RCSTA1bits.SPEN = 1; -0400 8EAB BSF RCSTA1, 7, ACCESS +059C 8EAB BSF RCSTA1, 7, ACCESS 12: SPBRG1 = 31; -0402 0E1F MOVLW 0x1F -0404 6EAF MOVWF SPBRG1, ACCESS +059E 0E1F MOVLW 0x1F +05A0 6EAF MOVWF SPBRG1, ACCESS 13: SPBRGH1 = 0; -0406 0E00 MOVLW 0x0 -0408 6EB0 MOVWF SPBRGH1, ACCESS +05A2 0E00 MOVLW 0x0 +05A4 6EB0 MOVWF SPBRGH1, ACCESS 14: TXSTA1bits.BRGH = 0; -040A 94AC BCF TXSTA1, 2, ACCESS +05A6 94AC BCF TXSTA1, 2, ACCESS 15: BAUDCON1bits.BRG16 = 0; -040C 96B8 BCF BAUDCON1, 3, ACCESS +05A8 96B8 BCF BAUDCON1, 3, ACCESS 16: 17: // set up TX / RX pins 18: TRISCbits.TRISC7 = 1; -040E 8E94 BSF TRISC, 7, ACCESS +05AA 8E94 BSF TRISC, 7, ACCESS 19: TRISCbits.TRISC6 = 1; -0410 8C94 BSF TRISC, 6, ACCESS +05AC 8C94 BSF TRISC, 6, ACCESS 20: RCSTA1bits.CREN = 1; // enable continuous reception -0412 88AB BSF RCSTA1, 4, ACCESS +05AE 88AB BSF RCSTA1, 4, ACCESS 21: TXSTA1bits.TXEN = 1; -0414 8AAC BSF TXSTA1, 5, ACCESS +05B0 8AAC BSF TXSTA1, 5, ACCESS 22: } -0416 0012 RETURN 0 +05B2 0012 RETURN 0 23: 24: void eusart2_init(void) 25: { @@ -47,53 +47,54 @@ Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf 27: } 28: 29: void putch(char c) -0418 6E1A MOVWF p1, ACCESS +05B4 0100 MOVLB 0x0 +05B6 6F60 MOVWF __pcstackBANK0, BANKED 30: { 31: while (!TX1IF); -041A A89E BTFSS PIR1, 4, ACCESS -041C D7FE BRA 0x41A +05B8 A89E BTFSS PIR1, 4, ACCESS +05BA D7FE BRA 0x5B8 32: TX1REG = c; -041E C01A MOVFF p1, TXREG1 -0420 FFAD NOP +05BC C060 MOVFF __pcstackBANK0, TXREG1 +05BE FFAD NOP 33: } 0008 8245 BSF btemp, 1, ACCESS -000A CFFA MOVFF PCLATH, 0x5 -000C F005 NOP -000E CFFB MOVFF PCLATU, 0x6 -0010 F006 NOP -0012 CFE9 MOVFF FSR0, 0x7 -0014 F007 NOP -0016 CFEA MOVFF FSR0H, 0x8 -0018 F008 NOP -001A CFE1 MOVFF FSR1, 0x9 -001C F009 NOP -001E CFE2 MOVFF FSR1H, 0xA -0020 F00A NOP -0022 CFD9 MOVFF FSR2, 0xB -0024 F00B NOP -0026 CFDA MOVFF FSR2H, 0xC -0028 F00C NOP -002A CFF3 MOVFF PROD, 0xD -002C F00D NOP -002E CFF4 MOVFF PRODH, 0xE -0030 F00E NOP -0032 CFF6 MOVFF TBLPTR, 0xF -0034 F00F NOP -0036 CFF7 MOVFF TBLPTRH, 0x10 -0038 F010 NOP -003A CFF8 MOVFF TBLPTRU, 0x11 -003C F011 NOP -003E CFF5 MOVFF TABLAT, 0x12 -0040 F012 NOP -0042 C045 MOVFF btemp, 0x13 -0044 F013 NOP -0046 C046 MOVFF 0x46, 0x14 -0048 F014 NOP -004A C047 MOVFF 0x47, 0x15 -004C F015 NOP -004E C048 MOVFF 0x48, 0x16 -0050 F016 NOP -0422 0012 RETURN 0 +000A CFFA MOVFF PCLATH, 0x2B +000C F02B NOP +000E CFFB MOVFF PCLATU, 0x2C +0010 F02C NOP +0012 CFE9 MOVFF FSR0, 0x2D +0014 F02D NOP +0016 CFEA MOVFF FSR0H, 0x2E +0018 F02E NOP +001A CFE1 MOVFF FSR1, 0x2F +001C F02F NOP +001E CFE2 MOVFF FSR1H, 0x30 +0020 F030 NOP +0022 CFD9 MOVFF FSR2, 0x31 +0024 F031 NOP +0026 CFDA MOVFF FSR2H, 0x32 +0028 F032 NOP +002A CFF3 MOVFF PROD, 0x33 +002C F033 NOP +002E CFF4 MOVFF PRODH, 0x34 +0030 F034 NOP +0032 CFF6 MOVFF TBLPTR, 0x35 +0034 F035 NOP +0036 CFF7 MOVFF TBLPTRH, 0x36 +0038 F036 NOP +003A CFF8 MOVFF TBLPTRU, 0x37 +003C F037 NOP +003E CFF5 MOVFF TABLAT, 0x38 +0040 F038 NOP +0042 C045 MOVFF btemp, 0x39 +0044 F039 NOP +0046 C046 MOVFF 0x46, 0x3A +0048 F03A NOP +004A C047 MOVFF 0x47, 0x3B +004C F03B NOP +004E C048 MOVFF 0x48, 0x3C +0050 F03C NOP +05C0 0012 RETURN 0 34: 35: char getch(void) 36: { @@ -151,28 +152,29 @@ Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf 40: int midi_set_status(midi_message_t *pkt, midi_status_t status) 41: { 42: if (pkt == NULL) { -03D8 501A MOVF p1, W, ACCESS -03DA 101B IORWF pkt, W, ACCESS -03DC B4D8 BTFSC STATUS, 2, ACCESS -03DE 0012 RETURN 0 +0572 0100 MOVLB 0x0 +0574 5160 MOVF __pcstackBANK0, W, BANKED +0576 1161 IORWF pkt, W, BANKED +0578 B4D8 BTFSC STATUS, 2, ACCESS +057A 0012 RETURN 0 43: return -1; 44: } 45: 46: pkt->status = status & 0x0F; -03E0 C01C MOVFF c, 0x1D -03E2 F01D NOP -03E4 0E0F MOVLW 0xF -03E6 161D ANDWF 0x1D, F, ACCESS -03E8 C01A MOVFF p1, FSR2 -03EA FFD9 NOP -03EC C01B MOVFF pkt, FSR2H -03EE FFDA NOP -03F0 50DF MOVF INDF2, W, ACCESS -03F2 181D XORWF 0x1D, W, ACCESS -03F4 0BF0 ANDLW 0xF0 -03F6 181D XORWF 0x1D, W, ACCESS -03F8 6EDF MOVWF INDF2, ACCESS -03FA 0012 RETURN 0 +057C C062 MOVFF c, 0x63 +057E F063 NOP +0580 0E0F MOVLW 0xF +0582 1763 ANDWF 0x63, F, BANKED +0584 C060 MOVFF __pcstackBANK0, FSR2 +0586 FFD9 NOP +0588 C061 MOVFF pkt, FSR2H +058A FFDA NOP +058C 50DF MOVF INDF2, W, ACCESS +058E 1963 XORWF 0x63, W, BANKED +0590 0BF0 ANDLW 0xF0 +0592 1963 XORWF 0x63, W, BANKED +0594 6EDF MOVWF INDF2, ACCESS +0596 0012 RETURN 0 47: 48: return 0; 49: } @@ -180,29 +182,30 @@ Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf 51: int midi_set_channel(midi_message_t *pkt, unsigned channel) 52: { 53: if (pkt == NULL) { -03B2 501A MOVF p1, W, ACCESS -03B4 101B IORWF pkt, W, ACCESS -03B6 B4D8 BTFSC STATUS, 2, ACCESS -03B8 0012 RETURN 0 +054A 0100 MOVLB 0x0 +054C 5160 MOVF __pcstackBANK0, W, BANKED +054E 1161 IORWF pkt, W, BANKED +0550 B4D8 BTFSC STATUS, 2, ACCESS +0552 0012 RETURN 0 54: return -1; 55: } 56: 57: pkt->channel = channel & 0x0F; -03BA C01C MOVFF c, n -03BC F01E NOP -03BE 0E0F MOVLW 0xF -03C0 161E ANDWF n, F, ACCESS -03C2 C01A MOVFF p1, FSR2 -03C4 FFD9 NOP -03C6 C01B MOVFF pkt, FSR2H -03C8 FFDA NOP -03CA 3A1E SWAPF n, F, ACCESS -03CC 50DF MOVF INDF2, W, ACCESS -03CE 181E XORWF n, W, ACCESS -03D0 0B0F ANDLW 0xF -03D2 181E XORWF n, W, ACCESS -03D4 6EDF MOVWF INDF2, ACCESS -03D6 0012 RETURN 0 +0554 C062 MOVFF c, n +0556 F064 NOP +0558 0E0F MOVLW 0xF +055A 1764 ANDWF n, F, BANKED +055C C060 MOVFF __pcstackBANK0, FSR2 +055E FFD9 NOP +0560 C061 MOVFF pkt, FSR2H +0562 FFDA NOP +0564 3B64 SWAPF n, F, BANKED +0566 50DF MOVF INDF2, W, ACCESS +0568 1964 XORWF n, W, BANKED +056A 0B0F ANDLW 0xF +056C 1964 XORWF n, W, BANKED +056E 6EDF MOVWF INDF2, ACCESS +0570 0012 RETURN 0 58: 59: return 0; 60: } @@ -210,108 +213,103 @@ Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf 62: int midi_note_on(midi_message_t *pkt, unsigned channel, midi_note_t note, uint8_t velocity) 63: { 64: if (pkt == NULL) { -01BC 501F MOVF pkt, W, ACCESS -01BE 1020 IORWF p, W, ACCESS -01C0 B4D8 BTFSC STATUS, 2, ACCESS -01C2 0012 RETURN 0 +0424 0100 MOVLB 0x0 +0426 5165 MOVF pkt, W, BANKED +0428 1166 IORWF p, W, BANKED +042A B4D8 BTFSC STATUS, 2, ACCESS +042C 0012 RETURN 0 65: return -1; 66: } -67: -68: if (pkt->data == NULL) { -01C4 0E03 MOVLW 0x3 -01C6 241F ADDWF pkt, W, ACCESS -01C8 0100 MOVLB 0x0 -01CA 6F60 MOVWF __pcstackBANK0, BANKED -01CC 0E00 MOVLW 0x0 -01CE 2020 ADDWFC p, W, ACCESS -01D0 6F61 MOVWF 0x61, BANKED -01D2 5160 MOVF __pcstackBANK0, W, BANKED -01D4 1161 IORWF 0x61, W, BANKED -01D6 B4D8 BTFSC STATUS, 2, ACCESS -01D8 0012 RETURN 0 -69: return -2; -70: } -71: -72: midi_set_status(pkt, NOTE_ON); -01DA C01F MOVFF pkt, p1 -01DC F01A NOP -01DE C020 MOVFF p, pkt -01E0 F01B NOP -01E2 0E08 MOVLW 0x8 -01E4 6E1C MOVWF c, ACCESS -01E6 ECEC CALL 0x3D8, 0 -01E8 F001 NOP -73: midi_set_channel(pkt, channel); -01EA C01F MOVFF pkt, p1 -01EC F01A NOP -01EE C020 MOVFF p, pkt -01F0 F01B NOP -01F2 C021 MOVFF channel, c -01F4 F01C NOP -01F6 C022 MOVFF 0x22, 0x1D -01F8 F01D NOP -01FA ECD9 CALL 0x3B2, 0 -01FC F001 NOP -74: -75: pkt->data[0] = note; -01FE EE20 LFSR 2, 0x3 -0200 F003 NOP -0202 501F MOVF pkt, W, ACCESS -0204 26D9 ADDWF FSR2, F, ACCESS -0206 5020 MOVF p, W, ACCESS -0208 22DA ADDWFC FSR2H, F, ACCESS -020A C023 MOVFF note, INDF2 -020C FFDF NOP -76: pkt->data[1] = velocity; -020E EE20 LFSR 2, 0x4 -0210 F004 NOP -0212 501F MOVF pkt, W, ACCESS -0214 26D9 ADDWF FSR2, F, ACCESS -0216 5020 MOVF p, W, ACCESS -0218 22DA ADDWFC FSR2H, F, ACCESS -021A C024 MOVFF velocity, INDF2 -021C FFDF NOP -77: -78: #ifndef MIDI_DYNAMIC_MEMORY_ALLOC -79: pkt->data_size = 2; -021E EE20 LFSR 2, 0x1 -0220 F001 NOP -0222 501F MOVF pkt, W, ACCESS -0224 26D9 ADDWF FSR2, F, ACCESS -0226 5020 MOVF p, W, ACCESS -0228 22DA ADDWFC FSR2H, F, ACCESS -022A 0E02 MOVLW 0x2 -022C 6EDE MOVWF POSTINC2, ACCESS -022E 0E00 MOVLW 0x0 -0230 6EDD MOVWF POSTDEC2, ACCESS -0232 0012 RETURN 0 -80: #endif -81: -82: return 0; -83: } -84: -85: int midi_note_off(midi_message_t *pkt, unsigned channel, midi_note_t note, uint8_t velocity) -86: { -87: if (pkt == NULL) { -88: return -1; -89: } -90: -91: if (pkt->data == NULL) { -92: return -2; -93: } -94: -95: midi_set_status(pkt, NOTE_OFF); -96: midi_set_channel(pkt, channel); -97: -98: pkt->data[0] = note; -99: pkt->data[1] = velocity; -100: -101: #ifndef MIDI_DYNAMIC_MEMORY_ALLOC -102: pkt->data_size = 2; -103: #endif +67: +68: #ifdef MIDI_DYNAMIC_MEMORY_ALLOC +69: if (pkt->data == NULL) { +70: return -2; +71: } +72: #endif +73: +74: midi_set_status(pkt, NOTE_ON); +042E C065 MOVFF pkt, __pcstackBANK0 +0430 F060 NOP +0432 C066 MOVFF p, pkt +0434 F061 NOP +0436 0E08 MOVLW 0x8 +0438 6F62 MOVWF c, BANKED +043A ECB9 CALL 0x572, 0 +043C F002 NOP +75: midi_set_channel(pkt, channel); +043E C065 MOVFF pkt, __pcstackBANK0 +0440 F060 NOP +0442 C066 MOVFF p, pkt +0444 F061 NOP +0446 C067 MOVFF channel, c +0448 F062 NOP +044A C068 MOVFF 0x68, 0x63 +044C F063 NOP +044E ECA5 CALL 0x54A, 0 +0450 F002 NOP +76: +77: pkt->data[0] = note; +0452 0100 MOVLB 0x0 +0454 EE20 LFSR 2, 0x3 +0456 F003 NOP +0458 5165 MOVF pkt, W, BANKED +045A 26D9 ADDWF FSR2, F, ACCESS +045C 5166 MOVF p, W, BANKED +045E 22DA ADDWFC FSR2H, F, ACCESS +0460 C069 MOVFF note, INDF2 +0462 FFDF NOP +78: pkt->data[1] = velocity; +0464 EE20 LFSR 2, 0x4 +0466 F004 NOP +0468 5165 MOVF pkt, W, BANKED +046A 26D9 ADDWF FSR2, F, ACCESS +046C 5166 MOVF p, W, BANKED +046E 22DA ADDWFC FSR2H, F, ACCESS +0470 C06A MOVFF velocity, INDF2 +0472 FFDF NOP +79: +80: #ifndef MIDI_DYNAMIC_MEMORY_ALLOC +81: pkt->data_size = 2; +0474 EE20 LFSR 2, 0x1 +0476 F001 NOP +0478 5165 MOVF pkt, W, BANKED +047A 26D9 ADDWF FSR2, F, ACCESS +047C 5166 MOVF p, W, BANKED +047E 22DA ADDWFC FSR2H, F, ACCESS +0480 0E02 MOVLW 0x2 +0482 6EDE MOVWF POSTINC2, ACCESS +0484 0E00 MOVLW 0x0 +0486 6EDD MOVWF POSTDEC2, ACCESS +0488 0012 RETURN 0 +82: #endif +83: +84: return 0; +85: } +86: +87: int midi_note_off(midi_message_t *pkt, unsigned channel, midi_note_t note, uint8_t velocity) +88: { +89: if (pkt == NULL) { +90: return -1; +91: } +92: +93: #ifdef MIDI_DYNAMIC_MEMORY_ALLOC +94: if (pkt->data == NULL) { +95: return -2; +96: } +97: #endif +98: +99: midi_set_status(pkt, NOTE_OFF); +100: midi_set_channel(pkt, channel); +101: +102: pkt->data[0] = note; +103: pkt->data[1] = velocity; 104: -105: return 0; -106: } +105: #ifndef MIDI_DYNAMIC_MEMORY_ALLOC +106: pkt->data_size = 2; +107: #endif +108: +109: return 0; +110: } --- Z:/SAMB_4/projects/xilofono/src/main.c ------------------------------------------------------------ 1: /* 2: * File: main.c @@ -402,487 +400,715 @@ Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf 87: #include 88: #include 89: -90: #define NOTES 15 +90: #define NOTES 16 91: #define NOTE_MASK 0xFF00 92: -93: -94: /* global variables */ -95: volatile uint16_t keypresses[NOTES]; -96: -97: /* function prototypes */ -98: int eusart_write_midi(const midi_message_t *pkt); +93: #define MIDI_CHANNEL 0x0 +94: #define MIDI_SCALE_START 0x3C +95: +96: /* global variables */ +97: volatile uint16_t keys_data[NOTES]; +98: volatile uint16_t keypresses = 0; // flags to notify the main program 99: -100: /* interrupt service routine */ -101: interrupt void isr(void) +100: /* function prototypes */ +101: int eusart_write_midi(const midi_message_t *pkt); +102: +103: /* interrupt service routine */ +104: interrupt void isr(void) 0008 8245 BSF btemp, 1, ACCESS -102: { -103: unsigned char i, data; -104: -105: PORTDbits.RD3 = 0; +105: { +106: unsigned char i, data_a, data_b; +107: +108: PORTDbits.RD3 = 0; 0052 9683 BCF PORTD, 3, ACCESS -106: -107: if (PIR1bits.TMR2IF) { +109: +110: if (PIR1bits.TMR2IF) { 0054 A29E BTFSS PIR1, 1, ACCESS -0056 D089 BRA 0x16A -108: // PORTA -109: data = PORTA; -0058 CF80 MOVFF PORTA, data -005A F018 NOP -110: i = 7; -005C 0E07 MOVLW 0x7 -005E 6E19 MOVWF i, ACCESS -111: do { -112: keypresses[i] = (keypresses[i] << 1) | ((data >> i) & 0x01); -0060 5019 MOVF i, W, ACCESS -0062 0D02 MULLW 0x2 -0064 0E25 MOVLW 0x25 -0066 24F3 ADDWF PROD, W, ACCESS -0068 6ED9 MOVWF FSR2, ACCESS -006A 0E00 MOVLW 0x0 -006C 20F4 ADDWFC PRODH, W, ACCESS -006E 6EDA MOVWF FSR2H, ACCESS -0070 CFDE MOVFF POSTINC2, __pcstackCOMRAM -0072 F001 NOP -0074 CFDD MOVFF POSTDEC2, 0x2 -0076 F002 NOP -0078 90D8 BCF STATUS, 0, ACCESS -007A 3601 RLCF __pcstackCOMRAM, F, ACCESS -007C 3602 RLCF 0x2, F, ACCESS -007E C019 MOVFF i, 0x3 -0080 F003 NOP -0082 C018 MOVFF data, 0x4 -0084 F004 NOP -0086 2A03 INCF 0x3, F, ACCESS -0088 D002 BRA 0x8E -008A 90D8 BCF STATUS, 0, ACCESS -008C 3204 RRCF 0x4, F, ACCESS -008E 2E03 DECFSZ 0x3, F, ACCESS -0090 D7FC BRA 0x8A -0092 0E01 MOVLW 0x1 -0094 1604 ANDWF 0x4, F, ACCESS -0096 5004 MOVF 0x4, W, ACCESS -0098 1201 IORWF __pcstackCOMRAM, F, ACCESS -009A 0E00 MOVLW 0x0 -009C 1202 IORWF 0x2, F, ACCESS -009E 5019 MOVF i, W, ACCESS -00A0 0D02 MULLW 0x2 -00A2 0E25 MOVLW 0x25 -00A4 24F3 ADDWF PROD, W, ACCESS -00A6 6ED9 MOVWF FSR2, ACCESS -00A8 0E00 MOVLW 0x0 -00AA 20F4 ADDWFC PRODH, W, ACCESS -00AC 6EDA MOVWF FSR2H, ACCESS -00AE C001 MOVFF __pcstackCOMRAM, POSTINC2 -00B0 FFDE NOP -00B2 C002 MOVFF 0x2, POSTDEC2 -00B4 FFDD NOP -113: } while (i--); -00B6 0619 DECF i, F, ACCESS -00B8 2819 INCF i, W, ACCESS -00BA A4D8 BTFSS STATUS, 2, ACCESS -00BC D7D1 BRA 0x60 -114: -115: data = PORTB; -00BE CF81 MOVFF PORTB, data -00C0 F018 NOP -116: i = 7; -00C2 0E07 MOVLW 0x7 -00C4 6E19 MOVWF i, ACCESS -117: do { -118: keypresses[i] = (keypresses[i] << 1) | ((data >> i) & 0x01); -00C6 5019 MOVF i, W, ACCESS -00C8 0D02 MULLW 0x2 -00CA 0E25 MOVLW 0x25 -00CC 24F3 ADDWF PROD, W, ACCESS -00CE 6ED9 MOVWF FSR2, ACCESS -00D0 0E00 MOVLW 0x0 -00D2 20F4 ADDWFC PRODH, W, ACCESS -00D4 6EDA MOVWF FSR2H, ACCESS -00D6 CFDE MOVFF POSTINC2, __pcstackCOMRAM -00D8 F001 NOP -00DA CFDD MOVFF POSTDEC2, 0x2 -00DC F002 NOP -00DE 90D8 BCF STATUS, 0, ACCESS -00E0 3601 RLCF __pcstackCOMRAM, F, ACCESS -00E2 3602 RLCF 0x2, F, ACCESS -00E4 C019 MOVFF i, 0x3 -00E6 F003 NOP -00E8 C018 MOVFF data, 0x4 -00EA F004 NOP -00EC 2A03 INCF 0x3, F, ACCESS -00EE D002 BRA 0xF4 -00F0 90D8 BCF STATUS, 0, ACCESS -00F2 3204 RRCF 0x4, F, ACCESS -00F4 2E03 DECFSZ 0x3, F, ACCESS -00F6 D7FC BRA 0xF0 -00F8 0E01 MOVLW 0x1 -00FA 1604 ANDWF 0x4, F, ACCESS -00FC 5004 MOVF 0x4, W, ACCESS -00FE 1201 IORWF __pcstackCOMRAM, F, ACCESS -0100 0E00 MOVLW 0x0 -0102 1202 IORWF 0x2, F, ACCESS -0104 5019 MOVF i, W, ACCESS -0106 0D02 MULLW 0x2 -0108 0E25 MOVLW 0x25 -010A 24F3 ADDWF PROD, W, ACCESS -010C 6ED9 MOVWF FSR2, ACCESS -010E 0E00 MOVLW 0x0 -0110 20F4 ADDWFC PRODH, W, ACCESS -0112 6EDA MOVWF FSR2H, ACCESS -0114 C001 MOVFF __pcstackCOMRAM, POSTINC2 -0116 FFDE NOP -0118 C002 MOVFF 0x2, POSTDEC2 -011A FFDD NOP -119: } while (i-- - 8); -011C 0EF8 MOVLW 0xF8 -011E 6E01 MOVWF __pcstackCOMRAM, ACCESS -0120 0EFF MOVLW 0xFF -0122 6E02 MOVWF 0x2, ACCESS -0124 0619 DECF i, F, ACCESS -0126 2819 INCF i, W, ACCESS -0128 6E03 MOVWF 0x3, ACCESS -012A 6A04 CLRF 0x4, ACCESS -012C 5001 MOVF __pcstackCOMRAM, W, ACCESS -012E 2603 ADDWF 0x3, F, ACCESS -0130 5002 MOVF 0x2, W, ACCESS -0132 2204 ADDWFC 0x4, F, ACCESS -0134 5003 MOVF 0x3, W, ACCESS -0136 1004 IORWF 0x4, W, ACCESS -0138 A4D8 BTFSS STATUS, 2, ACCESS -013A D7C5 BRA 0xC6 -120: -121: // PORTB -122: // for (i = 8; i < NOTES; i++) { -123: // keypresses[i] = (keypresses[i] << 1) | ((PORTB & (1 << i)) >> i); -124: // } -125: -126: // TODO same for PORTD when the steps board is printed -127: -128: // debug stuff -129: PORTDbits.RD4 = PORTAbits.RA0; -013C A080 BTFSS PORTA, 0, ACCESS -013E D002 BRA 0x144 -0140 8883 BSF PORTD, 4, ACCESS -0142 D001 BRA 0x146 -0144 9883 BCF PORTD, 4, ACCESS -130: PORTDbits.RD2 = (keypresses[0] && !(keypresses[0] & NOTE_MASK)); -0146 0E00 MOVLW 0x0 -0148 6E17 MOVWF 0x17, ACCESS -014A 5025 MOVF keypresses, W, ACCESS -014C 1026 IORWF 0x26, W, ACCESS -014E B4D8 BTFSC STATUS, 2, ACCESS -0150 D006 BRA 0x15E -0152 0EFF MOVLW 0xFF -0154 1426 ANDWF 0x26, W, ACCESS +0056 D11F BRA 0x296 +111: data_a = PORTA; +0058 CF80 MOVFF PORTA, data_a +005A F03D NOP +112: data_b = PORTB; +005C CF81 MOVFF PORTB, data_b +005E F03E NOP +113: i = 7; +0060 0E07 MOVLW 0x7 +0062 6E42 MOVWF i, ACCESS +114: do { +115: // read the data and append it at the end of keys_data[i] +116: keys_data[i] = (keys_data[i] << 1) | ((data_a >> i) & 0x01); +0064 5042 MOVF i, W, ACCESS +0066 0D02 MULLW 0x2 +0068 0E03 MOVLW 0x3 +006A 24F3 ADDWF PROD, W, ACCESS +006C 6ED9 MOVWF FSR2, ACCESS +006E 0E00 MOVLW 0x0 +0070 20F4 ADDWFC PRODH, W, ACCESS +0072 6EDA MOVWF FSR2H, ACCESS +0074 CFDE MOVFF POSTINC2, __pcstackCOMRAM +0076 F023 NOP +0078 CFDD MOVFF POSTDEC2, 0x24 +007A F024 NOP +007C 90D8 BCF STATUS, 0, ACCESS +007E 3623 RLCF __pcstackCOMRAM, F, ACCESS +0080 3624 RLCF 0x24, F, ACCESS +0082 C042 MOVFF i, 0x25 +0084 F025 NOP +0086 C03D MOVFF data_a, 0x26 +0088 F026 NOP +008A 2A25 INCF 0x25, F, ACCESS +008C D002 BRA 0x92 +008E 90D8 BCF STATUS, 0, ACCESS +0090 3226 RRCF 0x26, F, ACCESS +0092 2E25 DECFSZ 0x25, F, ACCESS +0094 D7FC BRA 0x8E +0096 0E01 MOVLW 0x1 +0098 1626 ANDWF 0x26, F, ACCESS +009A 5026 MOVF 0x26, W, ACCESS +009C 1223 IORWF __pcstackCOMRAM, F, ACCESS +009E 0E00 MOVLW 0x0 +00A0 1224 IORWF 0x24, F, ACCESS +00A2 5042 MOVF i, W, ACCESS +00A4 0D02 MULLW 0x2 +00A6 0E03 MOVLW 0x3 +00A8 24F3 ADDWF PROD, W, ACCESS +00AA 6ED9 MOVWF FSR2, ACCESS +00AC 0E00 MOVLW 0x0 +00AE 20F4 ADDWFC PRODH, W, ACCESS +00B0 6EDA MOVWF FSR2H, ACCESS +00B2 C023 MOVFF __pcstackCOMRAM, POSTINC2 +00B4 FFDE NOP +00B6 C024 MOVFF 0x24, POSTDEC2 +00B8 FFDD NOP +117: keys_data[i + 8] = (keys_data[i + 8] << 1) | ((data_b >> i) & 0x01); +00BA 5042 MOVF i, W, ACCESS +00BC 6E23 MOVWF __pcstackCOMRAM, ACCESS +00BE 6A24 CLRF 0x24, ACCESS +00C0 90D8 BCF STATUS, 0, ACCESS +00C2 3623 RLCF __pcstackCOMRAM, F, ACCESS +00C4 3624 RLCF 0x24, F, ACCESS +00C6 0E10 MOVLW 0x10 +00C8 2623 ADDWF __pcstackCOMRAM, F, ACCESS +00CA 0E00 MOVLW 0x0 +00CC 2224 ADDWFC 0x24, F, ACCESS +00CE 0E03 MOVLW 0x3 +00D0 2423 ADDWF __pcstackCOMRAM, W, ACCESS +00D2 6ED9 MOVWF FSR2, ACCESS +00D4 0E00 MOVLW 0x0 +00D6 2024 ADDWFC 0x24, W, ACCESS +00D8 6EDA MOVWF FSR2H, ACCESS +00DA CFDE MOVFF POSTINC2, 0x25 +00DC F025 NOP +00DE CFDD MOVFF POSTDEC2, 0x26 +00E0 F026 NOP +00E2 90D8 BCF STATUS, 0, ACCESS +00E4 3625 RLCF 0x25, F, ACCESS +00E6 3626 RLCF 0x26, F, ACCESS +00E8 C042 MOVFF i, 0x27 +00EA F027 NOP +00EC C03E MOVFF data_b, 0x28 +00EE F028 NOP +00F0 2A27 INCF 0x27, F, ACCESS +00F2 D002 BRA 0xF8 +00F4 90D8 BCF STATUS, 0, ACCESS +00F6 3228 RRCF 0x28, F, ACCESS +00F8 2E27 DECFSZ 0x27, F, ACCESS +00FA D7FC BRA 0xF4 +00FC 0E01 MOVLW 0x1 +00FE 1628 ANDWF 0x28, F, ACCESS +0100 5028 MOVF 0x28, W, ACCESS +0102 1225 IORWF 0x25, F, ACCESS +0104 0E00 MOVLW 0x0 +0106 1226 IORWF 0x26, F, ACCESS +0108 5042 MOVF i, W, ACCESS +010A 6E29 MOVWF 0x29, ACCESS +010C 6A2A CLRF 0x2A, ACCESS +010E 90D8 BCF STATUS, 0, ACCESS +0110 3629 RLCF 0x29, F, ACCESS +0112 362A RLCF 0x2A, F, ACCESS +0114 0E10 MOVLW 0x10 +0116 2629 ADDWF 0x29, F, ACCESS +0118 0E00 MOVLW 0x0 +011A 222A ADDWFC 0x2A, F, ACCESS +011C 0E03 MOVLW 0x3 +011E 2429 ADDWF 0x29, W, ACCESS +0120 6ED9 MOVWF FSR2, ACCESS +0122 0E00 MOVLW 0x0 +0124 202A ADDWFC 0x2A, W, ACCESS +0126 6EDA MOVWF FSR2H, ACCESS +0128 C025 MOVFF 0x25, POSTINC2 +012A FFDE NOP +012C C026 MOVFF 0x26, POSTDEC2 +012E FFDD NOP +118: +119: // TODO same for PORTD when the steps board is printed +120: +121: // if the keypress flag is set, the main hasn't sent the packet (yet) +122: if (!(keypresses & (1<data_size; -023C EE20 LFSR 2, 0x1 -023E F001 NOP -0240 501B MOVF pkt, W, ACCESS -0242 26D9 ADDWF FSR2, F, ACCESS -0244 501C MOVF c, W, ACCESS -0246 22DA ADDWFC FSR2H, F, ACCESS -0248 CFDE MOVFF POSTINC2, pkt -024A F01F NOP -024C CFDD MOVFF POSTDEC2, p -024E F020 NOP -236: data = (uint8_t *) pkt->data; -0250 0E03 MOVLW 0x3 -0252 241B ADDWF pkt, W, ACCESS -0254 6E21 MOVWF channel, ACCESS -0256 0E00 MOVLW 0x0 -0258 201C ADDWFC c, W, ACCESS -025A 6E22 MOVWF 0x22, ACCESS -237: -238: putch((char)((pkt->status << 4) | pkt->channel)); -025C C01B MOVFF pkt, FSR2 -025E FFD9 NOP -0260 C01C MOVFF c, FSR2H -0262 FFDA NOP -0264 38DF SWAPF INDF2, W, ACCESS -0266 0B0F ANDLW 0xF -0268 6E1D MOVWF 0x1D, ACCESS -026A C01B MOVFF pkt, FSR2 -026C FFD9 NOP -026E C01C MOVFF c, FSR2H -0270 FFDA NOP -0272 50DF MOVF INDF2, W, ACCESS -0274 0B0F ANDLW 0xF -0276 6E1E MOVWF n, ACCESS -0278 381E SWAPF n, W, ACCESS -027A 0BF0 ANDLW 0xF0 -027C 101D IORWF 0x1D, W, ACCESS -027E EC0C CALL 0x418, 0 -0280 F002 NOP -239: -240: while (length--) { -0282 D009 BRA 0x296 -241: putch((char) *(data++)); -0284 C021 MOVFF channel, FSR2 -0286 FFD9 NOP -0288 C022 MOVFF 0x22, FSR2H -028A FFDA NOP -028C 50DF MOVF INDF2, W, ACCESS -028E EC0C CALL 0x418, 0 -0290 F002 NOP -0292 4A21 INFSNZ channel, F, ACCESS -0294 2A22 INCF 0x22, F, ACCESS -242: } -0296 061F DECF pkt, F, ACCESS -0298 A0D8 BTFSS STATUS, 0, ACCESS -029A 0620 DECF p, F, ACCESS -029C 281F INCF pkt, W, ACCESS -029E E1F2 BNZ 0x284 -02A0 2820 INCF p, W, ACCESS -02A2 B4D8 BTFSC STATUS, 2, ACCESS -02A4 0012 RETURN 0 -02A6 D7EE BRA 0x284 -243: -244: return 0; -245: } +032E 0100 MOVLB 0x0 +0330 6F70 MOVWF i, BANKED +0332 0E0F MOVLW 0xF +0334 6570 CPFSGT i, BANKED +0336 D001 BRA 0x33A +0338 D7F9 BRA 0x32C +229: if (keypresses & (1<data_size; +03B4 EE20 LFSR 2, 0x1 +03B6 F001 NOP +03B8 5161 MOVF pkt, W, BANKED +03BA 26D9 ADDWF FSR2, F, ACCESS +03BC 5162 MOVF c, W, BANKED +03BE 22DA ADDWFC FSR2H, F, ACCESS +03C0 CFDE MOVFF POSTINC2, pkt +03C2 F065 NOP +03C4 CFDD MOVFF POSTDEC2, p +03C6 F066 NOP +254: data = (uint8_t *) pkt->data; +03C8 0E03 MOVLW 0x3 +03CA 2561 ADDWF pkt, W, BANKED +03CC 6F67 MOVWF channel, BANKED +03CE 0E00 MOVLW 0x0 +03D0 2162 ADDWFC c, W, BANKED +03D2 6F68 MOVWF 0x68, BANKED +255: +256: putch((char)((pkt->status << 4) | pkt->channel)); +03D4 C061 MOVFF pkt, FSR2 +03D6 FFD9 NOP +03D8 C062 MOVFF c, FSR2H +03DA FFDA NOP +03DC 38DF SWAPF INDF2, W, ACCESS +03DE 0B0F ANDLW 0xF +03E0 6F63 MOVWF 0x63, BANKED +03E2 C061 MOVFF pkt, FSR2 +03E4 FFD9 NOP +03E6 C062 MOVFF c, FSR2H +03E8 FFDA NOP +03EA 50DF MOVF INDF2, W, ACCESS +03EC 0B0F ANDLW 0xF +03EE 6F64 MOVWF n, BANKED +03F0 3964 SWAPF n, W, BANKED +03F2 0BF0 ANDLW 0xF0 +03F4 1163 IORWF 0x63, W, BANKED +03F6 ECDA CALL 0x5B4, 0 +03F8 F002 NOP +257: +258: while (length--) { +03FA D00A BRA 0x410 +259: putch((char) *(data++)); +03FC C067 MOVFF channel, FSR2 +03FE FFD9 NOP +0400 C068 MOVFF 0x68, FSR2H +0402 FFDA NOP +0404 50DF MOVF INDF2, W, ACCESS +0406 ECDA CALL 0x5B4, 0 +0408 F002 NOP +040A 0100 MOVLB 0x0 +040C 4B67 INFSNZ channel, F, BANKED +040E 2B68 INCF 0x68, F, BANKED +260: } +0410 0100 MOVLB 0x0 +0412 0765 DECF pkt, F, BANKED +0414 A0D8 BTFSS STATUS, 0, ACCESS +0416 0766 DECF p, F, BANKED +0418 2965 INCF pkt, W, BANKED +041A E1F0 BNZ 0x3FC +041C 2966 INCF p, W, BANKED +041E B4D8 BTFSC STATUS, 2, ACCESS +0420 0012 RETURN 0 +0422 D7EC BRA 0x3FC +261: +262: return 0; +263: } --- C:/Program Files/Microchip/xc8/v1.44/sources/common/memset.c -------------------------------------- 1: #include 2: @@ -902,30 +1128,32 @@ Z:/SAMB_4/projects/xilofono/src/dist/default/production/src.production.elf 16: #endif /* _PIC16 */ 17: 18: p = p1; -0386 C01A MOVFF p1, p -0388 F020 NOP -038A C01B MOVFF pkt, channel -038C F021 NOP +051A C060 MOVFF __pcstackBANK0, p +051C F066 NOP +051E C061 MOVFF pkt, channel +0520 F067 NOP 19: while(n--) -038E D008 BRA 0x3A0 -03A0 061E DECF n, F, ACCESS +0522 D009 BRA 0x536 +0536 0100 MOVLB 0x0 20: *p++ = c; -0390 C020 MOVFF p, FSR2 -0392 FFD9 NOP -0394 C021 MOVFF channel, FSR2H -0396 FFDA NOP -0398 C01C MOVFF c, INDF2 -039A FFDF NOP -039C 4A20 INFSNZ p, F, ACCESS -039E 2A21 INCF channel, F, ACCESS -03A0 061E DECF n, F, ACCESS -03A2 A0D8 BTFSS STATUS, 0, ACCESS -03A4 061F DECF pkt, F, ACCESS -03A6 281E INCF n, W, ACCESS -03A8 E1F3 BNZ 0x390 -03AA 281F INCF pkt, W, ACCESS -03AC B4D8 BTFSC STATUS, 2, ACCESS -03AE 0012 RETURN 0 -03B0 D7EF BRA 0x390 +0524 C066 MOVFF p, FSR2 +0526 FFD9 NOP +0528 C067 MOVFF channel, FSR2H +052A FFDA NOP +052C C062 MOVFF c, INDF2 +052E FFDF NOP +0530 0100 MOVLB 0x0 +0532 4B66 INFSNZ p, F, BANKED +0534 2B67 INCF channel, F, BANKED +0536 0100 MOVLB 0x0 +0538 0764 DECF n, F, BANKED +053A A0D8 BTFSS STATUS, 0, ACCESS +053C 0765 DECF pkt, F, BANKED +053E 2964 INCF n, W, BANKED +0540 E1F1 BNZ 0x524 +0542 2965 INCF pkt, W, BANKED +0544 B4D8 BTFSC STATUS, 2, ACCESS +0546 0012 RETURN 0 +0548 D7ED BRA 0x524 21: return p1; 22: } -- cgit v1.2.1