home / infca / trame (navigation links) DARPA was the seed

El TRAME a ENHER, anys 80

go 2 top

hardware : ROM + T48 TL866 ; SIOs i CTCs,
software : sistema operatiu, UTR, UCL
des-ensambladors, emuladors, altres

xarxa 1980 sinoptic 1987 gent
La xarxa TRAME

La xarxa TRAME es va desenvolupar a ENHER als anys 70.

A ENHER, per un cantó teniem el CONCE, Control Central de la xarxa elèctrica, que pujava o baixava la producció segons convingués.

Per l'altre banda, teniem el SICL, manegador de les estacions remotes, on es prenien mesures, es detectaven alarmes i s'efectuaven actuacions remotes.

Calia conectar el CONCE amb els SICL - això és el TRAME.

El conjunt CONCE + TRAME + SICL es un SCADA

eprom 27c64 z80
esquema mc esquema 8080
UTR PS v 9.7 UTR PSM v 9.7
Hardware de la xarxa TRAME

Es van fer algunes plaques amb la CPU Intel 8080.

El segon hardware es basava en una placa amb un xip Z80 de Zylog com CPU, aixi com 2 SIOs (serial input/output) de Zylog, 3 CTCs (counter/timer) també de Zylog, i una memoria de 64 KB entre ROM (programa) i RAM (dades)

See Z80 peripherals

Un node TRAME consisteix en 17 plaques com a màxim : fins a 16 plaques UTR o UCL, que compartien una placa MC, Memoria Comú, que és on es fa la commutació de missatges.

Com que cada SIO pot manegar 2 linies de dades, i tenim 2 SIOs per placa, aixo vol dir que una placa pot manegar 4 linies de dades

Com que un node de TRAME pot tenir fins a 16 plaques, aixo vol dir que un node TRAME pot manegar fins a 64 linies de dades.

Una de les plaques del node TRAME era la placa "mestre" i era la encarregada de inicialitzar les dades de la Memoria Comú abans que la resta de plaques entressin en funcionament.

ROM

Per programar la placa feiem servir una ROM com 27C64A (28 pins), de 64 K bits, es a dir 8 K words de 8 bits

Abans per programar-les feiem servir un Data/IO, ara es T48 TL866II programmer

T48 TL866

Ens val per llegir una 27C64 ?

Compra T48 TL866 :

Altres links :

T48 software

From "T56_TL866II USER GUIDE.pdf" :

  1. go to xgecu homepage, then download section
  2. download the XgproVxxxx_setup.exe file

Altres links :

CPU - opcodes and more

SIOs i CTCs

En treballar per interrupcions, es bàsic saber-ne la programacio, principalment per saber on tenen l'adressa del codi que executarà en rebre una interrupcio.

Podem començar per esbrinar les seves adreces, on s'hi fan les instruccions "IN" o "OUT" ( o putsé només un POST() ... )

CTC PDF, SCC = advanced SIO, Z80 CPU

Software

En el software del Z80 hi ha diferents vessants

Evidentment, la clau del funcionament de la xarxa TRAME esta en el algorisme de encaminament, que determina cap on s'ha de enviar un missatge que ve de un determinat origen i porta indicada una certa destinació.

Tenim dos tipus de software de contol de linia :

La placa es programava en ensamblador, en uns equips HP-64000

Una mostra del soft del 8080

mini sistema operatiu

Un node TRAME es un "embedded system", sistema autónom sense intervenció humana exterior, preparat per fer una tasca determinada, en aquest cas, la commutacio de missatges.
Es reb un missatge de una linia, es mira la seva destinacio, es busca el millor cami (millor linia de sortida) i s'hi envia el missatge via la MC.
Si es reb un missatge des la MC, o es per nosaltres (monitoritzacio de la xarxa) o es per la linia associada a l'adreça de memoria de on ha arribat

Qualsevol tasca de un node TRAME està sempre activada per un event, una interrupcio, com rebre un missatge de l'exterior (interrupció de la SIO) o un timeout (interrupció del CTC)

Per aquest motiu vam implementar un petit sistema operatiu, on les tasques esperen en un semàfor a que es produeixi un succés extern i llavors fan el que calgui.

El codi dins la regio critica (interrupció) sempre serà curt i lo unic que fa es

Les parts del nostre sistema operatiu son :

Una regió crítica és una variable (o un conjunt de variables) que és accedida des 2 processos, algun dels quals pot fer-ho des una interrupció. Per tenir consistència en els seus valors, es protegeixen inhibint les interrupcions mentre la tasca fora de interrupcio les modifica.

processos de una placa de TRAME

Els processos implementats en la xarxa TRAME es defineixen per 2 adreces :

La estructura típica de un procés és :

codi de inicialitzacio bucle infinit : wait ( semafor ) processar el event

Els processos que implementen el control de linia de un node TRAME son de tipus "non-preemptive", es a dir que un cop agafen el control, l'han de abandonar voluntariament, es a dir, no hi ha "preempt" (perdua de la CPU) per time-slice (acabament de un periode). Es va escollir aquest mètode pensant que totes les tasques son igual de importants, i que seran rapides i curtes. També, ens estalviem el canvi de contexte, cosa que fa mes rapid el sistema.

Non-preemptive scheduling is a method that allows the operating system to run a process until it finishes its execution, blocks, or voluntarily relinquishes the CPU. This means that a process cannot be preempted or interrupted by another process once it starts running. Non-preemptive scheduling can simplify the design and implementation of the operating system, as there is no need to deal with the issues of preemption, such as context switching, synchronization, and deadlock prevention.

