OricTel — funciones detalladas
Terminal Minitel 1B para Oric 1 / Atmos · C + ensamblador 6502 (cc65) · licencia EUPL 1.2
Esta página recoge todas las funciones de OricTel, con una explicación de cada una. El repositorio GitHub es la referencia actualizada; el manual de usuario y la documentación de arquitectura detallan el uso y la técnica.
Índice
1. Decodificador Vídeotex
El corazón de OricTel es un decodificador del protocolo Vídeotex Téletel/Antiope (STUM 1B), implementado como una máquina de estados completa.
Máquina de estados
Gestiona ESC, CSI (con parámetros), US, SS2, REP
(repetición), SEP, y los modos de protocolo PRO1/PRO2/PRO3.
Posicionamiento del cursor (US fila/columna), desplazamientos, borrados, retorno de carro.
Modos PRO2 / PRO3
Modo rollo, minúsculas, conmutadores de teclado, teclado extendido / modo cursor. Las flechas izquierda/derecha
solo envían secuencias de cursor (ESC[D / ESC[C) si el servidor ha activado el modo cursor
(PRO3), como en un Minitel 1B real.
Identificación del terminal
La identificación ENQ/ENQROM es deliberadamente muda: los servidores modernos (MiniPavi) reenvían la
respuesta al campo de entrada en lugar de consumirla — el mismo comportamiento que el emulador de referencia
miedit.
2. Pantalla HIRES
Resolución y rejilla
HIRES 240×200 píxeles, es decir 40 columnas × 25 filas (celdas de 6×8 píxeles). Inversión de vídeo por el bit 7, atributos serie del Oric por scanline. Una barra de estado ocupa la línea superior.
Motor de renderizado en ensamblador
Motor de tramos en 6502 (~300 ciclos por celda). Refresco por celdas «sucias»: en cada trama (50 Hz), solo se re-renderizan las celdas modificadas en el framebuffer HIRES, lo que reduce drásticamente la carga de CPU. Presupuesto adaptativo: el teclado sigue reactivo incluso durante la carga de una página. Eco de pulsación ~1 ms (renderizado de una sola celda), página completa ~0,3 s.
3. Juegos de caracteres
G0 / G1 / G2
- G0 — alfanumérico (ASCII Minitel, acentos franceses).
- G1 — mosaicos semigráficos 2×3 bloques (64 patrones), caché precalculada.
- G2 — CEPT extendido, diacríticos y acentos precompuestos (minúsculas/mayúsculas).
Conmutación G0/G1 por SI/SO; caracteres G2 vía SS2.
4. Atributos por celda
Atributos completos
Color de tinta (0-7), color de fondo (0-7), parpadeo (flash), inversión de vídeo, subrayado / separación de mosaico, ocultación (concealed), y tamaño: normal, doble altura, doble anchura, doble tamaño. Una heurística de color híbrida aproxima los colores por celda del Minitel con los atributos serie del Oric: atributos colocados en las celdas vacías con anticipación (color del texto que sigue), mosaicos en color sólido cuando el atributo coincide, dithering por luminancia como recurso.
5. Modos de renderizado (CTRL+D)
El Oric no puede colorear cada celda individualmente como el Minitel; OricTel ofrece tres estrategias conmutables en caliente:
| Modo | Comportamiento |
|---|---|
| AUTO (por defecto) | Mejor compromiso, decidido línea por línea: colores por atributos cuando la línea lo permite, dithering de luminancia para zonas multicolor densas, renderizado blanco para líneas inadecuadas. |
| DITHERING | Todo en tramas de densidad: la jerarquía de luminosidad de los colores se preserva como «escala de grises» texturizada. |
| BRUTO | Todo blanco sobre negro: máxima legibilidad de las formas, sin color. |
6. Conexión
Módem AT (único método)
OricTel controla un módem Hayes vía la ACIA 6551 en $0380 (PicoWiFiModemUSB, real o emulado por
Phosphoric --serial modem/picowifi): ATZ (reset) y luego
ATDT host:puerto (marcación = conexión TCP). El servidor se elige en el menú, por lo que se puede cambiar
sin reiniciar el emulador.
Config WiFi desde el Oric
En un montaje real LOCI + PicoWiFiModemUSB, el menú «Config WiFi» configura todo desde el Oric:
escaneo (AT$SCAN) de redes 2,4 GHz al alcance, selección, entrada de contraseña (enmascarada), y luego
asociación (AT$SSID=/AT$PASS=/ATC1) y guardado en la NVRAM del Pico
(AT&W).
Pasarela WebSocket
orictel_bridge.py (Python asyncio) retransmite TCP (puerto 3615) a un servidor Minitel WebSocket
(ws://3617.fr/ws). Relé binario transparente, mono-cliente, estadísticas, modo -v.
7. Servidores Minitel
| Servidor | Dirección | Notas |
|---|---|---|
| PAVI 3617 | pavi.3617.fr:3617 | recomendado, página de inicio Téletel |
| MiniPavi | go.minipavi.fr:516 | pasarela multiservicio |
| Otro | entrada libre host:puerto | opción 3 del menú de servidor |
8. Teclado Minitel
OricTel funciona en Oric-1 y Atmos. Las teclas de función usan CTRL+letra (ambas máquinas) o FUNCT+letra (solo Atmos).
| Función Minitel | Oric-1 y Atmos | Solo Atmos | Código enviado |
|---|---|---|---|
| Envío | RETURN | SEP $41 | |
| Vuelta | CTRL+R o flecha ARRIBA | FUNCT+R | SEP $42 |
| Repetición | CTRL+E | FUNCT+E | SEP $43 |
| Guía | CTRL+G | FUNCT+G | SEP $44 |
| Anulación | CTRL+A o ESC | FUNCT+A | SEP $45 |
| Sumario | CTRL+S | FUNCT+S | SEP $46 |
| Corrección | DELETE | SEP $47 | |
| Siguiente | CTRL+N | FUNCT+N | SEP $48 |
| Conexión/Fin | CTRL+C | FUNCT+C | SEP $49 |
| Flechas I/D | Flecha IZQUIERDA/DERECHA | ESC[D / ESC[C (modo cursor PRO3) |
Atajos locales (no envían nada al servidor): CTRL+D cambia el modo de
renderizado, CTRL+L borra la pantalla localmente, CTRL+F reinicia el enlace serie (ACIA).
9. La pantalla y el estado
Zona de pantalla e indicador de enlace
Líneas 1-24: la página Vídeotex del servidor (40 columnas). Línea de estado (arriba a la
derecha): C invertido = datos recibidos recientemente (conectado), F = sin datos desde
~30 s (enlace probablemente cortado). Cursor: barra parpadeante bajo la celda actual cuando el
servidor lo activa (zonas de entrada). Pantalla de bienvenida al inicio con jingle AY-3-8912.
10. Especificaciones técnicas
Serie (ACIA 6551)
ACIA 6551 en la base LOCI ($0380). Registros: dato $0380, estado/reset
$0381, comando $0382, control $0383. Sondeo puro del registro STATUS,
sin IRQ de ACIA; las escrituras de registros están protegidas SEI/PLP (restricción MIA del LOCI
real). Cola de emisión software no bloqueante drenada por el bucle principal.
Memoria
TAP ~23 KB; código+datos bajo $9800 (pila cc65 en $0800); framebuffer HIRES
$A000-$BF3F. Barra de estado en $BB80+.
Protocolo y rendimiento
Vídeotex Téletel/Antiope (STUM 1B). Página completa ~0,3 s, eco de pulsación ~1 ms. Referencia de validez: el emulador JS miedit/telenet.
11. Compilación y ejecución
make # compila orictel.tap
make dsk # disquete Sedoric orictel.dsk (MFM_DISK, arrancable)
make test # pruebas host (Vídeotex, ACIA/SMC, módem AT, teclado, bridge)
make fuzz # fuzzing del decodificador Vídeotex (ASAN/UBSAN)
make coverage # cobertura host gcov
make run # ejecuta en Phosphoric en modo módem AT
make run-ws # ejecuta la pasarela WebSocket + el emulador
make run-dsk # arranque Microdisc del disquete Sedoric
Requisitos: cc65 (≥ 2.19), Python 3.8+ con websockets ≥ 12.0 (solo bridge), el
emulador Phosphoric (o un LOCI/PicoWiFiModemUSB físico), y las ROM del Oric
(basic11b.rom para Atmos, basic10.rom para Oric-1).
12. Limitaciones conocidas
- Los colores por celda del Minitel se aproximan con los atributos serie del Oric: en una línea sin celda vacía utilizable, el color de un texto puede perderse (renderizado blanco).
- El modo MIXED (teleinformática de 80 columnas) no está soportado.
- La identificación del terminal (ENQ/ENQROM) es deliberadamente muda (alineado con miedit).
- La configuración V23 real (1200/75 baudios, 7E1) para hardware real Oric + módem está en la hoja de ruta; bajo emulador la transferencia es instantánea.