LEEME.md (4423B)
1 # Kit para hacer programas en C para la PicoCalc 2 3 Plantilla que **ya anda** en la PicoCalc (Pico 1 / RP2040): pantalla, teclado, 4 guardar en la SD y diagnóstico. Vos (o ChatGPT) escribís solo `app/app.c`. 5 6 Viene de los juegos de Pancho (Catan y Ajedrez para la PicoCalc), que pasaron 7 por los mismos problemas: el programa arrancaba y la pantalla quedaba en negro. 8 9 ## Probar que tu PicoCalc anda (sin compilar nada) 10 11 En `sd/` hay un "Hola" ya compilado. Copiá **el contenido** de `sd/` a la raíz 12 de la tarjeta SD (tiene que estar en FAT32, como viene): 13 14 ``` 15 sd/firmware/Hola.bin -> para el cargador viejo "Bootloader v0.5" (menú de /firmware) 16 sd/pico1-apps/Hola.uf2 -> para uf2loader (el cargador nuevo, carpeta /pico1-apps) 17 sd/HOLA.LOG, sd/HOLA.SAV -> log de diagnóstico y datos guardados (van en la raíz) 18 ``` 19 20 Elegí "Hola" en el menú del cargador. Primero aparece un log azul de arranque 21 (pantalla ok, teclado ok, SD ok...) y después un cuadrado verde que se mueve con 22 las flechas. Enter guarda la posición en `HOLA.SAV`. 23 24 ## Por qué tu hello world no mostraba nada 25 26 1. **La Pico no "tiene" pantalla**: `printf` sale por el puerto serie, no por el 27 LCD. Hay que manejar el LCD (ST7365P por SPI1, pines 10–15) a mano. Ya está 28 hecho en `comun/pico/hal_rp2040.c`. 29 2. **Los "200"** son 200 **KB**: el cargador viejo copia tu `.bin` a la flash a 30 partir de 0x10032000 (flash + 200 KB). El programa tiene que estar **enlazado** 31 en esa dirección (no alcanza con rellenar el principio): eso lo hace 32 `comun/pico/memmap_sdboot_200k.ld`. El `.uf2` para uf2loader va enlazado normal. 33 3. **El cargador salta a tu programa con las interrupciones prendidas** → se 34 cuelga antes de llegar a `main`. Se arregla parcheando el vector de reset del 35 `.bin` (`comun/tools/patch_reset.py`, lo hace `make pico`). 36 4. **El cargador deja el core 1 corriendo y dibujando** → pisa tu pantalla. 37 `hal_init()` lo resetea. 38 5. El LCD pierde los parámetros si CS sube entre el comando y sus datos. 39 40 Todo esto ya está resuelto: si usás esta plantilla, no tenés que pensar en nada. 41 42 ## Cómo trabajar con ChatGPT 43 44 1. Abrí una conversación nueva y pegá **todo** `CHATGPT.md` como primer mensaje 45 (o subilo como archivo). Ahí están las reglas y la API. 46 2. Pedile el juego. Te tiene que devolver `app.c` completo (y si hace falta 47 `app_config.h`). 48 3. Reemplazá `app/app.c`, compilá (abajo), probá. 49 4. Si algo falla, pasale el error del compilador tal cual, o lo que diga la 50 pantalla / `HOLA.LOG` de la SD. 51 52 ## Compilar 53 54 ### Opción A: sin instalar nada (GitHub) 55 56 1. Creá un repositorio en GitHub y subí esta carpeta entera (incluida la 57 carpeta oculta `.github/`). Se puede hacer arrastrando los archivos en la web. 58 2. Cada vez que cambies `app/app.c` (se puede editar desde la web con el lápiz), 59 GitHub compila solo. Pestaña **Actions** → la última ejecución → abajo, en 60 *Artifacts*, bajás **sd-picocalc** (un zip con la carpeta `sd/`). 61 3. Si falla, en la misma ejecución, el paso "compilar" muestra el error: copialo 62 y pasáselo a ChatGPT. 63 64 ### Opción B: en tu compu (Linux o WSL en Windows) 65 66 ```sh 67 sudo apt install gcc-arm-none-eabi libnewlib-arm-none-eabi cmake python3 build-essential 68 git clone --depth 1 --branch 2.3.1 https://github.com/raspberrypi/pico-sdk ~/pico-sdk 69 make pico # deja todo en sd/ 70 make pico NOMBRE=Snake # sd/firmware/Snake.bin, sd/pico1-apps/Snake.uf2 71 ``` 72 73 ### Simulador en la PC (opcional, Linux/WSL con SDL3) 74 75 ```sh 76 make sim && ./sim --scale 2 77 ``` 78 79 Corre **el mismo** `app.c` en una ventana de 320x320: se prueba en segundos sin 80 tocar la SD. Esc = volver, Enter = OK, flechas. 81 82 ## Archivos 83 84 ``` 85 app/app.c TU PROGRAMA (lo único que se cambia normalmente) 86 app/app_config.h nombre del programa y de los archivos de la SD 87 comun/ base que ya anda: no tocar 88 pico/hal.h la API de hardware (pantalla, teclado, SD, batería) 89 gfx/gfx.h dibujo: rectángulos, líneas, círculos, texto, colores 90 CHATGPT.md instrucciones para pegarle a ChatGPT si usás este kit 91 PICOCALC-MANIAS.md las mañas del aparato, para ChatGPT si escribís todo de cero 92 ``` 93 94 Para cada juego nuevo, cambiá los nombres en `app/app_config.h` (por ejemplo 95 `SNAKE.LOG`, `"SNAKE LOG"`) y compilá con `NOMBRE=Snake`; copiá a la SD los 96 `.LOG`/`.SAV` nuevos **solo la primera vez** (si los pisás, perdés lo guardado).