Brevet FR2362448A1 — publié le 19780317

La présente Invention concerne les diagnostics par radian tions. Cette invention concerne plus particulièrement un système de tomographie axiale dans lequel la collecte R d'une pluralité d'ensembles de données correspondant à la transmission ou a l'ab- sorption d'un ou de plusieurs faisceaux de radiations pénétrantes à travers une tranche plane d'un objet à analyser, le traitement d'une pluralité d'ensembles de données collectés et la visualisa- tion des données se font indépendamment les uns des autres. Dans le brevet US N03.778.614,on décrit un procédé et un dispositif pour examiner un objet au moyen de rayons X ou Dans un mode de réalisation commercial de ce procédé, il est prévu une source de rayons X agencée de façon à transmettre un faisceau de radiations à travers une tranche plane d'un objet à examiner, des moyens de détection pour détecteur le faisceau transmis après qu'il a passé à travers l'objet/des moyens pour mettre séquentiel- lement les moyens de source et de détecteur en mouvement de translation et de rotation par rapport à l'objet pendant l'examen radiographique.Du fait que le faisceau irradiant est parallèle à chacun des autres faisceaux irradiants au cours de chaque traversée latérale de la source et du détecteur, le traitement des données doit être effectué simultanément avec la collecte des données de ce balayage particulier, et il en résulte que la reconstitution des données collectées est disponible immédiatement à la fin de la collecte de données on très peu après celle-ci. Dans un mode de réalisation plus récent,utilisant des radiations en faisceau en ventaille temps de balayage réel est diminué, mais, puisque la visualisation doit attendre jusqu'à ce que la collecte des données et le traitement de celles-ci soient terminés, il s'écoule un temps significatif (de l'ordre de quelques minutes environ) avant que la reconstitution puisse être vue.Mais, avec ces systèmes, on/peut voir le résultat d'un balayage particulier jusqu'à ce que la collecte des données et leur traitement soient terminés, et la collecte des données ainsi que leur traitement ne peuvent pas se faire en mSme temps que la visualisation d'un balayage précédent. Cela limite sérieusement la prestation du patient, puisque pendant le temps pendant lequel un balayage particulier est visualisé, le balayage principal et le dispositif de collecte de données ne peuvent pas collecter d'autres données de balayages ul térieurs. De plus, le systèm ci-dessus mentionné est basé sur l'emploi d'un calculateur unique qui commande tout ce qui concerne la collecte des données, leur traitement et leur visualisation. Si ce calculateur unique tombe en panne, le système tout entier est rendu non-opérationnel et aucune des tâches indiquées cidessus (c'est-A-dire collecte de données, traitement de données et visualisation) ne peuvent itre remplies. Des systèmes qui sont actuellement en concurrence avec le système mentionné ci-dessus possèdent des inconvénients analogues, bien qu'ils permettent une visualisation indépendante pendant laquelle une collecte et un traitement de données sont effectués pour un balayage subséquent. Toutefois,pour ces systè- mes en compétition, comme pour le système décrit dans le paragraphe précédent, les données originellement collectées (c1est-à-dire les données brutes) sont détruites pendant le processus de traite nent et de reconstitution, ce qui empêche de s'y référer ou de les utiliser ultérieurement. le radiologue ne peut donc, par la suite, traiter les données brutes pour en obtenir une autre reconstitution ou évaluation différente. A la place de cela, il faut procé- der à un nouveau balayage,ou à une série de balayages,pour recueillir de nouvelles données brutes et les traiter con@rmément à la technique particulière désirée. Il serait par conséquent désirable de disposer d'un sys- tème de tomographie axiale qui ne soit pas sujet aux inconvénients indiqués ci-dessus. Il serait en particulier désirable d'avoir un système de tomographie axiale dans lequel les moyens de collec- te des données, les moyens de traitement des données collectées, et les moyens de visualisation des données traitées fonctionnent. indépendamment les uns des autres de façon à ce que chaque opéra- tion du système soit conduite indépendamment des autres, préféra- blement sans destruction des données collectées originelles. le but principal de la présente invention est par consé- quent la réalisation d'un système de tomographie axiale nouveau. Un autre but de la présente invention est la réalisation d'un système de tomographie axiale nouveau qui ne soit pas sujet aux déficiences mentionnées ci-dessus. Un autre but de la présente invention est la réalisa- tion d'un système de tomographie axiale nouveau dans lequel les moyens de collectç des données, les moyens de traitement des données collectées, et les moyens de visualisation des données traitées opèrent indépendamment les uns des autres. Un autre but de la présente invention encore est la réalisation d'un système de tomographie axiale nouveau dans lequel le traitement et la reconstitution des données ne détruisent pas les données collectées originelles (c'est-à-dire les données brutes). Un autre but de la présente invention encore est la réalisation d'un système de tomographie axiale nouveau dans lequel les moyens de collecte des données, les moyens de traitement des données collectées, et les moyens de visualisation des données traitées opèrent indépendamment les uni des autres, de sorte que chacune des opérations du système peut être conduite indépendam- ment sans destruction des données collectées originelles. Ces buts, caractéristiques et avantages de la présente invention,ainsi que d'autres Japparattront plus clairement au cours de la description détaillée qui va suivre. Ces buts, caractéristiques et avantages de la présente invention sont atteints ou obtenus, selon celle-oi,par la réalisa- tion d'un système de toiographie axiale comportant des moyens de tomographie axiale pour la collecte d'une pluralité d'ensembles de données correspondant à la transmission ou à l'absorption d'une pluralité de faisceaux de radiations pénétrantes à travers une tranche plane d'un objet à analyser comprenant des moyens pour mettre en place un objet à analyier,des moyens de source et de détection pour produire et diriger un ou plusieurs faisceaux de radiations pénétrantes depuis la source Jusqu'aux doyens de détection à travers I' objet, et des moyens pour mettre en rotation (et éventuellement en translation)les moyens de source et de dé- tection par rapport à l'objet, de façon à collecter une pluralité d1enseibles de données correspondant à la transmission ou à l'absorption par l'objet d'une pluralité de faisceaux de radiations pénétrantes;; le système comporte de plus des moyens de traitement des ensembles de données collectées de manière à obtenir un coefficient d'atténuation pour chacun d'une pluralité d'éléments individuels de matrice de la tranche plane de l'objet à analyser, les moyens de collecte de la pluralité d'ensembles de données, les moyens de traitement des données et les moyens de visualisation étant agencés de façon à opérer indépendamment les uns des autres,de façon à ce que chaque opération majeure du système (c'est-à-dire collecte de données, traitement de données et visualisation de données) puis être conduite indépendamment de chacune des autres. les moyens de tomographie axiale servant à la collecte de la pluralité d'ensembles de données possèdent une source de radiations pénétrantes capable de transmettre un faisceau de telles radiations travers une tranche plane d'un objet à examiner, des moyens de détection pour détecter le faisceau transmis après qu'il a passé à travers l1objet, et des moyens pour mettre séquentiellement les moyens de source et de détection en mouvement de rotation et de translation par rapport à l'objet pendant l'exa- men radiographique. De tels moyens de tomographie axiale sont d- crits, par exemple, dans le brevet U.S. N 3.778.614.Selon un système agencé différemment, un faisceau en forme d'éventail de radiations pénétrantes est dirigé, de façon à traverser une tranche plane de l'objet à analyser, vers un détecteur sensible aux radiations, pour en déduire un ensemble de données correspondant à la transmission ou à l'absorption par l'objet des radiations pénétran- tes le long d'une pluralité de lignes divergentes allant de la source au détecteur. On obtient un certain nombre de tels ensem bleus de données correspondant à différents angles de rotation par rapport au centre de la tranche plane analysée.La différence entre ce système et celui précédemment décrit dans le brevet US ci-dessus mentionné consiste en ce que ce système n'implique pas de translation latérale de la source et du détecteur, car la rotation de la source et du détecteur autour de l'objet en cours d'examen fournit des ensembles de données suffisants pour pers t tre la reconstitution nécessaire de la tranche plane particulière examinée. Une irradiation en forme d'éventail peut aussi entre utilisée en conjonction avec des balayages nécessitant une translation de la source et du détecteur. Chacun des systèmes indiqués ci-dessus peut constituer. l'un des sous-systèmes composant le sys tème de tomographie axiale général ici décrit,mais encore d'autres systèmes de tomographie axiale,qui peuvent itre différents des agen- cements ci-dessus,peuvent aussi être utilisés si on le désire. Fiv l représente schématiquement,sous forme de blocsdiagrammes les sous-systèmes de balayage,de traitement et de visualisation d'un système de tomographie axiale dans lequel sont incorporées les caractéristiques de la présente invention Figl.2 représente schématiquement,en partie sous forme de blocs-diagrammes, le sous-système de balayage d'un système de tomographie axiale dans lequel sont incorporées les caractéristiques de la présente invention;; Fig.3 est une représentation schématique montrant la transformation des données ombrographiques originelles en don nées ombrographiques parallèles Figl.4 montre graphiquement,sous forme de tableau,la corrélation des données du rayon central I et du rayon I'. Infin,la figure 5 représente schématiquement un fantô- me utilisé pour la détermination de la corrélation que montre graphiquement la figure 4. Dans la description qui va suivre de la présente invention,on considère que les circuits électroniques et les éléments spécifique s du mode de réalisation de cette invention sont bien connus, et/ou sont du domaine de compétence de ceux qui ont ltex- périence de cette technique,en ce qui concerne cette description. En conséquenoe,puisque ces circuits et éléments ne font pas partie de la présente invention, ils ne seront pas décrits spécifiquement en détails. On se référera maintenant à la figure 1 qui représente le système de tomographie axiale 10 de la présente invention Plus précisément, le système 10 comporte trois sous-systèmes qui peuvent fonctionner indépendamment, à savoir un sous-système de balayage 12,un sous-système de processeur 14 et un sous-système de wisuali- nation 16.Un sous-système de balayage 18 balaye l'objet à analyser en produisant 180 ensembles de données ou plus qui sont enregistrés sur bande magnétique dans ltearegistreur 20. La bande est transportée ensuite dans le sous-système processeur 14 qui traite les données de la bande de façon à produire une matrice de coefficients d'atténuation correspondant à la tranche plane de l'objet en cours d'analyse. les données représentant la matrice de coefficients d'atténuation sont enregistréessur un disque souple d'un enregistreur à disques souples 22. L'enregistrement sur disque souple est transporté ensuite dans le sous-système de visualisation 16 dans lequel les données enregistrées sur le disque souple sont lues et traitées par des troisièmes moyens de stockage et de traitement 24, et visualisées sur une console de visualisation 26. On peut, si on le désire, raire une copie en dur de la visualisation au moyen d'une machine à copier 28. On se référera maintenant au sous-système de balayage 12. Cette partie du système fonctionne de la manière suivante: l'opérateur tape sur le clavier 29 de la console des instructions qui sont transmises aux moyens de stockage et de traitement 30, puis aux autres parties du systbme, afin de mettre le dispositif de balayage en état de fonctionner. De façon plus précise, l'opérateur tape des instructions qui activent le système. Celuici effectue alors certaines vérifications pour déterminer si certaines conditions de sécurité en cas de défaut sont satisfai- tes.Ces conditions comprennent une alimentation suffisante on huile de refroidissement du tube à rayons X associé au dispositif de balayage 18 pour qu'il soit bien reProidi,la fermeture de la porte de la salle d'examen do façon à ce que des rayons X ne puissent passer dans des zones indésirables, l'état opération- nel de l'horloge des moyens de stockage et de traitement de données 30,et enfin l'alimentation on puissance de tous les sous-systèmes. Si toutes les vérifications de ces premières conditions sont satisfaisantes, les signaux de données et de stooka- go le signalent aux moyens de sécurité afin que toutes les sour- ces de puissance associées -puissent être alimentées en énergie pendant un intervalle de temps court. les moyens de stockage et de traitement de données effectuent alors,pendant ce court intervalle, une seconde série de vérifications. Plus précisément, ils vérifient si les radiations qui sont détectées par le diteo- teur de référence sa de la figure 1 sont dans les limites prescrites, si une tension et un courant convenables sont appliqués à la source 60 , et si l'horloge de balayage est opérationnelle. De plus, un autre signal de sécurité en cas de défaut est engen- dré à ce moment par l'envoi d'une séquence d'impulsions à courts intervalles (par exemple une seconde ou moins) par les moyens de stockage et de traitement 30 à l'alimentation en puissance du tube à rayons X. S'il existe un défaut dans les moyens de stockage et de traitement 30, ou une défectuosité quelque part dans le système, l'envoi d'autres impulsions est interrompu, et le système revient en situation normale de "repos" dans laquelle toutes les sources de puissance associées au soussystème de balayage sont isolées des unités qu'elles alimentent. En revanche,si les moyens de stockage et de traitement sont bien opérationnels et si tous les paramètres mesurés du système sont dans les limites qui leur ont été prescrites,le dispositif de balayage commence une traversée latérale de l'objet en faisant mouvoir la source 60 latéralement,en la faisant sortir d'une ré- gion de protection assurde par l'un des écrans 88. Une troisième série de vérifications de sécurité en cas de défaut est alors exécutée par le système de traitement de données et les moyens de stockage 30.Le troisième enRemble de vérifications comporte plus précisément la vérification que tous les détecteurs indiv- duels fonctionnent dans une gamme convenable,que la vitesse laté- rale de la source est comprise dans les limites qui lui ont été assignées, et qu'i la fin d'un balayage latéral donné le dispo sitar de balayage effectue bien une rotation jusqu'à la position angulaire suivante. pendant le balayage latéral, les moyens de stockage et de traitement 30 collectent les données recueillies par les douze détecteurs 76 et par le détecteur de référence 92. Pendant chaque traversée latérale de l'objet analysé,les moyens de stockage et de traitement 30 collectent les données de 750 points de données correspondant à un point de données pour chaque 100 microns de traversée latérale du disque de balayage. les données recueillies pendant chaque traversée sont enregistrées sur une bande magnéti- que de l'enregistreur 20. Pour un système possédant douze détec- tours (le détecteur de référence exclu ) disposés à espacements angulaires de iodles moyens de stockage et de traitement 30 ont rait tourner le dispositif de balayage 18 de 120 à la fin de chaque traversée latérale;ils verrouillent alors la position angulaire du dispositif de balayage, et inversent la direction latérale du/iispositif de balayage pour la traversée immédiatement suivante. le codeur de position angulaire 94 lit la position angulaire précise du dispositif de balayage par rapport à l'objet analysé.Un balayage latéral est fait pour chacune des 15 positions angulaires différentes ou plus, de façon à recueillir 180 ensembles de données ombrographiques, ou plus. Il y a un ensemble de données ombrographiques pour chaque intervalle de 16 de rotation angulaire autour de l'objet. Lorsque la traversée de chacune des 15 positions angulaires, ou plus, est terminée, les moyens de stockage et de traitement 30 font automatiquement avancer le dispositif de transport de l'objet (non représenté) d'une distance présélectionnée en direction axiale, afin de recueillir des données correspondant à une seconde tranche plane de l'objet analysé. La séquence est répétée pour n tranches, ième prédéterminées par l'opérateur,et,à la fin de la n de ces tranches, les moyens de stockage et de traitement 30 mettent auto matiquement 1 source au repos et rebobinent la bande de lten- registreur 20. Dans un exemple typique,les moyens de stockage et de traitement 30 du sous-système de balayage 12 comportent les &num;1- ments principaux suivants:une unité de processeur central "Nova 1200" possédant une mémoire de 16K (Modèle 8189 commercialisé par la Société "Data General Corporation n de Southborough, Massachusetta), une mémoire additionnelle de 16K (Modèle 8117 commercialisé par la Société "Data General Corporation"), une unité d'entrée/sortie de base munie d'une horloge en temps réel (Modèle 4007/4010 commercialisé par la Société "Data General Corporation"), une commande d'unité à bande (Modèle "Nova-Perte 3120" commercialisé par la Société "Ball Brothers Research Corporation" de Santa Clara, Californie), une unité à bande de 30 cm (Modèle "5840-9" commercialisé par la Société "Pertec Peripheral Equipment Division" de Chatsworth,Californie),un terminal à tube cathodique (Modèle "Mini-Bee 4" de la Société Beehive Medical Computer Systems, Inc", de Sunnyvale, Calirornie) et les circuits associés servant à la commande des fonctions du sous-système. les descriptions et diagrammes, par sous-program- mes, des programmes des moyens de stockage et de traitement de données 30 associés au zous-système de balayage 12 sont incorpo rés à la présente description dans l'Annexe A. le programme luimême, rédigé pour ce sous-système en lage Fortran It, est in corporé également dans l'Annexe A, Parties I à XI. En se référant maintenant au sous-système de processeur 14, la console de processeur 51 comporte un terminal à clavier 32 pour entrée/sortie du tube cathodique ,qui est connecté interactivement à des seconds moyens de stockage et de traitement de données 34 qui sont couplés, à leur tour,à une platine d'ea- traînment de bande magnétique 36,et permettent de lire les données brutes (ou pré-traitées) enregistrées sur la bande qui a btb transportée de l'enregistreur de balayage 20 sur la platine de lecture de bande 36. Le sous-système de processeur 14 traite les données ombrographiques brutes (ou pré-traitées) de la bande de l'unité 36 afin d'en tirer des données tomographiques reconsti- tuées (c'est-à-dire une matrice de coefficients d'absorption de la tranche plane de l'objet analysé).Ces dernières ont alors stockées sur un "disque souple" au moyen de l'enregistreur sur disquemagnétique 22, Il est préférable d'utiliser un disque d'enregistrement souple différent pour chaque patient. Les données fournies au processeur sont traitées de la façon suivante: les moyens de stockage et de traitement de données 34 commencent par corriger les données d1 ombrogramme des décala- ges affectant les lectures de détecteurs, qui sont fournis par le détecteur 76, par soustraction aux lectures I (fournies par le détecteur 76 pendant que la source 60 balaye l'objet à analyser) des lectures 1d (obtenues lorsque la source est protégée par les écrans de plomb 88). On minimalise ainsi les erreurs dues à des décalages affectant les lectures des détecteurs individuels. les moyens de stockage et de traitement de données 34 corrigent ensuite les écarts de temps affectant les signaux détectés I, qui sont produits par des variations de la vitesse de balayage pendant Sa translation latérale,ainsi que les variations d'intensité de la source de radiations pénétrantes. Cette correct tion est faite par une autre normalisation des données déjà normalisées précédemment, à l'aide du signal 1r fourni par le détecteur de référence 92. le sous-systère de processeur 14 règle ensuite le facteur d1échelle de chacun des ensembles de données ombrographiques au niveau d'tbsarption qui correspond à l'absorption détectée dans le bloc de plastique 70, de façon à ce que seules des différences par rapport au coefficient d'absorp- tion dans le plastique soient utilisées. Dans cette correction de facteur d'échelle, le facteur d1échelle d'absorption du bloc 70 doit être compensé pour les différences entre les longueurs de parcours dans le matériau plastique des rayons parallles correspondants.On 1's représenté sur la figure 3 sur laquelle le rayon 1 de gauche de la rangée de faisceaux en éventail est représenté aux extrémités opposées du chemin de translation latérale de la rangée en éventail. Ces rayons 1 constituent un ensemble de rayons parallèles et, de façon semblable, le rayon central c et le rayon r de droite, à chaque extrémité latérale du parcours, constituent respectivement deux des rayons d'un second et d'un troisième ensemble de rayons parallèles. les données ombrographiques parallèles des ensembles de rayons parallèles c, 1 et r sont représentées par les ensembles de données ombrographiques (a) de la figure 3. Comme on peut le voir, les centres de chacun des ensembles de données des rayons ombrographiques parallèles sont déportés latéralement les uns par rapport aux autres,et il est par conséquent souhaitable de recentrer les ensembles des données de rayons ombrographiques parallèles et d'éliminer les données de rayons tombant en dehors de la région dtimage intéressante.En conséquence,le sous-système de processeur 14 élimine les données ombrographiques parallèles obtenues en dehors de la région d'image désirée, en laissant approximativement 509 points de données, et il décale les centres 01, C2 et 03 de chacun des ensembles de rayons parallèles jusqu'au même point latéral, comme on le voit sur les courbes de données ombrographiques c, 1 et r du groupe (b) de la figure 3. Au cours d'une autre étape du traitement, les moyens de stockage et de traitement 34 corrigent chacun des ensembles de données de rayons ombrographiques parallèles pour compenser: lteffet de la présence d'un matériau à tort Z, tel qu'un os, la diffusion dans L'objet des rayons X par effet Compton,les ouvertures du collimateur de source 62 et du collimateur de détecteur 74, les variations des énergies des rayons X , ctest-i-dire leur polychromatisme, et l'hystérésis du détecteur, cela à l'aide de données de corrélation, représentées graphiquement sur la figure 4, engendrées en utilisant le fantôme 38, comme on l'a représenté sur la figure 5. Plus précisément, le fant8De 38 comporte une partie d'os (ou de matériau équivalent i l'os)40 en forme de coin et une Partie d'eau 42 en forme de coin, telles que l'épaisseur du fantôme puisse varier de 100% d'os à 100 d'eau. Ces deux parties composantes sont maintenues dans des enveloppes minces en forme de coin en plastique,par exemple réalisées avec produit désigné sous le nom commercial "Lucite", Le fantasme est balayé latéralement par le- dispositif de balayage 18 et les données du rayon central 10 sont enregistrées. Ces données sont d'aberd converties en logarithmes naturels correspondants,puis ensuite tracées en fonction du logarithme naturel de la valeur (Io) qu'elles auraient dû avoir si le faisceau était toujours passé à travers 100% d'eau. Cette corrélation est stockée dans les moyens de stockage et de traite ment 34 sous la forme d'un tableau t i consultera (représenté ici graphiquement sur la figure 4),de sorte qu'en s'y référant, une valeur particulière I correspondant à un balayage d'un objet (par exemple une tête ) puisse entre corrigée pour la quantité d'os à travers laquelle est passé le faisceau Cela complète le prétraite- ment des données, dont tout ou partie peut etre effectué dans les moyens de stockage et de traitement 30 mais i 'est préférablement dans les moyens de stockage et de prétraitement 34. Ensuite, chacun des ensembles de données de rayons ombrographiques parallèles corrigés subit une convolution pour éliminer les bruits de fond indésirables dans la matrice des coefficients d'atténuation lorsque les 180 ensembles de données de rayons parallèles seront rétro-projetés au cours d'une étape ultérieure du processus de reconstitution. Plus précisément,on utilise pour la convolution appliquée aux données de rayons ombrogra phiques une certaine fonction de convolution préférée, décrite par L A Shepp et B.F. Logan (1IEEE Transactions, Nuclear Science, NS 21, 21-43", Juin 1974), afin d'obtenir des ensembles de données de rayons ombrographiques convolutés.Diverses fonctions de convolution différentes peuvent etre utilisées dans cette étape du traitement, suivent les caractéristiques que l'on souhaite accentuer dans la matrice de coefficients d'atténuation. Par exemple,une fonction de convolution peut être utilisée pour accentuer des différences de densité relativement grandes, telles que celles qui sont obtenues entre os et tissu, tandis qu'uns seconde fonction de convolution différente peut etre utilisée si le radiologue souhaite accentuer une petite différence de densité dans le tissu analysé. L1opérateur ou le radiologue a, au cours de cette étape du traitement, la liberté de sélectionner une fonction de convolu tion Après convolution de chacun des ensembles de données de ra yons parallèles corrigés, les 180 ensembles de données de rayons parallèles seront rétro-projetés pour en déduire la matrice do coefficients d'absorption. Au cours de l'tape de rétro-projection, on obtient une matrice de 256 x 256 élézients su total. Mais chacun des ensembles des données de rayons parallèles correspond à des rayons parallè- les dont la largeur est notablement moindre qu'un élément individuel de matrice intersecté par le rayon correspondant On utilise donc une méthode d'interpolation qui dilate les (approximativement) 509 points ombrographiques parallèles en (approximativement) 2.000 points de données ombrographiques parallèles, et qui attribue un coefficient d 'absorption à chacun des éléments individuels de la matrice correspondant au coefficient d'absorption du rayon qui est le plus voisin du centre de la cellule de matrice. Après que cette étape a été exécutée pour une tranche plane donnée,la matrice des coefficients d'absorption est stockée sur un disque souple au moyen de l'enregistreur sur disque souple 22. Dans une réalisation qui est actuellement prérrOe,le disque d'enregistrement souple est un disque de stockageà grande densité capable de stocker 300.000 mots sur chacune de ses races. Dans une matrice d'absorption tomographique typique, correspondant à un tranche plane à travers l'onjet en cours d'analyse, les coefficients d'absorption peuvent varier entre les valeurs + 1000 et - 1.000, ce qui exigerait 11 bits par mot 65.536 mots sont typiquement nécessaires pour décrire la matrice 256 x 256. La quantité d'information à stocker peut toutefois être notablement réduite par la réduction du nombre des éléments de la matrice @ approximativement 50.000 par l'élimination des parties de l'image qui ne présentent pas d'intérêt (c'est-à-dire les coins d'un rectangle situés en dehors du cercle d'intérêt délimitant la tranche plane utile). En second lieu,en n'enregistrant que la différence de densités entre éléments de matrice consécutifs dans toute forme prédéterminée, la dimension du mot peut autre réduite à 8 bits; Deux mots de 8 bits peuvent entre stockés dans chaque mot de 16 bits du calculateur.La matrice peut donc entre réduite à approximativement 25.000 mots, ce qui permet de stocker 12 images sur chaque face du disque souple. Il est bien sûr possible,si on le désire, de stocker moins de douze images sur chaque face du disque souple, ou bien de ne pas faire la réduction indiquée ci-dessus. Après stockage des données d'une tranche plane donnée sur le disque souple, l'opération est répétée pour le stockage du nombre n de tranches planes prises par le balayage.le sous- système processeur termine alors sa séquence et réenroule la bande sur sa bobine originelle,qui avait Cté transportée dans l'enregis- treur bande 36. Dans un exemple typique,le sous-système processeur comporte une unité de stockage et de traitement de données "Eclipse 5.2001' possédant une mémoire de 16K (Modèle 8404) ainsi qu'un magasin de commande inscriptible (Modèle "8.415"), un processeur à virgule flottante (Modèle "8.413"), quatre unités de mémoire de 8K (Modèle "8.418"), une unité d'entrée/sorti de base avec horloge en temps réel (Modèle "4007/40l01'),une commende de disque (1Modèle "4046") -toutes les unités ci-dessus étant com mercialisées par la Société "Data General Corporation" - une commande de disque souple Société "Advanced Electronic Design, Inc.", de Sunnyvale,Califor- nie) ,une commande de bande (Modèle "Nova-Fertec 3120" commercia- lisé par la Société Hall Brothers Research Corp." de Santa Clara, Oalifornie),une unité à disques (Modèle "31" commercialisé par la Société "Diablo Systems Inc." de Hayward, Californie), une unité à bandes de 30 cm (Modèle "5840-9" commercialisé par la Société châssis associés (Modèles "3100P, FD400, FFD/E, SB et CS "commerdisques souples duale avec ses commandes, son stockage et ses cialisés par la Société "Advanced Electronic Design " de Sunnyvale, Californie), un terminal à tube cathodique (Modèle "MiniBee-4" commercialisé par la Société tEechLve Medical Computer Systems Inc." de Sunnyvale, Calitornle) et une unité adaptatrice de disques (Modèle "4047" commercialisé par la Société "Data General Corp.") ,ainsi que tous les circuits nécessaires pour la commande des fonctions du sous-système. Les descriptions et les diagrammes des programmes des moyens de stockage et de traitement de données 34 associés au sous-système de processeur 14, pour chaque aousprogramme, sont incorporés dans la présente description en Annexe B. Le programme lui-même, rédigé pour ce sous-système en langage Fortran V,est incorporé dans l'Annexe B, parties I-x. En se référant de nouveau à la figure l,le sous-système de visualisation 16 comporte une console de visualisation 48 possédant un clavier 50, connecté interactivement à des troisièmes moyens de stockage et de traitement de données 24,qui sont eux-mêmes interactivement connectés à une unité lectrice de disques souples 52 et à une unité de visualisation à tube cathodique 26. En cours de fonctionnement, le disque souple sur lequel ont été enregistrées certaines données tomographiques est placé sur un dépliant avec d'autres informations de diagnostic, telles que des clichés de rayons classiques, des rapports, etc. L'examinuteur retire l'enregistrement sur disque souple du dépliant et l'insère dans la lectrice de disque souple 52. A laide du clavier 50 de la console de visualisation 48, l'opérateur introduit les informations pour choisir une tranche tomographique dési- rée de l'objet analysé. Les moyens de stockage et de traitement 24 commandent à la lectrice de disques souples 52 de lire les données tomographiques correspondant à la tranche sélectionnée. les moyens de stockage et de traitement 24 convertissent les données à grande densité du disque souple en format de ta blean video et les transmettent à la visualisatrice à tube cathodi que 26 pour visualisation. On peut obtenir, si on le désire,une copie en dur de la visualisation en manoeuvrant les commandes appropriées sur le clavier 50 afin d'obtenir une copie en dur de l'information visualisée sur le tube cathodique. les moyens de stockage et de traitement 24 peuvent être programmés de façon à sélectionner certaines données tombant dans une certaine fenêtre de largeur et de position variables, et à les afficher sur la visualisatrice à tube cathodique 26. Flus précisément, ces données sont stockées sur le disque souple dans une certaine gamine de valeurs correspondant à une certaine gamme de densités des coefficients d'absorption dans la matrice tomogra phique de ces coefficients. les moyens de stockage et de traitement 24 peuvent sélectionner et afficher une certaine garnie de valeurs en réponse aux commandes du clavier 50. Dans un exemple typique,le sous-systime de visualisation 16 comporte des moyens de stockage et de traitement de données "Nova 1200" possédant une mémoire de 16K (Modèle "8184"),une unité de mémoire de 16K (Modèle "8117"), une unité d'entrée/sortie de base avec horloge en temps réel (Modèle "4007/4010")- tous ces éléments étant commercialisés par la Société "Data General Corps - une unité de commande de disques souples Modèle "I/F" commercialisée par la Société "Advanced Electrcnic Design", une unité électronique de visualisation (Modèle "200" commercialisé par la Société "lexi- Data Corp." de Lexington, Massachusetts), un clavier (Modèle "Mini-Hec -4 " de la Société "Bechive Médical Computer Systems Inc.") un moniteur TV de 58 cm (Modèle "TV17C" de la Société "Ball/Miratel Division" de St-Paul, Minnesota), et une unité d'enregistrement sur disques souples avec ses accessoires de commande, de stockage et de châssis (Modèles t3100P, FD 400, PPD/E, SD et CS" commercialisés par la Société "Advanced Electronic Design") ,avec les circuits associés nécessaires à la commande des fonctions du sous-système. les descriptions et diagrammes, par sous-programmes, des programmes des moyens de stockage et de traitement de données 24 associés au sous-système de visualisation 16 sont incorporés dans l'Annexe C. le programme lui-même, rédigé pour ce sous-;ystème en langage Fortran IV, est également incorporé dans l'Annexe Partie I. On notera que des compilateurs sont actuellement disponibles commercialement pour traduire le Fortran IV ou V en d'autres langages de calculateur désirés, tels que, par exemple, le RDOS (rev 4, 0 ou 4,02) qui est utilisé da a "Nova 1200" ou le "BRDOS" (rev 4,02) utilisé dans l'"Eclipse 5200", etc On se référera maintenant à la figure 2 qui représente le sous-système de balayage 12 du système de tomographie axiale 10. En bref, le sous-système de balayage 12 comporte une unité de balayage 18 possédant une source 60 de radiations pénétrantes, telle que, par exemple , un tube à rayons X.Le faisceau de rayons X de sortie, émis par la source 60, est dirigé à travers le collimateur de source 62 qui collimate le faisceau de rayons X en constituant une rangée en forme d'éventail de douze petits faisceaux individuels 64 ayant chacun une profondeur (perpendiculairement au plan de la figure ) d'approximativement un centimè- tre et une épaisseur dans le plan de 1 éventail d approximative - ment 1,2 millimètre 'a rangée en éventail de petits faisceaux de rayons bien collimatés 64 est dirigée vers 11 obJet 66 à analyser. Cet objet peut être, par exemple, la tête ou une partie du corps d'un patient.Dans le cas ou la partie teste est analysée, celle-ci peut être entourée par un support 68 rempli d'eau,lequel est à son tour entouré par un bloc de plastique 70, par exemple réalisé avec le produit désigné sous le nom commercial "Lucite1. le bloc de lucite porte une ouverture cylindrique 72 qui entoure la partie extérieure du support 68 et tourne autour de ce support, lequel est iniobile ainsi que la tete du patient Un second collimateur 74 est disposé du côté de l'objet à analyser opposé au collimateur de source 62. les fentes du collimateur 74 sont alignées sur chacun des petits faisceaux individuels 64. Le collimateur 74 sert à réduire la détection de radiations X diffusées par effet Compton émanant de l'objet 66 en cours d'analyse. Une rangée de douze détecteurs de photons de rayon 76 est disposée à l'extrémité de sortie du collimateur 74 pour détecter chacun des petits faisceaux individuels 64 qui ont traversé l'objet 66 et le collimateur 74, jusqu'aux détec- teurs 76. La sortie de chacun des détecteurs 76 est appliquée à une paire d'intégrateurs de Miller 78, pour intégration, puis à l'entrée d'un multiplexeur 80. Le dispositif de balayage 18 imprime à l'objet 66 à analyser des mouvements de rotation et de translation. Plus précisément, le dispositif de balayage 18 turne autour d'un axe de révolution 82 passant préf érablement par la région centrale de la tranche plane de l'objet à analyser.La rotation angulaire de l'unité de balayage est indiquée sur la figure par l'angle Q De plus, la rangée de petits faisceaux en forme d'éventail effectue un mouvement de balayage latéral à travers l'objet 66 pour chaque position angulaire du dispositif de balayage Plus précisément pour un système possédant douze détecteurs (le détecteur de réfé- rence exclu ) angulairément espacés de 1 , le dispositif de balla yage 18 est mis en rotation autour de l'objet 66 suivant douze incréments de 12 , et, pour chacune des positions angulaires, la rangée en éventail de petits faisceaux effectue up mouvement de balayage latéral i travers l'obJet. La source de rayons X 60 est déplacée latéralement au moyen d'une commande par courroie 84, et la position précise, en direction latérale, de la source 60 est détectée par un codeur de position latérale 86 dont la sortie est appliquée à une entrée des moyens de stockage et de traitement de données 30. Une paire d'écrans de plomb 88 peut entre disposée aux extrémités opposées de la trajectoire de translation latérale de la source de rayons X 60 pour protéger l'objet 66 des rayons X pendant les changements de direction de la source de rayons x, quand celle-ci se trouve aux extrémités opposées de sa translation latérale.Un treizième petit faisceau de rayons X , émis aussi par la source 60, est appliqué,aprs avoir traversé un atténuateur de rayons.X 90 d'atténuation connue, à un détecteur de référence 92, pour en obtenir un signal de sortie proportionnel à l'intensité des rayons X engendrés par la source 60. UN codeur de position angulai- re 94 capte la position angulaire du balayage et la transmet aux moyens de stockage et de traitement de données 30. les moyens de stockage et de traitement de données 30 actionnent le balayage par l'intermédiaire d'une commande motorisée 96 pour incrémenter la position angulaire Q du balayage 13 par incréments de 12 ,et pour faire traverser latéralement le corps par la source de rayons X 60 wne fois par position angulaire du dispositif de balayage.Dans un exemple typique,la translation latérale de la source 60 est effectuée en une seconde et le codeur de position latérale 86 fournit une information positionnelle codée aux moyens de stockage et de traitement de données 30 pour chaque intervalle de 10 microns le long de la translation latérale de la source 60. les données de rayons X détectées, telles qu'elles sont fournies par chaque détecteur 76, sont intégrées dans la paire correspondante d'intégrateurs de Miller 78, puis échantillonnées par le multiplexeur 80, dont la sortie est appliquée à un oonvertisseur analogiquenumérique 98 qui convertit les données analogiques mesurées en données numériques qui sont alors appliquées aux moyens de stockage et de traitement de données 30. La sortie des intégrateurs de Miller individuels 78, telle qu'elle est fournie par les détecteurs correspondants 76, est représentée sur la figure 2 en formes d'onde (a) et (b) pour un des détecteurs 76. Plus précisément, la sortie du détecteur individuel est intégrée pendant un temps correspondant à cinquante microns de translation latérale du petit faisceau de rayons X correspondant 64 par rapport à ltobjet 66. A la fin de chaque mouvement de cinquante microns, les moyens de stockage et de traitement de données 30 font faire l'échantillonnage de la sortie intégrée par le multiplexeur 80 et mettent en court-circuit les intégrateurs individuels 78 su moyen des lignes de sortie 100 et des comxutateurs individuels 102. les óngutateurs 102 de chaque canal de détection sont fermés pendant la durée d'une translationtérale, Jusqu'i la fin de la partie d'intégration du cycle opératoire du détecteur adjacent, comme le représente la forme d'onde (b).Pendant la durée de la "lectures et de la "remi- se à zéro" de l'intégrateur (a), l'intégrateur (b) intégre le courant du détecteur. Pendant }'intervalle suvant,les rôles des intégrateurs (a) et (b) sont inversés. On élimine de cette façon le temps mort pendant lequel des photons parviennent au détecteur, mais ne sont pas détectés. les deux points de données sont aJoutés l'un à ltautrc par les moyens de stockage et de traitement 30. La sortie du multiplexeur et celle du convertisseur d'anelogique en numérique, telles que transmises aux moyens de stockage et de traitement 30, correspondent à un ombrogramme de rayons X comportant 750 points mesurés, un point de données étant pris pour chaque 100 microns latéralement par rapport à l'objet 66. les données, soit sous forme brute, soit après un pré-traitement préliminaire si on le désire, sont stockées par les moyens de stockage et de traitement de données 30 dans ltenregistreur 20. Les avantages du système de tomographie axiale décrit ici,dans lequel un sous-système de balayage 12,un sous-système de processeur 14 et un sous-système de visualisation 16 fonctionnent tous indépendamment les uns des autres, comportent la possibilité, pour le sous-système de processeur 14,de traiter des données pendant que le sous-système de balayage fait l'acquisition de données nouvelles, la possibilité pour l'opérateur de traiter les données ombrographiques fournies par le sous-système de balayage 12 à l'aide de différents algorithmes de convolution de façon @ accentuer certaines différences dans les coefficients d'absorption, la possibilité pour le radiologue ou le docteur de visualiser les données tomographiques au moment où il le désire, sans que cela dépende de l'emploi du sous-système de balayage 12 ou du soussystème de processeur 14,et enfin le fait que les données ombrographiques originellement collectées ne sont pas détruites et peuvent entre retraitées comme on le désire. De plus, en cas de mauvais fonctionnement d'un ou de deux sous-système(s), l'autre ou les autres sous-systèmes peuvent encore etre utilisés pour remplir leur fonction. Ainsi,par exemple, si le sous-système de balayage est défaillant pour une raison quelconque, le sous-système de processeur peut continuer à traiter des données collectées antérieu- rement,et/ou le radiologue ou le médecin peut examiner les données traitée.. Le système décrit ici est aussi aisément capable de desservir une pluralité de sous-systèmes de balayage (qui peuvent se trouver à des emplacements différents) avec un seul sous-système de traitement et un seul sous-système de visualisation.On peut éventuellement utiliser une pluralité de sous-systèmes de visuali- sation avc un seul sous-système de balayage et un seul sous-systèle de traitement lorsque,par exemple, il est souhaitable qu'un radiologue ou un médecin réexamine les données reconstruites à chacun d'une pluralité de lieux éloignés. Un autre avantage du système décrit/ici est que les données traitées correspondant à une seule ou à un certain nombre de tranches peuvent être enregistrées dans le sous-système de processeur sur disques souples différents. Ainsi, tandis que d'autres balayages sont en cours d'enregistrement sur un autre disque souple ,le premier disque peut etre exploité par le soussystème de visualisation fonctionnant indépendamment pour une visualisation qui permettra, par exemple, de déterminer si l'objet est bien positionné, si les tranches planes prises peuvent fournir des informations intéressantes, etc, ce qui pourra permettre de déterminer plus rapidement que l'examen se fait correctement. Bien que la présente invention ait été décrite en se référant à des réalisations spécifiques, tous ceux qui possèdent l'expérience de cette technique comprendront que divers changements peuvent être faits et que des équivalents peuvent être substitués sans sortir du cadre de la présente invention. ANNEXE A BALAYAGE - LOGICIEL NOM ROLE MODEL2 - Programme principal Priorité 20 Commande l'acquisition de donnes et leur sortie vers la bande. Assure les commandes du dispositif de balayage, de l'affichage et les communications générales avec l'opérateur. SCANO - Sous tâche-Priorité 10- Sous-programme de service de sor tie de données de balayage: 1. Ouvre E/S de la bande magnéti que sur le canal 15, rembobiner 2. Ecrit un enregistrement logique de 12 - 3 enregistrements physi quels. 3. Ecrit un enregistrement d'en tête de tranche. 4. Ecrit deux fins de fichiers et fait un retour arribre de l'un 5. Rebobine la bande. 6. Récupération doreur -recule un fichier et fait (4). OPERAT-Sous-programme- Priorité de la tâche appelante sous-pro gramme de service d'entrée/sortie de visualisation -video/clavier: 1. Effacé l'écran et place sur la visualisation des données du patient. 2. Demande les données du patient et les place dans ltenregistre- ment d'en-teote en déblocage. 3. Message d'opérateur avec deman de de réponse. 4. Sortie de mesasage d'opérateur/situation pas de réponse (lignes 1 à 7). 5. Données supplémentaires au der nier message. 6. Visualisation de mise-à-jour d'horloge. AHREAK-Sous-programme Manipulateur d'interruptions de console de téléimprimante-Comaan- de "A" . Mise à l'arret des rayons X et Sortie. CBREAK- Sous-programme Manipulateur d'interruptions de console de téléimprimante-Comman- de "C" Mise à l'arrêt des rayons X, dirfire BREAKS et sortie CONV - Sous-programme Convertit un entier positif à 16 bits en chaîne justifiée à droite de 3 mots ASCII, remplit les po sitions inutilisées de zéros d'ordre élevé avec des nuls CONVS- Sous-programme Convertit des entiers de complé ment à deux de 16 bits en chaîne s avec signe Justifiées à droite ASCII avec dernier chiffre déci- mal significatif supposé à droite de la virgule décimale. ENCODER - Sous-programme Sélectionne et stocke le registre de codage de position sélectionné. SETZ - Sous-programme Libère le registre codage de posi tion sélectionné en le mettant à zéro. READZ - Sous-programme Dépiarre l'entraînement à moteur associé au registre de position sélectionné et continue jusqu'à ce que le dispositif soit prit en stockage registre de codeur de position à un temps donné. MOTOR-Sous-programme Démarre l'entrainment à moteur associé au registre de position sélectionné et continue Jusqu'à ce que le registre atteigne la position transmise NOXRAY- Sous-programme Libre les rayons X sur bit du mot de commande d'entraRnement et met e sortie la commande pour mettre au repos le générateur. xRAY- Sous-programme Met en service les rayons X sur bit du mot de commande d'entratne ment et met en sortie la commande pour démarrer le fonctionnement du générateur. Vérifie la valeur du détecteur rMT pour 1000 comptes ou plus. Quand il a été sélectionné, le rMT a transmis cette commande de retour au programme appelant. Si en huit secondes. le PMT sélec tonné n'a pas dépassé la valeur, il libère le dispositif d'entrai- nement et revient en situation d'erreur. SCAN- Sous-programme Démarre le moteur d'entraînement linéaire dans la direction indi quée et collecte les valeurs de 13 PMT à 750 intervalles commandés. REBREAK- Sous-programme Initialise les emplacements de console dans AHRIIAK et CHREAK. DISFIAY-Sous-programme Sortie d'un multiple t sans format vers l'écran de visualisation. RDISPLAY- Sous-programme Entrée d'un multiplet sans format du clavier de visualisation. RBLOCK-Sous-programme Entrée d'un bloc sans format de la mémoire de visualisation en mode de transmission Beehive, terminé par une commande "C" avec suppres sion des interruptions de conso le MODAL 2,FR ROLE : Ce programme commande la collecte de données et leur sortie sur bande. Il assure aussi toutes annotations et commandes positionnelles pour le dispositif de balayage, ainsi que toute l'interface de l'opérateur afin de fournir un ensemble général de commandes utilisable. METHODE: C'est un programme de commande de collecte de données et, en tant que tel, il ne fournit pas de solution ni de réduction de données. Il y a des registres de position qui sont vérifiés de manière à placer le tube à rayons X au-dessus des régions à-balayer, et une gamme d'intensités de rayons X de Analogique à Numérique qui est utilisée pour effectuer les balayages. Ils fournissent les données qui sont écrites sur bande. INSTRUCTIONS D'OPRATION: 1. Monter une bande de manoeuvre avec inscription. 2. Taper MODEL 2. 3. Suivre les instructions des 4 lignes du bas de la visua libation. 4. Renvoyer la commande Ru système opératoire, taper sortie et, si ce n'est pas acceptable , Commande A. les figures 6 à 8 représentent le diagramme de fonctionnement du dispositif de balayage ANNEXE B PROCESSEUR-LOGICIEL DENOMINATI ON PRETRAITEMENT xRAY-Programme principal Lit l'en-tête initial du patient et initialise tous fichiers de commandes RFSCAN-Programme principal Lit des données de balayage sur bande magnétique et les stocke sur disque à l'usage du programme de convolution N0PCL(oFCL)-Sous-programme Ouvre et ferme tous fichiers, de plus traite toutes initialisa- tions de paramètres. N!ROC(PROC)-Sous-programme Corrige chaque détecteur par la référence et retranche le bruit de fond. INTER-Sous-programme INTER effectue une double interpo- cation de précision de 523 à 509 points. REFC-Sous-programme REFC divise la valeur fournie par le détecteur par la référence (Appelé par NrROC). TAPIO - Tache priorité 1 Lit un enregistrement sur bande magnétique. DSKIO- Tache priorité 2 Inscrit un enregistrement sur dis que. Ce programme assume un double effet de tampon pour l'utili & - teur KORR- Sous-programme Met en entrée le fichier de cali brage du disque. CONVOLUTION CONVOL 2(CO)-Programme principal -Effectuer la convolution des données et construire un fichier pour le programme de rétroprojec- tion. CONIT- Sous-programme Exécuter l'initialisation et ou vrir tous les fichiers de disques. COMVOL- Sous-programme Multiplier les enregistrements de données par la fonction de convolu tion (imaginaire) dans l'espace de Fourier. COMPCK- Sous-programme Assembler les parties réelles d'une rangée complexe en rangée réelle C0NUN?-Sous-programme Désassembler une rangée réelle en parties réelles d'une tanguée complexe. DFT5-Sous-programme Fournir un enchaînement entre un programme en Fortran V et un pro gramme de transformation de Fou rier discrète (DFTE) en langage d'assemblage COIS, - Données en BLOCS Affecter la mémoire de constantes DFTE - - Sous-programme Exécuter une transformation de Fourier discrète, RETROPROJCTION EC4DRV7(C4DRV)-Programme principal -Effectuer une rétroprojection d'un fichier convoluté sur une rangée de reconstitution. EC4BKP7 (C4BKP)-Sous-programme- Effectuer la rétroprojection d'un seul segment 64 x 64 d'une grille de reconstitution EC4EXP7 (C4EXP) -Sous-programme Agrandir un enregistrement de mesures (données du traitement de convolution) en produisant qua tre mesures entières interpolées pour chaque mesure à virgule flot tante: rétroproieter ensuite les valeurs entières par la techni que du plus proche-voisin sur le segment de grille de reconstitution courant. EC4xNM(C4xNM)-Sous-programme Normaliser le segment de grille de reconstitution courant en déca- lant chaque valeur de 2 mots de 10 bits à gauche et en rassemblant les mots d'ordre supérieur en une seule rangée de précision 4K-mots. EC4MRD (MREAD)-Tâche Tâche d'entrée de disque pour la lecture d'un fichier de mesures (sortie de convolution) pour rétroprojection. XOPI- Magasin de commande d'écriture Ecrire instructions de commande d'exdoutlon de fonctions d'utilité. SAUVEGARDE DE FICHIERS SLICE - Programme principal SLICE a un rôle double (1) Ecrire des rangées reconsti tuées sur un second disque (ou souple). (2) Mettre-à-jour le fichier de commandes et faire avancer la bande Magnétique jusqu'au début du prochain fichier. UTILITES (BLOC) STCON-Sous-programme Affecter la mémoire de constantes entières. FSTCON-Sous-programme Affecter la mémoire de constantes à virgule flottante. BMOVE-Sous-programmss Déplacer un bloc de données d'un emplacement de mémoire dans un autre. XRAY.FR ROLE : XRAY initialise les richiers de données au début du balayage de chaque bande de patient. METHODE:XRAY lit l'en-tête du patient et construit sur le disque le fichier d'*n-tSte de patient. XRAY initialise dans le fichier d'en-tête du patient des compteurs qui seront utilisés par des programmes ultérieurs au cours du traite ment de reconstitution. INSTRUCTIONS D'OPERATION: 1. Monter la bande du patient (du dispositif de balayage) 2. Taper XRAY# 3. Le programme demande si la bande magnétique est montée 4. Taper G03 ENTREE: 1. CALIB. SC 2. Bande de sortie balayage SORTIE: 1. C4PAT.SC 2. C4ANGLE.SC MESSAGES D'ERREUR: 1. "MT OPEN ERROR" 2. "MT INIT ERROR" 3. "NT READ gRRORt 4. "DISK ERROR" DIVERS: Ce programme s'enchaîne à à RFSCAN comme suit: CALL FCHAN ("RFSCAN.SV") La figure 9 représente le diagramme de fonctionnement de RFSCAN. RFSCAN.FR ROLL: RFSCAN lit les données de balayage du patient sur la bande Magnétique et les stocke sur disque à l'usage du programme de convolution. METHODE: Les données sont lues sur bande magnétique en blocs de trois, quatre, ou cinq ensembles de données de détection suivant l'enregistrement physique lu. Les valeurs de compensation et de bruit de fond sont retranchées quand chaque détecteur est corrigé par la référence. On utilise les équations suivantes: Soit s vj = jième détecteur r = détecteur de référence z@ = bruit de fond du jième détecteur valeur corrigée du Jibme détecteur puis : vij=1ème vlaeur du détecteur j ri=1ième valeur du détecteur de référence ri = 1ème valeuème zij=1ème valeur du bruit de fond du détecteur J les valeurs de 11, 12 , L , N sont données par le Tableau I vij/rk-Zi où s i varie de 1 à 750 j varie de 1 b 12 TABLEAU 1 Détecteur l1 M1 12 M2 1 # # 614 740 2 # # 627 740 3 # # 641 740 4 10 22 654 740 5 10 36 668 740 6 10 49 681 740 7 10 63 695 740 8 10 76 708 740 9 10 90 722 740 10 10 103 735 740 11 10 117 12 10 130 les données sont remises à l'échelle autour du centre de l1obser- vation correspondant à ce détecteur. Les 525 points centraux sont interpolés en 509 points. Ces 509 points sont ensuite écrits en enregistrement unitaire sur un fichier de disques, avc l'angle approprié. Lorsque 180 de ces enregistrements ont été écrits sur un fichier de disques (données pour 180 le programme est fini. SEQUENCE D'APPET RFSCAN doit etre initialement appelé par le programme "XRAY". Tous les appels ultérieurs viennent de "SLICE". FORMATS D'ENTREE (1) Bande de balayage du patient (2) C4PAT.SC En-tete du patient (3) CALIB.SC Fichier de calibrage FORMATS DE SORTIE (1) C4ANGLE.SC Fichier d'angles (2) C4MEASR.SC Fichier de mesures ERREURS 1.ERREUR DE FICHIER DE CALIBRAGE 2. ERREUR INIT MT 3. ERREUR LECTURE MT 4. ERREUR TACHE INIT DIVERS Ce programme s'enchaîne sur CO comme suit: CALL FCHAN ("CO.SV") les figures 10 et 11 représentent le diagramme de fonctionnement de FRSCAN. COVOL2.FR ROULE Exécuter la convolution des données sortant du programme de pré traitement pour produire des données convenant à la ré- TROPROJECTION. METHODE: Lire les données brutes, les mettre dans la boite noire, et mettre en sortie les résultats. INSTRUCTIONS D'IPERATION: Doit être enchaîné , probablement comme "COMAIN.SV" ,par COC4.SV, sinon l'opération est complète ment automatique, enchaîner avec "C4.SV" après terminai son. CHARGEMENT LIGNE: RLDR CO2B/S COBD COVOL2 CONIT COMAC DET5E BLOCK (Bibliothèques de Fortran V) SOUS-FROGRAMMES IMPLIQUES: CONIT CONVOL,COMPACK, COMUNP DFT5E, DFTE FSTCON ENTREE: PARMS FFTH.D2 RÂw.xx SORTIE: C4ASR. xx BLOCS COMMUNS: /PARMS/Paramètres divers (COBD, CONIT) /FCN/ Fonction de convolution (CONIT) /DATA:Tampons d'entrée/sortie et rangée courante (pas de sous programmes) La figure 12 représente le diagramme de fonctionnement de CONVOL 2. EC4DRv7.FR ROLE: Rétroprojction d'un fichier de données convolutées sur une rangée de reconstitution. METHODE: La rétroprojection est effectuée en 17 segments d'abord une rétroprojection 64 x 64 de l'aire entière de re constitution, puis 16 rétroprojections en 64 x 64 de l'ai re de reconstitution segmentée qui, mises ensemble, donnent une reconstitution de 256 x 256. La proJection initiale va dans l'enregistrement #, tandis que celle qui est segmentée va dans les enregistrements 1-16 du fichier de sortie, dans l'orientation indiquée,suivant laquelle on prend l'axe vertical comme axe des x et l'axe horizon tal comme axe des y. 1 2 3 s 4 5 ; 6 7 8 8: x g 10 s 11 12 9 13 : 14 i 15 : 16 y Le premier index de rangée est pris comme coordonnée x et le second comme coordonnée y, le centre de la rangée étant à ( 0,0) et la grille en carrd'unités 1,0 Les angles trouvés dans le fichier d'angles enchaînés par C4TMP7 sont incrémentés par 180 pour donner les angles utilisés, l'@rientation étant indiquée sur la figure 13,sur laquelle a est l'angle de projection en question et la direction positive indiquée sur la ligne de proJection, le point zéro étant la projection du centre de la grille.Cela fait, une rangée de titre est mise en sortie à l'usage du programme de sortie Versatec, de meme qu'un fichier de paramètres, à l'usage du même programme. INSTRUCTIONS D'OPERATION: Ce programme est destiné à être enchaîné par le programme de convolution,probablement comme "C4.SV" Son exécution est entièrement automatique et est terminée par un enchaînement sur "SLTD.SV". LIGNE DE CHARGEMENT: RLDR C4E7B/S EC4DRV7 EC4BKP7# EC4EXP7 EC4MRD BLOCK (Bibliothèques de Fortran V) SOUS-PROGRAMMES IMPLIQUES C4HKF C4EXP, C4XNM MREAD CSCON Sous-programmes WCS dans SCUTIL.SR et C4WCS.SR ENTREE: C4TMP7 C4MEASR.XX SORTIE: C4ARRAY.XX C4TITLE.XX C40UT BLOCS COMMUNS:: /AT/ informations de fichier de titres (C4BKP) /AN/ informations d'angles /C4rR/ noms de fichiers (pas de sous-programmes) /TSK/ enchaînements de tâches multiples (C4BKP, MREAD) /MS/ tampon d'entrée, rangée de données en cours (C4BKP, C4EXP, MREAD) /AR/ rangée de reconstitution (C4BKP, C4EXP, C4XNM) /BP/paramètres de rétroprojection (C4BKP, C4EXP) les figures 14 à 17 représentent des organigrammes de rétroprojection. SLICE FR ROLE: SLICE a deux rôles (1) Ecrire les rangées reconstituées sur un second disque (sur souple). (2) Mettre à jour le fichier de commandes et faire avancer la bande Magnétique jusqu'au début du fichier suivant. METHODE : SLICE lit sur le disque principal (DP# )le fichier reconstitué et l'entStç du patient et écrit les données sur le disque secondaire (DPl) ou souple. SLICE progresse sur la bande Magnétique jusqu'au fichier suivant et met-à-jour le fichier de commandes dans l'en-tête du nou veau patient sur le disque. SEQUENCE D'APPEL: SLICE est appelé par la -rétroprojection à chaque reconati tution concernant l'un de ses patients. FORMATS D'ENTREE: C4PAT.SC En-tête de patient C4ARRAY,SC Fichier reconstitué Bande de patient du balayage. FORMATS DE SORTIE: Une copie de l'en-tête de chaque patient se trouvera dans le dispositif de sortie et le fichier reconstitué de chaque tranche sera accepté jusqu'à un maximum de 12 par disque et de 6 par disque souple. MESSAGES: "SLICE TERMINE" ,a étant le numéro de la tranche. DIVERS SLICE s'enchaîne sur RFSCAN, 8til y a davantage de données, comme suit: Call FCHAN ("RFSCAN. SV") Sinon il revient au Moniteur. La figure 18 représente l'organigramme de SLICE. A@@@@ C OBSERVATION - LOGICIEL NOM ROLE DISPLAY - Programme principal Exécute une interface d'opérateur pour déterminer le numéro de tranche et les dimensions de fenêtre. Appelle DISPLYW pour/écrire des données > pour écrire des informations d'en-t8te et attend la commande suivante. DSrLY - Sous-programme Commence une tache à priorité 2 qui attend l'adresse d'un bloc de données à visualiser sur RAMTEK. ses taches principales consistent à lire les données sur disque et à envoyer des adresses de sous-tâches pour visualisation sur RAMTEK. ENTREE - Sous-programme Lit l'entrée TTY et vérifie la validité de la commande. Renvoie le numéro de commande à DISPLAY. D64 - Sous-programme Visualise un tableau de 64 x 64 éléments sur RAMTEK. DAN - Sous-programme Visualise informations ASCII sur la visualisation DERS - Sous-programme Efface l'écran de HAMTEK. RMTK- Sous-programme Fournit à RAMTEK des services de ba se parmi lesquels le code actuel pour l'écriture de données sur RAMTEK et le traitement des inter ruptions de RAMTEK. DSQ-Sous-programme Ecrit un bloc de l'échelle grise à l'emplacement spécifié avec l'inten sité spécifiée. DLU-Sous-programme Charge le tableau à consulter dans le RAMTEK avec des valeurs permet tant la correction de gamma. CNVEA- Sous-pragramme Convertit une channe de binaire en ASCII CNVAH-Sous-programme Convertit une chaîne de ASCII en binaire. DISPLAY. FR ROLE:DISPLAY visualise le fichier d'en-tete du patient et les données du patient sur la visualisation RAMTEK 1003. METHODE: DISPLAY demande à l'opérateur le numéro de tranche et ensuite lit les données du fichier de données et lten-tEte du fichier d'en-tête, puis les visualise sur la visualisation RAMTEK. INSTRUCTIONS D'OPERATION: (1) Tape Display # (2) Le programme demande le numéro de tranche Ré@ond avec la tranche à visualiser. (3) La tranche est visualisée avec une largeur de fenêtre de 50 et une valeur de centre de 10. les différentes clés font ce qui suit: # Elève la fenêtre à la valeur mise dans la commande 0; à défaut c'est 10. # Abaisse la fenêtre à la valeur mise dans la commande 0; à défaut c'est 10; - Rétrécit la fenêtre à la valeur mise dans la commande 0; à défaut c'est 10 #Elargit la fenêtre à la valeur mise dans la commande O: à défaut c'est 10. demande à l'opérateur de changer la valeur utilisée en 4 ci-dessus. 1. Demande un nouveau numéro de tranche. 2. Efface l'écran. 3 Demande à 1'opdrateur de faire entrer toute fenetre en format de valeur de centre et de largeur. 4. Termine le programme. ENTREE, (l)C4PAT.SC- En-tête de patient. (2)C4ARRAY.SC-Fichier de données de patient. ERREURS. (1) En cas de numéro de tranche non-valide,la question est reposée. (2) En cas de largeur de fenêtre %,rien n'est visualisé. Le programme attend la commande suivante. (3) Erreur de lecture de disque - Le programme revient à CLI. les figures 19 et 20 représentent les organigrammes de la visualisation et du balayage. Annexe A Partie I COMPHER NOSTACK C SCANNER TEST C MODEL2 FOR ME C 10/13/75 RSM@@ EXTERHAL SCANO COMMON /COM@UN/ KEY, DONE, STATE, DRIVE, IUSE (10) COMMON /OUTPUT/ UBUF, IBUF (10511) 1, ICOM4(3), ICOM5(3), ICOM6(3), ICOM7(3) 2, ICOM8(3), ICOM9(3), ICON1(3), ICOM2(3) INTESER DUMMY, STATUS, ERROR, YESNO, COMMAND(3), JARRAY(1) C THERE ARE 11 EXTBA WORDS FOR LAST DATA POINT TO BE ADDED C AND 10 LEADING GREEN WORDS - ANGLE, DATE, ETC INTEGER CORR(2,2) DIMENSION ICOUHT(3) DIMENSION IDIRL(3), IDIRR(3) INTEGER MYOUT(5), IPOSM(18) EQUIVALENCE (ICOM4(2), YESND), (ICOM5(2), ICNEW) EQUIVALENCE (IBUF91), ANGLE) EQUIVALENCE (IANGLE, IUSE(1)) DATR CORR/34,-34,41,0-41/ DATA UBUF @@@@, "VETERANS ADMINISTRATION HOSPITAL DATA IDIRR /0,-21750,15700/, IDIRL /1,15700,-21750/ DATA COFF /0,0/, CONS /0.01460494/ DATA ICOUNT/750,13,25/ DATA DELTAR/12./, IROT /2/, ASTART /-968/, LSTART 1/23500/ DATA KEY/0/, DONE/2/, STATE/1/, DRIVE/0/, LUSE/10*0/ DATA ICOM@ /3,0,34/, ICOM2 /4,1,25/, ICOM3 /4,5,33/ 1, ICOM4 /3,0,18/, ICOM5 /3,0,10/, ICOM6 /4,7,10/ 2, ICOM7 /4,1,10/, ICOM8 /4,4,3/, ICOM9 /4,5,43/ 3, ICONI /4,2,36/, ICON2 /4,3,14/ DATA ONN /"ON "/, OFF /"OFF "/ DATA MYOUT /"SLICE "/ 1, IPOSM /" CEMTIMETERS DEGREES "/ C THIS SUBROUTINE SETS CNTRL-A CNTRL-C BREAK EXITS TO C SUBROUTINE ABREAK AND CBREAK RESPECTIVELY CALL REBREAK CALL SPDIS ("STTO", ERROR) CALL OPERAT ("SET SWITCH TO BUFFERED/XMIT RETURN*, ICOMI) COMMAND(1) = 1 C THIS BUILDS THE OPERATOR OPERAT CALL OPRAT (IBUF, COMMAND) CALL OPERAT ("MODELL SCANNER - 10/13/75 *, ICOM2) CALL PRI (20) CALL FTASK (SCANO, @6000, 10) CALL XMT (KEY, 1, @6000) 10010 CONTINUE GO TO (1001, 10010, 3020), DONE 10001 CONTINUE CALL OPERAT ("TO CALIBRATE - INITIALIZE SCANNER", ICOM3) 3. CONTINUE CALL OPERAT ("XMIT YES OR NO ", ICOM4) IF (YESRO .EQ. "NO") GO TO 2 IF (YESNO .NE. "YE") GO TO 3 CALL SETZ (1) CALL PEADZ (IPPOS, 1) CALL WRIT (1000, 1, ERROR) CALL SETZ (2) CALL READZ (IANGLE, 2) 2 'CONTINUE 5 CONTINUE CALL MOTUR (LSTART, 1) CALL MOTOR (ASTART, 2) DRIVE = 0 CALL NOXRAY CALL OPERAT (OFF, ICOMS) CALL ENCODER (IPPOS, 1) IPPOS = (IPPOS + ISING (50, IPPOS) )/100 CALL CONVS (IPPOS, IPOSM) CALL ENCODER (IANGLE, 2) ANGLE = FLOAT (IANGLE) IANGLE = ANGLE*. 1460494 + SING (.5, ANGLE) CALL CONVS (IANGLE, IPOSM(11) ) CALL OPERAT (IPOSM, ICONI) CALL OPERAT ("LOAD POINT", ICOM7) LEPTRT = 1 STATE = 1 IROT = 2 COMMAND(1) = 2 CALL OPERAT (USUF(29), COMMAND) UBUF(7) = 0 GO TO 4 1 CONTINUE ICOLD = ICNEW 4 CONTINUE DONE = 1 STATE = 2 CALL OPERAT ("SCAN OPTION:SCAN, NEW, XRAY, REW, EXIT", ICOMS) CALL OPERAT ("SMIT REPLY", ICOM5) IF (ICNEW .EQ. "XR") GO TO 6400 IF (ICNEW .WQ. "NO") GO TO 7 IF (ICNEW .EQ. "SC") GO TO 6 IF (ICNEW .EQ. "RE") GO TO 3000 IF (ICNEW .EQ. "EX") GO TO 3000 IF (ICNEW .EQ. "NE") GO TO 5 CALL OPERAT ("NOT OPTION", ICOM7) GO TO 4 6 CONTINUE IF (DRIVE .NE. 0) GO TO 7 CALL OPERAT ("XRAY OFF", ICOM7) CALL OPERAT (OFF, ICOM8) GO TO 4 7 CONTINUE GO TO (8, 9), LEFTRT 8 CONTINUE CALL MOTOR (-16000, 1) GO TO 10 9 CONTINUE CALL MOTOR (11000, 1) 10 CONTINUE CALL OPERAT ("SCAN BEGUN", ICOM7) CALL XRAY (YESNO) IF (ICNEW .EQ. "NO") GO TO 11 IF (YESNO .EQ. 0) GO TO 6 11 STATE = 3 GO TO (12. 11. 7000), DONE 12 CONTINUE UBUF(7) = UBUF(7) + 1 IF (ICNEW .EQ. "NO") GO TO 13 CALL XMT (KEY, 3, $6000) 13 CONTINUE CALL CONV (UBUF(7), IUSE) MYOUT(4) = IUSE(3) CALL OPERAT MYGUT, ICOM6) GO TO (15, 20), IROT 15 CONTIHUE IROT = 2 BEGIN = 156. ENDD = -12. GO TO 25 20 CONTINUE IPOT = 1 BEGIN = -12. ENDD = 156. 25 CONTINUE GO TO (26, 27), LEFTRT 26 CONTINUE CALL MOTOR (IDIRR(2). 1) GO TO 28 27 CONTIMUE CALL MOTOR (IDIRL(2), 1) 28 CONTINUE CALL WAIT (500, 1, ERROR) 30 CONTINUE IANGLE * BEGIN/CONS CALL ENCODER (IUSE(3), 2) IF (IABS (IUSE(3) - IANGLE) .LT. 35) GO TO 40 IANGLE = IANGLE - CORR(IROT,LEFTRT) CALL MOTOR (IANGLE, 2) 40 CONTINUE STATE = 4 GO TO (45, 40, 7000), DONE 45 CONTINUE GO TO (100, 200), LEFTRT 100 CONTINUE CALL SCAN (ICOUNT, IBUF(11), IDIRR) LEFTRT = 2 GO TO 300 200 CONTINUE CALL SCAN (ICOUNT, IBUF(11), IDIRL) LEFTRT = 1 300 CONTINUE STATE = 5 CALL ENCODER (IANGLE, 2) ANGLE = FLOAT (IANGLE) 1 + FLOAT (ISIGN (ISHFT (IUSE(2), - 12), IANGLE) )/16,0 ANGLE = ANGLE*CONS CALL XMT (KEY, 2, $6000) IANGLE = ANGLE*10,0 + SIGN (.5, ANGLE) CALL COMVS (IANGLE, IOPSM(11) ) CALL ENCODER (IPPOS, 1) ISPOS = (IPPOS + ISIGN (50, IPPOS) )/100 CALL CONVS (IPPOS, IPOSM) CALL OPERAT (IPOSM, ICON1) GO TO (1900, 1950), IROT 1900 CONTINUE BEGIN = BEGIN + DELTAR IF (ENDD - BEGIN .LT. 0.00 GO TO 2005 GO TO 30 1950 CONTINUE BEGIN = BEGIN - DELTAR IF (ENDD - BEGIN .LE. 0.0) GO TO 30 2085 CONTINUE STATE = 6 GO TO (2010, 2005, 7000), DONE 2010 CONTINUE CALL XMT (KEY, 4, $6000) CALL OPERAT ("SCAN DONE", ICOM7) GO TO 1 3000 CONTINUE STATE = 7 GO TO (3010, 3000, 7000), DONE 3010 GONTINUE IF (ICOLD .EQ. "RE") GO TO 3015 CALL XMT (KEY, 5, $6000) 3015 IF (ICNEW .NE. "EX") GO TO 1 3017 CALL OPERAT ("EXIT REO. ", ICOM7) CALL WAIT (1000, 1, ERROR) 3020 CALL SPEBL ("$TTO", ERROR) CALL EXIT 6000 CONTINUE CALL OPERAT ("TASK ERROR", ICOM7) GO TO 3020 6400 CONTINUE CALL OPERAT (ONN, ICOM8) CALL OPERAT ("XRAY CYCLE", ICOM7) CALL XRAY (YESNO0 IF (YESNO .EQ. 0) GO TO 6 GO TO 4 7000 CONTINUE IF (IGNEW .EQ. "EX"0 GO TO 3017 GO TO 1 END ANNEXE A PARTIE II COMPILER NOSTACK TASK SCANO C SCAN OUTPUT TO TAPE SUBTASK C 10/9/75 RSMW C FIVE ENTRIES - FROM NOP - TO REWIND C 1 - NOP C 2 - SINGLE LOGICAL RECORD/THREE PHYSICAL RECORD - DATA C 3 - SINGLE LOGICAL RECORD/SNNGLE PHYSICAL RECORD - HEADER C 4 - EOF/EOF/BACKSPACE A FILE - LET'S HAVE A CLEAN ABORT 5 - REWIND TAPE C 6 - BACKSPACE A FILE - DO A (4) C INITIAL ENTRY PERFORMS OPEN FOR MTDIO COMMON/COMMUN/KEY, DONE, STATE, DRIVE, IUSE(10) COMMON/OUTFUT/UBUF, IBUF910511) INTEGER ERROR.STATUS, DUMMY, COMMAND(3), UBUF(256) 1, ICOM1(3) 1, DONE, STATE, DRIVE DATA COMMAND /4,1,16/, ICOM1 /4,7,6/ MAGT = 15 GO TO 110 100 CONTINUE CALL INIT ("MT0", 0, ERROR) IF ( (ERROR .NE. 1) .AND. (ERROR .NE. 40) ) GO TO 5000 CALL MTOPD (MAGT, "MT0:0", 0, ERROR) 50 CONTINUE DONE = 1 CALL MTDIO (MAGT. 010000K, DUMMY, STATUS, ERROR) 105 CONTINUE IF ( (ERROR .NE. 1) .AND. (ERROR .NE. 0) ) GO TO 5000 DONE = 1 110 CONTINUE CALL REC (KEY, MDTEST) DONE = 2 GO TO (100, 200, 300, 400, 50, 600), MDTEST 200 CONTINUE CALL MTDIO (MAGT, 057260K, IBUF(1), STATUS, ERROR) IBUF(3751) = IBUF(1) IBUF(3752) = IBUF(2) CALL MTDIO (MAGT, 057260K, IBUF(3751), STATUS, ERROR) IBUF(7501) = IBUF(1) IBUF(7502) = IBUF(2) CALL MTDIO (MAGT, 055702K. IBUF(7501), STATUS, ERROR) GO TO 105 300 CONTINUE CALL MTDIO (MAGT, 050400K, UBUF(A). STATUS, ERROR) GO TO 105 400 CONTINUE CALL MTDIO (MAGT, 060000K, DUMMY, STATUS, ERROR) CALL MTDIO (MAGT, 060000K, DUMMY, STATUS, ERROR) CALL MTDIO (MAGT, 040000K, DUMMY, STATUS, ERROR) GO TO 105 600 CONTINUE CALL MTDIO (MAGT, 040000K, DUMMY, STATUS, ERROR) GO TO 400 5000 CONTINUE DUMMY = ERROR CALL WAIT (1000, 1, ERROR) CALL OFERAT ("TAPE NOT READY", COMMAND) CALL CONV (DUMMY, IUSE(6) ) CALL OPERAT (IUSE(6).ICOM1) DONE = 3 GO TO 118 END Annexe A Partie I}I SUSROUTINE OPERAT (JARRAY, COMMAND) C DISPLAY GENERATION SUBROUTINE C 10/8/75 RSMW C SIX EHNTRIES - FROM INITIAL CLEAR AND BUILD - TD CLOCK UPDATE C 1 - BUILD C 2 - INPUT PATIENT DATA C 3 - OUTPUT OPERATOR MESSAGE WITH REPLY C 4 - OUTPUT OPERATOR MESSAGE/NO REPLY C 5 - OUTPUT MESSAGE ANYWHERE C 6 - CLOCK OUTPUT ONLY COMMON /OUTPUT/UBUF, IBUF (10511) COMMON /DISP/ IARRAY(250), OPMES(10), IDAT(24) COMMON /COMMUN/ KEY, DONE, STATE, DRIVE, IUSE (10) INTEGER ERROR, HOME, OPMES, COMMAND(3), JARRAY(1) 1, DONE, STATE, DRIVE, UBUF(256) DATA IDAT /"3AN FB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC "/ DATA OPMES /" ", 9*5012K/ DATA IARRAY/ 1 " VETERANS ADMINISTRATION HOSPITAL ", 2 "DATE: ,1972 TIME: ". 3 "PATIENT NAME: AGE: SEX: 4 " CODE: - - ", 5 " STARTING SLICE: EHDING SLICE: 6 "CONTRAST MDIA *1: ,42: ,*3: 7 " X-RAY VOLTAGE: KV ", 8 " COMMEMTS: ", 9 " SYSTEM STATUS ** SCANNER STOPPD/LOA POINT ", 1 " TRAVERSE POSITION ** RING ANGLE ** ", 2 " X-RAY INTERLOCK ** OFF ", 3 : OPERATOR MESSAGES: , 4 " REPLIES : "/ IC = COMMAND (1) CALL TIME ( UBUF(4), ERROR) CALL DISPLAY (" ", 1) DO 30 1 = 1,3 CALL CONV (UBUF (1+3), IUSE) CALL DISPLAY (IUSE(3), 2) IF (1 .EQ. 3) GO TO 30 CALL DISPLAY (":", 1) 30 CONTINUE GO TO (100, 200, 300, 400, 500, 2000), IC 100 CONTINUE CALL DATE (UBUF (1), ERROR) I = UBUF (1)*2 - 1 IARRAY(34) = IDAT(1) IARRAY(35) = IDAT(1+1) CALL CONV (UBUF (2), IUSE) IARRAY(36) = IUSE(3) CALL CONV (UBUF (3), IUSE) IARRAY(39) = IUSE (3) CALL DISPLAY (16010K, 2) CALL DISPLAY (6036K, 2) CALL DISPLAY (IARRAY, 500) GO TO 2000 200 CONTINUE CALL DISPLAY (OPMES, 15) CALL DISPLAY (" TYPE PATIENT DATA ", 20) CALL DISPLAY (" XMIT GO WHEN FINISHED CALL RDISPLAY (COMMAMD (2), 2) IF (COMMAND (2) .NE. "GO") GO TO 200 CALL DISPLAY ( " )", 4) ICOUNT = 750 CALL RDISPLAY (JARRAY, ICOUNT) CALL DISPLAY (OPMES, 11) CALL DISPLAY ("PATIENT DATA ACCEPTED ", 22) GO TO 2000 300 CONTINUE CALL DISPLAY (OPMES, 16) CALL DISPLAY (" ", 2) CALL DISPLAY (JARRAY, COMMAND(3) ) CALL DISPLAY ("; ", 2) DO 310 1 = 1,10 CALL RDISPLAY (IUSE(1), 1) IUSE(1) = IUSE(1) .AND. 177490K IF (IUSE91) .EQ. 77200K) GO TO 330 IF (IUSE(1) .EQ. 6400K) GO TO 350 CALL DISPLAY (IUSE(1). 1) 310 CONTINUE 315 CONTINUE I = 1 + 1 CALL RDISPLAY (IUSE(10), 1) IUSE(10) = IUSE(10) .AND. 177400K IF (IUSE(10) .EQ. 77400K) GO TO 330 IF (IUSE(10) .EQ. 6400K) GO TO 350 CALL DISPLAY (IUSE(10), 1) GO TO 315 330 CONTINUE I = 1 - 2 IF (I .LT. 0) GO TO 330 CALL DISPLAY (" ", 3) IF (I .GT. 10) GO TO 315 GO TO 310 350 CONTINUE COMMAND(2) = IUSE(1) + IUSE(2)/256 GO TO 2000 400 CONTINUE CALL DISPLAY (OPMES.COMMAND(2) + 10) CALL DISPLAY (" ", 20 500 CONTINUE IF (COMMAND(3) .LE. 0) GO TO 2000 CALL DISPLAY (JARRAY, COMMAND(3) ) 2000 CONTINUE RETURN END Annexe A Partie IV SUBROUTINE CBREAK KEYBOARD CONTROL ROUTINE 10/8/75 RSMW CLERR SERRN AND EXIT COMMON/COMMUN/KEY, DONE, STATE, DRIVE, IUSE(10) IRTEGER DONE, STATE, DRIVE INTEGER COMMAND(3) DRIVE = 0 CALL NOXRAY COMMAND(1) = 4 COMMAND(2) = 7 COMMAND(3) = 18 CALL OPERAT ("CONTROL A WAS USED", COMMAND) CALL EXIT END Annexe A Partie V SUBROUTINE CBREAK C KEYBOARD CONTROL ROUTINE C 10/8/75 RSMW C CLEAR SCREEN AND EXIT COMMUN/COMMUN/KEY, DONE, STATE, DRIVE.IUSE(10) INTEGER DONE, STATE, DRIVE INTEGER ERROR, COMMAND(3) DRIVE = 0 CALL NOXRAY COMMAND(1) = 4 COMMAND(2) = 7 COMMAND(3) = 18 CALL DFILW ("BREAK.SV", ERROR) CALL OPERAT ("CONTROL C WAS USED", COMMAND) CALL EXIT END Annexe A Partie VI CONV.SR CONVFRT INTEGER TO ASCII RSMW NREL 1 10/13/75 CALL CONV (IN, IOUT(3) ) IN - INTEGER TO BE CONVERTED IOUT - INTEGER ARRAY OF THREE ASCII WORDS .TITLE CONV .ENT CONV,CONVS .EXTD .CPYL,.FRET,MPY,DVD .NREL 2 CONVS: ISZ SWITCH JMP .+2 2 CONV: JSR&commat; .CPYL LDA&commat; 1,-167,3 MOVL&num; 1,1,SNC JMP POSITIVE LDA 0,SWITCH MOV&num; 0,0,SNR JMP POSITIVE LDA 0,MINUS STA 0,ENDD NEG 1,1 JMP .+3 POSITIVE: LDA 0,HBLANK SA 0,ENDD LDA 2,-166,3 LDA 0,P3 ADD 0,2 STA 2, BUFAD STA 0,COUNT LDA 2,P10 LDA 0,SWITCH MOV 0,0,SNR JMP LOOP+1 SUBO 0,0 DVD LDA 3,PPT ADD 0,3 DSZ BUFAD STA&commat; 3,BUFAD DSZ COUNT LCOP: SUBO 0,0 DVD LDA 3,P60 ADD 0,3 MOV&num; 1,1,SNR JMP EXITI STA 3,TEMP SUBO 0,0 DVD LDA 3,P60 ADDS 0,3 LDA 0,TEMP ADD 0.3 DSZ SUFAD STA&commat;3,BUFAD MDV&num; 1,1,SNR JMP EXIT2 DSZ COUNT JMP LOOP EXIT: SUBO 3,3 SA 3,SWITCH JSR&commat; ,FRET EXIT1: LDA 0,ENDD ADD 0,3 EXITLP; DSZ BUFAD STA&commat; 3,BUFAD SUBO 3,3 EXIT3: DSZ COUNT JMP EXITLP STA 3,SWITCH JSR&commat; .FRET EXIT2: LDA 3,ENDD MOVS 3,3 JMP EXIT3 BUFAD: 0 COUNT: 0 P3: 3 P10: 10. PPT: 27060 P60: 60 ENDD: 20000 MINUS: 26400 SWITCH: 0 HSLANK: 20000 TEMP: 0 .END Annexe A Partie VII CALL ENCODER (IPOS, IWCH) 9/18/75 .TITLE ENCODER .ENT ENCODER,SETZ,READZ .EXTD .CPYL,.FRET .NREL MTR=64 ;DEVICE CODE OF MOTOR CONTROLLER ; 2 ENCODER: USR&commat; .CPYL LDA 2,-167,3 INTDS LDA&commat; 1,-166,3 EXIT: MOV2R&num; 1,1SAC JMP BITOK DOA 1,MTR DIB 0,MTR STA 0,1,2 MOVZL 1,1 BITOK: DOA 1,MTR DIB 0,MTR ERREXIT: STA 0,0,2 SUBZL 0,0 DOAS 0,RTC INTEN JSR&commat; .FRET 2 READZ: JSR&commat; .CPYL LDA 2,-167,3 LDA&commat; 1,-166,3 LDA 3,DEVAD ADD 1,3 INTDS LDA 0,P3 DOAS 0,RTC LDA 0,DEV,3 LDA 3,M5000 OUTER: DOA 0,MTR INNER: SKPDZ MTR JMP EXIT SKPDN RTC JMP INNER NIOS RTC INC 3,3,SZR JMP OUTER ADCZR 0,0 JMP ERREXIT 1 SETZ: JSR&commat; .CPYL LDA&commat; 1,-167,3 MOVZR&num; 1,1,SNC MOVZL 1,1 DOA 1,MTR NIOC MTR JSR&commat; .FRET. M5000: - 5000. P3: 3 DEV=0 DEVAD: . 40001 ;ENCODER/DRIVE - NEGATIVE LINEAR 20004 ;ENCODER/DRIVE - ROTATION .END Annexe A Partie VIII @@@@@@.SR 10/8/75 RSMW @@@EL 1 LINEAF AND ROTATIONAL DRIVE ;CALL MOTOR (ENCOD(N), IWCH) .TITLE MOTOR .ENT MOTOR.NOXRAY,XRAY .EXTD .CPYL,.FRET,COMMUN .NREL MTR=64 ;MOTOR CONTROLLER AND ENCODER BOARD AZD=30 ;DEVICE CODE OF A TO D DMA BOARD DRIVE=3 ;DISPLACEMENT OF DEVICE IN TABLE 2 MOTOR: JSR&commat; .CPYL LDA 2,COMMON LDA 1,DRIVE,2 LDA 0,C377 AND 0,1 LDA&commat; 0,-166,3 STA 0,IWCH MOVZR&num; 0,0,SNC MOVZL 0,0 ADD 0,1 STA 1,DRIVE.2 DOA 1,MTR LDA 3,-167,3 ;GET ADDRESS OF ARRAY STA 3,ADDRESS LDA 0,0,3 ADDOR 0,0 STA 0,ENDPOS MOY 2,3 DIB 2,MTR ADDOR 2,2 SUDZ&num; 0,2,SNC SUBO 2,2,SKP SUBZL 2,2 STD 2,IDIR MOVZL 2,2 LDA 1,DRIVAD ADD 1,2 LDA 1,IWCH ADD 1,2 LDA 1,DEVM,2 STA 1,DEV LDA 2,DRIVE.3 COM 1,1 AND 1,2 ADC 1,2 STA 2,DRIVE,3 LDA 1,IDIR JMP .+3 DI: LDA 2,DRIVE,3 DOA 2,MTR DIB 2,MTR ADDOR 2,2 HOV 1,1,SNR JMP .+4 SUBZ&num; 0,2,SNC JMP .+4 JMP D1 SUBZ&num; 0,2,SNC JMP D1 LDA 1.DRIVE,3 LDA 0,DEV COM 0,0 AND 0,1 STA 1,DRIVE,3 SUB 0,0 STA 0,DEV DOA 1,MTR EXIT: JSR &commat;FRET ENDPOS: 0 IDIR: 0 IWCH: 0 ADDRES: 0 DRIVAD: MOTOR-1 MAXNOTUP: DEV: 0 ;TEMP STORAGE FOR CALCULATED DEVICE COMMUN: COMMUN DEVM=.-MOTOR 100001 ;LINEAR DRIVE - LINEAR ENDODER 20004 ;ROTATION DRIVE - ROTATIONAL ENCODER/MSB 40001 ;LINEAR DRIVE - NEGATIVE - LINEAR ENCODER 10004 ;ROTATION DRIVE - NEGATIVE - ROTATIONAL ENCODER/MSB C377: 177400 ONOFF: 177377 M1000: -1000. P4096: 4096. D1000: 1000 BUFAD: 502 ;DMA STORES REFERENCE HERE MAX: 5000 6 NOXRAY: JSR&commat; .CPYL LDA 3,COMMON LDA 1,DRIVE.3 LDA 0,ONOFF AND 0,1 STA 1,DRIVE.3 DOA 1,MTR JSR&commat; .FRET 1 XRAY: JSR&commat; .CPYL LDA 0,-167,3 STA 0,ADDRESS LDA 3,COMMON LDA 1,DRIVE,3 LDA 0,ONOFF AND 0,1 ADC 0,1 STA 1,DRIVE,3 LDA 0,MAX STA 0,MAXNOTUP NIOC A2D NIOP A2D LDA 3,M1000 LOOP: LDA 0,D1000 NIOS A2D DOA 1,MTR INC 0,0,SZR JMP .-2 LDA&commat; 2,BUFAD LDA 0,P4096 SUBZ&num; 0,2,SNR JMP LOOP LDA 0,M1000 ADDZ&num; 2,0,SHC JMP NOTUP INC 3,3.SZR JMP LOOP ANC 0,0 EXRAY: STA&commat; 0,ADDRESS JSR&commat; .FRET NOTUP: DSZ MAXNOTUP JMP LOOP SUBZ 0,0 LDA 3,COMMON STA 0,DRIVE.3 JMP EXRAY .END Annexe A partie IX @@@@@@@@ TR@@SLATIONAL SCAH RSMW @@@@@@@@ 1 10/13/75 CALL SCAN = ICOUNT(3), IBUF. IDIR(3) ) IDIR(1) = 1 FOR NEGATIVE 0 FOR POSITIVE IDIR(2) = STARTING COUNT FROM LINEAR ENCODER IDIR(3) = ENDING COUNT FROM LINEAR ENCODER ICOUNT(1) = COUNT OF SAMPLES TO BE RETURMED ICOUNT(2) = COUNT OF DETECTOR VALUES TO BE SUMMED PER SAMPLE ICOUNT(3) = 10 MICRONS LINEAR ENCODER COUNTS PER DETECTOR NIOS .TITLE SCAN .ENT SCAN .EXTD .CPYL,.FRET,MPY,COMMUN .NREL DRIVE=3 ;POSITION IN COMMUN OF DRIVE WORD IBUFAD=28 ;ADDRESS OF BUFFER FOR DATA.REFERENCE IDATA=22 ;ADDRESS OF BUFFER FOR INPUT UNIT=15 ;NUMBER OF WORDS PER NIOS MTR=64 ;DEVICE CODE OF MOTOR CONTROLLER AZD=30 ;DEVICE CODE OF AMALOG TO DIGITAL DMA BOARD RSL=75 ;DEVICE CODE OF RESOLVERS ; ; SUBROUTINE ONEPT ;MOVE ONE SET OF 13 DETECTOR VALUES + TIME BACK TO CALLING PROGRAM ONEPT: STA 3,AC3 UPDOWN: ISZ IBUFAD LDA 3,IBUFAD LDA 2,IDATA LDA 2,16,2 STA 2,0,3 LDA 2,KCOUNT LDA 0,COUNT MOVIT: LDA&commat; 1,IDATA ADD 2,3 STA 1,0,3 INC 0,0,SZR JMP MOVIT NIOS AZD LDA 0,BUFAD STA ,IDATA ADDPT: ISZ DONE JMP .+2 JMP ADDEND ADC 1,1 STA 1,DONE LDA 0,COUNT STA 0,LPCNT DOWNUP: DSZ IBUFAD LDA 3,IBUFAD ADDLP: ADD 2,3 LDA 0,0,3 ADDER:LDA 1,1,3 ADD 1,0 STA 0,0,3 ISZ LPCNT JMP ADDLP DSZ ICOUNT JMP .+2 JMP EXIT LDA 0,ENDPOS LDA 1.OLD ADDOR 0,0 ADDOR 1,1 LDA 2,IDIR MOV&num; 2,2,SZR JMP NEGT SUBZ&num; 0,1,SZC JMP EXIT JMP ADDEND NEGT: SUBZ&num; 1,0,SZC JMP EXIT ADDEND: LDA 3,AC3 LDA 0,OLD LDA 1,INCREN JMP 1,3 AC3: 0 ;TEMP SAVE FOR AC3 LPCNT: 0 ICOUNT: 6 KCOUNT: 6 COUNT: 0 BUFAD: 501 DONE: 0 IDIR: 0 STRPOS: 0 ENDPOS: 0 ; 3 SCAN: JSR&commat; .CPYL LDA 2,-167,3 LDA 0,0,2 STA 0,ICOUNT ;COUNT OF SUMMED SAMPLES TO BE RETURNED STA 0,KCOUNT LDA 1,1,2 NEG 1,1 ;WE NEED NEGATIVE LOOP COUNT STR 1,COUNT ;COUNT OF SAMPLES TO BE SUMMED LDA 1,2,2 STA 1,INCREM ;10 MICROM COUNTS PER SAMPLE LDA 1,-166,3 STA 1,MBUFAD LDA 2,SKPER STA 2,SKP1 STA 2,SKP2 ADC 2,2 STA 2,DONE LDA 3,-165,3 LDA 0,0,3 STA 0,IDIR ;DIRECTION OF SCAN MOV 0,0,SNR JMP POSINIT LDA 2,ICOUNT POSINIT:: ADD 2,1 STA 1,IBUFAD LDA 1,1,3 ;STARTING POSITION AS INTEGER STA 1,STRPOS LDA 1,2,3 ;ENDING POSITION AS INTEGER STA 1,ENDPOS LDA 3,SCANAD ADD 0,3 LDA 1,0,3 STA 1,DEV LDA 3,COMMON LDA 2,DRIVE.3 COM 1,1 AMD 1,2 ADC 1,2 STA 2,DRIVE,3 LDA 3,UPARR ADD 0,3 LDA 0,0,3 STA 0,UPDOWN LDA 0,1,3 STA 0,DOWNUP LDA 0,3,3 STA 0,ADDER DOR 2,MTR ;START DRIVE LDA 0,BUFAD STA 0,IDATA ;INITIALIZE AUTO-INC LOCATION FOR DATA COLL. NIOC A2D NIOP A2D NIOS A2D LDA 0,STRPOS ADDOR 0,0 LDA 1,IDIR MOV 1,1,SZR JMP MEGATIVE LDA 3,COMMON LDA 3,DRIVE,3 POSITIVE: DOA 3,MTR DIB 1,MTR ADDOR 1,1 SUBZ&num; 0,1,SNC JMP POSITIVE DIB 2,MTR ADDOR 2,2 SUBZ&num; 0,2,SNC JMP POSITIVE ADDOR 0,0 INTDS JMP LOOPEND OLD: 0 LOOP: LDA 3,COMMON LDA 3,DRIVE,3 LOOP1: DOA 3,MTR DIB 1,MTR SKP1: SKPDZ MTR JSR ZEROR SUBZL&num; 0,1,SZC JMP LOOP1 DIB 2,MTR SUBZL&num; 0,2,SZC JMP LOOP1 LOOPEND: STA 0,OLD JSR&commat; .+1 ONEPT ADD 1,0 JMP LOOP EXIT: LDA 3,COMMON LDA 1,DRIVE,3 LDA 0,DEV COM 0,0 AND 0,1 STA 1,DRIVE,3 DOA 1,MTR ;CLEAR CURRENT DRIVE BITS SUBO 0,0 STA 0,DEV ;CLEAR DRIVER WORD STA 0,DONE LDA 0,TEMP STA&commat; 0,MBUFAD INTEN JSR&commat; .FRET ;COMMENTS - DATA AREAS FOLLOW UPARR: .+1 ISZ IBUFAD DSZ IBUFAD ISZ IBUFAD LDA 1,1,3 LDA 1,-1,3 INCREM: 19. MBUFAD: 0 SKPER: SKPDZ MTR JMER: JMP .+2 TEMP: 0 TIME: 0 ;TEMPORARY SAVE FOR NIOS TIME SCANAD: .+1 100001 ;LINEAR DRIVE 40001 ;LINEAR DRIVE - NEGATIVE DEV: 0 COMMON: COMMUN NEGATIVE: LDA 3,COMMON LDA 3,DRIVE,3 LOOP2: DOA 3,MTR DIB 1,MTR ADDOR 1,1 SUBZ&num; 1,0,SNC JMP LOOP2 DIB 2,MTR SUBZ&num; 2,0,SNC JMP LOOP2 ADDOR 0,0 INTDS JMP NLOPEND NLOOP: LDA 3,COMMON LDA 3,DRIVE,3 LOOPE: DOA 3,MTR DIB 1,MTR SKP2:SKPDZ MTR JSR ZEROR ADCZL&num; 0,1,SNC JMP LOOP3 DIB 2,MTR ADCZL&num; 0,2,SNC JMP LOOP3 NLOPEND: STA 0,OLD JSR&commat; .+1 ONEPT SUB 1.0 JMP NLOOP a ZERO: STA 3,ZEROR-1 LDA 2,JMER STA 2,-2,3 STA 1,TEMP LDA 3,COMMON LDA 3,DRIVE,3 JMP&commat; ZERUR-1 .END Annexe A Partie X @@@@@@@@@@@.SR 9/4/75 RSMW @@@@L @@@@@@ENK POINT INITATE @@@@@L REHS@@@ .@@TLE FEGREAK .ENT REGREAK .CXTD .CPYL..FRET,ABREAK,CBREAK,.FCAL,EXIT .NREL USIP.12 ;ADDRESS OF USER STACK TABLE 0 REBREAK: JSR&commat; .CPYL LDA 2,USTP LDA 0,AADR STA 0,11,2 LDA 0,CADR STA 0,12,2 JSR&commat; .FRET ABI: JSR&commat; .FCAL ABREAK 0 JSR&commat; .FCAL EXIT 0 CBI: JSR&commat; .FCAL CBREAK 0 JSR&commat; .FCAL EXIT 0 AADR: ABI CADR:CBI .END Annexe A Partie XI ;DISPLAY.SR 9/30/75 RSMW ;MODEL I DISPLAY DRIVER FOR VIDEO TERMINAL (TTY) ;CALL DISLAY (ICHARS (1920/2), ICOUNT) ;CALL DRISPLAY (ICHARS, ICOUNT) .TITLE DISPLAY .ENT DISPLAY, RDISPLAY,RBLOCK .EXTD .CPYL,.FRET BUFAD=24 ;AUTO INCREMENT ADDRESS FOR OUTPUT FROM READ BLOCK .NREL 2 DISPLAY: JSR&commat; .CPYL LDA 0,-167,3 LDA&commat; 1,-166,3 LDA 2,SWITCH MOVL&num; 2,2,SZC JMP WPEN STA 0,BUFAD STA 1,ICOUNT LDR 0,WRITR SU60 1,1 .SYSTM .OPEN 3 JMP ERR1 LDA 2,SWITCH ADDOR 2,2 STA 2,SWITCH LDA 0,BUFAD LDA 1,ICOUNT WOPEN: MOVZL 0,0 .SYSTM .WRS 3 JMP ERR2 JSR&commat; .FRET DATA AREA FOLLOWS .TXIM 1 WRITR: .+1*2 .TXT "$TTO" READR: .+1*2 .TXT "$TTI" ACOUNT: 0 ICOUNT: 0 SWITCH: 0 BYTECT: 0 ENDCHAR: 0 CNTLC: 7 MAX: 1920. C377: 377 CR: 15 LF: 12 TAB: 11 ERR1: ERR2: ERR3: ERR4: JSR&commat; .FRET 2 RDISPLAY: JSR&commat; .CPYL LDA 0,-167,3 LDA 2,-166,3 STA 2,ACOUNT LDA 1,0,2 LDA 2,SWITCH MOVR&num; 2,2,SZC JMAP ROPEN STA 0,BUFAD STA 1,ICOUNT LDA 0,REARD SUBO 1,1 .SYSTM .OPEN 4 JMP ERR3 LDA 2,SWITCH INC 2,2 STA 2,SWITCH LDA 0,BUFAD LDA 1,ICOUNT ROPEN: MOVZL 0,0 .SYSTM .RDS 4 JMP ERR4 STA&commat; 1.ACOUNT JSR&commat; .FRET READ BLOCK SUBROUTINE FOR BEE HIVE TERMINAL 2 RBLOCK: JSR&commat; .CPYL LDA 0,-167,3 STA 0,BUFAD LDA 2,-16,3 STA 2,ACOUNT LDA 1,0,2 MOV&num; 1,1,SNR JMP EXIT ;ZERO BYTES INPUT REQ. LDA 3,MAX SUBZ&num; 1,3,SNC JMAP EXIT ;GREATER THAN 1920 BYTES STA 1,BYTECT LDA 2,SWITCH MOVL&num; 2,2,SNC JMP EXIT ;OUTPUT FILE NOT OPEN .SYSTM .ODIS ;DISAELE CONSOLE INTERRUPTS JMP EXIT LDA 0,CNTLC STA 0,ENDCHAR ;IF SEEN TERMINATES INPUT OUTER: ADCZL 2,2 - INNER: .SYSTM .GCHAR JMP EXIT LDA 3,C377 AND 3,0 LDA 3,ENDCHAR SUBZ&num; 3,0,SNR JMP DONE LDA 3,CR SUBZ&num; 3,0,SNR JMP INNER LDA 3,LF SUBZ&num; 3,0,SNR JMP INNER LDA 3,TAB SUBZ&num; 3,0,SNR JMP INNER MOV 0,0,SNR JMP INNER INC 2,2,SZR JMP ODD ADD 0,1 STA&commat; 1,BUFAD DSZ BYTECT JMP OUTER JMP EXIT ODD: MOVS 0,1 DSZ BYTECT JMP INNER LDA 3,BUFAD LDA 2,0,3 LDA 3,C377 AND 3,2 ADD 2,1 STA&commat; 1,BUFAD JMP EXIT DONE: INC 2,2,SZR JMP EVEN LDA 3,BUFAD LDA 2,0,3 LDA 3,C377 AND 3,2 ADD 2,1 STA&commat; 1,BUFAD EVEN: LDA&commat; 2,ACOUNT LDA 1,BYTECT SUB 1,2 STA&commat; 2,ACOUNT EXIT: .SYSTM .OEBL JSR&commat; .FRET JSR&commat; .FRET .END Annexe B Partie I C...XRAY.FR C C..28 RUG 19?5 M. WOMAN C.....7/27 WRITE TEMPORARILY ALL DATA ON DP1 INSTEAD OF MT C...............LATER DP1 REPLACED BY FLOPPY........... C PURPOSE-- OPEN NEW PATIENT INPUT FILE C INITIALIZE BOOKEEPING C ASSUMES ONE PATIENT/TAPE C PARAMETER L1=1,L2=2,L3=3,L4=4,LN=256,KALRC=920 PARAMETER KBI=11,KBO=10,ST=33010K,MTC=256 COMMON IA(388) COMMON/FILES/ IPAT(5), MTX(4), MTO(3), MTI(3),KCL(5),KAN(6) COMMON/CONTROL/LSTP, LHAR, LPRN COMMON/INPUT/IN(256), ICAL(1024) CIMENSION JPT(15), AMGLE(194), ITD(3), ITM(3) EQUIVALENCE(1A(1), ANGLE(1)), (ITD(1), IA(362)), (ITM(1),IA(365)0 EQUIVALENCE(JPT(1), IN(29)), (ISLICE,IN(7)) EQUIVALENCE CHRCSKP, ICAL (KALRC)) DATA IPAT/"C4","PA","T.","SC",0/ DATA KAN/"C4","AN","GL","E.","SC",0/ DATA MTX/"MT","0:","O",0/ DATA MTO/"MT","O",0/ DATA KCL/"CA","LI","B.","SC",0/ DATA LSTP,LHAR,LPRN/"EN","GO","PR"/ 10 TYPE "MOUNT PATIENT TAPE - WNIT 0" WRITE (KBO, 900) 900 FORMAT("AMS GO WHEN READY- END TO STOP") C IHPUT MT CONTROL WORDS READ(KBI,901) KHAR 901 FORMAT(A20 IF (KHAR. EQ.KSTP) .GO TO 800 IF (KHAR. NE. LHAR. AND. KHAR.NE. LPRN) GO TO 10 C C.,REMIND OPERATOR TO INSERT FLOPPY AND READY IT C 15 TYPE "FLOPPY READY ? WRITE (KB0,900) READ (KBI,901) IFLP IF(IFLP.EQ.LSTP) GO TO 800 IF(IFLP.NE.LHAR) GO TO 15 C C INPUT TAPE INITIALIZED ..... C 20 L=L2 CALL INITOMTO, IER). IF(IER.NE.1) GO TO 810 C C OPEN FILES C L1=PATIENT FILE ON DISK C L2=INPUT MAGNETIC TAPE L=L1. OPEN L1, IPAT,ATT="RE".LEN=lN*2 L=L3 OPEN L3,KCL L=L4 OPEN L4,KAN.ATT="RE".LEN=194*4 LuL2 CALL MTOPD (L2, MTX, 8, IER) IF(IER.ME.1) GO TO 820 C C MOVE PATIENT HEADER TO DISK FILE C CALL MTDIO9L2,LN,IN,ISAT,IS) IF(IS.NE.1) GO TO 838 C C PRINT PATIENT HERDER NAME SLICE C 30 JSLICE=(ISLICE.AND.377K) WRITE(10,940) JPT.JSLICE 940 FORMAT("PATIENT: ",15A2,10X,"SLICE ",13) C C EAD CALIBRATION FILE C L=L3 CALL RDBLK(L3,0,ICAL,3.IER) IF(IER.NE.1) GO TO 840 IN(MTC-3)=0 IN(MTC-2)=ICAL(KALRC) IN(MTC-1)=MTX(3) IN(MTC)=1 IF(KHAR.EQ.LPRH) ACCEPT "PRINT PARAMETER ?",IN(MTC-3) L=L1 CALL WRBLK(L1,0,IN,1,IER) IF (IER. NE.1) GO TO 840 C C BUILD C4ANGLE.SC C CALL STCON (IA.388,0) CALL DATE(ITD.IER) CALL TIME(ITM,IER) C**********MOVE THE PATIENT NAME CALL BMOVE (IN(9), IA(368).15) C**********MOVE THE PATIENT CODE CALL BMOVE (IN(47). IA(383),5) C WRITE BINARY (L4) ANGLE C C SKIP CORRECT MUMSER OF RECORDS (LOGICAL RECORDS) C IF(NRCSKP.EA.00 GO TO 500 C SKIP IS FROUIRED L=L2 TYPE "SKIP IS REQUIRED", NRCSKP DO 100 I=1,NRCSKP DO 95 J=1,3 CALL MTDIO (L2,SF,IN,ISTAT,IS) IF(IS.NE.1) GO TO 850 ICK=ISTAT.AND.100000K IF(ICK.NE.0) GO TO 850 95 CONTINUE 188 CONTINUE C C 500 K=NRCSKP +1 TYPE "MT-POSITIONED LOGICAL FILE",K CLOSE L1 CLOSE L3 CLOSE L4 CALL FCHAN ("RFSCAN.SV") C.......ERRORS/STOPS C USER REQUESTED STOP 800 TYPE "800 STOP REQUESTED BY USER STOP NORMAL C C MAGNETIC TAPE INIT ERROR C C 810 TYPE'810 MT INIT ERROR UNIT =" ,L GO TO 899 C C C 820 TYPE "820 MT OPEN ERROR UNIT =" ,L GO TO 899 C C MT READING ERROR C 830 TYPE "830 MT READ ERROR" WRITE (K80. 902) ISTAT. IS 902 FORMAT (" HARDWARE STATUS", 010, " SOFTWARE CONTROL", 15) GO TO 30 C C DISK READ WRITE ERROR C 840 TYPE "840 DISK ERROR", L,IER GO TO 899 C C IT SKIPPING ERROR C 858 TYPE "850 MT FILE FMT ERROR", I.J.ISTAT, IS C GO TO B99 899 CONTINUE STOP ABNORMAL CONDITION END C..RFSCAN,FR C C 05 SEPT 1975 W.HOMAN C.......7/26.. RE INSERT MULTI TASKING,509/508, ANGLE SUB C C PURPOSE--WRITE DATA FROM 12 DETECTORS AND REFERENCE ONTO A DISK FILE FOR PROCESSING BY THE CONVOLUTIOND AHD BACKPROJECTION.... C C > > > > > > > > > LOAD LINE LOOKS AS FOLLOWS > > > > > > > > > > > > C C RLDR RFSCAN NPROC RFINTER NOPCL KORR KREAD RFDSKIO BLOCK LONG &commat;FLB&commat; --FTN V C C****************COMMDN AREA**************** PARAMETER DECT=-5.5.KRD=I.SF=3000SK,HOME=0 C*******KRD=0 FOR SAI CONTROLLER**************** C COMMON IN(3760),R(750),V(750),X(512),X(512).W(512).ANGLE(194) COMMON/CO/CENIER(180),Y(180).JZX(4,12).FACT.SCALE.IANG COMMON/MULTI/KEY,IBFR,KEYT,JREAD,XANG COMMON/IO/IOO(6),KTRL,IPM(6) COMMON/AVERAG/AVI,AVH,AVX INTEGER TME(6) EQUIVALENCE (ANG.IN(1)) EQUIVALENCE (IOO(1),L1),(IOO(2),L2),(IOO(3),L3) EQUIVALEHCE (IOO(4),L4),(IOO(5),L5),(IOO(6),L6) DATA ABI,AVM,AVX/1.0,1.0.1.0/ DATA IANG, ISCALE, JREAD/1,0,0/ DATA IOO/1,2,3,4,5,6/ DATA KTRL/0/ DATA IPM/"SC", 508,0,180,1,1/ C C L1=MT INPUT DMA C L2=C4ANGLE.SC FILE FOR BACKPROJECTION C L3=RAW.SC FILE - FILE FOR NEW CONVOLUTION C L4=RAW.KO FILE - FILE FOR OLD CONVOLUTION C L5=PARM.DI FILE-PARAMETER CONTROLL FILE FOR CONVOLUTION C L6=CALIB.SC FILE FOR PRE PROCESSING PROGRAM SCANNER C C******************************************* C KEY=0 KEYT=0 TYPE "RFSCAN-VER 5.1 10/14/75 CALL TIME (TME,IER) TASK DSKIO (ISD), ID=2,PRI=1,ERR=806 C C C.......OPEN FILES AND INITIAL IZE........... C CALL DPCL(1) READ BINARY (L2) ANGLE CALL MTDIO (1.256,IN,ISTAT,ISMT) IF(ISMT.NE.1) GO TO 800 C READ CALIB.SC--CALIBRATION FLLE.... COLL CORR(IS) IF(IS-1) 823,5,820 C C 5 CONTINUE CALL PRI (5) TASK TAPIO (JSMT), ID=3,PRI=4,ERR=806 DO 500 NORCS = 1,15 C C C....PROCESS LOOP FOR TIME,REF,V0-V2 C CALL REC (KEYT,ISMT) JREAD=0 XANG=ANG IF(ISMT.NE.KRD) GO TO 800 DO 100 J=2,4 K=750*J+10 IF(J.HE.2) GO TO 85 C C....UNPACK REFERENCE AND FIRST DECT C ISCALE=1 DO 80 I=1,750 R(I)=IN(I+760) L=I+K 80 V(I)=FLOAT(IN(L)) GO TO 95 C....UNPACK REMAINTNG DECTR'S 85 DO 90 I=1,750 L=k+I 90 V(I)=IN(L) C C...REF IN R(I) DECT(J) IN V(I).. C ISCALE = ISCALE+1 95 IF(J.EO.4) JREAD=1 CALL PROC (ISCALE,NORCS) IF(ISCALE.LT.1) GO TO 810 100 CONTIBUE C C..PROCESS LOOP FOR V3-V7 C CALL REC(KEYT, ISMT) JREAD=0 IF(ISMT.NE.KRD) GO TO 800 DO 150 J=1,5 K=750*(J-1)+10 DO 110 I=1,750 L=I+K 110 V(I)=IN(L) C ISCALE=ISCALE+1 IF(J.EQ.S) JREAD=1 CALL PROC (ISCALE,NORCS) IF(ISCALE.LT.1) GO TO 810 150 CONTINUE C C..PROCESS LOOP FOR V8-Bll... C CALL REC (KEYT, ISMT) JREAD=0 IF(ISMT.NE.KRD) GO TO 800 DO 200 J=1,4 K=750*(J-1)+10 C' DO 170 I=1,750 L=I+K 170 V(I)=IN(L) ISCALE=ISCALE+1 IF(J.EQ.4) JREAD=1 CALL PROC(ISCALE, NORCS) IF(ISCALE.LT.1) GO TO 810 200 CONTINUE 500 CONTINUE C C..15 LOGICAL DATA RECORDS (45 PHYSICAL) AND 180 ANSLES PROCESSED C CALL FSEEK (L2,HOME) WRITE BINARY (L2) ANGLE C C. SET UP CONTROL FILE FOR CONVOLUTION PGN C WRITE BINARY (L5) IPM C C.. CLOSE ALL FILES.. C CALL TIME (TME(4). IER). IT=((TME(4)-TME(1))*60+TME(5)-TME(2))*60+TME(6)-TME(3) WRITE(10,916) IT 916 FORMAT(" PRE PROCESS REQUIRED". 13. " SECONDS") CALL OPCL(-1) CALL FCHAN("CO.SV") C***************************************** C C..........ERROR CONDITIONS............... C 800 WRITE (10,915)ISTAT,ISMT,NORCS,ISCALE 915 FORMAT (" 800 ERROR",010,315) C 810 CALL OPCL(-1) STOP ABNORMAL C 820 TYPE "820 CALIB FILE READ ERROR" GO TO 810 823 TYPE "INIT ERROR ",IER GO TO 810 806 TYPE "806-TASK INT ERROR" STOP ABNORMALLY END C..NPROC.FR (PROC) C 21 AUG 1975 W HOMAH C 25 JULY REMOVE AVERAGING IN THE SCAL ING PART. C THIS IS DOME AS THE DIFERENCES ACCOMPLISHES C THE SAME EFECT. C PURPOSE : C MAKE THE FOLLOWING CORRECTIONS C 1, OFFSET C 2. PLASTIC C 3. INTERPOLATE TO 509 POTNTS C PRRRMETER LP=12 C SUBROUTIBE PROC (J.NORCS) C C****************COMION AREA**************** C COMMON IN(3760),R(750),V(750),X(512),W(512),ANGLE(194) COMMON/CO/CEHTER(180),Y(180),JZX(4,12),FACT,SCALE,IANG COMMON/MULTI/KEY,IEFR,KEYT,JREAD,XANG COMMON/IO/100(6),KTRL,IPM(6) EOUTVALENCE (ANG,IN(1)) EOUIVALENCE(100(1),L1),(100(2),L2),(100(3),L3) EOUIVALENCE (100(4)),L4),(100(5),L5),(100(6),L6) C C L1=MT C L2=C4ANGLE.SC FILE FOR BACKPROJECTION C L3=RAW.SC FILE - FILE FOR NEW CONVOLUTION C L4=RAW.KO FILE - FILE FOR OLD CONVOLUTION C L5=PARM.DI FILE-PARAMETER CONTROLL FILE FOR CONVOLUTION C L6=CALTB.SC FILE FOR PRE PROCESSING PROGRAM SCANNER C******************************************************* C C C..V(1)=CURRENT DETECTOR AND J IS INPUT PARM (ISCALE FRM MAIN) C TASK TAPIO (IS), ID=3,PRI=4,ERR=821 IF(IANG,EQ.1) IBFR=1 ZEROSUM=0.0 121=JZX(1,J) 122=MAX0(IZ1,JZX(2,J)-5) 124=JZX(4,J) 123=MIN0(124,JZX(3,J)+5) 122=0 C IF(IZl.EO.6.OR.IZI.GE.1Z2) GO TO 165 DO 100 1=IZI,122 X IF(KTRL.GE.10) WRITE(LP,901)I,R(I),ZEROSUM,IZI,122 X 901 FORMAT(" VR", 15,3F12.6,215) 100 ZEROSUM=ZEROSUM+V(I)/R(I) IZZ=122+1 105 IF(124,EQ.0.OR.123.GE.124) go to 115 DO 110 1=123,124 X IF(KTRL.GE.10) WRITE(LP,901) I,V(1),R(1),ZEROSUM,123,124 110 ZEROSUM=ZEROSUM+V(I)/R(I) C IZZ=122+1 155 IF(IZZ.EQ.0) 122=1 ZEROSUM=ZEROSUM/(122-121+124-123+122) C C+++ DO 120 I=1,750 CALL REFC(V,R,ZEROSUM.750) C+++ 120 V(I)= (V(I)/R(I)-ZEROSUM) C CSET UP TO DO THE INTERPOLATIUN C....THIS PART IS DOUBLE BUFFERED ALL INPUT IS IN (V(I), R(I) C....WHILE ALL DUTPUT IS IN X(I) OR W(I) DEPENDING ON THE VALUE OF IBFR C....IBFR IS CHANGED IN THE IHTERPOLATION/STORE ROUTINE C C IF(KTRL.GE.10)WRITE(12,900)IANG,J.121,122,123,124,122,IBFR,ZEROSUM 900 FORWAT (" PROC",8110,F10.5) IF(IGFR.LT.0) GO TO 140 C..IBFR=1 THUS USE X (GE 0) CALL INTER (X.J) GO TO 155 C********************************* C C..IBFR=2 THUS USEW (LT.0) 140 CALL INTER (W.J) C C C 155 IF(IBFR.EQ.0) GO TO 821 IANG=IANG+1 RETURN C..........ERRORS........... C 820 TYPE "DISK WRITE ERROR (LER, IER 821 J=-1 RETURN END C..RFINTER.FR C 26 AUG 1975 W HOMAN C 25 JULY REMOVE AVERAGING IN THE SCALING PART. C THIS IS DONE AS THE DIFERENCE ACCOMPLISHES C THE SAHE EFECT. C 10 AUGUST - REVAHP INTERPOLATION AND C DIFFERENTIATION INTERPOLATION. (J.DEHNERT) C PURPOSE: C DO THE INTERPOLATIO AND ACT C PARAMETER ANGX=-6.5,LP=12,ANGV SUBROUTINE INTER (X,J) C****************COHMOH AREA******************* COMMON IN(3760),R(750),V(750),DUMMY(512),W(512),ANGLE(194) COMMON/CO/CEHTER(180),Y(180),JZX(4,12),FACT,SCALE,IANG COMMON/MULTI/KEY,BFR,KEYT,JREAD,XANG COMMON/IO/IOO(6),KTRL,IPM(6) COMMON/AVERAG/AV1,AVN,AVX DOUBLE PRECISION SQ,PNT,FRAC DIMENION X(512) EQUIVALENCE (ANG,IN(1)) EQUIVALENCE (IOO(1),L1),(TOO(2),L2),(IOO(3),L3) EQUIVALENCE (IOO(4),L4),(IOO(5),L5),(IOO(6),L6) C C L1=MT INPUT DMA C L2=C4ANGLE.SC FILE FOR BACKPROJECTION C L3=RAW.SC FILE - FILE FOR NEW CONVOLUTION C L4=RAW.KO FILE - FILE FOR OLD CONVOLUTION C L5=PARM.D1 FILE-PARAMETER CONTROLL FILE FOR CONVOLUTION C L6=CALTB.SC FILE FOR PRE PROCESSING PROGRAM SCANNER C C******************************************************** C C C DO THE INTERROLATION FROM PLASTIC,PHAN (H),PLASTIC C ITWO=2 IFOUR=4 ZERO=0.0 IF(IANG.GT.12) KTRL=0 IF(IANG.LE.3.AND.KTRL.GE.9) WRITE(LP.901) V 901 FORMAT(" V",10F10.6) C **** INITIALIZE FRACTION, LOOP BOUNDS.AND DIFFERENCES SOS = Y(IANG) SQ = DBLE(SOS) RNT = DBLE(CENTER(IANG)) - 253.500*SQ IS = PNT FRAC = PNT-DFLOAT(IS) IE = DBLE(CENTER(IANG)) + 253.500*SQ Y1 = V(IS-1) Y2 = V(IS) Y3 = V(IS+1) Y4 = (IS+2) DY1 = Y2-Y1 DY2 = Y3-Y2 DY3 = Y4-Y3 DDY1 = DY2-DY1 DDY2 = DY3-DY2 DDDY = DDY2-DDY1 IT = 1 C **** PERFORM-INTERPCLATION DO 130 I=IS.IE IF (FRAC.GT.1.0) GO TO 125 FR=FRAC UX=((DDDY*(FR-1,0)/6.0+DDY1/2)*FR+DY1)*(FR+1.0)+Y1 DUX=(DDDY*FR/2.0+DDYI)*FR+DY1+DDY1/2.0-DDDY/6.0 X(IT) = SCALE*DUX/UX/SQS IT = IT+1 FRAC = FRAC+SQ 125 FRAC = FRAC-1.0D0 Y1=Y2 Y2=Y3 Y3=Y4 Y4=V(I+3) DY1=DY2 DY2=DY3 DY3=Y4-Y3 DDY1=DDY2 DDY2=DY3-DY2 DDDY=DDY2-DDY1 130 CONTINUE C C **** SET THE ANGLE IN RADIANS ANGLE(IANG)=(XANG-ANGX+J)/57.29577951-ANGY C C **** OUTPUT INTERPOLATION RESULTS (ACTIVATE DSKIO) JBFR=IBFR CALL XMTW(KEY,JBFR,ERR=810) IBFR=-1*IBFR RETURH C*********************************** C+++SINGLE TASK+++ JBFR=IBFR C+++SINGLE TASK+++ CALL DSKIO (JBFR) C+++SINGLE TASK+++ IF(IABS(JBFR).NE.1) IBFR=0 C+++ IBFR=-I*IBFR C+++ RETURN 810 TYPE "XMT SET UP ERROR" RETURN END C..NOPCL.FR (OPCL) C C 29 AUG 1975 W, HOMAN C PURPOSE OPEN AND CLOSE FILES TO SWITCH TO FORT V THIS PGM C MUST eE CHANGED C PARAMETER SCX=400.0 SUBROUTINE OPCL (K) C C IF K 'PLUS OPEN FILES IF - CLOSE FILES C COMMON/MT/MTX(4) COMMON IN(3760),R(750),X(512),W(512),ANGLE(194) COMMON/CO/CENTER(180),Y(180),JZX(4,12),FACT,SCALE,IANG COMMON/IO/IOO(6),KTRL,IPM(6) EQUIVALENCE (ANG,IN(1)) EQUIVALENCE (IOO(1),L1),(IOO(3\2),L2),(IOO(3),L3) EQUIVALENCE (IOO(4),L4),(IOO(5),L5),(IOO(6),L6) COMMON/FILES/KAN(6),KRB(4),KPM(5),KCL(5) COMMON/FXFIL/KPAT(5),MSET(12) DATA MSET/"0"."1","2","3","4","5","6","7","8","9","10","11"/ DATA KPAT/"C4","PA","T.","SC",0/ C..............................NOTE SCALE IS COMPUTED 4000/1024*80000/180 DATA SCALE/SCX/ DATA MTX/"MT","0:","0",0/ DATA KRA/"C4","AN","GL","E.","SC",0/ DATA KRA/"RA","W.","KO",0/ DATA KRB/"RA","W.","SC",0/ DATA KPM/"PA","PM","S.","SC",0/ DATA KCL/"CA","LI","B.","SC",0/ IF (K.LT.0) GO TO 100 C.......TEMPORARY FILE CONTROL IN KTRL................... C C C............................................ C COPEN THE FILES **************** C OPEN 7,KPAT CALL RDBLK (7,0,IN,I,IER) IF(IER.NE.1) GO TO 800 CLOSE 7 KTRO = IN(256-3) N=IN(256) IF(N.LE.0) N=1 IF(N.GT.12) RETURN MTX(3)=MSET(N) C L=1 CALL MTOPD(1,MTX,4000K,IER) IF(IER.NE.1) GO TO 800 C L=L2 OPEN L2,KAN,ATT="RE",LEN=19 =L3 C L L' OPEN L4,KRA,ATT="RO",LEN=512*2 C =L4 OPEN L4,KRA,ATT="RO",LEN=512*2 C L=LS OPEN L5,KPM,ATT="RO",LEN=12 C L=L6 OPEN L6,KCL,ATT="RE,LEN= C , ' RETURN C********************************* C CLOSE ALL FILES ***************** C 166 CLOSE L2 CLOSE L3 CLOSE L4 CLOSE L5 CLOSE L6 RETURN C******************************** C C ERRORS********* C 800 TYPE "FILE OPEN ERROR :: GO TO 100 ***************** END C..TAPIO.FR C PURPOSE -MULTI TASK MAG TAPE IO IN PRE-PROCESSING C C 5 SEPT 1975 C SUBROUTINE TAPIO (IS) COMMON IN(3760),R(750),V(750),X(512),W(512),ANGLE(194) COMMON/MULTI/KEY,IBFR,KEYT,JREAD,XANG COMMON/NR/NR DATA NR.1. CALL MTDIO (1,3760,IN,ISTAT,IS) IF(IS.NE.1)GO TO 800 X TYPE "RECORD,IS",NR,IS JS=IS NR=NR+1 CALL XMTW(KEYT,JS,ERR=810) RETURN 800 CONTINUE IF((ISTAT.AND.400K).EO.400K) GO TO 805 WRITE(10,900)NR,ISTAT,IS 900 FORMAT(" MT READ ERROR REC= ",15," STATUS ",O10,15) RETURN 805 NR=NR-1 CALL MTDIO (1,40000K,IN,ISTAT,IS) X TYPE "EOF ",NR RETURN 810 TYPE "TAPIO XMT ERR ",NR IS=-1 RETURN END C..KORR.FR (CORR) C 21 AUG. 1975 W HOHAN (VERSION 2) C PARAMETER ANGX=-6.5 SUBROUTINE CORR(IER) COMMON IN(3760),R(750),V(750),X(512),W(512),ANGLE(194) COMMON/CO/CENTER(180),Y(180),JZX(4,12),FACT,SCALE,IANG COMMON/MOLTI/KEY,IBFR COMMON/IO/IOO(6),KTRL,IPM(6) CQUIVALENCE (ANG,IN(1)) CQUIVALENCE (IOO(1),L1),(IOO(2),L2),(IOO(3),L3) CQUIVALENCE (IOO(4),L4),(IOO(5),L5),(IOO(6),L6) DIMENSION ICOR(1024),CE(216),CY(216) EQUIVALENCE(XF,IN(918)) EQUIVALENCE(ICOR(1).IN(1)),(NRC,ICOR(920)) EQUIVALENCE(CE(1),IN(4)),(CY(1),IN(436)) C C CFILE IS ASSUMED TO BE OPENED C CALL RDBLE(L6,0,ICOR,4,IER) IF(IDR.NE.1) RETURN C Z=525.0/509.0 DO 20 J=1,12 D=Z/COS((ANGX+J)/57.29577951) DO 10 1=J,216,12 10 CY(1)=D 20 CONTINUE C FACT=XF iF(NRC.GT.3) GO TO 883 C II=NRC*12+1 IE=II+179 C MOVE CENTERS AND DISTANCE INTERVAL MEASUREMENTS C K=1 DO 100 I=II.IE CENTER(K)=CE(I) Y(K)=CY(I) 100 K-K+1 C C MOVE LEhD VALUES C Ks868 DO 250 J=1,12 DO 200 I=1,4 JZX(I,J)=ICOR(K) 200 K=K+1 258 CONTINUE C IF(KTRL.LT.8) RETURN WRITE(12,900)KTRL 900 FORMAT(" CENTER",10X,"PRINT FLAG: ",15) WRITE(12,901) CENTER 901 FORIIAT(" ",12F10.2) WRITE(12,902) 902 FORIIAT (" Y") WRITE(12,903) Y 903 FORMAT(" ",12F10.6) RETURN C 803 TYPE "LOGICAL REC ) 3",NRC IER=-1*NRC RETURN END C..RFDSKIO.FR (DSKIO) C 26 AUG 1975 W HOMAN C 10 SEPT 1975 J DEHNERT - CHANGES FOR COMBTNED INTERPOLATION, DIFFERENTIATION C PARAMETER LP=12 SUBROUTINE DSKIO (IS) COMMON IN(3760),R(750), V(750),X(512),W(512),ANGLE(194) COMMON/CO/CENTER(180),Y(180),JZX(4,12),FACT,SCALE,IANG CONNON/MDLTI/KEY,IDMYSFR CONNON/IO/IOO(6),KTRL,IPM(6) DIMEMSION IO(512) EQUIVALENCE(IO(1),V(1)) EQUIVALENCE (ANG,IN(1)) EQUIVALENCE (IOO(1),L1),(IOO(2),L2),(IOO(3),L3) EQUIVALENCE (IOO(4),L4),(IOO(5),L5),(IOO(6),L6) IS=1 1 CALL REC (KEYU,IL) IK=IL IPX=IANG-1 IF(KTRL.GT.10) WRITE(LP,900) IANG,IRX,IRX,IK,X(512),W(512) 900 FORMAT(" DSKIO",3I10,2F10.3) L=L3 C IF(IL.LT.0) GO TO 366 C CALL WRBLK(L3,IRX*4,X,4,IER) IF(IER.NE.1) GO TO 820 GO TO 1 300 CALL WRBLK(L3,IRX*4,W,4,IER) IF(IER.NE.1) GO TO 820 GO TO 1 C ', 820 IYPE "DSKIU(820) ERRUR",L,IER IS=TER RETURN END Annexe B Partie II ;ASSEMBLY LANGUAGE SUBROUTINE TO DO ;REFERENCE AND OFFSET CORRECTION ;ROBERT A.LEMAN ;SEPTEMBER 23,1975 .TITLE FSREFC R0=0 R1=1 R2=2 R3=3 F0=0 F1=1 F2=2 F3-3 ;SUBROUTINE TO PERFORM REFERENCE AND ;OFFSET CORECTION. THE ARGUMENTS ARE: ;THE ARRAY OF DETECTOR VALUES(REAL) ;THE ARRAY OF REFERENCE VALUES(REAL) ;THE OFFSET VALUE(REAL) ;THE NUMBER OF POINTS(INTEGER) ;THE CALL IS: ;CALL REFC ( , , ; , ) THE EOUATION SOLVED IS: ;V(I) = (V(I)/R(I)) - Z * POINTS > I > 1 ;THE VALUE IS RETURNED TO THE DETECTOR SOURCE ARRAY .ENT REFC .ZPEL REFC: REF .NREL REF:SAVE 0 ;AC0 = ADDRESS OF R(I) ;ACL = ADDRESS OF V(I) FLDS F2,&commat;-5,R3 ;LOAD OFFSET "Z" LDA R2,&commat;-6,R3 ;LOAD COUNT "N" MOV R1,R3 ;MOVE ADDRESS OF V(I) NEG R2,R1 ;NEGATE COUNT MOV R0,R2 ;MOVE ADDRESS OF R(I) LOOP: FLDS F0,0,R3 ;F0 = V(I) FDMS F0,0,R2 ;F0 = V(I)/R(I) ADI 2,R2 ;INCREMENT POINTER TO R(I) FSS F2,F0 ;F0 = V(I)/R(I) - Z FSTS F0,0,R3 ;STORE RESULT BACK ADI 2,R3 ;INCREMENT POINTER TO V(I) INC R1.R1 ,SZR ;DONE II POINTS? JMP LOOP ;NO, DO SOME MORE RTN ;YES, BYE .END ;END OF REF. SR Annexe B Par tie III C COVOL2.FR C C C PURPOSE--MAIN DRIVER FOR CONVOLUTION PRIOR C TO ENTERING THE BACK-PROJECTION PHASE C C *** 25 JUNE 1975 W. HOMAN C 6/25 PUT IN ALL CHANGES TO PGM MADE TO KOVOLE 5-10THRU 6-17 C 7/28 CHANGE TO ACCEPT NEW INPUT AND CALL NEW FFT C *** 14 AUGUST 1975 - J.DEHNERT C 21 AUGUST - MULTIPLE RECORD DUTPUT C PARAMETER REW=2,MSR=3,LPT=12,NRW=3,RAWBLK=4,MMS=4,MSRSLK=4 PARAMETER HCLEN=512,CLEN=2*HCLEN,DCLEN=2*CLEN PARAMETER MSLEN=NMS*HCLEN-1,RWLEN=NRW*HCLEN-1 PARAMETER FORWARD=0,REVERSE=1 COMMON/PARMS/IEXT,NDP,1B,NP,INPX(4),IOTX(6),IPARM(5),IFFH(4) COMMON /FCN/ CON(CLEN) COMMON /DATA/AMSR(0:MSLEN),FFT|(DCLEN),ARAW(0:RWLEN) C INTEGER T(6) C C C **** INITIAL IZE TYPE "CO 8/21/75 " CALL TIME(T,IER) KTIME=1 GO TO (50,800) CONIT(0) C **** MOTE THAT NDP MUST BE ODD 58 ICCNT=CLEN-NDP IRSTRT=ICCNT+1 ICSTRT=DCLEN-ICCNT+1 IPSTRT=NCLEN+1 C **** ENTER THE DATA PROCESSING LOOP:READ AND UNPACK DATA DO 500 IP=0,NP-1 IRW=MOD(IP,NRW) IF (IRW.EQ.0) CALL RDBLK (RAW.IP*RAWBLK,ARAW,RAWBLK*NRW,IER) CALL CHECK(IER) CALL COMUNP(ARAW(IRW*HCLEN),FFT(IRSTRT),NDP) C **** DATA NOW IN FFT(IRSTRT)-FFT(DCLEN-ICCNT), WITH REMAINDER CLEARED C **** PERFORN CONVOLUTION CALL DFTS (FFT,CLEN,FORWARD) CALL COMVOL (FFT,CON,CLEN) CALL DFTS (FFT,CLEN,REVERSE) C **** PACK DATA AND OUTPUT IMS=MOD(IP,MMS) IF (IMS.EQ.0) IP0=IP CALL. COMPCK(FFT(IPSTRT),AMSR(IMS*HCLEN),HCLEN) IF (IMS.EQ.NMS-1) CALL WRBLK(MSR,IP0*MSRBLK,AMSR,MSRBLK*NMS,IER) 500 CALL CHECK(IER) C **** EXIT CLOSE RRW CLOSE MSR CALL TIME(T(4),IER) IT = ((T(4)-T(1))*CO + T(S)-T(2))*60 + T(6)-T(3) TYPE "CONVOLUTION REQUIRED",IT." SECONDS." CALL FCHAN("C4,SV"). 800 STOP ERROR-EXIT C END C CONIT.FR. C C FUNCTION TO HABDLE THE INITIALIZATION OF CONVOLUTION C C 28 JULY 1975 C C LHOMAN. C PARAMETER CLEN = 1024 PARAMETER LU1 = 1, RAW=2, MSR=3, LU4=4 C FUNCTION COMIT (KTIME) C INTEGER PARM, FFH COMMON /PARMS/ IEXT, NDP, IB, MP, INPX(4), IOTX (6), PARM(5), FFH (4) COMMON /FCN/ COM (CLEN) CONIT = 1 C **** IF KIIME C IF KTIME = 0 OR 1 OPEN F IL ES AND IMITIALIZE C IF KTIME > I JUST OPEN INPUT AND OUTPUT FILES IF (KTIME. LT. 0) GO TO 800 IF (KITME. GT. 1) GO TO 400 C **** READ IN PARAMETERS FROM FILE "PARMS" ON LUI LUX-LUI OPEN LU1, PARM READ BIMARY (LU1, ERR=820, END=838) IEXT, NDP. 1B. NP CLOSE LUI 200 INPX (3) = IEXT IOTX (5) = IEXT C C **** INITIALIZE CONVOLUTION FUNCTION FROM FILE FFTH. D2 ON LU4 LUX=LU4 OPEH LU4, FFH CALL RDBLK (LU4, 0, CON, 8, IER) CLOSE LU4 C C **** OPEN. RAW DATA ENPUT FILE RAW. 400 OPEN RAW, INPX.BTT = "ci", LEN=4096.REC=180 C C **** OPEN. MEASUREMENT OUTPUT FILE C4MEASR. OPEN MSR, 10TX,ATT = "C", LEN=2048, REC-180 C C **** EXIT FROM CONIT HERE ****** 500 COMTINUE RETURN C C ***** ERROR RETURN - CLOSE FILES 800 CLOSE RAW CLOSE ItiR CONIT=2 RETURN C **** INPUT ERROR RETURN 828 TYPE "ERR LU = ", LUX GO TO 800 C **** END OF FILE ERROR 830 TYPE "DEFAULT PARAMETERS USED." CLOSE LU1 DELETE PARM GOTO 200 END : ; **** ASSEMBLY LANGUAGE SUBROUTINES FOR THE CONVOLUTION PROSRAM. ; . : JIM DEHNERT ; 15 AUGUST, 1975 ; ; .TITLE COMAC. SR R0=0 R1=1 R2=2 R3=3 F0=0 F1=1 F2=2 F3=3 ; **** SUBROUTINE TO PERFORM THE CONVOLUTION. tHE ARGUMENTS ARE : : THE ARRAY OF COMPLEX VALUES TO BE CONVOLUTED ; THE ARRAY CONTAINING THE CONVOLUTION FUNCTION (IMAGINARY PART) : THE MUMBER OF POINTS INVOLVED THE CALL IS THUS: ; LRLL CUFIVUL ( , , ) .ENT COMVOL .ZREL COMVOL : CVL .NREL CVL : SAVE 0 MOV R0, R2 ;ADDRESS OF CONVOLUTION FUNCTION LDA R0, O-5, R3 ;COUNT NEG R0, R0 MOV R1, R3 ;ADDRESS OF ARRAY TO BE CONVOLVED CVL 1: FLDS F0, 0, R2 ;PICK UP CONVOLVING FUNCTION VALUE FMOV F0, F1 ;COPY FNEG F1 FMMS F0, 0, R3 ;RICK UP IMAGINARY PART ADI 4, R3 ;INCREMENT CONVOLVING FUNCTION POINTER FMMS F0, 0 R3 ;PICK UP REAL PART ADI 4, R3 ;INCREMENT POINTER FSTS F1, -4, R3 ;STORE REAL PART FSTS F0, -2, R3 ;STORE IMAGINARY PART ;(NOTE THAT THESE ARE REVERSED BECAUSE THE CONVOLVING ;FUNCTION IS IMAGINARY.) INC R0, R0, SZR ;INCREMENT COUNTER JMP CVL 1 ;LOOP RTN :RETURN ; **** SUBROUTINE TO UNPACK A SEOUENCE OF REAL VALUES INTO A COMPLEX DESTINATION ; THE CALL IS : ; CALL COMUNP ( , , ) .ENT COMUNP . ZREL COMUNP : UNPCK .NREL UNPCK : SAVE 0 MOV R1, R2 ; SOURCE ADDRESS LDA R1, &commat;-5, R3 ; COUNT NEG R1, R1 MOV R0, R3 ; DESTINATION ADDRESS UNPK1 : LDA R5,0,R2 ; PICK UP HIGH ORDER STA R0,0,R3 ; STORE .LDR R0,1,R2 ; PICK UP LOW ORDER STA R0, 1, R3 ; STOPE ADI 2, R2 ; INCREMENT SOURCE POINTER ADI 4, R3 ; INCREMENT DESTINATION POINTER INC R1, R1, SZR ; INCREMENT LOOP COUNTER IMP UNPK1 ; LOOP RIN ; DONE - RETURN **** SUBROUTINE TO PACK A SEOUENCE OF REAL VALUES WHICH ARE INTERMIXED WITH COMPLEX VALUES. THE PARAMETERS ARE : A SOURCE ARRAY OF COMPLEX VALUES A DESTINATION ARRAY TO RECEIVE THE REAL PARTS A COUNT OF VALUES TO BE TRANSFERRED. THE CALL IS THUS : CALL COMPCK ( , , ) .ENT COMPCK .ZREL COMPCK : PCK .NREL PCK : SAVE 0 MOV R1, R2 ; SOURCE ADDRESS LDA R1, &commat;-5, R3 ; COUNT NEG R1, R1 MOV R0, R3 ; DESTINATION ADDRESS PCK1 : LDA R0,0,R3 ; PICK UP LOW VALUE STA R0, 0, R3 ; STORE LDA R0, 1, R2 ; PICK UP LOW VALUE STA R0, 1, R3 ; STORE ADI 4, R2 ; INCREMENT SOURCE POINTER ADI 2, R3 ; INCREMENT DESTINATION POINTER INC R1, R1, SZR ; INCREMENT COUNTER JMP. PCK1 ; LOOP RTN ; DONE - RETURN END Annexe B Partie IV ; CALL DFTS(DTARAY, LARAY, INVER) ; PASSES ON TO DFI ; LRITABLE AREA 24 WORDS LONG ; POINTED BY AC2 ; WITH POSITIVE DISPLACEMENTS ; FIRST THREE ARE THE ARGUMENTS ; ADDRESS OF DATA ARRAY ; LENGTH OF ARRAY ; AND INVERSION FLAG . TITLE DFT5 . ENT DFT5 . EXTU . ZREL DFT5 : NDFT5 .NREL NDFT5 : SAVE 23+1 UBC 3,2 ; MOVE SP KDA 0, -3,3 ; GET ADDR ARG ; STA 0, DATARAY, 2 ; SET DATA POINTER KDA 0, &commat;-4,3 STA 0, LARAY, 2 ; SET LENGTH OF ARRAY LDA 0, &commat;-5,3 STA 0, INVER, 2 ; TRANSFER INVERT FLAG JSR &commat;.+1 ; GET DFT DFT RTN ; RETURN TO CALLER DTARAY = 0 LARAY = 1 INVER = 2 : . END Annexe B Partie V C COBD. FR C C BLOCK DATA TO PRESET COMMON AND EVENTUALLY CONTAIN DOCUMENTATION C C 25 JULY 1975 W. HOMAN C 19 AUGUST 1975 J. DEHNERT C BLOCK DATA C C INTEGER PARM. FFH COMMON/PARMS/IEXT, NDP, IB, NP, INPX(4), IOTX(6), PARM (5), FFH (4) C DATA PARM/"PA", "RM", "5. ", 0, 0/ DATA FFH /"FF", "TH", ".D", "2 "/ DATA IEXT/0/ NDP/509/ IB/0/ NP/180/ DATA INPX/"RA", "W.", 0, 0/ DATA IOTX/"C4", "ME", "AS", "R.", 0,0/ C C RLDR CO/S COBD COVOL CONIT COMRC DFTSE DFTE &commat;FL65&commat; $LPT/L C******************************************* C C COBD - BLOCK DATA C CUVOL-MAIN LINE DRIVER TO CONTROL PROCESSING C CONIT-INITIAL IZATION C COMAC-ASSEMBLY LANGUAGE SUBROUTINES FOR CONVOLUTION, DATA PACKING C DFTSE, DFTE-FFI C C************************************************************* END Annexe, B Partie VI ; DISCRETE FOURIER TRANSFORM ; USES THE ECLIPSE FLOATING POINT UNIT CRLL; JSR &commat;.+1 DFT RETURN LOC. ; ARGUMENT POINTER IN AC2 ; ARGUMENTS PASSED ; ; DATARAY, 2 ARRAY ADDRESS ; LARAY, 2 ARRAY LENGTH (&num; OF COMPLEX NUMSERS ; INVER, 2 INVERSE TRANSFORM FLAG ;. (NONZERO INDICATES INVERSE) ; WRITABLE AREA PROVIDED BY USER ; NEEDS 23 OCTAL -OCATIONS ; SEE DISPLACEMENTS BELOW ; NO ZERO PAGE LO@ATIONS ARE USED ; FORWARD TRANSFORM IS NOT NORMAL ISED. ; REQUIRES DIVISION BY NUMBER OF ELEMENTS . ; NO ERROR RETURNS PROVIDED ; OVERFLOW UNDERF-OW MAY SE HOWEVER ; TESTED FROM F. P STATUS ; ONLY THE FIRST 2**M ELEMENTS OF HE SEQUENCE ; WILL BE TRANSFORMED, WHERE, ; M IS THE LARGEST POWER OF 2 @OR WHICH ; : 2**m ; IF M > 10 ONLY THE FIRST 1024 ELEMENTS ; WILL BE IRANSFORMED ; WRITABLE AREA PROVIDED BY CALLER ; CODE IS PURE EXCEPT FOR THE @.P INSTRUCTIONS ; FOR A COMPLEX SEOUENCE 1024 @ONG ; THIS ROUTINE TAKES ABOUT 2 S@CS ; ALGORITHM : DECIMATION IN FREQUENCY AS DESCRIBED IN ; DIGITAL PROCESSING OF SIGNALS ; MCGRAW HILL . TITLE DFT . ENT DFT .NREL PRESISTON DEPENDENT PARAMETERS @NGT@ = 4 ; LENGTH OF A COMPLEX ELEMENT RE = 8 ; REAL OFFSET FROM WORD POINTER IM = LNGTH/2 ; IMAGINARY OFFSET FROM WORD SOINTER ; DISPLACEMENTS DTARRY = 0 ; DATA ARRAY ADDRESS LARAY = DTARAY +1 ; LENGTH OF ARRAY INVER = LARAY+1 ; INVESE FLAG RTRN = INVER+1 ; RETURN ADDSESS RTRN1 = RTRH+1 ; LEVEL 1 RETUSN ADDRESS RTRN0 = RTRN1+1 ; LEVEL 0 RETURN ADDRESS J = RTRN0+1 = ; COUNTER I = J+1 ; " " LPCT1 = T+1 ; LOOP1 COUNTER LPCT2 = LPCT1+1 ; LOOP2 COUNTER LOG2N = LPCT2+1 ; LOG TO BASE 2 OF TRANSFORMED LENGTH NTRNS = LOG2N+1 ; LENGTH TR@NSFORMED NDFTB = HTRN3+1 ; NUMBER OF DFTS NSBTR = NDFTS +1 ; LENGTH OF SUB-DFT LPSTP = HSBTR+1 ; STEP SIZE FOR CURRENT LOOP TWDL@ = LPSTP+1 ; WIDDLE FACTOR INDEX REALJ = TWDLF+1 ; REAL PART OF C(J) (POINTER) IMAGJ = REALJ+1 ; IM.PART OF C(J) (POINTER) SIGN = IMAGJ+1 COUNT = J ; COUNTER TEMP = TWDLF ; TEMPORARY FROM = REALJ ; FROM ADDRESS TO = FROM+1 ; TO ADDRESS VARB~X = SIGN-DTARRY+1 ; SIZE OF TEMPERDRIES AND VARIABLES DFT : INC 3,3 ; SK1P"DFT" STA 3, RTRN, 2 ; SAVE RETURN ADDRESS LDA 1, LARAY, 2 LDA 3., MMSX LDA 0., BMX ; USE MAX.LENGTH AND SUBZ* 0,1, SZC ; MAX LOG2 IF INPUT JMP DFTI ; IS LONGER SUBZL 0,0 ACD 3,3 JMP .+3 INC 3,3 MOVZL 0,0 SUBZ* 0,1, SZC JMP .-3 MOVZR 0,0 DFTI : STA 3, LOG2N,2 ; M = LOG2 (LENGTH) STA 0, NTRMS, 2 ; LENGTH TRANSFORMED MOVZR 0,0 STA 0, NSBTR, 2 ; NUMBER OF E~EMENTS / SUB DFT LDR 1., MMAX ; MAX LOG2N ADC 1,3 SUBZL 0,0,SKP MOVZL 0,0 INC 3,3, SZR JMP .-2 ADDZL 0,0 ;: TIMES LENGTH OF AN ELEMENT (2) STA 0,LPSTP,2 ; STEPS IN CO3-SIN TABLE SUBZL 0,0 STA 0,NDFTS. 2 ; INITIAL NUMBER OF DFTS LOOP0 : STA 0, LPCT1,2 ; INITIAL NUMBER OF DFTS SUB 0,0 STA 0,1,2 ; START FROM TOP LOOP1 : LDA 1,NSBTR.2 ; GET LENGTH OF SUB DFT ADD 1,0 STA 0,J.2 ; INITIAL POINTER TO STA 1,LPCT2,2 ; SECOND HALF SUB 0,8 STA 0, TWDLF, 2 ; START WITH ZEROTH TWIDDLE FACTOR LOOP2 : JSR TWDLE ; INCORPORATE TWIDDLE FACTORS ISZ I,2 ISZ J, 2 ; RAISE POINRES LDA 0, TWDLF, 2 ; UPDATE TWIDDLE FRCTOR LDA 1, ERSTP,2 ADD 1,0 STA 0, TWDLF, 2 DSZ LPCT2,2 JAP LOOP2 LDA 0,J,2 STA 0,1,2 ; POINT TO NEXT DFT DSZ LPCT1, 2 JAP LOOP1 ; AND DO NEXT DFT LDA 0, NDFTS, 2 MOVZL 0,0 ; DOUBLE THE DFTS LDA 1, NTRNS, 2 ; TILL NTRNS (= NDFTS SUBZ* 1, 0, SZC JMP DFT3 STA 0, NDFTS, 2 LDA 1, LPSTP, 2 MOVZL 1,1 ; DOUBLE STEP SIZE IN COS-SIN TAB~E STA 1,LPSTP. 2 LDA 1, NSBTR, 2 MOVZR 1,1 ; DIVIDE SUB-DFT LENGTH BY TWO STA 1, NSBTR, 2 JMP LOOPO DFT3 :STA 1,I,2 COUNTER SUB 1,1 ; ELEMENT COUNT JSR BTRVRS ; UNSCRAMBLE INC 1,1 DSZ 1,2 JMP . - 3 JMP OPTRN. 2 ; RETURN TO CALLER ;SWAP ELEMENTS OF ; MUTUALLY BITS REVERSED NUMBERS ; IF THEY ARE DIFFERENT BTRVRS ; STA 3, RTRN1, 2 ; SAVE RETURN STA 1, TEMP, 2 ; SAVE AC1(NUMSER) LDA 3, LOG2N, 2 ; BITS REVRSE IN LOG2N BITS MEG 3,3 SUB 0,0 MOVZR 1,1 MOVL 0,0 INC 3,3,SZR JMP .-3 LDA 1, TEMP, 2 ; BITS MORMAL SUB2 &num; 0,2, SZC ; IF SAME OR IF ALREADY JMP &commat;RTRH1, 2 ; SWAPPED RET@RN JSR SWAP LDA 1, TEMP, 2 JMP &commat;RTRM1, 2 ; SWRP THE ELEMENTS OF INDICES IN RCO AND AC1 ; SWAP : STA 3, RTRN0,2 ; SAVE RETURN LDA 2.. LNGT ; LENGTH OF AN ELEMENT STA 3, COUNT, 2 ;COUNTER ADDZL 0,0 ;; ELE.LENGT-**INDEX (2*INDEX) ADDZL 1,1 ;: LDA 3, DTARAY,2 ; ARRAY ADDRESS ADD 3,0 ; ADDRESS OF @LEMENT ADD 3,1 STA 0, FORM, 2 ; FROM ADDRESS STA 1, TO. 2 ; TO ADDRESS LDA 0, &commat;FROM, 2 LDA 1, &commat;TO,2 STA 1, &commat;FROM, 2 STA 0, &commat;TO, 2 ; SWAP WORDS ISZ TO. 2 ISZ FROM. 2 DSZ COUNT. 2 JMP . -7 JMP &commat;RTRN0,2 . LNGT : LNGTH . LNG. 2 : LNGTH/2 . NMX. 8 : MM***LNGTH/8. . MMX : MMX ; MAX. LENGTH . MMAX : MMAX . CSARY : CSARY ; SINE-COSINE ARRAY ADDRESS ; DJ "BUTTERFLY" COMPUTATION ON ELEMENTS POINTED TO BY I.J. TWDLE : STA 3, RTRN1,2 ; SAVE RETURN LDA 0,I,2 ; GET ARRAY INDICES LDA 1,J.2 ADDZL. 0,0 ; ; MULTIPLY BY COMPLEX ELEMENT SIZE (2) ADDZ. 1,1 ; ; " " " LDA 3, DTARAY,2 ADD 3,0 ; ADDRESS OF RE C(I) ADD 1,3 ; ADDRESS OF RE C(J) STA 3, REALJ.2 ; ADDR OF C(J) MOV 2,1 ; SAVE STACK PTR MOV 0,2 ; ADDRESS OF D(I) FLDS 0,RE,2 ; GET FIRST VALUE FMOV 0,1 ; MAKE A COPY FLPS 2, RE,3 ; GET SECOND VALUE FAS 2,0 ; C(I) = C(I)+C(J) FS 2,1 ; C (J) = C(I)-C(J) FSTS 0,RE,2 ; STORE RE C(I) FSTS 1,RE,3 ; STORE RE C(J) FLDS 0,1 M,2 ; GET FIRST IN VALUE FMOV 0,1 ; MAKE A COPY FLDS 2,1 M.3 ; GET SECOND IM VALUE FAS 2,0 ; C(I) = C(I) + C(J) IM FSS 2,1 ; C(J) C(I)-C(J) IM FSTS 0,1 M,2 ; STORE IM CI) FSTS 1, IM,3 ; STORE IM C(J) MOV 1,2 ; RESTORE STK PTR LDR 0, TWDLEF,2 ; TEST FOR THETA = 0 MOV 0,0, SNR IMP&commat; RIRN1,2 ;YES SUB. 1, 1 STA 1, SIGN, 2 ;CLEAR SIGN OF COSINE LDA 1., LNG. 2 LDA 3,, MMX. 8 SUBZ&num; 0, 3, SZC ; THETA JMP TYP1 ; YES SUB 3, 0 ; THETA-PI/4 SUBZ&num; 0, 3, SZC ; THETA JMP TYP2 SUB 3,0 ; THETA-P1/2 ISZ SIGN, 2 SUBZ&num; 0, 3, SZC ; THETA JMP TYP3 ; YES SUB 3,0 SUB 3,0 ; THETA - PI NEG 0,0 ; PI - THETA TYP1 ; ADD 0,1 ; AC1 - DISP OF SINE JMP NKPTR ; ACB - DISP OF COSINE TYP2 ; SUB 3,0 ; THETA- P1/2 NEG 0,0 ; PI/2 - THETA TYP3 : MOV 0,3 ADD 1,0 MOV 3,1 MOV &num; 1,1 SNR ; PI/2 7 JMP P1BY2 ; YES LDA 3,, CSRRY ; SINE-COSINE TABLE POINTER ADD 3,1 ; POINTER TO SINE ENTRY ADD 0,3 ; POINTER TO SOSINE ENTRY FLDS 0, RE, 3 ; LOAD FACO WITH REAL.COMPONENT LDA 3, SIGN, 2 ; GET COS SIGY MOV&num; 3,3.SZR ; CHECK FOR Q@ADS 2 @ 3 FNEG 0 ; NEGATE FMOV 0,3 ; SAVE A COPY OF COS MOV 1,3 ; GET SINE ADDRESS FLDS 1, RE, 3 ; GET SINE CONPONENT LDA 3, INVER, 2 ; GET TRANSFORM DIRECTION MOV&num; 3,3, SNR ; TEST FWDOR REV FNEG 1 FMOV 1,2 ; SAVE A COPY OF SIGH LDA 3, REALJ, 2 ; GET RE C(J) SMMS 0, RE, 3 ; SCALE FMMS 2, RE, 3 ; SCALE FMMSFMMS 1, IM, 3 ; SCALE.AGAIN FSS 3, IM. 3 ; SCALE IM FSTAS 1,0 ; SCALE IM AGAIN FAS 0,RE,3 ; FORM RE C(J) FSTS 2,1M,3 ; SAVE IT JMP &commat; RTRN1,2 ; TWIDDLE DONEL C(J) TWDLE = (8, -I) TRANSFORM (0, I) INVERSE NOTE; - AC1 = IM C(J) P1BY2 : LDA 3, REALJ, 2 ; GET RE C(J) ADDR FLDS 0, RE, 3 ; GET RE C(J) LDA 0, INVER, 2 ; TRANSFORM DIRECTION MOV&num; 0, 0, SMR FNEG 0 ; NEGATIVE REOD MOV &num; 0, 0, SZR FNEG 1 ; NEGATIVE REQD FSTS 0, 1IM,3 ; SAVE 1M RESULT FSTS 1,RE,3 ; SAVE RE RESULT JMP&commat; RTRN1,2 ; RETURN C(J) TWDLE = ROOT2/2 * (1, -1) TRANSFORM PI/4 = ROOT2/2* (1, 1) INVERGE PI/4 = ROOT2/2* (-1, -1) TRANSFORM 3PI/4 = ROOT2/2* (-1, 1) INVERSE 3PI/4 NOTE ; = AC1 = IM C(J) PIBY4 :LDA 0, SIGN, 2 ; GET COS SIGN LDA 1,INVER, 2 ; GET T DIRECTION LDA 3, REALJ.2 FLDS 0, RE, 3 ; GET RE C(J) FMMSO 0., TR2. 2 ;. 707 *RE C(J) FMMS@ 1., RT2.2 ;. 707 * IM C(J) FMOY 0,2 ; SAVE COPY OF RE FMOV 1,3 ; SAVE COPY OF IM COMPUTE REAL PART MOV * 0,0,SZR ; CHECK SIGN FNEG 0 ; 3 PI/4 CASE, -RE C(J) MOV * 1,1,SZR ; CHECK DIRECTION JMP .+3 ; INVERSE FAS 1,0 ; FORWARD, +IM C(J) JMP .+2 FSS 1,0 ; INVERSE, -IM C(J) FSTS 0,RE,3 ; SAVE REAL RESULT COMPUTE IMAGIMARY PARY MOV &num; 1, 1. SNR ; CHECK DIRECTION FNEG 2 ; FORWARD, -RE C(I) MOV&num; 0, 0, SZR ; CHECK SIGH JMP .+3 ; 3 PI/4 CASE FAS 3.2 ; PI/4. +IM C(J) JMP . +2 FSS 3,2 ; USE - IM C(J) FSTS 2, IM, 3 ; SAVE IM RESULT JMP&num; RIRN11,2 ; MAX SIZE CONSTANTS MMAX = 10. MMX = 1024. .RT2.2 ; MM**LNGTH/8. +CSARY ; COSINE-SINE ARRAY CSARY : 40420 0 0 0 40377 -474' 37431 20761 40377 -2369 37462 41643 40377 -5433 37513 62332 40377 11576 37544 -75251 48377 -17339 37575 -55445 40377 -26151 ; 37626 - 36326 40377 -36162 37657 -17774 40377 -47361 37716 -2323 49377 -61750. 37742 1214b 48377 -75525. 37773 25560 40377 65307 40021 42001 40377 47155 42022 -25340 40377 27635 40024 63021 40377 7130 40025 -4450 40376 -12543 40827 -74250 40376 -35623 40031 13646 40376 -62070 40032 -54111 40376 70260 40034 33605 40376 41443 40035 -34362 40376 11443 40037 53116 40378 -17517 40040 -15300 49375 -52065 40042 71741 40375 72164 40044 1055 40375 35254 40045 -67740 40374 -615 40047 16667 40374 -40067 40050 -52423 40374 77260 40052 33676 40374 35450 40053 -37530 40373 -5316 40055 50045 40373 -51463 40056 -22115 40373 60774 40060 63315 40373 12277 40061 -7220 40372 -35352 40063 75627 40372 71402 40065 2500 40372 17205 40066 -70633 40371 -34142 40070 13404 40371 67117 40071 -60347 40371 11230 40073 23237 40370 -45605 40074 -51155 40370 51770 40076 31762 40367 -7357 40077 -43111 40367 -72072 40101 37337 40367 22030 40102 -36232 40366 -42770 40104 43511 40366 46627 40105 -32576 40365 -20471 40107 45420 40365 66630 40110 -30422 40364 -2764 40112 50030 40364 -75735 40113 -27566 40364 5736 40115 50102 40363 -67300 40116 -30305 40363 12110 40120 46561 40362 -65407 40121 -32436 40362 11523 40123 43610 40361 -70250 40124 -36237 40361 4411 40126 37151 40360 -77631 40127 -43544 40357 -5214 40131 30766 40357 64051 40132 -52613 40356 -23541 40134 21024 40356 43277 40135 -63451 40355 -46551 40137 7244 40355 16036 40140 -76162 40354 -76241 40141 -4167 40353 -13647 40143 65224 40353 45414 40144 -21530 40352 -52205 40146 46704 40352 4647 40147 -41034 40351 62622 40151 26403 40350 -40304 40152 -62341 40350 13251 40154 4064 40347 65730 40155 72077 40346 -40463 40156 -20305 40346 7610 40160 44446 40345 57014 40161 -47004 40344 -52646 40163 14671 40343 -5615 40164 -77646 40343 36132 40165 -15044 40342 -76757 40167 45073 40341 -35150 40170 -51215 40341 3363 40172 7602 40340 43042 40173 70144 40337 -76330 40174 -27753 40336 -40772 40176 27222 40335 -4501 40177 -72050 40335 26524 40200 -14835 40334 60707 40202 41260 40333 -65745 40203 -61705 40332 -35660 40204 -5576 40331 -6626 40206 45601 40331 17153 40202 -57314 40330 44123 40210 -5147 40327 70046 40212 44254 40326 -65032 40213 -62627 49325 -43155 40214 -12461 40324 -22316 40216 34730 40323 -2475 48217 -74175 40323 14112 40220 -26065 40322 31707 40222 17256 40321 46476 40223 64051 40320 62260 40224 -47710 40317 75040 48225 -4451 40316 -71157 40227 36005 40315 -60375 40230 77676 40314 -50605 40231 -37001 40313 -42007 40233 1304 40312 -34200 40234 41012 40311 -27354 40235 77720 40310 -23513 40236 -41760 40307 -20631 40237 -4467 40305 -16725 40241 27767 40305 -15773 40242 63627 40304 -16011 40243 -61131 40303 -16776 40244 -26735 40302 -20725 40246 2410 40301 -23616 40247 33124 40300 -27444 40250 63003 40277 -34227 40251 -65755 40276 -41743 40252 -37600 40275 -50405 40253 -12270 40274 -57773 40255 12150 40273 -70303 40256 35734 40272 76246 40257 60643 40271 64104 40260 -75107 40270 51027 40261 -53745 40267 35044 40262 -33471 40266 20155 40263 -14105 40265 2363 40265 2363 .END ;END OF DFT Annexe B Partie VII C @@@@@@ @@@@@@@@@@ @@@ C ******************************************************* C ******************************************************* C ***** ** C ***** C4:SELECTED BACK-PROJECTION PACKAGE ** C ***** ** C ***** MAIN DRIVER ** C ***** EC4DRV7.FR ** C ***** ** C ***** JIM DERNERT ** C ***** 8 FEBRUARY, 1975 ** C ***** ECLIPSE , ** C ***** 30 JUME, 1975 ** C ***** VER E7: 27 AUGUST, 1975 ** C C C ************************************************** C PARAMETER IMP=1, MER=3, ARR=7, TTL=8, TTO=10, TTI=11 PARAMETER LWIDTH=.015625, SWIDTH=.00390625 PARAMETER NM=512. NP=180, NPMI=NP-1 PARAMETER NSEC=4, DSEC=1,0/NSEC, YB=(NSEC+1)*DSEC*0.5, XB=-YB C INTEGER T(6) INTEGER ATTR(129) COMMUN /AT/ IV, IEXT, RRD, TT, IDATE(3), ITIME(3), INAME(15), MISC(102), IREC EQUIVALEMCE (ATTR, IV) DATA IV/2H7/RRD/0.5/ IREC/0/. C COMMON /AN/ ANGLE (0:NPM1) C LOGICAL MMFLG COMMON /MM/ MIND, MAXD, MMFLG DATA MIND/-1000/ MAXD/1000/ MMFLG/0/ C COMMON /C4PR/ INFILE(6), IAFILE(6), ITFILE(6) DATA INFILE/2HC4.2HM3,2HAS,2HR.,0,0/ DATA IAFILE/2HC4,2HAR,2HRA,2HY.,0,0/ DATA ITFILE/2HC4.2HTI,2HTL.2HE.,0,0/ C COMMON /TSK/ KEY, IP0 DATA KEY/0/IP0/0/ C CALL TIME (T,IER) OPEN TMP, "C4TMP7" READ BINARY (TMP) ANGLE.IEXT,IDATE.ITIME,INAME CLOSE TMP INFILE (5) = IEXT IAFILE (5) = IEXT ITFILE (5) = IEXT OPEN MSR, INFILE,ATT="I",LEN=4*NM OPEN ARR, IAFILE,ATT="C",LEN8192,REC=17 OPEN TTL, ITFILE,ATT="C",LEN-258,REC=1 CALL PRI(2) C C *****.INITIAL PROJECTION OF ENTIRE SCAN AREA CALL C4BKP (0.0,0.0,LWIDTH) C C **** MULTIPLE SECTION BACK-PROJECTION IREC=1 DO 300 J = 1,NSEC Y = YB-J*DSEC DO 300 I =1,NSEC X = X8+I*DSEC 300 CALL C4BKP (X,Y,SWIDTH) C C ***** DO FINAL 800KKEEPING AND CHAIN TO OUTPUT PROGRAM C4OUT CALL TIME(T(4),IER) IT = ((T(4)-T(1))*60+T(5)-T(2))*60 + T(6) - T(3) WRITE BINARY (TTL) ATTR CLOSE MSR CLOSE ARR CLOSE TTL OPEN TMP, "C4OUT" WRITE BIN (TMP) IAFILE,ITFILE,0,16,MIND,MAXD,IT CLOSE TMP CALL FCHAN("SLTD.SV"). END C C ******************************************************* C ******************************************************* C C ***** C4: SELECTED BACK-PROJECTION PACKAGE C ***** C ***** BACK-PROJECTION C ***** EC4BKP7.FR C C ***** JIM DEHNERT C ***** 8 FEBRUARY, 1975 C ***** ECLIPSE , C ***** VER E7: 27 AUGUST, 1975 C C ******************************************************* C C PARAMETER MSR=3,ARR=7,TTL=8,LPT=12,ARBLK=16,MSBLK=4,NMS=3 PARAMETER NC=64,NP=180,NPMI=NP-1,NM-512,XD=1.8/NM PARAMETER PI=3.141592654 X PARAMETER SCLNP8=80000.0/NP C SUBROUTINE C4BKP(X,Y,WIDTH) C COMMON /TSK/ KEY,IP0 C COMMON /AT/ IV,IEXT,FRD,IT,MISC(21),AX(0:16),AY(0:16).AW(0:16),IREC C COMMON /MS/ IBUF(2048), DBUF(1536) EQUIVALENCE (NO,DBUF(1)), (N1,DBUF(513)),(N2,DBUF(1025)) C INTEGER DEN COMMON /AR/ DEN(8192) C COMMON /AN/ ANGLE(0:NPM1) C INTEGER XI,XL COMMON /BP/ XI(64),XL(64),YC,DX,DY,IYB,IYL C C **** INITIALIZE N1=-70000K N2=-70000K IP0=0 TASK MREAD(NMS,NP),PRI=1,ID=1,ERR=9000 CALL CSCON(DEN,8192,0) IYB=0 IYL=NC IF (X.NE.0.0 .AND.Y.NE.0.0) GO TO 120 C C **** CALCULATE LIMITS OF RECONSTRUCTION C XI GIVES THE LOOP INDEX AT WHICH THE BACK-PROJECTION STARTS. C XL GIVES THE LOOP COUNT FOR THE BACK-PROJECTION. C C C **** SET XI AND XL FOR PROCESSING OF ENTIRE GRID 100 CALL CSCON9XI,NC,0) CALL CSCON(XL,NC,NC) GO TO 300 C 120 SY = SIGN(1.0,Y) SX = SIGN(1.0,X) HW = 32.0*WIDTH RR = RRD*RRD C C **** CALCULATE INTERCEPTS DX0 = X-HW*SX DX1 = X+HW*SX DY0 = Y-HW*SY DY1 = Y+HW*SY B = SQRT(RR-DY0*DY0) IX0 = (B-SX*DX0)/WIDTH + 0.5 B = SQRT(A8S(RR-DY1*DY1)) IX1 = (B-SX*DX0)/WIDTH + 0.5 B = SQRT(RR-DX0*DX0) IY0 = (B-SY*DY0)/WIDTH +0.5 B = SQRT(ABS(RR-DX18DX1)) IY1 = (B-SY*DY0)/WIDTH + 0.5 C C **** EXIT FROM ROUTIME IF SQUARE ISCOMPLETELY OUTSIDE CIRCLE. IF (IY0.LE.0) GO TO 720 C .... OR PROCESS ENTIRE GRID IF COMPLETELY INSIDE CIRCLE. ,IF (IY1 .GE. 64) GO TO 100 C C **** CALCULATE EXTRAPOLATED X-INTERCEPT AND SLOPE IF (IY0.GT.64) GO TO 170 IF (IX0.GT.64) GO TO 160 .SLOPE = 1.08IY0/IX0 IX= IX0 GO TO 200 160 SLOPE = (IY0-IY1)/64.0 IX = IY0/SLOPE + 0.5 GO TO 200 170 IF (IX0.GT.640 GO TO 180 SLOPE = 64.0/(IX0-IX1) IX = IX0 GO TO 200 180 SLOPE = (64.0/IY1)/(64-IX1) IX = IX1 + 64.0/SLOPE + 0.5C C **** CALCULATE THE CU-TOFF POINTS 200 IYL = MIN0(IY0,64) DO 250 K=1,IYL I=K IF (SY.LT.0.0) I=65-K XL (I) = MIN0964,IX+IFIX(0.5-(K-0.5)/SLOPE)) XI(I)=0 250 IF (SX.EQ.-1.0) XI(1)=64-XL(I) IF (SY.LT.0.0) IYB=64-IYL C C **** READ MEASUREMENTS AS NECESSARY 300 DO 700 IP=0,NPM1 IMS = MOD(IP,NMS) GO TO (400,420,440) IMS+1 400 IF.9N1.E1.-70000K) GO TO 400 TO TO 500 420 IF (N2.EQ.-70000K) GO TO 420 GO TO 500 440 IP0=IP+NMS-2 CALL XMTW(KEY,1,$9000) TO TO 500 C . C **** CALCULATE CONSTANTS FOR THIS ANGLE 500 PHI = ANGLE(IP)+PI SINPHI = SIN(PHI) COSPHI = COS(PHI) DX = COSPHI*WIDTH/XD*4.0 DY = -SINPHI*WIDTH/XD*4.0 YC = (COSPHI*X-SINPHI*Y)/XD C C **** CALCULATE LIMITS FOR MEASUREMENT EXPANSION, EXPAND AND BACK-PROJECT X CALL C4SCL (DBUF (IMS*512+1),SCLNPB) CALL C4EXP (IMS) 700 CONTINUE CALL C4XNM C C C **** OUTPUT ARRAY 720 IV = 2HE7 CALL WRBLK(ARR,IREC*ARBLK,DEN,ARBLK,IER) CALL.CHECK(IER) AX(IREC)=X AY(IREC)=Y AW(IREC)=WIDTH IREC = IREC+1 990 RETURN 9000 STOP BP.TASK.ERROR END ; ; *************************************************************** ; *************************************************************** ; ***** ***** ; ***** C4:SELECTED BACK-PROJECTION PACKAGE ***** ; ***** ***** ; ***** BACK-PROJECTION SUBROUTINES ***** ; ***** EC4EXP7.SR ***** ; ***** ***** ; ***** JIM DEHNERT ***** ; ***** 3 JULY, 1975 ***** ; ***** VER E5: 31 JULY, 1975, ***** ; ***** ***** ; *************************************************************** ; *************************************************************** ; .TITLE EC4EXP .ENT C4EXP.C4XNM R0=0 R1=1 R2=2 R3=3 F0=0 F1=1 F2=2 F 3-3 CNC=64. CNM=512. ' .DALC LDINC=100070 .DALC STINC=100170 .DALC CONST=100270 .DALC NORM=100370 .DALC BKPRJ=100470 .ZREL C4EXP: EXP C4XNM: XNM .NREL .COMM AR,20000 .COMM BP,210 .EXTN MS. ; ; ; ***** SUBROUTINE TO CALCULATE EXPANSION LIMITS AND EXPAND MEASUREMENTS. ; THIS ROUTINE CAN HANDLE UP TO S1X DBUF BUFFERS. ; CALL C4EXP(IMS) ; DTMP; 0 ; TEMPROARY POINTER TO CURRENT DBUF BUFFER DPNT: .+1 ;POINTER TO ARRAY OF BUFFER POINTERS .GADD MS,4000 ; FIRST DBUF BUFFER .GADD MS,6000 ; SECOND .GADD MS,10000 ; THIRD .GADD MS,12000 .GADD MS,14000 .GADD MS,16000 .1.5: 1.5 .25S: 377 .512: 1000 125: 0.125 IMS=-3 EXP: SAVE 3 FLDS F0,0DY FAB F0 FLDS F1,0DX FAB F1 FAS F1,F0 ; ABS(DX) + ABS(DY) LDA R2,NC FLAS R2,F1 ; FLOAT(NC) FMS F1,F0 FMMS F0,.125 FAMS F0,.1.5 ; F0 FLDS F1,&commat;YC FMOV F1,F2 FAS F1,F2 ; YC+TMP FSS F0,F2 ; YC-TMP FFAS R0,F1 ; TO CALCULATE 11 FFAS R2,F2 ; TO CALCULATE 12 LDA R1,.255 ADD R1,R0 MOVL* R0,R0,SZ0 SUB R0,R0 ; I1-1 INC R1,R1 ADD R1,R2 LDA R1,NM SGE R1,R2 MOV.R1,R2 ; I2+1 SBI 1,R2 SUB R0,R2 NEG R2,R2 STA R2,1,R3 ; COUNT FOR J LOOP (TEMPORARY) MOVZL R0,R0 MOVZL R0,R1 ; 4*(I1-1) = K1-2 LDA R2,IBUF ADD R1,R2 STA R2,2,R3 ; ADDR (IBUF(K1-1)) (TEMPORARY) LDA R1,&commat;IMS,R3 ; LAST PARAMETER ACCESS LDA R2,DPNT ; FETCH POINTER TO DBUF BUFFER ADDRESSES ADD R1,R2 ; INDEX BY BUFFER NUMSER (IMS) DESIRED LDA R2,0,R2 ; PICK UP POINTER TO APPROPRIATE BUFFER STA R2,DTMP ; SAVE FOR LATER USE ADD R0,R2 ; ADD 2*(I1-1) FOR ADDR(DBUF(K3)) ACCUMULATOR CONTENTS WILL BE: R0 = WORK F0 = WORK R1 = LOOP COUNT (J) F1 = 2*DBUF(K3)*SCLNP8 R2 = DBUF ADDRESS F2 = DBUF(K3)*SCLNP8 R3 = IBUF ADDRESS F3 = S*DBUF(K2)*SCLNP8 LDA R1,1,R3 ; PICK UP J LOOP COUNT FLDS F2,0,R2 ; FETCH FIRST DBUF(K3) FMOV F2,F0 ; SAVE FMMS F2,.8 ; SCALE BY 8 ADI 2,R2 ; INCREMENT DBUF POINTER LDA R3,2,R3 ;PICK UP IBUF ADDRESS (STACK POINTER NOW GONE) FFAS R0,F2 ; FIX FIRST IBUF = DBUF*SCLNP STINC R0,R3 ; STORE FIRST TBUF STINC R0,R3 ; STORE SECOND IBUF RMOV F0,F2 ; GET DBUF(K3) FMOV F2,F3 FAS F3,F3 ; INITIAL IZE F3 TO 2*DBUF(K3) L.J: FMMS F0,.7 ; 7*DBUF(K2) FLDS F2,0,R2 ; FETCH DBUF(K3) ADI 2,R2 ; INCREMENT DBUF POINTER FMOV F2,F1 FAS F1,F1 ; 2*DBUF(K3) FAS F2,F0 ; DBUF(K3) + 7*DBUF(K2) THIS MACRO STORES AII IBUF VALUE WHILE CALCULATING THE NEXT: MACRO MIB. FFAS R0,F0 ; FIX VALUE FOR K=#1 FAS F1,F0 ; START K=#2 - ADD 28DBUF(K3) FSS F3,F0 ; SUBTRACT S*DBUF(K2) STINC R0,R3 ; STORE VALUE FOR K=#1 AND INCREMENT POINTER MIB 1,3 MIB 3,5 MIB 5,7 FFAS R0,F0 ; FIX VALUE FOR K=7 STINC R0,R3 ; STORE VALUE FOR K=7 AND INCREMENT POINTER FMOV F2,F0 ; LEAVE DBUF(K3) IN F0 FMOV F1,F3 ; LEAVE 2*DBUF(K3) IN F3 INC R1,R1,SZR ; DONE WITH J LOOP ? JMP. L.J ; NO FMMS F0,.8 ; GET DBUF(K3)*SCLNP FFAS R0,F0 ; FIX STA R0,0,R3 ; STORE LAST TWO IBUF VALUES STA R0,1,R3 LDA R2,DTMP ; PICK UP POINTER TO BEGINNING OF BUFFER LDA R0,M70 ; PICK UP FLAG STA R0,0,R2 ; SET FLAG MARKING FINISHED EXPANSION JMP BPRJ ; PROCEED TO BACK-PROJECTION M70: -70000 ; FLAG FOR END OF EXPANSION .4: 4.0 .7: 7.0 I.7: 7. .8: 8.0 NC: CNC NM: CNM DEN: .GADD AR,0 SI: .GADD BP,0 YC: .GADD BP,200 DX: .GADD BP,202 DY: .GADD BP,206 IYB: .GADD BP,207 IYL: .GADD MS,0 IBUF: .GADD MS,4000 DBUF: 0 DPNTR: 0 XCNT: 0 ***** SUBROUTINE TO PERFORM BACK-PROJECTION BPRJ: FLDS F0,0YC FMMS F0,.4 ; YC*4.0 LDA R0,01YL STA F0,YCNT ; SET IY LOOP COUNTER LDA R1,X4 ; PICK UP FLOATING POINT EXPONENT OF 4 THIS MACRO ADDS 4 TO THE EXPONENT OF THE FLOATING POINT ACCUMULATOR SPECIFIED, PREPARING FOR CONVERSION TO A DOUBLE PRECISION INTEGER: .MACRO EXP4 FRH #1 ; FETCH EXPONENT OF #2 ADD R1,R0 ; ADD 4 FEXP #1 ; REPLACE EXPONENT EXP4 F0,YC FLD5 F1,&commat;DY ; FETCH DY EXP4 F1,DY FSTS F1,ADY ; SAVE DY FLDS F2,&commat;DX ; FETCH DX FXP4 F2,DX FSTS F2,ADX ; SAVE DX FFMD F2,IDX ;CONVERT DX TO DOUBLE PRECISION INTEGER FAS F1,F2 ; DY+DX LDA R2,MC INC R2,R2 FLAS R2,F3 ; FLOAT(NC+1) LDA R2,&commat;IYB FHLV F3 ; NC2+0.5 FMS F3,F2 LDA R0,X1 SBI 1,R0 ADD R2,R0 STA R0,21 ; STORE POINTER TO XI ARRAY FSS F2,F0 ADDI 100,R0 FLAS R2,F2 ; FLOAT(IYB) STA R0,22 ; STORE POINTER TO XL ARRAY FMS F2,F1 ; IYB*DY LDA R0,1.7 SBI 1,R2 LSH R0,R2 ; (IYB-1)*128 LDA R3,DEN ADD R2,R3 ; GET ADDRESS OF ROW IYB IN DEN ARRAY FAS F1,F0 ; YB FLDS F1,ADY ; PICK UP DY AGAIN FLDS F2,ADX ; AND DX ... LOOP: STA R3,DPMTR ; SAVE DEN ARRAY POINTER LDA R0,021 ; PICK UP IXI FLAS R0,F3 ; FLOAT IXI FAS F1,F0 ; INCREMENT YB BY DY MOVZL R0,R0 ; 2*IXI LDA R3,DPNTR FMS F2,F3 ; DX*IXI ADDI 200,R3 ; NEXT ROW OF DEN ARRAY STA R3,DPNTR ; SAVE ADD R0,R3 ; OFFSET INTO ROW BY IXI FAS F0,F3 ; ADD YB LDA R0,022 ; FETCH IXL FFMD F3,IXB ; FIX XB AS DOUBLE PRECISION INTEGER THE 2000K OFFSET ADDED TO IXB CONSISTS OF: . 0.5 OFFSET TO CENTER OF MEASUREMENT . 0.5 OFFSET FOR NEAREST NEIGHBOR TRUNCATION . 1024 CONVERSION FROM COORDINATE TO ARRAY INDEX . -1 CONVERSION FROM ARRAY INDEX TO ADDRESS OFFSET. BKPRJ 0.0 ; BACK-PROJECT IXB: 0.0 IDX: 0.0 MASK: 174000 .GADD MS,0 YCNT: 0 IYLOOP ; LAST PARAMETER FOR BACK-PROJECTION CALL RTN ; FINISHED WITH BACK-PROJECTION X4: 487 ADX: 0,0 ADY: 0,0 ***** :SUBROUTINE TO NORMALIZE DENSITY ARRAY CALL C4XNM XNH: SAVE 0 LDA R1,.4K LDA R2,DEN ; INITIAL IZE COUNTER MOV R2,R3 ; INITIALIZE READ POINTER NORM 0,0 ; INITIALIZE WRITE POINTER RTN ; PERFORM NORMAL IZATION IN WCS 4K: 10000 ;YES - RETURN ***** SUBROUTINE TO SCALE MEASUREMENTS IF NOT ALREADY DONE CALL C4SCL (BUF,SCALEFACTOR) .ENT C4SCL .ZREL C4SCL: SCALE .NREL SCALE: SAVE 0 MOV R1,R2 ; BUFFER ADDRESS FLDS F0,0-4,R3 ; SCALE FACTOR LDA R0,NM ; COUNT NEG R0,R0 ; SCLL:FLDS F1,0,R2 ; PICK UP MEASUREMENT FMS F0,F1 ; MULTIPLY BY SCALE FACTOR ADI 2,R2 ; INCREMENT BUFFER POINTER FSTS F1,-2,R2 ; STORE SCALED MEASUREMENT INC R0,R0,SZR ; INCREMENT COUNTER JMP SCLL ; LOOP RTN ; RETURN ,.END C C ************************************************************** C ************************************************************** C C ***** C4: SELECTED BACK-PROJECTION PACKAGE C C ***** MEASUREMENT INPUT TASK C ***** EC4MRD,FR C ***** C ***** JIM DEHMERT C ***** ECL IPSE C ***** 5 AUGUST, 1975 C C C C PARAMETER MSR=3, MSBLK=4 C SUBROUTINE MREAD(NMS,IPMAX) C COMMUN /ISK/KEY,IP0 COMMON /MS/ IBUF(2048),DBUF(1536) C C 100 CALL RDBLK(MSR,IP0*MSBLK,DBUF,MSBLK*NMS,IER) CALL CHECK(IER) CALL REC(KEY,IER) IF (IP0,LT.IPMAX) GO TO 100 RETURN C . END Annexe B Partie VIII ***** MICROCODED UTILITY INSTRUCTIONS JIM DEHNERT 29 JULY, 1975 +++++ CALL XOP1 ACS,ACD,0 FOR LDA ACS,0,ACD INC ACD,ACD +++++ CALL XOP1 ACS,ACD,1 FOR STA ACS,0,ACD INC ACD,ACD (WHERE, FOR BOTH INSTRUCTIONS, ACS AND ACD ARE DIFFERENT) +++++ CALL XOP1 ACS,ACD,2 TO SET A BLOCK OF MEMORY TO A CONSTANT (INTEGER) VALUE, WHERE AC0 CONTAINS THE WORD COUNT ACS CONTAINS THE CONSTANT ACD CONTAINS THE STARTING ADDRESS WCSNP CSBEG 0 W0: ;START MEMORY FOR LOADING AC: CSTA AR,ACD,0,A,0,N,0,S,N,0,0,NC,2,0,W1 W1: ;READ DATA, START INSTRUCTION FETCH: CSTA AR,PC,ACS,A,F0,N,N,S,READ,0,BMEM,NC,2,0,W4 W2: ;START MEMORY FOR STORING AC: CSTA AR,ACD,0,A,0,N,0,S,N,0,0,NC,2,0,W3 W3: ;WRITE DATA, START INSTRUCTION FETCH: CSTA AR,PC,ACS,A,F0,N,N,S,WRIT,0,BMEM,NC,2,0,W4 W4: ;INCREMENT ACD, LOAD NEXT INSTRUCTION: CSBA AR,ACD,0,A1,FA,L,0,N,READ,0,0,LDIR,0,0,0 W10: ; LOAD COUNTER, SHIFT COUNT REGISTER, CSTA AR,AC0,0,AM1,R0,L,CLR,N,N,DCH,LCNT,NC,2,0,W11 W11: ;SHIFT AC0 THREE MORE BITS: CSTA AR,AC0,0,A,R0,L,CLR,N,N,DCH,0,NC,2,0,W12 W12: CSTA AR,AC0,0,A,R0,L,CLR,N,N,DCH,0,NC,2,0,W13 W13: ;INCREMENT AC0 DURING LAST SHIFT: CSTA CON,AC0,AC0,APB,R0,L,CLR,N,N,DCH,0,NC,2,2,W14 W14: ;START FIRST WIRTE: CSTA AR,ACD,0,A,F0,M,CLR,S,N,0,0,NC,2,0,W15 W15: ;WRITE DATA, START NEXT MEMORY LOCATION, REPEAT UNTIL COUNTER=0: CS AR,ACD,ACS,A1,FA,L,CLR,S,WRIT,0,BMEM,CNTND,2,W16 W16: ;DECREMENT ACO, LOOP IF NOT YET ZERO: CS AR,AC0,0,AMI,FA,L,CLR,N,N,0,0,ALUZ,2,W17,W15 W17: ;RELEASE LAST MEMORY LOCATION OPENED, START INSTRUCTION FETCH: CSTA AR,PC,D,A,F0,N,CLR,S,READ,0,0,NC,2,0,W18 W18: ;READ NEXT INSTRUCTION INTO IR: CSBA 0,0,0,0,0,0,0,N,READ,0,0,LDIR,0,0,0 CSEND CTBEG 0 CT W0 CT W2 .CT W10 .CTEND .FNAME CSUTIL,CS .END ***** MICROCODE FOR C4 VER E5 JIM DEHNERT 30 JULY 1915 +++++ CALL XOP1 ACS,ACD,3 TO PERFORM THE MORNALIZATION OF THE DEN ARRAY, WHERE AC1 COMTAINS THE NUMBER OF DOUBLE INTEGERS TO BE PROCESSED AC2 COMTAINS THE ADDRESS OF THE FIRST WORD TO BE READ AC3 COMTAINS THE ADDRESS OF THE FIRST WORD TO BE WRITTEN. ALL THREE ACCUHULATORS ARE LOST, AC0 IS UNCHANGED. +++++ CALL XOP1 ACS,ACD,4 TO PERFORM THE BACK-PROJECTION, WHERE: AC0 CONTAINS THE REPEAT COUNT FOR THE ROW AC3 CONTAINS THE START ADDRESS OF THE ROW IN DEN AC3 AND ACD HAVE HO SIGNIFICANCE. ALL ACCUMULATORS ARE LOST; THE COMPLETE CALL ING SEQUENCE IS: XOP1 ACS,ACD,4 IXB: 0.0 IDX: 0.0 MASK: 174000 .GADD MS,0 YCNT: 0 IYLOOP YCNT IS AUTOMATICALLY DECREMENTED AFTER BACK-PROJECTING THE ROW; IF 0, CONTROL IS RETURNED TO THE WORD FOLLINGIMG THE CALLING SEQUENCE, QTHERWISE, COMTROL IS RETURMED TO LOCATION IYLOOP. YCNT IS THE ONLY WORD IN THE CALLING SEQUEMCE WHICH IS MODIFIED. NOTE THAT THE ROUTINE USES ABSOLUTE LOCATION 37 FOR TEMPORARY STORAGE. WCSNP CSBEG 20 +++++ NORHALIZATION ROUTINE: ;START READ: W20: CSTA AR,AC2,0,A,F0,N,CLR,S,N,0,0,NC,2,0,W21 ;READ HIGH ORDER WORD, INCREMENT READ POINTER, START READ: W21: CSTA AR,AC2,0,A1,F0,L,CLR,S,READ,0,0.NC,2,0,W22 ;READ LOW ORDER WORD, IMCREMENT READ POINTER W22: CSTA AR,AC2,GR1,A1,F0,L,CLR,N.READ,DCH,BMEM,NC,2,0,W23 ;PERFORM TWO DOUBLE SHIFTS: W23: CSTA AR,GR1,0,A,L0,L,CLR,N,N,DCH,0,NC,2,0,W24 W24: CSTA AR,GR0,0,A,LL,L,CLR,N,N,DCH,0,MC,2,0,W25 W25: CSTA AR,GR1,0,A,L0,L,CLR,N,N,DCH,0,NC,2,0,W26 W26: CSTA AR,GR0,0,A,LL,L,CLR,N,N,DCH,0,NC,2,0,W27 ;MASK OFF PROPER BYTES AND SWAP: W27: CSTA CON, GR0,GR0,ANB,SW,L,CLR,N,N,DCH,0,NC,2,377,W28 W28: CSTA CCN, GR1,GR1,ANB,SW,L,CLR,N,N,DCH,0,NC,2,0,W29 ;OR THE TWO WORDS TOGETHER: W29 CSTA AR,GR0,GR1,AOB,FA,L,CLR,N,N,DCH,0,NC,2,0.W30 ;START WRITE: W30:CSTA AR,AC3,0,A,F0,N,CLR,S,N,0,0,NC,2,0,W31 ;INCREMENT WRITE POINTER: W31: CSTA AR,AC3,0,A1,F0,L,CLR,N,N,0,0,NC,2,0,W32 ;WRITE DATA AND LOOP: W32: CS AR,AC1,GR0,AMI,FA,L,CLR,N,WRIT,DCH,BMEM,@UZ,Z,W33,W20 @@TART INSTRVCTION FETCH: W33: CETA AR,PC,0,A,F0,N,CLR,S,N,0,0,NC,2,0,W34 LOAD NEW INSTRUCTION INTO IR: W34: CSBA 0,0,0.0.0.N,0,N,READ.M.0,LDIR.0,0,0 +++++ BACK-PROJECTION ROUTIHE ;SET COUNT REGISTER TO BIT POSITION FOR ADDING 2000 LATER: W40: CSTA CON,0,G,A,0,M,0,N,M,DCH,LCNT,MC,2,5,W41 ;READ IXB AND IDX FROM LOCATIONS AFTER XOP1: W41: CSTA AR,PC,0,A,F0,N,CLR,S,N,N,N,NC,2,0,W42 ;START INTEGER IXB W42: CSTA AR,PC,AC1,A1,F0,L,CLR,S,READ,M,BHEM,NC,2,0,W43 ;FRACTIONAL IXB W43: CSTA AR,PC,AC2,A1,F0.L,CLR,S,READ,M,BMEM,NC,2,0,W44 ;IMTEGER IDX W44: CSTA AR,PC,GR1,A1,F0,L,CLR,S,READ,M,EMEH,MC,2,0,W45 ;FRACTIONAL IDX W45:CSTA AR,PC,GR2,A1,F0,L,CLR,S,PEAD,N,BMEM,NC,2,0,W46 ;START MASK READ ;READ MASK IMT0 G@O; ADD 2000 TO INTEGER IXB: W46: CSTA BIT,AC1,AC1,APB,FA,L,CLR,H,READ,DCH,0,NC,2,0,W47 ;LOAD COUNT REGISTER, SAVE HIGH ORDER PART OF XCMT IN LOC 37: W47: CSTA AR,AC0,0,AM1,RO,L,CLR,N,N,DCH,LCNT,NC,2,0,W48 W48: CSTA AR,AC0,0,A,R0,L,CLR,H,N,DCH,0,NC,2,B,W48 W49: CSTA AR,AC0,0,A,R0,L,CLR,M,H,DCH,0,NC,2,0,W50 W50: CSTA CON,AC0,AC0,AP0,R0,L,CLR,N,N,DCH,0,MC,2,2,W51 W51: CSTA CON,0,0,A,0,H,CLR,S,H,0,0,MC,2,37,W52 W52: CSTA 0,0,AC0,0,0,N,CLR,M,WRIT,DCH,BMEM,NC,2,0,XLP ;START X LOOP: ADD FRACTIOHAL DX TO XB: XLP: CS AR,AC2,GR2,AFB,FA,L,CLR,N,N,DCH,0,CRY0B,2,XLIN,XL1C ; ADD INTEGER DX TO XB, WITH OR WITHOUT CARRY: XL1C: CSTA AR,AC1,GR1,APB1,FA,L,N,N,N,DCH,0,NC,2,0,XL2 XL1N: CSTA AR,AC1,GR1,APB,FR,L,M,N,N,DCH,0,NC,2,0,XL2 ;MASK TO CHECK IHDEX PANGE - EXIT IF OUT: XL2:CS AR,AC1,GR0,ANB,0,H,CLR,N,N,DCH,0,ALU2,2,XL3,XEX2 FETCH IBUF ADDRESS: XL3: CSTA AR,PC,0,A1,F0,N,0,S,N,0,0,NC,2,0,XL4 XL4: CSTA 0,0,AC0,0,0,N,0,0,READ,DCH,BMEM,NC,2,0,XL5 ;FETCH IBUF ELEMENT ... XL5: CSTA AR,AC0,AC1,AP0,F0,N,0,S,N,0,0,NC,2,0,XL6 :... THEN LOW ORDER DEN WORD: XL6: GSTA AR,AC3,AC0,A1,F0,L,0,S,READ,0,BMEM,NC,2,0,XL7 ;BRANCH ON SIGN OF IBUF; XL7: CS AR,AC0,0,A,0,N,CLR,N,RMOD,N,0,ALU0,2,XMEG,XPOS ;IBUF IS POSITIVE; UPDATE DEM ELEMENT AMD EXIT IF NO CARRY: XPOS: CS AR,GR0,AC0,AP0,FA,N,N,N,WRIT,DCH,0,CRY0B,2,XEXI,XINC ;CARRY TO HIGH ORDER WORD OF DEN ELEMENT: XINC: CSTA AR,AC3,0,BM1,0,N,CLP,S,N,0,0,HC,2,0,XII X11: CSTA AR,AC3,AC0,A1,FA,L,CLR,N,RMOD,N,BMEM,NC,2,0,X12 X12: CS AR,AC0,0,A1,FA,N,0,N,WRIT,DCH,N,CNTND,2,XRET,XCNT ;IBUF IS NEGATIVE; UPDATE DEM ELEMENT AHD EXIT IF CARRY OCCURS: XHEG: CS AR,GR0,AC0,AP0,FA,M,N,N,WRIT,DCH,N,CRY00,2,XDEC,XEXI ;NO CARRY - SUBTRACT I FROM HIGH ORDER WORD OF DEN ELEMENT: XDEC: ESTA AR,RC3,0,AM1,0,N,CLR,S,N,0,0,MC,2,0,XB1 XD1: CSTA AR,AC3,AC0,A1,FA,L,CLR,M,RMOD,N,BMEM,NC.2.0,XD2 XD2: CS AR,AC0,0,AM1,FA,K,0,M,WRIT,DCH,N,CNTND,2,XRET,XCNT ;FINISH INCRENEHTING DEM POINTER AHD COUNT DOWW: XEX1: CS AR,RC3,0,A1,F0,L,0,N,N,DCH,0,CMTHD,2,XRET,XENT ;INCR BY 1 XEX2: CSTA CON,AC3,AC3,APB,F0,L,0,H,M,DCH,0,NC,2,2,XEX3 ;INCR BY 2 XEX3: CS 0,0,0,0,0,N,0,0,0,DCH,0,CNTHD,2,XRET,XONT ;COUNT DOWN ;COUNT REGISTER IS ZERQ - NUST CHECK HIGH-ORDER COUNT IN LOC 37: XCNT: CSTA CON,0,0,A,0,H,0,S,N,0,0,NC,2,37,XC1 XC1: CSTA 0,0,AC0,0,0,N,0,M,RMOD,H,SMEM,NC,2,0,XC2 XC2: CS AR,AC0,0,AM1,FA,N,CLR,N,WRIT,DCH,N,ALU2,2,XOUT,XRET ;READY TO LOOB - MUST RELOAD MASK IN GR0: XRET: CSTA AR,PC,0,A,F0,N,CLR,S.N,0,0,MC,2,0,XR1 XR1: CS AR,AC2,GR2,APB,FA,L,CLR,M,READ,DCH,N,CRY08,2,XLIN,XLIC :DONE WITH X LOOP - UPDATE YCNT: XOUT: CSTA CON,PC,PC,APB,F0,L,N,S,N,0,0,NC,2,2,XO1 XO1: CSTA 0,0,AC0,0,0,N,0,N,RMOD,N,BMEM.NC,2,0,XO2 XO2:CS AR,AC0,0,AM1,FA,N,0,N,WRIT,DCH,N,ALUZ,2,YOUT,YLP ;YCNT NON-ZERO - FETCH ADDRESS FOR LOOP: YLP: CSTA AR,PC,0,A1,F0,L,0,S,M,0,0,NC,2,0,YL1 YL1: CSTA 0,0,PC,0,0,N,CLR,M,READ,DCH,BMEM,NC,2,0,YL YL2: CSTA AR,PC,0,A.F0,N.O.S.N,0,0,NC,2,0,YL3 ;YCNT IS ZERO - START INSTRUCTION FETCH FROM AFTER CALL: YOUT: CSTA AR,PC.0,A1,F0,L,0,S,N,0,0,NC,2,0,YL3 ;AND IN EITHER CASE READ NEXT INSTRUCTION: YLE: CSBA 0,0,0,0,0,M,0,N,READ,N,N,LDIR,0,0,0 CSEND CTBEG 3 CT W20 CT W40 CTEND FNAME C4WCS,CS :END Annexe B Partie IX C SLICE.FR C ROBERT A.LEMAN C AUG. 28, 1975 C PROGRAM TO MOVE SLICE DATA FROM C FP0 TO DPI PARAMETER CPAT0=2,CPAT1=3,CARRY0=4,CARRY1=5,PARM=17 PARAMETER LTP=12,MAG=16,BCOUNT=16,NOB=16 COMMON DATA(4096) INTEGER SAVE(4), DATA,HEAD(256),CLEARH(3072), LOAD(4) INTEGER C4PAT(5),C4ARRAY(6) EQUIVALENCE (DATA,CLEARH) DATA LOAD /"MT","0:","00",0/ DATA LOADTEN /"10"/ DATA C4PAT /"C4","PA","T.",0,0/ DATA C4ARRAY /"C4","AR","RA","Y.",0,0/ TYPE "SLICE 9/3/75" C**** MOVE HEADER CALL INIT("DP1",0,IER) IF (IER.NE.40) CALL CHECK(IER) OPEN PARM,"PARMS" READ BINARY (PARM) IEX .C4PAT(4) = IEX OPEN CRAT0,C4PAT OPEN CPAT1,"DP1::C4PAT.SC" CALL PDBLK(CPAT0,0,HEAD,1,IER) CALL CHECK(IER) CALL BMOVE(HEAD(253),SAVE,4) ISLICE = SAVE(4) SAVE(4) = SAVE(4)+1 C*** CLEAR HEADER ON DP1 IF START OF RUN IF (ISLICE.EQ.1) WRITE BINARY (CPAT1) CLEARH CALL WRBLK(CPAT1,ISLICE-1,HEAD,1,IER) .CALL CHECK(IER) C** MOVE C4ARRAY.SC C4ARRAY(5) = IEX .OPEN CARRY0,C4ARRAY OPEN CARRY1, "DP1:C4ARRAY,SC" DO 100 K=0,NOB CALL RDBLK (CARRY0,K*BCOUNT,DATA,BCOUNT,IER) .CALL CHECK(IER) CALL WRBLK(CARRY1,(((ISLICE-1)*(NOB+1))=K)*BCOUNT,DATA,BCOUNT,IER) .CALL CHECK(IER) 100 CONTINUE C*** READ HEADER FROM MO0 AND IF C*** IT IS AN EOF BRANCH TO RUNCLI,SV ISLICETEN = ISLICE IF (ISLICE,LT.10) GOTO 200 LOAD(3) = LOADTEN ISLICETEN = ISLICE - 10 200 LOAD(3) = LOAD(3) + ISLICETEN CALL MTOPD(MAG,LOAD,4000K,IER) CALL CHECK(IER) CALL MTDIO(MAG,256,HEAD,ISTAT,IER) CK = ISTAT.AND,400K IF (CK.NE.0) GOTO 300 CALL CHECK(IER) CALL BMOVE(SAVE,HEAD(253),4) CALL WRBLK(CPAT0,0,HEAD,1,IER) CALL CHECK(IER) C*** BRANCH RETURN TYPE "FINISHED SLICE ", ISLICE IF (SAVE(1).E1.0) CALL FCHAN ("RFSCAN.SV") CALL FCHAN ("EC4OUT.SV") 300 CLOSE MAG CALL RELEASE ("MT0",IER) CALL CHECK(IER) TYPE "FINISHED LAST SLICE - SLICE", ISLICE CALL FCHAN("RUNCLI.SV") END Annexe B Partie X ***** UTILITY ROUTINES FOR MOVING BLOCKS OF MEMORY JIM DEHNERT 9 JULY 1975 23 JULY 1975 .TITLE BLOCK R0=0 R1=1 R2=2 R3=3 ***** ROUTINE TO SET h BLOCK OF CORE TO A CONSTANT (INTEGER) VALUE. CALL STCON(ADDRESS.WORD COUNT,CONSTANT) .ENT STCON, STCHST ZREL STCON: STC STCNST: STC .NREL STC: SAVE 0 MOV R1,R2 ; SET SOURCE ADDRESS LDA R0,&commat;-5,R3 ; FETCH CONSTANT TO BE STORED LDA R1,&commat;-4,R3 ; FETCH WORD COUNT SBI 2,R1 ; DECREMENT WORD COUNT MOV R2,R3 ; SET DESTINATION ADDRESS ADI 2,R3 STA R0,,R2 : SET FIRST WORD STA R0,1,R2 ; SET SECOND WORD BLM ; SET REMAINDER RTN ***** ROUTINE TO SET A BLOCK OF CORE TO A CONSTANT (FLOATING) CALL FSTCON(ADDRESS.NUMBER COUNT,CONSTANT) ENT FSTCON .ZREL FSTCON: FSTC '.NREL FSTC: SAVE 0 MOV R1-R2 ; SET SOURCE ADDRESS LDA R1,&commat;-4,R3 : FETCH NUMBER COUNT SBI 1,R1 :DECREMENT MOVZL R1,R1 LDA R3,-5,R3 CONVERT TO WORD COUNT LDA R0,0,R3 ; ADDRESS OF CONSTANT STA R0,0,R2 ; FETCH FIRST WORD LDA R0,1,R3 ; AND STORE STA R0,1,R2 ; FETCH SECOND WORD MOV R2,R3 AND STORE ADI 2,R3 ; SET DESTINATION ADDRESS BLM RTN ; MOVE DATA ***** ROUTINE TO COPY A BLOCK OF CORE FROM ONE LOCATION TO ANGTHER CALL BMOVE (SOURCE ADDRESS,DESTINATION ADDRESS,WORD COUNT .ENT BMOVE .ZREL BMOVE: BMV .NREL BMV:SAVE 0 MODV R1,R2 ; SET SOURCE ADDRESS LDA R1,&commat;-5,R3 ; SET COUNT MOV R0,R3 ; SET DESTINATION ADDRESS BLM ; MOVE RTN END Annexe C Partie I c C DISPLAY.FR C FLDR DISPLAY INPUT DSPLY'D648 DAN DERS DEQ DLU CNVAB CNVBA FORT.LB C C FOR TED TO USE THE SIDE KEYBOARD C C PURPOSE DISPLAY SLICE NUMBER OUT OF C4ARRAY.SC C PARAMETER KS=64 PARAMETER TDIM=2001 C DIMENSION IHEAD(256) DIMENSION IWIM(7) INTEGER CENTER,WIDTH INTEGER T(TDiM) C C OPEN THE INPUT FILES CALL OPEN (0."C4ARRAY.SC",2,IER) IF (IER.NE.1) GO TO 100 CALL OPEN (1."C4PAT.SC",2,IER) IF (IER.NE.1) GO TO 100 C C ERASE THE SCREEN CALL DERS C C GAMMA CORRECTION CALL DLU CENTER=10 WIDTH=10 IW=-15 IDELTA=50 C C READ THE HEADER AND TELL OPERATOR THE SLICE NUMBERS CALL RDBLK(1,0,IHEAD,1,IER). IF(IER.NE.1) GO TO 100 IHEAD(52)=ISHFT(IHEAD(51),8)+IHEAD(52)/400K IHEAD(51)=ISHFT(IHEAD(50),8)+IHEAD(51)/400K WRITE (10,10) IHEAD(51),IHEAD(52) 10 FORMAT("XSTARTING SLICE IS ",A2,/"XENDING SLICE IS ".A2) IHEAD(52)=0 I=0 CALL CNVAB(IHEAD(51),NST,1) C C C READ THE INPUT SLICE NUMBER 2 ACCEPT "INPUT SLICE NUMBER ", NSLCE NSLCE = NSLCE - NST + 1 IF (NSLCE.LE.0.OR.NSLCE.ST.12) GO TO 2 C C READ THE HEADER FOR THE SLICE CALL RDBLK(1.NSLCE-1,IHEAD,1,IER) IF (JER.NE.1) GO TO 100 C C C C CHANGE TIME AND DATA TO ASCII DO 1500 I = 1.7 CALL CNVBA(IHEAD(I),IWIN) IHEAD(I) = IWIN(2) 1500 CONTINUE C C C FIRST TIME THROUGH USE THE INITIAL VALUES. GO TO 1280 C C C SET WINDOW C 1240 ACCEPT "DISPLAY WINDOW ", IWIDELTA IW = -IDELTA/2 + IW TO TO 1280 C C NEW ADDITION FOR TED--USE SIDE KEYBOARD 1250 CALL INPUT(I) C C INPUT WILL SET 1 TO 0 IF IT IS NOT 0-6;ELSE IT WILL BUMP IT BY 1 IF(I.NE.0) GO TO 28 TYPE "INVALID INPUT" GO TO 1250 C 28 GO TO (30,2,35,1240,200,31,32,33,34), I C C 0 INPUT, CHANGE THE VALUES 30 TYPE "THE VALUE TO CHANGE THE WINDOW WIDTH IS", WIDTH ACCEPT "CHANGE IT TO ", WIDTH TYPE "THE VALUE TO MOVE THE WINDOW IS", CENTER ACCEPT "CHANGE IT TO ",CENTER GO TO 1250 C C INPUT WAS 1--MAKE WINDOW SMALLER 31 IDEL TA=IDELTA-WIDTH IW = IW+WIDTH/2 GO TO 1280 C C INPUT WAS 2--MAKE WINDOW WIDER 32 IDELTA=IDELTA+WIDTH IW = IW-WIDTH/2 GO TO 1280 C C INPUT WAS 3--RAISE THE WINDOW 33 IW = IW+CENTER GO TO 1280 C C INPUT WAS 4--LOWER THE WINDOW 34 IW = IW - CENTER GO TO 1280 C C C INPUT WAS 6--ERASE 35 CALL DERS GO TO 1250 C COMPUTE TRANSFORM ARRAY VALUES C 1280 IF (IW.LE.-1000.OR.IW.GE.1000) GO TO 1250 JW=IW+IDELTA LENGTH = IABS(IDELTA) +1 IF(LENGTH .GT.TDIM) GO TO 1250 RANGE = .EQ. 0,0) GO TO 1250 RNG = 127./RANGE IF (JW.LT.IW) GO TO 1310 DO 1300 I = 1.LENGTH T(1) = FLOAT (1-1)*RNG 1388 CONTINUE GO TO 1350 1310 LI = LENGTH+1 DO 1320 1 = 1.LENGTH T(L 1-1) = FLOAT(1-1)* RNG 1320 CONTINUE C C SET UP FOR LOOP C 1350 MN = MIN0 (IW, JW) MX = MAX0 (IW, JW) CALL DSPLY (MN, MX, T, NSLCE) C C PUT IN DESCRIPTIVE INFORMATION C CALL DAN ('SYNTEX SYS68", 12,0,0,24) CALL DAN (IHEAD (45), 9,0,0,0) CALL DAN (' ',1,0,63,0) CALL DAN (IHEAD (25),20,0,70,0) CALL DAN (' ',1,0,220,0) CALL DAN (IHEAD (45),1,287,0) CALL DAN (IHEND (44),3,0,294,0) CALL DAN ('SLICE OF ', 14,0,0,12) CALL DAN (IHEAD(7),2,0,42,12) CALL DAN (IHEAD(51),2,1,84,12) CALL DAN (' / / ',8,0,0,232) CALL DAN (IHEAD (1),2,0,0,232) CALL DAN (IHEAD (2),2,0,21,232) CALL DAN (IHEAD (3),2,0,42,232) CALL DAN ('CM;KY',12,0,231,232) CALL DAN (IHEAD (52),3,1,252,232) CALL DAN (IHEAD (54),3,0,280,232) CALL DAN (IHEAD (4),2,0,0,244) CALL DAN (': ',4,0,14,244) CALL DAN (IHEAD (5),2,0,21,244) CALL DAN (IHEAD (9),40,0,42,244) C C DISPLAY THE GRAY SCALE IX = 279 IWD x 12 IH = 12 DO 1680 J - 1.16 A = 16-J IHTEN = A*B IY = (J-1) * 12 + 32 CALL DSQOINJEN, IX, IY, KWD, IH) ILVL = (IDELTA) * A/15.+1W CALL CNVBA (ILVL, 1WIN(1)) CALL DAN(IWIN(1),4,0,291,IY) 1680 CONTINUE GO TO 1250 C C RDOS ERRORS COME HERE 100 TYPE "RDOS EFFOR", IER STOP C C DPERATOR INPUT END 200 CALL RESET STOP END 0001 DSPLY 01 DSPLY.SR 02 FORTRAN CALLABLE ROUTINE TO DISPLAY THE DRTA IN C4ARRAY.SC TO THE 03 RAMTEK B SYSTEM USING MULTITASKING IN ASSEMBLY LANGUAGE 04 05 CALLING SEOUENCE 06 CALL DSPLY(MR,MX,T,NSLCE) 07 MN = MINUMUM VALUE 08 MX = MAXIMUM VALUE 09 T = TRAHSFDRM ARRAY 10 NSLCE = SLICE NUMBER 11 12 .TIN DSPLY 13 .ENT DSPLY 14 .EXTD .@PYL,. FRET 15 .EXTN DS4 16 .EXTN .TASK,. XMIW,. XMT,.REC,.KILL 17 .NREL 18 19 20 ;FORTRAN STACK DISPLACEMENTS 21 177611 MN = - 167 22 177612 MN = - 166 23 177613 T =MX + 1 24 177614 NSLCE = T + 1 25 000004 FS. = NSLCE - MN + 1 26 27 00000' 000004 FS. ;FORTRAN STACK FRAME SIZE 28 00001' 000001SDSPLY : JSR 0.CPYL ;PUSH THE STACK 29 00002' 030584 LDA 2,BFPT ;BUFFER FOR THE DATA TO D84 30 00003' 021613 LDA 0,T,3 ;GET TRANSFORM ARRAY ADDRESS 31 00004' 041001 STA 0,1,2 ;INTO SECOND LOCATION 32 00005' 023611 LDA 0,@MM,3 ;GET MINUMU@@ VALUE 33 00006' 041002 STA 0,2,2 34 00007' 023612 LDA 0,@MX,3 ;MAXIMUM VALUE 35 00010' 041003 STA 0,3,2 ;INTO THE BUFFER 36 00011' 023614 LDA 0,@NSLCE,3 ;SLICE NUM@ER 37 00012' 100400 NEG 0,0 ;SUBTRACT 1 38 00013' 100000 COM 0,0 39 00014' 105300 MOVS 0,1 ;;*256 IN RC1 40 00015' 103120 ADDZL 0,0 ;*4 IN AC0 41 00016' 103100 ADDL 0,0 ;*16 IN AC0 42 00017' 123000 ADD 1,0 ;*272 IN AC0 43 00020' 040467 STA A,STRT ;START OF THE SLICE 44 00021' 102400 SETUP : SUB 0.0 45 00022' 040470 STA 0.DNE ;CLEAR THE TASK DONE SWITCH 46 00023' 040459 STA 0,BLK ;SET THE SUBBLOCK * TO 0 47 00024' 041005 STA 0,5,2 ;ZERD OUT Y START 48 00025' 020467 LDA 0,M32 49 00026' 041004 STA 0,4,2 ;STARTING X TO -32 50 00027' 028466 LDA 0,C16 51 00030' 040455 STA 0,CNT ;SET LOOP COUNTER TO 16 52 ;START THE TASK WHICH CALLS D@4 53 00031' 102520 SUBZL 0.0 ;PRIORITY OF 1 54 00032' 024467 LDR 1.SDG4 ;STARTING ADDRESS 55 00033' 077777 .TASK 56 00034' 004446 JSR ERR 57 00035' 034465 LDA 3,DTPT ;POINTER TO THE BUFFER POINTERS 58 00036' 021400 LDA 0.0,3 ;GET THE NEXT POINTER 59 00037' 040463 STA 0,DTPT ;SAVE IT 0002 DSPLY 01 00048'021401 LDA B,1,3 ;;GET THE ADDRESS OF THE DATA BLOCK 02 00041'030462 LDA 2,OFSTB ;GET OFFSET TASLE ADDRESS 03 00042'024446 LDA 1,BLK ;BLOCK POINTER 04 00043'133000 ADD 1,2 ;FORM AN ENTRY 05 00044'025000 LDA 1,0.2 ;CONTENTS 06 00045'030442 LDA 2,STRT ;START OF THE SLICE 07 00046'147000 ADD 2,1 ;ADD THEM--NOW HAVE LOGICAL BLOCK NUMBER 08 00047'030456 LDA 2.LFT16 ;16 IN THE LEFT BYTE 09 00050'006817 .SYSTM 10 00051'005488 .RDB 0 ;READ THE DATA 11 00052'004430 JSR ERR 12 @PDRTE THE X AND Y ADDRESSES 13 00253'230433 LDR 2,BFPT ;RETREIVE POINTER TO THE DATA 14 00054'041000 STA 0,0,2 ;STURE THE DATA POINTER 15 00055'021004 LDA 0,4,2 ;GET THE X ADDRESS 16 00056'024441 LDA 1,064 ;THCREMENT IT 8Y 64 17 00057'123000 ADD 1,0 18 00000'034440 LDA 3,C288 ;SEE IF IT IS FAR RIGHT 19 00061'116414 SUB* 0,3,SZR ;IF SO, IT WILL BE 288. 20 00062'000485 JHP MSSGE ;NO, SO SEND THE MESSAGE 21 00063'02@000 LDA 0,5.2 ;END, SO MUST INCREMENT Y 22 00064'12@000 ADD 1,8 ;BY 64 23 00065'041005 STA 0,5,2 ;STORE IT 24 00066'028430 LDA 0,C32 ;SET X TO 32 25 00067'041004 MSSGE : STA 0,4,2 ;STORE X 26 00070'145000 MOV 2,1 ;BUFFER POINTER IS THE MESSAGE 27 00071'020434 LDA 0,MSRD ;ADDRESS FOR IT 28 00072'077777 .XMTW ;SEND IT 29 00073'004407 JSR ERR 30 00074'010414 ISZ BLK ;BUMP BLOCK POINTER 31 00075'014410 DSZ CNT ;DECREMENT THE COUNTER 32 00076'000737 JMP LP ;NOT DONE YET 33 00077'020412 LDA 0,DNEP ;WAIT FOR THE OTHER TASK TO FINISH 34 00100'077777 .REC ;HE WILL XMIT WHEN DONE 35 00101'000002S JSR 0.FRET ;DONE, SO RETURN 36 37 00102'008017 ERR : .SYSTM 38 00103'006400 .ERTN 39 00104'000776 JHP ERR 40 41 00105'000000 CNT : 0 42 00106'000127'BFPT:BUF ;BUFFER FOR DATA FOR D64 43 00107'000000 STRT: 0 ;LOGICAL BLOCK NUMBER FOR START OF SLICE 44 00110'000000 BLK : 0 ;SUBBLBCK NUMBER 45 00111'000112'DNEP: DNE 46 00112'000000 DNE : 0 ;SWITCH SET WHEN D64 DONE 47 00113'177700 M64 : -64. 48 00114'177740 M32 : -32 49 00115'000020 C16 : 16 50 00116'000040 C32 : 32 51 00117'000100 C64 : 64 52 00120'000448 C288: 288. 53 00121'000161'SD64: DS4ST ;START OF TASK TO FIRE UP D64 54 00122'000135'DTPT: PADI ;POINTER TD DRTA BUFFER POINTER ARER 55 00123'000141'OFSTB: OFSET ;BLOCK OFFSET TABLE 56 00124'010000 LFT16: 16.*256. 57 00125'000126'MSAD : MSS 58 00126'000000 MSS : 0 59 000006 BUF : .BLK 6 0003 DSPLY 01 00135'000137'PADI: PAD2 02 00135'000177' AD1 03 00137'000135'PAD2: PAD1 04 00148'919177'AD2 05 00141'000320 GFSET: 13.*16. 06 00142'000340 14.*16. 07 00143'000360 15.*16. 08 00144'000480 16.*16. 09 00145'000220 9.*16. 10 00146'000240 10.*16. 11 00147'000260 11.*16. 12 00150'000300 12.*16. 13 00151'000120 5.*16. 14 00152'000140 6.*16. 15 00153'000160 7.*16. 16 00154'000200 8.*16. 17 00155'000020 16. 18 00156'000040 32. 19 00157'000060 48. 20 00160'000100 64. 21 22 :TASK TO FIRE UP D64 23 00161'020734 D64ST: LDA 0.016 24 00162'040413 STA 0.CNTI SET COUNTER 25 00163'020742 LPL: LDA 0,MSAD ADDRESS TO RECEIVE MESSAGE 26 00164'000100' .REC 27 00165'006411 JSR 0PD64 TO D64 28 00166'014407 DSZ CNTI 16 TIMEST 29 00167'000774 JMP LPI 30 00170'126520 SUBZL 1,1 MUST SEND NON-ZERO MESSAGE TO SAY I'M DONE 31 00171'020726 LDA 0,DNEF TO D64 32 00172'077777 .XMT 33 00173'004707 JSR ERR 34 00174'077777 .KILL YES, SO I'M DONE 35 00175'000000 CNTI: 0 36 00176'077777 PD64: D64 37 010000 AD1: .BLK 4096. 38 010000 AD2: .BLK 4096. 39 .END 0034 DSPLY AD1 000177' 3/02 3/37 AD2 000177' 3/04 3/38 BFPT 000106' 1/29 2/13 2/42 BLK 000110' 1/46 2/03 2/30 2/44 BUF 000127' 2/42 2/59 C16 000115' 1/50 2/49 3/23 C288 000120' 2/18 2/52 C32 000116' 2/24 2/50 C64 000105' 2/16 2/51 CNT 000175' 1/51 2/31 2/41 CNT1 000175' 3/24 3/28 3/35 D64 000176'X 3/36 D64ST 000161' 2/53 3/23 DNE 000112' 1/45 2/45 2/46 DNEP 000111' 2/33 2/45 3/31 DSPLY 000001' 1/28 DTPT 000122' 1/57 1/59 2/54 ERR 000102' 1/56 2/11 2/29 2/37 2 FS. 000004' 1/25 1/27 LFT16 000124' 2/08 2/56 LP 000035' 1/57 2/32 LP1 000163' 3/25 3/29 M32 000114' 1/48 2/48 M64 000113' 2/47 MN 177611 1/21 1/25 1/32 MSAD 000125' 2/27 2/57 3/25 MSS 000126' 2/57 2/58 MSSGE 000067' 2/20 2/25 MX 177612 1/22 1/23 1/34 NSLCE 177614 1/24 1/25 1/36 OFSET 000141' 2/55 3/05 OFSTB 000123' 2/02 2/55 PAD1 000135' 2/54 3/01 3/03 PAD2 000137' 3/01 3/03 PD64 000176' 3/27 3/36 SD64 000121' 1/54 2/53 SETUP 000021' 1/44 STRT 000107' 1/43 2/06 2/43 T 177613 1/23 1/24 1/30 .CPYL 000001SX 1/28 .FRET 000002SX 2/35 .KILL 000174'X 3/34 3/26 .REC 000164'X 2/34 .TASK 000033'X 1/55 .XMT 000172'X 3/32 .MXTW 000072'X 2/28 0001 INPUT 01 .TITL INPUT 02 .ENT INPUT 03 .EXTD .CPYL, FRET 04 .NREL 05 06 FORTRAN CPLLABLE ROUTIME TO GET THE TIY INPUT AND RETURN 07 AS AN INTEGER--IT ADDS I TO MAKE TWE NUMBER 1-9 08 IF THE IRPUT IS NOT VALID.IT RETURNS 0 09 10 SETUP THE STACK DISPLACMENT 11 177611 I--167 12 000081 PS. @1 13 14 00000'000001 FS. 15 00001'006201$INPUT: JSR @.CPYL PUSH THE STACK 16 00002'054432 STA 3.SP SAVE THE STACK POINTER 17 00003'006017 .SYSTM 18 00004'007400 .GCHAR 19 00005'000401 JMP .+1 EAT THE ERROR RETURN 20 00006'024424 LDA 1.MAX GET VALUE FOR FIRST NON-NUNTRAL RETURN 21 00007'030426 LDA 2.TBLP GET POINTER TO THE TADLE 22 00010'125400 LP: INC 1,1 BUMP LHAT TO RETBRN 23 00011'035000 LDA 3,0,2 GET THE ENTRY 24 00012'175015 MDV* 3,3SNR CHECK FOR B--END OF TABLE 25 00013'000405 JMP NUM MUST BE A NUMSER 26 00014'116415 SUB* 0,3,SNR IS THIS THE INPUT? 27 00015'000413 JMP RET YES, SO PREPARE TO RETURN 28 00016'151400 INC 2.2 BUMP TO NEXT ENTRY 29 00017'000771 JMP LP CONTINUE 30 00020'024413 NUM:LDA 1.057 ASCII 0-1 31 00021'122400 SUB 1.0 32 00022'024410 LDA 1,MAX GET MAXIMUM ALLDWED 33 00023'122032 ADCZ* 1,0,SZC IS THIS 0002 INPUT 057 000033' 1/30 1/41 FS. 000001 1/12 1/14 I 177611 1/11 1/36 INPUT 000001' 1/15 LP 000010' 1/22 1/29 MAX 000032' 1/20 1/32 1/40 NUM 000020' 1/25 1/30 RET 000030' 1/27 1/38 SP 000034' 1/16 1/35 1/42 STUFF 000025' 1/35 1/39 TBLP 000035' 1/21 1/43 .CPYL 000001SX 1/15 .FRET 000002SX 1/37 0001 D64 01 D64B.SR -- SUBROUTINE TO DISPLAY 64 X 64 ELEMENT SUEPICHURES 02 ON THE RAMTEK GX1000 03 04 CALLING PARAMETERS--IN A BUFFER POINTED TO BY ACI 05 06 D(1,1) = 64 x 64 ELEMENT ARRAY 07 T(1) =WINDDLJ TRANSFORM ARRAY 08 DMIN = MIMIMUM DENSITY VALUE 09 DMAX = MAXIMUM DENSITY VALUE 10 IX = DISPLAY X START 11 IY = DISPLAY Y START 12 13 .TITL D64 14 .ENT D64 15 .EXTH RMTKL.RMTKW 16 .NREL 17 18 RAMTEK DISPLAY COMMANDS 19 20 002000 BLK = 2000 21 000003 CD = 3 22 000001 CH0 = 1 23 000002 CH1 = 2 24 016000 LOM = 16000 25 022000 LE1 = 22000 26 032000 LLI = 32000 27 004000 SDC = 04000 28 006000 SSC = 06000 29 046000 SSM = 46000 30 @ 0002 D64 01 00000'054506 D64:STA 3,RET SAVE RETURN 02 00001'131000 MOY 1.2 POINTER TO AC2 03 00002'021000 LDA 0,0,2 GET DATA ADDRESS 04 00003'040505 STA 0,DA 05 00004'021002 LDA 0,2,2 GET MINIMUM VALUE 06 00005'040504 STA 0,DMN 07 00006'021003 LDA 0,3,2 GET MAXIMUM VALUE 08 00007'040503 STA 0,DMX 09 00010'021001 LDA 0,1.2 GET TRANSFORM ARRAY ADDRESS 10 00011'040476 STA 0,TRNS SAVE 11 00012'024501 LDA 1.RKLE1 GET RAMTEK LE1 INSTRUCTION 12 00013'021004 LDA 0,4,2 GET X START 13 00014'101120 MOVZL 0,0 TIMES 2 14 00015'123000 ADD 1,0 15 00016'040523 STA 0,X0 SAVE IN DISPLAY LIST 16 00017'024475 LDA 1,RKLL1 GET RAMTEK LL1 IMSTRUCTION 17 00020'021005 LDA 0,8,2 GET Y START POSITION 18 00021'101120 MOVZL 0,0 TIMES TWO 19 00022'123000 ADD 1,0 20 00023'040517 STA 0,Y0 SAVE IN DISPLAY LIST 21 00024'040473 LDA 0,K64 22 00025'040473 STA 0,K64CT 23 00026'020457 D64LP:LDA 0,BLK0A SETUP BLOCK ADDRESSES 24 00027'040467 STA 0,BLK0P 25 00030'020471 LDA 0,K16 26 00031'040471 STA 0,K16CT @ 0003 D64 01 00032'020471 D16LP: LDA 0,K4 02 00033'040471 STA 0,K4CT 03 00034'102400 SUB 0,0 ;ZERO NIBBLE WORDS 04 00035'040470 STA 0,WD0 05 00036'022452 D4LP:: LDA&commat; 0,DA ;GET NEXT JNTENSITY VALUE 06 00037'010451 ISZ DA ;PDINT TO NEXT ARRAY ELEMENT 07 00040'024452 LDA 1.DMX ;CHECK FOR UPBER BOUND 08 00041'106512 SUBL # 0,1,SZC 09 00042'121000 MDV 1,0 ;UXE UPPER BOUND 10 00043'024446 LDA 1,DMN ;CHECK LOWER BOUND 11 00044'122512 SUBL # 1.0,SZC 12 00045'121000 MDV 1,0 ;USE LOWER BOUND 13 00046'122400 SUB 1,0 ;COMPUTE TABLE OFFSET 14 00047'030440 LDA 2,TRNS ;GET ARRAY ADDRESS 15 00050'113000 ADD 0,2 ;COMPUTE FINAL ADDRES 16 00051'021000 LDA 0,0,2 ;GET TRANSFORM VALUE 17 00052'024455 LDA 1,0170 ;GET CHANNEL 0 MASK 18 00053'107620 ANDZR 0,1 ;GET CHANNEL 0 BITS 19 00054'125220 MDVZR 1,1 ;SHIFT RIGHT THREE PLACES 20 00055'125220 MDVZR 1,1 21 00056'020447 LDA 0,WD0 ;GET PARTIALLY FILLED SLK WDS 22 00057'101120 MOVZL 0,0 ; ;MOVE NIBBLES LEFT ONE PLRCE 23 00060'101120 MOVZL 0.0 24 00061'101120 MOVZL 0,0 25 00062'101120 MOVZL 0.0 26 00063'123000 ADD 1,0 ;ADD NEW NIBBLE 27 00064'040441 STA 0,WD0 28 00065'014437 DSZ K4CT ;4 NIBBLES YET? 29 00066'000750 JMP D4LP ;NO 30 00067'020436 LDA 0,WD0 ;STORE NIBBLE BLK WORDS INTO 31 00070'042426 STA@ 0,BLKOP 32 00071'010425 ISZ BLK0P 33 00072'014430 DSZ K16CT ;16 BLK WORDS DONE? 34 00073'000737 JMP D16LP ;NO @ 0004 D64 01 00074'020434 LDA 0,DLSTA GET DISPLAY LIST ADDRESS 02 00075'024434 LDA 1,CKCNT GET LIST LMGTH 03 00076'030434 LDA 2,CMD GET DEVICE SELECT 04 00077'006434 JSR&commat; ITV FEED IT TO RAMTEK 05 00100'006434 JSR&commat;; ITVW WAIT FOR COMPLETION 06 00101'010441 ISZ Y0 UPDATE Y START POSITIONS 07 00102'010440 ISZ Y0 08 00103'014415 DS2 K64CT 64 MINES DONE? 09 00104'000722 JMP D64LP NO 10 00105'002401 JMP GRET RETURN 11 12 00106'000000 RET: 0 13 00107'000000 TRNS: 0 14 00110'000000 DA: 0 ARRAY ADDRESS 15 00111'000000 DMN: 0 MIN WINDOW DENS. 16 00112'000000 DMX: 0 MAX WINDOW DENS. 17 00113'022000 RKLE1 LE1 RAMTEX LE1 INS. 18 00114'032000 RKLL1 LL1 RAMTEK LL1 INS. 19 00115'000144' BLKOA BLK0 BLOCK 0 ADDR 20 00116'000000 BLKOP 0 BLOCK 0 POINTER 21 00117'000100 K64: 64. 22 00120'000000 K64CT 0. 23 00121'000020 K16: 16. 24 00122'000000 K16CT 0 25 00123'000004 K4: 4. 26 00124'000000 K4CT 0 27 00125'000000 WD0 0 ;NIBBLE WORD TEMPS. 28 00126'000007 C7 7 29 00127'000170 C170 170 30 00130'000135' DLSTA DLIST ;DISPLAY LIST ADDRESS 31 00131'000027 BKCHT BLK0+16.-DLIST ;LIST LENGTH 32 00132'001000 CMD 1000 ;VLDEO SELECT 33 00133'077777 ITV RMTKL ;RAMTEK KISPLAY ROUTINE 34 00134'077777 ITVW RMTKW ;WAIT ROUTINE 35 36 37 00135'016003 DLIST: LCM+CD ;LOAD COMPLEX DATA 38 00136'004001 SDC+CH0 ;CHANNEL ZERO 39 00137'006017 SSC+17 ;SELECT SUB CHANNEL 40 00140'046000 SSM+0 ;RESET SUB CH MASKS 41 00141'022000 X0: LE1 ;LOAD X POSITION 42 00142'032000 Y0: LL1 ;LOAD Y POSITION 43 00143'002020 BLK+16. ;BLOCK TRANSFER 44 000020 BLK0 .BLK 16. 45 46 47 .END 8885 D64 BKCNT 000131' 4/02 4/31 BLK 002000 1/20 4/43 BLK0 000144' 4/19 4/31 4/44 BLK0A 000115' 2/23 4/19 BLKOP 000116' 2/24 3/31 3/32 4/20 C170 000127' 3/17 4/29 C7 000126' 4/28 CD 000003 1/21 4/37 CH0 000001 1/22 4/38 CH1 000002 1/23 CMD 000132' 4/03 4/38 D16LP 000032' 3/01 3/34 D4LP 000036' 3/05 3/29 D64 000000' 2/01 D64LP 000026' 2/23 4/09 DA 000110' 2/04 3/05 3/06 4/14 DLIST 000135' 4/30 4/31 4/37 DLSTA 000130' 4/01 4/30 DMN 000111' 2/06 3/10 4/15 DMX 000112' 2/08 3/07 4/16 ITV 000133' 4/04 4/33 ITVW 000134' 4/05 4/34 K16 000121' 2/25 4/23 K16CT 000122' 2/26 3/33 4/24 K4 000123' 3/01 4/25 K4CT 000124' 3/02 3/28 4/26 K64 000117' 2/21 4/21 K64CT 000120' 2/22 4/08 4/22 LCM 016000 1/24 4/37 LE1 022000 1/25 4/17 4/41 LL1 032000 1/26 4/18 4/42 RET 000106' 2/01 4/10 4/12 RKLE1 000113' 2/11 4/17 RKLL1 000114' 2/16 4/18 RMTKL 000133'X 4/33 RMTKW 000134'X 4/34 SDC 004000 1/27 4/38 SSC 006000 1/28 4/39 SSM 046000 1/29 4/40 TRNS 000107' 2/10 3/14 4/13 WD0 000125' 3/04 3/21 3/27 3/30 4/27 X0 000141' 2/15 4/41 Y0 000142' 2/20 4/06 4/07 4/42 0001 DRN 01 ; DAN. SR -- DISPLAY ALPHA-NUMERICS ON RAMTEK 02 ; FOR GX100B DISPLAY 03 04 ;CALLING SEOUENCE: 05 06 ; CALL DAN (ICB. NC. NSC. IX.IY) 07 08 ; ICB = WORD ADDRESS OF CHARACTER BUFFER 09 ; NC = NUMSER OF CHARACTERS TO PLOT (0 26 00027'123000 ADD 1,0 27 00030'040455 STA 0,BLK0 ;PUT INTO LIST 28 00031'021611 LDA 0,1CB,3 ;GET ARRAY ADDRESS 29 00032'101120 MOVZL 0,0 ;MAKE BYTE POINTER 30 00033'027613 LDA&commat; 1,NSC,3 ;GET CHAR OFFSET 31 00034'123000 ADD 1,0 ;FORM FINAL, OYTE POINTER 32 00035'040512 STA 0,GETP ;SAVE FOR GET 33 00036'030432 LDA 2,BLKA ;GET BLOCK ADDR 34 00037'004476 CMVLP: JSR GET ;MOVE CHARS TO BLOCK 35 00040'105300 MOVS 0,1 ;PLACE INTO LEFT HALF 36 00041'014425 DSZ NCCNT ;CHECK IF DOME 37 00042'000403 JMP SBYTE ;GET SECND BYTE 38 00043'045000 STA 1,0,2 ;STORE LEFT BYTE 39 00044'000407 JMP MVEND ;CHAR MOVE DONE 40 00045'004470 SBYTE:JSR GET ;GET RIGHT BYTE 41 00046'123000 ADD 1,0 ;ADD IN LEFT 42 00047'041000 STA 0,0,2 ;PLACE IN BLOCK 43 00050'151400 INC 2,2 ;POINT TO NEXT BLK WORD 44 00051'014415 DSZ NCCNT ;DONE YET? 45 00052'000765 JMP CMVLP ;KEEP TRUCKIN 46 00053'020417 MVEND: LDA 0,DLSTA ;GET DISPLAY LIST ADDR 47 00054'024417 LDA 1,DLCNT ;GET FIXED COUNT 48 00055'030412 LDA 2,NWDS ;GET VARIABLE COUNT 49 00056'147000 ADD 2,1 ;FINAL COUNT 50 00057'030415 LDA 2,CMD ;GET DEVICE COMMAND 51 00060'006415 JSR&commat; ITV ;RAM IT, SO TO SPEAK 52 00061'006415 JSR&commat; ITVW ;HURRY UP 53 00062'006002@ JSR&commat; .FRET ;RETURN 54 @ 0003 DAN 01 STORAGE & DISPLAY LIST 02 03 00063'022000 RKLE1: LE1 ;LOAD ELEMENT 04 00064'032000 RKLL1: LL1 ;LOAD LINE 05 00065'002000 RKBLK:BLK ;BLOCK INSTRUCTION 06 00066'000000 NCCNT: 0 ;CHAR COUNT 07 00067'000000 NWDS: 0 ;NUMBER, OF WDRDS OF CHARS 08 00070'000106' BLKA: BLK0+1 ;BLOCK ADDRESS 09 00071'001000 TMFLG: TM ;ODD BYTE TERMINATOR 10 00072'000077' DLSTA: DLST ;DISPLAY LIST ADDRESS 11 00073'000007 DLCNT: BLK0-DLST+1 ;FIXED LENGTH 12 00074'001000 CMD: 1000 ;VIDED SELECT 13 00075'077777 ITV: RMTKL ;RAMTEK LOAD L 14 00076'077777 ITVW: RMTKW ;RAMTEK WAIT 15 16 DISPLAY LIST SKELETON 17 18 00077'016000 DLST: LDM-AN ;LOAD MODE 19 00100'004001 SDC+C0 ;SELECT CMANNEL 20 00101'006017 SSC+17 ;SELECT SUBCHANNELS 21 00102'046000 SSM+0 ;RESET SUB CH MASK 22 00103'022000 X0: LE1 ;LOAD X 23 00104'032000 Y0: LL1 ;LOAD Y 24 00105'002000 BLK0: BLK ;BLOCK DATA 25 000027 .BLK 23. ;46 CHARS MAX. 26 27 GET NEXT CHARACTER 28 29 00135'054413 GET: STA 3,GT3 ;SAVE AC'S 30 00136'034411 LDA 3,GETP ;GET BYTE POINTER 31 00137'010410 ISZ GETP ;UPDATE IT 32 00140'175220 MDVZR 3,3 ;MAKE WORD POINTER 33 00141'021400 LDA 0,0,3 ;GET BYTE 34 00142'101013 MOV@ 0,0,SNE ;TEST HALF 35 00143'101300 MOVS 0,0 ;SWAP 36 00144'034400 LDA 3,0377 ;CLEAN OFF 37 00145'163400 AND 3,0 38 00146'002402 JMP@ GT3 ;RETURN 39 40 00147'000000 GETP: 0 ;GET BYTE POINTER 41 00150'000000 GT3: 0 ;RETURN 42 00151'000377 C377: 377 43 44 .END 0004 DAN AN 000000 1/23 3/10 BLK 002000 1/35 3/05 BLK0 000105' 2/27 3/00 3/24 BLKA 000070' 2/33 3/00 3/11 3/24 C0 000001 1/25 3/19 C1 000002 1/26 C377 000151' 3/36 3/42 CMD 000074' 2/50 3/12 CMVLP 000037' 2/34 2/45 DAN 000001' 2/04 DLCNT 000073' 2/47 3/11 DLST 000077' 3/10 3/11 3/10 DLSTA 000072' 2/46 3/10 FS. 000005' 1/45 2/03 GET 000135' 2/34 2/40 3/29 GETP 000147' 2/32 3/30 3/31 3/40 GT3 000150' 3/29 3/30 3/41 ICB 177611 1/40 1/41 1/45 2/28 ITV 000075' 2/51 3/13 ITVW 000076' 2/52 3/14 IX 177614 1/43 1/44 2/05 IY 177615 1/44 1/45 2/10 LCM 016000 1/22 3/18 LE1 022000 1/33 3/03 3/22 LL1 032000 1/34 3/04 3/23 MVEND 000053' 2/39 2/46 NC 177612 1/41 1/42 2/15 NCCNT 000066' 2/18 2/36 2/44 3/06 NSC 177613 1/42 1/43 2/30 NWDS 000067' 2/22 2/48 3/07 RKBLK 000065' 2/25 3/05 RKLE1 000063' 2/07 3/03 RKLL1 000064' 2/12 3/04 RTKL 000075'X 3/13 RMTKW 000076'X 3/14 S0 000001 1/28 S1 000002 1/29 S2 000004 1/30 S3 000010 1/31 SBYTE 000045' 2/37 2/40 SDC 004000 1/24 3/19 SSC 006000 1/27 3/20 SSM 046000 1/32 3/21 TM 001000 1/36 3/09 TMFLG 000071' 2/19 3/09 X0 000103' 2/09 3/22 Y0 000104' 2/14 3/23 .CPYL 000001$X 2/04 .FRET 000002$X 2/17 2/53 . 8001 DERS 01 DERS.SR -- DISPLAY ERASE FOR RAMTEK 02 OR GX1000 DISPLAY 83 04 CALLING SEQUENCE: 05 06 CALL DERS 07 08 .TITL DERS 09 .ENT DERS 10 .EXTN RMTKL.RMTKW 11 .EXTB .CPYL,.FRET 12 .NREL 13 14 RAMTEK DISPALY COMMANDS 15 16 016000 LCM=16000 17 000000 AN = 0 18 004000 SDC=04000 19 000001 C0 = 1 20 000002 C1 = 2 21 000000 SSC=06000 22 000001 S0 = 1 23 000002 S1 = 2 24 000004 S2 = 4 25 000010 S3 = 10 26 046000 SSM=46000 27 022000 LE1=22000 28 032000 LL1=32000 29 002000 BLK= 2000 30 001000 TM = 1000 31 012000 ERS=12000 32 @ 0002 DERS 01 SETUP DISPLAY LIST 02 03 00000'000000 0 ;STACK VARIABLE LENGTH 04 00001'006001%DERS: JSR&commat; .CPYL ;PUSH STACK 05 00002'020411 LDA 0,DLSTA ;GET DISPLAY LIST ADDR 06 00003'024411 LDA 1.DLCNT ;GET FIXED COUNT 07 00004'030404 LDA 2.CMD ;GET DEVICE COMMAND 08 00005'006404 JSR&commat; ITVW ;HURRY UP 09 00006'006404 JSR&commat; ITVW ;HURRY UP 10 00007'006002$ JSR&commat; .RET ;RETURN 11 12 00010'001000 CMD: 1000 ;VIDED SELECT 13 00011'077777 ITV: RMTKL ;LOAD BUFFER 14 00012'077777 ITVW: RMTKW ;WAIT ROUTINE 15 16 DISPLAY LIST FOR ERASE 17 18 00013'000015'DLSTA: DLST ;LIST ADDRESS 19 00014'000004 DLCNT: DEND-DLST+1 ;LIST LENGTH 20 21 00015'004003 DLST: SDC+C0+C1 ;DISPLAY CHANNELS 22 00016'006017 SSC+17 ;SUBCHANELS 0 TO 3 23 00017'016000 LCM ;SET BACKGROUND BIT 24 00020'012000 DEND:ERS ;ERASE 25 26 27 .END 0003 DERS AN 000000 1/17 BLK 002000 1/29 C0 000001 1/19 2/21 C1 000002 1/20 2/21 CMD 000010 2/07 2/12 DEND 000020 2/19 2/24 DERS 000001 2/04 DLCNT 000012 2/06 2/19 DLST 000015 2/18 2/19 2/21 DLSTA 000013 2/05 2/18 ERS 012000 1/31 2/24 ITV 000011 2/08 2/13 ITVW 000012 2/09 2/14 LCN 016000 1/16 2/23 LE1 022000 1/27 LL1 032000 1/28 RMTKL 000011'X 2/13 RMTKW 000012'X 2/14 S0 000001 1/22 S1 000002 1/23 S2 000004 1/24 S3 000010 1/25 SDC 004000 1/10 2/21 SSC 006000 1/21 2/22 SSM 046000 1/26 TM 001000 1/30 .CPYL 000001$X 2/04 .FRET 000002$X 2/10 0001 RMTK 01 RMTK.SR - RAMTEK GX100B DISPLAY SUPPORT PACKAGE 02 03 THIS TAPE CONSISTS OF ASSEMBLY LANGUAGE ROUTINES WHICH 84 PROVIDE BASIC SERVICES FOR THE DISPLAY 85 06 RMTKL - LOAD THE DISPLAY BUFFER 07 RMTKW - WAIT FOR END OF BUFFER LOAD 08 09 .TITL RMTK 10 .ENT RMTKL,RMTKW 11 .EXTD .CPYL,.FRET 12 .EXTN .UIEX,.IXMT,.REC 13 .NREL 14 15 000056 DSP=56 ;GX1000 DEVICE CODE 16 000100 DSPM=189 ;INTERRUPT MASK 17 18 RMTKL - LOAD THE DISPLAY LIST 19 20 ENTER WITH AC0 = ADDRESS OF LIST 21 AC1 = CONT OF WORDS TO TRASFER ( > 0) 22 AC2 = DEVICE SELECT COMRAN 23 24 00000'040436 RMTKL:STA 0,R0 ;SAVE AC'S 25 00001'040441 STA 0,LSTA ;LIST START ADDRESS 26 00002'044435 STA 1,R1 27 00003'044440 STA 1,LSTC ;LIST WORD COUNT 28 00004'050434 STA 2,R2 29 00005'050455 STA 2,CMND ;SAVE DEVICE SELECT COMAND 30 00006'054433 STA 3 R3 31 00007'020435 LDA 0,FTFLG ;TEST FIRST TIME FLAG 32 00010'101014 MOV@ 0,0,S2R ;SEE IF IDEF REQUIRED 33 00011'000407 JMP IDDN ;IDEF WAS DONE EARLIER 34 00012'010432 ISZ FTFLG ;SET THE FLAG 35 00013'020432 LDA 0,DSPDV ;GET THE DEVICE CODE 36 00014'024432 LDA 1,DSPDT ;AD DCT 37 00015'006017 .SYSTM ;HELL 0 RDOS 38 00016'021007 .IDEF ;HAVE ANDTHER DEVICE 39 00017'000415 JMP ERR ;DOPS 40 00020'102400 IDDN:SU0 0,0 ;RESET SND OF LOAD FLAG 41 00021'040473 STA 0,XMTWD 42 00022'020440 LDA 0,CMND ;GET GX100B COMMAND 43 00023'061056 DOA 0,DSP ;SELECT VIDEO LOAD 44 00024'022416 LDA&commat; 0,LSTA ;GET FIRST ITEM IN LIST 45 00025'010415 ISZ LSTA ;UPDATE BERORE WE INTERRUPT 46 00026'062056 DOB 0,DSP ;START LOADING 47 00027'020407 LDA 0,R0 ;RESTORE 48 00030'024407 LDA 1,R1 49 00031'030407 LDA 2,R2 50 00032'034016 LDA 3,USP ;GET STACK 51 00033'002406 JMP&commat; R3 ;RETURN 52 53 00034'006017 ERR: .SYSTM ;NICE TRY 54 00035'006400 .ERTN 55 @ 0002 RMTK 01 STORAGE LOCATIONS 02 03 00036'000000 R0: 0 04 00037'000000 R1: 0 05 00040'000000 R2: 0 06 00041'000000 R3: 0 07 00042'000000 LSTA: 0 ;LIST ADDRESS POINTER 08 00043'000000 LSTC: 0 ;LIST WORD COUNT 09 00044'000000 FTFLG: 0 ;FIRST TIME FLAG 10 11 00045'000056 DSPDV:DSP ;DEVICE CODE 12 00046'000047'DSPDT: +1 ;DCT ADDRESS 13 00047'000052' DSSAV ;SAVE AREA 14 00050'000100 DSPM ;INTERRUPT MASK 15 00051'000063' DSPIS ;INTERRUPT SERVICE 16 000010 DSSAV: .BLK 10 ;INETRRUPT SAVE AREA 17 18 00062'001000 CMWD: 1000 ;SELECT VIDEO LOAD 19 28 INTERRUPT SERVICE FOR RAMTEK 21 22 LORD DISPLAY BUFFER 23 24 00063'054427 DSPIS: STA 3,1R3 ;SAVE INT. RETURN 25 00064'014757 DSPIL: DSZ LSTC ;TEST IF DONE VET 26 00065'000411 JMP DSPB ;NO, KEEP LOADING 27 00066'060256 NIOC DSP ;YES, CLEAR DONE 28 00067'126520 SUBZL 1,1 ;GET NONZERO MESSAGE 29 00070'020423 LDA 0,XMTWA 30 00071'077777 .IXMT 31 00072'000400 JMP. 32 00073'030753 DSPIR: LDA 2,DSPDT ;RESTORE DCT FOR RTOS 33 00074'034416 LDA 3,IR3 ;AND RETURN ADDRESS 34 00075'077777 .UIEX ;USER INTERRUPT EXIT 35 36 00076'022744 DSPB: LDA&commat; 0,LSTA ;GET NEXT IN LIST 37 00077'062056 DOB 0,DSP ;HAND IT TO RAMTEK 38 00100'010742 ISZ LSTA ;POINT TO NEXT ITEM 39 00101'063456 SKPBN DSP ;NOWWAIT SOME 40 00102'000762 JMP DSPIL ;TO SEE IF THE RAMTEK 41 00103'063456 SKPBN DSP ;WILL EAT THE WORD 42 00104'000760 JMP DSPIL ;RIGHT AWAY 43 00105'063456 SKPBN DSP 44 00106'000756 JMP DSPIL 45 00107'063456 SKPBN DSP 46 00110'000754 JMP DSPIL 47 00111'000762 JMP DSPIR ;WE LOSE.RAMTEK WINS 48 49 00112'000000 IR3: 0 ;INTERRUPT RETURN 50 00113'000114'XMTWA: +1 ;MESSAGE ADDRESS 51 00114'000000 XMTWD: 0 ;MESSAGE WORD 52 @ 0003 RMTK 01 RMTKW - WAIT FOR END OF DISPLAY LIST LOAD 02 03 00115'040721 RMTKW: STA 0,R0 SAVE AC'S 04 00116'044721 STA 1,R1 05 00117'050721 STA 2,R2 06 00120'054721 STA 3,R3 07 00121'020772 LDA 0,XMTWA 08 00122'077777 .REC 09 00123'020713 LDA 0,R0 RESTORE AND RETURN 10 00124'024713 LDA 1,R1 11 00125'030713 LDA 2,R2 12 00126'034016 LDA 3,USP 13 00127'002712 JMP&commat;; R3 14 15 .END 0004 RMTK CMND 000062' 1/29 1/42 2/18 DSP 000056 1/15 1/43 1/46 2/11 2/27 2/37 2/39 2/41 2/43 2/45 DSPB 000076' 2/26 2/36 DSPDT 000046' 1/36 2/12 2/32 DSPDV 000045' 1/35 2/11 DSPIL 000064' 2/25 2/40 2/42 2/44 2/46 DSPIR 000073' 2/32 2/47 DSPIS 000063' 2/15 2/24 DSPM 000100 1/16 2/14 DSSAV 000052' 2/13 2/16 ERR 000034' 1/39 1/53 FTFLG 000044' 1/31 1/34 2/09 IDDN 000020' 1/33 1/40 IR3 000112' 2/24 2/33 2/49 LSTA 000042' 1/25 1/44 1/45 2/07 2/36 2/38 LSTC 000043' 1/27 2/00 2/25 R0 000036' 1/24 1/47 2/03 3/03 3/09 R1 000037' 1/26 1/48 2/04 3/04 3/10 R2 000040' 1/28 1/49 2/05 3/05 3/11 R3 000041' 1/30 1/51 2/06 3/06 3/13 RMTKL 000000' 1/24 RMTKW 000115' 3/03 XMTWA 000113' 2/29 2/50 3/07 XMTWD 000114' 1/41 2/51 .CPYL 000001$X .FRET 000002$X .IXMT 000071'X 2/30 .REC 000122'X 3/08 .UIEX 000075'X 2/34 0001 DSQ 01 DSQ.SR -- DISPLAY SQUARE ON RAMTEK 02 FOR GX1000 DISPLAY 03 04 CALLING SEQUENCE: 05 06 CALL DSQ (INT, IX, IY, IW, IH) 7 INT NT t INTENSITY (0-127) 09 @X = X START POSITION (0-319) 10 Y = Y START POSITION (0-255) 11 W = WIDTH OF SQUARE 12 H = HEIGHT OF SQUARE 13 14 .TITL DSQ 15 .ENT DSQ 16 .EXTN RMTKL, RMTKW 17 .EXTD .CPYL, .FRET 18 .NREL 19 20 RAMTEK DISPLAY COMMANDS 21 22 016000 LCM=16000 23 000400 BK=400 24 000000 AN = 0 25 000006 GC=6 26 004000 SDC=04000 27 000001 C0 = 1 28 000002 C1 = 2 29 006000 SSC=06000 30 000001 S0 = 1 31 000002 S1 = 2 32 000004 S2 = 4 33 000010 S3 = 10 34 046000 SSM=46000 35 022000 LE1=22000 36 032000 LL1=32000 37 024000 LE2=24000 38 034000 LL2=34000 39 002000 BLK= 2000 40 001000 TM = 1000 41 012000 ERS=12000 42 43 FORTRAN STACK ARGUMENT DISPLACEMENTS 44 45 177611 INT = -167 46 177612 IX = INT+1 47 177613 IY = IX+1 48 177614 IW = IY+1 49 177615 IH = IW+1 50 000005 FS. = IH-INT+1 0001 CNVBA 01 .TITL CNVBA 02 03 CONVERT BINARY TO ASCII 04 05 CALLING SEQUENCE 06 07 CALL CNVBA (NUM,NAD) 08 09 NUM = NUMBER TO BE CONVERTED 18 NAD I ADDRESS FOR THE ASCIE CHARACTERS 11 12 .ENT CNVBA 13 14 .EXTD .CPYL ;FORTRAN PUSH ROUTINE 15 .EXTD .FRET ;FORTRAN RETURN ROUTINE 16 17 .NREL 18 19 DEFINE FORTRAN STACK DISPLACEMENTS 20 177611 NUM = -167 21 177612 NAD = NUM+1 22 000002 .FS = NAD-NUM+1 23 24 00000'000002 .FS 25 00001'006001@CNVBA:: JSR 0.CPYL ;PUSH THE STACK 26 00002'031612 LDA 2,NAD,3 ;PICK UP THE ADDRESS FOR DATA 27 00003'020476 LDA 0,BLANK ;FILL WITH BLANKS 28 00004'041000 STA 0,0,2 29 00005'041001 STA 0,1,2 30 00006'145120 MOVZL 2,1 ;MAKE IT A BYTE POINTER 31 00007,044466 STA 1,BYTP 32 00010'027611 LDA 1,eNUM,3 ;GET THE NUMBER TO CONVERT 33 00011'125005 MOV 1,1,SNR ;ZERO IS SPECIAL 34 00012'000457 JMP ZR ;IT WAS ZERO 35 00013'125113 : MOVL &num; 1,1,SNC ;IS THE NUMBER POS OR NEG7 36 00014'000405 JMP POS ;POSITIVE 37 00015'020466 LDA 0,MINUS ;NEGATIVE, SO PUT OUT SIGN 38 00016'004425 JSR PUT 39 00017'124400 NEG 1,1 ;COMPLEMENT THE NUMBER 40 00020'000403 JMP CNVT 41 00021'020457 POS : LDA 0,PLUS 42 00022'004421 JSR PUT ;PUT OUT THE PLUS SIGN 43 00023'030453 CNVT:LDA 2,TBLPT ;RESET TABLE POINTER 44 00024'050453 STA 2, TBLE ;TO THE TOP 45 00025'152400 SUB 2,2 ;CLEAR THE SWITCH TO OUTPUT DIGITS 46 00026'050446 STA 2,DGSWT 47 00027'020457 LOOP LDA 0,C60 ;RESET COUNTER 48 00030'032447 LDA 2,&commat; ;GET POWER OF 10 49 00031'151005 MOY 2,2,SNR ;END OF THE TABLE7 50 00032'006002@ JSR &commat;FRET ;YES, SO RETURN 51 00033'010444 ISZ TBLE ;NO, SO BUMP THE POINTER 52 00034'132032 LP ADCZ&num; 1,2,SZC ;DOES POWER OF 10 GO IN7 53 00035'000404 .JMP OUT ;NO, SO OUTPUT THE DIGIT 54 00036'146400 SUB 2,1 ;YES, SO SUBTRACT IT OFF 55 00037'101400 INC 0,0 ;COUNT IT 56 00040'000774 JMP LP ;KEEP CHECKING 57 00041'004402 OUT JSR PUT ;TO THE ARRAY 58 00042'000765 JMP LOOP ;TRY IT 59 00043'054441 PUT STA 3,RET ;;SAVE RETURN 0002 CNVBA 01 00044'030430 LDA 2,DGSWT SEE IF WE MAVE PUT OUT ANY DIGITS 02 00045'151004 MOV 2,2,SZR 03 00046'000405 JMP STRE YES, SO STORE THIS ONE 04 00047'034437 LDA 3,060 SEE IF THIS IS A 0 05 00050'162415 SUB@ 3,0,SNR WELL? 06 00051'000416 JMP BLNK YES, SO PUT OUT A BLANK 07 00052'010422 ISZ DGSWT NO, SO SET THE SWITCH 08 00053'030422 STRE LDA 2,BYTP GET THE BYTE POINTER 09 00054'010421 ISZ BYTP BUMP IT 10 00055'151222 MOVZR 2,2,SZC MAKE IT AN INDEX-CHECK FOR RIGHT OR LEFT BUTE 11 00056'000485 JMP RGHT RIGHT 12 00057'176400 SUB 3,3 LEFT SO SET NUMBER TO 0 13 00060'177300 ADDS 0,3 ADD ON THIS VALUE--TO LEFT BYTE 14 00061'055800 STA 3,0,2 STORE IT 15 00062'002422 JMP &commat;;RET RETURN 16 00063'035000 RGHT LDA 3,0,2 GET THE NUMBER 17 00064'117000 ADD 0,3 ADD ON TO RIGHT BYTE 18 00065'055000 STA 3,0,2 RESTORE IT 19 00066'002416 JMP &commat;RET FETWRN 20 00067'020416 BLNK LDA 0,040 21 00070'000763 JMP STRE STORE A BLANK 22 INPUT WAS A ZERO--PUT A ZERO AND BLANK IN THE LAST WORD 23 00071'020411 ZR: LDA 0,ZRBK BLANK VERO IN ASCII 24 00072'041001 STA 0,1,2 INTO LAST PLACE 25 00073'006002$ JSR 0.FRET RETURN 26 27 00074'000000 DGSWT: 0 28 00075'000000 BYTP: 0 29 00076'000107'TBLPT: TBL PERMANENT TABLE POINTER 30 00077'000107'TBLE: TBL POINTER TO CURRENT POWER OF 10 31 00100'000053 PLUS: "+ 32 00101'020040 BLANK: 20040 33 00102'020060 ZRBK: 20060 34 00103'000055 MINUS: "35 00104'000000 RET: 0 36 00105'000040 C40: 40 37 00106'000060 C60: 60 38 00107'000144 TBL: 100. 39 00110'000012 10. 40 00111'000001 1 41 00112'000000 0 42 .END END OF TABLE MARKER 0003 CNVBA BLANK 000101' 1/27 2/32 BLNK 000067' 2/06 2/20 BYTP 000075' 1/31 2/08 2/09 2/28 C40 000105' 2/20 2/36 C60 000106' 1/47 2/04 2/37 CNVBA 000001' 1/25 CMVT 000023' 1/40 1/43 CGSWT 000074' 1/46 2/81 2/07 2/27 LOOP 000027' 1/47 1/58 LP 000034' 1/52 1/56 MINUS 000103' 1/37 2/34 NAD 177612 1/21 1/22 1/25 NUM 177611 1/20 1/21 1/22 1/32 OUT 000041' 1/53 1/57 FLUS 000100' 1/41 2/31 POS 000021' 1/36 1/41 PUT 000043' 1/30 1/42 1/57 1/59 RET 000104' 1/59 2/15 2/19 2/35 RGHT 000063' 2/11 2/16 STRE 000053' 2/03 2/08 2/21 TBL 000107' 2/29 2/30 2/30 TBLE 000077' 1/44 1/48 1/51 2/30 TBLPT 000076' 1/43 2/29 ZR 000071' 1/34 2/23 ZRBK 000102' 2/23 2/33 .CPYL 000001$X 1/25 .FRET 000002$X 1/50 2/25 .FS 000002 1/22 1/24 0001 CNYAB 01 . TITL CNYAB 02 03 . ENT CNVAB 04 .EXTD .CPYL, FRET 05 86 CONVERT ASCII TO BINARY 07 08 CALLING SEQUENCE 09 CALL CNVBA (ADRS, NUM, BYTE) 10 ADRS IS THE ADDRESS OF ASCTI CHARACTERS 11 BYTE IS 0 1F LEFT BYTE, 1 IF RIGBT BYTE 12 ON RETURM, BYTE HAS THE NUMBER OF BYTES READ 13 NUM WILL GET THE RESULTS 14 15 16 DEFINE THE FORTRAN STACK DISPLACEMENTS 17 177611 ADRS = - 167 18 177612 NUM P -166 19 177613 BYDE = - 165 20 000003 FS. 21 22 23 24 00000'000003 FS. 25 00001'006001 @CNVAB : JSR 0.CPYL ;PUSH THE STACK 26 00002'021611 LDA 0,ADRS,3 ;GET THE ADDRESS OF THE DATA 27 00003'111120 MOVZL 0,2 28 00004'023613 LDA 0,0BYTE,3 ;AND THE BYTE 29 00005'113000 ADD 0,2 ;MAKES BYTE POINTER 30 00006'050460 STA 2,BYTP ;STORE IT 31 00007'102400 SUB 0,0 ;ZERO OUT VARIABLES USED 32 00010'040457 STA 0,NMRT ;THE NUMBER TO RETURN 33 00011'040457 STA 0,COUNT ;COUNT OF BYTES 34 00012'040457 STA 0,MINUS ;MINUS SUITCH 35 00013'010455 LP ;ISZ COUNT ;COUNT THE BYTE 36 00014'151222 MOVZR 2,2,SZC ;MAKE BYTE POINTER AN ADDRESS 37 00015'000405 JMP RGNT ;GO GET RIGHT BYTE 38 00016'021000 LDA 0,0,2 ;GET THE WORD 39 00017'024453 LDA 1,LMSK ;MASK FOR LEFT BYTE 40 00020'107700 ANDS 0'1 41 00021'000404 JMP CHK ;CHECK IT FOR A DIGIT 42 00022'021000 RGHT LDA 0,0,2 ;GET THE WORD 43 00023'024450 LDA 1,MSK ;RITGHT BYTE MASK 44 00024'107400 AND 0,1 45 00025'020450 CHK LDA 0,C71 ;GET ASCIT 9 46 00026'106032 ADCZ* 0,1,SZC ;IS THE INPUT = ASCII 07 50 00032'000413 JMP MTCHR ;NO, THEN NOT A CHARACTER 51 00033'106400 SUB 0,1 ;SUBTRACT OFF 60 TO MAKE 0-5 52 00034'020433 LDA 0,NMRT ;GET THE CURRENT NUMBER 53 00035'111120 MOVZL 0,2 ;*2 54 00036'151100 MOVL 2,2 ;*4 IN AC2 55 00037'113100 ADDL 0,2 ;;*10 IN AC2 56 00040'133000 ADD 1,2 ;ADD ON THE NEW INPUT 57 00041'050426 STA 2,NMRT ;STORE 58 00042'010424 LPND ISZ BYTP ;BUMP THE BYTE POINTER 59 00043'030423 LDA 2,BYTP ;LOAD IT 0002 CNVAB 01 00044'000747 JMP LP DO NEXT ONE 02 03 00045'020431 NICHR: LDA 0,MNS ;CHECK FOR MINUS SIGN 04 00046'106415 SUB@ 0,1,SNR ;WELL7 05 00047'000414 JMP NGT ;YEPPIR 06 00050'020415 LDA 0,BLAND ;CHECK FOR BLANK 07 00051'106415 SUB@ 0,1,SNR 08 00052'000770 JMP LPND ;YES.SO CONTINUE 09 00053'020414 LDA 0,NMRT ;NOT A SIGN OR NUMBER--ETURN 10 00054'024415 LDA 1, MINUS ;CHECK TO SEE IF MINUS SWITCH IS SET 11 00055'125004 MOV 1,1 S2R ;WELL7 12 00056'100400 MEG 0,0 ;YES, SO NEGATE IT 13 00057'043612 STA 0,@NUM,3 ;STORE THE NUMBER 14 00060'020410 LDA 0,COUNT ;GET THE BYTE COUNT 15 00061'043613 STA 0,&commat;BYTE,3 ;STORE IT 16 00062'006002$ JSR 0.FRET ;RETURN 17 18 00063'010406 NGT: ISZ MINUS ;SET THE SWITCH 19 00064'000756 JMP LPND ;CONTINUE 20 21 00065'000040 BLANK 40 22 00066'000000 BYTP: 0 23 00067'000000 NMRT: 0 24 00070'000000 COUNT: 0 25 00071'000000 MINUS: 0 26 00072'177400 LMSK: 177400 27 00073'000377 MSK: 377 28 00074'000060 C60: 60 29 00075'000071 C71: 71 30 00076'000055 MNS: "31 .END 0003 CNVAB ANRS 177611 1/17 1/20 1/26 BLANK 000065 2/06 2/21 BYTE 177613 1/19 1/20 1/28 2/15 BYTP 000066 1/30 1/58 1/59 2/22 C60 000074 1/48 2/28 C71 000075 1/45 2/29 CHK 000025 1/41 1/45 CNVAB 000001 1/25 COUNT 000070 1/33 1/35 2/14 2/24 FS. 000003 1/20 1/24 LMSK 000072 1/39 2/26 LP 000013 1/35 2/01 LPND 000042 1/58 2/08 2/19 MINUS 000071 1/34 2/10 2/18 2/25 MNS 000076 2/03 2/30 MSK 000073 1/43 2/27 NGT 000063 2/05 2/18 NMRT 000067 1/32 1/52 1/57 2/09 2/23 NTCHR 000045 1/47 1/50 2/03 NUM 177612 1/18 2/13 RGHT 000022 1/37 1/42 .CPYL 000001$X 1/25 .FRET 000002$X 2/16 -REVENDICATIONS 1. Système de tomographie axiale, caractérisé en ce qu'il comporte des moyens de balayage pour collecter une pluralité d'ensembles de données acrrespondant à la twansmission on à l'atsorption d'un on de plusienrs foisceaux de rediations pénétpantes à travers une tranche plone d'un objet à analyser, des moyens pour traiter la pluralité d'ensembles de dennées colleotdes pour élaborer un/coefficient d'atténuation pour chaeun d'une pluralité d'éléments de matrice individuels de la tranche plane de P@cbjet à analyser, et des moyens pour visualicer la mitrice de ocefficients d'atténuation ocrrespondant à la tranche plane de l'chjet a analyser, lesdirs moyens de collecte d'une plunalité d'ensembies de données, losdits moyens de traitensmt des cusamklse de dernoes collectées et lesditm moyens de visualisation étane ageneds du façon à opérer indépend@@ment les uns des autres, de manfères @@ ce que la collecte de données, le traitement de la pluralité d'ensembles de données et la visualisation de la matrice de ecefficients d'atténuation correspondant à la tranche plane puissent être effectués indépendamment les uns des autres. 2. Système de tomographie axiale, caractérisé en ce qu'il comporte des moyens de balayage pour collecter une pluralité d'ensembles de données correspondant à la transmission ou à l'absorption d'un ou de plusieurs faisceaux de radiations péné- trantes à travers une tranche plane d'un objet à analyser,lesdits moyens de balayage comportant des moyens de châssis portant en eux une ouverture pour recevoir un objet à analyser,une source de radiations pénétrantes et des moyens de détection montés sur lesdits moyens de châssis pour diriger un ou plusieurs faisceaux de radiations pénétrantes depuis ladite source Ju qu'auxdits moyens de détection,et des moyens pour mettre en rotation lesdits moyens de chassis dans lesquels sont montés lesdits moyens de source et lesdits moyens de détecteur autour de l'ouverture de façon à collecter une pluralité d'ensembles de données correspondant à la transmission ou à l'absorption par l'objet de la pluralité de faisceaux de radiations pénétrantes, des moyens pour traiter la pluralité d'ensembles de données collectées pour élaborer un coefficient d'atténuation pour chacun d'une pluralité d'éléments de matrice individuels de la tranche plane de l'objet à analyser, et des moyens pour visualiser la matrice de coefficients d'atténua- tion correspondant à la tranche plane de l'objet à analyser, lesdits i:ioyens de collécte de la pluralité d::ensembles de données, lesdits moyens de traitement des ensembles de données @ollectées et losdits moyens de visualisation étant agencés de façon à opérer indépendamment les uns des autres, de manière à ce que la collecte de données, le traitomont de la pluralité d'ensembles de données, et la visualisation de la matrice de acefficients d'atténuation corrospondant à la tranche plane puissent être effectués indépemdamment les uns des autres. 3. Système selen la revendieation 2, caractérisé en ce que ladite source de radiations pémétrantes dirige un faisceau divergont de radiations p@ndtrantes de ladite source auxdits moyens de déteetion. 4. Système solen la revondicution 2, caractérisé en ce que ladite somrce de radiations pémétra@tes dirige un faisceau en fome d'éventail de radiatfons pénétramtes de ladite source auxdits moyens de déte@tion. 5. Systèms selon la revendication 2, caractérisé en ce que ladite sourcede radiations pénétrantes dirige un faisceau plan, divergent, en forme d'éventail, de radiations pénétrantes de ladite source auxdits moyens de détection. 6. Système selon la revendication 2, caractérisé en ce que ladite source de radiations penétrantes dirige un ou plusieurs faisceaux de radiations pratiquement en forme de pinceau de ladite source auxdits moyens de détection. 7. Système selon la revendication 2 ou 3, caractérisé en ce que lesdits moyens de mise en rotation desdits moyens de chassies effectuent un déplacement angulaire relatif du faisceau de radiations pénétrantes par rapport à l'objet pratiquement sans translation latérale relative de ceux-ci. 8. Système selon la revendication 2 ou 3, caractérisé en ce que lesdits moyens de balayage comportent de plus des moyens pour mettre en translation ladite source latéralement transversalement à l'ouverture entre les mises en rotation successives desdits moyens de châssis par lesdits moyens de rotation.