pico-emu 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +7 -4
  2. package/about.html +101 -0
  3. package/docs.html +185 -0
  4. package/favicon.ico +0 -0
  5. package/package.json +9 -4
  6. package/picoemu-logo.png +0 -0
  7. package/site.css +308 -0
  8. package/adc_rv32.uf2 +0 -0
  9. package/adc_test.uf2 +0 -0
  10. package/adc_test_pico2.uf2 +0 -0
  11. package/ble_adv_pico2.uf2 +0 -0
  12. package/clocks_rv32.uf2 +0 -0
  13. package/clocks_test.uf2 +0 -0
  14. package/clocks_test_pico2.uf2 +0 -0
  15. package/dma_rv32.uf2 +0 -0
  16. package/dma_test.uf2 +0 -0
  17. package/dma_test_pico2.uf2 +0 -0
  18. package/dualcore_rv32.uf2 +0 -0
  19. package/eth_dhcp6300_pico2.uf2 +0 -0
  20. package/eth_dhcp6300_rv32.uf2 +0 -0
  21. package/eth_dhcp_pico2.uf2 +0 -0
  22. package/eth_dhcp_rv32.uf2 +0 -0
  23. package/eth_http6300_pico2.uf2 +0 -0
  24. package/eth_http6300_rv32.uf2 +0 -0
  25. package/eth_http_pico2.uf2 +0 -0
  26. package/eth_http_rv32.uf2 +0 -0
  27. package/ethdhcp6300_arduino_pico2.uf2 +0 -0
  28. package/examples/adc_rv32.uf2 +0 -0
  29. package/examples/adc_test.uf2 +0 -0
  30. package/examples/adc_test_pico2.uf2 +0 -0
  31. package/examples/ble_adv.uf2 +0 -0
  32. package/examples/ble_adv_pico2.uf2 +0 -0
  33. package/examples/clocks_rv32.uf2 +0 -0
  34. package/examples/clocks_test.uf2 +0 -0
  35. package/examples/clocks_test_pico2.uf2 +0 -0
  36. package/examples/dma_rv32.uf2 +0 -0
  37. package/examples/dma_test.uf2 +0 -0
  38. package/examples/dma_test_pico2.uf2 +0 -0
  39. package/examples/dualcore_rv32.uf2 +0 -0
  40. package/examples/eth_dhcp.uf2 +0 -0
  41. package/examples/eth_dhcp6300.uf2 +0 -0
  42. package/examples/eth_dhcp6300_pico2.uf2 +0 -0
  43. package/examples/eth_dhcp6300_rv32.uf2 +0 -0
  44. package/examples/eth_dhcp_pico2.uf2 +0 -0
  45. package/examples/eth_dhcp_rv32.uf2 +0 -0
  46. package/examples/eth_http.uf2 +0 -0
  47. package/examples/eth_http6300.uf2 +0 -0
  48. package/examples/eth_http6300_pico2.uf2 +0 -0
  49. package/examples/eth_http6300_rv32.uf2 +0 -0
  50. package/examples/eth_http_pico2.uf2 +0 -0
  51. package/examples/eth_http_rv32.uf2 +0 -0
  52. package/examples/fp_test.uf2 +0 -0
  53. package/examples/fp_test_pico2.uf2 +0 -0
  54. package/examples/gpio_rv32.uf2 +0 -0
  55. package/examples/gpio_test_pico2.uf2 +0 -0
  56. package/examples/hello_rv32.uf2 +0 -0
  57. package/examples/hello_usb.uf2 +0 -0
  58. package/examples/hello_world_pico2.uf2 +0 -0
  59. package/examples/i2c_rv32.uf2 +0 -0
  60. package/examples/i2c_test.uf2 +0 -0
  61. package/examples/i2c_test_pico2.uf2 +0 -0
  62. package/examples/interrupt_rv32.uf2 +0 -0
  63. package/examples/interrupt_test.uf2 +0 -0
  64. package/examples/interrupt_test_pico2.uf2 +0 -0
  65. package/examples/littleos_pico2.uf2 +0 -0
  66. package/examples/littleos_pico2_riscv.uf2 +0 -0
  67. package/examples/name_prompt.uf2 +0 -0
  68. package/examples/name_prompt_pico2.uf2 +0 -0
  69. package/examples/name_prompt_rv32.uf2 +0 -0
  70. package/examples/pio_rv32.uf2 +0 -0
  71. package/examples/pio_test.uf2 +0 -0
  72. package/examples/pio_test_pico2.uf2 +0 -0
  73. package/examples/psm_rv32.uf2 +0 -0
  74. package/examples/psm_test.uf2 +0 -0
  75. package/examples/psm_test_pico2.uf2 +0 -0
  76. package/examples/pwm_rv32.uf2 +0 -0
  77. package/examples/pwm_test.uf2 +0 -0
  78. package/examples/pwm_test_pico2.uf2 +0 -0
  79. package/examples/rtc_rv32.uf2 +0 -0
  80. package/examples/rtc_test.uf2 +0 -0
  81. package/examples/rtc_test_pico2.uf2 +0 -0
  82. package/examples/spi_rv32.uf2 +0 -0
  83. package/examples/spi_test.uf2 +0 -0
  84. package/examples/spi_test_pico2.uf2 +0 -0
  85. package/examples/timer_rv32.uf2 +0 -0
  86. package/examples/timer_test.uf2 +0 -0
  87. package/examples/timer_test_pico2.uf2 +0 -0
  88. package/examples/uart_echo.uf2 +0 -0
  89. package/examples/uart_echo_pico2.uf2 +0 -0
  90. package/examples/uart_echo_rv32.uf2 +0 -0
  91. package/examples/usb_rv32.uf2 +0 -0
  92. package/examples/usb_test.uf2 +0 -0
  93. package/examples/usb_test_pico2.uf2 +0 -0
  94. package/examples/wifi_ble_adv_rv32.uf2 +0 -0
  95. package/examples/wifi_ble_gatt_rv32.uf2 +0 -0
  96. package/examples/wifi_join_rv32.uf2 +0 -0
  97. package/examples/wifi_ping.uf2 +0 -0
  98. package/examples/wifi_ping6_rv32.uf2 +0 -0
  99. package/examples/wifi_ping_pico2.uf2 +0 -0
  100. package/examples/wifi_ping_rv32.uf2 +0 -0
  101. package/examples/wifi_rv32.uf2 +0 -0
  102. package/examples/wifi_scan_pico2.uf2 +0 -0
  103. package/examples/wifi_scan_rv32.uf2 +0 -0
  104. package/examples/wifi_webserver.uf2 +0 -0
  105. package/examples/wifi_webserver_pico2.uf2 +0 -0
  106. package/examples/wifi_webserver_rv32.uf2 +0 -0
  107. package/examples/ws2812_rv32.uf2 +0 -0
  108. package/examples/ws2812_test.uf2 +0 -0
  109. package/examples/ws2812_test_pico2.uf2 +0 -0
  110. package/fp_test.uf2 +0 -0
  111. package/fp_test_pico2.uf2 +0 -0
  112. package/gpio_rv32.uf2 +0 -0
  113. package/gpio_test.uf2 +0 -0
  114. package/gpio_test_pico2.uf2 +0 -0
  115. package/hello_rv32.uf2 +0 -0
  116. package/hello_usb.uf2 +0 -0
  117. package/hello_world.uf2 +0 -0
  118. package/hello_world_pico2.uf2 +0 -0
  119. package/i2c_rv32.uf2 +0 -0
  120. package/i2c_test.uf2 +0 -0
  121. package/i2c_test_pico2.uf2 +0 -0
  122. package/interrupt_rv32.uf2 +0 -0
  123. package/interrupt_test.uf2 +0 -0
  124. package/interrupt_test_pico2.uf2 +0 -0
  125. package/littleos.uf2 +0 -0
  126. package/littleos_pico2.uf2 +0 -0
  127. package/littleos_pico2_riscv.uf2 +0 -0
  128. package/micropython_rp2040.uf2 +0 -0
  129. package/micropython_rp2350.uf2 +0 -0
  130. package/name_prompt.uf2 +0 -0
  131. package/name_prompt_pico2.uf2 +0 -0
  132. package/name_prompt_rv32.uf2 +0 -0
  133. package/pio_rv32.uf2 +0 -0
  134. package/pio_test.uf2 +0 -0
  135. package/pio_test_pico2.uf2 +0 -0
  136. package/psm_rv32.uf2 +0 -0
  137. package/psm_test.uf2 +0 -0
  138. package/psm_test_pico2.uf2 +0 -0
  139. package/pwm_rv32.uf2 +0 -0
  140. package/pwm_test.uf2 +0 -0
  141. package/pwm_test_pico2.uf2 +0 -0
  142. package/rtc_rv32.uf2 +0 -0
  143. package/rtc_test.uf2 +0 -0
  144. package/rtc_test_pico2.uf2 +0 -0
  145. package/spi_rv32.uf2 +0 -0
  146. package/spi_test.uf2 +0 -0
  147. package/spi_test_pico2.uf2 +0 -0
  148. package/timer_rv32.uf2 +0 -0
  149. package/timer_test.uf2 +0 -0
  150. package/timer_test_pico2.uf2 +0 -0
  151. package/uart_echo.uf2 +0 -0
  152. package/uart_echo_pico2.uf2 +0 -0
  153. package/uart_echo_rv32.uf2 +0 -0
  154. package/usb_rv32.uf2 +0 -0
  155. package/usb_test.uf2 +0 -0
  156. package/usb_test_pico2.uf2 +0 -0
  157. package/wifi_ble_adv_rv32.uf2 +0 -0
  158. package/wifi_ble_gatt_rv32.uf2 +0 -0
  159. package/wifi_join_rv32.uf2 +0 -0
  160. package/wifi_ping.uf2 +0 -0
  161. package/wifi_ping6_rv32.uf2 +0 -0
  162. package/wifi_ping_pico2.uf2 +0 -0
  163. package/wifi_ping_rv32.uf2 +0 -0
  164. package/wifi_rv32.uf2 +0 -0
  165. package/wifi_scan.uf2 +0 -0
  166. package/wifi_scan_pico2.uf2 +0 -0
  167. package/wifi_scan_rv32.uf2 +0 -0
  168. package/wifi_webserver.uf2 +0 -0
  169. package/wifi_webserver_pico2.uf2 +0 -0
  170. package/wifi_webserver_rv32.uf2 +0 -0
  171. package/ws2812_rv32.uf2 +0 -0
  172. package/ws2812_test.uf2 +0 -0
  173. package/ws2812_test_pico2.uf2 +0 -0
  174. /package/{ble_adv.uf2 → firmware/ble_adv.uf2} +0 -0
  175. /package/{eth_dhcp.uf2 → firmware/eth_dhcp.uf2} +0 -0
  176. /package/{eth_dhcp6300.uf2 → firmware/eth_dhcp6300.uf2} +0 -0
  177. /package/{eth_http.uf2 → firmware/eth_http.uf2} +0 -0
  178. /package/{eth_http6300.uf2 → firmware/eth_http6300.uf2} +0 -0
  179. /package/{ethdhcp6300_arduino.uf2 → firmware/ethdhcp6300_arduino.uf2} +0 -0
  180. /package/{examples → firmware}/gpio_test.uf2 +0 -0
  181. /package/{examples → firmware}/hello_world.uf2 +0 -0
  182. /package/{examples → firmware}/littleos.uf2 +0 -0
  183. /package/{examples → firmware}/micropython_rp2040.uf2 +0 -0
  184. /package/{examples → firmware}/micropython_rp2350.uf2 +0 -0
  185. /package/{examples → firmware}/wifi_scan.uf2 +0 -0
