msp430: add compressed register/flag wordset

optimize
Clyne 1 year ago
parent 789791692a
commit 7e10d0855c
Signed by: clyne
GPG Key ID: 3267C8EBF3F9AFC7

4
.gitignore vendored

@ -1,8 +1,12 @@
.* .*
*.o *.o
*.dat *.dat
*.bin
*.lzss
alee alee
alee-msp430 alee-msp430
alee-standalone alee-standalone
libalee.a libalee.a
core.fth.h core.fth.h
msp430/lzss
msp430/msp430fr2476_all.h

@ -16,864 +16,3 @@
: toggle ( b r reg/wreg -- ) : toggle ( b r reg/wreg -- )
>r over r> execute >r rot r> ^ -rot execute ; >r over r> execute >r rot r> ^ -rot execute ;
16 base !
: ADCCTL0 0700 ;
: ADCCTL0_L 0700 ;
: ADCCTL0_H 0701 ;
: ADCCTL1 0702 ;
: ADCCTL1_L 0702 ;
: ADCCTL1_H 0703 ;
: ADCCTL2 0704 ;
: ADCCTL2_L 0704 ;
: ADCCTL2_H 0705 ;
: ADCLO 0706 ;
: ADCLO_L 0706 ;
: ADCLO_H 0707 ;
: ADCHI 0708 ;
: ADCHI_L 0708 ;
: ADCHI_H 0709 ;
: ADCMCTL0 070A ;
: ADCMCTL0_L 070A ;
: ADCMCTL0_H 070B ;
: ADCMEM0 0712 ;
: ADCMEM0_L 0712 ;
: ADCMEM0_H 0713 ;
: ADCIE 071A ;
: ADCIE_L 071A ;
: ADCIE_H 071B ;
: ADCIFG 071C ;
: ADCIFG_L 071C ;
: ADCIFG_H 071D ;
: ADCIV 071E ;
: ADCIV_L 071E ;
: ADCIV_H 071F ;
: BAKMEM0 0660 ;
: BAKMEM0_L 0660 ;
: BAKMEM0_H 0661 ;
: BAKMEM1 0662 ;
: BAKMEM1_L 0662 ;
: BAKMEM1_H 0663 ;
: BAKMEM2 0664 ;
: BAKMEM2_L 0664 ;
: BAKMEM2_H 0665 ;
: BAKMEM3 0666 ;
: BAKMEM3_L 0666 ;
: BAKMEM3_H 0667 ;
: BAKMEM4 0668 ;
: BAKMEM4_L 0668 ;
: BAKMEM4_H 0669 ;
: BAKMEM5 066A ;
: BAKMEM5_L 066A ;
: BAKMEM5_H 066B ;
: BAKMEM6 066C ;
: BAKMEM6_L 066C ;
: BAKMEM6_H 066D ;
: BAKMEM7 066E ;
: BAKMEM7_L 066E ;
: BAKMEM7_H 066F ;
: BAKMEM8 0670 ;
: BAKMEM8_L 0670 ;
: BAKMEM8_H 0671 ;
: BAKMEM9 0672 ;
: BAKMEM9_L 0672 ;
: BAKMEM9_H 0673 ;
: BAKMEM10 0674 ;
: BAKMEM10_L 0674 ;
: BAKMEM10_H 0675 ;
: BAKMEM11 0676 ;
: BAKMEM11_L 0676 ;
: BAKMEM11_H 0677 ;
: BAKMEM12 0678 ;
: BAKMEM12_L 0678 ;
: BAKMEM12_H 0679 ;
: BAKMEM13 067A ;
: BAKMEM13_L 067A ;
: BAKMEM13_H 067B ;
: BAKMEM14 067C ;
: BAKMEM14_L 067C ;
: BAKMEM14_H 067D ;
: BAKMEM15 067E ;
: BAKMEM15_L 067E ;
: BAKMEM15_H 067F ;
: CRCDI 01C0 ;
: CRCDI_L 01C0 ;
: CRCDI_H 01C1 ;
: CRCDIRB 01C2 ;
: CRCDIRB_L 01C2 ;
: CRCDIRB_H 01C3 ;
: CRCINIRES 01C4 ;
: CRCINIRES_L 01C4 ;
: CRCINIRES_H 01C5 ;
: CRCRESR 01C6 ;
: CRCRESR_L 01C6 ;
: CRCRESR_H 01C7 ;
: CSCTL0 0180 ;
: CSCTL0_L 0180 ;
: CSCTL0_H 0181 ;
: CSCTL1 0182 ;
: CSCTL1_L 0182 ;
: CSCTL1_H 0183 ;
: CSCTL2 0184 ;
: CSCTL2_L 0184 ;
: CSCTL2_H 0185 ;
: CSCTL3 0186 ;
: CSCTL3_L 0186 ;
: CSCTL3_H 0187 ;
: CSCTL4 0188 ;
: CSCTL4_L 0188 ;
: CSCTL4_H 0189 ;
: CSCTL5 018A ;
: CSCTL5_L 018A ;
: CSCTL5_H 018B ;
: CSCTL6 018C ;
: CSCTL6_L 018C ;
: CSCTL6_H 018D ;
: CSCTL7 018E ;
: CSCTL7_L 018E ;
: CSCTL7_H 018F ;
: CSCTL8 0190 ;
: CSCTL8_L 0190 ;
: CSCTL8_H 0191 ;
: PAIN 0200 ;
: PAIN_L 0200 ;
: PAIN_H 0201 ;
: PAOUT 0202 ;
: PAOUT_L 0202 ;
: PAOUT_H 0203 ;
: PADIR 0204 ;
: PADIR_L 0204 ;
: PADIR_H 0205 ;
: PAREN 0206 ;
: PAREN_L 0206 ;
: PAREN_H 0207 ;
: PASEL0 020A ;
: PASEL0_L 020A ;
: PASEL0_H 020B ;
: PASEL1 020C ;
: PASEL1_L 020C ;
: PASEL1_H 020D ;
: P1IV 020E ;
: P1IV_L 020E ;
: P1IV_H 020F ;
: PASELC 0216 ;
: PASELC_L 0216 ;
: PASELC_H 0217 ;
: PAIES 0218 ;
: PAIES_L 0218 ;
: PAIES_H 0219 ;
: PAIE 021A ;
: PAIE_L 021A ;
: PAIE_H 021B ;
: PAIFG 021C ;
: PAIFG_L 021C ;
: PAIFG_H 021D ;
: P2IV 021E ;
: P2IV_L 021E ;
: P2IV_H 021F ;
: PBIN 0220 ;
: PBIN_L 0220 ;
: PBIN_H 0221 ;
: PBOUT 0222 ;
: PBOUT_L 0222 ;
: PBOUT_H 0223 ;
: PBDIR 0224 ;
: PBDIR_L 0224 ;
: PBDIR_H 0225 ;
: PBREN 0226 ;
: PBREN_L 0226 ;
: PBREN_H 0227 ;
: PBSEL0 022A ;
: PBSEL0_L 022A ;
: PBSEL0_H 022B ;
: PBSEL1 022C ;
: PBSEL1_L 022C ;
: PBSEL1_H 022D ;
: P3IV 022E ;
: P3IV_L 022E ;
: P3IV_H 022F ;
: PBSELC 0236 ;
: PBSELC_L 0236 ;
: PBSELC_H 0237 ;
: PBIES 0238 ;
: PBIES_L 0238 ;
: PBIES_H 0239 ;
: PBIE 023A ;
: PBIE_L 023A ;
: PBIE_H 023B ;
: PBIFG 023C ;
: PBIFG_L 023C ;
: PBIFG_H 023D ;
: P4IV 023E ;
: P4IV_L 023E ;
: P4IV_H 023F ;
: PCIN 0240 ;
: PCIN_L 0240 ;
: PCIN_H 0241 ;
: PCOUT 0242 ;
: PCOUT_L 0242 ;
: PCOUT_H 0243 ;
: PCDIR 0244 ;
: PCDIR_L 0244 ;
: PCDIR_H 0245 ;
: PCREN 0246 ;
: PCREN_L 0246 ;
: PCREN_H 0247 ;
: PCSEL0 024A ;
: PCSEL0_L 024A ;
: PCSEL0_H 024B ;
: PCSEL1 024C ;
: PCSEL1_L 024C ;
: PCSEL1_H 024D ;
: P5IV 024E ;
: P5IV_L 024E ;
: P5IV_H 024F ;
: PCSELC 0256 ;
: PCSELC_L 0256 ;
: PCSELC_H 0257 ;
: PCIES 0258 ;
: PCIES_L 0258 ;
: PCIES_H 0259 ;
: PCIE 025A ;
: PCIE_L 025A ;
: PCIE_H 025B ;
: PCIFG 025C ;
: PCIFG_L 025C ;
: PCIFG_H 025D ;
: P6IV 025E ;
: P6IV_L 025E ;
: P6IV_H 025F ;
: PJIN 0320 ;
: PJIN_L 0320 ;
: PJIN_H 0321 ;
: PJOUT 0322 ;
: PJOUT_L 0322 ;
: PJOUT_H 0323 ;
: PJDIR 0324 ;
: PJDIR_L 0324 ;
: PJDIR_H 0325 ;
: PJREN 0326 ;
: PJREN_L 0326 ;
: PJREN_H 0327 ;
: PJSEL0 032A ;
: PJSEL0_L 032A ;
: PJSEL0_H 032B ;
: PJSEL1 032C ;
: PJSEL1_L 032C ;
: PJSEL1_H 032D ;
: PJSELC 0336 ;
: PJSELC_L 0336 ;
: PJSELC_H 0337 ;
: P1IN 0200 ;
: P2IN 0201 ;
: P2OUT 0203 ;
: P1OUT 0202 ;
: P1DIR 0204 ;
: P2DIR 0205 ;
: P1REN 0206 ;
: P2REN 0207 ;
: P1SEL0 020A ;
: P2SEL0 020B ;
: P1SEL1 020C ;
: P2SEL1 020D ;
: P1SELC 0216 ;
: P2SELC 0217 ;
: P1IES 0218 ;
: P2IES 0219 ;
: P1IE 021A ;
: P2IE 021B ;
: P1IFG 021C ;
: P2IFG 021D ;
: P3IN 0220 ;
: P4IN 0221 ;
: P3OUT 0222 ;
: P4OUT 0223 ;
: P3DIR 0224 ;
: P4DIR 0225 ;
: P3REN 0226 ;
: P4REN 0227 ;
: P4SEL0 022B ;
: P3SEL0 022A ;
: P3SEL1 022C ;
: P4SEL1 022D ;
: P3SELC 0236 ;
: P4SELC 0237 ;
: P3IES 0238 ;
: P4IES 0239 ;
: P3IE 023A ;
: P4IE 023B ;
: P3IFG 023C ;
: P4IFG 023D ;
: P5IN 0240 ;
: P6IN 0241 ;
: P5OUT 0242 ;
: P6OUT 0243 ;
: P5DIR 0244 ;
: P6DIR 0245 ;
: P5REN 0246 ;
: P6REN 0247 ;
: P5SEL0 024A ;
: P6SEL0 024B ;
: P5SEL1 024C ;
: P6SEL1 024D ;
: P5SELC 0256 ;
: P6SELC 0257 ;
: P5IES 0258 ;
: P6IES 0259 ;
: P5IE 025A ;
: P6IE 025B ;
: P5IFG 025C ;
: P6IFG 025D ;
: FRCTL0 01A0 ;
: FRCTL0_L 01A0 ;
: FRCTL0_H 01A1 ;
: GCCTL0 01A4 ;
: GCCTL0_L 01A4 ;
: GCCTL0_H 01A5 ;
: GCCTL1 01A6 ;
: GCCTL1_L 01A6 ;
: GCCTL1_H 01A7 ;
: MPY 04C0 ;
: MPY_L 04C0 ;
: MPY_H 04C1 ;
: MPYS 04C2 ;
: MPYS_L 04C2 ;
: MPYS_H 04C3 ;
: MAC 04C4 ;
: MAC_L 04C4 ;
: MAC_H 04C5 ;
: MACS 04C6 ;
: MACS_L 04C6 ;
: MACS_H 04C7 ;
: OP2 04C8 ;
: OP2_L 04C8 ;
: OP2_H 04C9 ;
: RESLO 04CA ;
: RESLO_L 04CA ;
: RESLO_H 04CB ;
: RESHI 04CC ;
: RESHI_L 04CC ;
: RESHI_H 04CD ;
: SUMEXT 04CE ;
: SUMEXT_L 04CE ;
: SUMEXT_H 04CF ;
: MPY32L 04D0 ;
: MPY32L_L 04D0 ;
: MPY32L_H 04D1 ;
: MPY32H 04D2 ;
: MPY32H_L 04D2 ;
: MPY32H_H 04D3 ;
: MPYS32L 04D4 ;
: MPYS32L_L 04D4 ;
: MPYS32L_H 04D5 ;
: MPYS32H 04D6 ;
: MPYS32H_L 04D6 ;
: MPYS32H_H 04D7 ;
: MAC32L 04D8 ;
: MAC32L_L 04D8 ;
: MAC32L_H 04D9 ;
: MAC32H 04DA ;
: MAC32H_L 04DA ;
: MAC32H_H 04DB ;
: MACS32L 04DC ;
: MACS32L_L 04DC ;
: MACS32L_H 04DD ;
: MACS32H 04DE ;
: MACS32H_L 04DE ;
: MACS32H_H 04DF ;
: OP2L 04E0 ;
: OP2L_L 04E0 ;
: OP2L_H 04E1 ;
: OP2H 04E2 ;
: OP2H_L 04E2 ;
: OP2H_H 04E3 ;
: RES0 04E4 ;
: RES0_L 04E4 ;
: RES0_H 04E5 ;
: RES1 04E6 ;
: RES1_L 04E6 ;
: RES1_H 04E7 ;
: RES2 04E8 ;
: RES2_L 04E8 ;
: RES2_H 04E9 ;
: RES3 04EA ;
: RES3_L 04EA ;
: RES3_H 04EB ;
: MPY32CTL0 04EC ;
: MPY32CTL0_L 04EC ;
: MPY32CTL0_H 04ED ;
: PMMCTL0 0120 ;
: PMMCTL0_L 0120 ;
: PMMCTL0_H 0121 ;
: PMMCTL1 0122 ;
: PMMCTL1_L 0122 ;
: PMMCTL1_H 0123 ;
: PMMCTL2 0124 ;
: PMMCTL2_L 0124 ;
: PMMCTL2_H 0125 ;
: PMMIFG 012A ;
: PMMIFG_L 012A ;
: PMMIFG_H 012B ;
: PM5CTL0 0130 ;
: PM5CTL0_L 0130 ;
: PM5CTL0_H 0131 ;
: RTCCTL 0300 ;
: RTCCTL_L 0300 ;
: RTCCTL_H 0301 ;
: RTCIV 0304 ;
: RTCIV_L 0304 ;
: RTCIV_H 0305 ;
: RTCMOD 0308 ;
: RTCMOD_L 0308 ;
: RTCMOD_H 0309 ;
: RTCCNT 030C ;
: RTCCNT_L 030C ;
: RTCCNT_H 030D ;
: SFRIE1 0100 ;
: SFRIE1_L 0100 ;
: SFRIE1_H 0101 ;
: SFRIFG1 0102 ;
: SFRIFG1_L 0102 ;
: SFRIFG1_H 0103 ;
: SFRRPCR 0104 ;
: SFRRPCR_L 0104 ;
: SFRRPCR_H 0105 ;
: SYSCTL 0140 ;
: SYSCTL_L 0140 ;
: SYSCTL_H 0141 ;
: SYSBSLC 0142 ;
: SYSBSLC_L 0142 ;
: SYSBSLC_H 0143 ;
: SYSJMBC 0146 ;
: SYSJMBC_L 0146 ;
: SYSJMBC_H 0147 ;
: SYSJMBI0 0148 ;
: SYSJMBI0_L 0148 ;
: SYSJMBI0_H 0149 ;
: SYSJMBI1 014A ;
: SYSJMBI1_L 014A ;
: SYSJMBI1_H 014B ;
: SYSJMBO0 014C ;
: SYSJMBO0_L 014C ;
: SYSJMBO0_H 014D ;
: SYSJMBO1 014E ;
: SYSJMBO1_L 014E ;
: SYSJMBO1_H 014F ;
: SYSUNIV 015A ;
: SYSUNIV_L 015A ;
: SYSUNIV_H 015B ;
: SYSSNIV 015C ;
: SYSSNIV_L 015C ;
: SYSSNIV_H 015D ;
: SYSRSTIV 015E ;
: SYSRSTIV_L 015E ;
: SYSRSTIV_H 015F ;
: SYSCFG0 0160 ;
: SYSCFG0_L 0160 ;
: SYSCFG0_H 0161 ;
: SYSCFG1 0162 ;
: SYSCFG1_L 0162 ;
: SYSCFG1_H 0163 ;
: SYSCFG2 0164 ;
: SYSCFG2_L 0164 ;
: SYSCFG2_H 0165 ;
: SYSCFG3 0166 ;
: SYSCFG3_L 0166 ;
: SYSCFG3_H 0167 ;
: TA0CTL 0380 ;
: TA0CTL_L 0380 ;
: TA0CTL_H 0381 ;
: TA0CCTL0 0382 ;
: TA0CCTL0_L 0382 ;
: TA0CCTL0_H 0383 ;
: TA0CCTL1 0384 ;
: TA0CCTL1_L 0384 ;
: TA0CCTL1_H 0385 ;
: TA0CCTL2 0386 ;
: TA0CCTL2_L 0386 ;
: TA0CCTL2_H 0387 ;
: TA0R 0390 ;
: TA0R_L 0390 ;
: TA0R_H 0391 ;
: TA0CCR0 0392 ;
: TA0CCR0_L 0392 ;
: TA0CCR0_H 0393 ;
: TA0CCR1 0394 ;
: TA0CCR1_L 0394 ;
: TA0CCR1_H 0395 ;
: TA0CCR2 0396 ;
: TA0CCR2_L 0396 ;
: TA0CCR2_H 0397 ;
: TA0EX0 03A0 ;
: TA0EX0_L 03A0 ;
: TA0EX0_H 03A1 ;
: TA0IV 03AE ;
: TA0IV_L 03AE ;
: TA0IV_H 03AF ;
: TA1CTL 03C0 ;
: TA1CTL_L 03C0 ;
: TA1CTL_H 03C1 ;
: TA1CCTL0 03C2 ;
: TA1CCTL0_L 03C2 ;
: TA1CCTL0_H 03C3 ;
: TA1CCTL1 03C4 ;
: TA1CCTL1_L 03C4 ;
: TA1CCTL1_H 03C5 ;
: TA1CCTL2 03C6 ;
: TA1CCTL2_L 03C6 ;
: TA1CCTL2_H 03C7 ;
: TA1R 03D0 ;
: TA1R_L 03D0 ;
: TA1R_H 03D1 ;
: TA1CCR0 03D2 ;
: TA1CCR0_L 03D2 ;
: TA1CCR0_H 03D3 ;
: TA1CCR1 03D4 ;
: TA1CCR1_L 03D4 ;
: TA1CCR1_H 03D5 ;
: TA1CCR2 03D6 ;
: TA1CCR2_L 03D6 ;
: TA1CCR2_H 03D7 ;
: TA1EX0 03E0 ;
: TA1EX0_L 03E0 ;
: TA1EX0_H 03E1 ;
: TA1IV 03EE ;
: TA1IV_L 03EE ;
: TA1IV_H 03EF ;
: TA2CTL 0400 ;
: TA2CTL_L 0400 ;
: TA2CTL_H 0401 ;
: TA2CCTL0 0402 ;
: TA2CCTL0_L 0402 ;
: TA2CCTL0_H 0403 ;
: TA2CCTL1 0404 ;
: TA2CCTL1_L 0404 ;
: TA2CCTL1_H 0405 ;
: TA2CCTL2 0406 ;
: TA2CCTL2_L 0406 ;
: TA2CCTL2_H 0407 ;
: TA2R 0410 ;
: TA2R_L 0410 ;
: TA2R_H 0411 ;
: TA2CCR0 0412 ;
: TA2CCR0_L 0412 ;
: TA2CCR0_H 0413 ;
: TA2CCR1 0414 ;
: TA2CCR1_L 0414 ;
: TA2CCR1_H 0415 ;
: TA2CCR2 0416 ;
: TA2CCR2_L 0416 ;
: TA2CCR2_H 0417 ;
: TA2EX0 0420 ;
: TA2EX0_L 0420 ;
: TA2EX0_H 0421 ;
: TA2IV 042E ;
: TA2IV_L 042E ;
: TA2IV_H 042F ;
: TA3CTL 0440 ;
: TA3CTL_L 0440 ;
: TA3CTL_H 0441 ;
: TA3CCTL0 0442 ;
: TA3CCTL0_L 0442 ;
: TA3CCTL0_H 0443 ;
: TA3CCTL1 0444 ;
: TA3CCTL1_L 0444 ;
: TA3CCTL1_H 0445 ;
: TA3CCTL2 0446 ;
: TA3CCTL2_L 0446 ;
: TA3CCTL2_H 0447 ;
: TA3R 0450 ;
: TA3R_L 0450 ;
: TA3R_H 0451 ;
: TA3CCR0 0452 ;
: TA3CCR0_L 0452 ;
: TA3CCR0_H 0453 ;
: TA3CCR1 0454 ;
: TA3CCR1_L 0454 ;
: TA3CCR1_H 0455 ;
: TA3CCR2 0456 ;
: TA3CCR2_L 0456 ;
: TA3CCR2_H 0457 ;
: TA3EX0 0460 ;
: TA3EX0_L 0460 ;
: TA3EX0_H 0461 ;
: TA3IV 046E ;
: TA3IV_L 046E ;
: TA3IV_H 046F ;
: TB0CTL 0480 ;
: TB0CTL_L 0480 ;
: TB0CTL_H 0481 ;
: TB0CCTL0 0482 ;
: TB0CCTL0_L 0482 ;
: TB0CCTL0_H 0483 ;
: TB0CCTL1 0484 ;
: TB0CCTL1_L 0484 ;
: TB0CCTL1_H 0485 ;
: TB0CCTL2 0486 ;
: TB0CCTL2_L 0486 ;
: TB0CCTL2_H 0487 ;
: TB0CCTL3 0488 ;
: TB0CCTL3_L 0488 ;
: TB0CCTL3_H 0489 ;
: TB0CCTL4 048A ;
: TB0CCTL4_L 048A ;
: TB0CCTL4_H 048B ;
: TB0CCTL5 048C ;
: TB0CCTL5_L 048C ;
: TB0CCTL5_H 048D ;
: TB0CCTL6 048E ;
: TB0CCTL6_L 048E ;
: TB0CCTL6_H 048F ;
: TB0R 0490 ;
: TB0R_L 0490 ;
: TB0R_H 0491 ;
: TB0CCR0 0492 ;
: TB0CCR0_L 0492 ;
: TB0CCR0_H 0493 ;
: TB0CCR1 0494 ;
: TB0CCR1_L 0494 ;
: TB0CCR1_H 0495 ;
: TB0CCR2 0496 ;
: TB0CCR2_L 0496 ;
: TB0CCR2_H 0497 ;
: TB0CCR3 0498 ;
: TB0CCR3_L 0498 ;
: TB0CCR3_H 0499 ;
: TB0CCR4 049A ;
: TB0CCR4_L 049A ;
: TB0CCR4_H 049B ;
: TB0CCR5 049C ;
: TB0CCR5_L 049C ;
: TB0CCR5_H 049D ;
: TB0CCR6 049E ;
: TB0CCR6_L 049E ;
: TB0CCR6_H 049F ;
: TB0EX0 04A0 ;
: TB0EX0_L 04A0 ;
: TB0EX0_H 04A1 ;
: TB0IV 04AE ;
: TB0IV_L 04AE ;
: TB0IV_H 04AF ;
: WDTCTL 01CC ;
: WDTCTL_L 01CC ;
: WDTCTL_H 01CD ;
: CP0CTL0 08E0 ;
: CP0CTL0_L 08E0 ;
: CP0CTL0_H 08E1 ;
: CP0CTL1 08E2 ;
: CP0CTL1_L 08E2 ;
: CP0CTL1_H 08E3 ;
: CP0INT 08E6 ;
: CP0INT_L 08E6 ;
: CP0INT_H 08E7 ;
: CP0IV 08E8 ;
: CP0IV_L 08E8 ;
: CP0IV_H 08E9 ;
: CP0DACCTL 08F0 ;
: CP0DACCTL_L 08F0 ;
: CP0DACCTL_H 08F1 ;
: CP0DACDATA 08F2 ;
: CP0DACDATA_L 08F2 ;
: CP0DACDATA_H 08F3 ;
: UCA0CTLW0 0500 ;
: UCA0CTLW0_L 0500 ;
: UCA0CTLW0_H 0501 ;
: UCA0CTLW1 0502 ;
: UCA0CTLW1_L 0502 ;
: UCA0CTLW1_H 0503 ;
: UCA0BRW 0506 ;
: UCA0BRW_L 0506 ;
: UCA0BRW_H 0507 ;
: UCA0MCTLW 0508 ;
: UCA0MCTLW_L 0508 ;
: UCA0MCTLW_H 0509 ;
: UCA0STATW 050A ;
: UCA0STATW_L 050A ;
: UCA0STATW_H 050B ;
: UCA0RXBUF 050C ;
: UCA0RXBUF_L 050C ;
: UCA0RXBUF_H 050D ;
: UCA0TXBUF 050E ;
: UCA0TXBUF_L 050E ;
: UCA0TXBUF_H 050F ;
: UCA0ABCTL 0510 ;
: UCA0ABCTL_L 0510 ;
: UCA0ABCTL_H 0511 ;
: UCA0IRCTL 0512 ;
: UCA0IRCTL_L 0512 ;
: UCA0IRCTL_H 0513 ;
: UCA0IE 051A ;
: UCA0IE_L 051A ;
: UCA0IE_H 051B ;
: UCA0IFG 051C ;
: UCA0IFG_L 051C ;
: UCA0IFG_H 051D ;
: UCA0IV 051E ;
: UCA0IV_L 051E ;
: UCA0IV_H 051F ;
: UCA1CTLW0 0520 ;
: UCA1CTLW0_L 0520 ;
: UCA1CTLW0_H 0521 ;
: UCA1CTLW1 0522 ;
: UCA1CTLW1_L 0522 ;
: UCA1CTLW1_H 0523 ;
: UCA1BRW 0526 ;
: UCA1BRW_L 0526 ;
: UCA1BRW_H 0527 ;
: UCA1MCTLW 0528 ;
: UCA1MCTLW_L 0528 ;
: UCA1MCTLW_H 0529 ;
: UCA1STATW 052A ;
: UCA1STATW_L 052A ;
: UCA1STATW_H 052B ;
: UCA1RXBUF 052C ;
: UCA1RXBUF_L 052C ;
: UCA1RXBUF_H 052D ;
: UCA1TXBUF 052E ;
: UCA1TXBUF_L 052E ;
: UCA1TXBUF_H 052F ;
: UCA1ABCTL 0530 ;
: UCA1ABCTL_L 0530 ;
: UCA1ABCTL_H 0531 ;
: UCA1IRCTL 0532 ;
: UCA1IRCTL_L 0532 ;
: UCA1IRCTL_H 0533 ;
: UCA1IE 053A ;
: UCA1IE_L 053A ;
: UCA1IE_H 053B ;
: UCA1IFG 053C ;
: UCA1IFG_L 053C ;
: UCA1IFG_H 053D ;
: UCA1IV 053E ;
: UCA1IV_L 053E ;
: UCA1IV_H 053F ;
: UCB0CTLW0 0540 ;
: UCB0CTLW0_L 0540 ;
: UCB0CTLW0_H 0541 ;
: UCB0CTLW1 0542 ;
: UCB0CTLW1_L 0542 ;
: UCB0CTLW1_H 0543 ;
: UCB0BRW 0546 ;
: UCB0BRW_L 0546 ;
: UCB0BRW_H 0547 ;
: UCB0STATW 0548 ;
: UCB0STATW_L 0548 ;
: UCB0STATW_H 0549 ;
: UCB0TBCNT 054A ;
: UCB0TBCNT_L 054A ;
: UCB0TBCNT_H 054B ;
: UCB0RXBUF 054C ;
: UCB0RXBUF_L 054C ;
: UCB0RXBUF_H 054D ;
: UCB0TXBUF 054E ;
: UCB0TXBUF_L 054E ;
: UCB0TXBUF_H 054F ;
: UCB0I2COA0 0554 ;
: UCB0I2COA0_L 0554 ;
: UCB0I2COA0_H 0555 ;
: UCB0I2COA1 0556 ;
: UCB0I2COA1_L 0556 ;
: UCB0I2COA1_H 0557 ;
: UCB0I2COA2 0558 ;
: UCB0I2COA2_L 0558 ;
: UCB0I2COA2_H 0559 ;
: UCB0I2COA3 055A ;
: UCB0I2COA3_L 055A ;
: UCB0I2COA3_H 055B ;
: UCB0ADDRX 055C ;
: UCB0ADDRX_L 055C ;
: UCB0ADDRX_H 055D ;
: UCB0ADDMASK 055E ;
: UCB0ADDMASK_L 055E ;
: UCB0ADDMASK_H 055F ;
: UCB0I2CSA 0560 ;
: UCB0I2CSA_L 0560 ;
: UCB0I2CSA_H 0561 ;
: UCB0IE 056A ;
: UCB0IE_L 056A ;
: UCB0IE_H 056B ;
: UCB0IFG 056C ;
: UCB0IFG_L 056C ;
: UCB0IFG_H 056D ;
: UCB0IV 056E ;
: UCB0IV_L 056E ;
: UCB0IV_H 056F ;
: UCB1CTLW0 0580 ;
: UCB1CTLW0_L 0580 ;
: UCB1CTLW0_H 0581 ;
: UCB1CTLW1 0582 ;
: UCB1CTLW1_L 0582 ;
: UCB1CTLW1_H 0583 ;
: UCB1BRW 0586 ;
: UCB1BRW_L 0586 ;
: UCB1BRW_H 0587 ;
: UCB1STATW 0588 ;
: UCB1STATW_L 0588 ;
: UCB1STATW_H 0589 ;
: UCB1TBCNT 058A ;
: UCB1TBCNT_L 058A ;
: UCB1TBCNT_H 058B ;
: UCB1RXBUF 058C ;
: UCB1RXBUF_L 058C ;
: UCB1RXBUF_H 058D ;
: UCB1TXBUF 058E ;
: UCB1TXBUF_L 058E ;
: UCB1TXBUF_H 058F ;
: UCB1I2COA0 0594 ;
: UCB1I2COA0_L 0594 ;
: UCB1I2COA0_H 0595 ;
: UCB1I2COA1 0596 ;
: UCB1I2COA1_L 0596 ;
: UCB1I2COA1_H 0597 ;
: UCB1I2COA2 0598 ;
: UCB1I2COA2_L 0598 ;
: UCB1I2COA2_H 0599 ;
: UCB1I2COA3 059A ;
: UCB1I2COA3_L 059A ;
: UCB1I2COA3_H 059B ;
: UCB1ADDRX 059C ;
: UCB1ADDRX_L 059C ;
: UCB1ADDRX_H 059D ;
: UCB1ADDMASK 059E ;
: UCB1ADDMASK_L 059E ;
: UCB1ADDMASK_H 059F ;
: UCB1I2CSA 05A0 ;
: UCB1I2CSA_L 05A0 ;
: UCB1I2CSA_H 05A1 ;
: UCB1IE 05AA ;
: UCB1IE_L 05AA ;
: UCB1IE_H 05AB ;
: UCB1IFG 05AC ;
: UCB1IFG_L 05AC ;
: UCB1IFG_H 05AD ;
: UCB1IV 05AE ;
: UCB1IV_L 05AE ;
: UCB1IV_H 05AF ;
decimal
: ECOMP0_VECTOR 0 ;
: PORT6_VECTOR 1 ;
: PORT5_VECTOR 2 ;
: PORT4_VECTOR 3 ;
: PORT3_VECTOR 4 ;
: PORT2_VECTOR 5 ;
: PORT1_VECTOR 6 ;
: ADC_VECTOR 7 ;
: EUSCI_B1_VECTOR 8 ;
: EUSCI_B0_VECTOR 9 ;
: EUSCI_A1_VECTOR 10 ;
: EUSCI_A0_VECTOR 11 ;
: WDT_VECTOR 12 ;
: RTC_VECTOR 13 ;
: TIMER0_B1_VECTOR 14 ;
: TIMER0_B0_VECTOR 15 ;
: TIMER3_A1_VECTOR 16 ;
: TIMER3_A0_VECTOR 17 ;
: TIMER2_A1_VECTOR 18 ;
: TIMER2_A0_VECTOR 19 ;
: TIMER1_A1_VECTOR 20 ;
: TIMER1_A0_VECTOR 21 ;
: TIMER0_A1_VECTOR 22 ;
: TIMER0_A0_VECTOR 23 ;