Preemptive scheduling is a method that allows the operating system to interrupt a running process and switch to another process that has a higher priority or needs urgent attention. This means that a process can be preempted or stopped at any time before it completes its execution.

preemptive differences

Per protegir el sistema del malfuncionament de un dels processos que podria agafar la CPU i no retornar-la mai a les altres tasques, se implementa un "watch-dog" per hardware. És un monostable "one-shot" que es va reiniciant constantment des el bucle de canvi de procés. De no produir-se aquest reinici en un determinat període, el hardware reiniciarà la placa.

La llista generica dels processos que tenim en una placa TRAME pot ser :

Cadascun d'ells ve iniciat per una interrupcio, que posara el event en una cua i es despertarà un proces per tramitar-lo.

interrupcio per recepcio de un missatge de la linia

Quan rebem un missatge de un altre node mitjançant la SIO, despres de verificar-lo hem de enviar un ACK (si l'acceptem) o un NACK (si el rebutgem).

Si l'hem acceptat i és de dades, hem de determinar el seu seguent salt, que sempre serà per la via de la Memoria Comú (MC).

En canvi si es de control de linia (un ACK o un NACK), hem de re-enviar el missatge (si rebem un NACK) o descartar-lo (si es un ACK).

interrupcio de finalitzacio de enviament de un missatge per la linia

Si hem enviat un missatge de control de linia (ACK o NACK), no hem de fer res mes.

Si hem enviat un missatge de dades, hem de engegar un temporitzador per limitar el temps de espera de la resposta.

Finalment, mirarem a la cua de missatges per enviar si hi ha mes feina per la tasca que envia missatges per la línia. Si n'hi ha, s'enviarà per la línia si la finestra és oberta, o es queda retingut a la cua en cas de estar la finestra tancada.

interrupcio de finalitzacio de un temporitzador

A tots els efectes es considera equivalent a rebre un NACK.

Es a dir, provocarà el re-enviament de un missatge si no s'ha arribat al comptatge màxim.

recepcio de un missatge per la MC

Quan trobem un missatge a la MC (on li ha posat una altra placa del nostre node), lo unic que hem de fer es posar-lo a la cua de transmissi associada a la seva destinació, que serà buidada per la tasca de enviament cap a la linia.

UTR

Començarem per la UTR, que sembla mes senzilla

UCL

Unitat de Control de Línia - es feia servir per comunicar 2 nodes de TRAME

des-ensambladors

Llegim la EEPROM per obtenir el software de la UTR/UCL

Tenim les EEPROMs de 5 plaques a "/home/sebas/dades/enher/5_EEPROMs"
3 UCLs v 9.7 i 2 UTRs v 9.7 - una PS i una PSM

A internet trobo :

z80dasm al Minie

Amb el "Software Manager" del Minie trobo "z80dasm v 1.1.6-1"

Se instala a

sebas@minie:~/dades/enher/deASM$ which z80dasm /usr/bin/z80dasm

Primer juntem les 2 EPROMs :

sebas@minie:~/dades/enher/deASM/utr$ cat utr_ps_9-7_0.BIN utr_ps_9-7_1.BIN > utr.bin

... i el fem servir a

sebas@minie:~/dades/enher/deASM/utr$ cat codi.txt
emuladors

M'agradaria executar el ".BIN" que tinc en un emulador, veure la memoria, els registres, les adreces de I/O, etc

També puc entrar un ".HEX"

rz80

rz80 homepage, George Phillips <george@48k.ca>

$ ./rz80 -t filename.hex Output a disassembly of each instruction executed. If specified twice the output will include a register dump. Also turns on the -s option.

Amb la nostra EEPROM :

sebas@minie:~/dades/enher/emulador$ ./mk sebas@minie:~/dades/enher/emulador$ ./rz80 -t utr_PSM_v9-7_250500_0.HEX 0000 di 0001 jp $0109 0109 ld sp,$8000 010c call $2678 2678 rst $0038 ; ha llegit '0xFF' 0038 di 0039 jr $0039 looping at $0039 68 cycles 6 instructions 0.000 seconds, 1.511 MHz 11.33 ave. cycle/instruction

No agafa el contingut de la 2a EEPROM ...

It should work if you don't concatenate the two files. Something like: rz80 file1.hex file2.hex If that doesn't work you can try combining the two .hex files into a .cmd file with trld: trld file1.hex file2.hex file.cmd rz80 file.cmd You can get trld here: http://48k.ca/trld.html ; trld - convert/combine TRS-80 executables -- George
altres eines

Una vez que tienes el archivo binario que contiene el código de la EPROM, el siguiente paso es desensamblarlo.
El archivo binario puede contener código máquina o datos en un formato específico, por lo que necesitarás una herramienta que convierta ese código en un formato legible.


TCPIP brain
Reunions

  1. [19891112] Can Selga
  2. [20160401] Almogavers, el raco de l'Alba
  3. [20180927] Can Boter
  4. [20181212] Gelida
  5. [20190220] calçotada {fail}
Can Selga 12 de Novembre de 1989

La festa del TRAME !

Can Selga #1 Can Selga #2 Can Selga #3 Can Selga #4
Can Selga #5 Can Selga #6 Can Selga #7 Can Selga #8
Gelida 2018

Gelida 2018

Altres imatges

grup de joves

Joaquim


La actitud del sabio es la actitud de la duda y la actitud de la certeza es más propia del ignorante


Links


Ep ! Valid HTML 4.01!   Valid CSS! Escriu-me !
Updated 20210116 (a)  
Uf !