package/site.css ADDED
@@ -0,0 +1,308 @@
1
+ /* Pico-emu site design system — "bench instrument" theme.
2
+ * Subject: a browser emulator for RP2040/RP2350 silicon. The visual
3
+ * language comes from the lab bench, not from marketing SaaS:
4
+ * instrument chassis, VFD display well, and a 2x20 Pico pin header.
5
+ *
6
+ * Tokens
7
+ * --paper cool lab gray-green page (deliberately cool, not warm cream)
8
+ * --ink deep slate ink for prose (not pure black)
9
+ * --chassis instrument faceplate gray
10
+ * --well deep green-black VFD well (displays only, never page bg)
11
+ * --solder solder-mask teal, primary accent
12
+ * --copper copper, reserved for live/active states only
13
+ * --amber signal amber for LEDs and warnings
14
+ * --line warm-gray hairline
15
+ * Type: Space Grotesk (prose/display) + IBM Plex Mono (machine data only).
16
+ * Radii vary by hierarchy: controls 8px, panels 12px, display well 16px.
17
+ * No global soft card shadows; wells get an inset shadow instead.
18
+ */
19
+ :root {
20
+ --paper: #e9eae2;
21
+ --paper-deep: #dfe0d6;
22
+ --ink: #1f2a30;
23
+ --ink-soft: #43545d;
24
+ --chassis: #d8d6cc;
25
+ --well: #14201f;
26
+ --well-ink: #cfe3d4;
27
+ --solder: #1f6b64;
28
+ --solder-deep: #144844;
29
+ --copper: #a85b2a;
30
+ --amber: #c98a1b;
31
+ --danger: #a33b2e;
32
+ --line: #b9b7aa;
33
+ --grid: rgba(31, 42, 48, 0.055);
34
+ --radius-control: 8px;
35
+ --radius-panel: 12px;
36
+ --radius-well: 16px;
37
+ --font-prose: "Space Grotesk", "Avenir Next", "Segoe UI", system-ui, sans-serif;
38
+ --font-data: "IBM Plex Mono", "SFMono-Regular", Menlo, Consolas, monospace;
39
+ }
40
+
41
+ * { margin: 0; padding: 0; box-sizing: border-box; }
42
+
43
+ html {
44
+ -webkit-text-size-adjust: 100%;
45
+ scroll-behavior: smooth;
46
+ }
47
+
48
+ body {
49
+ font-family: var(--font-prose);
50
+ background: var(--paper);
51
+ background-image:
52
+ linear-gradient(var(--grid) 1px, transparent 1px),
53
+ linear-gradient(90deg, var(--grid) 1px, transparent 1px);
54
+ background-size: 28px 28px;
55
+ color: var(--ink);
56
+ line-height: 1.6;
57
+ min-height: 100vh;
58
+ display: flex;
59
+ flex-direction: column;
60
+ }
61
+
62
+ ::selection { background: var(--solder); color: #fff; }
63
+
64
+ :focus-visible {
65
+ outline: 3px solid var(--solder);
66
+ outline-offset: 2px;
67
+ border-radius: 4px;
68
+ }
69
+
70
+ a { color: var(--solder-deep); text-decoration-thickness: 1.5px; text-underline-offset: 3px; }
71
+ a:hover { color: var(--copper); }
72
+
73
+ code, pre, .mono, select, input, button {
74
+ font-family: var(--font-data);
75
+ }
76
+
77
+ /* ---------- Faceplate header ---------- */
78
+ .faceplate {
79
+ background: var(--chassis);
80
+ border-bottom: 2px solid var(--ink);
81
+ padding: 12px 22px;
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 18px;
85
+ flex-wrap: wrap;
86
+ position: sticky;
87
+ top: 0;
88
+ z-index: 20;
89
+ }
90
+
91
+ .brand { display: flex; align-items: center; gap: 12px; text-decoration: none; color: var(--ink); }
92
+ .brand-mark {
93
+ width: 30px; height: 30px; border-radius: 8px; flex: none;
94
+ background:
95
+ radial-gradient(circle at 30% 30%, var(--amber) 0 3px, transparent 4px),
96
+ radial-gradient(circle at 70% 30%, var(--amber) 0 3px, transparent 4px),
97
+ radial-gradient(circle at 30% 70%, var(--amber) 0 3px, transparent 4px),
98
+ radial-gradient(circle at 70% 70%, var(--amber) 0 3px, transparent 4px),
99
+ var(--solder-deep);
100
+ border: 2px solid var(--ink);
101
+ }
102
+ .brand-name { font-weight: 700; font-size: 19px; letter-spacing: -0.01em; line-height: 1.1; }
103
+ .brand-sub { font-size: 12px; color: var(--ink-soft); line-height: 1.3; }
104
+
105
+ .site-nav { display: flex; gap: 4px; margin-left: auto; }
106
+ .site-nav a {
107
+ text-decoration: none; color: var(--ink); font-weight: 500; font-size: 14px;
108
+ padding: 7px 14px; border-radius: var(--radius-control);
109
+ border: 1.5px solid transparent;
110
+ }
111
+ .site-nav a:hover { border-color: var(--ink); color: var(--ink); }
112
+ .site-nav a[aria-current="page"] { background: var(--ink); color: var(--paper); }
113
+
114
+ .status-cluster { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--ink-soft); }
115
+ .status-led { width: 10px; height: 10px; border-radius: 50%; background: #8a8a80; border: 1.5px solid var(--ink); flex: none; }
116
+ .status-led.live { background: var(--amber); }
117
+ .status { font-family: var(--font-data); font-size: 12px; }
118
+
119
+ /* ---------- Bench layout (demo) ---------- */
120
+ .bench {
121
+ display: grid;
122
+ grid-template-columns: 330px minmax(0, 1fr);
123
+ gap: 18px;
124
+ padding: 18px 22px 8px;
125
+ flex: 1;
126
+ min-height: 0;
127
+ max-width: 1440px;
128
+ width: 100%;
129
+ margin: 0 auto;
130
+ align-items: start;
131
+ }
132
+
133
+ .rail { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
134
+ .stage { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
135
+
136
+ .panel {
137
+ background: var(--chassis);
138
+ border: 1.5px solid var(--ink);
139
+ border-radius: var(--radius-panel);
140
+ padding: 14px;
141
+ }
142
+ .panel > h2, .panel > h3 {
143
+ font-size: 15px; font-weight: 700; letter-spacing: 0; margin-bottom: 10px;
144
+ }
145
+ .panel p, .panel li { font-size: 13px; color: var(--ink-soft); }
146
+ .panel table { font-size: 12px; }
147
+
148
+ /* Controls read as instrument knobs: square-ish, high contrast on press */
149
+ .btn {
150
+ background: #f2f1ea; color: var(--ink);
151
+ border: 1.5px solid var(--ink); border-radius: var(--radius-control);
152
+ padding: 7px 14px; cursor: pointer; font-size: 13px; font-weight: 500;
153
+ }
154
+ .btn:hover { background: var(--solder); border-color: var(--solder-deep); color: #fff; }
155
+ .btn:active { transform: translateY(1px); }
156
+ .btn:disabled { opacity: 0.4; cursor: not-allowed; }
157
+ .btn.primary { background: var(--solder-deep); border-color: var(--solder-deep); color: #fff; }
158
+ .btn.primary:hover { background: var(--solder); }
159
+ .btn-row { display: flex; gap: 8px; flex-wrap: wrap; }
160
+
161
+ select, input[type="text"], input:not([type]) {
162
+ background: #f4f3ec; color: var(--ink);
163
+ border: 1.5px solid var(--ink); border-radius: var(--radius-control);
164
+ padding: 6px 8px; font-size: 12px; max-width: 100%;
165
+ }
166
+ label { font-size: 12px; }
167
+
168
+ /* Serial well: the one memorable element — a VFD-style inset display */
169
+ .serial-shell {
170
+ background: var(--well);
171
+ border: 2px solid var(--ink);
172
+ border-radius: var(--radius-well);
173
+ overflow: hidden;
174
+ box-shadow: inset 0 2px 18px rgba(0, 0, 0, 0.55);
175
+ }
176
+ .serial-bar {
177
+ display: flex; justify-content: space-between; align-items: center;
178
+ padding: 10px 16px; border-bottom: 1px solid rgba(207, 227, 212, 0.22);
179
+ color: var(--well-ink); font-size: 13px; font-weight: 500;
180
+ }
181
+ #serial-output {
182
+ min-height: 340px; max-height: 52vh; overflow-y: auto;
183
+ padding: 14px 18px; color: var(--well-ink);
184
+ font-family: var(--font-data); font-size: 13px; line-height: 1.55;
185
+ white-space: pre-wrap; word-break: break-all;
186
+ background-image: repeating-linear-gradient(
187
+ to bottom, rgba(255, 255, 255, 0.022) 0 1px, transparent 1px 3px);
188
+ }
189
+
190
+ /* Pico header pin map: pads, not generic tiles */
191
+ .gpio-board {
192
+ background: #20241f; color: #d8dccf;
193
+ border: 2px solid var(--ink); border-radius: var(--radius-panel);
194
+ padding: 14px 16px;
195
+ }
196
+ .gpio-board h3 { color: #eef0e4; font-size: 14px; margin-bottom: 4px; }
197
+ .gpio-note { font-size: 12px; color: #a9b09c; margin-bottom: 10px; max-width: 70ch; }
198
+ .gpio-grid { display: grid; grid-template-columns: repeat(8, 1fr); gap: 8px; }
199
+ .gpio-pin {
200
+ aspect-ratio: 1; border-radius: 50%;
201
+ background: #10130f; border: 2px solid #5a6152;
202
+ display: flex; align-items: center; justify-content: center;
203
+ font-family: var(--font-data); font-size: 9px; color: #c9cfbb;
204
+ }
205
+ .gpio-pin.high { background: var(--amber); border-color: #7a5c10; color: #231a04; }
206
+ .gpio-pin.low { background: #10130f; }
207
+
208
+ .info-row { display: flex; justify-content: space-between; font-size: 12px; margin-top: 5px; gap: 8px; }
209
+ .info-val { font-family: var(--font-data); color: var(--solder-deep); overflow-wrap: anywhere; }
210
+ .drop-zone {
211
+ border: 2px dashed var(--solder-deep); border-radius: var(--radius-control);
212
+ padding: 18px; text-align: center; font-size: 13px; cursor: pointer;
213
+ background: rgba(31, 107, 100, 0.07);
214
+ }
215
+ .drop-zone:hover, .drop-zone.dragover { background: rgba(31, 107, 100, 0.16); border-color: var(--copper); }
216
+
217
+ /* ---------- Prose pages (about / docs) ---------- */
218
+ .page {
219
+ max-width: 1060px; width: 100%; margin: 0 auto;
220
+ padding: 36px 22px 60px;
221
+ }
222
+ .page-hero { margin-bottom: 26px; max-width: 62ch; }
223
+ .page-hero h1 {
224
+ font-size: clamp(34px, 5vw, 56px); line-height: 1.02;
225
+ letter-spacing: -0.025em; font-weight: 700; margin-bottom: 14px;
226
+ }
227
+ .page-hero p.lede { font-size: 18px; color: var(--ink-soft); max-width: 58ch; }
228
+ .page-hero .facts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
229
+ .fact {
230
+ font-family: var(--font-data); font-size: 12px;
231
+ border: 1.5px solid var(--ink); border-radius: 999px; padding: 4px 12px;
232
+ background: #f2f1ea;
233
+ }
234
+ .prose { max-width: 72ch; }
235
+ .prose h2 { font-size: 24px; letter-spacing: -0.01em; margin: 34px 0 10px; }
236
+ .prose h3 { font-size: 17px; margin: 22px 0 8px; }
237
+ .prose p { margin-bottom: 12px; color: #2c3840; }
238
+ .prose ul, .prose ol { margin: 0 0 14px 22px; color: #2c3840; }
239
+ .prose li { margin-bottom: 6px; }
240
+ .prose li::marker { color: var(--solder-deep); font-weight: 700; }
241
+
242
+ .arch-diagram {
243
+ border: 2px solid var(--ink); border-radius: var(--radius-panel);
244
+ background: var(--chassis); padding: 18px; margin: 20px 0;
245
+ font-family: var(--font-data); font-size: 12.5px; line-height: 1.7;
246
+ overflow-x: auto; white-space: pre;
247
+ }
248
+ .diagram-cap { font-size: 12.5px; color: var(--ink-soft); margin-top: -10px; margin-bottom: 18px; }
249
+
250
+ /* Support tables: the core of the docs page */
251
+ .table-scroll { overflow-x: auto; border: 2px solid var(--ink); border-radius: var(--radius-panel); background: #f4f3ec; margin: 14px 0 26px; }
252
+ table.support { border-collapse: collapse; width: 100%; min-width: 760px; font-size: 13px; }
253
+ table.support caption {
254
+ text-align: left; font-weight: 700; font-size: 16px; padding: 14px 16px 6px;
255
+ }
256
+ table.support th, table.support td {
257
+ text-align: left; vertical-align: top; padding: 9px 14px;
258
+ border-top: 1px solid var(--line); max-width: 34ch;
259
+ }
260
+ table.support thead th {
261
+ font-family: var(--font-prose); font-size: 12.5px; border-top: none;
262
+ background: var(--solder-deep); color: #f2f4ef;
263
+ }
264
+ table.support thead th:first-child { border-radius: 0; }
265
+ table.support td:first-child { font-weight: 500; }
266
+ .pill {
267
+ display: inline-block; font-family: var(--font-data); font-size: 11.5px;
268
+ border: 1.5px solid var(--ink); border-radius: 999px; padding: 1px 10px; white-space: nowrap;
269
+ }
270
+ .pill.done { background: #dcebe0; }
271
+ .pill.partial { background: #f3e6c4; }
272
+ .pill.missing { background: #f0d3cb; }
273
+ .pill.na { background: transparent; border-style: dashed; color: var(--ink-soft); }
274
+
275
+ .callout {
276
+ border-left: 5px solid var(--solder); background: #f2f1ea;
277
+ border-top: 1.5px solid var(--ink); border-right: 1.5px solid var(--ink); border-bottom: 1.5px solid var(--ink);
278
+ border-radius: 0 var(--radius-panel) var(--radius-panel) 0;
279
+ padding: 12px 16px; margin: 16px 0; font-size: 14px;
280
+ }
281
+ .callout strong { display: block; margin-bottom: 2px; }
282
+
283
+ .page-footer {
284
+ border-top: 2px solid var(--ink); margin-top: 30px; padding: 16px 22px 26px;
285
+ display: flex; flex-wrap: wrap; gap: 8px 22px; align-items: baseline;
286
+ font-size: 13px; color: var(--ink-soft);
287
+ max-width: 1440px; width: 100%; margin-left: auto; margin-right: auto;
288
+ }
289
+ .page-footer nav { display: flex; gap: 16px; }
290
+
291
+ /* ---------- Responsive ---------- */
292
+ @media (max-width: 960px) {
293
+ .bench { grid-template-columns: 1fr; }
294
+ .rail { order: 2; }
295
+ .stage { order: 1; }
296
+ #serial-output { min-height: 260px; }
297
+ .site-nav { margin-left: 0; }
298
+ }
299
+ @media (max-width: 560px) {
300
+ .faceplate { padding: 10px 14px; gap: 10px; }
301
+ .bench, .page { padding-left: 14px; padding-right: 14px; }
302
+ .gpio-grid { grid-template-columns: repeat(6, 1fr); }
303
+ }
304
+
305
+ @media (prefers-reduced-motion: reduce) {
306
+ html { scroll-behavior: auto; }
307
+ *, *::before, *::after { transition: none !important; animation: none !important; }
308
+ }
package/adc_rv32.uf2 DELETED
Binary file
package/adc_test.uf2 DELETED
Binary file
Binary file
package/ble_adv_pico2.uf2 DELETED
Binary file
package/clocks_rv32.uf2 DELETED
Binary file
package/clocks_test.uf2 DELETED
Binary file
Binary file
package/dma_rv32.uf2 DELETED
Binary file
package/dma_test.uf2 DELETED
Binary file
Binary file
package/dualcore_rv32.uf2 DELETED
Binary file
Binary file
Binary file
Binary file
package/eth_dhcp_rv32.uf2 DELETED
Binary file
Binary file
Binary file
Binary file
package/eth_http_rv32.uf2 DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/fp_test.uf2 DELETED
Binary file
package/fp_test_pico2.uf2 DELETED
Binary file
package/gpio_rv32.uf2 DELETED
Binary file
package/gpio_test.uf2 DELETED
Binary file
Binary file
package/hello_rv32.uf2 DELETED
Binary file
package/hello_usb.uf2 DELETED
Binary file
package/hello_world.uf2 DELETED
Binary file
Binary file
package/i2c_rv32.uf2 DELETED
Binary file
package/i2c_test.uf2 DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
package/littleos.uf2 DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
package/name_prompt.uf2 DELETED
Binary file
Binary file
Binary file
package/pio_rv32.uf2 DELETED
Binary file
package/pio_test.uf2 DELETED
Binary file
Binary file
package/psm_rv32.uf2 DELETED
Binary file