@ -0,0 +1,12 @@
dict: lzss
cat msp430fr2476_symbols.ld | grep "^PROVIDE.*" | sed -e "s/^PROVIDE(//" -e "s/[ ][ ]*//" -e "s/=.0x/\\\\x/" -e "s/..);/\\\\x&/" -e "s/);//" > msp430fr2476_symbols.dat
grep -E "^#define \w+\s+\([0-9].*$$" msp430fr2476.h | sed -e "s/).*$$/)/" -e "s/^#define //" -e "s/[ ][ ]*//" -e "s/(0x/\\\\x/" -e "s/..)/\\\\x&/" -e "s/)//" -e "s/(/\\\\x/" -e "s/\\\\x\\\\/\\\\x00\\\\/" > msp430fr2476.dat
cat msp430fr2476_symbols.dat msp430fr2476.dat | tr '\n' '\373' | tr -d '\r' > msp430fr2476_all.dat
@echo "printf ... > msp430fr2476_all.bin"
@printf "$(shell cat msp430fr2476_all.dat)" > msp430fr2476_all.bin
./lzss e msp430fr2476_all.bin msp430fr2476_all.lzss
ls -l msp430fr2476_all.lzss
xxd -i msp430fr2476_all.lzss > msp430fr2476_all.h
lzss: lzss.c

