├── .gitignore ├── LICENSE.txt ├── README.md ├── README.png ├── README1.png ├── README2.png ├── README3.png ├── compile.sh ├── js ├── floppy.js ├── harddisk.js ├── jsTerm.js ├── nanochess_font_ecma94_1_8x16.png ├── transputer_emulator.html └── transputer_emulator.js ├── library.len ├── m3d ├── BOLACRIS.M3D ├── EJEMPLO.M3D ├── LOGO.M3D ├── NUEVO2.M3D ├── NUEVO2U.M3D ├── P.M3D └── PISO.M3D ├── make_compiler.sh ├── os ├── ARRANQUE.CMG ├── ARRANQUE.LEN ├── EDITOR.C ├── ENSG10.C ├── ENSG10.CMG ├── INTERFAZ.C ├── MAESTRO.CMG ├── MAESTRO.LEN ├── MENSAJES.LEN ├── MONITOR.C ├── SOM32.C ├── STDIO.LEN ├── STDIO2.LEN ├── STDIO3.LEN ├── TC.C ├── TC.CMG ├── TC2.C ├── TC2.CMG ├── assemble_os.sh ├── bin2c.c ├── build_disk.sh ├── buildboot.c ├── cc.cmg ├── cc.len ├── disk.img ├── editor.cmg ├── editor.len ├── empty_disk.img ├── ensg10.len ├── interfaz.cmg ├── interfaz.len ├── monitor.cmg ├── monitor.len ├── run_os.sh ├── som32.bin ├── som32.len ├── tc.len ├── tc.sh └── tc2.len ├── os_final ├── MAESTRO.CMG ├── MAESTRO.LEN ├── build_f1.sh ├── build_f2.sh ├── build_hd.sh ├── build_js.sh ├── extractimage.c ├── floppy.img ├── harddisk.img ├── run_os_v2.sh └── tree │ ├── Checar.p │ ├── Compara.p │ ├── Conjunto.p │ ├── DARC.p │ ├── DZIP.p │ ├── Desarrollo │ ├── Ajedrez.c │ ├── Ajedrez.p │ ├── Reloj.c │ ├── Reloj.p │ ├── Tetris.c │ └── Tetris.p │ ├── Dibujo_3D │ ├── Animacion_tetera │ ├── Cara │ ├── Cara_feliz │ ├── Copa │ ├── Cubo │ ├── Escena │ ├── Escena_ajedrez │ ├── Escena_ajedrez.2 │ ├── Escena_cara │ ├── Escena_cara_feliz │ ├── Escena_caras │ ├── Escena_copa │ ├── Escena_cubo │ ├── Escena_esfera │ ├── Escena_objetos │ ├── Escena_peon │ ├── Escena_tetera │ ├── Escena_tetera.2 │ ├── Escena_tetera.3 │ ├── Esfera │ ├── P.M3D │ ├── P1.M3D │ ├── P2.M3D │ ├── P3.M3D │ ├── Peon │ ├── Plano │ ├── Prueba.M3D │ ├── Tablero │ ├── Toroide │ ├── Utah.teapot │ ├── p.PIX │ ├── p1.PIX │ └── prueba.PIX │ ├── Divide.p │ ├── Documentos │ ├── Archivo.doc │ ├── Detalles.doc │ ├── Ens.doc │ ├── Peticiones.doc │ ├── Programas.doc │ ├── Servicios.doc │ ├── Trabajo.doc │ └── Transputer.doc │ ├── Editor.p │ ├── Ejecutable.p │ ├── Ens.p │ ├── GZIP.p │ ├── Hora.p │ ├── Info.p │ ├── Interfaz.p │ ├── Modela.p │ ├── Monitor.p │ ├── Pruebas │ └── float.c │ ├── SOM.32.bin │ ├── TAR.p │ ├── Vaciado.p │ ├── c │ ├── CC.c │ ├── CCanasin.c │ ├── CCexpr.c │ ├── CCgencod.c │ ├── CCinter.c │ ├── CCvarios.c │ ├── CCvars.c │ ├── CPC.c │ ├── Checar.c │ ├── Compara.c │ ├── Concat.c │ ├── Conjunto.c │ ├── Copiador.c │ ├── DARC.c │ ├── DZIP.c │ ├── Divide.c │ ├── Editor.c │ ├── Efem.c │ ├── Ejecutable.c │ ├── Ens.c │ ├── Explode.c │ ├── Filtro.c │ ├── GZIP.C │ ├── Hora.c │ ├── Inflate.c │ ├── Info.c │ ├── Interfaz.c │ ├── Libro.c │ ├── M3D.c │ ├── Modela.c │ ├── Monitor.c │ ├── Prepara.c │ ├── Semana_santa.c │ ├── Som32.c │ ├── TAR.c │ ├── Unreduce.c │ ├── Unshrink.c │ ├── Vaciado.c │ └── halt.c │ ├── cc.p │ ├── concat.p │ ├── halt.p │ ├── lib │ ├── E.len │ ├── Graf.len │ ├── MAT.len │ ├── Mensajes.len │ └── Stdio.len │ └── m3d.p ├── pascal ├── ANALEXIC.PAS ├── Animales.pas ├── DECLARAC.PAS ├── ERRORES.PAS ├── EXPRESIO.PAS ├── GENCODIG.PAS ├── Hanoi.pas ├── JULIA.PAS ├── M3D.PAS ├── PRINCIPA.PAS ├── SENTENCI.PAS ├── VARIABLE.PAS ├── original │ ├── ANALEXIC.PAS │ ├── Animales.pas │ ├── DECLARAC.PAS │ ├── ERRORES.PAS │ ├── EXPRESIO.PAS │ ├── GENCODIG.PAS │ ├── Hanoi.pas │ ├── PRINCIPA.PAS │ ├── SENTENCI.PAS │ └── VARIABLE.PAS ├── pascal.cmg └── pascal0.cmg ├── tasm.c ├── tem.c └── tram ├── Animales.pas ├── COMM.COM ├── NUEVO2.M3D ├── animales.cmg ├── comm.asm ├── comm2.asm ├── comm2.com ├── m3d.cmg ├── pascal.cmg ├── startup.asm ├── test1.asm └── test1.bin /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | os/.DS_Store 3 | tem 4 | tasm 5 | *.o 6 | os/buildboot 7 | os/bin2c 8 | 9 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Transputer emulator, transputer assembler, and transputer Pascal compiler 2 | Copyright (c) 1993-2025 Oscar Toledo G. http://nanochess.org/ 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 2. Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 18 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /README.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/README.png -------------------------------------------------------------------------------- /README1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/README1.png -------------------------------------------------------------------------------- /README2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/README2.png -------------------------------------------------------------------------------- /README3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/README3.png -------------------------------------------------------------------------------- /compile.sh: -------------------------------------------------------------------------------- 1 | ./tem pascal/pascal.cmg $1.pas >$1.len 2 | ./tasm $1.len $1.cmg library.len 3 | -------------------------------------------------------------------------------- /js/nanochess_font_ecma94_1_8x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/js/nanochess_font_ecma94_1_8x16.png -------------------------------------------------------------------------------- /js/transputer_emulator.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Transputer emulator by nanochess (2025) 4 | 5 | 6 |
7 | 8 | 169 | 170 | 171 | 172 | 173 | 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /m3d/BOLACRIS.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X = 320 3 | Y = 200 4 | 5 | 6 | CUADROS 7 | NUMERO = 1 8 | 9 | 10 | AMBIENTE 11 | LOCAL = 0.650 0.650 0.650 12 | REFLEJO = 0.250 0.250 0.250 13 | TRANS = 0.950 0.950 0.950 14 | MINIMO = 0.030 0.030 0.030 15 | MAXIMO = 1.000 1.000 1.000 16 | RECUR = 4 17 | 18 | 19 | LAMPARAS 20 | REFLEJO = FALSO 21 | REFLAMP = 0.000 0.000 0.000 22 | EFECDIST= 0.050 23 | 24 | 25 | OBSERVADOR 26 | LENTE = 3.500 27 | LOC = 0.000 -800.000 140.000 28 | ROTADO = -2.500 29 | GIRO = 6.000 30 | 31 | 32 | CIELO 33 | HORIZ = 0.400 0.500 0.600 34 | ZENITH = 0.750 0.800 0.900 35 | NUBES = VERDADERO 36 | 37 | 38 | MATERIAL 39 | TIPO = AGUA 40 | TEXTURA = ONDASMAR 41 | RFLAMB = 0.100 0.100 0.100 42 | RFLDIF = 0.100 0.400 0.250 43 | RFLESP = 0.100 0.100 0.100 44 | BRILLO = 8.000 45 | TRANS = 0.000 0.000 0.000 46 | INDICE = 1.000 47 | AMPLITUD= 0.300 48 | FASE = 0.000 49 | 50 | 51 | MATERIAL 52 | TIPO = CROMO 53 | TEXTURA = ONDAS 54 | RFLAMB = 0.200 0.200 0.200 55 | RFLDIF = 0.500 0.500 0.500 56 | RFLESP = 0.300 0.300 0.300 57 | BRILLO = 25.000 58 | TRANS = 0.000 0.000 0.000 59 | INDICE = 1.000 60 | AMPLITUD= 0.400 61 | FASE = 0.000 62 | POSX = 0.000 63 | POSY = 0.000 64 | POSZ = 0.000 65 | 66 | 67 | MATERIAL 68 | TIPO = VIDRIO 69 | TEXTURA = SUAVE 70 | RFLAMB = 0.050 0.050 0.050 71 | RFLDIF = 0.050 0.050 0.050 72 | RFLESP = 0.850 0.850 0.850 73 | BRILLO = 50.000 74 | TRANS = 0.920 0.920 0.920 75 | INDICE = 1.333 76 | 77 | 78 | PISO 79 | MAT = AGUA 80 | 81 | 82 | LAMPARA 83 | LOC = -350.000 -350.000 400.000 84 | RADIO = 100.000 85 | INTENS = 0.880 0.880 0.840 86 | 87 | 88 | ESFERA 89 | LOC = 0.000 0.000 70.000 90 | RADIO = 70.000 91 | MAT = CROMO 92 | 93 | 94 | ESFERA 95 | LOC = -50.000 -170.000 85.000 96 | RADIO = 70.000 97 | MAT = VIDRIO 98 | 99 | 100 | FINCUADRO 101 |  -------------------------------------------------------------------------------- /m3d/EJEMPLO.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=320 3 | Y=200 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.30 0.30 0.30 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=5 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.5 20 | 21 | OBSERVADOR 22 | LENTE=3.2 23 | LOC=0 -660 220 24 | ROTADO=0 25 | GIRO=16 26 | 27 | MATERIAL 28 | TIPO=AJEDREZADO 29 | TEXTURA=ALTERNADO 30 | RFLAMB=0.1 0.1 0.1 31 | RFLDIF=0.7 0.7 0.7 32 | RFLESP=0.2 0.2 0.2 33 | BRILLO=2 34 | TRANS=0 0 0 35 | INDICE=1 36 | CUADRO1=1 0.7 0.5 37 | CUADRO2=0 0.5 0.8 38 | CUADRO=0.012 39 | 40 | PISO 41 | MAT=AJEDREZADO 42 | 43 | LAMPARA 44 | LOC=350 -350 350 45 | RADIO=50 46 | INTENS=0.8 0.8 0.8 47 | 48 | FINCUADRO 49 |  -------------------------------------------------------------------------------- /m3d/LOGO.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=640 3 | Y=400 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.30 0.30 0.30 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=5 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.05 20 | 21 | OBSERVADOR 22 | LENTE=3.2 23 | LOC=0 -100 0 24 | ROTADO=0 25 | GIRO=0 26 | 27 | MATERIAL 28 | TIPO=COLOR1 29 | TEXTURA=SUAVE 30 | RFLAMB=0.3 0.2 0.1 31 | RFLDIF=0.5 0.4 0.3 32 | RFLESP=0.3 0.2 0.1 33 | BRILLO=20 34 | TRANS=0 0 0 35 | INDICE=1.0 36 | 37 | MATERIAL 38 | TIPO=COLOR2 39 | TEXTURA=SUAVE 40 | RFLAMB=0.1 0.2 0.3 41 | RFLDIF=0.3 0.4 0.5 42 | RFLESP=0.1 0.2 0.3 43 | BRILLO=20 44 | TRANS=0 0 0 45 | INDICE=1.0 46 | 47 | MATERIAL 48 | TIPO=COLOR3 49 | TEXTURA=SUAVE 50 | RFLAMB=0.1 0.3 0.2 51 | RFLDIF=0.3 0.5 0.4 52 | RFLESP=0.1 0.3 0.2 53 | BRILLO=20 54 | TRANS=0 0 0 55 | INDICE=1.0 56 | 57 | LAMPARA 58 | LOC=350 -350 350 59 | RADIO=50 60 | INTENS=0.8 0.8 0.8 61 | 62 | ESFERA 63 | LOC=5 0 -5 64 | RADIO=8 65 | MAT=COLOR1 66 | 67 | ESFERA 68 | LOC=0 0 5 69 | RADIO=8 70 | MAT=COLOR2 71 | 72 | ESFERA 73 | LOC=-5 0 -5 74 | RADIO=8 75 | MAT=COLOR3 76 | 77 | PRUEBAESFERA 78 | 79 | FINCUADRO 80 |  -------------------------------------------------------------------------------- /m3d/NUEVO2.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=320 3 | Y=200 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.30 0.30 0.30 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=5 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.05 20 | 21 | OBSERVADOR 22 | LENTE=3.2 23 | LOC=0 -660 220 24 | ROTADO=0 25 | GIRO=16 26 | 27 | MATERIAL 28 | TIPO=AJEDREZADO 29 | TEXTURA=ALTERNADO 30 | RFLAMB=0.1 0.1 0.1 31 | RFLDIF=0.7 0.7 0.7 32 | RFLESP=0.2 0.2 0.2 33 | BRILLO=2 34 | TRANS=0 0 0 35 | INDICE=1 36 | CUADRO1=1 0.7 0.5 37 | CUADRO2=0 0.5 0.8 38 | CUADRO=0.012 39 | 40 | MATERIAL 41 | TIPO=VERDE 42 | TEXTURA=SUAVE 43 | RFLAMB=0.05 0.2 0.05 44 | RFLDIF=0.1 0.5 0.1 45 | RFLESP=0.1 0.3 0.1 46 | BRILLO=20 47 | TRANS=0 0 0 48 | INDICE=1.0 49 | 50 | MATERIAL 51 | TIPO=BLANCO 52 | TEXTURA=SUAVE 53 | RFLAMB=0.2 0.2 0.2 54 | RFLDIF=0.5 0.5 0.5 55 | RFLESP=0.3 0.3 0.3 56 | BRILLO=10 57 | TRANS=0 0 0 58 | INDICE=1.0 59 | 60 | MATERIAL 61 | TIPO=ROJO 62 | TEXTURA=SUAVE 63 | RFLAMB=0.2 0.05 0.05 64 | RFLDIF=0.5 0.1 0.1 65 | RFLESP=0.3 0.1 0.1 66 | BRILLO=5 67 | TRANS=0 0 0 68 | INDICE=1.0 69 | 70 | PISO 71 | MAT=AJEDREZADO 72 | 73 | LAMPARA 74 | LOC=350 -350 350 75 | RADIO=50 76 | INTENS=0.8 0.8 0.8 77 | 78 | LAMPARA 79 | LOC=-350 -350 350 80 | RADIO=50 81 | INTENS=0.8 0.8 0.8 82 | 83 | ESFERA 84 | LOC=0 0 90 85 | RADIO=40 86 | MAT=BLANCO 87 | 88 | ESFERA 89 | LOC=100 -10 70 90 | RADIO=40 91 | MAT=ROJO 92 | 93 | ESFERA 94 | LOC=-100 10 50 95 | RADIO=40 96 | MAT=VERDE 97 | 98 | PRUEBAESFERA 99 | 100 | FINCUADRO 101 |  -------------------------------------------------------------------------------- /m3d/NUEVO2U.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=640 3 | Y=480 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.30 0.30 0.30 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=5 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.05 20 | 21 | OBSERVADOR 22 | LENTE=3.2 23 | LOC=0 -660 220 24 | ROTADO=0 25 | GIRO=16 26 | 27 | MATERIAL 28 | TIPO=AJEDREZADO 29 | TEXTURA=ALTERNADO 30 | RFLAMB=0.1 0.1 0.1 31 | RFLDIF=0.7 0.7 0.7 32 | RFLESP=0.2 0.2 0.2 33 | BRILLO=2 34 | TRANS=0 0 0 35 | INDICE=1 36 | CUADRO1=1 0.7 0.5 37 | CUADRO2=0 0.5 0.8 38 | CUADRO=0.012 39 | 40 | MATERIAL 41 | TIPO=VERDE 42 | TEXTURA=SUAVE 43 | RFLAMB=0.05 0.2 0.05 44 | RFLDIF=0.1 0.5 0.1 45 | RFLESP=0.1 0.3 0.1 46 | BRILLO=20 47 | TRANS=0 0 0 48 | INDICE=1.0 49 | 50 | MATERIAL 51 | TIPO=BLANCO 52 | TEXTURA=SUAVE 53 | RFLAMB=0.2 0.2 0.2 54 | RFLDIF=0.5 0.5 0.5 55 | RFLESP=0.3 0.3 0.3 56 | BRILLO=10 57 | TRANS=0 0 0 58 | INDICE=1.0 59 | 60 | MATERIAL 61 | TIPO=ROJO 62 | TEXTURA=SUAVE 63 | RFLAMB=0.2 0.05 0.05 64 | RFLDIF=0.5 0.1 0.1 65 | RFLESP=0.3 0.1 0.1 66 | BRILLO=5 67 | TRANS=0 0 0 68 | INDICE=1.0 69 | 70 | PISO 71 | MAT=AJEDREZADO 72 | 73 | LAMPARA 74 | LOC=350 -350 350 75 | RADIO=50 76 | INTENS=0.8 0.8 0.8 77 | 78 | LAMPARA 79 | LOC=-350 -350 350 80 | RADIO=50 81 | INTENS=0.8 0.8 0.8 82 | 83 | ESFERA 84 | LOC=0 0 90 85 | RADIO=40 86 | MAT=BLANCO 87 | 88 | ESFERA 89 | LOC=100 -10 70 90 | RADIO=40 91 | MAT=ROJO 92 | 93 | ESFERA 94 | LOC=-100 10 50 95 | RADIO=40 96 | MAT=VERDE 97 | 98 | PRUEBAESFERA 99 | 100 | FINCUADRO 101 |  -------------------------------------------------------------------------------- /m3d/P.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=640 3 | Y=480 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.25 0.25 0.25 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=2 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.5 20 | 21 | MATERIAL 22 | TIPO=AJEDREZADO 23 | TEXTURA=ALTERNADO 24 | RFLAMB=0.1 0.1 0.1 25 | RFLDIF=0.7 0.7 0.7 26 | RFLESP=0.2 0.2 0.2 27 | BRILLO=2 28 | TRANS=0 0 0 29 | INDICE=1 30 | CUADRO1=1 0.7 0.5 31 | CUADRO2=0 0.5 0.8 32 | CUADRO=0.012 33 | 34 | MATERIAL 35 | TIPO=BLANCO 36 | TEXTURA=SUAVE 37 | RFLAMB=0.2 0.2 0.2 38 | RFLDIF=0.8 0.8 0.8 39 | RFLESP=0.0 0.0 0.0 40 | BRILLO=25 41 | TRANS=0.0 0.0 0.0 42 | INDICE=1.0 43 | 44 | {piso} 45 | PISO 46 | MAT=AJEDREZADO 47 | 48 | PRUEBAESFERA 49 | 50 | OBSERVADOR 51 | LENTE=3.2 52 | LOC=-250 200 150 53 | ROTADO=120 54 | GIRO=16 55 | 56 | LAMPARA 57 | LOC=-350 300 350 58 | RADIO=100 59 | INTENS=0.95 0.95 0.91 60 | 61 | LAMPARA 62 | LOC=350 300 350 63 | RADIO=100 64 | INTENS=0.95 0.95 0.91 65 | 66 | ESFERA 67 | LOC=0.0 4.8 93.3 68 | RADIO=10.0 69 | MAT=BLANCO 70 | 71 | CILINDRO 72 | LOCBASE=0.0 1.8 77.3 73 | RADIO=5.0 74 | LOCFIN=0.0 4.8 93.3 75 | MAT=BLANCO 76 | 77 | CILINDRO 78 | LOCBASE=-17.3 1.8 77.3 79 | RADIO=5.0 80 | LOCFIN=17.3 1.8 77.3 81 | MAT=BLANCO 82 | 83 | ESFERA 84 | LOC=-17.3 1.8 77.3 85 | RADIO=5.0 86 | MAT=BLANCO 87 | 88 | ESFERA 89 | LOC=17.3 1.8 77.3 90 | RADIO=5.0 91 | MAT=BLANCO 92 | 93 | CILINDRO 94 | LOCBASE=0.0 0.0 48.3 95 | RADIO=5.0 96 | LOCFIN=0.0 1.8 77.3 97 | MAT=BLANCO 98 | 99 | CILINDRO 100 | LOCBASE=-6.8 0.0 48.3 101 | RADIO=5.0 102 | LOCFIN=6.8 0.0 48.3 103 | MAT=BLANCO 104 | 105 | ESFERA 106 | LOC=-6.8 0.0 48.3 107 | RADIO=5.0 108 | MAT=BLANCO 109 | 110 | ESFERA 111 | LOC=6.8 0.0 48.3 112 | RADIO=5.0 113 | MAT=BLANCO 114 | 115 | CILINDRO 116 | LOCBASE=-17.3 1.8 77.3 117 | RADIO=5.0 118 | LOCFIN=-17.3 2.8 57.3 119 | MAT=BLANCO 120 | 121 | ESFERA 122 | LOC=-17.3 2.8 57.3 123 | RADIO=5.0 124 | MAT=BLANCO 125 | 126 | CILINDRO 127 | LOCBASE=-17.3 2.8 57.3 128 | RADIO=5.0 129 | LOCFIN=-17.3 8.8 41.3 130 | MAT=BLANCO 131 | 132 | CILINDRO 133 | LOCBASE=17.3 1.8 77.3 134 | RADIO=5.0 135 | LOCFIN=17.3 -2.8 58.3 136 | MAT=BLANCO 137 | 138 | ESFERA 139 | LOC=17.3 -2.8 58.3 140 | RADIO=5.0 141 | MAT=BLANCO 142 | 143 | CILINDRO 144 | LOCBASE=17.3 -2.8 58.3 145 | RADIO=5.0 146 | LOCFIN=17.3 -4.8 42.3 147 | MAT=BLANCO 148 | 149 | CILINDRO 150 | LOCBASE=6.8 0.0 48.3 151 | RADIO=5.0 152 | LOCFIN=6.8 7.8 26.3 153 | MAT=BLANCO 154 | 155 | ESFERA 156 | LOC=6.8 7.8 26.3 157 | RADIO=5.0 158 | MAT=BLANCO 159 | 160 | CILINDRO 161 | LOCBASE=6.8 7.8 26.3 162 | RADIO=5.0 163 | LOCFIN=6.8 10.8 2.3 164 | MAT=BLANCO 165 | 166 | CILINDRO 167 | LOCBASE=-6.8 0.0 48.3 168 | RADIO=5.0 169 | LOCFIN=-6.8 -2.8 23.3 170 | MAT=BLANCO 171 | 172 | ESFERA 173 | LOC=-6.8 -2.8 23.3 174 | RADIO=5.0 175 | MAT=BLANCO 176 | 177 | CILINDRO 178 | LOCBASE=-6.8 -2.8 23.3 179 | RADIO=5.0 180 | LOCFIN=-6.8 -12.8 1.3 181 | MAT=BLANCO 182 | 183 | FINCUADRO 184 | -------------------------------------------------------------------------------- /m3d/PISO.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=640 3 | Y=400 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.30 0.30 0.30 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=5 15 | 16 | LAMPARAS 17 | REFLEJO=FALSE 18 | REFLAMP=0 0 0 19 | EFECDIST=0.5 20 | 21 | OBSERVADOR 22 | LENTE=3.2 23 | LOC=0 -660 220 24 | ROTADO=0 25 | GIRO=16 26 | 27 | MATERIAL 28 | TIPO=AJEDREZADO 29 | TEXTURA=ONDASAGUA 30 | RFLAMB=0.0 0.8 0.9 31 | RFLDIF=0.0 0.3 0.4 32 | RFLESP=0.0 0.2 0.3 33 | BRILLO=2 34 | TRANS=0 0 0 35 | INDICE=1 36 | AMPLONDA = 0.300 37 | FASEONDA = 0.1 38 | POSXONDA = 0.0 39 | POSYONDA = 0.0 40 | 41 | MATERIAL 42 | TIPO=BLANCO 43 | TEXTURA=SUAVE 44 | RFLAMB=0.6 0.6 0.6 45 | RFLDIF=0.4 0.4 0.4 46 | RFLESP=0.2 0.2 0.2 47 | BRILLO=10 48 | TRANS=0 0 0 49 | INDICE=1.0 50 | 51 | PISO 52 | MAT=AJEDREZADO 53 | 54 | LAMPARA 55 | LOC=350 -350 350 56 | RADIO=50 57 | INTENS=0.8 0.8 0.8 58 | 59 | LAMPARA 60 | LOC=-350 -350 350 61 | RADIO=50 62 | INTENS=0.8 0.8 0.8 63 | 64 | ESFERA 65 | LOC=0 0 90 66 | RADIO=40 67 | MAT=BLANCO 68 | 69 | PRUEBAESFERA 70 | 71 | FINCUADRO 72 |  -------------------------------------------------------------------------------- /make_compiler.sh: -------------------------------------------------------------------------------- 1 | ./tem pascal/pascal.cmg pascal/variable.pas pascal/errores.pas pascal/analexic.pas pascal/gencodig.pas pascal/expresio.pas pascal/sentenci.pas pascal/declarac.pas pascal/principa.pas >pascal.len 2 | ./tasm pascal.len pascal.cmg library.len 3 | -------------------------------------------------------------------------------- /os/ARRANQUE.CMG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/ARRANQUE.CMG -------------------------------------------------------------------------------- /os/ARRANQUE.LEN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/ARRANQUE.LEN -------------------------------------------------------------------------------- /os/EDITOR.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/EDITOR.C -------------------------------------------------------------------------------- /os/ENSG10.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/ENSG10.C -------------------------------------------------------------------------------- /os/ENSG10.CMG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/ENSG10.CMG -------------------------------------------------------------------------------- /os/INTERFAZ.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/INTERFAZ.C -------------------------------------------------------------------------------- /os/MAESTRO.CMG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/MAESTRO.CMG -------------------------------------------------------------------------------- /os/MAESTRO.LEN: -------------------------------------------------------------------------------- 1 | ; 19-jun-1995 2 | 3 | ; 4 | ; MAnejo de Entrada y Salida de TRansputer por Oscar toledo gutierrez. 5 | ; 6 | ; (MAESTRO) 7 | ; 8 | ; Se supone que esto comienza en 8000:0100. 9 | ; 10 | ENTRADA: 11 | SSER: equ 64 12 | ESER: equ 65 13 | SBAJ: equ 66 14 | EBAJ: equ 67 15 | AVID: equ 68 16 | SEMA: equ 69 17 | 18 | bsub ; Reserva para el punto de servicio. (uso con out) 19 | bsub 20 | bsub 21 | bsub 22 | bsub ; Respuesta del punto de servicio. (uso con in) 23 | bsub 24 | bsub 25 | bsub 26 | bsub ; Reserva para el acceso a bajo nivel. (uso con out) 27 | bsub 28 | bsub 29 | bsub 30 | bsub ; Respuesta del acceso a bajo nivel. (uso con in) 31 | bsub 32 | bsub 33 | bsub 34 | bsub ; Reserva para el apuntador de video. 35 | bsub 36 | bsub 37 | bsub 38 | bsub ; Semaforo. 0 = Nadie usa el canal. 39 | bsub ; 1 = Se esta refrescando la pantalla. 40 | bsub ; 2 = Lo esta usando el disco o el teclado. 41 | bsub 42 | 43 | mint 44 | mint 45 | stnl SSER 46 | mint 47 | mint 48 | stnl ESER 49 | mint 50 | mint 51 | stnl SBAJ 52 | mint 53 | mint 54 | stnl EBAJ 55 | ajw -2000 ; Bytes para el video. 56 | ldlp 0 57 | mint 58 | stnl AVID 59 | ajw -2 ; Limpia el video. 60 | ldlp 2 61 | stl 0 62 | ldc 1000 63 | stl 1 64 | BN1: 65 | ldc 0x07200720 66 | ldl 0 67 | stnl 0 68 | ldl 0 69 | adc 3 70 | stl 0 71 | ldlp 0 72 | ldc BN2-BN1 73 | lend 74 | BN2: 75 | ldlp 1002 76 | stl 0 77 | ldc 1000 78 | stl 1 79 | BN3: 80 | ldc 0x20072007 81 | ldl 0 82 | stnl 0 83 | ldl 0 84 | adc 3 85 | stl 0 86 | ldlp 0 87 | ldc BN4-BN3 88 | lend 89 | BN4: 90 | ajw 2 91 | ldc 0 92 | mint 93 | stnl SEMA 94 | ldc REFRESCO-PROC1 95 | ldpi 96 | PROC1: 97 | ldlp -16 98 | stnl -1 99 | ldlp -16 100 | runp 101 | ldc ENTSAL-PROC2 102 | ldpi 103 | PROC2: 104 | ldlp -32 105 | stnl -1 106 | ldlp -32 107 | runp 108 | ldc COMIENZO-PROC3 109 | ldlp -48 110 | startp 111 | PROC3: 112 | PROC4: 113 | ldc 1000000 114 | ldtimer 115 | sum 116 | tin 117 | j PROC4 118 | 119 | REFRESCO: 120 | ajw -8 121 | mint 122 | ldnl AVID 123 | stl 6 124 | mint 125 | ldnl AVID 126 | ldnlp 1000 127 | stl 1 128 | R4: 129 | ldc 50000 130 | ldtimer 131 | sum 132 | tin 133 | ldl 6 134 | stl 2 135 | ldl 1 136 | stl 3 137 | ldc 0 138 | stl 4 139 | R3: 140 | ldl 4 141 | ldc 25 142 | diff 143 | cj R4 144 | ldc 0 145 | stl 5 146 | R1: 147 | ldl 5 148 | ldc 160 149 | diff 150 | cj R2 151 | ldl 2 152 | ldnl 0 153 | ldl 3 154 | ldnl 0 155 | diff 156 | eqc 0 157 | cj REF 158 | ldl 2 159 | ldnlp 1 160 | stl 2 161 | ldl 3 162 | ldnlp 1 163 | stl 3 164 | ldl 5 165 | ldnlp 1 166 | stl 5 167 | j R1 168 | R2: 169 | ldl 4 170 | adc 1 171 | stl 4 172 | j R3 173 | 174 | REF: 175 | mint 176 | ldnl SEMA 177 | cj REF1 178 | ldc 1000 179 | ldtimer 180 | sum 181 | tin 182 | j REF 183 | REF1: 184 | ldc 1 185 | mint 186 | stnl SEMA 187 | ldl 2 188 | ldl 5 189 | diff 190 | stl 2 191 | ldl 3 192 | ldl 5 193 | diff 194 | stl 3 195 | ldl 2 196 | ldl 3 197 | ldc 160 198 | move 199 | mint 200 | ldnlp 0 201 | ldc 0x30 202 | outbyte 203 | mint 204 | ldnlp 0 205 | ldc 0x34 206 | outbyte 207 | mint 208 | ldnlp 0 209 | ldl 4 210 | outbyte 211 | ldl 3 212 | ldc 160 213 | call ENVIO 214 | ldc 0 215 | mint 216 | stnl SEMA 217 | ldl 2 218 | adc 160 219 | stl 2 220 | ldl 3 221 | adc 160 222 | stl 3 223 | j R2 224 | 225 | ENTSAL: 226 | ajw -4 227 | E1: 228 | ldlp 0 229 | mint 230 | ldnlp SBAJ 231 | ldc 4 232 | in 233 | E2: 234 | mint 235 | ldnl SEMA 236 | cj E3 237 | ldc 1000 238 | ldtimer 239 | sum 240 | tin 241 | j E2 242 | E3: 243 | ldc 2 244 | mint 245 | stnl SEMA 246 | ldl 0 247 | lb 248 | stl 1 249 | ldl 1 250 | ldc 1 251 | diff 252 | cj LEESEC 253 | ldl 1 254 | ldc 2 255 | diff 256 | cj ESCSEC 257 | ldl 1 258 | ldc 3 259 | diff 260 | cj FORPIS 261 | ldl 1 262 | ldc 5 263 | diff 264 | cj CHETEC 265 | ldl 1 266 | ldc 6 267 | diff 268 | cj OBTHOR 269 | ldl 1 270 | ldc 7 271 | diff 272 | cj POSCUR 273 | ldl 1 274 | ldc 8 275 | diff 276 | cj FORCUR 277 | j E6 278 | E4: 279 | ldl 0 280 | ldl 1 281 | call ENVIO 282 | ldl 2 283 | cj E6 284 | ldl 0 285 | mint 286 | ldnlp 4 287 | ldl 2 288 | in 289 | E6: 290 | mint 291 | ldnlp EBAJ 292 | ldc 0 293 | outbyte 294 | ldc 0 295 | mint 296 | stnl SEMA 297 | j E1 298 | 299 | LEESEC: 300 | ldc 4 301 | stl 1 302 | ldc 513 303 | stl 2 304 | j E4 305 | 306 | ESCSEC: 307 | ldc 516 308 | stl 1 309 | ldc 1 310 | stl 2 311 | j E4 312 | 313 | FORPIS: 314 | ldc 3 315 | stl 1 316 | ldc 1 317 | stl 2 318 | j E4 319 | 320 | CHETEC: 321 | ldc 1 322 | stl 1 323 | ldc 1 324 | stl 2 325 | j E4 326 | 327 | OBTHOR: 328 | ldc 1 329 | stl 1 330 | ldc 6 331 | stl 2 332 | j E4 333 | 334 | POSCUR: 335 | ldc 3 336 | stl 1 337 | ldc 0 338 | stl 2 339 | j E4 340 | 341 | FORCUR: 342 | ldc 3 343 | stl 1 344 | ldc 0 345 | stl 2 346 | j E4 347 | 348 | ENVIO: 349 | ajw -1 350 | ENVIO3: 351 | ldl 2 352 | cj ENVIO2 353 | mint 354 | ldnlp 0 355 | ldl 3 356 | lb 357 | ldc 4 358 | shr 359 | adc 0x30 360 | outbyte 361 | mint 362 | ldnlp 0 363 | ldl 3 364 | lb 365 | ldc 15 366 | and 367 | adc 0x30 368 | outbyte 369 | ldl 3 370 | adc 1 371 | stl 3 372 | ldl 2 373 | adc -1 374 | stl 2 375 | j ENVIO3 376 | ENVIO2: 377 | ajw 1 378 | ret 379 | 380 | ; 381 | ; Ejecuta una secuencia de boot. 382 | ; 383 | ; Carga la pista 0, lado 0, sector 1. 384 | ; 385 | 386 | A_VIDEO: equ 68 387 | E_MAESTRO: equ 66 388 | S_MAESTRO: equ 67 389 | 390 | COMIENZO: 391 | ajw -144 392 | ARRANQUE2: 393 | ldc 0 ; Arranque. 394 | ldlp 16 395 | call LEESECTOR 396 | ldlp 16 397 | stl 0 398 | ldc FINPROG-F1 399 | ldpi 400 | F1: 401 | adc 15 402 | ldc 15 403 | not 404 | and 405 | stl 1 406 | ldlp 16 407 | ldc 510 408 | bsub 409 | lb 410 | eqc 0x12 411 | cj F4 412 | ldlp 16 413 | ldc 511 414 | bsub 415 | lb 416 | eqc 0x34 417 | cj F4 418 | ldlp 16 419 | ldl 1 420 | ldc 512 421 | move 422 | ldl 1 423 | ajw 144 424 | gcall 425 | 426 | F4: 427 | mint 428 | ldnl A_VIDEO 429 | ldc ERROR1-F6 430 | ldpi 431 | F6: 432 | call PONE 433 | call ETECLA 434 | j ARRANQUE2 435 | 436 | PONE: 437 | ldl 1 438 | lb 439 | cj PONE1 440 | ldl 1 441 | lb 442 | ldl 2 443 | sb 444 | ldl 1 445 | adc 1 446 | stl 1 447 | ldl 2 448 | adc 2 449 | stl 2 450 | j PONE 451 | PONE1: 452 | ret 453 | 454 | ETECLA: 455 | ajw -2 456 | ETECLA1: 457 | ldc 5 458 | stl 0 459 | ldlp 0 460 | stl 1 461 | ldlp 1 462 | mint 463 | ldnlp E_MAESTRO 464 | ldc 4 465 | out 466 | ldlp 1 467 | mint 468 | ldnlp S_MAESTRO 469 | ldc 1 470 | in 471 | ldl 0 472 | cj ETECLA1 473 | ajw 2 474 | ret 475 | 476 | LEESECTOR: 477 | ldl 1 478 | adc -1 479 | stl 1 480 | ldc 0x01 481 | ldl 1 482 | sb 483 | ldl 2 484 | ldc 36 485 | div 486 | ldl 1 487 | adc 1 488 | sb 489 | ldl 2 490 | ldc 18 491 | div 492 | ldc 2 493 | rem 494 | ldl 1 495 | adc 2 496 | sb 497 | ldl 2 498 | ldc 18 499 | rem 500 | adc 1 501 | ldl 1 502 | adc 3 503 | sb 504 | ldl 1 505 | stl 2 506 | ldlp 2 507 | mint 508 | ldnlp E_MAESTRO 509 | ldc 4 510 | out 511 | ldlp 2 512 | mint 513 | ldnlp S_MAESTRO 514 | ldc 1 515 | in 516 | ret 517 | 518 | ERROR1: 519 | db 'Inserte un disco ' 520 | db 'con sistema ' 521 | db 'operativo, ' 522 | db 'y pulse una ' 523 | db 'tecla...' 524 | db 0 525 | 526 | FINPROG: 527 | -------------------------------------------------------------------------------- /os/MENSAJES.LEN: -------------------------------------------------------------------------------- 1 | ; 11-jul-1995 2 | 3 | ; 4 | ; Rutinas para mandar y recibir mensajes. 5 | ; 6 | ; mandar(canal, *mensaje, bytes) 7 | ; 8 | qmandar: 9 | ldl 3 10 | ldl 2 11 | ldl 4 12 | out 13 | ret 14 | 15 | ; 16 | ; recibir(canal, *mensaje, bytes) 17 | ; 18 | qrecibir: 19 | ldl 3 20 | ldl 2 21 | ldl 4 22 | in 23 | ret 24 | 25 | ; 26 | ; memcpy(destino, origen, bytes) 27 | ; 28 | qmemcpy: 29 | ldl 3 30 | ldl 2 31 | ldl 4 32 | move 33 | ret 34 | 35 | ; 36 | ; memset(destino, byte, cuantos) 37 | ; 38 | qmemset: 39 | ldl 4 40 | cj memset 41 | ldl 3 42 | ldl 2 43 | sb 44 | ldl 2 45 | adc 1 46 | stl 2 47 | ldl 4 48 | adc -1 49 | stl 4 50 | j qmemset 51 | memset: 52 | ret 53 | 54 | q_finprog: 55 | ldc FINPROG-P2 56 | ldpi 57 | P2: 58 | adc 15 59 | ldc -16 60 | and 61 | ret 62 | 63 | ; 64 | ; inicia_tarea(direccion, workspace, argc, argv) 65 | ; 66 | qinicia_tarea: 67 | ldl 4 68 | ldl 3 69 | stnl 1 70 | ldl 5 71 | ldl 3 72 | stnl 2 73 | ldl 2 74 | ldl 3 75 | stnl 0 76 | ldc MITAREA-P1 77 | ldl 3 78 | startp 79 | P1: 80 | ret 81 | MITAREA: 82 | ajw -4 83 | ldc 7 84 | ldpi 85 | stl 0 86 | ldl 5 87 | stl 2 88 | ldl 6 89 | stl 3 90 | ldl 4 91 | gcall 92 | stopp 93 | 94 | FINPROG: 95 | -------------------------------------------------------------------------------- /os/MONITOR.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/MONITOR.C -------------------------------------------------------------------------------- /os/SOM32.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/SOM32.C -------------------------------------------------------------------------------- /os/STDIO.LEN: -------------------------------------------------------------------------------- 1 | ; 09-jun-1995 2 | 3 | ; 4 | ; Libreria de soporte para los programas escritos en C. 5 | ; 6 | 7 | qzexit: 8 | ldl 1 9 | ldnlp -4 10 | gajw 11 | ret 12 | 13 | qzgets: 14 | ldl 4 15 | stl 1 16 | ldl 1 17 | stl 2 18 | P2: 19 | call LEECANAL 20 | stl 3 21 | ldl 3 22 | eqc 8 23 | cj P1 24 | ldl 2 25 | ldl 1 26 | diff 27 | cj P2 28 | ldc 8 29 | call ESCRIBECANAL 30 | ldl 2 31 | adc -1 32 | stl 2 33 | j P2 34 | P1: 35 | ldl 3 36 | eqc 13 37 | cj P3 38 | ldc 0 39 | ldl 2 40 | sb 41 | ldc 13 42 | call ESCRIBECANAL 43 | ldc 10 44 | call ESCRIBECANAL 45 | ret 46 | P3: 47 | ldl 3 48 | call ESCRIBECANAL 49 | ldl 3 50 | ldl 2 51 | sb 52 | ldl 2 53 | adc 1 54 | stl 2 55 | j P2 56 | 57 | qzputchar: 58 | ldl 4 59 | call ESCRIBECANAL 60 | ret 61 | 62 | qzfopen: 63 | ldc 28 64 | call ESCRIBECANAL 65 | ldl 5 66 | call ESCRIBECADENA 67 | ldl 4 68 | call ESCRIBECADENA 69 | call LEECANALP 70 | ret 71 | 72 | qzfclose: 73 | ldc 29 74 | call ESCRIBECANAL 75 | ldl 4 76 | call ESCRIBECANAL 77 | call LEECANALP 78 | ret 79 | 80 | qzfputc: 81 | ldc 30 82 | call ESCRIBECANAL 83 | ldl 4 84 | call ESCRIBECANAL 85 | ldl 5 86 | call ESCRIBECANAL 87 | call LEECANALP 88 | ret 89 | 90 | qzfgetc: 91 | ldc 31 92 | call ESCRIBECANAL 93 | ldl 4 94 | call ESCRIBECANAL 95 | call LEECANALP 96 | ret 97 | 98 | ENTRADA: equ 0 ; Canal de entrada 99 | ; donde la terminal pone 100 | ; los datos del teclado. 101 | ; 102 | ; Poner 0-3, para los canales 103 | ; 0-3 respectivamente 104 | 105 | SALIDA: equ 0 ; Canal de salida 106 | ; donde la terminal recibe 107 | ; los datos para ilustrarlos. 108 | ; 109 | ; Poner 0-3, para los canales 110 | ; 0-3 respectivamente. 111 | 112 | ; 113 | ; Las siguientes definiciones 114 | ; no deben ser alteradas, pues 115 | ; indican la posicion local de 116 | ; los registros despues de una 117 | ; llamada. 118 | ; 119 | A: equ 1 120 | B: equ 2 121 | C: equ 3 122 | 123 | ; Obtencion de un caracter 124 | ; por el canal definido hacia el 125 | ; registro A. 126 | ; 127 | LEECANAL: 128 | ldc 0 129 | stl A 130 | ldlp A 131 | mint 132 | ldnlp ENTRADA+4 133 | ldc 1 134 | in 135 | ldl A 136 | ret 137 | 138 | ; Obtencion de una palabra 139 | ; por el canal definido hacia el 140 | ; registro A. 141 | ; 142 | LEECANALP: 143 | ldc 0 144 | stl A 145 | ldlp A 146 | mint 147 | ldnlp ENTRADA+4 148 | ldc 2 149 | in 150 | ldl A 151 | ldc 0x8000 152 | xword 153 | ret 154 | 155 | ; Envio de un caracter 156 | ; del registro A por el 157 | ; canal definido. 158 | ; 159 | ESCRIBECANAL: 160 | ldlp A 161 | mint 162 | ldnlp SALIDA 163 | ldc 1 164 | out 165 | ret 166 | 167 | ; 168 | ; Escribe una cadena terminada en 0 169 | ; en el canal de salida definido. 170 | ; 171 | ESCRIBECADENA: 172 | ldl 1 173 | lb 174 | call ESCRIBECANAL 175 | ldl 1 176 | lb 177 | ldl 1 178 | adc 1 179 | stl 1 180 | eqc 0 181 | cj ESCRIBECADENA 182 | ret 183 | -------------------------------------------------------------------------------- /os/STDIO2.LEN: -------------------------------------------------------------------------------- 1 | ; 10-jun-1995 2 | 3 | ; 4 | ; Libreria de soporte para los programas escritos en C. 5 | ; 6 | 7 | q_llamada: 8 | ldl 2 9 | ajw -4 10 | ldc 2 11 | ldpi 12 | stl 0 13 | gcall 14 | ajw -3 15 | stl 0 16 | stl 1 17 | stl 2 18 | ldl 0 19 | ldl 6 20 | stnl 0 21 | ldl 1 22 | ldl 7 23 | stnl 0 24 | ldl 2 25 | ldl 8 26 | stnl 0 27 | ldlp 0 28 | ldl 9 29 | stnl 0 30 | ajw 3 31 | ret 32 | 33 | q_finprog: 34 | ldc FINPROG-P4 35 | ldpi 36 | P4: 37 | ret 38 | 39 | qexit: 40 | ldl 1 41 | ldnlp -4 42 | gajw 43 | ret 44 | 45 | qgetchar: 46 | call LEECANAL 47 | ret 48 | 49 | qputs: 50 | ldl 2 51 | call ESCRIBECAD2 52 | ret 53 | 54 | qgets: 55 | ldl 2 56 | stl 1 57 | ldl 1 58 | stl 2 59 | P2: 60 | call LEECANAL 61 | stl 3 62 | ldl 3 63 | eqc 8 64 | cj P1 65 | ldl 2 66 | ldl 1 67 | diff 68 | cj P2 69 | ldc 8 70 | call ESCRIBECANAL 71 | ldl 2 72 | adc -1 73 | stl 2 74 | j P2 75 | P1: 76 | ldl 3 77 | eqc 13 78 | cj P3 79 | ldc 0 80 | ldl 2 81 | sb 82 | ldc 13 83 | call ESCRIBECANAL 84 | ldc 10 85 | call ESCRIBECANAL 86 | ret 87 | P3: 88 | ldl 3 89 | call ESCRIBECANAL 90 | ldl 3 91 | ldl 2 92 | sb 93 | ldl 2 94 | adc 1 95 | stl 2 96 | j P2 97 | 98 | qputchar: 99 | ldl 2 100 | call ESCRIBECANAL 101 | ret 102 | 103 | qfopen: 104 | ldc 28 105 | call ESCRIBECANAL 106 | ldl 2 107 | call ESCRIBECADENA 108 | ldl 3 109 | call ESCRIBECADENA 110 | call LEECANALP 111 | ret 112 | 113 | qfclose: 114 | ldc 29 115 | call ESCRIBECANAL 116 | ldl 2 117 | call ESCRIBECANAL 118 | call LEECANALP 119 | ret 120 | 121 | qfputc: 122 | ldc 30 123 | call ESCRIBECANAL 124 | ldl 3 125 | call ESCRIBECANAL 126 | ldl 2 127 | call ESCRIBECANAL 128 | call LEECANALP 129 | ret 130 | 131 | qfgetc: 132 | ldc 31 133 | call ESCRIBECANAL 134 | ldl 2 135 | call ESCRIBECANAL 136 | call LEECANALP 137 | ret 138 | 139 | ENTRADA: equ 0 ; Canal de entrada 140 | ; donde la terminal pone 141 | ; los datos del teclado. 142 | ; 143 | ; Poner 0-3, para los canales 144 | ; 0-3 respectivamente 145 | 146 | SALIDA: equ 0 ; Canal de salida 147 | ; donde la terminal recibe 148 | ; los datos para ilustrarlos. 149 | ; 150 | ; Poner 0-3, para los canales 151 | ; 0-3 respectivamente. 152 | 153 | ; 154 | ; Las siguientes definiciones 155 | ; no deben ser alteradas, pues 156 | ; indican la posicion local de 157 | ; los registros despues de una 158 | ; llamada. 159 | ; 160 | A: equ 1 161 | B: equ 2 162 | C: equ 3 163 | 164 | ; Obtencion de un caracter 165 | ; por el canal definido hacia el 166 | ; registro A. 167 | ; 168 | LEECANAL: 169 | ldc 0 170 | stl A 171 | ldlp A 172 | mint 173 | ldnlp ENTRADA+4 174 | ldc 1 175 | in 176 | ldl A 177 | ret 178 | 179 | ; Obtencion de una palabra 180 | ; por el canal definido hacia el 181 | ; registro A. 182 | ; 183 | LEECANALP: 184 | ldc 0 185 | stl A 186 | ldlp A 187 | mint 188 | ldnlp ENTRADA+4 189 | ldc 2 190 | in 191 | ldl A 192 | ldc 0x8000 193 | xword 194 | ret 195 | 196 | ; Envio de un caracter 197 | ; del registro A por el 198 | ; canal definido. 199 | ; 200 | ESCRIBECANAL: 201 | ldlp A 202 | mint 203 | ldnlp SALIDA 204 | ldc 1 205 | out 206 | ret 207 | 208 | ; 209 | ; Escribe una cadena terminada en 0 210 | ; en el canal de salida definido. 211 | ; 212 | ESCRIBECADENA: 213 | ldl 1 214 | lb 215 | call ESCRIBECANAL 216 | ldl 1 217 | lb 218 | ldl 1 219 | adc 1 220 | stl 1 221 | eqc 0 222 | cj ESCRIBECADENA 223 | ret 224 | 225 | ; 226 | ; Escribe una cadena terminada en 0 227 | ; en el canal de salida definido. 228 | ; 229 | ESCRIBECAD2: 230 | ldl 1 231 | lb 232 | cj ESCRIBECAD3 233 | ldl 1 234 | lb 235 | call ESCRIBECANAL 236 | ldl 1 237 | adc 1 238 | stl 1 239 | j ESCRIBECAD2 240 | ESCRIBECAD3: 241 | ret 242 | 243 | FINPROG: 244 | -------------------------------------------------------------------------------- /os/STDIO3.LEN: -------------------------------------------------------------------------------- 1 | ; 15-jun-1995 2 | 3 | ; 4 | ; Libreria de soporte para los programas escritos en C. 5 | ; 6 | 7 | q_llamada: 8 | ldl 2 9 | ajw -4 10 | ldc 2 11 | ldpi 12 | stl 0 13 | gcall 14 | ajw -3 15 | stl 0 16 | stl 1 17 | stl 2 18 | ldl 0 19 | ldl 6 20 | stnl 0 21 | ldl 1 22 | ldl 7 23 | stnl 0 24 | ldl 2 25 | ldl 8 26 | stnl 0 27 | ldlp 0 28 | ldl 9 29 | stnl 0 30 | ajw 3 31 | ret 32 | 33 | q_finprog: 34 | ldc FINPROG-P4 35 | ldpi 36 | P4: 37 | ret 38 | 39 | qexit: 40 | ldl 1 41 | ldnlp -4 42 | gajw 43 | ret 44 | 45 | qgetchar: 46 | ldc 5 47 | stl 1 48 | ldlp 1 49 | call EMENSAJE 50 | stl 1 51 | ldl 1 52 | cj qgetchar 53 | ldl 1 54 | ret 55 | 56 | qputs: 57 | ldl 2 58 | lb 59 | cj puts 60 | ldl 2 61 | lb 62 | ldl 1 63 | call qputchar 64 | ldl 2 65 | adc 1 66 | stl 2 67 | j qputs 68 | puts: 69 | ret 70 | 71 | qgets: 72 | ldl 2 73 | stl 1 74 | ldl 1 75 | stl 2 76 | P2: 77 | call qgetchar 78 | stl 3 79 | ldl 3 80 | eqc 8 81 | cj P1 82 | ldl 2 83 | ldl 1 84 | diff 85 | cj P2 86 | ldc 8 87 | ldc 0 88 | call qputchar 89 | ldl 2 90 | adc -1 91 | stl 2 92 | j P2 93 | P1: 94 | ldl 3 95 | eqc 13 96 | cj P3 97 | ldc 0 98 | ldl 2 99 | sb 100 | ldc 13 101 | ldc 0 102 | call qputchar 103 | ldc 10 104 | ldc 0 105 | call qputchar 106 | ret 107 | P3: 108 | ldl 3 109 | ldc 0 110 | call qputchar 111 | ldl 3 112 | ldl 2 113 | sb 114 | ldl 2 115 | adc 1 116 | stl 2 117 | j P2 118 | 119 | qputchar: 120 | ldc 6 121 | ldlp 1 122 | sb 123 | ldl 2 124 | ldlp 1 125 | adc 1 126 | sb 127 | ldlp 1 128 | call EMENSAJE 129 | ret 130 | 131 | qfopen: 132 | ajw -16 133 | ldlp 2 134 | adc 1 135 | stl 1 136 | ldc 1 137 | ldlp 2 138 | sb 139 | fopen1: 140 | ldl 18 141 | lb 142 | dup 143 | ldl 1 144 | sb 145 | ldl 18 146 | adc 1 147 | stl 18 148 | ldl 1 149 | adc 1 150 | stl 1 151 | eqc 0 152 | cj fopen1 153 | fopen2: 154 | ldl 19 155 | lb 156 | dup 157 | ldl 1 158 | sb 159 | ldl 19 160 | adc 1 161 | stl 19 162 | ldl 1 163 | adc 1 164 | stl 1 165 | eqc 0 166 | cj fopen2 167 | ldlp 2 168 | call EMENSAJE 169 | ajw 16 170 | ret 171 | 172 | qfclose: 173 | ldc 2 174 | ldlp 1 175 | sb 176 | ldl 2 177 | ldlp 1 178 | adc 1 179 | sb 180 | ldlp 1 181 | call EMENSAJE 182 | ret 183 | 184 | qfputc: 185 | ldc 4 186 | ldlp 1 187 | sb 188 | ldl 2 189 | ldlp 1 190 | adc 1 191 | sb 192 | ldl 3 193 | ldlp 1 194 | adc 2 195 | sb 196 | ldlp 1 197 | call EMENSAJE 198 | ret 199 | 200 | qfgetc: 201 | ldc 3 202 | ldlp 1 203 | sb 204 | ldl 2 205 | ldlp 1 206 | adc 1 207 | sb 208 | ldlp 1 209 | call EMENSAJE 210 | ret 211 | 212 | EMENSAJE: 213 | ajw -1 214 | mint 215 | ldnlp 64 216 | ldl 2 217 | outword 218 | ldc 0 219 | stl 2 220 | ldlp 2 221 | mint 222 | ldnlp 65 223 | ldc 2 224 | in 225 | ldl 2 226 | ldc 0x8000 227 | xword 228 | ajw 1 229 | ret 230 | 231 | ; 232 | ; Rutinas para mandar y recibir mensajes. 233 | ; 234 | ; mandar(canal, *mensaje, bytes) 235 | ; 236 | qmandar: 237 | ldl 3 238 | ldl 2 239 | ldl 4 240 | out 241 | ret 242 | 243 | ; 244 | ; recibir(canal, *mensaje, bytes) 245 | ; 246 | qrecibir: 247 | ldl 3 248 | ldl 2 249 | ldl 4 250 | in 251 | ret 252 | 253 | ; 254 | ; memcpy(destino, origen, bytes) 255 | ; 256 | qmemcpy: 257 | ldl 3 258 | ldl 2 259 | ldl 4 260 | move 261 | ret 262 | 263 | ; 264 | ; memset(destino, byte, cuantos) 265 | ; 266 | qmemset: 267 | ldl 4 268 | cj memset 269 | ldl 3 270 | ldl 2 271 | sb 272 | ldl 2 273 | adc 1 274 | stl 2 275 | ldl 4 276 | adc -1 277 | stl 4 278 | j qmemset 279 | memset: 280 | ret 281 | 282 | FINPROG: 283 | -------------------------------------------------------------------------------- /os/TC.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/TC.C -------------------------------------------------------------------------------- /os/TC.CMG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/TC.CMG -------------------------------------------------------------------------------- /os/TC2.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/TC2.C -------------------------------------------------------------------------------- /os/TC2.CMG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/TC2.CMG -------------------------------------------------------------------------------- /os/assemble_os.sh: -------------------------------------------------------------------------------- 1 | ../tasm MAESTRO.LEN MAESTRO.CMG 2 | ../tasm ARRANQUE.LEN ARRANQUE.CMG 3 | ../tasm som32.len som32.bin MENSAJES.LEN 4 | ../tasm interfaz.len interfaz.cmg STDIO3.LEN 5 | ../tasm ensg10.len ensg10.cmg STDIO3.LEN 6 | ../tasm editor.len editor.cmg STDIO3.LEN 7 | ../tasm cc.len cc.cmg STDIO3.LEN 8 | ../tasm monitor.len monitor.cmg STDIO3.LEN 9 | 10 | -------------------------------------------------------------------------------- /os/bin2c.c: -------------------------------------------------------------------------------- 1 | /* 2 | ** Convert binary to C format 3 | ** 4 | ** by Oscar Toledo G. 5 | ** 6 | ** Creation date: Mar/05/2025. 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | char base64_encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 14 | 15 | /* 16 | ** Main program 17 | */ 18 | int main(int argc, char *argv[]) 19 | { 20 | FILE *input; 21 | FILE *output; 22 | int c; 23 | int num; 24 | int decimal; 25 | int spaces; 26 | int maximum_bytes; 27 | int javascript; 28 | int base64; 29 | 30 | decimal = 0; 31 | spaces = 0; 32 | maximum_bytes = -1; 33 | javascript = 0; 34 | base64 = 0; 35 | if (argc < 3) { 36 | fprintf(stderr, "Usage: bin2c [options] input.bin output.c [name]\n"); 37 | fprintf(stderr, " -d Use decimal for numbers.\n"); 38 | fprintf(stderr, " -l value Maximum of bytes read from input file.\n"); 39 | fprintf(stderr, " -s Remove spaces from output file.\n"); 40 | fprintf(stderr, " -j Generate array for Javascript.\n"); 41 | fprintf(stderr, " -b Generate base64 string for Javascript.\n"); 42 | exit(1); 43 | } 44 | while (c < argc && argv[c][0] == '-') { 45 | if (toupper(argv[c][1]) == 'D') { 46 | decimal = 1; 47 | } else if (toupper(argv[c][1]) == 'L') { 48 | c++; 49 | if (c >= argc) { 50 | fprintf(stderr, "Wrong argument for -l\n"); 51 | exit(1); 52 | } 53 | maximum_bytes = atoi(argv[c]); 54 | } else if (toupper(argv[c][1]) == 'S') { 55 | spaces = 1; 56 | } else if (toupper(argv[c][1]) == 'J') { 57 | javascript = 1; 58 | } else if (toupper(argv[c][1]) == 'B') { 59 | base64 = 1; 60 | } else { 61 | fprintf(stderr, "Wrong argument %s\n", argv[c]); 62 | exit(1); 63 | } 64 | c++; 65 | } 66 | if (c >= argc) { 67 | fprintf(stderr, "Missing input file\n"); 68 | exit(1); 69 | } 70 | input = fopen(argv[c], "rb"); 71 | if (input == NULL) { 72 | fprintf(stderr, "Couldn't open '%s' for input.\n", argv[c]); 73 | exit(1); 74 | } 75 | c++; 76 | if (c >= argc) { 77 | fprintf(stderr, "Missing output file\n"); 78 | exit(1); 79 | } 80 | output = fopen(argv[c], "w"); 81 | if (output == NULL) { 82 | fprintf(stderr, "Couldn't open '%s' for output.\n", argv[c]); 83 | exit(1); 84 | } 85 | c++; 86 | if (javascript && base64) { 87 | fprintf(output, "var %s = \"", c >= argc ? "binary" : argv[c]); 88 | while (1) { 89 | if (maximum_bytes == 0) 90 | break; 91 | c = fgetc(input); 92 | if (c == EOF) { 93 | break; 94 | } 95 | if (maximum_bytes != -1 && maximum_bytes != 0) 96 | maximum_bytes--; 97 | num = (c & 0xff) << 16; 98 | c = fgetc(input); 99 | if (c == EOF) { 100 | c = 0; 101 | } 102 | if (maximum_bytes != -1 && maximum_bytes != 0) 103 | maximum_bytes--; 104 | num |= (c & 0xff) << 8; 105 | c = fgetc(input); 106 | if (c == EOF) { 107 | c = 0; 108 | } 109 | if (maximum_bytes != -1 && maximum_bytes != 0) 110 | maximum_bytes--; 111 | num |= (c & 0xff); 112 | fputc(base64_encode[(num >> 18) & 0x3f], output); 113 | fputc(base64_encode[(num >> 12) & 0x3f], output); 114 | fputc(base64_encode[(num >> 6) & 0x3f], output); 115 | fputc(base64_encode[num & 0x3f], output); 116 | } 117 | fprintf(output, "\";\n"); 118 | } else { 119 | if (base64) { 120 | fprintf(stderr, "base64 isn't supported for C language\n"); 121 | exit(1); 122 | } 123 | if (javascript) { 124 | fprintf(output, "var %s = [\n", c >= argc ? "binary" : argv[c]); 125 | } else { 126 | fprintf(output, "unsigned char %s[] = {\n", c >= argc ? "binary" : argv[c]); 127 | } 128 | num = 0; 129 | while (1) { 130 | c = fgetc(input); 131 | if (c == EOF || maximum_bytes != -1 && maximum_bytes-- == 0) { 132 | if ((num & 7) != 0) 133 | fprintf(output, "\n"); 134 | break; 135 | } 136 | if ((num & 7) == 0) { 137 | if (spaces) { 138 | /* Nothing */ 139 | } else { 140 | fprintf(output, "\t"); 141 | } 142 | } 143 | if (spaces) { 144 | if (decimal) 145 | fprintf(output, "%d,", c); 146 | else 147 | fprintf(output, "0x%02x,", c); 148 | } else { 149 | if (decimal) 150 | fprintf(output, "%d, ", c); 151 | else 152 | fprintf(output, "0x%02x, ", c); 153 | } 154 | if ((num & 7) == 7) 155 | fprintf(output, "\n"); 156 | num++; 157 | } 158 | if (javascript) 159 | fprintf(output, "];\n"); 160 | else 161 | fprintf(output, "};\n"); 162 | } 163 | fclose(output); 164 | fclose(input); 165 | exit(0); 166 | } 167 | 168 | -------------------------------------------------------------------------------- /os/build_disk.sh: -------------------------------------------------------------------------------- 1 | ./buildboot disk.img ARRANQUE.CMG som32.bin interfaz.cmg cc.cmg INTERFAZ.C EDITOR.C TC2.C ENSG10.C editor.cmg ensg10.cmg monitor.cmg STDIO3.LEN 2 | -------------------------------------------------------------------------------- /os/cc.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/cc.cmg -------------------------------------------------------------------------------- /os/cc.len: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/cc.len -------------------------------------------------------------------------------- /os/disk.img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/disk.img -------------------------------------------------------------------------------- /os/editor.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/editor.cmg -------------------------------------------------------------------------------- /os/editor.len: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/editor.len -------------------------------------------------------------------------------- /os/interfaz.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/interfaz.cmg -------------------------------------------------------------------------------- /os/monitor.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/monitor.cmg -------------------------------------------------------------------------------- /os/run_os.sh: -------------------------------------------------------------------------------- 1 | ../tem -os maestro.cmg disk.img 2 | 3 | -------------------------------------------------------------------------------- /os/som32.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/som32.bin -------------------------------------------------------------------------------- /os/som32.len: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/som32.len -------------------------------------------------------------------------------- /os/tc.sh: -------------------------------------------------------------------------------- 1 | ../tem -cc tc2.cmg 2 | 3 | -------------------------------------------------------------------------------- /os/tc2.len: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os/tc2.len -------------------------------------------------------------------------------- /os_final/MAESTRO.CMG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/MAESTRO.CMG -------------------------------------------------------------------------------- /os_final/MAESTRO.LEN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/MAESTRO.LEN -------------------------------------------------------------------------------- /os_final/build_f1.sh: -------------------------------------------------------------------------------- 1 | ../transputer/os/buildboot -fd -v2 floppy.img . tree/SOM.32.bin tree/Halt.p tree/Interfaz.p tree/Editor.p tree/CC.p tree/Ens.p tree/Ejecutable.p tree/Info.p tree/C/CC.c tree/C/CCanasin.c tree/C/CCexpr.c tree/C/CCgencod.c tree/C/CCinter.c tree/C/CCvarios.c tree/C/CCvars.c tree/C/Checar.c tree/C/Compara.c tree/C/Concat.c tree/C/Conjunto.c tree/C/Copiador.c tree/C/CPC.c tree/C/DARC.c tree/C/Divide.c tree/C/DZIP.c tree/C/Editor.c tree/C/Efem.c tree/C/Ejecutable.c tree/C/Ens.c tree/C/Explode.c tree/C/Filtro.c tree/C/GZIP.C tree/C/Hora.c tree/C/Inflate.c tree/C/Info.c tree/C/Interfaz.c tree/C/Libro.c tree/C/Monitor.c tree/C/Prepara.c tree/C/Semana_santa.c tree/C/Som32.c tree/C/TAR.c tree/C/Unreduce.c tree/C/Unshrink.c tree/C/Vaciado.c tree/lib/E.len tree/lib/Graf.len tree/lib/MAT.len tree/lib/Mensajes.len tree/lib/Stdio.len 2 | 3 | -------------------------------------------------------------------------------- /os_final/build_f2.sh: -------------------------------------------------------------------------------- 1 | ../transputer/os/buildboot -fd -v2 floppy.img . tree/SOM.32.bin tree/Halt.p tree/Desarrollo/Ajedrez.c tree/Desarrollo/Reloj.c tree/Desarrollo/Tetris.c tree/C/Modelado.c tree/C/M3D.c tree/Dibujo_3D/* tree/Documentos/Archivo.doc tree/Documentos/Detalles.doc tree/Documentos/Ens.doc tree/Documentos/Peticiones.doc tree/Documentos/Programas.doc tree/Documentos/Servicios.doc tree/Documentos/Trabajo.doc tree/Documentos/Transputer.doc -------------------------------------------------------------------------------- /os_final/build_hd.sh: -------------------------------------------------------------------------------- 1 | ../transputer/os/buildboot -hd -v2 harddisk.img . tree/Interfaz.p 2 | 3 | -------------------------------------------------------------------------------- /os_final/build_js.sh: -------------------------------------------------------------------------------- 1 | ../os/bin2c -d -s -l 3293184 -j -b harddisk.img harddisk.js harddisk_image 2 | ../os/bin2c -d -s -l 16384 -j -b floppy.img floppy.js floppy_image 3 | -------------------------------------------------------------------------------- /os_final/extractimage.c: -------------------------------------------------------------------------------- 1 | /* 2 | ** Extract all the files from a SOM32 drive 3 | ** 4 | ** (c) Copyright 2025 Oscar Toledo G. 5 | ** 6 | ** Creation date: Mar/12/2025. 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | #include /* POSIX */ 14 | 15 | #define SECTOR_SIZE 512 16 | 17 | char path[4096]; 18 | 19 | unsigned char boot[512]; 20 | unsigned char *fat; 21 | 22 | int sectors_per_block; 23 | int max_blocks; 24 | int fat_sector; 25 | int fat_size; 26 | int fat_entry; 27 | 28 | void extract_directory(char *, int); 29 | 30 | #define read_32(addr) ((addr)[0] | ((addr)[1] << 8) | ((addr)[2] << 16) | ((addr)[3] << 24)) 31 | 32 | FILE *input; 33 | 34 | /* 35 | ** Main program 36 | */ 37 | int main(int argc, char *argv[]) 38 | { 39 | 40 | if (argc != 2) { 41 | fprintf(stderr, "Usage: extractimage harddisk.img\n"); 42 | exit(1); 43 | } 44 | input = fopen(argv[1], "rb"); 45 | if (input == NULL) { 46 | fprintf(stderr, "Couldn't open '%s' for input\n", argv[1]); 47 | exit(1); 48 | } 49 | fread(boot, 1, 512, input); 50 | if (boot[510] != 0x12 && boot[511] != 0x34) { 51 | fprintf(stderr, "Not a disk with SOM32 format\n"); 52 | exit(1); 53 | } 54 | sectors_per_block = read_32(boot + 24); 55 | max_blocks = read_32(boot + 28); 56 | fat_sector = read_32(boot + 32); 57 | fat_size = read_32(boot + 36); 58 | fat_entry = read_32(boot + 40); 59 | fat = malloc(fat_size * SECTOR_SIZE); 60 | if (fat == NULL) { 61 | fprintf(stderr, "Couldn't allocate FAT\n"); 62 | exit(1); 63 | } 64 | fseek(input, fat_sector * SECTOR_SIZE, SEEK_SET); 65 | fread(fat, 1, fat_size * SECTOR_SIZE, input); 66 | extract_directory(path, read_32(boot + 44)); 67 | free(fat); 68 | fclose(input); 69 | exit(0); 70 | } 71 | 72 | /* 73 | ** Read FAT 74 | */ 75 | int read_fat(int block) 76 | { 77 | if (fat_entry == 1) 78 | return fat[block]; 79 | return fat[block * 2] | (fat[block * 2 + 1] << 8); 80 | } 81 | 82 | /* 83 | ** Extract directory 84 | */ 85 | void extract_directory(char *subpath, int block) 86 | { 87 | unsigned char *dir; 88 | unsigned char *entry; 89 | unsigned char *buffer; 90 | int file_block; 91 | int file_size; 92 | int remaining; 93 | FILE *output; 94 | 95 | dir = malloc(sectors_per_block * SECTOR_SIZE * 2); 96 | if (dir == NULL) { 97 | fprintf(stderr, "Couldn't allocate directory block\n"); 98 | exit(1); 99 | } 100 | buffer = dir + sectors_per_block * SECTOR_SIZE; 101 | while (1) { 102 | fseek(input, block * sectors_per_block * SECTOR_SIZE, SEEK_SET); 103 | fread(dir, 1, sectors_per_block * SECTOR_SIZE, input); 104 | entry = dir; 105 | do { 106 | if (entry[0] == 0) { 107 | free(dir); 108 | return; 109 | } 110 | if (entry[0] != 0x80) { /* Not deleted */ 111 | strcpy(subpath, (char *) entry); 112 | if (entry[48] & 0x08) { /* Subdirectory */ 113 | mkdir(path, 0744); 114 | strcat(subpath, "/"); 115 | fprintf(stderr, "%s\n", path); 116 | extract_directory(path + strlen(path), read_32(entry + 56)); 117 | } else { 118 | file_block = read_32(entry + 56); 119 | file_size = read_32(entry + 60); 120 | fprintf(stderr, "%s (%d bytes)...\n", path, file_size); 121 | output = fopen(path, "wb"); 122 | if (output != NULL) { 123 | while (file_size) { 124 | remaining = (file_size > sectors_per_block * SECTOR_SIZE) ? sectors_per_block * SECTOR_SIZE : file_size; 125 | fseek(input, file_block * sectors_per_block * SECTOR_SIZE, SEEK_SET); 126 | fread(buffer, 1, remaining, input); 127 | fwrite(buffer, 1, remaining, output); 128 | file_block = read_fat(file_block); 129 | if (file_block == 0xffffffff) 130 | break; 131 | file_size -= remaining; 132 | } 133 | fclose(output); 134 | } 135 | } 136 | } 137 | entry += 64; 138 | } while (entry < dir + sectors_per_block * SECTOR_SIZE) ; 139 | block = read_fat(block); 140 | if (block == 0xffffffff) 141 | break; 142 | } 143 | free(dir); 144 | } 145 | 146 | -------------------------------------------------------------------------------- /os_final/floppy.img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/floppy.img -------------------------------------------------------------------------------- /os_final/harddisk.img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/harddisk.img -------------------------------------------------------------------------------- /os_final/run_os_v2.sh: -------------------------------------------------------------------------------- 1 | ../tem -os2 maestro.cmg floppy.img harddisk.img 2 | 3 | -------------------------------------------------------------------------------- /os_final/tree/Checar.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Checar.p -------------------------------------------------------------------------------- /os_final/tree/Compara.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Compara.p -------------------------------------------------------------------------------- /os_final/tree/Conjunto.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Conjunto.p -------------------------------------------------------------------------------- /os_final/tree/DARC.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/DARC.p -------------------------------------------------------------------------------- /os_final/tree/DZIP.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/DZIP.p -------------------------------------------------------------------------------- /os_final/tree/Desarrollo/Ajedrez.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Desarrollo/Ajedrez.c -------------------------------------------------------------------------------- /os_final/tree/Desarrollo/Ajedrez.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Desarrollo/Ajedrez.p -------------------------------------------------------------------------------- /os_final/tree/Desarrollo/Reloj.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Desarrollo/Reloj.c -------------------------------------------------------------------------------- /os_final/tree/Desarrollo/Reloj.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Desarrollo/Reloj.p -------------------------------------------------------------------------------- /os_final/tree/Desarrollo/Tetris.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Desarrollo/Tetris.c -------------------------------------------------------------------------------- /os_final/tree/Desarrollo/Tetris.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Desarrollo/Tetris.p -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Animacion_tetera: -------------------------------------------------------------------------------- 1 | 36 640 480 2 2 | 3 | 1 0 0 500 500 4 | 200 40 5 | 100 30 6 | 7 | 1 8 | 9 | 1 10 | C:/Dibujo_3D/Utah.teapot 11 | 0 12 | 0.1 0.1 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 40.0 40.0 40.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | 20 | 1 0 0 500 500 21 | 200 40 22 | 100 30 23 | 24 | 1 25 | 26 | 1 27 | C:/Dibujo_3D/Utah.teapot 28 | 0 29 | 0.1 0.1 0.1 30 | 1.0 0.85 0.6 31 | 0.5 0.5 0.4 32 | 10 33 | 40.0 40.0 40.0 34 | 10.0 0.0 0.0 35 | 0.0 0.0 0.0 36 | 37 | 1 0 0 500 500 38 | 200 40 39 | 100 30 40 | 41 | 1 42 | 43 | 1 44 | C:/Dibujo_3D/Utah.teapot 45 | 0 46 | 0.1 0.1 0.1 47 | 1.0 0.85 0.6 48 | 0.5 0.5 0.4 49 | 10 50 | 40.0 40.0 40.0 51 | 20.0 0.0 0.0 52 | 0.0 0.0 0.0 53 | 54 | 1 0 0 500 500 55 | 200 40 56 | 100 30 57 | 58 | 1 59 | 60 | 1 61 | C:/Dibujo_3D/Utah.teapot 62 | 0 63 | 0.1 0.1 0.1 64 | 1.0 0.85 0.6 65 | 0.5 0.5 0.4 66 | 10 67 | 40.0 40.0 40.0 68 | 30.0 0.0 0.0 69 | 0.0 0.0 0.0 70 | 71 | 1 0 0 500 500 72 | 200 40 73 | 100 30 74 | 75 | 1 76 | 77 | 1 78 | C:/Dibujo_3D/Utah.teapot 79 | 0 80 | 0.1 0.1 0.1 81 | 1.0 0.85 0.6 82 | 0.5 0.5 0.4 83 | 10 84 | 40.0 40.0 40.0 85 | 40.0 0.0 0.0 86 | 0.0 0.0 0.0 87 | 88 | 1 0 0 500 500 89 | 200 40 90 | 100 30 91 | 92 | 1 93 | 94 | 1 95 | C:/Dibujo_3D/Utah.teapot 96 | 0 97 | 0.1 0.1 0.1 98 | 1.0 0.85 0.6 99 | 0.5 0.5 0.4 100 | 10 101 | 40.0 40.0 40.0 102 | 50.0 0.0 0.0 103 | 0.0 0.0 0.0 104 | 105 | 1 0 0 500 500 106 | 200 40 107 | 100 30 108 | 109 | 1 110 | 111 | 1 112 | C:/Dibujo_3D/Utah.teapot 113 | 0 114 | 0.1 0.1 0.1 115 | 1.0 0.85 0.6 116 | 0.5 0.5 0.4 117 | 10 118 | 40.0 40.0 40.0 119 | 60.0 0.0 0.0 120 | 0.0 0.0 0.0 121 | 122 | 1 0 0 500 500 123 | 200 40 124 | 100 30 125 | 126 | 1 127 | 128 | 1 129 | C:/Dibujo_3D/Utah.teapot 130 | 0 131 | 0.1 0.1 0.1 132 | 1.0 0.85 0.6 133 | 0.5 0.5 0.4 134 | 10 135 | 40.0 40.0 40.0 136 | 70.0 0.0 0.0 137 | 0.0 0.0 0.0 138 | 139 | 1 0 0 500 500 140 | 200 40 141 | 100 30 142 | 143 | 1 144 | 145 | 1 146 | C:/Dibujo_3D/Utah.teapot 147 | 0 148 | 0.1 0.1 0.1 149 | 1.0 0.85 0.6 150 | 0.5 0.5 0.4 151 | 10 152 | 40.0 40.0 40.0 153 | 80.0 0.0 0.0 154 | 0.0 0.0 0.0 155 | 156 | 1 0 0 500 500 157 | 200 40 158 | 100 30 159 | 160 | 1 161 | 162 | 1 163 | C:/Dibujo_3D/Utah.teapot 164 | 0 165 | 0.1 0.1 0.1 166 | 1.0 0.85 0.6 167 | 0.5 0.5 0.4 168 | 10 169 | 40.0 40.0 40.0 170 | 90.0 0.0 0.0 171 | 0.0 0.0 0.0 172 | 173 | 1 0 0 500 500 174 | 200 40 175 | 100 30 176 | 177 | 1 178 | 179 | 1 180 | C:/Dibujo_3D/Utah.teapot 181 | 0 182 | 0.1 0.1 0.1 183 | 1.0 0.85 0.6 184 | 0.5 0.5 0.4 185 | 10 186 | 40.0 40.0 40.0 187 | 100.0 0.0 0.0 188 | 0.0 0.0 0.0 189 | 190 | 1 0 0 500 500 191 | 200 40 192 | 100 30 193 | 194 | 1 195 | 196 | 1 197 | C:/Dibujo_3D/Utah.teapot 198 | 0 199 | 0.1 0.1 0.1 200 | 1.0 0.85 0.6 201 | 0.5 0.5 0.4 202 | 10 203 | 40.0 40.0 40.0 204 | 110.0 0.0 0.0 205 | 0.0 0.0 0.0 206 | 207 | 1 0 0 500 500 208 | 200 40 209 | 100 30 210 | 211 | 1 212 | 213 | 1 214 | C:/Dibujo_3D/Utah.teapot 215 | 0 216 | 0.1 0.1 0.1 217 | 1.0 0.85 0.6 218 | 0.5 0.5 0.4 219 | 10 220 | 40.0 40.0 40.0 221 | 120.0 0.0 0.0 222 | 0.0 0.0 0.0 223 | 224 | 1 0 0 500 500 225 | 200 40 226 | 100 30 227 | 228 | 1 229 | 230 | 1 231 | C:/Dibujo_3D/Utah.teapot 232 | 0 233 | 0.1 0.1 0.1 234 | 1.0 0.85 0.6 235 | 0.5 0.5 0.4 236 | 10 237 | 40.0 40.0 40.0 238 | 130.0 0.0 0.0 239 | 0.0 0.0 0.0 240 | 241 | 1 0 0 500 500 242 | 200 40 243 | 100 30 244 | 245 | 1 246 | 247 | 1 248 | C:/Dibujo_3D/Utah.teapot 249 | 0 250 | 0.1 0.1 0.1 251 | 1.0 0.85 0.6 252 | 0.5 0.5 0.4 253 | 10 254 | 40.0 40.0 40.0 255 | 140.0 0.0 0.0 256 | 0.0 0.0 0.0 257 | 258 | 1 0 0 500 500 259 | 200 40 260 | 100 30 261 | 262 | 1 263 | 264 | 1 265 | C:/Dibujo_3D/Utah.teapot 266 | 0 267 | 0.1 0.1 0.1 268 | 1.0 0.85 0.6 269 | 0.5 0.5 0.4 270 | 10 271 | 40.0 40.0 40.0 272 | 150.0 0.0 0.0 273 | 0.0 0.0 0.0 274 | 275 | 1 0 0 500 500 276 | 200 40 277 | 100 30 278 | 279 | 1 280 | 281 | 1 282 | C:/Dibujo_3D/Utah.teapot 283 | 0 284 | 0.1 0.1 0.1 285 | 1.0 0.85 0.6 286 | 0.5 0.5 0.4 287 | 10 288 | 40.0 40.0 40.0 289 | 160.0 0.0 0.0 290 | 0.0 0.0 0.0 291 | 292 | 1 0 0 500 500 293 | 200 40 294 | 100 30 295 | 296 | 1 297 | 298 | 1 299 | C:/Dibujo_3D/Utah.teapot 300 | 0 301 | 0.1 0.1 0.1 302 | 1.0 0.85 0.6 303 | 0.5 0.5 0.4 304 | 10 305 | 40.0 40.0 40.0 306 | 170.0 0.0 0.0 307 | 0.0 0.0 0.0 308 | 309 | 1 0 0 500 500 310 | 200 40 311 | 100 30 312 | 313 | 1 314 | 315 | 1 316 | C:/Dibujo_3D/Utah.teapot 317 | 0 318 | 0.1 0.1 0.1 319 | 1.0 0.85 0.6 320 | 0.5 0.5 0.4 321 | 10 322 | 40.0 40.0 40.0 323 | 180.0 0.0 0.0 324 | 0.0 0.0 0.0 325 | 326 | 1 0 0 500 500 327 | 200 40 328 | 100 30 329 | 330 | 1 331 | 332 | 1 333 | C:/Dibujo_3D/Utah.teapot 334 | 0 335 | 0.1 0.1 0.1 336 | 1.0 0.85 0.6 337 | 0.5 0.5 0.4 338 | 10 339 | 40.0 40.0 40.0 340 | 190.0 0.0 0.0 341 | 0.0 0.0 0.0 342 | 343 | 1 0 0 500 500 344 | 200 40 345 | 100 30 346 | 347 | 1 348 | 349 | 1 350 | C:/Dibujo_3D/Utah.teapot 351 | 0 352 | 0.1 0.1 0.1 353 | 1.0 0.85 0.6 354 | 0.5 0.5 0.4 355 | 10 356 | 40.0 40.0 40.0 357 | 200.0 0.0 0.0 358 | 0.0 0.0 0.0 359 | 360 | 1 0 0 500 500 361 | 200 40 362 | 100 30 363 | 364 | 1 365 | 366 | 1 367 | C:/Dibujo_3D/Utah.teapot 368 | 0 369 | 0.1 0.1 0.1 370 | 1.0 0.85 0.6 371 | 0.5 0.5 0.4 372 | 10 373 | 40.0 40.0 40.0 374 | 210.0 0.0 0.0 375 | 0.0 0.0 0.0 376 | 377 | 1 0 0 500 500 378 | 200 40 379 | 100 30 380 | 381 | 1 382 | 383 | 1 384 | C:/Dibujo_3D/Utah.teapot 385 | 0 386 | 0.1 0.1 0.1 387 | 1.0 0.85 0.6 388 | 0.5 0.5 0.4 389 | 10 390 | 40.0 40.0 40.0 391 | 220.0 0.0 0.0 392 | 0.0 0.0 0.0 393 | 394 | 1 0 0 500 500 395 | 200 40 396 | 100 30 397 | 398 | 1 399 | 400 | 1 401 | C:/Dibujo_3D/Utah.teapot 402 | 0 403 | 0.1 0.1 0.1 404 | 1.0 0.85 0.6 405 | 0.5 0.5 0.4 406 | 10 407 | 40.0 40.0 40.0 408 | 230.0 0.0 0.0 409 | 0.0 0.0 0.0 410 | 411 | 1 0 0 500 500 412 | 200 40 413 | 100 30 414 | 415 | 1 416 | 417 | 1 418 | C:/Dibujo_3D/Utah.teapot 419 | 0 420 | 0.1 0.1 0.1 421 | 1.0 0.85 0.6 422 | 0.5 0.5 0.4 423 | 10 424 | 40.0 40.0 40.0 425 | 240.0 0.0 0.0 426 | 0.0 0.0 0.0 427 | 428 | 1 0 0 500 500 429 | 200 40 430 | 100 30 431 | 432 | 1 433 | 434 | 1 435 | C:/Dibujo_3D/Utah.teapot 436 | 0 437 | 0.1 0.1 0.1 438 | 1.0 0.85 0.6 439 | 0.5 0.5 0.4 440 | 10 441 | 40.0 40.0 40.0 442 | 250.0 0.0 0.0 443 | 0.0 0.0 0.0 444 | 445 | 1 0 0 500 500 446 | 200 40 447 | 100 30 448 | 449 | 1 450 | 451 | 1 452 | C:/Dibujo_3D/Utah.teapot 453 | 0 454 | 0.1 0.1 0.1 455 | 1.0 0.85 0.6 456 | 0.5 0.5 0.4 457 | 10 458 | 40.0 40.0 40.0 459 | 260.0 0.0 0.0 460 | 0.0 0.0 0.0 461 | 462 | 1 0 0 500 500 463 | 200 40 464 | 100 30 465 | 466 | 1 467 | 468 | 1 469 | C:/Dibujo_3D/Utah.teapot 470 | 0 471 | 0.1 0.1 0.1 472 | 1.0 0.85 0.6 473 | 0.5 0.5 0.4 474 | 10 475 | 40.0 40.0 40.0 476 | 270.0 0.0 0.0 477 | 0.0 0.0 0.0 478 | 479 | 1 0 0 500 500 480 | 200 40 481 | 100 30 482 | 483 | 1 484 | 485 | 1 486 | C:/Dibujo_3D/Utah.teapot 487 | 0 488 | 0.1 0.1 0.1 489 | 1.0 0.85 0.6 490 | 0.5 0.5 0.4 491 | 10 492 | 40.0 40.0 40.0 493 | 280.0 0.0 0.0 494 | 0.0 0.0 0.0 495 | 496 | 1 0 0 500 500 497 | 200 40 498 | 100 30 499 | 500 | 1 501 | 502 | 1 503 | C:/Dibujo_3D/Utah.teapot 504 | 0 505 | 0.1 0.1 0.1 506 | 1.0 0.85 0.6 507 | 0.5 0.5 0.4 508 | 10 509 | 40.0 40.0 40.0 510 | 290.0 0.0 0.0 511 | 0.0 0.0 0.0 512 | 513 | 1 0 0 500 500 514 | 200 40 515 | 100 30 516 | 517 | 1 518 | 519 | 1 520 | C:/Dibujo_3D/Utah.teapot 521 | 0 522 | 0.1 0.1 0.1 523 | 1.0 0.85 0.6 524 | 0.5 0.5 0.4 525 | 10 526 | 40.0 40.0 40.0 527 | 300.0 0.0 0.0 528 | 0.0 0.0 0.0 529 | 530 | 1 0 0 500 500 531 | 200 40 532 | 100 30 533 | 534 | 1 535 | 536 | 1 537 | C:/Dibujo_3D/Utah.teapot 538 | 0 539 | 0.1 0.1 0.1 540 | 1.0 0.85 0.6 541 | 0.5 0.5 0.4 542 | 10 543 | 40.0 40.0 40.0 544 | 310.0 0.0 0.0 545 | 0.0 0.0 0.0 546 | 547 | 1 0 0 500 500 548 | 200 40 549 | 100 30 550 | 551 | 1 552 | 553 | 1 554 | C:/Dibujo_3D/Utah.teapot 555 | 0 556 | 0.1 0.1 0.1 557 | 1.0 0.85 0.6 558 | 0.5 0.5 0.4 559 | 10 560 | 40.0 40.0 40.0 561 | 320.0 0.0 0.0 562 | 0.0 0.0 0.0 563 | 564 | 1 0 0 500 500 565 | 200 40 566 | 100 30 567 | 568 | 1 569 | 570 | 1 571 | C:/Dibujo_3D/Utah.teapot 572 | 0 573 | 0.1 0.1 0.1 574 | 1.0 0.85 0.6 575 | 0.5 0.5 0.4 576 | 10 577 | 40.0 40.0 40.0 578 | 330.0 0.0 0.0 579 | 0.0 0.0 0.0 580 | 581 | 1 0 0 500 500 582 | 200 40 583 | 100 30 584 | 585 | 1 586 | 587 | 1 588 | C:/Dibujo_3D/Utah.teapot 589 | 0 590 | 0.1 0.1 0.1 591 | 1.0 0.85 0.6 592 | 0.5 0.5 0.4 593 | 10 594 | 40.0 40.0 40.0 595 | 340.0 0.0 0.0 596 | 0.0 0.0 0.0 597 | 598 | 1 0 0 500 500 599 | 200 40 600 | 100 30 601 | 602 | 1 603 | 604 | 1 605 | C:/Dibujo_3D/Utah.teapot 606 | 0 607 | 0.1 0.1 0.1 608 | 1.0 0.85 0.6 609 | 0.5 0.5 0.4 610 | 10 611 | 40.0 40.0 40.0 612 | 350.0 0.0 0.0 613 | 0.0 0.0 0.0 614 | 615 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Cara: -------------------------------------------------------------------------------- 1 | Cara 2 | 180 148 3 | 0.0000 -0.4755 0.9851 4 | 0.1909 -0.4202 1.0000 5 | 0.3628 -0.3316 0.9644 6 | 0.5346 -0.1593 0.9117 7 | 0.0000 -0.5097 0.7190 8 | 0.1909 -0.4650 0.7243 9 | 0.3628 -0.3617 0.7323 10 | 0.5473 -0.1915 0.7120 11 | 0.6874 0.0402 0.7081 12 | -0.0001 -0.4790 0.4570 13 | 0.1718 -0.4393 0.4808 14 | 0.3819 -0.3487 0.5117 15 | 0.5346 -0.2364 0.5352 16 | 0.6747 -0.0457 0.4875 17 | 0.7001 0.0280 0.4215 18 | 0.7638 0.1941 0.5517 19 | 0.0000 -0.4534 0.3123 20 | 0.1718 -0.2828 0.2658 21 | 0.2482 -0.3042 0.3457 22 | 0.3946 -0.3075 0.3580 23 | 0.4710 -0.2536 0.3659 24 | 0.5410 -0.1250 0.3410 25 | 0.5442 -0.0852 0.3154 26 | 0.6937 0.0357 0.3314 27 | 0.7829 0.1788 0.3631 28 | 0.7829 0.3694 0.4142 29 | 0.3819 -0.2285 0.1617 30 | 0.4773 -0.1609 0.1798 31 | 0.5410 -0.0835 0.2598 32 | -0.0001 -0.5618 0.0526 33 | 0.0763 -0.5384 0.0391 34 | 0.1336 -0.3309 0.0519 35 | 0.2736 -0.2587 0.0284 36 | 0.4455 -0.1632 0.0408 37 | 0.6810 0.0797 0.1916 38 | 0.7574 0.2253 0.1647 39 | 0.7638 0.4485 0.2047 40 | -0.0001 -0.6653 -0.1267 41 | 0.1082 -0.5620 -0.1188 42 | 0.3246 -0.3266 -0.1611 43 | 0.4964 -0.2376 -0.1735 44 | 0.6492 -0.1085 -0.1389 45 | 0.7320 0.0501 -0.0668 46 | 0.7829 0.2069 -0.0247 47 | 0.7829 0.4805 0.0485 48 | 0.7829 0.6311 0.0889 49 | -0.0001 -0.6250 -0.2279 50 | 0.1082 -0.5627 -0.1651 51 | 0.3246 -0.3167 -0.1980 52 | 0.5092 -0.2147 -0.2959 53 | 0.6492 -0.0726 -0.2973 54 | 0.7383 0.0965 -0.2520 55 | 0.7638 0.2533 -0.2100 56 | 0.7638 0.4807 -0.1491 57 | 0.7638 0.6652 -0.0997 58 | -0.0001 -0.4702 -0.4368 59 | 0.1909 -0.3631 -0.4674 60 | 0.2673 -0.2486 -0.5257 61 | 0.4964 -0.1589 -0.4918 62 | 0.6110 -0.0482 -0.4622 63 | 0.6683 0.0592 -0.4202 64 | 0.7065 0.2174 -0.3712 65 | 0.7065 0.4080 -0.3202 66 | 0.7065 0.5924 -0.2707 67 | -0.0001 -0.4527 -0.6496 68 | 0.1909 -0.3720 -0.5819 69 | -0.0001 -0.3812 -0.7688 70 | 0.1909 -0.3308 -0.7355 71 | 0.3246 -0.2419 -0.6985 72 | 0.4582 -0.1312 -0.6689 73 | 0.5346 -0.0267 -0.6409 74 | 0.5983 0.0778 -0.6129 75 | 0.6110 0.2377 -0.5701 76 | 0.6110 0.4222 -0.5206 77 | -0.0001 -0.3588 -1.0000 78 | 0.1718 -0.3157 -0.9885 79 | 0.2705 -0.2223 -0.9437 80 | 0.3309 -0.1168 -0.8825 81 | 0.3819 0.0088 -0.8225 82 | 0.5028 0.0936 -0.7701 83 | 0.5346 0.2553 -0.6971 84 | 0.0572 -0.4317 0.3049 85 | 0.1209 -0.4313 0.0085 86 | 0.1909 -0.4353 -0.1243 87 | 0.1909 -0.4274 -0.2277 88 | -0.0001 -0.5035 -0.2876 89 | 0.0000 -0.4135 -0.5007 90 | 0.1909 -0.3549 -0.4982 91 | 0.0000 -0.4135 -0.5007 92 | 0.1909 -0.3549 -0.4982 93 | 0.0000 -0.4755 0.9851 94 | -0.1910 -0.4202 1.0000 95 | -0.3629 -0.3316 0.9644 96 | -0.5347 -0.1593 0.9117 97 | 0.0000 -0.5097 0.7190 98 | -0.1910 -0.4650 0.7243 99 | -0.3629 -0.3617 0.7323 100 | -0.5475 -0.1915 0.7120 101 | -0.6875 0.0402 0.7081 102 | -0.0001 -0.4790 0.4570 103 | -0.1719 -0.4393 0.4808 104 | -0.3820 -0.3487 0.5117 105 | -0.5347 -0.2364 0.5352 106 | -0.6748 -0.0457 0.4875 107 | -0.7002 0.0280 0.4215 108 | -0.7639 0.1941 0.5517 109 | 0.0000 -0.4534 0.3123 110 | -0.1719 -0.2828 0.2658 111 | -0.2483 -0.3042 0.3457 112 | -0.3947 -0.3075 0.3580 113 | -0.4711 -0.2536 0.3659 114 | -0.5411 -0.1250 0.3410 115 | -0.5443 -0.0852 0.3154 116 | -0.6939 0.0357 0.3314 117 | -0.7830 0.1788 0.3631 118 | -0.7830 0.3694 0.4142 119 | -0.3820 -0.2285 0.1617 120 | -0.4774 -0.1609 0.1798 121 | -0.5411 -0.0835 0.2598 122 | -0.0001 -0.5618 0.0526 123 | -0.0764 -0.5384 0.0391 124 | -0.1337 -0.3309 0.0519 125 | -0.2738 -0.2587 0.0284 126 | -0.4456 -0.1632 0.0408 127 | -0.6811 0.0798 0.1916 128 | -0.7575 0.2253 0.1647 129 | -0.7639 0.4485 0.2047 130 | -0.0001 -0.6653 -0.1267 131 | -0.1083 -0.5620 -0.1188 132 | -0.3247 -0.3266 -0.1611 133 | -0.4965 -0.2376 -0.1735 134 | -0.6493 -0.1085 -0.1389 135 | -0.7321 0.0501 -0.0668 136 | -0.7830 0.2069 -0.0247 137 | -0.7830 0.4805 0.0485 138 | -0.7830 0.6311 0.0889 139 | -0.0001 -0.6250 -0.2279 140 | -0.1083 -0.5627 -0.1651 141 | -0.3247 -0.3167 -0.1980 142 | -0.5093 -0.2147 -0.2959 143 | -0.6493 -0.0726 -0.2973 144 | -0.7384 0.0965 -0.2520 145 | -0.7639 0.2533 -0.2100 146 | -0.7639 0.4807 -0.1491 147 | -0.7639 0.6652 -0.0997 148 | -0.0001 -0.4702 -0.4368 149 | -0.1910 -0.3631 -0.4674 150 | -0.2674 -0.2486 -0.5257 151 | -0.4965 -0.1589 -0.4918 152 | -0.6111 -0.0482 -0.4622 153 | -0.6684 0.0592 -0.4202 154 | -0.7066 0.2174 -0.3712 155 | -0.7066 0.4080 -0.3202 156 | -0.7066 0.5924 -0.2707 157 | -0.0001 -0.4527 -0.6496 158 | -0.1910 -0.3720 -0.5819 159 | -0.0001 -0.3812 -0.7688 160 | -0.1910 -0.3308 -0.7355 161 | -0.3247 -0.2419 -0.6985 162 | -0.4583 -0.1312 -0.6689 163 | -0.5347 -0.0267 -0.6409 164 | -0.5984 0.0779 -0.6129 165 | -0.6111 0.2377 -0.5701 166 | -0.6111 0.4221 -0.5206 167 | -0.0001 -0.3588 -1.0000 168 | -0.1719 -0.3157 -0.9885 169 | -0.2706 -0.2223 -0.9437 170 | -0.3310 -0.1168 -0.8825 171 | -0.3820 0.0088 -0.8225 172 | -0.5029 0.0936 -0.7701 173 | -0.5347 0.2553 -0.6971 174 | -0.0573 -0.4317 0.3049 175 | -0.1210 -0.4313 0.0085 176 | -0.1910 -0.4353 -0.1243 177 | -0.1910 -0.4273 -0.2277 178 | -0.0001 -0.5035 -0.2876 179 | 0.0000 -0.4135 -0.5007 180 | -0.1910 -0.3549 -0.4982 181 | 0.0000 -0.4135 -0.5007 182 | -0.1910 -0.3549 -0.4982 183 | 4 2 1 5 6 184 | 4 3 2 6 7 185 | 4 4 3 7 8 186 | 3 9 4 8 187 | 4 6 5 10 11 188 | 4 7 6 11 12 189 | 4 8 7 12 13 190 | 4 9 8 13 14 191 | 4 16 9 14 15 192 | 4 11 10 17 18 193 | 3 11 18 19 194 | 4 12 11 19 20 195 | 4 13 12 20 21 196 | 4 14 13 21 22 197 | 4 15 14 22 23 198 | 3 15 23 24 199 | 3 11 82 18 200 | 4 16 15 24 25 201 | 3 16 25 26 202 | 4 82 17 30 31 203 | 4 18 82 31 83 204 | 3 18 83 32 205 | 4 27 18 32 33 206 | 4 28 27 33 34 207 | 4 29 28 34 35 208 | 4 23 29 35 24 209 | 4 25 24 35 36 210 | 4 26 25 36 37 211 | 4 31 30 38 39 212 | 4 83 31 39 84 213 | 4 32 83 84 40 214 | 4 33 32 40 41 215 | 4 34 33 41 42 216 | 4 35 34 42 43 217 | 4 36 35 43 44 218 | 4 37 36 44 45 219 | 3 37 45 46 220 | 4 39 38 47 48 221 | 4 84 39 48 85 222 | 4 40 84 85 49 223 | 4 41 40 49 50 224 | 4 42 41 50 51 225 | 4 43 42 51 52 226 | 4 44 43 52 53 227 | 4 45 44 53 54 228 | 4 46 45 54 55 229 | 4 48 47 86 85 230 | 4 85 86 56 57 231 | 4 49 85 57 58 232 | 4 50 49 58 59 233 | 4 51 50 59 60 234 | 4 52 51 60 61 235 | 4 53 52 61 62 236 | 4 54 53 62 63 237 | 4 55 54 63 64 238 | 4 66 65 67 68 239 | 4 58 66 68 69 240 | 4 59 58 69 70 241 | 4 60 59 70 71 242 | 4 61 60 71 72 243 | 4 62 61 72 73 244 | 4 63 62 73 74 245 | 3 64 63 74 246 | 4 68 67 75 76 247 | 4 69 68 76 77 248 | 4 70 69 77 78 249 | 4 71 70 78 79 250 | 4 72 71 79 80 251 | 4 73 72 80 81 252 | 3 74 73 81 253 | 4 57 56 87 88 254 | 3 58 57 88 255 | 4 90 89 65 66 256 | 3 58 90 66 257 | 4 96 5 1 92 258 | 4 97 96 92 93 259 | 4 98 97 93 94 260 | 3 98 94 99 261 | 4 101 10 5 96 262 | 4 102 101 96 97 263 | 4 103 102 97 98 264 | 4 104 103 98 99 265 | 4 105 104 99 106 266 | 4 108 17 10 101 267 | 3 109 108 101 268 | 4 110 109 101 102 269 | 4 111 110 102 103 270 | 4 112 111 103 104 271 | 4 113 112 104 105 272 | 3 114 113 105 273 | 3 108 172 101 274 | 4 115 114 105 106 275 | 3 116 115 106 276 | 4 121 30 17 172 277 | 4 173 121 172 108 278 | 3 122 173 108 279 | 4 123 122 108 117 280 | 4 124 123 117 118 281 | 4 125 124 118 119 282 | 4 114 125 119 113 283 | 4 126 125 114 115 284 | 4 127 126 115 116 285 | 4 129 38 30 121 286 | 4 174 129 121 173 287 | 4 130 174 173 122 288 | 4 131 130 122 123 289 | 4 132 131 123 124 290 | 4 133 132 124 125 291 | 4 134 133 125 126 292 | 4 135 134 126 127 293 | 3 136 135 127 294 | 4 138 47 38 129 295 | 4 175 138 129 174 296 | 4 139 175 174 130 297 | 4 140 139 130 131 298 | 4 141 140 131 132 299 | 4 142 141 132 133 300 | 4 143 142 133 134 301 | 4 144 143 134 135 302 | 4 145 144 135 136 303 | 4 175 86 47 138 304 | 4 147 56 86 175 305 | 4 148 147 175 139 306 | 4 149 148 139 140 307 | 4 150 149 140 141 308 | 4 151 150 141 142 309 | 4 152 151 142 143 310 | 4 153 152 143 144 311 | 4 154 153 144 145 312 | 4 158 67 65 156 313 | 4 159 158 156 148 314 | 4 160 159 148 149 315 | 4 161 160 149 150 316 | 4 162 161 150 151 317 | 4 163 162 151 152 318 | 4 164 163 152 153 319 | 3 164 153 154 320 | 4 166 75 67 158 321 | 4 167 166 158 159 322 | 4 168 167 159 160 323 | 4 169 168 160 161 324 | 4 170 169 161 162 325 | 4 171 170 162 163 326 | 3 171 163 164 327 | 4 178 87 56 147 328 | 3 178 147 148 329 | 4 156 65 89 180 330 | 3 156 180 148 331 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Cara_feliz: -------------------------------------------------------------------------------- 1 | Cara feliz 2 | 180 148 3 | 0.0057 -0.4468 0.9868 4 | 0.1945 -0.3845 1.0000 5 | 0.3632 -0.2915 0.9614 6 | 0.5291 -0.1156 0.9027 7 | 0.0078 -0.4908 0.7223 8 | 0.1969 -0.4395 0.7264 9 | 0.3650 -0.3301 0.7308 10 | 0.5436 -0.1547 0.7045 11 | 0.6755 0.0812 0.6923 12 | 0.0076 -0.4700 0.4595 13 | 0.1778 -0.4235 0.4822 14 | 0.3844 -0.3247 0.5101 15 | 0.5330 -0.2065 0.5296 16 | 0.6665 -0.0131 0.4751 17 | 0.6896 0.0589 0.4066 18 | 0.7470 0.2317 0.5305 19 | 0.0072 -0.4499 0.3141 20 | 0.1731 -0.2754 0.2616 21 | 0.2499 -0.2911 0.3423 22 | 0.3961 -0.2889 0.3550 23 | 0.4706 -0.2322 0.3610 24 | 0.5361 -0.1024 0.3315 25 | 0.5381 -0.0635 0.3045 26 | 0.6832 0.0629 0.3162 27 | 0.7672 0.2100 0.3427 28 | 0.7605 0.4021 0.3866 29 | 0.3814 -0.2179 0.1560 30 | 0.4743 -0.1464 0.1718 31 | 0.5350 -0.0640 0.2490 32 | 0.0117 -0.5677 0.0588 33 | 0.0873 -0.5422 0.0446 34 | 0.1373 -0.3327 0.0497 35 | 0.2748 -0.2567 0.0238 36 | 0.4431 -0.1550 0.0330 37 | 0.6695 0.1012 0.1750 38 | 0.7409 0.2482 0.1428 39 | 0.7394 0.4727 0.1745 40 | 0.0159 -0.6777 -0.1164 41 | 0.1204 -0.5705 -0.1121 42 | 0.3286 -0.3297 -0.1628 43 | 0.4972 -0.2354 -0.1782 44 | 0.6452 -0.1000 -0.1481 45 | 0.7222 0.0638 -0.0818 46 | 0.7675 0.2236 -0.0456 47 | 0.7579 0.4994 0.0173 48 | 0.7526 0.6513 0.0520 49 | 0.0148 -0.6412 -0.2190 50 | 0.1206 -0.5730 -0.1584 51 | 0.3284 -0.3212 -0.2000 52 | 0.5096 -0.2167 -0.3012 53 | 0.6445 -0.0701 -0.3077 54 | 0.7276 0.1034 -0.2686 55 | 0.7475 0.2623 -0.2324 56 | 0.7395 0.4916 -0.1801 57 | 0.7330 0.6776 -0.1376 58 | 0.0102 -0.4945 -0.4334 59 | 0.1977 -0.3949 -0.4118 60 | 0.3550 -0.3478 -0.3367 61 | 0.4956 -0.1687 -0.4990 62 | 0.6061 -0.0532 -0.4732 63 | 0.6595 0.0574 -0.4353 64 | 0.6920 0.2185 -0.3922 65 | 0.6853 0.4106 -0.3483 66 | 0.6788 0.5966 -0.3058 67 | 0.0082 -0.4230 -0.6324 68 | 0.1982 -0.4024 -0.5505 69 | 0.0082 -0.4181 -0.7683 70 | 0.1971 -0.3599 -0.7366 71 | 0.3275 -0.2652 -0.7027 72 | 0.4571 -0.1490 -0.6769 73 | 0.5297 -0.0411 -0.6527 74 | 0.5896 0.0665 -0.6285 75 | 0.5966 0.2281 -0.5917 76 | 0.5901 0.4140 -0.5492 77 | 0.0082 -0.4043 -1.0001 78 | 0.1784 -0.3550 -0.9898 79 | 0.2735 -0.2567 -0.9484 80 | 0.3301 -0.1470 -0.8910 81 | 0.3765 -0.0177 -0.8357 82 | 0.4942 0.0731 -0.7863 83 | 0.5202 0.2383 -0.7194 84 | 0.0636 -0.4265 0.3061 85 | 0.1282 -0.4350 0.0101 86 | 0.1987 -0.4414 -0.1223 87 | 0.1988 -0.4374 -0.2258 88 | 0.0109 -0.5222 -0.2831 89 | 0.0085 -0.4403 -0.4993 90 | 0.1975 -0.3878 -0.4428 91 | 0.0083 -0.4318 -0.5366 92 | 0.1972 -0.3765 -0.4924 93 | 0.0057 -0.4468 0.9868 94 | -0.1870 -0.3977 0.9992 95 | -0.3615 -0.3165 0.9600 96 | -0.5389 -0.1524 0.9006 97 | 0.0078 -0.4908 0.7223 98 | -0.1845 -0.4526 0.7256 99 | -0.3597 -0.3551 0.7293 100 | -0.5499 -0.1924 0.7023 101 | -0.6977 0.0339 0.6896 102 | 0.0076 -0.4700 0.4595 103 | -0.1655 -0.4354 0.4815 104 | -0.3785 -0.3510 0.5085 105 | -0.5350 -0.2433 0.5275 106 | -0.6813 -0.0596 0.4724 107 | -0.7090 0.0106 0.4038 108 | -0.7787 0.1791 0.5275 109 | 0.0072 -0.4499 0.3141 110 | -0.1702 -0.2872 0.2609 111 | -0.2460 -0.3082 0.3414 112 | -0.3921 -0.3161 0.3535 113 | -0.4703 -0.2646 0.3591 114 | -0.5446 -0.1397 0.3294 115 | -0.5490 -0.1010 0.3023 116 | -0.7027 0.0151 0.3134 117 | -0.7967 0.1560 0.3396 118 | -0.8034 0.3482 0.3835 119 | -0.3815 -0.2442 0.1545 120 | -0.4792 -0.1793 0.1699 121 | -0.5457 -0.1013 0.2468 122 | 0.0117 -0.5677 0.0588 123 | -0.0653 -0.5475 0.0443 124 | -0.1297 -0.3419 0.0492 125 | -0.2719 -0.2756 0.0227 126 | -0.4469 -0.1857 0.0312 127 | -0.6910 0.0543 0.1722 128 | -0.7722 0.1960 0.1398 129 | -0.7863 0.4201 0.1714 130 | 0.0159 -0.6777 -0.1164 131 | -0.0958 -0.5780 -0.1126 132 | -0.3199 -0.3521 -0.1641 133 | -0.4945 -0.2697 -0.1801 134 | -0.6516 -0.1448 -0.1507 135 | -0.7400 0.0134 -0.0848 136 | -0.7964 0.1697 -0.0488 137 | -0.8060 0.4455 0.0142 138 | -0.8113 0.5973 0.0489 139 | 0.0148 -0.6412 -0.2190 140 | -0.0956 -0.5805 -0.1588 141 | -0.3201 -0.3436 -0.2013 142 | -0.5076 -0.2518 -0.3032 143 | -0.6524 -0.1149 -0.3103 144 | -0.7473 0.0525 -0.2715 145 | -0.7783 0.2097 -0.2355 146 | -0.7863 0.4390 -0.1831 147 | -0.7928 0.6249 -0.1407 148 | 0.0102 -0.4945 -0.4334 149 | -0.1838 -0.4081 -0.4126 150 | -0.3443 -0.3719 -0.3381 151 | -0.4962 -0.2030 -0.5009 152 | -0.6145 -0.0953 -0.4757 153 | -0.6755 0.0114 -0.4379 154 | -0.7193 0.1698 -0.3950 155 | -0.7260 0.3620 -0.3511 156 | -0.7325 0.5479 -0.3087 157 | 0.0082 -0.4230 -0.6324 158 | -0.1832 -0.4156 -0.5513 159 | 0.0082 -0.4181 -0.7683 160 | -0.1843 -0.3731 -0.7373 161 | -0.3210 -0.2876 -0.7040 162 | -0.4584 -0.1806 -0.6788 163 | -0.5384 -0.0779 -0.6549 164 | -0.6056 0.0253 -0.6309 165 | -0.6240 0.1860 -0.5941 166 | -0.6305 0.3719 -0.5517 167 | 0.0082 -0.4043 -1.0001 168 | -0.1649 -0.3669 -0.9905 169 | -0.2668 -0.2753 -0.9494 170 | -0.3310 -0.1698 -0.8924 171 | -0.3864 -0.0440 -0.8372 172 | -0.5103 0.0384 -0.7883 173 | -0.5479 0.2014 -0.7216 174 | -0.0508 -0.4304 0.3058 175 | -0.1134 -0.4433 0.0096 176 | -0.1827 -0.4546 -0.1230 177 | -0.1827 -0.4505 -0.2265 178 | 0.0109 -0.5222 -0.2831 179 | 0.0085 -0.4403 -0.4993 180 | -0.1840 -0.4010 -0.4436 181 | 0.0083 -0.4318 -0.5366 182 | -0.1842 -0.3897 -0.4932 183 | 4 2 1 5 6 184 | 4 3 2 6 7 185 | 4 4 3 7 8 186 | 3 9 4 8 187 | 4 6 5 10 11 188 | 4 7 6 11 12 189 | 4 8 7 12 13 190 | 4 9 8 13 14 191 | 4 16 9 14 15 192 | 4 11 10 17 18 193 | 3 11 18 19 194 | 4 12 11 19 20 195 | 4 13 12 20 21 196 | 4 14 13 21 22 197 | 4 15 14 22 23 198 | 3 15 23 24 199 | 3 11 82 18 200 | 4 16 15 24 25 201 | 3 16 25 26 202 | 4 82 17 30 31 203 | 4 18 82 31 83 204 | 3 18 83 32 205 | 4 27 18 32 33 206 | 4 28 27 33 34 207 | 4 29 28 34 35 208 | 4 23 29 35 24 209 | 4 25 24 35 36 210 | 4 26 25 36 37 211 | 4 31 30 38 39 212 | 4 83 31 39 84 213 | 4 32 83 84 40 214 | 4 33 32 40 41 215 | 4 34 33 41 42 216 | 4 35 34 42 43 217 | 4 36 35 43 44 218 | 4 37 36 44 45 219 | 3 37 45 46 220 | 4 39 38 47 48 221 | 4 84 39 48 85 222 | 4 40 84 85 49 223 | 4 41 40 49 50 224 | 4 42 41 50 51 225 | 4 43 42 51 52 226 | 4 44 43 52 53 227 | 4 45 44 53 54 228 | 4 46 45 54 55 229 | 4 48 47 86 85 230 | 4 85 86 56 57 231 | 4 49 85 57 58 232 | 4 50 49 58 59 233 | 4 51 50 59 60 234 | 4 52 51 60 61 235 | 4 53 52 61 62 236 | 4 54 53 62 63 237 | 4 55 54 63 64 238 | 4 66 65 67 68 239 | 4 58 66 68 69 240 | 4 59 58 69 70 241 | 4 60 59 70 71 242 | 4 61 60 71 72 243 | 4 62 61 72 73 244 | 4 63 62 73 74 245 | 3 64 63 74 246 | 4 68 67 75 76 247 | 4 69 68 76 77 248 | 4 70 69 77 78 249 | 4 71 70 78 79 250 | 4 72 71 79 80 251 | 4 73 72 80 81 252 | 3 74 73 81 253 | 4 57 56 87 88 254 | 3 58 57 88 255 | 4 90 89 65 66 256 | 3 58 90 66 257 | 4 96 5 1 92 258 | 4 97 96 92 93 259 | 4 98 97 93 94 260 | 3 98 94 99 261 | 4 101 10 5 96 262 | 4 102 101 96 97 263 | 4 103 102 97 98 264 | 4 104 103 98 99 265 | 4 105 104 99 106 266 | 4 108 17 10 101 267 | 3 109 108 101 268 | 4 110 109 101 102 269 | 4 111 110 102 103 270 | 4 112 111 103 104 271 | 4 113 112 104 105 272 | 3 114 113 105 273 | 3 108 172 101 274 | 4 115 114 105 106 275 | 3 116 115 106 276 | 4 121 30 17 172 277 | 4 173 121 172 108 278 | 3 122 173 108 279 | 4 123 122 108 117 280 | 4 124 123 117 118 281 | 4 125 124 118 119 282 | 4 114 125 119 113 283 | 4 126 125 114 115 284 | 4 127 126 115 116 285 | 4 129 38 30 121 286 | 4 174 129 121 173 287 | 4 130 174 173 122 288 | 4 131 130 122 123 289 | 4 132 131 123 124 290 | 4 133 132 124 125 291 | 4 134 133 125 126 292 | 4 135 134 126 127 293 | 3 136 135 127 294 | 4 138 47 38 129 295 | 4 175 138 129 174 296 | 4 139 175 174 130 297 | 4 140 139 130 131 298 | 4 141 140 131 132 299 | 4 142 141 132 133 300 | 4 143 142 133 134 301 | 4 144 143 134 135 302 | 4 145 144 135 136 303 | 4 175 86 47 138 304 | 4 147 56 86 175 305 | 4 148 147 175 139 306 | 4 149 148 139 140 307 | 4 150 149 140 141 308 | 4 151 150 141 142 309 | 4 152 151 142 143 310 | 4 153 152 143 144 311 | 4 154 153 144 145 312 | 4 158 67 65 156 313 | 4 159 158 156 148 314 | 4 160 159 148 149 315 | 4 161 160 149 150 316 | 4 162 161 150 151 317 | 4 163 162 151 152 318 | 4 164 163 152 153 319 | 3 164 153 154 320 | 4 166 75 67 158 321 | 4 167 166 158 159 322 | 4 168 167 159 160 323 | 4 169 168 160 161 324 | 4 170 169 161 162 325 | 4 171 170 162 163 326 | 3 171 163 164 327 | 4 178 87 56 147 328 | 3 178 147 148 329 | 4 156 65 89 180 330 | 3 156 180 148 331 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Cubo: -------------------------------------------------------------------------------- 1 | Cubo 2 | 6 3 | 1 1 1 1 -1 1 1 -1 -1 1 1 -1 4 | 1 1 1 1 1 -1 -1 1 -1 -1 1 1 5 | 1 1 1 -1 1 1 -1 -1 1 1 -1 1 6 | 1 -1 -1 -1 -1 -1 -1 1 -1 1 1 -1 7 | 1 -1 1 -1 -1 1 -1 -1 -1 1 -1 -1 8 | -1 1 1 -1 1 -1 -1 -1 -1 -1 -1 1 9 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 200 40 5 | 100 30 6 | 7 | 8 8 | 9 | 1 10 | C:/Dibujo_3D/Utah.teapot 11 | 0 12 | 0.1 0.1 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 25.0 25.0 25.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | 20 | 0 21 | C:/Dibujo_3D/Cubo 22 | 0 23 | 0.1 0.1 0.1 24 | 1.0 1.0 1.0 25 | 0.5 0.5 0.5 26 | 10 27 | 100.0 100.0 10.0 28 | 0.0 0.0 0.0 29 | 0.0 0.0 10.0 30 | 31 | 0 32 | C:/Dibujo_3D/Cubo 33 | 0 34 | 0.1 0.1 0.1 35 | 1.0 1.0 1.0 36 | 0.5 0.5 0.5 37 | 10 38 | 10.0 10.0 50.0 39 | 0.0 0.0 0.0 40 | -90.0 -90.0 70.0 41 | 42 | 0 43 | C:/Dibujo_3D/Cubo 44 | 0 45 | 0.1 0.1 0.1 46 | 1.0 1.0 1.0 47 | 0.5 0.5 0.5 48 | 10 49 | 10.0 10.0 50.0 50 | 0.0 0.0 0.0 51 | 90.0 90.0 70.0 52 | 53 | 0 54 | C:/Dibujo_3D/Cubo 55 | 0 56 | 0.1 0.1 0.1 57 | 1.0 1.0 1.0 58 | 0.5 0.5 0.5 59 | 10 60 | 10.0 10.0 50.0 61 | 0.0 0.0 0.0 62 | -90.0 90.0 70.0 63 | 64 | 0 65 | C:/Dibujo_3D/Cubo 66 | 0 67 | 0.1 0.1 0.1 68 | 1.0 1.0 1.0 69 | 0.5 0.5 0.5 70 | 10 71 | 10.0 10.0 50.0 72 | 0.0 0.0 0.0 73 | 90.0 -90.0 70.0 74 | 75 | 0 76 | C:/Dibujo_3D/Plano 77 | 0 78 | 0.1 0.1 0.1 79 | 0.0 0.0 1.0 80 | 0.0 0.0 0.5 81 | 10 82 | 150.0 150.0 150.0 83 | 0.0 0.0 0.0 84 | 0.0 0.0 120.0 85 | 86 | 0 87 | C:/Dibujo_3D/Plano 88 | 0 89 | 0.1 0.1 0.1 90 | 0.0 0.0 1.0 91 | 0.0 0.5 0.5 92 | 10 93 | 150.0 150.0 150.0 94 | 90.0 0.0 0.0 95 | 0.0 150.0 -30.0 96 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_ajedrez: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 245 40 5 | 100 30 6 | 7 | 3 8 | 9 | 0 10 | C:/Dibujo_3D/Peon 11 | 0 12 | 0.2 0.15 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 9.0 9.0 9.0 17 | 0.0 20.0 20.0 18 | 0.0 0.0 -40.0 19 | 20 | 0 21 | C:/Dibujo_3D/Tablero 22 | 0 23 | 0.2 0.2 0.2 24 | 1.0 1.0 1.0 25 | 0.5 0.5 0.5 26 | 10 27 | 50.0 50.0 50.0 28 | 0.0 0.0 0.0 29 | 0.0 0.0 0.0 30 | 31 | 0 32 | C:/Dibujo_3D/Tablero 33 | 0 34 | 0.2 0.0 0.0 35 | 1.0 0.0 0.0 36 | 0.5 0.0 0.0 37 | 10 38 | 50.0 50.0 50.0 39 | 0.0 0.0 90.0 40 | 0.0 0.0 0.0 41 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_ajedrez.2: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 245 40 5 | 100 30 6 | 7 | 3 8 | 9 | 0 10 | C:/Dibujo_3D/Peon 11 | 0 12 | 0.2 0.15 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 6.0 6.0 6.0 17 | 0.0 0.0 0.0 18 | -125.0 125.0 0.0 19 | 20 | 0 21 | C:/Dibujo_3D/Tablero 22 | 0 23 | 0.2 0.2 0.2 24 | 1.0 1.0 1.0 25 | 0.5 0.5 0.5 26 | 10 27 | 50.0 50.0 50.0 28 | 0.0 0.0 0.0 29 | 0.0 0.0 0.0 30 | 31 | 0 32 | C:/Dibujo_3D/Tablero 33 | 0 34 | 0.2 0.0 0.0 35 | 1.0 0.0 0.0 36 | 0.5 0.0 0.0 37 | 10 38 | 50.0 50.0 50.0 39 | 0.0 0.0 90.0 40 | 0.0 0.0 0.0 41 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_cara: -------------------------------------------------------------------------------- 1 | 1 320 200 1 2 | 3 | 0 0 0 500 500 4 | 0 0 5 | 120 60 6 | 7 | 1 8 | 9 | 2 10 | C:/Dibujo_3D/Cara 11 | 0 12 | 0.2 0.14 0.16 13 | 1.0 0.75 0.8 14 | 0.0 0.0 0.0 15 | 20 16 | 100.0 100.0 100.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_cara_feliz: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 0 0 0 500 500 4 | 0 0 5 | 120 60 6 | 7 | 1 8 | 9 | 2 10 | C:/Dibujo_3D/Cara_feliz 11 | 0 12 | 0.2 0.15 0.1 13 | 1.0 0.75 0.8 14 | 0.0 0.0 0.0 15 | 20 16 | 100.0 100.0 100.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_caras: -------------------------------------------------------------------------------- 1 | 1 640 480 1 2 | 3 | 0 0 0 500 500 4 | 0 0 5 | 120 60 6 | 7 | 2 8 | 9 | 2 10 | C:/Dibujo_3D/Cara 11 | 0 12 | 0.2 0.14 0.16 13 | 1.0 0.75 0.8 14 | 0.0 0.0 0.0 15 | 20 16 | 100.0 100.0 100.0 17 | 0.0 0.0 0.0 18 | -100.0 0.0 0.0 19 | 20 | 2 21 | C:/Dibujo_3D/Cara_feliz 22 | 0 23 | 0.2 0.14 0.16 24 | 1.0 0.75 0.8 25 | 0.0 0.0 0.0 26 | 20 27 | 100.0 100.0 100.0 28 | 0.0 0.0 0.0 29 | 100.0 0.0 0.0 30 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_copa: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 30 20 5 | 0 0 6 | 7 | 1 8 | 9 | 0 10 | C:/Dibujo_3D/Copa 11 | 0 12 | 0.0 0.0 0.1 13 | 0.1 0.3 1.0 14 | 0.05 0.1 0.3 15 | 10 16 | 6.0 6.0 6.0 17 | -30.0 -20.0 -10.0 18 | 0.0 0.0 0.0 19 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_cubo: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 210 25 5 | 45 45 6 | 7 | 1 8 | 9 | 0 10 | C:/Dibujo_3d/Cubo 11 | 0 12 | 0.1 0.1 0.1 13 | 1.0 0.0 0.0 14 | 0.4 0.4 0.4 15 | 10 16 | 30.0 30.0 30.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_esfera: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 210 25 5 | 45 45 6 | 7 | 2 8 | 9 | 0 10 | C:/Dibujo_3D/esfera 11 | 0 12 | 0.1 0.1 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 60.0 60.0 60.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | 20 | 0 21 | C:/Dibujo_3D/Plano 22 | 0 23 | 0.1 0.1 0.1 24 | 1.0 1.0 1.0 25 | 0.5 0.5 0.5 26 | 10 27 | 100.0 100.0 100.0 28 | 0.0 0.0 0.0 29 | 0.0 0.0 0.0 30 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_objetos: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 245 40 5 | 100 30 6 | 7 | 3 8 | 9 | 1 10 | C:/Dibujo_3D/Utah.teapot 11 | 0 12 | 0.1 0.1 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 30.0 30.0 30.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | 20 | 0 21 | C:/Dibujo_3D/Cubo 22 | 0 23 | 0.1 0.1 0.1 24 | 1.0 0.0 0.0 25 | 0.5 0.0 0.0 26 | 10 27 | 20.0 20.0 20.0 28 | 30.0 20.0 10.0 29 | -20.0 -120.0 -120.0 30 | 31 | 0 32 | C:/Dibujo_3D/Plano 33 | 0 34 | 0.1 0.1 0.1 35 | 1.0 1.0 1.0 36 | 0.5 0.5 0.5 37 | 10 38 | 100.0 100.0 100.0 39 | 0.0 0.0 0.0 40 | 0.0 0.0 0.0 41 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_peon: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 30 20 5 | 0 0 6 | 7 | 1 8 | 9 | 0 10 | C:/Dibujo_3D/Peon 11 | 0 12 | 0.2 0.15 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 15.0 15.0 15.0 17 | 0.0 20.0 20.0 18 | 0.0 0.0 0.0 19 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_tetera: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 200 40 5 | 100 30 6 | 7 | 1 8 | 9 | 1 10 | C:/Dibujo_3D/Utah.teapot 11 | 0 12 | 0.1 0.1 0.1 13 | 1.0 0.85 0.6 14 | 0.5 0.5 0.4 15 | 10 16 | 60.0 60.0 60.0 17 | 0.0 0.0 0.0 18 | 0.0 0.0 0.0 19 | 20 | 0 21 | C:/Dibujo_3D/Plano 22 | 0 23 | 0.1 0.1 0.1 24 | 1.0 1.0 1.0 25 | 0.5 0.5 0.5 26 | 10 27 | 100.0 100.0 100.0 28 | 0.0 0.0 0.0 29 | 0.0 0.0 0.0 30 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_tetera.2: -------------------------------------------------------------------------------- 1 | 1 640 480 2 2 | 3 | 1 0 0 500 500 4 | 0 0 5 | 0 0 6 | 7 | 1 8 | 9 | 1 10 | C:/Dibujo_3D/Utah.teapot 11 | 0 12 | 0.2 0.1 0.0 13 | 1.0 0.7 0.0 14 | 0.5 0.25 0.0 15 | 100 16 | 60.0 60.0 60.0 17 | -40.0 30.0 10.0 18 | 0.0 0.0 0.0 19 | 20 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Escena_tetera.3: -------------------------------------------------------------------------------- 1 | 1 640 480 1 2 | 3 | 1 0 0 500 500 4 | 0 0 5 | 0 0 6 | 7 | 4 8 | 9 | 1 10 | C:/Dibujo_3D/Utah.teapot 11 | 0 12 | 0.2 0.1 0.0 13 | 1.0 0.7 0.0 14 | 0.5 0.25 0.0 15 | 100 16 | 30.0 30.0 30.0 17 | -40.0 30.0 10.0 18 | 0.0 0.0 0.0 19 | 20 | 1 21 | C:/Dibujo_3D/Utah.teapot 22 | 0 23 | 0.2 0.1 0.0 24 | 0.0 0.7 1.0 25 | 0.0 0.5 0.25 26 | 100 27 | 30.0 30.0 30.0 28 | 0.0 -30.0 0.0 29 | 200.0 200.0 0.0 30 | 31 | 1 32 | C:/Dibujo_3D/Utah.teapot 33 | 0 34 | 0.2 0.1 0.0 35 | 0.0 1.0 0.7 36 | 0.5 0.25 0.0 37 | 100 38 | 30.0 30.0 30.0 39 | 30.0 0.0 0.0 40 | -150.0 0.0 200.0 41 | 42 | 1 43 | C:/Dibujo_3D/Utah.teapot 44 | 0 45 | 0.2 0.1 0.0 46 | 0.7 0.0 0.7 47 | 0.0 0.25 0.5 48 | 100 49 | 30.0 30.0 30.0 50 | 50.0 20.0 -10.0 51 | 80.0 -150.0 100.0 52 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/P.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=320 3 | Y=240 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.25 0.25 0.25 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=4 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.5 20 | 21 | MATERIAL 22 | TIPO=AJEDREZADO 23 | TEXTURA=ALTERNADO 24 | RFLAMB=0.2 0.2 0.2 25 | RFLDIF=0.7 0.7 0.7 26 | RFLESP=0.3 0.3 0.3 27 | BRILLO=2 28 | TRANS=0.0 0.0 0.0 29 | INDICE=1.0 30 | CUADRO1=1.0 0.0 0.0 31 | CUADRO2=0.0 1.0 1.0 32 | CUADRO=0.0714 33 | 34 | MATERIAL 35 | TIPO=BLANCO 36 | TEXTURA=SUAVE 37 | RFLAMB=0.2 0.2 0.2 38 | RFLDIF=0.8 0.8 0.8 39 | RFLESP=0.0 0.0 0.0 40 | BRILLO=25 41 | TRANS=0.0 0.0 0.0 42 | INDICE=1.0 43 | 44 | {piso} 45 | PISO 46 | MAT=AJEDREZADO 47 | 48 | PRUEBAESFERA 49 | 50 | OBSERVADOR 51 | LENTE=3.2 52 | LOC=-250 200 150 53 | ROTADO=120 54 | GIRO=16 55 | 56 | LAMPARA 57 | LOC=-350 300 350 58 | RADIO=100 59 | INTENS=0.95 0.95 0.91 60 | 61 | LAMPARA 62 | LOC=350 300 350 63 | RADIO=100 64 | INTENS=0.95 0.95 0.91 65 | 66 | ESFERA 67 | LOC=0.0 4.8 93.3 68 | RADIO=10.0 69 | MAT=BLANCO 70 | 71 | CILINDRO 72 | LOCBASE=0.0 1.8 77.3 73 | RADIO=5.0 74 | LOCFIN=0.0 4.8 93.3 75 | MAT=BLANCO 76 | 77 | CILINDRO 78 | LOCBASE=-17.3 1.8 77.3 79 | RADIO=5.0 80 | LOCFIN=17.3 1.8 77.3 81 | MAT=BLANCO 82 | 83 | ESFERA 84 | LOC=-17.3 1.8 77.3 85 | RADIO=5.0 86 | MAT=BLANCO 87 | 88 | ESFERA 89 | LOC=17.3 1.8 77.3 90 | RADIO=5.0 91 | MAT=BLANCO 92 | 93 | CILINDRO 94 | LOCBASE=0.0 0.0 48.3 95 | RADIO=5.0 96 | LOCFIN=0.0 1.8 77.3 97 | MAT=BLANCO 98 | 99 | CILINDRO 100 | LOCBASE=-6.8 0.0 48.3 101 | RADIO=5.0 102 | LOCFIN=6.8 0.0 48.3 103 | MAT=BLANCO 104 | 105 | ESFERA 106 | LOC=-6.8 0.0 48.3 107 | RADIO=5.0 108 | MAT=BLANCO 109 | 110 | ESFERA 111 | LOC=6.8 0.0 48.3 112 | RADIO=5.0 113 | MAT=BLANCO 114 | 115 | CILINDRO 116 | LOCBASE=-17.3 1.8 77.3 117 | RADIO=5.0 118 | LOCFIN=-17.3 2.8 57.3 119 | MAT=BLANCO 120 | 121 | ESFERA 122 | LOC=-17.3 2.8 57.3 123 | RADIO=5.0 124 | MAT=BLANCO 125 | 126 | CILINDRO 127 | LOCBASE=-17.3 2.8 57.3 128 | RADIO=5.0 129 | LOCFIN=-17.3 8.8 41.3 130 | MAT=BLANCO 131 | 132 | CILINDRO 133 | LOCBASE=17.3 1.8 77.3 134 | RADIO=5.0 135 | LOCFIN=17.3 -2.8 58.3 136 | MAT=BLANCO 137 | 138 | ESFERA 139 | LOC=17.3 -2.8 58.3 140 | RADIO=5.0 141 | MAT=BLANCO 142 | 143 | CILINDRO 144 | LOCBASE=17.3 -2.8 58.3 145 | RADIO=5.0 146 | LOCFIN=17.3 -4.8 42.3 147 | MAT=BLANCO 148 | 149 | CILINDRO 150 | LOCBASE=6.8 0.0 48.3 151 | RADIO=5.0 152 | LOCFIN=6.8 7.8 26.3 153 | MAT=BLANCO 154 | 155 | ESFERA 156 | LOC=6.8 7.8 26.3 157 | RADIO=5.0 158 | MAT=BLANCO 159 | 160 | CILINDRO 161 | LOCBASE=6.8 7.8 26.3 162 | RADIO=5.0 163 | LOCFIN=6.8 10.8 2.3 164 | MAT=BLANCO 165 | 166 | CILINDRO 167 | LOCBASE=-6.8 0.0 48.3 168 | RADIO=5.0 169 | LOCFIN=-6.8 -2.8 23.3 170 | MAT=BLANCO 171 | 172 | ESFERA 173 | LOC=-6.8 -2.8 23.3 174 | RADIO=5.0 175 | MAT=BLANCO 176 | 177 | CILINDRO 178 | LOCBASE=-6.8 -2.8 23.3 179 | RADIO=5.0 180 | LOCFIN=-6.8 -12.8 1.3 181 | MAT=BLANCO 182 | 183 | FINCUADRO 184 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Plano: -------------------------------------------------------------------------------- 1 | Plano 2 | 1 3 | -1 -1 0 1 -1 0 1 1 0 -1 1 0 4 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Prueba.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=320 3 | Y=240 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.25 0.25 0.25 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=2 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.5 20 | 21 | MATERIAL 22 | TIPO=AJEDREZADO 23 | TEXTURA=IMAGEN 24 | RFLAMB=0.2 0.2 0.2 25 | RFLDIF=0.7 0.7 0.7 26 | RFLESP=0.3 0.3 0.3 27 | BRILLO=2 28 | TRANS=0.0 0.0 0.0 29 | INDICE=1.0 30 | 31 | MATERIAL 32 | TIPO=BLANCO 33 | TEXTURA=SUAVE 34 | RFLAMB=0.2 0.2 0.2 35 | RFLDIF=0.8 0.8 0.8 36 | RFLESP=0.0 0.0 0.0 37 | BRILLO=25 38 | TRANS=0.0 0.0 0.0 39 | INDICE=1.0 40 | 41 | {piso} 42 | PISO 43 | MAT=AJEDREZADO 44 | 45 | PRUEBAESFERA 46 | 47 | OBSERVADOR 48 | LENTE=3.2 49 | LOC=-250 200 150 50 | ROTADO=120 51 | GIRO=16 52 | 53 | LAMPARA 54 | LOC=-350 300 350 55 | RADIO=100 56 | INTENS=0.95 0.95 0.91 57 | 58 | LAMPARA 59 | LOC=350 300 350 60 | RADIO=100 61 | INTENS=0.95 0.95 0.91 62 | 63 | ESFERA 64 | LOC=0.0 4.8 93.3 65 | RADIO=10.0 66 | MAT=BLANCO 67 | 68 | CILINDRO 69 | LOCBASE=0.0 1.8 77.3 70 | RADIO=5.0 71 | LOCFIN=0.0 4.8 93.3 72 | MAT=BLANCO 73 | 74 | CILINDRO 75 | LOCBASE=-17.3 1.8 77.3 76 | RADIO=5.0 77 | LOCFIN=17.3 1.8 77.3 78 | MAT=BLANCO 79 | 80 | ESFERA 81 | LOC=-17.3 1.8 77.3 82 | RADIO=5.0 83 | MAT=BLANCO 84 | 85 | ESFERA 86 | LOC=17.3 1.8 77.3 87 | RADIO=5.0 88 | MAT=BLANCO 89 | 90 | CILINDRO 91 | LOCBASE=0.0 0.0 48.3 92 | RADIO=5.0 93 | LOCFIN=0.0 1.8 77.3 94 | MAT=BLANCO 95 | 96 | CILINDRO 97 | LOCBASE=-6.8 0.0 48.3 98 | RADIO=5.0 99 | LOCFIN=6.8 0.0 48.3 100 | MAT=BLANCO 101 | 102 | ESFERA 103 | LOC=-6.8 0.0 48.3 104 | RADIO=5.0 105 | MAT=BLANCO 106 | 107 | ESFERA 108 | LOC=6.8 0.0 48.3 109 | RADIO=5.0 110 | MAT=BLANCO 111 | 112 | CILINDRO 113 | LOCBASE=-17.3 1.8 77.3 114 | RADIO=5.0 115 | LOCFIN=-17.3 2.8 57.3 116 | MAT=BLANCO 117 | 118 | ESFERA 119 | LOC=-17.3 2.8 57.3 120 | RADIO=5.0 121 | MAT=BLANCO 122 | 123 | CILINDRO 124 | LOCBASE=-17.3 2.8 57.3 125 | RADIO=5.0 126 | LOCFIN=-17.3 8.8 41.3 127 | MAT=BLANCO 128 | 129 | CILINDRO 130 | LOCBASE=17.3 1.8 77.3 131 | RADIO=5.0 132 | LOCFIN=17.3 -2.8 58.3 133 | MAT=BLANCO 134 | 135 | ESFERA 136 | LOC=17.3 -2.8 58.3 137 | RADIO=5.0 138 | MAT=BLANCO 139 | 140 | CILINDRO 141 | LOCBASE=17.3 -2.8 58.3 142 | RADIO=5.0 143 | LOCFIN=17.3 -4.8 42.3 144 | MAT=BLANCO 145 | 146 | CILINDRO 147 | LOCBASE=6.8 0.0 48.3 148 | RADIO=5.0 149 | LOCFIN=6.8 7.8 26.3 150 | MAT=BLANCO 151 | 152 | ESFERA 153 | LOC=6.8 7.8 26.3 154 | RADIO=5.0 155 | MAT=BLANCO 156 | 157 | CILINDRO 158 | LOCBASE=6.8 7.8 26.3 159 | RADIO=5.0 160 | LOCFIN=6.8 10.8 2.3 161 | MAT=BLANCO 162 | 163 | CILINDRO 164 | LOCBASE=-6.8 0.0 48.3 165 | RADIO=5.0 166 | LOCFIN=-6.8 -2.8 23.3 167 | MAT=BLANCO 168 | 169 | ESFERA 170 | LOC=-6.8 -2.8 23.3 171 | RADIO=5.0 172 | MAT=BLANCO 173 | 174 | CILINDRO 175 | LOCBASE=-6.8 -2.8 23.3 176 | RADIO=5.0 177 | LOCFIN=-6.8 -12.8 1.3 178 | MAT=BLANCO 179 | 180 | FINCUADRO 181 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/Tablero: -------------------------------------------------------------------------------- 1 | Tablero 2 | 32 3 | -4 -4 0 -3 -4 0 -3 -3 0 -4 -3 0 4 | -2 -4 0 -1 -4 0 -1 -3 0 -2 -3 0 5 | 0 -4 0 1 -4 0 1 -3 0 0 -3 0 6 | 2 -4 0 3 -4 0 3 -3 0 2 -3 0 7 | -3 -3 0 -2 -3 0 -2 -2 0 -3 -2 0 8 | -1 -3 0 0 -3 0 0 -2 0 -1 -2 0 9 | 1 -3 0 2 -3 0 2 -2 0 1 -2 0 10 | 3 -3 0 4 -3 0 4 -2 0 3 -2 0 11 | -4 -2 0 -3 -2 0 -3 -1 0 -4 -1 0 12 | -2 -2 0 -1 -2 0 -1 -1 0 -2 -1 0 13 | 0 -2 0 1 -2 0 1 -1 0 0 -1 0 14 | 2 -2 0 3 -2 0 3 -1 0 2 -1 0 15 | -3 -1 0 -2 -1 0 -2 0 0 -3 0 0 16 | -1 -1 0 0 -1 0 0 0 0 -1 0 0 17 | 1 -1 0 2 -1 0 2 0 0 1 0 0 18 | 3 -1 0 4 -1 0 4 0 0 3 0 0 19 | -4 0 0 -3 0 0 -3 1 0 -4 1 0 20 | -2 0 0 -1 0 0 -1 1 0 -2 1 0 21 | 0 0 0 1 0 0 1 1 0 0 1 0 22 | 2 0 0 3 0 0 3 1 0 2 1 0 23 | -3 1 0 -2 1 0 -2 2 0 -3 2 0 24 | -1 1 0 0 1 0 0 2 0 -1 2 0 25 | 1 1 0 2 1 0 2 2 0 1 2 0 26 | 3 1 0 4 1 0 4 2 0 3 2 0 27 | -4 2 0 -3 2 0 -3 3 0 -4 3 0 28 | -2 2 0 -1 2 0 -1 3 0 -2 3 0 29 | 0 2 0 1 2 0 1 3 0 0 3 0 30 | 2 2 0 3 2 0 3 3 0 2 3 0 31 | -3 3 0 -2 3 0 -2 4 0 -3 4 0 32 | -1 3 0 0 3 0 0 4 0 -1 4 0 33 | 1 3 0 2 3 0 2 4 0 1 4 0 34 | 3 3 0 4 3 0 4 4 0 3 4 0 35 | -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/p.PIX: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Dibujo_3D/p.PIX -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/p1.PIX: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Dibujo_3D/p1.PIX -------------------------------------------------------------------------------- /os_final/tree/Dibujo_3D/prueba.PIX: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Dibujo_3D/prueba.PIX -------------------------------------------------------------------------------- /os_final/tree/Divide.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Divide.p -------------------------------------------------------------------------------- /os_final/tree/Documentos/Archivo.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Archivo.doc -------------------------------------------------------------------------------- /os_final/tree/Documentos/Detalles.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Detalles.doc -------------------------------------------------------------------------------- /os_final/tree/Documentos/Ens.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Ens.doc -------------------------------------------------------------------------------- /os_final/tree/Documentos/Peticiones.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Peticiones.doc -------------------------------------------------------------------------------- /os_final/tree/Documentos/Programas.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Programas.doc -------------------------------------------------------------------------------- /os_final/tree/Documentos/Servicios.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Servicios.doc -------------------------------------------------------------------------------- /os_final/tree/Documentos/Trabajo.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Trabajo.doc -------------------------------------------------------------------------------- /os_final/tree/Documentos/Transputer.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Documentos/Transputer.doc -------------------------------------------------------------------------------- /os_final/tree/Editor.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Editor.p -------------------------------------------------------------------------------- /os_final/tree/Ejecutable.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Ejecutable.p -------------------------------------------------------------------------------- /os_final/tree/Ens.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Ens.p -------------------------------------------------------------------------------- /os_final/tree/GZIP.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/GZIP.p -------------------------------------------------------------------------------- /os_final/tree/Hora.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Hora.p -------------------------------------------------------------------------------- /os_final/tree/Info.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Info.p -------------------------------------------------------------------------------- /os_final/tree/Interfaz.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Interfaz.p -------------------------------------------------------------------------------- /os_final/tree/Modela.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Modela.p -------------------------------------------------------------------------------- /os_final/tree/Monitor.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Monitor.p -------------------------------------------------------------------------------- /os_final/tree/Pruebas/float.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Pruebas/float.c -------------------------------------------------------------------------------- /os_final/tree/SOM.32.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/SOM.32.bin -------------------------------------------------------------------------------- /os_final/tree/TAR.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/TAR.p -------------------------------------------------------------------------------- /os_final/tree/Vaciado.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/Vaciado.p -------------------------------------------------------------------------------- /os_final/tree/c/CC.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CC.c -------------------------------------------------------------------------------- /os_final/tree/c/CCanasin.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CCanasin.c -------------------------------------------------------------------------------- /os_final/tree/c/CCexpr.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CCexpr.c -------------------------------------------------------------------------------- /os_final/tree/c/CCgencod.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CCgencod.c -------------------------------------------------------------------------------- /os_final/tree/c/CCinter.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CCinter.c -------------------------------------------------------------------------------- /os_final/tree/c/CCvarios.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CCvarios.c -------------------------------------------------------------------------------- /os_final/tree/c/CCvars.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CCvars.c -------------------------------------------------------------------------------- /os_final/tree/c/CPC.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/CPC.c -------------------------------------------------------------------------------- /os_final/tree/c/Checar.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Checar.c -------------------------------------------------------------------------------- /os_final/tree/c/Compara.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Compara.c -------------------------------------------------------------------------------- /os_final/tree/c/Concat.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Concat.c -------------------------------------------------------------------------------- /os_final/tree/c/Conjunto.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Conjunto.c -------------------------------------------------------------------------------- /os_final/tree/c/Copiador.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Copiador.c -------------------------------------------------------------------------------- /os_final/tree/c/DARC.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/DARC.c -------------------------------------------------------------------------------- /os_final/tree/c/DZIP.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/DZIP.c -------------------------------------------------------------------------------- /os_final/tree/c/Divide.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Divide.c -------------------------------------------------------------------------------- /os_final/tree/c/Editor.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Editor.c -------------------------------------------------------------------------------- /os_final/tree/c/Efem.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Efem.c -------------------------------------------------------------------------------- /os_final/tree/c/Ejecutable.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Ejecutable.c -------------------------------------------------------------------------------- /os_final/tree/c/Ens.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Ens.c -------------------------------------------------------------------------------- /os_final/tree/c/Filtro.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Filtro.c -------------------------------------------------------------------------------- /os_final/tree/c/GZIP.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/GZIP.C -------------------------------------------------------------------------------- /os_final/tree/c/Hora.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Hora.c -------------------------------------------------------------------------------- /os_final/tree/c/Inflate.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Inflate.c -------------------------------------------------------------------------------- /os_final/tree/c/Info.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Info.c -------------------------------------------------------------------------------- /os_final/tree/c/Interfaz.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Interfaz.c -------------------------------------------------------------------------------- /os_final/tree/c/Libro.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Libro.c -------------------------------------------------------------------------------- /os_final/tree/c/M3D.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/M3D.c -------------------------------------------------------------------------------- /os_final/tree/c/Modela.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Modela.c -------------------------------------------------------------------------------- /os_final/tree/c/Monitor.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Monitor.c -------------------------------------------------------------------------------- /os_final/tree/c/Prepara.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Prepara.c -------------------------------------------------------------------------------- /os_final/tree/c/Semana_santa.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Semana_santa.c -------------------------------------------------------------------------------- /os_final/tree/c/Som32.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Som32.c -------------------------------------------------------------------------------- /os_final/tree/c/TAR.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/TAR.c -------------------------------------------------------------------------------- /os_final/tree/c/Unreduce.c: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------- 2 | 3 | unreduce.c 4 | 5 | The Reducing algorithm is actually a combination of two distinct algorithms. 6 | The first algorithm compresses repeated byte sequences, and the second al- 7 | gorithm takes the compressed stream from the first algorithm and applies a 8 | probabilistic compression method. 9 | 10 | ---------------------------------------------------------------------------*/ 11 | 12 | #define READBIT(n,d) {while(bk<(n)){bb|=((ulg)NEXTBYTE)<>=(n);bk-=(n);} 14 | 15 | /**************************************/ 16 | /* UnReduce Defines, Typedefs, etc. */ 17 | /**************************************/ 18 | 19 | #define DLE 144 20 | 21 | typedef byte f_array[64]; /* for followers[256][64] */ 22 | 23 | static void LoadFollowers __((void)); 24 | /* void flush OF((unsigned)); /* routine from inflate.c */ 25 | 26 | 27 | 28 | /*******************************/ 29 | /* UnReduce Global Variables */ 30 | /*******************************/ 31 | 32 | f_array *followers; /* shared work space */ 33 | 34 | byte Slen[256]; 35 | int factor; 36 | 37 | int L_table[5]; 38 | 39 | int D_shift[5]; 40 | int D_mask[5]; 41 | 42 | int B_table[256]; 43 | 44 | 45 | /*************************/ 46 | /* Function unReduce() */ 47 | /*************************/ 48 | 49 | void unReduce() /* expand probabilistically reduced data */ 50 | { 51 | register int lchar = 0; 52 | int nchar; 53 | int ExState = 0; 54 | int V = 0; 55 | int Len = 0; 56 | longint s = tam_sin_comprimir; /* number of bytes left to decompress */ 57 | unsigned w = 0; /* position in output window slide[] */ 58 | unsigned u = 1; /* true if slide[] unflushed */ 59 | int a,b; 60 | 61 | bb = 0; 62 | bk = 0; 63 | L_table[0] = 0; 64 | L_table[1] = 0x7f; 65 | L_table[2] = 0x3f; 66 | L_table[3] = 0x1f; 67 | L_table[4] = 0x0f; 68 | 69 | D_shift[0] = 0; 70 | D_shift[1] = 0x07; 71 | D_shift[2] = 0x06; 72 | D_shift[3] = 0x05; 73 | D_shift[4] = 0x04; 74 | 75 | D_mask[0] = 0; 76 | D_mask[1] = 0x01; 77 | D_mask[2] = 0x03; 78 | D_mask[3] = 0x07; 79 | D_mask[4] = 0x0f; 80 | 81 | mask_bits[0] = 0; 82 | mask_bits[1] = 0x1; 83 | mask_bits[2] = 0x3; 84 | mask_bits[3] = 0x7; 85 | mask_bits[4] = 0xf; 86 | mask_bits[5] = 0x1f; 87 | mask_bits[6] = 0x3f; 88 | mask_bits[7] = 0x7f; 89 | mask_bits[8] = 0xff; 90 | mask_bits[9] = 0x1ff; 91 | mask_bits[10] = 0x3ff; 92 | mask_bits[11] = 0x7ff; 93 | mask_bits[12] = 0xfff; 94 | mask_bits[13] = 0x1fff; 95 | mask_bits[14] = 0x3fff; 96 | mask_bits[15] = 0x7fff; 97 | mask_bits[16] = 0xffff; 98 | 99 | a = 0; 100 | B_table[a++] = 8; 101 | for(b = 0; b < 2; b++) 102 | B_table[a++] = 1; 103 | for(b = 0; b < 2; b++) 104 | B_table[a++] = 2; 105 | for(b = 0; b < 4; b++) 106 | B_table[a++] = 3; 107 | for(b = 0; b < 8; b++) 108 | B_table[a++] = 4; 109 | for(b = 0; b < 16; b++) 110 | B_table[a++] = 5; 111 | for(b = 0; b < 32; b++) 112 | B_table[a++] = 6; 113 | for(b = 0; b < 64; b++) 114 | B_table[a++] = 7; 115 | for(b = 0; b < 127; b++) 116 | B_table[a++] = 8; 117 | 118 | followers = (f_array *) (ventana + 0x4000); 119 | 120 | factor = eb_central[6] - 1; 121 | LoadFollowers(); 122 | 123 | while (s > 0 /* && (!zipeof) */) { 124 | if (Slen[lchar] == 0) 125 | READBIT(8, nchar) /* ; */ 126 | else { 127 | READBIT(1, nchar); 128 | if (nchar != 0) 129 | READBIT(8, nchar) /* ; */ 130 | else { 131 | int follower; 132 | int bitsneeded = B_table[Slen[lchar]]; 133 | READBIT(bitsneeded, follower); 134 | nchar = followers[lchar][follower]; 135 | } 136 | } 137 | /* expand the resulting byte */ 138 | switch (ExState) { 139 | 140 | case 0: 141 | if (nchar != DLE) { 142 | s--; 143 | ventana[w++] = (byte) nchar; 144 | if (w == 0x4000) { 145 | flush(w); 146 | w = u = 0; 147 | } 148 | } 149 | else 150 | ExState = 1; 151 | break; 152 | 153 | case 1: 154 | if (nchar != 0) { 155 | V = nchar; 156 | Len = V & L_table[factor]; 157 | if (Len == L_table[factor]) 158 | ExState = 2; 159 | else 160 | ExState = 3; 161 | } else { 162 | s--; 163 | ventana[w++] = DLE; 164 | if (w == 0x4000) 165 | { 166 | flush(w); 167 | w = u = 0; 168 | } 169 | ExState = 0; 170 | } 171 | break; 172 | 173 | case 2:{ 174 | Len += nchar; 175 | ExState = 3; 176 | } 177 | break; 178 | 179 | case 3:{ 180 | register unsigned e; 181 | register unsigned n = Len + 3; 182 | register unsigned d = w - ((((V >> D_shift[factor]) & 183 | D_mask[factor]) << 8) + nchar + 1); 184 | 185 | s -= n; 186 | do { 187 | n -= (e = (e = 0x4000 - ((d &= 0x3fff) > w ? d : w)) > n ? 188 | n : e); 189 | if (u && w <= d) 190 | { 191 | memset(ventana + w, 0, e); 192 | w += e; 193 | d += e; 194 | } 195 | else 196 | if (w - d < e) /* (assume unsigned comparison) */ 197 | do { /* slow to avoid memcpy() overlap */ 198 | ventana[w++] = ventana[d++]; 199 | } while (--e); 200 | else 201 | { 202 | memcpy(ventana + w, ventana + d, e); 203 | w += e; 204 | d += e; 205 | } 206 | if (w == 0x4000) 207 | { 208 | flush(w); 209 | w = u = 0; 210 | } 211 | } while (n); 212 | 213 | ExState = 0; 214 | } 215 | break; 216 | } 217 | 218 | /* store character for next iteration */ 219 | lchar = nchar; 220 | } 221 | 222 | /* flush out slide */ 223 | flush(w); 224 | } 225 | 226 | 227 | 228 | 229 | 230 | /******************************/ 231 | /* Function LoadFollowers() */ 232 | /******************************/ 233 | 234 | static void LoadFollowers() 235 | { 236 | register int x; 237 | register int i; 238 | 239 | for (x = 255; x >= 0; x--) { 240 | READBIT(6, Slen[x]); 241 | for (i = 0; (byte) i < Slen[x]; i++) { 242 | READBIT(8, followers[x][i]); 243 | } 244 | } 245 | } 246 | -------------------------------------------------------------------------------- /os_final/tree/c/Unshrink.c: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------- 2 | 3 | unshrink.c 4 | 5 | Shrinking is a Dynamic Lempel-Ziv-Welch compression algorithm with partial 6 | clearing. 7 | 8 | ---------------------------------------------------------------------------*/ 9 | 10 | 11 | #define MAX_BITS 13 /* used in unShrink() */ 12 | #define HSIZE (1 << MAX_BITS) /* size of global work area */ 13 | 14 | union work { 15 | struct { 16 | short *Prefix_of; /* (8194 * sizeof(short)) */ 17 | byte *Suffix_of; /* also s-f length_nodes (smaller) */ 18 | byte *Stack; /* also s-f distance_nodes (smaller) */ 19 | } shrink; 20 | }; 21 | union work area; 22 | 23 | # define prefix_of area.shrink.Prefix_of 24 | # define suffix_of area.shrink.Suffix_of 25 | # define stack area.shrink.Stack 26 | 27 | 28 | /*************************************/ 29 | /* UnShrink Defines, Globals, etc. */ 30 | /*************************************/ 31 | 32 | /* MAX_BITS 13 (in unzip.h; defines size of global work area) */ 33 | #define INIT_BITS 9 34 | #define FIRST_ENT 257 35 | #define CLEAR 256 36 | #define GetCode(dest) READBIT(codesize,dest) 37 | 38 | static void partial_clear __((void)); /* local prototype */ 39 | 40 | int codesize, maxcode, maxcodemax, free_ent; 41 | 42 | 43 | 44 | 45 | /*************************/ 46 | /* Function unShrink() */ 47 | /*************************/ 48 | 49 | void unShrink() 50 | { 51 | register int code; 52 | register int stackp; 53 | int finchar; 54 | int oldcode; 55 | int incode; 56 | 57 | 58 | bb = 0; 59 | bk = 0; 60 | zipeof = 0; 61 | 62 | memset(ventana, 0, 32776); 63 | prefix_of = ventana; 64 | suffix_of = ventana + ((HSIZE + 2) * sizeof(short)); 65 | stack = ventana + ((HSIZE + 2) * sizeof(short)) + HSIZE + 2; 66 | 67 | mask_bits[0] = 0; 68 | mask_bits[1] = 0x1; 69 | mask_bits[2] = 0x3; 70 | mask_bits[3] = 0x7; 71 | mask_bits[4] = 0xf; 72 | mask_bits[5] = 0x1f; 73 | mask_bits[6] = 0x3f; 74 | mask_bits[7] = 0x7f; 75 | mask_bits[8] = 0xff; 76 | mask_bits[9] = 0x1ff; 77 | mask_bits[10] = 0x3ff; 78 | mask_bits[11] = 0x7ff; 79 | mask_bits[12] = 0xfff; 80 | mask_bits[13] = 0x1fff; 81 | mask_bits[14] = 0x3fff; 82 | mask_bits[15] = 0x7fff; 83 | mask_bits[16] = 0xffff; 84 | 85 | /* decompress the file */ 86 | codesize = INIT_BITS; 87 | maxcode = (1 << codesize) - 1; 88 | maxcodemax = HSIZE; /* (1 << MAX_BITS) */ 89 | free_ent = FIRST_ENT; 90 | 91 | code = maxcodemax; 92 | do { 93 | prefix_of[code] = -1; 94 | } while (--code > 255); 95 | /* 96 | OvdL: -Ox with SCO's 3.2.0 cc gives 97 | a. warning: overflow in constant multiplication 98 | b. segmentation fault (core dumped) when using the executable 99 | for (code = maxcodemax; code > 255; code--) 100 | prefix_of[code] = -1; 101 | */ 102 | 103 | for (code = 255; code >= 0; code--) { 104 | prefix_of[code] = 0; 105 | suffix_of[code] = (byte) code; 106 | } 107 | 108 | GetCode(oldcode); 109 | if (zipeof) { 110 | return; 111 | } 112 | 113 | finchar = oldcode; 114 | 115 | fputc(finchar, archivo_nuevo); 116 | calcula_crc(&finchar, 1); 117 | 118 | stackp = HSIZE; 119 | 120 | while (!zipeof) { 121 | GetCode(code); 122 | if (zipeof) { 123 | return; 124 | } 125 | 126 | while (code == CLEAR) { 127 | GetCode(code); 128 | switch (code) { 129 | case 1: 130 | codesize++; 131 | if (codesize == MAX_BITS) 132 | maxcode = maxcodemax; 133 | else 134 | maxcode = (1 << codesize) - 1; 135 | break; 136 | 137 | case 2: 138 | partial_clear(); 139 | break; 140 | } 141 | 142 | GetCode(code); 143 | if (zipeof) { 144 | return; 145 | } 146 | } 147 | 148 | 149 | /* special case for KwKwK string */ 150 | incode = code; 151 | if (prefix_of[code] == -1) { 152 | stack[--stackp] = (byte) finchar; 153 | code = oldcode; 154 | } 155 | /* generate output characters in reverse order */ 156 | while (code >= FIRST_ENT) { 157 | if (prefix_of[code] == -1) { 158 | stack[--stackp] = (byte) finchar; 159 | code = oldcode; 160 | } else { 161 | stack[--stackp] = suffix_of[code]; 162 | code = prefix_of[code]; 163 | } 164 | } 165 | 166 | finchar = suffix_of[code]; 167 | stack[--stackp] = (byte) finchar; 168 | 169 | 170 | /* and put them out in forward order, block copy */ 171 | /* 172 | if ((HSIZE - stackp + outcnt) < OUTBUFSIZ) { 173 | memcpy(outptr, &stack[stackp], HSIZE - stackp); 174 | outptr += HSIZE - stackp; 175 | outcnt += HSIZE - stackp; 176 | stackp = HSIZE; 177 | } 178 | else 179 | */ 180 | /* output byte by byte if we can't go by blocks */ 181 | calcula_crc(stack + stackp, HSIZE - stackp); 182 | while (stackp < HSIZE) { 183 | if(fputc(stack[stackp++], archivo_nuevo) == -1) { 184 | color(15); 185 | puts(" Error de escritura\r\n"); 186 | return; 187 | } 188 | } 189 | 190 | /* generate new entry */ 191 | code = free_ent; 192 | if (code < maxcodemax) { 193 | prefix_of[code] = oldcode; 194 | suffix_of[code] = (byte) finchar; 195 | 196 | do 197 | code++; 198 | while ((code < maxcodemax) && (prefix_of[code] != -1)); 199 | 200 | free_ent = code; 201 | } 202 | /* remember previous code */ 203 | oldcode = incode; 204 | } 205 | } 206 | 207 | 208 | 209 | /******************************/ 210 | /* Function partial_clear() */ 211 | /******************************/ 212 | 213 | static void partial_clear() 214 | { 215 | register int pr; 216 | register int cd; 217 | 218 | /* mark all nodes as potentially unused */ 219 | for (cd = FIRST_ENT; cd < free_ent; cd++) 220 | prefix_of[cd] |= 0x8000; 221 | 222 | /* unmark those that are used by other nodes */ 223 | for (cd = FIRST_ENT; cd < free_ent; cd++) { 224 | pr = prefix_of[cd] & 0x7fff; /* reference to another node? */ 225 | if (pr >= FIRST_ENT) /* flag node as referenced */ 226 | prefix_of[pr] &= 0x7fff; 227 | } 228 | 229 | /* clear the ones that are still marked */ 230 | for (cd = FIRST_ENT; cd < free_ent; cd++) 231 | if ((prefix_of[cd] & 0x8000) != 0) 232 | prefix_of[cd] = -1; 233 | 234 | /* find first cleared node as next free_ent */ 235 | cd = FIRST_ENT; 236 | while ((cd < maxcodemax) && (prefix_of[cd] != -1)) 237 | cd++; 238 | free_ent = cd; 239 | } 240 | -------------------------------------------------------------------------------- /os_final/tree/c/Vaciado.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/Vaciado.c -------------------------------------------------------------------------------- /os_final/tree/c/halt.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/c/halt.c -------------------------------------------------------------------------------- /os_final/tree/cc.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/cc.p -------------------------------------------------------------------------------- /os_final/tree/concat.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/concat.p -------------------------------------------------------------------------------- /os_final/tree/halt.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/halt.p -------------------------------------------------------------------------------- /os_final/tree/lib/E.len: -------------------------------------------------------------------------------- 1 | db 0x4f,0x54,0x42,0x45 2 | db 0x08,0x03,0x19,0x96 3 | ; Tam codigo ejecutable 4 | dw 1985 5 | ; Tam extra 6 | dw 0 7 | ; Tam pila 8 | dw 1024 9 | ; Tam datos 10 | dw 1124 11 | ; Relleno 12 | db 0x00,0x00,0x00,0x00 13 | db 0x00,0x00,0x00,0x00 14 | db 0x00,0x00,0x00,0x00 15 | db 0x00,0x00,0x00,0x00 16 | db 0x00,0x00,0x00,0x00 17 | db 0x00,0x00,0x00,0x00 18 | db 0x00,0x00,0x00,0x00 19 | db 0x00,0x00,0x00,0x00 20 | db 0x00,0x00,0x00,0x00 21 | db 0x00,0x00,0x00,0x00 22 | -------------------------------------------------------------------------------- /os_final/tree/lib/Graf.len: -------------------------------------------------------------------------------- 1 | qmodo_texto: 2 | ldc 0x11 3 | ldlp 2 4 | sb 5 | ajw -1 6 | call disponible 7 | mint 8 | ldnlp 66 9 | ldlp 3 10 | outword 11 | ldlp 2 12 | mint 13 | ldnlp 67 14 | ldc 1 15 | in 16 | ldc 0 17 | mint 18 | stnl 71 19 | ajw 1 20 | qforza_actualizacion: 21 | mint 22 | ldnl 68 23 | ldnlp 1000 24 | dup 25 | stl 1 26 | ldnlp 25 27 | stl 2 28 | q: 29 | ldc -1 30 | ldl 1 31 | stnl 0 32 | ldl 1 33 | ldnlp 1 34 | stl 1 35 | ldl 1 36 | ldl 2 37 | diff 38 | eqc 0 39 | cj q 40 | ret 41 | 42 | qmodo_grafico: 43 | ldc 0x10 44 | ldlp 2 45 | sb 46 | ajw -1 47 | call disponible 48 | mint 49 | ldnlp 66 50 | ldlp 3 51 | outword 52 | ldlp 2 53 | mint 54 | ldnlp 67 55 | ldc 1 56 | in 57 | ldc 0 58 | mint 59 | stnl 71 60 | ajw 1 61 | j qforza_actualizacion 62 | 63 | qdibuja_pixel: 64 | ajw -3 65 | ldc 0x12 66 | ldlp 1 67 | sb 68 | ldl 5 69 | ldlp 1 70 | adc 1 71 | sb 72 | ldl 5 73 | ldc 8 74 | shr 75 | ldlp 1 76 | adc 2 77 | sb 78 | ldl 6 79 | ldlp 1 80 | adc 3 81 | sb 82 | ldl 6 83 | ldc 8 84 | shr 85 | ldlp 2 86 | sb 87 | ldl 7 88 | ldlp 2 89 | adc 1 90 | sb 91 | ldl 8 92 | ldlp 2 93 | adc 2 94 | sb 95 | ldl 9 96 | ldlp 2 97 | adc 3 98 | sb 99 | call disponible 100 | mint 101 | ldnlp 66 102 | ldlp 1 103 | outword 104 | ldlp 1 105 | mint 106 | ldnlp 67 107 | ldc 1 108 | in 109 | ldc 0 110 | mint 111 | stnl 71 112 | ajw 3 113 | ret 114 | 115 | qdibuja_pixel_256: 116 | ajw -3 117 | ldc 0x13 118 | ldlp 1 119 | sb 120 | ldl 5 121 | ldlp 1 122 | adc 1 123 | sb 124 | ldl 5 125 | ldc 8 126 | shr 127 | ldlp 1 128 | adc 2 129 | sb 130 | ldl 6 131 | ldlp 1 132 | adc 3 133 | sb 134 | ldl 6 135 | ldc 8 136 | shr 137 | ldlp 2 138 | sb 139 | ldl 7 140 | ldlp 2 141 | adc 1 142 | sb 143 | call disponible 144 | mint 145 | ldnlp 66 146 | ldlp 1 147 | outword 148 | ldlp 1 149 | mint 150 | ldnlp 67 151 | ldc 1 152 | in 153 | ldc 0 154 | mint 155 | stnl 71 156 | ajw 3 157 | ret 158 | 159 | qvacia_bloque_256: 160 | ajw -1 161 | vacia_bloque_256: 162 | mint 163 | ldnl 69 164 | cj vacia_bloque 165 | j vacia_bloque_256 166 | vacia_bloque: 167 | ldc 1 168 | mint 169 | stnl 69 170 | mint 171 | ldc 0x00003431 172 | outword 173 | mint 174 | ldl 3 175 | outword 176 | mint 177 | ldl 4 178 | outword 179 | mint 180 | ldl 5 181 | outword 182 | mint 183 | ldl 6 184 | outword 185 | ldl 5 186 | ldl 6 187 | prod 188 | ldl 7 189 | rev 190 | mint 191 | rev 192 | out 193 | ldc 0 194 | mint 195 | stnl 69 196 | ajw 1 197 | ret 198 | 199 | disponible: 200 | mint 201 | ldnl 71 202 | cj disponible1 203 | j disponible 204 | disponible1: 205 | ldc 1 206 | mint 207 | stnl 71 208 | ret 209 | -------------------------------------------------------------------------------- /os_final/tree/lib/MAT.len: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/lib/MAT.len -------------------------------------------------------------------------------- /os_final/tree/lib/Mensajes.len: -------------------------------------------------------------------------------- 1 | ; 2 | ; Rutinas para mandar y recibir mensajes. 3 | ; 4 | ; Para uso por el Sistema Operativo Mexicano de 32 bits. 5 | ; 6 | ; ctrl_maestro(mensaje) 7 | ; 8 | qctrl_maestro: 9 | ldl 2 10 | ajw -1 11 | stl 0 12 | EMENSAJ3: 13 | mint 14 | ldnl 71 15 | cj EMENSAJ4 16 | ldc 500 17 | ldtimer 18 | sum 19 | tin 20 | j EMENSAJ3 21 | EMENSAJ4: 22 | ldc 1 23 | mint 24 | stnl 71 25 | ldlp 0 26 | mint 27 | ldnlp 66 28 | ldc 4 29 | out 30 | ldlp 0 31 | mint 32 | ldnlp 67 33 | ldc 1 34 | in 35 | ldc 0 36 | mint 37 | stnl 71 38 | ajw 1 39 | ret 40 | 41 | ; 42 | ; mandar(canal, *mensaje, bytes) 43 | ; 44 | qmandar: 45 | ldl 3 46 | ldl 2 47 | ldl 4 48 | out 49 | ret 50 | 51 | ; 52 | ; recibir(canal, *mensaje, bytes) 53 | ; 54 | qrecibir: 55 | ldl 3 56 | ldl 2 57 | ldl 4 58 | in 59 | ret 60 | 61 | ; 62 | ; memcpy(destino, origen, bytes) 63 | ; 64 | qmemcpy: 65 | ldl 3 66 | ldl 2 67 | ldl 4 68 | move 69 | ret 70 | 71 | ; 72 | ; memset(destino, byte, cuantos) 73 | ; 74 | qmemset: 75 | ldl 4 76 | cj memset 77 | ldl 3 78 | ldl 2 79 | sb 80 | ldl 2 81 | adc 1 82 | stl 2 83 | ldl 4 84 | adc -1 85 | stl 4 86 | j qmemset 87 | memset: 88 | ret 89 | 90 | q_finprog: 91 | ldc FINPROG-P2 92 | ldpi 93 | P2: 94 | adc 15 95 | ldc -16 96 | and 97 | ret 98 | 99 | ; 100 | ; inicia_tarea(direccion, workspace) 101 | ; La tarea siempre inicia en prioridad baja. (1) 102 | ; 103 | qinicia_tarea: 104 | ldl 2 105 | ldl 3 106 | stnl 0 107 | ldc MITAREA-P1 108 | ldpi 109 | P1: 110 | ldl 3 111 | stnl -1 112 | ldl 3 113 | ldc -4 114 | and 115 | ldc 1 116 | or 117 | runp 118 | ret 119 | MITAREA: 120 | ldl 0 121 | ldc 2 122 | ldpi 123 | stl 0 124 | gcall 125 | ajw -2 126 | ldc 22 127 | ldlp 1 128 | adc 3 129 | sb 130 | MITAREA1: 131 | mint 132 | ldnl 70 133 | cj MITAREA2 134 | j MITAREA1 135 | MITAREA2: 136 | ldc 1 137 | mint 138 | stnl 70 139 | mint 140 | ldnlp 64 141 | ldlp 1 142 | adc 3 143 | outword 144 | ldlp 0 145 | mint 146 | ldnlp 65 147 | ldc 4 148 | in 149 | ldc 0 150 | mint 151 | stnl 70 152 | stopp 153 | 154 | FINPROG: 155 | -------------------------------------------------------------------------------- /os_final/tree/lib/Stdio.len: -------------------------------------------------------------------------------- 1 | ; 2 | ; Libreria de soporte para los programas escritos en C. 3 | ; 4 | 5 | qexecp: 6 | ldlp 0 7 | ldl 2 8 | stnl 4 9 | ldc 7 10 | ldpi 11 | ldl 2 12 | stnl 0 13 | ldl 2 14 | gajw 15 | ldl 1 16 | gcall 17 | ldl 0 18 | gajw 19 | ret 20 | 21 | qcheca_tecla: 22 | ldc 0x05 23 | ldlp 1 24 | adc 3 25 | sb 26 | j EMENSAJE 27 | 28 | qcheca_int: 29 | call qcheca_tecla 30 | stl 2 31 | ldl 2 32 | eqc 3 33 | cj checa_int 34 | ldc 1 35 | ldl 1 36 | call qexit 37 | checa_int: 38 | ldl 2 39 | ret 40 | 41 | qclock: 42 | ldtimer 43 | ret 44 | 45 | qrand: 46 | ldtimer 47 | mint 48 | ldc 1 49 | diff 50 | and 51 | ret 52 | 53 | qespera_tiempo: 54 | ldl 2 55 | ldtimer 56 | sum 57 | tin 58 | ret 59 | 60 | qfread: 61 | ldc 0x13 62 | ldlp 1 63 | adc 3 64 | sb 65 | j EMENSAJE 66 | 67 | qmalloc: 68 | ldc 0x15 69 | ldlp 1 70 | adc 3 71 | sb 72 | j EMENSAJE 73 | 74 | qfree: 75 | ldc 0x16 76 | ldlp 1 77 | adc 3 78 | sb 79 | j EMENSAJE 80 | 81 | qexec: 82 | ldc 0x18 83 | ldlp 1 84 | adc 3 85 | sb 86 | j EMENSAJE 87 | 88 | qexecm: 89 | ldc 0x17 90 | ldlp 1 91 | adc 3 92 | sb 93 | j EMENSAJE 94 | 95 | qmemoria_disponib: 96 | ldc 0x19 97 | ldlp 1 98 | adc 3 99 | sb 100 | j EMENSAJE 101 | 102 | qfwrite: 103 | ldc 0x14 104 | ldlp 1 105 | adc 3 106 | sb 107 | j EMENSAJE 108 | 109 | q_llamada: 110 | ldl 2 111 | ajw -4 112 | ldc 2 113 | ldpi 114 | stl 0 115 | gcall 116 | ajw -3 117 | stl 0 118 | stl 1 119 | stl 2 120 | ldl 0 121 | ldl 6 122 | stnl 0 123 | ldl 1 124 | ldl 7 125 | stnl 0 126 | ldl 2 127 | ldl 8 128 | stnl 0 129 | ldlp 0 130 | ldl 9 131 | stnl 0 132 | ajw 3 133 | ret 134 | 135 | qexit: 136 | ldl 1 137 | ldnlp -4 138 | gajw 139 | ret 140 | 141 | qgetchar: 142 | call qcheca_tecla 143 | stl 1 144 | ldl 1 145 | cj qgetchar 146 | ldl 1 147 | ret 148 | 149 | qftell: 150 | ldc 17 151 | ldlp 1 152 | adc 3 153 | sb 154 | j EMENSAJE 155 | 156 | qputs: 157 | ldl 2 158 | lb 159 | cj puts 160 | ldl 2 161 | lb 162 | ldl 1 163 | call qputchar 164 | ldl 2 165 | adc 1 166 | stl 2 167 | j qputs 168 | puts: 169 | ret 170 | 171 | qgets: 172 | ldl 2 173 | stl 1 174 | ldl 1 175 | stl 2 176 | P2: 177 | call qgetchar 178 | stl 3 179 | ldl 3 180 | eqc 8 181 | cj P1 182 | ldl 2 183 | ldl 1 184 | diff 185 | cj P2 186 | ldc 8 187 | ldc 0 188 | call qputchar 189 | ldl 2 190 | adc -1 191 | stl 2 192 | j P2 193 | P1: 194 | ldl 3 195 | eqc 13 196 | cj P3 197 | ldc 0 198 | ldl 2 199 | sb 200 | ldc 13 201 | ldc 0 202 | call qputchar 203 | ldc 10 204 | ldc 0 205 | call qputchar 206 | ret 207 | P3: 208 | ldl 3 209 | ldc 0 210 | call qputchar 211 | ldl 3 212 | ldl 2 213 | sb 214 | ldl 2 215 | adc 1 216 | stl 2 217 | j P2 218 | 219 | qputchar: 220 | testerr 221 | ldc 6 222 | ldlp 1 223 | adc 3 224 | sb 225 | j EMENSAJE 226 | 227 | qfseek: 228 | ldc 16 229 | ldlp 1 230 | adc 3 231 | sb 232 | j EMENSAJE 233 | 234 | qimprime: 235 | ldc 18 236 | ldlp 1 237 | adc 3 238 | sb 239 | j EMENSAJE 240 | 241 | qcrea_dir: 242 | ldc 13 243 | ldlp 1 244 | adc 3 245 | sb 246 | j EMENSAJE 247 | 248 | qborra_dir: 249 | ldc 14 250 | ldlp 1 251 | adc 3 252 | sb 253 | j EMENSAJE 254 | 255 | qatributo: 256 | ldc 15 257 | ldlp 1 258 | adc 3 259 | sb 260 | j EMENSAJE 261 | 262 | qvolumen: 263 | ldc 12 264 | ldlp 1 265 | adc 3 266 | sb 267 | j EMENSAJE 268 | 269 | qespacio_libre: 270 | ldc 11 271 | ldlp 1 272 | adc 3 273 | sb 274 | j EMENSAJE 275 | 276 | qabre_dir: 277 | ldc 10 278 | ldlp 1 279 | adc 3 280 | sb 281 | j EMENSAJE 282 | 283 | qremove: 284 | ldc 7 285 | ldlp 1 286 | adc 3 287 | sb 288 | j EMENSAJE 289 | 290 | qrename: 291 | ldc 8 292 | ldlp 1 293 | adc 3 294 | sb 295 | j EMENSAJE 296 | 297 | qhora: 298 | ldc 9 299 | ldlp 1 300 | adc 3 301 | sb 302 | j EMENSAJE 303 | 304 | qfclose: 305 | ldc 2 306 | ldlp 1 307 | adc 3 308 | sb 309 | j EMENSAJE 310 | 311 | qfgetc: 312 | ldc 3 313 | ldlp 1 314 | adc 3 315 | sb 316 | j EMENSAJE 317 | 318 | qfputc: 319 | ldc 4 320 | ldlp 1 321 | adc 3 322 | sb 323 | j EMENSAJE 324 | 325 | qfopen: 326 | ldc 1 327 | ldlp 1 328 | adc 3 329 | sb 330 | 331 | EMENSAJE: 332 | ajw -1 333 | EMENSAJ1: 334 | mint 335 | ldnl 70 336 | cj EMENSAJ2 337 | j EMENSAJ1 338 | EMENSAJ2: 339 | ldc 1 340 | mint 341 | stnl 70 342 | mint 343 | ldnlp 64 344 | ldlp 2 345 | adc 3 346 | outword 347 | ldlp 2 348 | mint 349 | ldnlp 65 350 | ldc 4 351 | in 352 | ldc 0 353 | mint 354 | stnl 70 355 | ldl 2 356 | ajw 1 357 | ret 358 | 359 | ; 360 | ; Rutinas para mandar y recibir mensajes. 361 | ; 362 | ; ctrl_maestro(mensaje) 363 | ; 364 | qctrl_maestro: 365 | ldl 2 366 | ajw -1 367 | stl 0 368 | EMENSAJ3: 369 | mint 370 | ldnl 71 371 | cj EMENSAJ4 372 | j EMENSAJ3 373 | EMENSAJ4: 374 | ldc 1 375 | mint 376 | stnl 71 377 | ldlp 0 378 | mint 379 | ldnlp 66 380 | ldc 4 381 | out 382 | ldlp 0 383 | mint 384 | ldnlp 67 385 | ldc 1 386 | in 387 | ldc 0 388 | mint 389 | stnl 71 390 | ajw 1 391 | ret 392 | 393 | ; 394 | ; mandar(canal, *mensaje, bytes) 395 | ; 396 | qmandar: 397 | ldl 3 398 | ldl 2 399 | ldl 4 400 | out 401 | ret 402 | 403 | ; 404 | ; recibir(canal, *mensaje, bytes) 405 | ; 406 | qrecibir: 407 | ldl 3 408 | ldl 2 409 | ldl 4 410 | in 411 | ret 412 | 413 | ; 414 | ; memcpy(destino, origen, bytes) 415 | ; 416 | qmemcpy: 417 | ldl 3 418 | ldl 2 419 | ldl 4 420 | move 421 | ret 422 | 423 | ; 424 | ; memset(destino, byte, cuantos) 425 | ; 426 | qmemset: 427 | ldl 4 428 | cj memset 429 | ldl 3 430 | ldl 2 431 | sb 432 | ldl 2 433 | adc 1 434 | stl 2 435 | ldl 4 436 | adc -1 437 | stl 4 438 | j qmemset 439 | memset: 440 | ret 441 | 442 | ; 443 | ; memzero(destino, cuantos) 444 | ; 445 | qmemzero: 446 | ldl 3 447 | cj memset 448 | ldc 0 449 | ldl 2 450 | sb 451 | ldl 2 452 | adc 1 453 | stl 2 454 | ldl 3 455 | adc -1 456 | stl 3 457 | j qmemzero 458 | 459 | q_finprog: 460 | ldc FINPROG-P4 461 | ldpi 462 | P4: 463 | adc 15 464 | ldc -16 465 | and 466 | ret 467 | 468 | ; 469 | ; inicia_tarea(direccion, workspace, argc, argv) 470 | ; 471 | qinicia_tarea: 472 | ldl 2 473 | ldl 3 474 | stnl 0 475 | ldl 4 476 | ldl 3 477 | stnl 1 478 | ldl 5 479 | ldl 3 480 | stnl 2 481 | ldc MITAREA-P5 482 | ldl 3 483 | startp 484 | P5: 485 | ret 486 | MITAREA: 487 | ajw -4 488 | ldc 7 489 | ldpi 490 | stl 0 491 | ldl 5 492 | stl 2 493 | ldl 6 494 | stl 3 495 | ldl 4 496 | gcall 497 | stopp 498 | 499 | FINPROG: 500 | -------------------------------------------------------------------------------- /os_final/tree/m3d.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/os_final/tree/m3d.p -------------------------------------------------------------------------------- /pascal/ANALEXIC.PAS: -------------------------------------------------------------------------------- 1 | { Programa: Compilador de Pascal para el Inmos T805 } 2 | { } 3 | { Módulo : Analizador Léxico } 4 | { } 5 | { (c) Copyright 1993-1994 Oscar Toledo G. } 6 | { Todos los derechos reservados. } 7 | 8 | { Inicializa el analizador léxico } 9 | PROCEDURE inicanalex; 10 | BEGIN 11 | pal[1]:='AND'; 12 | pal[2]:='ARRAY'; 13 | pal[3]:='ASM'; 14 | pal[4]:='BEGIN'; 15 | pal[5]:='CASE'; 16 | pal[6]:='CONST'; 17 | pal[7]:='DIV'; 18 | pal[8]:='DO'; 19 | pal[9]:='DOWNTO'; 20 | pal[10]:='ELSE'; 21 | pal[11]:='END'; 22 | pal[12]:='FILE'; { No terminado } 23 | pal[13]:='FOR'; 24 | pal[14]:='FORWARD'; 25 | pal[15]:='FUNCTION'; 26 | pal[16]:='GOTO'; 27 | pal[17]:='IF'; 28 | pal[18]:='IN'; 29 | pal[19]:='LABEL'; 30 | pal[20]:='MOD'; 31 | pal[21]:='NIL'; 32 | pal[22]:='NOT'; 33 | pal[23]:='OF'; 34 | pal[24]:='OR'; 35 | pal[25]:='PACKED'; { Sin efecto } 36 | pal[26]:='PROCEDURE'; 37 | pal[27]:='PROGRAM'; 38 | pal[28]:='RECORD'; 39 | pal[29]:='REPEAT'; 40 | pal[30]:='SET'; 41 | pal[31]:='SHL'; 42 | pal[32]:='SHR'; 43 | pal[33]:='STRING'; 44 | pal[34]:='THEN'; 45 | pal[35]:='TO'; 46 | pal[36]:='TYPE'; 47 | pal[37]:='UNTIL'; 48 | pal[38]:='VAR'; 49 | pal[39]:='WHILE'; 50 | pal[40]:='WITH'; 51 | pal[41]:='XOR'; 52 | pal[42]:='_FINPROG'; 53 | linact:=0; { Inicializa el contador de lineas } 54 | caract:=' '; { Forza la lectura de un caracter } 55 | aplin:=1; { Empieza en el 1er. caracter de la linea ficticia } 56 | tamlin:=1; { Tamaño ficticio de linea (para forzar carga de linea) } 57 | END; 58 | 59 | { Obtiene una linea de la entrada } 60 | PROCEDURE obtlin; 61 | VAR car:CHAR; 62 | BEGIN 63 | linact:=linact+1; 64 | write(chr(1),linact:4,' '); 65 | linea:=''; 66 | WHILE NOT (eoln OR eof) DO 67 | BEGIN 68 | read(car); 69 | write(car); 70 | IF car<>chr(8) THEN linea:=linea+car 71 | ELSE linea:=copy(linea,1,length(linea)-1) 72 | END; 73 | writeln; 74 | IF NOT eof THEN readln { Absorbe el fin de linea } 75 | ELSE linea:=linea+chr(26); { Caracter indicador de fin de archivo } 76 | linea:=linea+' '; 77 | tamlin:=length(linea); 78 | aplin:=0; 79 | IF length(linea)>4 THEN 80 | IF (linea[1]='{') AND (linea[2]='$') AND 81 | (linea[3]='1') AND (linea[4]='}') THEN optcc:=TRUE 82 | END; 83 | 84 | { Obtiene un caracter } 85 | PROCEDURE obtcar; 86 | BEGIN 87 | IF aplin>=tamlin THEN obtlin; { Excedio la linea, obtener otra linea } 88 | aplin:=aplin+1; { Avanza el apuntador } 89 | caract:=linea[aplin] { Toma el caracter } 90 | END; 91 | 92 | { Obtiene un lexema } 93 | PROCEDURE obtlex; 94 | VAR 95 | caractm:CHAR; 96 | min,cen,max:INTEGER; 97 | conteo,conteo2:INTEGER; 98 | fraccion,divisor,signo,exponente:INTEGER; 99 | numproc:REAL; 100 | er:BOOLEAN; 101 | BEGIN 102 | WHILE caract=' ' DO obtcar; { Ignora espacios } 103 | lexema:=CERROR; 104 | numero:=0; 105 | cadena:=''; 106 | caractm:=caract; 107 | IF (caractm>='a') AND (caractm<='z') THEN 108 | caractm:=chr(ord(caractm)-32); 109 | IF ((caractm>='A') AND { Detecta identificadores } 110 | (caractm<='Z')) OR (caractm='_') THEN 111 | BEGIN 112 | REPEAT 113 | IF length(cadena)<255 THEN cadena:=cadena+caractm ELSE errorlex(1); 114 | obtcar; 115 | caractm:=caract; 116 | IF (caractm>='a') AND (caractm<='z') THEN 117 | caractm:=chr(ord(caractm)-32) 118 | UNTIL ((caractm<'0') OR (caractm>'9')) AND 119 | ((caractm<'A') OR (caractm>'Z')) AND (caractm<>'_'); 120 | min:=1; { Busqueda binaria para saber } 121 | max:=palres; { si es una palabra reservada } 122 | REPEAT 123 | cen:=(min+max) DIV 2; 124 | IF cadena<=pal[cen] THEN max:=cen-1; 125 | IF cadena>=pal[cen] THEN min:=cen+1 126 | UNTIL min>max; 127 | IF (min-1)<=max THEN lexema:=CIDENT 128 | ELSE lexema:=comlex(min-2) 129 | END 130 | ELSE IF caract='{' THEN { Ignora los comentarios } 131 | BEGIN 132 | er:=FALSE; 133 | WHILE (caract<>'}') AND NOT er DO 134 | BEGIN 135 | obtcar; 136 | IF aplin=tamlin THEN { Detecta fin de linea (error) } 137 | BEGIN 138 | errorlex(4); 139 | er:=TRUE 140 | END; 141 | END; 142 | obtcar; 143 | obtlex 144 | END 145 | ELSE IF caract='''' THEN { Procesa una cadena alfanúmerica } 146 | BEGIN 147 | lexema:=CCAD; 148 | conteo2:=1; 149 | WHILE conteo2=1 DO 150 | BEGIN 151 | obtcar; 152 | IF aplin=tamlin THEN { Detecta fin de linea (error) } 153 | BEGIN 154 | errorlex(2); 155 | conteo2:=0 156 | END 157 | ELSE 158 | BEGIN 159 | IF caract='''' THEN { Detecta doble ' } 160 | BEGIN 161 | obtcar; 162 | IF caract<>'''' THEN conteo2:=0 163 | END; 164 | IF conteo2=1 THEN 165 | IF length(cadena)<255 THEN cadena:=cadena+caract ELSE errorlex(1); 166 | END; 167 | END; 168 | END 169 | ELSE IF caract='"' THEN { Procesa una cadena alfanúmerica } 170 | BEGIN 171 | lexema:=CCAD; 172 | conteo2:=1; 173 | WHILE conteo2=1 DO 174 | BEGIN 175 | obtcar; 176 | IF aplin=tamlin THEN { Detecta fin de linea (error) } 177 | BEGIN 178 | errorlex(7); 179 | conteo2:=0 180 | END 181 | ELSE 182 | BEGIN 183 | IF caract='"' THEN { Detecta doble " } 184 | BEGIN 185 | obtcar; 186 | IF caract<>'"' THEN conteo2:=0 187 | END; 188 | IF conteo2=1 THEN 189 | IF length(cadena)<255 THEN cadena:=cadena+caract ELSE errorlex(1); 190 | END; 191 | END; 192 | END 193 | ELSE IF (caract>='0') AND { Procesa números enteros/reales } 194 | (caract<='9') THEN 195 | BEGIN 196 | lexema:=CNUM; { Hasta aquí es un número entero } 197 | REPEAT { Procesa el número } 198 | cadena:=cadena+caract; 199 | numero:=numero*10+(ord(caract)-48); 200 | obtcar 201 | UNTIL (caract<'0') OR (caract>'9'); 202 | IF (linea[aplin]='.') AND { Sí encuentra un punto se asegura } 203 | (linea[aplin+1]<>'.') THEN { que no sea de un subrango. } 204 | BEGIN 205 | obtcar; 206 | IF (caract<'0') OR { Se necesita un digito despues del punto } 207 | (caract>'9') THEN errorlex(3) 208 | ELSE 209 | BEGIN 210 | numproc:=numero; { Se encontro que es número real } 211 | lexema:=CNUMREAL; 212 | fraccion:=0; { Calcula la fracción } 213 | divisor:=1; 214 | REPEAT 215 | fraccion:=fraccion*10+(ord(caract)-48); 216 | divisor:=divisor*10; 217 | obtcar 218 | UNTIL (caract<'0') OR (caract>'9'); 219 | numproc:=numproc+fraccion/divisor; 220 | END; 221 | END; 222 | IF (caract='E') OR (caract='e') THEN { Procesa el exponente } 223 | BEGIN 224 | IF lexema<>CNUMREAL THEN { Verifica posible conversión } 225 | BEGIN 226 | numproc:=numero; 227 | lexema:=CNUMREAL 228 | END; 229 | obtcar; 230 | signo:=0; { Verifica signo del exponente } 231 | IF caract='-' THEN signo:=1; 232 | IF (caract='-') OR (caract='+') THEN obtcar; 233 | IF (caract<'0') OR (caract>'9') THEN errorlex(3) 234 | ELSE 235 | BEGIN 236 | exponente:=0; 237 | REPEAT 238 | exponente:=exponente*10+(ord(caract)-48); 239 | obtcar 240 | UNTIL (caract<'0') OR (caract>'9'); 241 | IF signo=1 THEN exponente:=-exponente; 242 | IF exponente<0 THEN 243 | BEGIN 244 | REPEAT 245 | numproc:=numproc/10; 246 | exponente:=exponente+1 247 | UNTIL exponente=0; 248 | END 249 | ELSE IF exponente>0 THEN 250 | BEGIN 251 | REPEAT 252 | numproc:=numproc*10; 253 | exponente:=exponente-1 254 | UNTIL exponente=0; 255 | END; 256 | END; 257 | END; 258 | IF lexema=CNUMREAL THEN numreal.valor:=numproc; 259 | END 260 | ELSE IF caract='$' THEN { Procesa números hexadecimales } 261 | BEGIN 262 | lexema:=CNUM; 263 | obtcar; 264 | caractm:=caract; 265 | IF (caractm>='a') AND (caractm<='z') THEN 266 | caractm:=chr(ord(caractm)-32); 267 | IF (caractm>='0') AND (caractm<='9') OR 268 | (caractm>='A') AND (caractm<='F') THEN 269 | BEGIN 270 | REPEAT 271 | conteo:=ord(caractm)-48; 272 | IF conteo>9 THEN conteo:=conteo-7; 273 | numero:=(numero SHL 4)+conteo; { Los parentesis no son necesarios } 274 | obtcar; 275 | caractm:=caract; 276 | IF (caractm>='a') AND (caractm<='z') THEN 277 | caractm:=chr(ord(caractm)-32); 278 | UNTIL ((caractm<'0') OR (caractm>'9')) AND 279 | ((caractm<'A') OR (caractm>'F')) 280 | END 281 | ELSE errorlex(5); 282 | END 283 | ELSE 284 | BEGIN 285 | caractm:=caract; 286 | obtcar; 287 | CASE caractm OF 288 | '+': lexema:=CMAS; 289 | '-': lexema:=CMENOS; 290 | '*': lexema:=CPOR; 291 | '/': lexema:=CDIVIDE; 292 | '^': lexema:=CAPUNTA; 293 | '(': lexema:=CPARENI; 294 | ')': lexema:=CPAREND; 295 | '[': lexema:=CLLAVEI; 296 | ']': lexema:=CLLAVED; 297 | ';': lexema:=CPUNTOYCOMA; 298 | ',': lexema:=CCOMA; 299 | '=': lexema:=CIGUAL; 300 | ':': { Verifica := } 301 | IF caract='=' THEN 302 | BEGIN 303 | lexema:=CASIGNA; 304 | obtcar 305 | END 306 | ELSE lexema:=CDOSPUNTOS; 307 | '.': { Verifica .. } 308 | IF caract='.' THEN 309 | BEGIN 310 | lexema:=CPUNTOPUNTO; 311 | obtcar 312 | END 313 | ELSE lexema:=CPUNTO; 314 | '<': { Verifica <= o <> } 315 | IF caract='=' THEN 316 | BEGIN 317 | lexema:=CMENORIGUAL; 318 | obtcar 319 | END 320 | ELSE IF caract='>' THEN 321 | BEGIN 322 | lexema:=CNOIGUAL; 323 | obtcar 324 | END 325 | ELSE lexema:=CMENOR; 326 | '>': { Verifica >= } 327 | IF caract='=' THEN 328 | BEGIN 329 | lexema:=CMAYORIGUAL; 330 | obtcar 331 | END 332 | ELSE lexema:=CMAYOR 333 | ELSE 334 | BEGIN 335 | IF caractm=chr(26) THEN lexema:=CFINDEARCHIVO 336 | ELSE 337 | BEGIN 338 | errorlex(6); 339 | lexema:=CERROR 340 | END 341 | END 342 | END 343 | END 344 | END; 345 | 346 | -------------------------------------------------------------------------------- /pascal/ERRORES.PAS: -------------------------------------------------------------------------------- 1 | { Programa: Compilador de Pascal para el Inmos T805 } 2 | { } 3 | { Módulo : Mensajes de Errores } 4 | { } 5 | { (c) Copyright 1993-1994 Oscar Toledo G. } 6 | { Todos los derechos reservados. } 7 | 8 | { Posibles errores léxicos } 9 | PROCEDURE errorlex(error:INTEGER); 10 | VAR contador:INTEGER; 11 | BEGIN 12 | write(chr(2)); 13 | FOR contador:=1 TO 5+aplin DO 14 | write(' '); 15 | writeln('/\'); 16 | write(chr(2)); 17 | CASE error OF 18 | 1: writeln('Cadena demasiado larga'); 19 | 2: writeln('Falta el '' de cerrado'); 20 | 3: writeln('Número invalido'); 21 | 4: writeln('Falta }'); 22 | 5: writeln('Falta número hexadecimal'); 23 | 6: writeln('Caracter invalido'); 24 | 7: writeln('Falta el " de cerrado') 25 | END; 26 | END; 27 | 28 | { Posibles errores sintácticos y semanticos } 29 | PROCEDURE error(errnum:INTEGER); 30 | VAR 31 | contador:INTEGER; 32 | BEGIN 33 | write(chr(2)); 34 | FOR contador:=1 TO 5+aplin DO write(' '); 35 | writeln('/\'); 36 | write(chr(2)); 37 | CASE errnum OF 38 | 1: writeln('Etiqueta inexistente'); 39 | 2: writeln('Falta constante'); 40 | 3: writeln('Falta ''='''); 41 | 4: writeln('Falta identificador'); 42 | 5: writeln('Falta '':'' o '';'''); 43 | 6: writeln('No computable'); 44 | 7: writeln('Franja invalida'); 45 | 8: writeln('No se puede usar subscripto'); 46 | 9: writeln('Falta ''.'''); 47 | 10: writeln('Falta '';'''); 48 | 11: writeln('Identificador no declarado'); 49 | 12: writeln('Identificador ilegal'); 50 | 13: writeln('Falta '':='''); 51 | 14: writeln('Tipos incompatibles'); 52 | 15: writeln('El mínimo es mayor que el máximo'); 53 | 16: writeln('Falta ''THEN'''); 54 | 17: writeln('Falta '';'' o ''END'''); 55 | 18: writeln('Falta ''DO'''); 56 | 19: writeln('Simbolo incorrecto'); 57 | 20: writeln('Falta operador relacional'); 58 | 21: writeln('Uso de procedimiento en expresión'); 59 | 22: writeln('Falta '')'''); 60 | 23: writeln('Factor ilegal'); 61 | 24: writeln('La variable no es apuntador'); 62 | 25: writeln('Falta ''BEGIN'''); 63 | 26: writeln('Falta ''OF'''); 64 | 27: writeln('Identificador redefinido'); 65 | 28: writeln('Falta ''TO'' o ''DOWNTO'''); 66 | 29: writeln('Apuntador a un tipo indefinido'); 67 | 30: writeln('Numero fuera de rango'); 68 | 31: writeln('Falta ''('''); 69 | 33: writeln('Falta ''['''); 70 | 34: writeln('Falta '']'''); 71 | 35: writeln('Numero equivocado de parametros'); 72 | 36: writeln('Tipo de dato no reconocido'); 73 | 37: writeln('Falta ''PROGRAM'''); 74 | 38: writeln('No es matriz ni variable'); 75 | 39: writeln('Falta ''..'''); 76 | 40: writeln('Variable invalida'); 77 | 41: writeln('Paso invalido de argumento'); 78 | 42: writeln('Cadena vacia'); 79 | 43: writeln('Operador incorrecto'); 80 | 44: writeln('Tabla de identificadores excedida'); 81 | 45: writeln('Tabla de constantes excedida'); 82 | 46: writeln('Tabla de datos excedida'); 83 | 47: writeln('Tabla de cadenas excedida'); 84 | 48: writeln('Tabla literal de cadenas excedida'); 85 | 49: writeln('Expresión demasiado compleja'); 86 | 50: writeln('Anidamiento muy profundo'); 87 | 51: BEGIN 88 | writeln('No se pueden poner etiquetas'); 89 | writeln('dentro de un FOR o CASE') 90 | END; 91 | 52: writeln('Falta ''('' o '';'''); 92 | 255: writeln('Error fatal en el compilador') 93 | END; 94 | write(chr(3)) { Indica error en compilación } 95 | END; 96 | 97 | -------------------------------------------------------------------------------- /pascal/Hanoi.pas: -------------------------------------------------------------------------------- 1 | PROGRAM HANOI (INPUT, OUTPUT); 2 | 3 | CONST 4 | CASOS=3; 5 | 6 | TYPE 7 | SITIOS=(ORIGEN,DESTINO,TRABAJO); 8 | RANGO=1..CASOS; 9 | 10 | VAR 11 | TORRES:ARRAY[RANGO,SITIOS] OF INTEGER; 12 | I:INTEGER; 13 | J:SITIOS; 14 | DEPURA:BOOLEAN; 15 | 16 | PROCEDURE MOVEDISCO ( LUGORG, LUGDES : SITIOS ); 17 | VAR 18 | BUSCAR:BOOLEAN; 19 | I,J:INTEGER; 20 | 21 | FUNCTION ELEMENTO (VAR I :INTEGER; COL:SITIOS) : BOOLEAN; 22 | VAR BUSCAR:BOOLEAN; 23 | BEGIN 24 | IF DEPURA THEN WRITELN('++ENTRA ELEMENTO'); 25 | BUSCAR:=TRUE; 26 | I:=1; 27 | WHILE (I<=CASOS) AND BUSCAR DO 28 | IF TORRES[I,COL]<>0 THEN BUSCAR:=FALSE 29 | ELSE I:=I+1; 30 | ELEMENTO:=BUSCAR; 31 | IF DEPURA THEN WRITELN('++FIN ELEMENTO,I,BUSCAR=',I,BUSCAR) 32 | END; 33 | 34 | BEGIN 35 | IF DEPURA THEN WRITELN('++ENTRA MOVEDISCO'); 36 | BUSCAR:=ELEMENTO(I,LUGORG); 37 | IF BUSCAR THEN WRITELN('MOVEDISCO,ERROR LOGICO'); 38 | BUSCAR:=ELEMENTO(J,LUGDES); 39 | IF BUSCAR THEN J:=CASOS ELSE J:=J-1; 40 | IF DEPURA THEN WRITELN('++MOVEDISCO I A J',I:4,J:4); 41 | TORRES[J,LUGDES]:=TORRES[I,LUGORG]; 42 | TORRES[I,LUGORG]:=0; 43 | IF DEPURA THEN WRITELN('++FIN MOVEDISCO') 44 | END; 45 | 46 | PROCEDURE LISTDISCO; 47 | CONST 48 | PALOS=' I I I'; 49 | BASE1='---------------------------------------'; 50 | BASE2='I I'; 51 | L=6; 52 | BLANCO=' '; 53 | ASTER='***********'; 54 | VAR 55 | I,N1,N2,N3:INTEGER; 56 | BEGIN 57 | WRITELN; 58 | WRITELN(PALOS); 59 | FOR I:=1 TO CASOS DO 60 | BEGIN 61 | N1:=TORRES[I,ORIGEN]; 62 | N2:=TORRES[I,DESTINO]; 63 | N3:=TORRES[I,TRABAJO]; 64 | WRITELN( 65 | BLANCO:(L-N1), ASTER:(N1), 'I', ASTER:(N1),BLANCO:(L-N1), 66 | BLANCO:(L-N2), ASTER:(N2), 'I', ASTER:(N2),BLANCO:(L-N2), 67 | BLANCO:(L-N3), ASTER:(N3), 'I', ASTER:(N3) ) 68 | END; 69 | WRITELN(BASE1); 70 | WRITELN(BASE2); 71 | WRITELN(BASE1) 72 | END; 73 | 74 | PROCEDURE MOVER(N:INTEGER; N1,N2,N3:SITIOS); 75 | BEGIN 76 | IF DEPURA THEN WRITELN('++ENTRA MOVER,N=',N:4); 77 | IF N=1 THEN MOVEDISCO(N1,N2) ELSE 78 | BEGIN 79 | MOVER(N-1,N1,N3,N2); 80 | LISTDISCO; 81 | MOVEDISCO(N1,N2); 82 | LISTDISCO; 83 | MOVER(N-1,N3,N2,N1) 84 | END; 85 | IF DEPURA THEN WRITELN('++FIN MOVER,N=',N:4) 86 | END; 87 | 88 | BEGIN 89 | WRITELN('***COMIENZA EL PROGRAMA***,CASOS=',CASOS:4); 90 | DEPURA:=TRUE; 91 | FOR I:=1 TO CASOS DO 92 | FOR J:=ORIGEN TO TRABAJO DO 93 | TORRES[I,J]:=0; 94 | FOR I:=1 TO CASOS DO 95 | TORRES[I,ORIGEN]:=I; 96 | WRITELN(' SITUACION DE PARTIDA'); 97 | LISTDISCO; 98 | MOVER(CASOS,ORIGEN,DESTINO,TRABAJO); 99 | WRITELN(' SITUACION FINAL'); 100 | LISTDISCO; 101 | WRITELN('***FIN DEL PROGRAMA***') 102 | END. 103 | 104 | -------------------------------------------------------------------------------- /pascal/JULIA.PAS: -------------------------------------------------------------------------------- 1 | {From the book Programming in 3 Dimensions: } 2 | { 3-D Graphics, Ray Tracing, and Animation. Watkins & Sharp. M&T Books} 3 | {Port by Oscar Toledo G.} 4 | {Last revision: Feb/24/1994} 5 | 6 | PROGRAM uno; 7 | 8 | PROCEDURE initgraphics; 9 | BEGIN 10 | write(chr(27),'[G') 11 | END; 12 | 13 | PROCEDURE exitgraphics; 14 | BEGIN 15 | readln; 16 | write(chr(27),'[T') 17 | END; 18 | 19 | PROCEDURE plot(xp,yp,r,g,b:integer); 20 | BEGIN 21 | write(chr(27),'[',xp:0,';',yp:0,';',r:0,';',g:0,';',b:0,'P'); 22 | END; 23 | 24 | PROCEDURE pixel(xp,yp,val:integer); 25 | BEGIN 26 | plot(xp-1,yp-1,val,val,val); 27 | END; 28 | 29 | PROCEDURE Julia (rmin,rmax,imin,imax:real; n,it:integer); 30 | VAR 31 | rg,ig,cr,ci,zr,zi:real; 32 | cnt:integer; 33 | zm:real; 34 | zrp,zip:real; 35 | i,j:integer; 36 | BEGIN 37 | rg:=(rmax-rmin)/n; 38 | ig:=(imax-imin)/n; 39 | FOR i:=1 TO n DO 40 | BEGIN 41 | FOR j:=1 TO n DO 42 | BEGIN 43 | cr:=(j*rg)+rmin; 44 | ci:=(i*ig)+imin; 45 | cnt:=0; 46 | zr:=cr; 47 | zi:=ci; 48 | zm:=sqrt(sqr(zr)+sqr(zi)); 49 | IF zm>2.0 THEN pixel(i,j,0) 50 | ELSE 51 | BEGIN 52 | WHILE (cnt127 THEN cnt:=-256+cnt; 63 | pixel(i,j,cnt); 64 | END; 65 | END; 66 | END; 67 | END; 68 | 69 | BEGIN 70 | initgraphics; 71 | julia(-0.7235,-0.7160,0.2175,0.2250,512,255); 72 | { readln;} {things were rendered directly to screen} 73 | exitgraphics; 74 | END. 75 |  -------------------------------------------------------------------------------- /pascal/PRINCIPA.PAS: -------------------------------------------------------------------------------- 1 | { Programa: Compilador de Pascal para el Inmos T805 } 2 | { } 3 | { Módulo : Controlador Maestro } 4 | { } 5 | { (c) Copyright 1993-1994 Oscar Toledo G. } 6 | { Todos los derechos reservados. } 7 | 8 | { Procesa un bloque } 9 | PROCEDURE bloque; 10 | VAR ultsim2,apulit2,pila2,posproc2:INTEGER; 11 | BEGIN 12 | ultsim2:=ultsim; 13 | apulit2:=apulit; 14 | pila2:=pila; 15 | posproc2:=posproc; 16 | posproc:=parb; 17 | pila:=1; 18 | IF profact>maxniv THEN error(50); 19 | IF lexema=CLABEL THEN plabel; 20 | IF lexema=CCONST THEN pconst; 21 | dentrotype:=TRUE; 22 | IF lexema=CTYPE THEN ptype; 23 | dentrotype:=FALSE; 24 | IF lexema=CVAR THEN pvar; 25 | pparinf[profact]:=pila; 26 | WHILE (lexema=CPROCEDURE) OR 27 | (lexema=CFUNCTION) DO 28 | IF lexema=CPROCEDURE THEN pproc ELSE pfunc; 29 | IF lexema=CBEGIN THEN pbegin ELSE error(25); 30 | posproc:=posproc2; 31 | pila:=pila2; 32 | apulit:=apulit2; 33 | ultsim:=ultsim2 34 | END; 35 | 36 | { Procesa el encabezado PROGRAM } 37 | PROCEDURE sprogram; 38 | BEGIN 39 | compsig(CPROGRAM,37); 40 | compsig(CIDENT,4); 41 | obtlex; 42 | IF lexema=CPARENI THEN 43 | BEGIN 44 | REPEAT 45 | compsig(CIDENT,4); 46 | obtlex 47 | UNTIL lexema<>CCOMA; 48 | compara(CPAREND,22); 49 | obtlex 50 | END; 51 | compara(CPUNTOYCOMA,52); 52 | obtlex; 53 | writeln('j INIC'); 54 | val[0]:=geneti; 55 | bloque(0); 56 | writeln('INIC:'); 57 | writeln('ajw -(NUMCONS+NUMCONSLIB)'); 58 | writeln('ldc CONSLIB-CONS1'); 59 | writeln('ldpi'); 60 | writeln('CONS1:'); 61 | writeln('ldlp 0'); 62 | writeln('ldc NUMCONSLIB*4'); 63 | writeln('move'); 64 | IF apucons>0 THEN 65 | BEGIN 66 | { Carga las constantes del programa (si existen) } 67 | writeln('ldc CONS-CONS2'); 68 | writeln('ldpi'); 69 | writeln('CONS2:'); 70 | writeln('ldlp NUMCONSLIB'); 71 | writeln('ldc NUMCONS*4'); 72 | writeln('move'); 73 | END; 74 | { Inicialización para los procedimientos NEW, DISPOSE, EOF y EOLN } 75 | writeln('call DINAMICA'); 76 | writeln('ajw -5'); 77 | writeln('stl 1'); { Apuntador a lista de bloques (NEW y DISPOSE) } 78 | writeln('stl 2'); { Apuntador a memoria libre } 79 | writeln('mint'); { Indica que no se ha asignado ningun bloque } 80 | writeln('stl 3'); 81 | writeln('mint'); { Indica que no hay ningun caracter en el buffer } 82 | writeln('stl 4'); 83 | writeln('ldc 0x3F579834'); 84 | writeln('stl 0'); { Número aleatorio de comienzo } 85 | { Llama al programa principal con un apuntador a la tabla de constantes } 86 | writeln('ldlp 5+NUMCONSLIB'); 87 | writeln('call P1'); 88 | writeln('ajw NUMCONS+NUMCONSLIB+5'); 89 | { Retorna al llamador } 90 | writeln('ret') 91 | END; 92 | 93 | { Genera la lista de constantes compiladas } 94 | PROCEDURE listacons; 95 | VAR contador,contador2:INTEGER; 96 | BEGIN 97 | writeln('CONS:'); 98 | FOR contador:=0 TO apucons-1 DO 99 | BEGIN 100 | write('db '); 101 | FOR contador2:=1 TO 4 DO 102 | BEGIN 103 | write(ord(constantes[contador].bytes[contador2]):0); 104 | IF contador2<4 THEN write(','); 105 | END; 106 | writeln; 107 | END; 108 | writeln('NUMCONS:'); 109 | writeln('equ ',apucons:0); 110 | { Esta etiqueta es muy útil para insertar datos extras junto con un } 111 | { programa Pascal y accederlos con _FINPROG } 112 | writeln('FINPROG:') 113 | END; 114 | 115 | { Inicialización de tipos básicos } 116 | PROCEDURE inicializa; 117 | BEGIN 118 | cadena:='INTEGER'; { Tipo INTEGER } 119 | declara('T'); 120 | num[ultsim]:=4; 121 | tipo[ultsim]:=ultsim+1; 122 | cadena:=''; { Subrango -2147483647 .. 2147483647 } 123 | declara('B'); 124 | min[ultsim]:=$80000000; 125 | max[ultsim]:=$7FFFFFFF; 126 | num[ultsim]:=4; 127 | tipo[ultsim]:=2; 128 | cadena:='CHAR'; { Tipo CHAR } 129 | declara('T'); 130 | num[ultsim]:=1; 131 | tipo[ultsim]:=ultsim+1; 132 | cadena:=''; { Subrango 0 .. 255 } 133 | declara('B'); 134 | min[ultsim]:=0; 135 | max[ultsim]:=255; 136 | num[ultsim]:=1; 137 | tipo[ultsim]:=4; 138 | cadena:='REAL'; { Tipo REAL } 139 | declara('T'); 140 | num[ultsim]:=4; 141 | tipo[ultsim]:=ultsim+1; 142 | cadena:=''; { es un tipo básico } 143 | declara('I'); 144 | num[ultsim]:=4; 145 | tipo[ultsim]:=6; 146 | cadena:='BOOLEAN'; { Tipo BOOLEAN } 147 | declara('T'); 148 | num[ultsim]:=4; 149 | tipo[ultsim]:=ultsim+1; 150 | cadena:=''; { enumerador } 151 | declara('E'); 152 | tipo[ultsim]:=2; 153 | num[ultsim]:=4; 154 | min[ultsim]:=0; 155 | max[ultsim]:=1; 156 | prox[ultsim]:=ultsim+1; 157 | cadena:='FALSE'; { 0=FALSE } 158 | declara('C'); 159 | num[ultsim]:=4; 160 | tipo[ultsim]:=8; 161 | val[ultsim]:=0; 162 | prox[ultsim]:=ultsim+1; 163 | cadena:='TRUE'; { 1=TRUE } 164 | declara('C'); 165 | num[ultsim]:=4; 166 | tipo[ultsim]:=8; 167 | val[ultsim]:=1; 168 | prox[ultsim]:=0; 169 | cadena:=''; { Tipo vacio para NIL } 170 | declara('D'); 171 | num[ultsim]:=4; 172 | tipo[ultsim]:=ultsim; 173 | min[ultsim]:=1; 174 | cadena:='MAXINT'; { MAXINT } 175 | declara('C'); 176 | num[ultsim]:=4; 177 | tipo[ultsim]:=2; 178 | val[ultsim]:=$7FFFFFFF; 179 | cadena:='MININT'; { MININT } 180 | declara('C'); 181 | num[ultsim]:=4; 182 | tipo[ultsim]:=2; 183 | val[ultsim]:=$80000000; 184 | cadena:='BYTE'; { Tipo BYTE } 185 | declara('T'); 186 | num[ultsim]:=1; 187 | tipo[ultsim]:=4; 188 | cadena:='WORD'; { Tipo WORD } 189 | declara('T'); 190 | num[ultsim]:=4; 191 | tipo[ultsim]:=2; 192 | cadena:='TEXT'; { TEXT = FILE OF CHAR } 193 | declara('O'); 194 | num[ultsim]:=40; 195 | tipo[ultsim]:=4; 196 | cadena:=''; { Uso para tipos de conjuntos } 197 | declara('S'); 198 | num[ultsim]:=32; 199 | tipo[ultsim]:=ultsim; 200 | cadena:=''; { Uso para operaciones STRING } 201 | declara('N'); 202 | num[ultsim]:=256; 203 | tipo[ultsim]:=ultsim 204 | END; 205 | 206 | { Programa principal } 207 | 208 | BEGIN 209 | inicanalex; { Inicializa el analizador léxico } 210 | profact:=0; { Profundidad de anidamiento } 211 | apulit:=1; { Apuntador al buffer literal } 212 | literal[0]:=chr(0); { Ahorra espacio en literales vacios } 213 | proxeti:=0; { Proxima etiqueta a usar } 214 | ultsim:=0; { ×ltimo identificador definido } 215 | numpar:=0; { Número de parametros del procedimiento } 216 | clase[0]:='G'; { Esto evita problemas en la busqueda } 217 | apucons:=0; { Número constantes definidas } 218 | aajw:=FALSE; { Todavía no hay ajw a optimizar } 219 | oajw:=0; 220 | optcc:=FALSE; { Optimación corto-circuito desactivada } 221 | escontrol:=FALSE; { No esta dentro de IF, WHILE o REPEAT } 222 | afps:=FALSE; { Todavía no hay asignación res. función real } 223 | astl:=FALSE; { Todavía no hay asignación res. función entera } 224 | aenl:=FALSE; { Todavía no se carga el enlace estático } 225 | twith:=0; { Indica que no hay ningun WITH } 226 | pwith:=0; { Apuntador al apuntador para el WITH } 227 | cadact:=0; { Ninguna cadena en el programa } 228 | cadlit:=0; { Almacenamiento de cadenas vacio } 229 | proxcad:=1; { Proxima cadena a sacar del almacenamiento } 230 | inicializa; { Inicializa tipos básicos } 231 | sprogram; { Procesa bloque PROGRAM } 232 | compara(CPUNTO,9); { Verífica que exista el punto de final } 233 | listacons; { Lista las constantes } 234 | write(chr(4)) { Indica fin de compilación } 235 | END. 236 | 237 | -------------------------------------------------------------------------------- /pascal/original/ERRORES.PAS: -------------------------------------------------------------------------------- 1 | { Programa: Compilador de Pascal para el Inmos T805 } 2 | { } 3 | { Módulo : Mensajes de Errores } 4 | { } 5 | { (c) Copyright 1993-1994 Oscar Toledo G. } 6 | { Todos los derechos reservados. } 7 | 8 | { Posibles errores léxicos } 9 | PROCEDURE errorlex(error:INTEGER); 10 | VAR contador:INTEGER; 11 | BEGIN 12 | write(chr(2)); 13 | FOR contador:=1 TO 5+aplin DO 14 | write(' '); 15 | writeln('/\'); 16 | write(chr(2)); 17 | CASE error OF 18 | 1: writeln('Cadena demasiado larga'); 19 | 2: writeln('Falta el '' de cerrado'); 20 | 3: writeln('Número invalido'); 21 | 4: writeln('Falta }'); 22 | 5: writeln('Falta número hexadecimal'); 23 | 6: writeln('Caracter invalido'); 24 | 7: writeln('Falta el " de cerrado') 25 | END; 26 | END; 27 | 28 | { Posibles errores sintácticos y semanticos } 29 | PROCEDURE error(errnum:INTEGER); 30 | VAR 31 | contador:INTEGER; 32 | BEGIN 33 | write(chr(2)); 34 | FOR contador:=1 TO 5+aplin DO write(' '); 35 | writeln('/\'); 36 | write(chr(2)); 37 | CASE errnum OF 38 | 1: writeln('Etiqueta inexistente'); 39 | 2: writeln('Falta constante'); 40 | 3: writeln('Falta ''='''); 41 | 4: writeln('Falta identificador'); 42 | 5: writeln('Falta '':'' o '';'''); 43 | 6: writeln('No computable'); 44 | 7: writeln('Franja invalida'); 45 | 8: writeln('No se puede usar subscripto'); 46 | 9: writeln('Falta ''.'''); 47 | 10: writeln('Falta '';'''); 48 | 11: writeln('Identificador no declarado'); 49 | 12: writeln('Identificador ilegal'); 50 | 13: writeln('Falta '':='''); 51 | 14: writeln('Tipos incompatibles'); 52 | 15: writeln('El mínimo es mayor que el máximo'); 53 | 16: writeln('Falta ''THEN'''); 54 | 17: writeln('Falta '';'' o ''END'''); 55 | 18: writeln('Falta ''DO'''); 56 | 19: writeln('Simbolo incorrecto'); 57 | 20: writeln('Falta operador relacional'); 58 | 21: writeln('Uso de procedimiento en expresión'); 59 | 22: writeln('Falta '')'''); 60 | 23: writeln('Factor ilegal'); 61 | 24: writeln('La variable no es apuntador'); 62 | 25: writeln('Falta ''BEGIN'''); 63 | 26: writeln('Falta ''OF'''); 64 | 27: writeln('Identificador redefinido'); 65 | 28: writeln('Falta ''TO'' o ''DOWNTO'''); 66 | 29: writeln('Apuntador a un tipo indefinido'); 67 | 30: writeln('Numero fuera de rango'); 68 | 31: writeln('Falta ''('''); 69 | 33: writeln('Falta ''['''); 70 | 34: writeln('Falta '']'''); 71 | 35: writeln('Numero equivocado de parametros'); 72 | 36: writeln('Tipo de dato no reconocido'); 73 | 37: writeln('Falta ''PROGRAM'''); 74 | 38: writeln('No es matriz ni variable'); 75 | 39: writeln('Falta ''..'''); 76 | 40: writeln('Variable invalida'); 77 | 41: writeln('Paso invalido de argumento'); 78 | 42: writeln('Cadena vacia'); 79 | 43: writeln('Operador incorrecto'); 80 | 44: writeln('Tabla de identificadores excedida'); 81 | 45: writeln('Tabla de constantes excedida'); 82 | 46: writeln('Tabla de datos excedida'); 83 | 47: writeln('Tabla de cadenas excedida'); 84 | 48: writeln('Tabla literal de cadenas excedida'); 85 | 49: writeln('Expresión demasiado compleja'); 86 | 50: writeln('Anidamiento muy profundo'); 87 | 51: BEGIN 88 | writeln('No se pueden poner etiquetas'); 89 | writeln('dentro de un FOR o CASE') 90 | END; 91 | 52: writeln('Falta ''('' o '';'''); 92 | 255: writeln('Error fatal en el compilador') 93 | END; 94 | write(chr(3)) { Indica error en compilación } 95 | END; 96 | 97 | -------------------------------------------------------------------------------- /pascal/original/Hanoi.pas: -------------------------------------------------------------------------------- 1 | PROGRAM HANOI (INPUT, OUTPUT); 2 | 3 | CONST 4 | CASOS=3; 5 | 6 | TYPE 7 | SITIOS=(ORIGEN,DESTINO,TRABAJO); 8 | RANGO=1..CASOS; 9 | 10 | VAR 11 | TORRES:ARRAY[RANGO,SITIOS] OF INTEGER; 12 | I:INTEGER; 13 | J:SITIOS; 14 | DEPURA:BOOLEAN; 15 | 16 | PROCEDURE MOVEDISCO ( LUGORG, LUGDES : SITIOS ); 17 | VAR 18 | BUSCAR:BOOLEAN; 19 | I,J:INTEGER; 20 | 21 | FUNCTION ELEMENTO (VAR I :INTEGER; COL:SITIOS) : BOOLEAN; 22 | VAR BUSCAR:BOOLEAN; 23 | BEGIN 24 | IF DEPURA THEN WRITELN('++ENTRA ELEMENTO'); 25 | BUSCAR:=TRUE; 26 | I:=1; 27 | WHILE (I<=CASOS) AND BUSCAR DO 28 | IF TORRES[I,COL]<>0 THEN BUSCAR:=FALSE 29 | ELSE I:=I+1; 30 | ELEMENTO:=BUSCAR; 31 | IF DEPURA THEN WRITELN('++FIN ELEMENTO,I,BUSCAR=',I,BUSCAR) 32 | END; 33 | 34 | BEGIN 35 | IF DEPURA THEN WRITELN('++ENTRA MOVEDISCO'); 36 | BUSCAR:=ELEMENTO(I,LUGORG); 37 | IF BUSCAR THEN WRITELN('MOVEDISCO,ERROR LOGICO'); 38 | BUSCAR:=ELEMENTO(J,LUGDES); 39 | IF BUSCAR THEN J:=CASOS ELSE J:=J-1; 40 | IF DEPURA THEN WRITELN('++MOVEDISCO I A J',I:4,J:4); 41 | TORRES[J,LUGDES]:=TORRES[I,LUGORG]; 42 | TORRES[I,LUGORG]:=0; 43 | IF DEPURA THEN WRITELN('++FIN MOVEDISCO') 44 | END; 45 | 46 | PROCEDURE LISTDISCO; 47 | CONST 48 | PALOS=' I I I'; 49 | BASE1='---------------------------------------'; 50 | BASE2='I I'; 51 | L=6; 52 | BLANCO=' '; 53 | ASTER='***********'; 54 | VAR 55 | I,N1,N2,N3:INTEGER; 56 | BEGIN 57 | WRITELN; 58 | WRITELN(PALOS); 59 | FOR I:=1 TO CASOS DO 60 | BEGIN 61 | N1:=TORRES[I,ORIGEN]; 62 | N2:=TORRES[I,DESTINO]; 63 | N3:=TORRES[I,TRABAJO]; 64 | WRITELN( 65 | BLANCO:(L-N1), ASTER:(N1), 'I', ASTER:(N1),BLANCO:(L-N1), 66 | BLANCO:(L-N2), ASTER:(N2), 'I', ASTER:(N2),BLANCO:(L-N2), 67 | BLANCO:(L-N3), ASTER:(N3), 'I', ASTER:(N3) ) 68 | END; 69 | WRITELN(BASE1); 70 | WRITELN(BASE2); 71 | WRITELN(BASE1) 72 | END; 73 | 74 | PROCEDURE MOVER(N:INTEGER; N1,N2,N3:SITIOS); 75 | BEGIN 76 | IF DEPURA THEN WRITELN('++ENTRA MOVER,N=',N:4); 77 | IF N=1 THEN MOVEDISCO(N1,N2) ELSE 78 | BEGIN 79 | MOVER(N-1,N1,N3,N2); 80 | LISTDISCO; 81 | MOVEDISCO(N1,N2); 82 | LISTDISCO; 83 | MOVER(N-1,N3,N2,N1) 84 | END; 85 | IF DEPURA THEN WRITELN('++FIN MOVER,N=',N:4) 86 | END; 87 | 88 | BEGIN 89 | WRITELN('***COMIENZA EL PROGRAMA***,CASOS=',CASOS:4); 90 | DEPURA:=TRUE; 91 | FOR I:=1 TO CASOS DO 92 | FOR J:=ORIGEN TO TRABAJO DO 93 | TORRES[I,J]:=0; 94 | FOR I:=1 TO CASOS DO 95 | TORRES[I,ORIGEN]:=I; 96 | WRITELN(' SITUACION DE PARTIDA'); 97 | LISTDISCO; 98 | MOVER(CASOS,ORIGEN,DESTINO,TRABAJO); 99 | WRITELN(' SITUACION FINAL'); 100 | LISTDISCO; 101 | WRITELN('***FIN DEL PROGRAMA***') 102 | END. 103 | 104 | -------------------------------------------------------------------------------- /pascal/original/PRINCIPA.PAS: -------------------------------------------------------------------------------- 1 | { Programa: Compilador de Pascal para el Inmos T805 } 2 | { } 3 | { Módulo : Controlador Maestro } 4 | { } 5 | { (c) Copyright 1993-1994 Oscar Toledo G. } 6 | { Todos los derechos reservados. } 7 | 8 | { Procesa un bloque } 9 | PROCEDURE bloque; 10 | VAR ultsim2,apulit2,pila2,posproc2:INTEGER; 11 | BEGIN 12 | ultsim2:=ultsim; 13 | apulit2:=apulit; 14 | pila2:=pila; 15 | posproc2:=posproc; 16 | posproc:=parb; 17 | pila:=1; 18 | IF profact>maxniv THEN error(50); 19 | IF lexema=CLABEL THEN plabel; 20 | IF lexema=CCONST THEN pconst; 21 | dentrotype:=TRUE; 22 | IF lexema=CTYPE THEN ptype; 23 | dentrotype:=FALSE; 24 | IF lexema=CVAR THEN pvar; 25 | pparinf[profact]:=pila; 26 | WHILE (lexema=CPROCEDURE) OR 27 | (lexema=CFUNCTION) DO 28 | IF lexema=CPROCEDURE THEN pproc ELSE pfunc; 29 | IF lexema=CBEGIN THEN pbegin ELSE error(25); 30 | posproc:=posproc2; 31 | pila:=pila2; 32 | apulit:=apulit2; 33 | ultsim:=ultsim2 34 | END; 35 | 36 | { Procesa el encabezado PROGRAM } 37 | PROCEDURE sprogram; 38 | BEGIN 39 | compsig(CPROGRAM,37); 40 | compsig(CIDENT,4); 41 | obtlex; 42 | IF lexema=CPARENI THEN 43 | BEGIN 44 | REPEAT 45 | compsig(CIDENT,4); 46 | obtlex 47 | UNTIL lexema<>CCOMA; 48 | compara(CPAREND,22); 49 | obtlex 50 | END; 51 | compara(CPUNTOYCOMA,52); 52 | obtlex; 53 | writeln('j INIC'); 54 | val[0]:=geneti; 55 | bloque(0); 56 | writeln('INIC:'); 57 | writeln('ajw -(NUMCONS+NUMCONSLIB)'); 58 | writeln('ldc CONSLIB-CONS1'); 59 | writeln('ldpi'); 60 | writeln('CONS1:'); 61 | writeln('ldlp 0'); 62 | writeln('ldc NUMCONSLIB*4'); 63 | writeln('move'); 64 | IF apucons>0 THEN 65 | BEGIN 66 | { Carga las constantes del programa (si existen) } 67 | writeln('ldc CONS-CONS2'); 68 | writeln('ldpi'); 69 | writeln('CONS2:'); 70 | writeln('ldlp NUMCONSLIB'); 71 | writeln('ldc NUMCONS*4'); 72 | writeln('move'); 73 | END; 74 | { Inicialización para los procedimientos NEW, DISPOSE, EOF y EOLN } 75 | writeln('call DINAMICA'); 76 | writeln('ajw -5'); 77 | writeln('stl 1'); { Apuntador a lista de bloques (NEW y DISPOSE) } 78 | writeln('stl 2'); { Apuntador a memoria libre } 79 | writeln('mint'); { Indica que no se ha asignado ningun bloque } 80 | writeln('stl 3'); 81 | writeln('mint'); { Indica que no hay ningun caracter en el buffer } 82 | writeln('stl 4'); 83 | writeln('ldc 0x3F579834'); 84 | writeln('stl 0'); { Número aleatorio de comienzo } 85 | { Llama al programa principal con un apuntador a la tabla de constantes } 86 | writeln('ldlp 5+NUMCONSLIB'); 87 | writeln('call P1'); 88 | writeln('ajw NUMCONS+NUMCONSLIB+5'); 89 | { Retorna al llamador } 90 | writeln('ret') 91 | END; 92 | 93 | { Genera la lista de constantes compiladas } 94 | PROCEDURE listacons; 95 | VAR contador,contador2:INTEGER; 96 | BEGIN 97 | writeln('CONS:'); 98 | FOR contador:=0 TO apucons-1 DO 99 | BEGIN 100 | write('db '); 101 | FOR contador2:=1 TO 4 DO 102 | BEGIN 103 | write(ord(constantes[contador].bytes[contador2]):0); 104 | IF contador2<4 THEN write(','); 105 | END; 106 | writeln; 107 | END; 108 | writeln('NUMCONS:'); 109 | writeln('equ ',apucons:0); 110 | { Esta etiqueta es muy útil para insertar datos extras junto con un } 111 | { programa Pascal y accederlos con _FINPROG } 112 | writeln('FINPROG:') 113 | END; 114 | 115 | { Inicialización de tipos básicos } 116 | PROCEDURE inicializa; 117 | BEGIN 118 | cadena:='INTEGER'; { Tipo INTEGER } 119 | declara('T'); 120 | num[ultsim]:=4; 121 | tipo[ultsim]:=ultsim+1; 122 | cadena:=''; { Subrango -2147483647 .. 2147483647 } 123 | declara('B'); 124 | min[ultsim]:=$80000000; 125 | max[ultsim]:=$7FFFFFFF; 126 | num[ultsim]:=4; 127 | tipo[ultsim]:=2; 128 | cadena:='CHAR'; { Tipo CHAR } 129 | declara('T'); 130 | num[ultsim]:=1; 131 | tipo[ultsim]:=ultsim+1; 132 | cadena:=''; { Subrango 0 .. 255 } 133 | declara('B'); 134 | min[ultsim]:=0; 135 | max[ultsim]:=255; 136 | num[ultsim]:=1; 137 | tipo[ultsim]:=4; 138 | cadena:='REAL'; { Tipo REAL } 139 | declara('T'); 140 | num[ultsim]:=4; 141 | tipo[ultsim]:=ultsim+1; 142 | cadena:=''; { es un tipo básico } 143 | declara('I'); 144 | num[ultsim]:=4; 145 | tipo[ultsim]:=6; 146 | cadena:='BOOLEAN'; { Tipo BOOLEAN } 147 | declara('T'); 148 | num[ultsim]:=4; 149 | tipo[ultsim]:=ultsim+1; 150 | cadena:=''; { enumerador } 151 | declara('E'); 152 | tipo[ultsim]:=2; 153 | num[ultsim]:=4; 154 | min[ultsim]:=0; 155 | max[ultsim]:=1; 156 | prox[ultsim]:=ultsim+1; 157 | cadena:='FALSE'; { 0=FALSE } 158 | declara('C'); 159 | num[ultsim]:=4; 160 | tipo[ultsim]:=8; 161 | val[ultsim]:=0; 162 | prox[ultsim]:=ultsim+1; 163 | cadena:='TRUE'; { 1=TRUE } 164 | declara('C'); 165 | num[ultsim]:=4; 166 | tipo[ultsim]:=8; 167 | val[ultsim]:=1; 168 | prox[ultsim]:=0; 169 | cadena:=''; { Tipo vacio para NIL } 170 | declara('D'); 171 | num[ultsim]:=4; 172 | tipo[ultsim]:=ultsim; 173 | min[ultsim]:=1; 174 | cadena:='MAXINT'; { MAXINT } 175 | declara('C'); 176 | num[ultsim]:=4; 177 | tipo[ultsim]:=2; 178 | val[ultsim]:=$7FFFFFFF; 179 | cadena:='MININT'; { MININT } 180 | declara('C'); 181 | num[ultsim]:=4; 182 | tipo[ultsim]:=2; 183 | val[ultsim]:=$80000000; 184 | cadena:='BYTE'; { Tipo BYTE } 185 | declara('T'); 186 | num[ultsim]:=1; 187 | tipo[ultsim]:=4; 188 | cadena:='WORD'; { Tipo WORD } 189 | declara('T'); 190 | num[ultsim]:=4; 191 | tipo[ultsim]:=2; 192 | cadena:='TEXT'; { TEXT = FILE OF CHAR } 193 | declara('O'); 194 | num[ultsim]:=40; 195 | tipo[ultsim]:=4; 196 | cadena:=''; { Uso para tipos de conjuntos } 197 | declara('S'); 198 | num[ultsim]:=32; 199 | tipo[ultsim]:=ultsim; 200 | cadena:=''; { Uso para operaciones STRING } 201 | declara('N'); 202 | num[ultsim]:=256; 203 | tipo[ultsim]:=ultsim 204 | END; 205 | 206 | { Programa principal } 207 | 208 | BEGIN 209 | inicanalex; { Inicializa el analizador léxico } 210 | profact:=0; { Profundidad de anidamiento } 211 | apulit:=1; { Apuntador al buffer literal } 212 | literal[0]:=chr(0); { Ahorra espacio en literales vacios } 213 | proxeti:=0; { Proxima etiqueta a usar } 214 | ultsim:=0; { ×ltimo identificador definido } 215 | numpar:=0; { Número de parametros del procedimiento } 216 | clase[0]:='G'; { Esto evita problemas en la busqueda } 217 | apucons:=0; { Número constantes definidas } 218 | aajw:=FALSE; { Todavía no hay ajw a optimizar } 219 | oajw:=0; 220 | optcc:=FALSE; { Optimación corto-circuito desactivada } 221 | escontrol:=FALSE; { No esta dentro de IF, WHILE o REPEAT } 222 | afps:=FALSE; { Todavía no hay asignación res. función real } 223 | astl:=FALSE; { Todavía no hay asignación res. función entera } 224 | aenl:=FALSE; { Todavía no se carga el enlace estático } 225 | twith:=0; { Indica que no hay ningun WITH } 226 | pwith:=0; { Apuntador al apuntador para el WITH } 227 | cadact:=0; { Ninguna cadena en el programa } 228 | cadlit:=0; { Almacenamiento de cadenas vacio } 229 | proxcad:=1; { Proxima cadena a sacar del almacenamiento } 230 | inicializa; { Inicializa tipos básicos } 231 | sprogram; { Procesa bloque PROGRAM } 232 | compara(CPUNTO,9); { Verífica que exista el punto de final } 233 | listacons; { Lista las constantes } 234 | write(chr(4)) { Indica fin de compilación } 235 | END. 236 | 237 | -------------------------------------------------------------------------------- /pascal/pascal.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/pascal/pascal.cmg -------------------------------------------------------------------------------- /pascal/pascal0.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/pascal/pascal0.cmg -------------------------------------------------------------------------------- /tram/COMM.COM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/tram/COMM.COM -------------------------------------------------------------------------------- /tram/NUEVO2.M3D: -------------------------------------------------------------------------------- 1 | RESOLUCION 2 | X=320 3 | Y=200 4 | 5 | CUADROS 6 | NUMERO=1 7 | 8 | AMBIENTE 9 | LOCAL=0.75 0.75 0.75 10 | REFLEJO=0.30 0.30 0.30 11 | TRANS=0 0 0 12 | MINIMO=0.03 0.03 0.03 13 | MAXIMO=1 1 1 14 | RECUR=5 15 | 16 | LAMPARAS 17 | REFLEJO=FALSO 18 | REFLAMP=0 0 0 19 | EFECDIST=0.05 20 | 21 | OBSERVADOR 22 | LENTE=3.2 23 | LOC=0 -660 220 24 | ROTADO=0 25 | GIRO=16 26 | 27 | MATERIAL 28 | TIPO=AJEDREZADO 29 | TEXTURA=ALTERNADO 30 | RFLAMB=0.1 0.1 0.1 31 | RFLDIF=0.7 0.7 0.7 32 | RFLESP=0.2 0.2 0.2 33 | BRILLO=2 34 | TRANS=0 0 0 35 | INDICE=1 36 | CUADRO1=1 0.7 0.5 37 | CUADRO2=0 0.5 0.8 38 | CUADRO=0.012 39 | 40 | MATERIAL 41 | TIPO=VERDE 42 | TEXTURA=SUAVE 43 | RFLAMB=0.05 0.2 0.05 44 | RFLDIF=0.1 0.5 0.1 45 | RFLESP=0.1 0.3 0.1 46 | BRILLO=20 47 | TRANS=0 0 0 48 | INDICE=1.0 49 | 50 | MATERIAL 51 | TIPO=BLANCO 52 | TEXTURA=SUAVE 53 | RFLAMB=0.2 0.2 0.2 54 | RFLDIF=0.5 0.5 0.5 55 | RFLESP=0.3 0.3 0.3 56 | BRILLO=10 57 | TRANS=0 0 0 58 | INDICE=1.0 59 | 60 | MATERIAL 61 | TIPO=ROJO 62 | TEXTURA=SUAVE 63 | RFLAMB=0.2 0.05 0.05 64 | RFLDIF=0.5 0.1 0.1 65 | RFLESP=0.3 0.1 0.1 66 | BRILLO=5 67 | TRANS=0 0 0 68 | INDICE=1.0 69 | 70 | PISO 71 | MAT=AJEDREZADO 72 | 73 | LAMPARA 74 | LOC=350 -350 350 75 | RADIO=50 76 | INTENS=0.8 0.8 0.8 77 | 78 | LAMPARA 79 | LOC=-350 -350 350 80 | RADIO=50 81 | INTENS=0.8 0.8 0.8 82 | 83 | ESFERA 84 | LOC=0 0 90 85 | RADIO=40 86 | MAT=BLANCO 87 | 88 | ESFERA 89 | LOC=100 -10 70 90 | RADIO=40 91 | MAT=ROJO 92 | 93 | ESFERA 94 | LOC=-100 10 50 95 | RADIO=40 96 | MAT=VERDE 97 | 98 | PRUEBAESFERA 99 | 100 | FINCUADRO 101 |  -------------------------------------------------------------------------------- /tram/animales.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/tram/animales.cmg -------------------------------------------------------------------------------- /tram/comm.asm: -------------------------------------------------------------------------------- 1 | ; 2 | ; Transputer interface for my Pascal compiler and Ray Tracer. 3 | ; 4 | ; by Oscar Toledo G. 5 | ; https://nanochess.org/ 6 | ; 7 | ; Creation date: May/31/2025. 8 | ; 9 | 10 | org 0x0100 11 | 12 | ; 13 | ; This is written for an ISA board compatible with Inmos B004 14 | ; 15 | ; 0x0150 - Connected to Inmos C011 communication chip. 16 | ; 0x0160 - Reset pin for transputer board 17 | ; 0x0161 - Analyse pin for transputer board 18 | ; 19 | ; I'm supposing the C011 chips is connected to link 0 of the transputer chip. 20 | ; 21 | ; Also that you are using an Inmos T805 transputer (the one I used when I 22 | ; developed my software) 23 | ; 24 | 25 | call bootstrap 26 | 27 | mov al,[arguments] 28 | or al,al 29 | mov al,0 30 | je .3 31 | mov al,1 32 | .3: 33 | mov byte [mode],al 34 | mov byte [status],0 35 | mov word [pointer],0 36 | mov word [output],buffer 37 | 38 | main_loop: 39 | mov dx,0x0153 40 | in al,dx 41 | test al,0x01 ; Ready to send data? 42 | je .19 ; No, jump. 43 | 44 | mov al,[mode] 45 | cmp al,1 ; Pascal mode? 46 | je .20 ; Yes, jump. 47 | ; Simple mode then. 48 | mov ah,0x01 49 | int 0x16 ; Key available? 50 | je .19 ; No, jump. 51 | 52 | mov ah,0x00 ; Read key. 53 | int 0x16 54 | mov dx,0x151 55 | out dx,al ; Send to transputer. 56 | .19: 57 | jmp .1 58 | 59 | .20: 60 | ; 61 | ; Send more data to the transputer input. 62 | ; 63 | cld 64 | mov si,[pointer] ; Get file pointer. 65 | mov al,[status] 66 | test al,1 67 | je .3 68 | and al,0xfe 69 | mov [status],al 70 | mov al,0x0a 71 | jmp .6 72 | .3: 73 | test si,si 74 | jne .2 75 | mov al,[0x0080] ; Another file ready? 76 | test al,al 77 | jne .12 78 | mov al,0x1a ; Send end-of-file 79 | jmp .6 80 | 81 | .12: 82 | mov dx,arguments 83 | call load_file 84 | 85 | call move_arguments 86 | 87 | mov si,[pointer] 88 | .2: lodsb 89 | cmp al,0x0d 90 | je .5 91 | cmp al,0x0a 92 | jne .6 93 | mov al,[status] 94 | or al,1 95 | mov [status],al 96 | mov al,0x0d 97 | inc word [size] 98 | 99 | .6: mov dx,0x0151 100 | out dx,al 101 | 102 | .5: mov [pointer],si 103 | dec word [size] 104 | jne main_loop 105 | xor si,si 106 | mov [pointer],si 107 | jmp main_loop 108 | 109 | ; 110 | ; Handle transputer output 111 | ; 112 | .1: 113 | mov dx,0x0152 114 | in al,dx 115 | test al,0x01 116 | jne .21 117 | jmp main_loop 118 | .21: 119 | mov dx,0x0150 120 | in al,dx 121 | cmp byte [mode],0 122 | jne .26 123 | mov ah,0x0e 124 | mov bx,0x0007 125 | int 0x10 126 | jmp main_loop 127 | .26: 128 | mov di,[output] 129 | stosb 130 | mov [output],di 131 | cmp al,0x04 132 | je .7 133 | cmp al,0x0a ; End of line? 134 | je .7 ; Yes, jump. 135 | cmp al,0x41 ; If last byte is letter... 136 | jb .15 137 | cmp al,0x7b 138 | jnb .15 139 | cmp al,0x5b 140 | jb .25 141 | cmp al,0x61 142 | jnb .25 143 | .15: 144 | jmp main_loop 145 | .25: 146 | mov al,[buffer] 147 | cmp al,0x1b ; ...and first byte is Esc? 148 | jne .15 ; No, keep saving data. 149 | .7: 150 | mov si,buffer 151 | lodsb 152 | cmp al,0x01 ; Source code? 153 | jne .8 154 | mov ah,0x40 155 | mov bx,0x0002 ; STDERR 156 | mov cx,[output] 157 | sub cx,si 158 | mov dx,si 159 | int 0x21 160 | push cs 161 | pop ds 162 | push cs 163 | pop es 164 | mov word [output],buffer 165 | jmp main_loop 166 | 167 | .8: cmp al,0x02 ; Error? 168 | jne .9 169 | mov ah,0x40 170 | mov bx,0x0002 ; STDERR 171 | mov cx,[output] 172 | sub cx,si 173 | mov dx,si 174 | int 0x21 175 | push cs 176 | pop ds 177 | push cs 178 | pop es 179 | mov word [output],buffer 180 | jmp main_loop 181 | 182 | .9: cmp al,0x03 ; End of compilation (error)? 183 | jne .10 184 | mov ah,0x40 185 | mov bx,0x0002 ; STDERR 186 | mov dx,message_1_start 187 | mov cx,message_1_end 188 | sub cx,dx 189 | int 0x21 190 | int 0x20 191 | 192 | .10: cmp al,0x04 ; End of compilation (all good)? 193 | jne .11 194 | mov ah,0x40 195 | mov bx,0x0002 ; STDERR 196 | mov dx,message_2_start 197 | mov cx,message_2_end 198 | sub cx,dx 199 | int 0x21 200 | int 0x20 201 | .11: 202 | cmp al,0x1b ; Escape sequence? 203 | je .22 204 | jmp .14 205 | .22: 206 | mov bx,[output] 207 | mov al,[bx-1] 208 | cmp al,0x47 ; G 209 | jne .16 210 | mov ax,$0013 ; Graphics mode 211 | int $10 212 | jmp .17 213 | .16: 214 | cmp al,0x54 ; T 215 | jne .18 216 | mov ax,$0002 ; Text mode 217 | int $10 218 | jmp .17 219 | .18: 220 | cmp al,0x50 ; P 221 | je .24 222 | jmp .17 223 | .24: 224 | 225 | mov al,[si] 226 | cmp al,'[' 227 | jne $+3 228 | inc si 229 | 230 | call atoi 231 | cmp ax,320 232 | jnb .23 233 | push ax 234 | mov al,[si] 235 | cmp al,';' 236 | jne $+3 237 | inc si 238 | 239 | call atoi 240 | pop bx 241 | cmp ax,200 242 | jnb .23 243 | mov cx,320 244 | mul cx 245 | add ax,bx 246 | push ax 247 | 248 | mov al,[si] 249 | cmp al,';' 250 | jne $+3 251 | inc si 252 | call atoi 253 | mov cx,30 254 | mul cx 255 | push ax 256 | 257 | mov al,[si] 258 | cmp al,';' 259 | jne $+3 260 | inc si 261 | call atoi 262 | mov cx,59 263 | mul cx 264 | push ax 265 | 266 | mov al,[si] 267 | cmp al,';' 268 | jne $+3 269 | inc si 270 | call atoi 271 | mov cx,11 272 | mul cx 273 | pop bx 274 | add ax,bx 275 | pop bx 276 | add ax,bx 277 | xor dx,dx 278 | mov cx,1600 279 | div cx 280 | add al,$10 281 | pop bx 282 | 283 | push ds 284 | mov cx,0xa000 285 | mov ds,cx 286 | mov [bx],al 287 | pop ds 288 | .23: 289 | mov word [output],buffer 290 | jmp main_loop 291 | .14: 292 | dec si 293 | mov ah,0x40 294 | mov bx,0x0001 ; STDOUT 295 | mov dx,si 296 | mov cx,[output] 297 | sub cx,dx 298 | int 0x21 299 | .17: 300 | mov word [output],buffer 301 | jmp main_loop 302 | 303 | atoi: 304 | xor ax,ax 305 | .1: 306 | mov bl,[si] 307 | cmp bl,0x30 308 | jb .2 309 | cmp bl,0x3a 310 | jnb .2 311 | sub bl,0x30 312 | mov bh,0 313 | mov cx,10 314 | mul cx 315 | add ax,bx 316 | inc si 317 | jmp .1 318 | .2: 319 | ret 320 | 321 | message_1_start: 322 | db "Compilation error!",0x0d,0x0a 323 | message_1_end: 324 | 325 | message_2_start: 326 | db "Compilation successful!",0x0d,0x0a 327 | message_2_end: 328 | 329 | %include "startup.asm" 330 | 331 | input: equ $ 332 | pointer: equ $+2 333 | size: equ $+4 334 | mode: equ $+6 335 | status: equ $+7 336 | output: equ $+8 337 | 338 | buffer: equ $+0x000a 339 | buffer_end: equ $+0x040a 340 | input_data: equ $+0x040a 341 | -------------------------------------------------------------------------------- /tram/comm2.asm: -------------------------------------------------------------------------------- 1 | ; 2 | ; Transputer interface for my small operating system. 3 | ; 4 | ; by Oscar Toledo G. 5 | ; https://nanochess.org/ 6 | ; 7 | ; Creation date: Jun/04/2025. 8 | ; 9 | 10 | org 0x0100 11 | 12 | ; 13 | ; This program allows to use my basic operating system as intended at 14 | ; the time (1995) It uses a 1.44mb floppy disk as the drive for the 15 | ; operating system. You can do complete cycles of editing, compilation, 16 | ; assembly, and execution without exiting from the operating system. 17 | ; 18 | ; Usage instructions: 19 | ; * Copy the os/disk.img file into a real 1.44 mb floppy. 20 | ; * Make sure you have os/maestro.cmg in the same directory as this program. 21 | ; * Run this program as: comm2 maestro.cmg 22 | ; 23 | 24 | ; 25 | ; This is written for an ISA board compatible with Inmos B004 26 | ; 27 | ; 0x0150 - Connected to Inmos C011 communication chip. 28 | ; 0x0160 - Reset pin for transputer board 29 | ; 0x0161 - Analyse pin for transputer board 30 | ; 31 | ; I'm supposing the C011 chips is connected to link 0 of the transputer chip. 32 | ; 33 | ; Also that you are using an Inmos T805 transputer (the one I used when I 34 | ; developed my software) 35 | ; 36 | 37 | call bootstrap 38 | 39 | mov ax,0x0002 40 | int 0x10 41 | 42 | mov byte [status],0 43 | mov word [pointer],0 44 | mov word [output],buffer 45 | 46 | handle_service: 47 | mov bx,buffer 48 | xor bp,bp 49 | main_loop: 50 | ; 51 | ; Wait for the transputer to ask for a service 52 | ; 53 | mov dx,0x0152 54 | in al,dx 55 | test al,0x01 56 | je main_loop 57 | mov dx,0x0150 58 | in al,dx ; Read byte 59 | mov [bx],al 60 | inc bx 61 | test bp,bp ; Known limit? 62 | je read_service ; No, jump. 63 | cmp bx,bp ; Reached limit? 64 | jb main_loop ; No, wait for more data. 65 | handle_now: 66 | jmp di 67 | 68 | ; The first time we need to know the message size 69 | read_service: 70 | cmp bx,buffer+2 ; Wait for two bytes. 71 | jb main_loop 72 | mov si,buffer 73 | call read_pseudohex ; Read the service code. 74 | cmp al,0x01 75 | jb .2 76 | cmp al,0x09 77 | jb .3 78 | .2: 79 | mov bx,message_1 80 | call show_message 81 | int 0x20 82 | 83 | .3: mov ah,0 84 | shl ax,1 85 | shl ax,1 86 | mov bx,services_length-4 ; Index into the table. 87 | add bx,ax 88 | mov ax,[bx] 89 | mov di,[bx+2] ; di = service routine. 90 | cmp ax,2 91 | je handle_now 92 | add ax,buffer 93 | xchg ax,bp ; bp = expected pointer. 94 | mov bx,buffer+2 95 | jmp main_loop 96 | 97 | ; 98 | ; Read a pseudo-hexadecimal byte 99 | ; 100 | read_pseudohex: 101 | lodsb 102 | shl al,1 103 | shl al,1 104 | shl al,1 105 | shl al,1 ; High nibble. 106 | mov ah,al 107 | lodsb 108 | and al,0x0f ; Low nibble. 109 | or al,ah 110 | ret 111 | 112 | ; 113 | ; Read a sector from the floppy disk. 114 | ; 115 | read_sector: 116 | mov si,buffer+2 117 | call read_pseudohex 118 | mov ch,al ; Track 119 | call read_pseudohex 120 | mov dh,al ; Head 121 | call read_pseudohex 122 | mov cl,al ; Sector 123 | .2: mov dl,0 124 | mov ax,0x0201 125 | push ds 126 | push es 127 | mov bx,buffer+1 128 | int 0x13 129 | pop es 130 | pop ds 131 | jnb .1 132 | cmp ah,0x06 ; Disk change? 133 | je .2 134 | stc 135 | .1: 136 | mov al,0 137 | adc al,0 138 | mov [buffer],al 139 | cld 140 | mov si,buffer 141 | mov cx,513 142 | send_response: 143 | lodsb 144 | call write_byte 145 | loop send_response 146 | jmp handle_service 147 | 148 | ; 149 | ; Write a sector to the floppy disk. 150 | ; 151 | write_sector: 152 | mov si,buffer+2 153 | call read_pseudohex 154 | mov ch,al ; Track 155 | call read_pseudohex 156 | mov dh,al ; Head 157 | call read_pseudohex 158 | mov cl,al ; Sector 159 | mov dl,0 160 | push cx 161 | push dx 162 | mov bx,buffer 163 | mov cx,512 164 | .0: call read_pseudohex 165 | mov [bx],al 166 | inc bx 167 | loop .0 168 | pop dx 169 | pop cx 170 | .2: 171 | mov ax,0x0301 172 | push ds 173 | push es 174 | mov bx,buffer 175 | int 0x13 176 | pop es 177 | pop ds 178 | jnb .1 179 | cmp ah,0x06 ; Disk change 180 | je .2 181 | stc 182 | .1: 183 | mov al,0 184 | adc al,0 185 | mov [buffer],al 186 | cld 187 | mov si,buffer 188 | mov cx,1 189 | jmp send_response 190 | 191 | ; 192 | ; Format a track (floppy disk 1.44mb) 193 | ; 194 | format_track: 195 | mov si,buffer+2 196 | call read_pseudohex 197 | mov ch,al ; Track 198 | call read_pseudohex 199 | mov dh,al ; Head 200 | mov bx,buffer 201 | mov ah,1 202 | .2: 203 | mov [bx],ch ; Track 204 | inc bx 205 | mov [bx],dh ; Head 206 | inc bx 207 | mov [bx],ah ; Sector 208 | inc bx 209 | mov byte [bx],2 ; 512-bytes 210 | inc bx 211 | inc ah 212 | cmp ah,19 213 | jne .2 214 | 215 | mov ax,0x0512 216 | mov cl,0x01 217 | mov dl,0x00 218 | mov bx,buffer 219 | push ds 220 | push es 221 | int 0x13 222 | pop es 223 | pop ds 224 | jnb .1 225 | 226 | .1: 227 | mov al,0 228 | adc al,0 229 | mov [buffer],al 230 | cld 231 | mov si,buffer 232 | mov cx,1 233 | jmp send_response 234 | 235 | ; 236 | ; Update one line on the screen. 237 | ; 238 | update_screen: 239 | mov si,buffer+2 240 | lodsb 241 | mov ah,160 242 | mul ah 243 | mov di,ax 244 | push es 245 | mov ax,0xb800 246 | mov es,ax 247 | mov cx,80 248 | .1: 249 | call read_pseudohex 250 | stosb 251 | call read_pseudohex 252 | stosb 253 | loop .1 254 | 255 | pop es 256 | jmp handle_service 257 | 258 | ; 259 | ; Get pressed key status. 260 | ; 261 | pressed_key: 262 | mov ah,0x01 263 | int 0x16 264 | je .1 265 | mov ah,0x00 266 | int 0x16 267 | mov bx,scancode 268 | .4: 269 | mov dh,[bx] 270 | test dh,dh 271 | jz .2 272 | cmp ah,dh 273 | jne .3 274 | mov al,[bx+1] 275 | jmp .2 276 | 277 | .3: inc bx 278 | inc bx 279 | jmp .4 280 | .1: 281 | mov al,0x00 282 | .2: 283 | mov [buffer],al 284 | cld 285 | mov si,buffer 286 | mov cx,1 287 | jmp send_response 288 | 289 | scancode: 290 | db 0x3b,0x01 291 | db 0x3c,0x02 292 | db 0x3d,0x03 293 | db 0x3e,0x04 294 | db 0x3f,0x05 295 | db 0x40,0x06 296 | db 0x41,0x07 297 | db 0x42,0x08 298 | db 0x43,0x09 299 | db 0x44,0x0a 300 | db 0x85,0x0b 301 | db 0x86,0x0c 302 | db 0x47,0x17 303 | db 0x48,0x18 304 | db 0x49,0x19 305 | db 0x4b,0x14 306 | db 0x4c,0x15 307 | db 0x4d,0x16 308 | db 0x4f,0x11 309 | db 0x50,0x12 310 | db 0x51,0x13 311 | db 0x52,0x10 312 | db 0x53,0x0e 313 | db 0x00 314 | 315 | ; 316 | ; Get current time. 317 | ; 318 | get_time: 319 | mov ah,0x02 320 | int 0x1a 321 | mov al,dh 322 | call bcd2bin 323 | mov [buffer],al 324 | mov al,cl 325 | call bcd2bin 326 | mov [buffer+1],al 327 | mov al,ch 328 | call bcd2bin 329 | mov [buffer+2],al 330 | mov ah,0x04 331 | int 0x1a 332 | mov al,dl 333 | call bcd2bin 334 | mov [buffer+3],al 335 | mov al,dh 336 | call bcd2bin 337 | mov [buffer+4],al 338 | mov al,ch 339 | call bcd2bin 340 | mov ah,100 341 | mul ah 342 | mov bx,ax 343 | mov al,cl 344 | call bcd2bin 345 | mov ah,0 346 | add ax,bx 347 | sub ax,1900 348 | mov [buffer+5],al 349 | cld 350 | mov si,buffer 351 | mov cx,6 352 | jmp send_response 353 | 354 | ; 355 | ; AL contains a BCD byte. 356 | ; (One digit in the top nibble, one digit in the bottom nibble) 357 | bcd2bin: 358 | mov ah,al 359 | and al,0x0f ; Extract the lower nibble (0-9) 360 | shr ah,1 361 | shr ah,1 362 | shr ah,1 363 | and ah,0xfe ; Shift the upper nibble (0-9) keep x2 364 | add al,ah ; x2 365 | add al,ah ; x4 366 | add al,ah ; x6 367 | add al,ah ; x8 368 | add al,ah ; x10 369 | ret 370 | 371 | ; 372 | ; Set the current cursor position. 373 | ; 374 | cursor_position: 375 | mov si,buffer+2 376 | call read_pseudohex 377 | push ax 378 | call read_pseudohex 379 | mov bh,al 380 | pop ax 381 | mov bl,al 382 | mov ax,bx 383 | xor dx,dx 384 | mov cx,80 385 | div cx 386 | mov dh,al 387 | mov bh,0 388 | mov ah,0x02 389 | int 0x10 390 | jmp handle_service 391 | 392 | ; 393 | ; Set the cursor shape. 394 | ; 395 | cursor_shape: 396 | mov si,buffer+2 397 | call read_pseudohex 398 | push ax 399 | call read_pseudohex 400 | mov cl,al 401 | pop ax 402 | mov ch,al 403 | mov ah,0x01 404 | int 0x10 405 | jmp handle_service 406 | 407 | ; 408 | ; Show a message 409 | ; 410 | show_message: 411 | mov al,[bx] 412 | or al,al 413 | je .1 414 | push bx 415 | mov ah,0x0e 416 | mov bx,0x0007 417 | int 0x10 418 | pop bx 419 | inc bx 420 | jmp show_message 421 | .1: 422 | ret 423 | 424 | message_1: 425 | db "Unhandled service code",0x0d,0x0a 426 | 427 | services_length: 428 | dw 8,read_sector ; 01: Read sector 429 | dw 1032,write_sector ; 02: Write sector 430 | dw 6,format_track ; 03: Format track (floppy disk) 431 | dw 323,update_screen ; 04: Update screen 432 | dw 2,pressed_key ; 05: Pressed key 433 | dw 2,get_time ; 06: Get time 434 | dw 6,cursor_position ; 07: Cursor position 435 | dw 6,cursor_shape ; 08: Cursor shape 436 | 437 | %include "startup.asm" 438 | 439 | input: equ $ 440 | pointer: equ $+2 441 | size: equ $+4 442 | mode: equ $+6 443 | status: equ $+7 444 | output: equ $+8 445 | 446 | buffer: equ $+0x000a 447 | buffer_end: equ $+0x000a+1152 448 | input_data: equ $+0x000a+1152 449 | -------------------------------------------------------------------------------- /tram/comm2.com: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/tram/comm2.com -------------------------------------------------------------------------------- /tram/m3d.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/tram/m3d.cmg -------------------------------------------------------------------------------- /tram/pascal.cmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/tram/pascal.cmg -------------------------------------------------------------------------------- /tram/startup.asm: -------------------------------------------------------------------------------- 1 | ; 2 | ; Start up code and bootstrap for transputer 3 | ; 4 | ; by Oscar Toledo G. 5 | ; 6 | ; Creation date: Jun/04/2025. 7 | ; 8 | 9 | arguments: equ 0x0080 10 | 11 | ; 12 | ; Bootstrap code. 13 | ; Get initial image filename from the command line. 14 | ; 15 | bootstrap: 16 | push cs 17 | push cs 18 | pop ds 19 | pop es 20 | call parse_arguments 21 | 22 | call reset_transputer 23 | 24 | mov dx,arguments ; File name. 25 | call load_file 26 | 27 | call move_arguments 28 | 29 | ; New position in dx:ax (file length) 30 | ; Give this info to the boot loader. 31 | mov ax,[size] 32 | mov bl,al 33 | and bl,0x0f 34 | or [boot_image+64],bl 35 | mov cl,4 36 | shr ax,cl 37 | mov bl,al 38 | and bl,0x0f 39 | or [boot_image+63],bl 40 | shr ax,cl 41 | mov bl,al 42 | and bl,0x0f 43 | or [boot_image+62],bl 44 | shr ax,cl 45 | mov bl,al 46 | and bl,0x0f 47 | or [boot_image+61],bl 48 | 49 | ; 50 | ; Send the bootstrap code to the transputer 51 | ; 52 | mov cx,boot_image_end-boot_image 53 | mov al,cl 54 | call write_byte 55 | mov bx,boot_image 56 | .1: 57 | mov al,[bx] 58 | call write_byte 59 | inc bx 60 | loop .1 61 | 62 | call wait_a_little 63 | call wait_a_little 64 | 65 | ; 66 | ; Send the main program to the transputer 67 | ; 68 | mov cx,[size] 69 | mov bx,input_data 70 | .2: 71 | mov al,[bx] 72 | call write_byte 73 | inc bx 74 | loop .2 75 | 76 | call wait_a_little 77 | jmp wait_a_little 78 | 79 | ; 80 | ; Parse arguments. 81 | ; 82 | parse_arguments: 83 | cld 84 | mov si,0x0081 85 | mov di,0x0080 86 | .1: 87 | lodsb 88 | cmp al,0x0d 89 | je .5 90 | cmp al,' ' 91 | je .1 92 | .2: 93 | stosb 94 | lodsb 95 | cmp al,0x0d 96 | je .3 97 | cmp al,' ' 98 | jne .2 99 | .3: push ax 100 | xor al,al 101 | stosb 102 | pop ax 103 | cmp al,0x0d 104 | jne .1 105 | .5: 106 | xor al,al 107 | stosb 108 | ret 109 | 110 | ; 111 | ; Move arguments. 112 | ; 113 | move_arguments: 114 | cld 115 | mov si,0x0080 116 | mov di,0x0080 117 | .1: lodsb 118 | cmp al,0 119 | je .4 120 | .5: 121 | lodsb 122 | cmp al,0 123 | jne .5 124 | 125 | .2: lodsb 126 | cmp al,0 127 | je .4 128 | stosb 129 | .3: 130 | lodsb 131 | stosb 132 | cmp al,0 133 | jne .3 134 | jmp .2 135 | 136 | .4: stosb 137 | ret 138 | 139 | ; 140 | ; Load a complete file into memory. 141 | ; 142 | load_file: 143 | push cs 144 | pop ds 145 | push cs 146 | pop es 147 | mov ax,0x3d00 ; Open file, read only. 148 | int 0x21 149 | jb dos_error 150 | mov [input],ax 151 | 152 | mov ax,0x4202 ; Go to end of file. 153 | mov bx,[input] 154 | xor cx,cx 155 | xor dx,dx 156 | int 0x21 157 | mov [size],ax 158 | 159 | mov ax,0x4200 ; Go to start of file. 160 | mov bx,[input] 161 | xor cx,cx 162 | xor dx,dx 163 | int 0x21 164 | 165 | mov ah,0x3f ; Read file. 166 | mov bx,[input] 167 | mov cx,[size] 168 | mov dx,input_data 169 | mov [pointer],dx 170 | int 0x21 171 | 172 | mov bx,[input] 173 | mov ah,0x3e ; Close file. 174 | int 0x21 175 | 176 | xor bx,bx 177 | mov [input],bx 178 | push cs 179 | pop ds 180 | push cs 181 | pop es 182 | ret 183 | 184 | ; 185 | ; Report DOS error and exit. 186 | ; 187 | dos_error: 188 | mov ah,0x40 189 | mov bx,0x0002 ; STDERR 190 | mov dx,message_0_start 191 | mov cx,message_0_end 192 | sub cx,dx 193 | int 0x21 194 | int 0x20 195 | 196 | message_0_start: 197 | db "Unable to open file",0x0d,0x0a 198 | message_0_end: 199 | 200 | ; 201 | ; >>>>>>>>>>>>>>>>>>>> 202 | ; Start of the transputer code. 203 | ; >>>>>>>>>>>>>>>>>>>> 204 | ; 205 | 206 | ; 207 | ; Reset transputer. 208 | ; 209 | reset_transputer: 210 | ; Initial state 211 | mov dx,0x0160 212 | mov al,0 213 | out dx,al 214 | mov dx,0x0161 215 | mov al,0 ; We don't want "analyse" 216 | out dx,al 217 | call wait_a_little 218 | call wait_a_little 219 | 220 | ; Reset 221 | mov dx,0x0160 222 | mov al,1 223 | out dx,al 224 | call wait_a_little 225 | call wait_a_little 226 | call wait_a_little 227 | call wait_a_little 228 | 229 | ; Deassert reset 230 | mov dx,0x0160 231 | mov al,0 232 | out dx,al 233 | call wait_a_little 234 | call wait_a_little 235 | call wait_a_little 236 | call wait_a_little 237 | call wait_a_little 238 | call wait_a_little 239 | call wait_a_little 240 | call wait_a_little 241 | ret 242 | 243 | ; 244 | ; Wait 1/18.2 sec. 245 | ; 246 | wait_a_little: 247 | mov ah,0x00 ; Read real-time clock. 248 | int 0x1a 249 | mov bx,dx 250 | .1: 251 | mov ah,0x00 ; Read real-time clock. 252 | int 0x1a 253 | cmp dx,bx 254 | je .1 255 | ret 256 | 257 | ; 258 | ; Write byte via link 259 | ; 260 | write_byte: 261 | push ax 262 | mov dx,0x0153 263 | .1: in al,dx 264 | test al,1 265 | je .1 266 | pop ax 267 | mov dx,0x0151 268 | out dx,al 269 | ret 270 | 271 | ; 272 | ; Read byte via link 273 | ; 274 | read_byte: 275 | push ax 276 | mov dx,0x0152 277 | .1: in al,dx 278 | test al,1 279 | je .1 280 | pop ax 281 | mov dx,0x0150 282 | in al,dx 283 | ret 284 | 285 | boot_image: 286 | db 0x24, 0xf2 ; mint 287 | db 0x22, 0x20, 0x2f, 0x2f, 0x88 ; adc 0x20ff8 288 | db 0x23, 0xfc ; gajw 289 | db 0x22, 0xf9 ; testerr 290 | db 0x25, 0xf7 ; clrhalterr 291 | db 0x29, 0xfc ; fptesterr 292 | db 0x24, 0xf2 ; mint 293 | db 0x21, 0xf8 ; sthf 294 | db 0x24, 0xf2 ; mint 295 | db 0x21, 0xfc ; stlf 296 | db 0x24, 0xf2 ; mint 297 | db 0x24, 0xf2 ; mint 298 | db 0xe9 ; stnl 9 299 | db 0x24, 0xf2 ; mint 300 | db 0x24, 0xf2 ; mint 301 | db 0xea ; stnl 10 302 | db 0x40 ; ldc 0 303 | db 0x25, 0xf4 ; sttimer 304 | db 0x27, 0xfa ; timerdisableh 305 | db 0x27, 0xfb ; timerdisablel 306 | db 0x40 ; ldc 0 307 | db 0xd0 ; stl 0 308 | db 0x49 ; ldc 9 309 | db 0xd1 ; stl 1 310 | db 0x70 ; ldl 0 311 | db 0x24, 0xf2 ; mint 312 | db 0xfa ; wsub 313 | db 0x21, 0xf2 ; resetch 314 | db 0x10 ; ldlp 0 315 | db 0x4a ; ldc 10 316 | db 0x22, 0xf1 ; lend 317 | db 0x24, 0xf2 ; mint 318 | db 0x24, 0x50 ; ldnlp 64 319 | db 0x24, 0xf2 ; mint 320 | db 0x54 ; ldnlp 4 321 | db 0x20, 0x20, 0x20, 0x40 ; ldc initial_code_length 322 | db 0xf7 ; in 323 | db 0x24, 0x9c ; call 0x80000100 324 | db 0x2f, 0xff ;0x60, 0x0c 325 | boot_image_end: 326 | 327 | -------------------------------------------------------------------------------- /tram/test1.asm: -------------------------------------------------------------------------------- 1 | ; 2 | ; Programa de prueba de transputer 3 | ; 4 | ; por Oscar Toledo G. 5 | ; https://nanochess.org/ 6 | ; 7 | ; Fecha de creación: 21-may-2025. 8 | ; 9 | 10 | ; 11 | ; Código de inicialización. 12 | ; 13 | ; De mi emulador de transputer en 14 | ; https://github.com/nanochess/transputer 15 | ; 16 | ; Ensamblar con tasm, disponible en el mismo lugar. 17 | ; 18 | mint 19 | adc 0x0ffc 20 | gajw 21 | testerr 22 | clrhalterr 23 | fptesterror 24 | mint 25 | sthf 26 | mint 27 | stlf 28 | mint 29 | mint 30 | stnl 9 31 | mint 32 | mint 33 | stnl 10 34 | ldc 0 35 | sttimer 36 | timerdisableh 37 | timerdisablel 38 | ldc 0 39 | stl 0 40 | ldc 9 41 | stl 1 42 | ldl 0 43 | mint 44 | wsub 45 | resetch 46 | ldlp 0 47 | ldc 10 48 | lend 49 | ; 50 | ; Comienza nuestro código 51 | ; 52 | mint 53 | ldc 0x6f6e616e ; ASCII "nano" 54 | outword 55 | detenerse: 56 | j detenerse 57 | -------------------------------------------------------------------------------- /tram/test1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanochess/transputer/67480b100ca234914980d00fd212baa0e332556c/tram/test1.bin --------------------------------------------------------------------------------