-
Notifications
You must be signed in to change notification settings - Fork 0
/
veeprom-pic8.LST
2208 lines (2192 loc) · 129 KB
/
veeprom-pic8.LST
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
MPASM 5.87 /HOME/DJ/MPLABXPROJECTS/VEEPROM- 3-27-2022 20:59:37 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 title "VEEPROM-PIC8 - serial EEPROM emulator for 8-pin/8-bit Microchip PIC"
00002 ;================================================================================
00003 ; File: veeprom-pic8.asm
00004 ; Date: 2/19/2022
00005 ; Version: 0.22.02
00006 ; Author: djulien@thejuliens.net, (c)2022 djulien@thejuliens.net
00007 ; Device: PIC16F15313 (midrange Microchip 8-pin PIC) or equivalent running @8 MIPS
00008 ;
00009 ; Peripherals used: Timer0, Timer2, MSSP, NVM
00010 ; Compiler: mpasmx(v5.35), NOT pic-as; NOTE: custom build line is used for source code fixups
00011 ; IDE: MPLABX v5.35 (last one to include mpasm)
00012 ; Description:
00013 ; VEEPROM-PIC8 is a 24C256-style EEPROM emulator for 8-pin/8-bit Microchip PIC processors.
00014 ; It uses LVP and flash storage to emulate EEPROM storage, but with lower capacity and endurance.
00015 ; Capacity depends on the device used. For example, a 16F15313 would give about 3KB storage.
00016 ; Flash tolerates fewer write cycles than EEPROM, but software mods could compensate in future.
00017 ; Build instructions:
00018 ; 1. Open project in MPLABX
00019 ; 2. Edit as needed to support other devices (@line ~4200) or additional features. In general,
00020 ; adding new devices just involves renaming symbols for consistency or changing memory size.
00021 ; 3. Clean + build.
00022 ; Use mpasmx, not pic-as. Builds .hex file in Absolute mode.
00023 ; Custom pre- and post- build steps are used to help preprocessing or declutter .LST file
00024 ; 4. Flash .hex to PIC. Use PICKit2 or 3 or equivalent; PICKit2 requires PICKitPlus for newer PICs.
00025 ; After initial programming, PIC can be reflashed using I2C in-circuit.
00026 ; Wiring (PIC @3.3V): NOTE: set RPi to use 100 KHz
00027 ; RA0 = I2C data (open drain); use 470 series resistor for safety?
00028 ; RA1 = I2C clock (open drain); use 470 series resistor for safety?
00029 ; RA3 = MCLR/VPP (LVP); 470 series resistor for safety, pushbutton N/O to ground for reset
00030 ; RA2/4/5 = available for custom usage; use one for debug output (1 or more WS281X pixels), comment out
#define to disable
00031 ; Wiring (PIC @5V): RPi okay at 400 KHz
00032 ; RA0 = I2C data (open drain); use voltage shifter if VDD != 3.3V
00033 ; RA1 = I2C clock (open drain); use voltage shifter if VDD != 3.3V
00034 ; RA2 = debug output (1 or more WS281X pixels), comment out #define to disable
00035 ; RA3 = MCLR/VPP (LVP)
00036 ; RA4 - RA5 = available for custom usage
00037 ; Testing:
00038 ; i2cdetect -l
00039 ; [sudo] i2cdetect -y 1
00040 ; i2cdump -y 1 0x50 #only shows first 256 bytes
00041 ; sudo sh eepflash.sh -y -r -f=dj.eep -t=24c256 -d=1 -a=50
00042 ; hexdump -C dj.eep |more
00043 ; Useful info:
00044 ; https://www.pedalpc.com/blog/program-pic-raspberry-pi/
00045 ; https://projects-raspberry.com/rpp-raspberry-pi-pic-programmer-using-gpio/
00046 ; https://www.teachmemicro.com/raspberry-pi-i2c/
00047 ;================================================================================
Message[301]: MESSAGE: (TODO: fix this ^^^ vvv @4912)
00063 ; EXPAND_PUSH FALSE, @__LINE__
00064 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00065
00066 ;//pin assignments:
MPASM 5.87 /HOME/DJ/MPLABXPROJECTS/VEEPROM- 3-27-2022 20:59:37 PAGE 2
VEEPROM-PIC8 - serial EEPROM emulator for 8-pin/8-bit Microchip PIC
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00067 #define SDA1_PIN RA0; //make I2C consistent with ICSP (defaults to RA2)
00068 #define SCL1_PIN RA1; //make I2C consistent with ICSP
00069 #define FP_LED RA4; //use bare LED for debug/front panel; comment out if not needed
00070 ;//#define FP_WS281X RA5; //use WS281X pixels for debug/front panel; comment out if not needed
00071 #define A2PACK; //saves space but only allows text
00072
00073 ;//compile-time options:
00074 #define FOSC_FREQ (32 MHz); //max speed; WS281X assumes 8 MIPs
00075 ;//#define WANT_ISR 10; //ISR not used; uncomment to reserve space for ISR (or jump to)
00076 ;//#define WANT_DEBUG; //DEV/TEST: timer calibration, threading, front panel test, extra messages
00077
00078 ;//other config:
00079 #define I2C_ADDR 0x50; //24C256 supports 0x50-0x53 via 2 addr pins; FPP looks for capes/hats @0x50
00080 ;//#define ROWSIZE 32; //programming erase row size (words); comment out for write protect
00081 ;#define FP_WS281X; //use WS281X pixels for debug/front panel; comment out for bare LED
00082 #define RGB_ORDER 0x213; //WS281X color order: R = byte[1-1], G = byte[2-1], B = byte[3-1]; default = 0
x123 = RGB
00083 ; EXPAND_POP @__LINE__
00084 ; LIST_DEBUG @63
80000000 M ASM_MSB EQU -2147483648
Message[301]: MESSAGE: ([TODO]: need to UNLIT WREG_TRACKER when used in arith (else upper bits might be affected) @3366)
0000 M init_0:
0000 M ORG RESET_VECTOR_
0000 0000 M nop
0001 M _47jump_placeholder:
0001 M init_1:
02311 ; EXPAND_DEBUG @2311
02312 ; iopin_init;
02313 ; EXPAND_DEBUG @2313
02314 fosc_init;
0001 0151 M banksel OSCCON3
M withbit_7 bcf OSCCON3
0002 138F M bcf OSCCON3, 7
0003 3060 M movlw (((ASM_MSB | (b'110' << NOSC0 | 0 << NDIV0))) & ~ASM_MSB)
0004 008D M movwf OSCCON1
0005 3006 M movlw (((ASM_MSB | (HFFRQ_32000000))) & ~ASM_MSB)
0006 0093 M movwf OSCFRQ
02315 ; EXPAND_DEBUG @2315
02316 pmd_init; turn off unused peripherals
M ; exitm; @2147
0007 307F M movlw (((ASM_MSB | ((~((1 << (SYSCMD))) & 0xFF)))) & ~ASM_MSB)
0008 014F M banksel PMD0
0009 0096 M movwf PMD0
Message[301]: MESSAGE: (^^ disable until needed? @2169)
000A 30FF M movlw (((ASM_MSB | ((~(0) & 0xFF)))) & ~ASM_MSB)
000B 0097 M movwf PMD1
000C 0098 M movwf PMD2
000D 0099 M movwf PMD3
000E 009A M movwf PMD4
000F 009B M movwf PMD5
0010 M _303jump_placeholder:
Message[301]: MESSAGE: ([TODO] use RSTOSC HFINT 1MHz? @2363)
Message[301]: MESSAGE: ([TODO] boot loader? @2382)
8007 178C 02394 __config _CONFIG1, 6028; @2394
8008 2FFE 02395 __config _CONFIG2, 12286; @2395
8009 3F9F 02396 __config _CONFIG3, 16287; @2396
800A 3FFF 02397 __config _CONFIG4, 16383; @2397
800B 3FFF 02398 __config _CONFIG5, 16383; @2398
Message[301]: MESSAGE: ([TODO] change this to use postscaler 1..16 instead of just powers of 2 (for more accuracy) @1523)
M CBLOCK NEXT_RAM9999; BOOL2INT(banked)) ;continue where we left off last time @2792
00000070 M pxbits8 ; @2793
M ENDC ;can't span macros
0001 M CONSTANT pxbits80size = LATEST_RAM1 - pxbits8
Message[301]: MESSAGE: ([INFO] custom rgb order 0x213: R [1], G [0], B [2] @1212)
00093 ; EXPAND_PUSH FALSE, @93
00094 ;; custom main ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00095
00096 #define WANT_FRPANEL
00097 #ifndef FP_LED
00098 #ifndef FP_WS281X
00099 #undefine WANT_FRPANEL
00100 #endif
00101 #endif
00102
00103
00104 ;#ifdef WANT_FRPANEL
00105 #if 0
00106 BITDCL fpdirty;
00107 nbDCL24 fpcolor;
00108
00109 FrontPanel macro color
00110 mov24 fpcolor, color;
00111 setbit BITPARENT(fpdirty), TRUE;
00112 endm
00113
00114 THREAD_DEF front_panel, 4;
00115 at_init TRUE
00116 #ifdef FP_LED
00117 messg [INFO] Using bare LED on RA4 for debug/front panel @117
00118 PinMode FP_LED, OutLow; //for WS281X set asap to prevent junk on line; for regular LED !important
00119 #endif
00120 #ifdef FP_WS281X
00121 messg [INFO] Using WS281X pixel on RA0 for debug/front panel @121
00122 PinMode FP_WS281X, OutLow; //for WS281X set asap to prevent junk on line; for regular LED !important
00123 #endif
00124 at_init FALSE
00125
00126 #if 0; dev test/debug
00127 fptest macro
00128 ; setbit LATA, RA0, TRUE;
00129 ; mov24 fpcolor, LITERAL(0x020000);
00130 ws1_sendpx BITWRAP(LATA, FRPANEL), LITERAL(0x020000), FIRSTPX, RESERVE(0), RESERVE(0); ; NOP 2, NOP 4; //ORG$, ORG$;
00131 WAIT 1 sec, YIELD, YIELD_AGAIN
00132 ; setbit LATA, RA0, FALSE;
00133 ; mov24 fpcolor, LITERAL(0x000200);
00134 ws1_sendpx BITWRAP(LATA, FRPANEL), LITERAL(0x000200), FIRSTPX, RESERVE(0), RESERVE(0); ; NOP 2, NOP 4; //ORG$, ORG$;
00135 WAIT 1 sec, YIELD, YIELD_AGAIN
00136 ; mov24 fpcolor, LITERAL(0x000002);
00137 ws1_sendpx BITWRAP(LATA, FRPANEL), LITERAL(0x000002), FIRSTPX, RESERVE(0), RESERVE(0); ; NOP 2, NOP 4; //ORG$, ORG$;
00138 WAIT 1 sec, YIELD, YIELD_AGAIN
00139 ws1_sendpx BITWRAP(LATA, FRPANEL), LITERAL(0), FIRSTPX, RESERVE(0), RESERVE(0); ; NOP 2, NOP 4; //ORG$, ORG$;
00140 WAIT 1 sec, YIELD, YIELD_AGAIN
00141 endm; @141
00142 #endif; @142
00143
00144 ;//show for 1/2 sec then turn off:
00145 front_panel: DROP_CONTEXT;
00146 ; fptest
00147 whilebit BITPARENT(fpdirty), FALSE, YIELD; //wait for new data
00148 setbit BITPARENT(fpdirty), FALSE;
00149 cmp24 fpcolor, LITERAL(0);;
00150 ifbit EQUALS0 TRUE, GOTO front_panel; //nothing to show
00151 ; setbit BITPARENT(fpdirty), FALSE;
00152 #ifdef FP_LED
00153 biton BITWRAP(LATA, FP_LED); ; //on/off only; TODO: PWM or serial blink?
00154 ; cmp24 fpcolor, LITERAL(0); //on/off only; TODO: PWM or serial blink?
00155 ; ifbit EQUALS0 FALSE, biton BITWRAP(LATA, FP_LED);
00156 #endif
00157 #ifdef FP_WS281X
00158 ws1_sendpx BITWRAP(LATA, FP_WS281X), fpcolor, FIRSTPX, RESERVE(0), RESERVE(0); ; NOP 2, NOP 4; //ORG$, ORG$;
00159 #endif
00160 ; setbit LATA, FRPANEL, TRUE;
00161 ;NOTE: assumes >= 50 usec until next update, so no explicit wait 50 usec here
00162 ; GOTO front_panel;
00163 ; messg ^^^ remove @163
00164 ; CALL sendpx;
00165 ;working: GOTO front_panel;
00166 set_timeout 1 sec/2, YIELD; //display for 1/2 sec
00167 ; GOTO front_panel;
00168 ; whilebit is_timeout FALSE, ORG$+3
00169 ; CONTEXT_RESTORE before_whilebit
00170 ; ifbit BITPARENT(fpdirty), TRUE, GOTO front_panel;
00171 ; YIELD;
00172 ; CONTEXT_RESTORE after_whilebit
00173 ; whilebit is_timeout FALSE, ORG$;
00174 #ifdef FP_LED
00175 bitoff BITWRAP(LATA, FP_LED);;
00176 #endif
00177 #ifdef FP_WS281X
00178 ws1_sendpx BITWRAP(LATA, FP_WS281X), LITERAL(0), FIRSTPX, RESERVE(0), RESERVE(0); ; NOP 2, NOP 4; //ORG$, ORG$; //clear display
00179 ; setbit LATA, FRPANEL, FALSE;
00180 ; mov24 fpcolor, LITERAL(0);
00181 ; CALL sendpx;
00182 set_timeout 50 usec, YIELD;
00183 #endif
00184 GOTO front_panel;
00185 ;sendpx: DROP_CONTEXT;
00186 ; ws1_sendpx BITWRAP(LATA, FRPANEL), fpcolor, ORG$-1, ORG$, ORG$;
00187 ; return;
00188 THREAD_END;
00189 #else; //no front panel
00190 FrontPanel macro ignore
00191 endm
00192 #endif; //def WANT_FRPANEL
00193
00194
00195 ;hard-coded VEEPROM contents:
00196 ;//(eventually will be updatable)
00197 ;//see FPP EEPROM.txt for details
00198 ;//since this is just text, use A2 packing to save space
00199 #ifdef A2PACK; use A2 packing; CAUTION: suitable only for text, ensure even length to avpod embedded nulls
0012 00200 DATA_START: ;//start of EEPROM contents
00201 ;//first section (fixed len):
00202 ;//0-5 EEPROM format identifier string, null terminated. Currently "FPP02"
00203 ;//6-31 Cape name as null terminated string (26 bytes)
00204 ;//32-41 Cape version as null terminated string (10 bytes)
00205 ;//42-57 Cape serial number as null terminated string (16 bytes)
0012 2350 2830 1900 00206 DA "FPP02\x00"; //signature string
0015 2250 24B2 1A48 00207 DA "DPI24Hat\x00 "; //hat/cape name
30F4 0020 1020
1020 1020 1020
1020 1020 1020
1020
0022 18AE 1800 1020 00208 DA "1.0\x00 "; //hat/cape version
1020 1020
0027 1830 1830 1830 00209 DA "000000000000000\x00"; //serial# (not used)
1830 1830 1830
1830 1800
00210 ERRIF(2 * ($ - DATA_START) != 58, [ERROR] veeprom header length wrong: 58 expected 58 @210);;
00211 ;//second section (var len, multi):
00212 ;//0-5 LENGTH (as a string). If the string "0", end of eeprom data
00213 ;//6-7 Code representing the type of record. Number between 0-99 as a string
00214 ;// The 2 bytes for the code is NOT included in LENGTH
00215 ;//If code is less than 50, the code is immediately followed by:
00216 ;//8-71 Filename as null terminated string. ex: "tmp/cape-info.json" (64 char)
00217 ;// The 64 bytes for the filename is NOT included in the LENGTH
002F 00218 HDR1_START:
002F 19B1 1800 1020 00219 DA "310\x00 "; //length of json file contents; CAUTION: must match JSON length below
0032 1800 00220 DA "0\x00"; //uncompressed file follows; CAUTION: don't change file name (it's hard-coded in FPP cape detect)
0033 3A6D 382F 31E1 00221 DA "tmp/cape-info.json\x00 ";
3865 16E9 3766
37AE 3573 37EE
0020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020
00222 ERRIF(2 * ($ - HDR1_START) != 72, [ERROR] veeprom header length wrong: 72 expected 72 @222);;
00223 ;//start of first .json file:
00224 ;//start of .json file:
0053 00225 JSON1_START: ;// /tmp/cape-info.json
0053 3D8A 00226 DA "{\n";
0054 1022 34E4 113A 00227 DA " \"id\": \"DPI24Hat(v1.0)\", \n";
1022 2250 24B2
1A48 30F4 1476
18AE 1829 112C
100A
0061 1022 3B65 3973 00228 DA " \"version\": \"1.0\", \n";
34EF 3722 1D20
1131 1730 112C
100A
006B 1022 3761 36E5 00229 DA " \"name\": \"DPI24Hat\", \n";
113A 1022 2250
24B2 1A48 30F4
112C 100A
0076 1022 3265 3361 00230 DA " \"defaultSettings\": {\n";
3AEC 3A53 32F4
3A69 3767 39A2
1D20 3D8A
00231 ; DW " "showAllOptions": "1"\n";
0081 107D 160A 00232 DA " },\n";
0083 1022 3872 37F6 00233 DA " \"provides\": [ \"strings\" ],\n";
34E4 32F3 113A
105B 1022 39F4
3969 3767 39A2
105D 160A
0091 1022 3265 39E9 00234 DA " \"designer\": \"djulien\",\n";
33EE 32F2 113A
1022 326A 3AEC
34E5 3722 160A
009D 1022 31EF 3879 00235 DA " \"copyFiles\": {\n";
2369 3665 39A2
1D20 3D8A
00236 ; DA " \"tmp/co-pixelStrings.json\": \"config/co-pixelStrings.json\", \n";
00A5 1020 1174 36F0 00237 DA " \"tmp/co-pixelStrings.json\": \"tmp/defaults/config/co-pixelStrings.json\",\n";
17E3 37AD 3869
3C65 3653 3A72
34EE 33F3 176A
39EF 3722 1D20
1174 36F0 17E4
32E6 30F5 3674
39AF 31EF 3766
34E7 17E3 37AD
3869 3C65 3653
3A72 34EE 33F3
176A 39EF 3722
160A
00CA 1020 1174 36F0 00238 DA " \"tmp/DPI24Hat.json\": \"/opt/fpp/capes/pi/strings/DPI24Hat.json\" \n";
17C4 2849 1934
2461 3A2E 3573
37EE 113A 1022
17EF 3874 17E6
3870 17E3 30F0
32F3 17F0 34AF
39F4 3969 3767
39AF 2250 24B2
1A48 30F4 176A
39EF 3722 100A
00EB 107D 100A 00239 DA " } \n";
00ED 3E8A 00240 DA "}\n";
00EE 00241 JSON1_END:
Message[301]: MESSAGE: ([INFO] json1 length: 310 @242)
00242 messg [INFO] json1 length: 310 @242; //use this to update length above
00243 ;//second file:
00EE 00244 HDR2_START:
00EE 1B35 1A00 1020 00245 DA "654\x00 "; //length of json file contents; CAUTION: must match JSON length below
00F1 1800 00246 DA "0\x00"; //uncompressed file follows; CAUTION: don't change file name (it's hard-coded in FPP cape detect)
00F2 3A6D 382F 2250 00247 DA "tmp/DPI24Hat.json\x00 "; //hat/cape name
24B2 1A48 30F4
176A 39EF 3700
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020
00248 ERRIF(2 * ($ - HDR2_START) != 72, [ERROR] veeprom header length wrong: 72 expected 72 @248);;
00249 ;//start of .json file:
0112 00250 JSON2_START: ;// /tmp/strings/DPI24Hat.json
0112 3D8A 00251 DA "{\n";
0113 1022 3761 36E5 00252 DA " \"name\": \"DPI24Hat\", \n";
113A 1022 2250
24B2 1A48 30F4
112C 100A
011E 1022 366F 3767 00253 DA " \"longName\": \"DPI24Hat\", \n";
2761 36E5 113A
1022 2250 24B2
1A48 30F4 112C
100A
012B 1022 3272 34F6 00254 DA " \"driver\": \"DPIPixels\",\n";
32F2 113A 1022
2250 24D0 34F8
32EC 39A2 160A
0137 1022 3775 36D3 00255 DA " \"numSerial\": 0, \n";
32F2 34E1 3622
1D20 182C 100A
0140 1022 37F5 3A70 00256 DA " \"outputs\": [\n";
3AF4 39A2 1D20
2D8A
0147 1020 3DA2 3869 00257 DA " {\"pin\": \"P1-8\"}, \n";
3722 1D20 1150
18AD 1C22 3EAC
100A
0151 1020 3DA2 3869 00258 DA " {\"pin\": \"P1-16\"},\n";
3722 1D20 1150
18AD 18B6 117D
160A
015B 1020 3DA2 3869 00259 DA " {\"pin\": \"P1-12\"},\n";
3722 1D20 1150
18AD 18B2 117D
160A
0165 1020 3DA2 3869 00260 DA " {\"pin\": \"P1-10\"},\n";
3722 1D20 1150
18AD 18B0 117D
160A
016F 1020 3DA2 3869 00261 DA " {\"pin\": \"P1-21\"},\n";
3722 1D20 1150
18AD 1931 117D
160A
0179 1020 3DA2 3869 00262 DA " {\"pin\": \"P1-15\"},\n";
3722 1D20 1150
18AD 18B5 117D
160A
0183 1020 3DA2 3869 00263 DA " {\"pin\": \"P1-13\"},\n";
3722 1D20 1150
18AD 18B3 117D
160A
018D 1020 3DA2 3869 00264 DA " {\"pin\": \"P1-11\"},\n";
3722 1D20 1150
18AD 18B1 117D
160A
0197 100A 00265 DA " \n";
0198 1020 3DA2 3869 00266 DA " {\"pin\": \"P1-31\"},\n";
3722 1D20 1150
18AD 19B1 117D
160A
01A2 1020 3DA2 3869 00267 DA " {\"pin\": \"P1-7\"}, \n";
3722 1D20 1150
18AD 1BA2 3EAC
100A
01AC 1020 3DA2 3869 00268 DA " {\"pin\": \"P1-19\"},\n";
3722 1D20 1150
18AD 18B9 117D
160A
01B6 1020 3DA2 3869 00269 DA " {\"pin\": \"P1-22\"},\n";
3722 1D20 1150
18AD 1932 117D
160A
01C0 1020 3DA2 3869 00270 DA " {\"pin\": \"P1-24\"},\n";
3722 1D20 1150
18AD 1934 117D
160A
01CA 1020 3DA2 3869 00271 DA " {\"pin\": \"P1-18\"},\n";
3722 1D20 1150
18AD 18B8 117D
160A
01D4 1020 3DA2 3869 00272 DA " {\"pin\": \"P1-26\"},\n";
3722 1D20 1150
18AD 1936 117D
160A
01DE 1020 3DA2 3869 00273 DA " {\"pin\": \"P1-29\"},\n";
3722 1D20 1150
18AD 1939 117D
160A
01E8 100A 00274 DA " \n";
01E9 1020 3DA2 3869 00275 DA " {\"pin\": \"P1-36\"},\n";
3722 1D20 1150
18AD 19B6 117D
160A
01F3 1020 3DA2 3869 00276 DA " {\"pin\": \"P1-40\"},\n";
3722 1D20 1150
18AD 1A30 117D
160A
01FD 1020 3DA2 3869 00277 DA " {\"pin\": \"P1-37\"},\n";
3722 1D20 1150
18AD 19B7 117D
160A
0207 1020 3DA2 3869 00278 DA " {\"pin\": \"P1-33\"},\n";
3722 1D20 1150
18AD 19B3 117D
160A
0211 1020 3DA2 3869 00279 DA " {\"pin\": \"P1-23\"},\n";
3722 1D20 1150
18AD 1933 117D
160A
021B 1020 3DA2 3869 00280 DA " {\"pin\": \"P1-38\"},\n";
3722 1D20 1150
18AD 19B8 117D
160A
0225 1020 3DA2 3869 00281 DA " {\"pin\": \"P1-35\"},\n";
3722 1D20 1150
18AD 19B5 117D
160A
022F 1020 3DA2 3869 00282 DA " {\"pin\": \"P1-32\"} \n";
3722 1D20 1150
18AD 19B2 117D
100A
0239 105D 160A 00283 DA " ],\n";
023B 1022 33F2 37F5 00284 DA " \"groups\": [ \n";
3873 113A 105B
100A
0242 1020 3D8A 00285 DA " {\n";
0244 1020 1022 39F4 00286 DA " \"start\": 1, \n";
30F2 3A22 1D20
18AC 100A
024C 1020 1022 31EF 00287 DA " \"count\": 24 \n";
3AEE 3A22 1D20
1934 100A
0254 1020 3E8A 00288 DA " }\n";
00289 ;FPP seems to want a blank line @eof and is picky about how it ends: :(
00290 ; DA "] }\n";
00291 ; DA "\n\n";
0256 105D 107D 050A 00292 DA " ] }\n\n";
0259 00293 JSON2_END:
Message[301]: MESSAGE: ([INFO] json2 length: 654 @294)
00294 messg [INFO] json2 length: 654 @294; //use this to update length above
00295 ;//third file:
0259 00296 HDR3_START:
0259 18B2 19B4 0020 00297 DA "1234\x00 "; //length of json file contents; CAUTION: must match JSON length below
025C 1800 00298 DA "0\x00"; //uncompressed file follows; CAUTION: don't change file name (it's hard-coded in FPP cape detect)
025D 3A6D 382F 31EF 00299 DA "tmp/co-pixelStrings.json\x00 ";
16F0 34F8 32EC
29F4 3969 3767
39AE 3573 37EE
0020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020 1020
1020 1020
00300 ; DA "tmp/defaults/config/co-pixelStrings.json\x00 ";
00301 ERRIF(2 * ($ - HDR3_START) != 72, [ERROR] veeprom header length wrong: 72 expected 72 @301);;
00302 ;//start of .json file:
027D 00303 JSON3_START: ;// /tmp/defaults/config/co-pixelStrings.json
027D 3D8A 00304 DA "{\n";
027E 1022 31E8 30EE 00305 DA " \"channelOutputs\": [ \n";
3765 364F 3AF4
3875 3A73 113A
105B 100A
0289 107B 100A 00306 DA " { \n";
028B 1020 1174 3CF0 00307 DA " \"type\": \"DPIPixels\", \n";
32A2 1D20 1144
2849 2869 3C65
3673 112C 100A
0297 1020 1173 3AE2 00308 DA " \"subType\": \"DPI24Hat\", \n";
2A79 3865 113A
1022 2250 24B2
1A48 30F4 112C
100A
02A4 1020 1170 34EE 00309 DA " \"pinoutVersion\": \"1.0\",\n";
37F5 3A56 32F2
39E9 37EE 113A
1022 18AE 1822
160A
02B1 1020 116F 3AF4 00310 DA " \"outputs\": [ \n";
3875 3A73 113A
105B 100A
02B9 1020 3DA0 1170 00311 DA " { \"portNumber\": 0, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
182C 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
00312 ; DA " \"virtualStrings\": [ { \"description\": \"\", \"startChannel\": 0, \"pixelCount\": 0, \"order\": \"RGB\", \"brightness\": 100} \n";
02D0 1020 3DA0 1170 00313 DA " { \"portNumber\": 1, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
18AC 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
02E7 1020 3DA0 1170 00314 DA " { \"portNumber\": 2, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
192C 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
02FE 1020 3DA0 1170 00315 DA " { \"portNumber\": 3, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
19AC 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
0315 1020 3DA0 1170 00316 DA " { \"portNumber\": 4, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
1A2C 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
032C 1020 3DA0 1170 00317 DA " { \"portNumber\": 5, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
1AAC 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
0343 1020 3DA0 1170 00318 DA " { \"portNumber\": 6, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
1B2C 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
035A 1020 3DA0 1170 00319 DA " { \"portNumber\": 7, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
1BAC 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
0371 1020 3DA0 1170 00320 DA " { \"portNumber\": 8, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
1C2C 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
0388 1020 3DA0 1170 00321 DA " { \"portNumber\": 9, \"protocol\": \"ws2811\" }, \n";
37F2 3A4E 3AED
3165 3922 1D20
1CAC 1022 3872
37F4 37E3 37EC
113A 1022 3BF3
1938 18B1 1120
3EAC 100A
039F 1020 3DA0 1170 00322 DA " { \"portNumber\": 10, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B0 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
03B6 1020 3DA0 1170 00323 DA " { \"portNumber\": 11, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B1 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
03CD 1020 3DA0 1170 00324 DA " { \"portNumber\": 12, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B2 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
03E4 1020 3DA0 1170 00325 DA " { \"portNumber\": 13, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B3 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
03FB 1020 3DA0 1170 00326 DA " { \"portNumber\": 14, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B4 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
0412 1020 3DA0 1170 00327 DA " { \"portNumber\": 15, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B5 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
0429 1020 3DA0 1170 00328 DA " { \"portNumber\": 16, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B6 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
0440 1020 3DA0 1170 00329 DA " { \"portNumber\": 17, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B7 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
0457 1020 3DA0 1170 00330 DA " { \"portNumber\": 18, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B8 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
046E 1020 3DA0 1170 00331 DA " { \"portNumber\": 19, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
18B9 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
0485 1020 3DA0 1170 00332 DA " { \"portNumber\": 20, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
1930 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
049C 1020 3DA0 1170 00333 DA " { \"portNumber\": 21, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
1931 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
04B3 1020 3DA0 1170 00334 DA " { \"portNumber\": 22, \"protocol\": \"ws2811\" },\n";
37F2 3A4E 3AED
3165 3922 1D20
1932 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 160A
04CA 1020 3DA0 1170 00335 DA " { \"portNumber\": 23, \"protocol\": \"ws2811\" } \n";
37F2 3A4E 3AED
3165 3922 1D20
1933 1620 1170
396F 3A6F 31EF
3622 1D20 1177
39B2 1C31 18A2
107D 100A
04E1 105D 107D 100A 00336 DA " ] } \n";
04E4 2EA0 3E8A 00337 DA "] }\n";
04E6 00338 JSON3_END:
Message[301]: MESSAGE: ([INFO] json3 length: 1234 @339)
00339 messg [INFO] json3 length: 1234 @339; //use this to update length above
00340 ;//eof:
04E6 1800 1020 1020 00341 DA "0\x00 "; | LDI_EOF; //eof
00342 ; DW 0x012, 0x345, 0x678, 0x9ab, 0xcde, 0xf00;
00343 ; DW 0x55A, 0xA55, 0xAA5, 0x5AA | LDI_EOF;
04E9 00344 DATA_END: ;DATA_END SET $; CONSTANT DATA_END = $; //DATA_END:
00345 #else ;1 byte/word (takes up too much space)
00346 ; ORG DATA_START; //start of EEPROM contents
00347 ; variable JSON_NUMPATCH = 0;
00348 DATA_START: ;//start of EEPROM contents
00349 ;//first section (fixed len):
00350 ;//0-5 EEPROM format identifier string, null terminated. Currently "FPP02"
00351 ;//6-31 Cape name as null terminated string (26 bytes)
00352 ;//32-41 Cape version as null terminated string (10 bytes)
00353 ;//42-57 Cape serial number as null terminated string (16 bytes)
00354 DW 'F', 'P', 'P', '0', '2', 0; //signature string
00355 DW 'D', 'P', 'I', '2', '4', 'H', 'a', 't', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; //hat/cape name
00356 DW '1', '.', '0', 0, 0, 0, 0, 0, 0, 0; //hat/cape version
00357 DW '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 0; //serial# (not used)
00358 ;//second section (var len, multi):
00359 ;//0-5 LENGTH (as a string). If the string "0", end of eeprom data
00360 ;//6-7 Code representing the type of record. Number between 0-99 as a string
00361 ;// The 2 bytes for the code is NOT included in LENGTH
00362 ;//If code is less than 50, the code is immediately followed by:
00363 ;//8-71 Filename as null terminated string. ex: "tmp/cape-info.json" (64 char)
00364 ;// The 64 bytes for the filename is NOT included in the LENGTH
00365 DW '2', '9', '2', 0, 0, 0; //length of json file contents; CAUTION: must match JSON length below
00366 DW '0', 0; //uncompressed file follows; CAUTION: don't change file name (it's hard-coded in FPP cape detect)
00367 DW 't', 'm', 'p', '/', 'c', 'a', 'p', 'e', '-', 'i', 'n', 'f', 'o', '.', 'j', 's';
00368 DW 'o', 'n', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00369 ;JSON_PATCH#v(JSON_NUMPATCH) EQU $-12;
00370 ;JSON_NUMPATCH += 1
00371 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00372 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00373 ;//start of .json file:
00374 JSON1_START: ;// /tmp/cape-info.json
00375 DW '{', '\n';
00376 DW ' ', '"', 'i', 'd', '"', ':', ' ', '"', 'D', 'P', 'I', '2', '4', 'H', 'a', 't', '(', 'v', '1', '.', '0', ')', '"', ',', '\n';
00377 DW ' ', '"', 'v', 'e', 'r', 's', 'i', 'o', 'n', '"', ':', ' ', '"', '1', '.', '0', '"', ',', '\n';
00378 DW ' ', '"', 'n', 'a', 'm', 'e', '"', ':', ' ', '"', 'D', 'P', 'I', '2', '4', 'H', 'a', 't', '"', ',', '\n';
00379 DW ' ', '"', 'd', 'e', 'f', 'a', 'u', 'l', 't', 'S', 'e', 't', 't', 'i', 'n', 'g', 's', '"', ':', ' ', '{', '\n';
00380 ; DW ' ', ' ', '"', 's', 'h', 'o', 'w', 'A', 'l', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '"', ':', ' ', '"', '1', '"', '\n';
00381 DW ' ', '}', ',', '\n';
00382 DW ' ', '"', 'p', 'r', 'o', 'v', 'i', 'd', 'e', 's', '"', ':', ' ', '[', ' ', '"', 's', 't', 'r', 'i', 'n', 'g', 's', '"', ' ', ']', ',', '\n';
00383 DW ' ', '"', 'd', 'e', 's', 'i', 'g', 'n', 'e', 'r', '"', ':', ' ', '"', 'd', 'j', 'u', 'l', 'i', 'e', 'n', '"', ',', '\n';
00384 DW ' ', '"', 'c', 'o', 'p', 'y', 'F', 'i', 'l', 'e', 's', '"', ':', ' ', '{', '\n';
00385 DW ' ', ' ', '"', 't', 'm', 'p', '/', 'c', 'o', '-', 'p', 'i', 'x', 'e', 'l', 'S', 't', 'r', 'i', 'n', 'g', 's', '.', 'j', 's', 'o', 'n', '"', ':', ' ';
00386 DW '"', 'c', 'o', 'n', 'f', 'i', 'g', '/', 'c', 'o', '-', 'p', 'i', 'x', 'e', 'l', 'S', 't', 'r', 'i', 'n', 'g', 's', '.', 'j', 's', 'o', 'n', '"', ',', '\n';
00387 DW ' ', ' ', '"', 't', 'm', 'p', '/', 'D', 'P', 'I', '2', '4', 'H', 'a', 't', '.', 'j', 's', 'o', 'n', '"', ':', ' ';
00388 DW '"', '/', 'o', 'p', 't', '/', 'f', 'p', 'p', '/', 'c', 'a', 'p', 'e', 's', '/', 'p', 'i', '/', 's', 't', 'r', 'i', 'n', 'g', 's', '/', 'D', 'P', 'I', '2', '4', 'H',
00389 DW '.', 'j', 's', 'o', 'n', '"', '\n';
00390 DW ' ', '}', '\n';
00391 DW '}', '\n';
00392 JSON1_END:
00393 messg [INFO] json1 length: 155 @393; //use this to update length above
00394 ;//second file:
00395 DW '7', '1', '4', 0, 0, 0; //length of json file contents; CAUTION: must match JSON length below
00396 DW '0', 0; //uncompressed file follows; CAUTION: don't change file name (it's hard-coded in FPP cape detect)
00397 DW 't', 'm', 'p', '/', 'D', 'P', 'I', '2', '4', 'H', 'a', 't', '.', 'j', 's', 'o';
00398 DW 'n', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00399 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00400 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00401 ;//start of .json file:
00402 JSON2_START: ;// /tmp/strings/DPI24Hat.json
00403 DW '{', '\n';
00404 DW ' ', '"', 'n', 'a', 'm', 'e', '"', ':', ' ', '"', 'D', 'P', 'I', '2', '4', 'H', 'a', 't', '"', ',', '\n';
00405 DW ' ', '"', 'l', 'o', 'n', 'g', 'N', 'a', 'm', 'e', '"', ':', ' ', '"', 'D', 'P', 'I', '2', '4', 'H', 'a', 't', '"', ',', '\n';
00406 DW ' ', '"', 'd', 'r', 'i', 'v', 'e', 'r', '"', ':', ' ', '"', 'D', 'P', 'I', 'P', 'i', 'x', 'e', 'l', 's', '"', ',', '\n';
00407 DW ' ', '"', 'n', 'u', 'm', 'S', 'e', 'r', 'i', 'a', 'l', '"', ':', ' ', '0', ',', '\n';
00408 DW ' ', '"', 'o', 'u', 't', 'p', 'u', 't', 's', '"', ':', ' ', '[', '\n';
00409 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '8', '"', ' ', '}', ',', '\n';
00410 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '6', '"', ' ', '}', ',', '\n';
00411 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '2', '"', ' ', '}', ',', '\n';
00412 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '0', '"', ' ', '}', ',', '\n';
00413 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '2', '1', '"', ' ', '}', ',', '\n';
00414 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '5', '"', ' ', '}', ',', '\n';
00415 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '3', '"', ' ', '}', ',', '\n';
00416 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '1', '"', ' ', '}', ',', '\n';
00417 DW '\n';
00418 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '3', '1', '"', ' ', '}', ',', '\n';
00419 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '7', '"', ' ', '}', ',', '\n';
00420 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '9', '"', ' ', '}', ',', '\n';
00421 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '2', '2', '"', ' ', '}', ',', '\n';
00422 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '2', '4', '"', ' ', '}', ',', '\n';
00423 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '1', '8', '"', ' ', '}', ',', '\n';
00424 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '2', '6', '"', ' ', '}', ',', '\n';
00425 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '2', '9', '"', ' ', '}', ',', '\n';
00426 DW '\n';
00427 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '3', '6', '"', ' ', '}', ',', '\n';
00428 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '4', '0', '"', ' ', '}', ',', '\n';
00429 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '3', '7', '"', ' ', '}', ',', '\n';
00430 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '3', '3', '"', ' ', '}', ',', '\n';
00431 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '2', '3', '"', ' ', '}', ',', '\n';
00432 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '3', '8', '"', ' ', '}', ',', '\n';
00433 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '3', '5', '"', ' ', '}', ',', '\n';
00434 DW ' ', ' ', '{', ' ', ' ', '"', 'p', 'i', 'n', '"', ':', ' ', '"', 'P', '1', '-', '3', '2', '"', ' ', '}', '\n';
00435 DW ' ', ']', ',', '\n';
00436 DW ' ', '"', 'g', 'r', 'o', 'u', 'p', 's', '"', ':', ' ', '[', '\n';
00437 DW ' ', ' ', '{', '\n';
00438 DW ' ', ' ', ' ', '"', 's', 't', 'a', 'r', 't', '"', ':', ' ', '1', ',', '\n';
00439 DW ' ', ' ', ' ', '"', 'c', 'o', 'u', 'n', 't', '"', ':', ' ', '2', '4', '\n';
00440 DW ' ', ' ', '}', '\n';
00441 DW ' ', ']', '\n';
00442 DW '}', '\n';
00443 JSON2_END:
00444 messg [INFO] json2 length: 327 @444; //use this to update length above
00445 ;//third file:
00446 DW '3', '2', '5', 0, 0, 0; //length of json file contents; CAUTION: must match JSON length below
00447 DW '0', 0; //uncompressed file follows; CAUTION: don't change file name (it's hard-coded in FPP cape detect)
00448 DW 't', 'm', 'p', '/', 'c', 'o', '-', 'p', 'i', 'x', 'e', 'l', 'S', 't', 'r', 'i';
00449 DW 'n', 'g', 's', '.', 'j', 's', 'o', 'n', 0, 0, 0, 0, 0, 0, 0, 0;
00450 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00451 DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
00452 ;//start of .json file:
00453 JSON3_START: ;// /tmp/defaults/config/co-pixelStrings.json
00454 DW '{', '\n';
00455 DW ' ', '"', 'c', 'h', 'a', 'n', 'n', 'e', 'l', 'O', 'u', 't', 'p', 'u', 't', 's', '"', ':', ' ', '[', '\n';
00456 DW ' ', '{', '\n';
00457 DW ' ', ' ', '"', 't', 'y', 'p', 'e', '"', ':', ' ', '"', 'D', 'P', 'I', 'P', 'i', 'x', 'e', 'l', 's', '"', ',', '\n';
00458 DW ' ', ' ', '"', 's', 'u', 'b', 'T', 'y', 'p', 'e', '"', ':', ' ', '"', 'D', 'P', 'I', '2', '4', 'H', 'a', 't', '"', ',', '\n';
00459 DW ' ', ' ', '"', 'p', 'i', 'n', 'o', 'u', 't', 'V', 'e', 'r', 's', 'i', 'o', 'n', '"', ':', ' ', '"', '1', '.', 'x', '"', ',', '\n';
00460 DW ' ', ' ', '"', 'o', 'u', 't', 'p', 'u', 't', 's', '"', ':', ' ', '[', '\n';
00461 DW ' ', ' ', '{', '\n';
00462 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '0', ',', '\n';
00463 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00464 ; DW ' ', ' ', ' ', '"', 'v', 'i', 'r', 't', 'u', 'a', 'l', 'S', 't', 'r', 'i', 'n', 'g', 's', '"', ':', ' ', '[', ' ', '{', ' ', '"', 'd', 'e', 's', 'c', 'r', 'i', 'p',
00465 ; DW ':';
00466 ; DW ' ', '"', '"', ' ', '}', ' ', ']', '\n';
00467 DW ' ', ' ', '}', ',', '\n';
00468 DW ' ', ' ', '{', '\n';
00469 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', ',', '\n';
00470 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00471 DW ' ', ' ', '}', ',', '\n';
00472 DW ' ', ' ', '{', '\n';
00473 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '2', ',', '\n';
00474 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00475 DW ' ', ' ', '}', ',', '\n';
00476 DW ' ', ' ', '{', '\n';
00477 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '3', ',', '\n';
00478 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00479 DW ' ', ' ', '}', ',', '\n';
00480 DW ' ', ' ', '{', '\n';
00481 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '4', ',', '\n';
00482 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00483 DW ' ', ' ', '}', ',', '\n';
00484 DW ' ', ' ', '{', '\n';
00485 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '5', ',', '\n';
00486 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00487 DW ' ', ' ', '}', ',', '\n';
00488 DW ' ', ' ', '{', '\n';
00489 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '6', ',', '\n';
00490 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00491 DW ' ', ' ', '}', ',', '\n';
00492 DW ' ', ' ', '{', '\n';
00493 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '7', ',', '\n';
00494 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00495 DW ' ', ' ', '}', ',', '\n';
00496 DW ' ', ' ', '{', '\n';
00497 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '8', ',', '\n';
00498 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00499 DW ' ', ' ', '}', ',', '\n';
00500 DW ' ', ' ', '{', '\n';
00501 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '9', ',', '\n';
00502 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00503 DW ' ', ' ', '}', ',', '\n';
00504 DW ' ', ' ', '{', '\n';
00505 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '0', ',', '\n';
00506 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00507 DW ' ', ' ', '}', ',', '\n';
00508 DW ' ', ' ', '{', '\n';
00509 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '1', ',', '\n';
00510 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00511 DW ' ', ' ', '}', ',', '\n';
00512 DW ' ', ' ', '{', '\n';
00513 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '2', ',', '\n';
00514 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00515 DW ' ', ' ', '}', ',', '\n';
00516 DW ' ', ' ', '{', '\n';
00517 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '3', ',', '\n';
00518 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00519 DW ' ', ' ', '}', ',', '\n';
00520 DW ' ', ' ', '{', '\n';
00521 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '4', ',', '\n';
00522 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00523 DW ' ', ' ', '}', ',', '\n';
00524 DW ' ', ' ', '{', '\n';
00525 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '5', ',', '\n';
00526 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00527 DW ' ', ' ', '}', ',', '\n';
00528 DW ' ', ' ', '{', '\n';
00529 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '6', ',', '\n';
00530 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00531 DW ' ', ' ', '}', ',', '\n';
00532 DW ' ', ' ', '{', '\n';
00533 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '7', ',', '\n';
00534 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00535 DW ' ', ' ', '}', ',', '\n';
00536 DW ' ', ' ', '{', '\n';
00537 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '8', ',', '\n';
00538 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00539 DW ' ', ' ', '}', ',', '\n';
00540 DW ' ', ' ', '{', '\n';
00541 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '1', '9', ',', '\n';
00542 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00543 DW ' ', ' ', '}', ',', '\n';
00544 DW ' ', ' ', '{', '\n';
00545 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '2', '0', ',', '\n';
00546 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00547 DW ' ', ' ', '}', ',', '\n';
00548 DW ' ', ' ', '{', '\n';
00549 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '2', '1', ',', '\n';
00550 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00551 DW ' ', ' ', '}', ',', '\n';
00552 DW ' ', ' ', '{', '\n';
00553 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '2', '2', ',', '\n';
00554 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00555 DW ' ', ' ', '}', ',', '\n';
00556 DW ' ', ' ', '{', '\n';
00557 DW ' ', ' ', ' ', '"', 'p', 'o', 'r', 't', 'N', 'u', 'm', 'b', 'e', 'r', '"', ':', ' ', '2', '3', ',', '\n';
00558 DW ' ', ' ', ' ', '"', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '"', ':', ' ', '"', 'w', 's', '2', '8', '1', '1', '"', '\n';
00559 DW ' ', ' ', '}', ' ', ']', '\n';
00560 DW ' ', '}', ' ', ']', '\n';
00561 DW '}', '\n';
00562 JSON3_END:
00563 messg [INFO] json3 length: 617 @563; //use this to update length above
00564 ;//eof:
00565 DW '0', 0;, 0, 0, 0, 0, 0 | LDI_EOF; //eof
00566 ; DW 0x012, 0x345, 0x678, 0x9ab, 0xcde, 0xf00;
00567 ; DW 0x55A, 0xA55, 0xAA5, 0x5AA | LDI_EOF;
00568 DATA_END: ;DATA_END SET $; CONSTANT DATA_END = $; //DATA_END:
00569 ; DB 0; //read ptr clamps here
00570 #endif; //def A2PACK
00571
00572 ;convert relative to absolute ptr:
00573 ;rel2abs macro ptr
00574 ; add16 ptr, LITERAL(DATA_START | 0x8000);
00575 ; endm
00576 ;REL2ABS EQU LITERAL(DATA_START | 0x8000);
00577 ;conv abs to rel ptr:
00578 ;abs2rel macro ptr
00579 ; add16 ptr, LITERAL(-DATA_START & 0xFFFF | 0x8000);
00580 ; endm
00581 ;ABS2REL EQU LITERAL((0x8000 - DATA_START) & 0xFFFF); //wrong! -DATA_START & 0xFFFF | 0x8000);
00582
00583
00584 THREAD_DEF veeprom, 6;
M CBLOCK NEXT_RAM9999; BOOL2INT(banked)) ;continue where we left off last time @2792
00000071 M stkptr_0 ; @2793
M ENDC ;can't span macros
0001 M CONSTANT stkptr_00size = LATEST_RAM2 - stkptr_0
Message[301]: MESSAGE: ([INFO] creating veeprom thread# 0 @$1257, stack size 6, host stack remaining: 10 @1851)
M goto_pagesafe init_2
0010 3184 M movlp ((init_2) / 0x100)
0011 2CE9 M goto init_2
04E9 M init_2:
04E9 24F3 M call stack_alloc_0
04EA M _345rerun_thread:
04EA 24F9 M call veeprom
04EB 2CEA M goto _345rerun_thread
M yield_from_0: DROP_CONTEXT
04EC 017F M banksel STKPTR
M withdest_0 movf STKPTR
04ED 086D M movf STKPTR, W;
04EE 00F1 M movwf stkptr_0
M yield_again_0: DROP_CONTEXT