@ -18,13 +18,17 @@
#include "alee.hpp" #include "alee.hpp"
#include "libalee/ctype.hpp" #include "libalee/ctype.hpp"
#include "lzss.h"
static const
#include "msp430fr2476_all.h"
#include <cstring>
#include <msp430.h> #include <msp430.h>
#include "splitmemdictrw.hpp" #include "splitmemdictrw.hpp"
alignas(sizeof(Cell)) alignas(sizeof(Cell))
__attribute__((section(".text"))) __attribute__((section(".lodict")))
#include "core.fth.h" #include "core.fth.h"
static char strbuf[80]; static char strbuf[80];
@ -33,6 +37,7 @@ static void readchar(State& state);
static void serput(int c); static void serput(int c);
static void serputs(const char *s); static void serputs(const char *s);
static void printint(DoubleCell n, char *buf); static void printint(DoubleCell n, char *buf);
static Error findword(State&, Word);
static void initGPIO(); static void initGPIO();
static void initClock(); static void initClock();
@ -40,7 +45,7 @@ static void initUART();
static void Software_Trim(); static void Software_Trim();
#define MCLK_FREQ_MHZ (8) // MCLK = 8MHz #define MCLK_FREQ_MHZ (8) // MCLK = 8MHz
//__attribute__((section(".upper.bss"))) //__attribute__((section(".hidict")))
//static uint8_t hidict[16384]; //static uint8_t hidict[16384];
static Addr isr_list[24] = {}; static Addr isr_list[24] = {};
@ -56,6 +61,7 @@ int main()
(void)alee_dat_len; (void)alee_dat_len;
State state (dict, readchar); State state (dict, readchar);
Parser::customParse = findword;
serputs("alee forth\n\r"); serputs("alee forth\n\r");
@ -156,7 +162,7 @@ void user_sys(State& state)
serput(state.pop()); serput(state.pop());
break; break;
case 10: case 10:
{ auto index = state.pop(); { auto index = state.pop() - 20;
isr_list[index] = state.pop(); } isr_list[index] = state.pop(); }
break; break;
case 11: case 11:
@ -184,6 +190,49 @@ void user_sys(State& state)
} }
} }
#define LZSS_MAGIC_SEPARATOR (0xFB)
static char lzword[32];
static int lzwlen;
static char lzbuf[32];
static char *lzptr;
Error findword(State& state, Word word)
{
char *ptr = lzword;
for (auto it = word.begin(&state.dict); it != word.end(&state.dict); ++it) {
*ptr = *it;
if (islower(*ptr))
*ptr -= 32;
++ptr;
}
lzwlen = (int)(ptr - lzword);
lzptr = lzbuf;
lzssinit(msp430fr2476_all_lzss, msp430fr2476_all_lzss_len);
auto ret = decode([](int c) {
if (c != LZSS_MAGIC_SEPARATOR) {
*lzptr++ = (char)c;
} else {
if (lzwlen == lzptr - lzbuf - 2 && strncmp(lzword, lzbuf, lzptr - lzbuf - 2) == 0) {
lzwlen = (*(lzptr - 2) << 8) | *(lzptr - 1);
return 1;
} else {
lzptr = lzbuf;
}
}
return 0;
});
if (ret == EOF) {
return Error::noword;
} else {
Parser::processLiteral(state, (Cell)lzwlen);
return Error::none;
}
}
void initGPIO() void initGPIO()
{ {
// Unnecessary, but done by TI example // Unnecessary, but done by TI example
@ -201,9 +250,6 @@ void initGPIO()
P3DIR &= ~BIT4; P3REN |= BIT4; P3OUT |= BIT4; P3DIR &= ~BIT4; P3REN |= BIT4; P3OUT |= BIT4;
P2DIR &= ~BIT3; P2REN |= BIT3; P2OUT |= BIT3; P2DIR &= ~BIT3; P2REN |= BIT3; P2OUT |= BIT3;
// XT1 pins (P2.0 and P2.1)
//P2SEL1 |= BIT0 | BIT1;
// Allow GPIO configurations to be applied // Allow GPIO configurations to be applied
PM5CTL0 &= ~LOCKLPM5; PM5CTL0 &= ~LOCKLPM5;
@ -224,19 +270,6 @@ void initClock()
CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz
// default DCODIV as MCLK and SMCLK source // default DCODIV as MCLK and SMCLK source
// // ACLK to XT1
// do
// {
// CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag
// SFRIFG1 &= ~OFIFG;
// }while (SFRIFG1 & OFIFG); // Test oscillator fault flag
//
// CSCTL4 = SELMS__DCOCLKDIV | SELA__XT1CLK; // set ACLK = XT1CLK = 32768Hz
// // DCOCLK = MCLK and SMCLK source
//
// // Now that osc is running enable fault interrupt
// SFRIE1 |= OFIE;
} }
void initUART() void initUART()

