Tachibana

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

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:

ModoComportamiento
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.
DITHERINGTodo en tramas de densidad: la jerarquía de luminosidad de los colores se preserva como «escala de grises» texturizada.
BRUTOTodo 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

ServidorDirecciónNotas
PAVI 3617pavi.3617.fr:3617recomendado, página de inicio Téletel
MiniPavigo.minipavi.fr:516pasarela multiservicio
Otroentrada libre host:puertoopció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 MinitelOric-1 y AtmosSolo AtmosCódigo enviado
EnvíoRETURNSEP $41
VueltaCTRL+R o flecha ARRIBAFUNCT+RSEP $42
RepeticiónCTRL+EFUNCT+ESEP $43
GuíaCTRL+GFUNCT+GSEP $44
AnulaciónCTRL+A o ESCFUNCT+ASEP $45
SumarioCTRL+SFUNCT+SSEP $46
CorrecciónDELETESEP $47
SiguienteCTRL+NFUNCT+NSEP $48
Conexión/FinCTRL+CFUNCT+CSEP $49
Flechas I/DFlecha IZQUIERDA/DERECHAESC[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

← Volver a OricTel · Documentación técnica →