@ -0,0 +1,181 @@
/* LZSS encoder-decoder (Haruhiko Okumura; public domain) */
#include <stdio.h>
#include <stdlib.h>
#define EI 8 /* typically 10..13 */
#define EJ 3 /* typically 4..5 */
#define P 1 /* If match length <= P then output one character */
#define N (1 << EI) /* buffer size */
#define F ((1 << EJ) + 1) /* lookahead buffer size */
int bit_buffer = 0, bit_mask = 128;
unsigned long codecount = 0, textcount = 0;
unsigned char buffer[N * 2];
FILE *infile, *outfile;
void error(void)
{
printf("Output error\n"); exit(1);
}
void putbit1(void)
{
bit_buffer |= bit_mask;
if ((bit_mask >>= 1) == 0) {
if (fputc(bit_buffer, outfile) == EOF) error();
bit_buffer = 0; bit_mask = 128; codecount++;
}
}
void putbit0(void)
{
if ((bit_mask >>= 1) == 0) {
if (fputc(bit_buffer, outfile) == EOF) error();
bit_buffer = 0; bit_mask = 128; codecount++;
}
}
void flush_bit_buffer(void)
{
if (bit_mask != 128) {
if (fputc(bit_buffer, outfile) == EOF) error();
codecount++;
}
}
void output1(int c)
{
int mask;
putbit1();
mask = 256;
while (mask >>= 1) {
if (c & mask) putbit1();
else putbit0();
}
}
void output2(int x, int y)
{
int mask;
putbit0();
mask = N;
while (mask >>= 1) {
if (x & mask) putbit1();
else putbit0();
}
mask = (1 << EJ);
while (mask >>= 1) {
if (y & mask) putbit1();
else putbit0();
}
}
void encode(void)
{
int i, j, f1, x, y, r, s, bufferend, c;
for (i = 0; i < N - F; i++) buffer[i] = ' ';
for (i = N - F; i < N * 2; i++) {
if ((c = fgetc(infile)) == EOF) break;
buffer[i] = c; textcount++;
}
bufferend = i; r = N - F; s = 0;
while (r < bufferend) {
f1 = (F <= bufferend - r) ? F : bufferend - r;
x = 0; y = 1; c = buffer[r];
for (i = r - 1; i >= s; i--)
if (buffer[i] == c) {
for (j = 1; j < f1; j++)
if (buffer[i + j] != buffer[r + j]) break;
if (j > y) {
x = i; y = j;
}
}
if (y <= P) { y = 1; output1(c); }
else output2(x & (N - 1), y - 2);
r += y; s += y;
if (r >= N * 2 - F) {
for (i = 0; i < N; i++) buffer[i] = buffer[i + N];
bufferend -= N; r -= N; s -= N;
while (bufferend < N * 2) {
if ((c = fgetc(infile)) == EOF) break;
buffer[bufferend++] = c; textcount++;
}
}
}
flush_bit_buffer();
printf("text: %ld bytes\n", textcount);
printf("code: %ld bytes (%ld%%)\n",
codecount, (codecount * 100) / textcount);
}
int getbit(int n) /* get n bits */
{
int i, x;
static int buf, mask = 0;
x = 0;
for (i = 0; i < n; i++) {
if (mask == 0) {
if ((buf = fgetc(infile)) == EOF) return EOF;
mask = 128;
}
x <<= 1;
if (buf & mask) x++;
mask >>= 1;
}
return x;
}
void decode(void)
{
int i, j, k, r, c;
for (i = 0; i < N - F; i++) buffer[i] = ' ';
r = N - F;
while ((c = getbit(1)) != EOF) {
if (c) {
if ((c = getbit(8)) == EOF) break;
fputc(c, outfile);
buffer[r++] = c; r &= (N - 1);
} else {
if ((i = getbit(EI)) == EOF) break;
if ((j = getbit(EJ)) == EOF) break;
for (k = 0; k <= j + 1; k++) {
c = buffer[(i + k) & (N - 1)];
fputc(c, outfile);
buffer[r++] = c; r &= (N - 1);
}
}
}
}
int main(int argc, char *argv[])
{
int enc;
char *s;
if (argc != 4) {
printf("Usage: lzss e/d infile outfile\n\te = encode\td = decode\n");
return 1;
}
s = argv[1];
if (s[1] == 0 && (*s == 'd' || *s == 'D' || *s == 'e' || *s == 'E'))
enc = (*s == 'e' || *s == 'E');
else {
printf("? %s\n", s); return 1;
}
if ((infile = fopen(argv[2], "rb")) == NULL) {
printf("? %s\n", argv[2]); return 1;
}
if ((outfile = fopen(argv[3], "wb")) == NULL) {
printf("? %s\n", argv[3]); return 1;
}
if (enc) encode(); else decode();
fclose(infile); fclose(outfile);
return 0;
}

@ -0,0 +1,74 @@
/* LZSS encoder-decoder (Haruhiko Okumura; public domain) */
/* Modified by Clyne Sullivan to focus on streamed decompression. */
#ifndef EOF
#define EOF (-1)
#endif
#define EI 8 /* typically 10..13 */
#define EJ 3 /* typically 4..5 */
#define N (1 << EI) /* buffer size */
#define F ((1 << EJ) + 1) /* lookahead buffer size */
static unsigned char buffer[N * 2];
static const unsigned char *inbuffer;
static unsigned int insize, inidx;
static int buf, mask;
/* Prepares decode() to decompress the given data. */
void lzssinit(const unsigned char *inb, unsigned int ins)
{
inbuffer = inb;
insize = ins;
inidx = 0;
buf = 0;
mask = 0;
}
int getbit(int n) /* get n bits */
{
int i, x;
x = 0;
for (i = 0; i < n; i++) {
if (mask == 0) {
if (inidx >= insize)
return EOF;
buf = inbuffer[inidx++];
mask = 128;
}
x <<= 1;
if (buf & mask) x++;
mask >>= 1;
}
return x;
}
/* handleoutput() receives each decompressed byte, return zero if want more. */
int decode(int (*handleoutput)(int))
{
int i, j, k, r, c, ret;
for (i = 0; i < N - F; i++) buffer[i] = ' ';
r = N - F;
while ((c = getbit(1)) != EOF) {
if (c) {
if ((c = getbit(8)) == EOF) break;
if ((ret = handleoutput(c)))
return ret;
buffer[r++] =(unsigned char) c; r &= (N - 1);
} else {
if ((i = getbit(EI)) == EOF) break;
if ((j = getbit(EJ)) == EOF) break;
for (k = 0; k <= j + 1; k++) {
c = buffer[(i + k) & (N - 1)];
if ((ret = handleoutput(c)))
return ret;
buffer[r++] = (unsigned char)c; r &= (N - 1);
}
}
}
return EOF;
}

File diff suppressed because it is too large Load Diff

@ -46,7 +46,8 @@ MEMORY {
BSL1 : ORIGIN = 0xFFC00, LENGTH = 0x0400 /* END=0xFFFFF, size 1024 */ BSL1 : ORIGIN = 0xFFC00, LENGTH = 0x0400 /* END=0xFFFFF, size 1024 */
RAM : ORIGIN = 0x2000, LENGTH = 0x2000 /* END=0x3FFF, size 8192 */ RAM : ORIGIN = 0x2000, LENGTH = 0x2000 /* END=0x3FFF, size 8192 */
INFOMEM : ORIGIN = 0x1800, LENGTH = 0x0200 /* END=0x19FF, size 512 */ INFOMEM : ORIGIN = 0x1800, LENGTH = 0x0200 /* END=0x19FF, size 512 */
FRAM (rx) : ORIGIN = 0x8000, LENGTH = 0x7F80 /* END=0xFF7F, size 32640 */ FRAM (rx) : ORIGIN = 0x8000, LENGTH = 0x6600 /* END=0xAFFF, size 9216 */
LOFRAM (rxw) : ORIGIN = 0xE600, LENGTH = 0x1980 /* END=0xFF7F, size 23424 */
HIFRAM (rxw) : ORIGIN = 0x00010000, LENGTH = 0x00007FFF HIFRAM (rxw) : ORIGIN = 0x00010000, LENGTH = 0x00007FFF
JTAGSIGNATURE : ORIGIN = 0xFF80, LENGTH = 0x0004 JTAGSIGNATURE : ORIGIN = 0xFF80, LENGTH = 0x0004
BSLSIGNATURE : ORIGIN = 0xFF84, LENGTH = 0x0004 BSLSIGNATURE : ORIGIN = 0xFF84, LENGTH = 0x0004
@ -341,6 +342,18 @@ SECTIONS
*(.lower.text.* .lower.text) *(.lower.text.* .lower.text)
} > FRAM } > FRAM
.lodict :
{
. = ALIGN(2);
*(.lodict)
} > LOFRAM
.hidict :
{
. = ALIGN(2);
*(.hidict)
} > HIFRAM
.text : .text :
{ {
PROVIDE (_start = .); PROVIDE (_start = .);

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save