• Dentro de una TI-99 hay ocho 4116, o en GM Electronica.
    http://www.gmelectronica.com.ar/



    He leido toda la tarde...
    Me parece (por ahora) que un Z80 es la mejor opcion para un primer proyecto de este tipo. ¡Hay mucha documentacion!
    ¿Alguien sabe si las memorias del Spectrum (4116) se consiguen en alguna parte?

     

  • Dentro de una TI-99 hay ocho 4116, o en GM Electronica.
    http://www.gmelectronica.com.ar/



    Gracias!
    Me quedo con las de GM...para no "achurar" la TI.

    Me olvidaba de algo: Tengo una memoria DS1245AB-70, SRAM no volatil de DALLAS, de 32 pines y 1024 Kb (1 Mb!) de capacidad , nuevecita, que eventualmente podría usar. ¿servirá?


     

  • Es de 1024 Kbit, no KB, o sea es de 128KB wink

    Si te vendría perfecta incluso para usarla como "ROM"
     

  • Es de 1024 Kbit, no KB, o sea es de 128KB wink

    Si te vendría perfecta incluso para usarla como "ROM"


    Si claro. Esa tiene una pila que la convierte en algo asi como una EEPROM rápida smile
    Bien, la usamos.  wink
     

  • Te dejo este link por si no lo habias visto: LINK

    esta en italiano, pero se entiende
     

  • Gracias!
    Todo suma. OJO: Quizas el proyecto me supere y no pueda hacer nada....pero durante el proceso, espero aprender algo  smile
     

  • Y usar un PIC como micro? Seria un disparate muy grande?
    En el PIC se pondria un programa que vaya tomando las instrucciones de la RAM, de la posicion a la que apunta el program counter, y las interpretaria. La ventaja es que el "microcodigo" del PIC permitiria defiir las instrucciones que quisieramos, aunque no se si es posible por que nunca lo vi implementado. Pero me parece que seria posible....


    Usando un PIC como procesador tenes dos alternativas, la primera es la que comentas, emulando ya sea un micro existente o uno inventado, eso por supuesto seria bastante lento, pero teniendo en cuenta que tu "monitor" es un LCD de caracteres, lo cual lo convierte mas en un proyecto del tipo educativo, creo que esta muy bien. Si usaras hard mas complejo, como un chip de video o sonido, ya no seria tan practico usar un micro emulado. Un detalle a tener en cuenta es que hay cosas que deberias resolver con PICs adicionales, ya que dada la poca velocidad del procesador te costaria por ejemplo procesar las señales de un teclado PS/2, en ese caso habria que poner un PIC para convertir las señales en salidas de filas y columnas que el procesador pueda decodificar a su tiempo.
    La otra alternativa se que es posible pero nunca me puse a investigar demasiado porque la descarte enseguida, es la de usar un PIC en modo microprocesador. No conozco la linea PIC18 asi que me baso solo en lo poco que lei del 17C44, que es el micro que venia dentro del PICStart Plus hasta hace unos años. Este micro se puede usar en modo microcontrolador y en modo microprocesador, creo que es seleccionable mediante los fusibles de programacion, y cuando se esta en modo procesador las lineas se convierten en bus de datos, direcciones y control, el micro aparentemente corre hasta 33MHz y es similar al predecesor del 16F877 que si mal no recuerdo era el 16C65 (es decir similar en pines y perifericos pero sin memoria flash). El problema es que pense que podria aprovechar la ROM del micro para simplificar el diseño, pero me encontre con que la ROM es totalmente ignorada y apenas arranca el micro busca el programa en memoria externa. Lo bueno es que los PICs son RISC y tienen una gran cantidad de registros para usar (en el 17C44 son 454), lo cual lo convierte en un procesador muy eficiente comparado con otros de 8 bits usados en los 80s, trabajando a la misma velocidad claro esta, y eso compensa la mayor cantidad de codigo requerido en un PIC comparado con esos mismos micros.
    Una complicacion es que el micro tiene un bus de datos de 16 bits, ya que de esa manera lee un PIC el programa desde la ROM interna, por lo que se usa un bus de datos y direcciones multiplexado, algo similar a como lo hacen los micros de las XT. Por lo que veo ademas hay un modo microcontrolador extendido, que permite usar tanto la ROM interna como una externa para ampliar la memoria de programa disponible, ahi suena mas interesante, pero no se que tan adecuado sea para una computadora, hay que ver que no complique demasiado el diseño.
     

  • ¡No sabia que los pics tenian ese modo! Buen dato wink

    Segui pensando mucho en todo esto. Y ahora me parece que es posible con un PIC18F4550 a 20Mhz.

    Incluso creo que tengo mas o menos claros los pines que necesito:

    16 para el bus de direcciones
    8 para el bus de datos
    1 para indicar que la direccion de memoria en el bus es válida
    1 para indicar que se puede leer el dato que hay en el bus de datos
    1 para indicar la parte baja del bus de direcciones tiene una direccion I/0
    1 para pausar el micro (WAIT)
    1 para pedir el valor de la memoria al que apunta el bus de direcciones
    1 para el RESET

    Hasta aqui estaria usando 30 (o 29, si el RESET es el reset del PIC) de los 33 pines de I/O disponibles....

    Obviamente, tengo que sentarme a pensar mucho mas sobre todo esto, pero al menos tengo una idea de lo que se necesita fisicamente del PIC. Tambien encontre 7 chips de RAM estatica de 15ns y 32KB cada uno (AA26256 de 28 pines), y creo que usaria esa en lugar de la otra con la pila.

    Ampliaremos.  wink
     

  •   Ayer me puse a terminar mi emulador de 6502 en PIC, le agregue la parte de manejo de Flags y algunos detalles que no estaban definidos, y estoy en condiciones de afirmar que va a ser lento pero no tanto, mas o menos unos 50 ciclos de instruccion PIC (reloj / 4) por instruccion 6502, asi a 20Mhz / 4 / 50 = 100.000 instrucciones por segundo, el 6502 con una frecuencia de 1Mhz (el atari tiene mas o menos esta velocidad) los ciclos para instrucciones es reloj/2, y las instrucciones tardan en general 2 o 3 ciclos, asi que ponele 1Mhz/2/2.5 = 200.000 instrucciones por segundo.  No es tanta diferencia, claro que todo sale del numero ese (50) que lo tire por tirar, tal vez eran 100 instrucciones de PIC por cada una emulada smile lo tengo que revisar mejor.

    Pero esta bueno hacerlo para entender mejor al 6502.
    Como dice Pastbytes, habria que ponerle otro pic que maneje el timming de la comunicacion con el teclado PS2, asi el 6502 falso solo hace polling del valor que almacena esta PIC (olvidate de tener interrupciones en este micro emulado!!!)

    Ariel: lo que pensas hacer me parece perfecto, lo simplificaria un poco:
        Display LCD
        RAM statica 64Kb
        Pic16F877 que cree ser un 6502 (aunque cambiandole el firmware le podemos hacer creer otra cosa, incluso un micro nuevo manteniendo el mismo motherboard)
        PIC16f877 o 873 o algun 18F con bastantes pines, conectado al bus, que lee teclado PS2, y con comunicacion SPI para manejar tarjeta SD. Este micro tambien maneja la pata de reset del micro principal y carga desde la SD el programa booteable dentro de la RAM y recien al terminar de hacer esto le da el control al 6502. Asi no usa ROM ni flash, mas facil de actualizar.

      Lo de usar el PIC como micro independiente lo veo dificil, porque las instrucciones del 16F y las del 18F no son en bytes, sino que son 10 bits o cosas asi, y tiene un bus de datos y programa independiente (de distinto ancho) y el de datos es muy chico (7 bits el 16F? no me acuerdo) y el de programa tambien es chico, por eso usa todo ese bankswitching maldito

    Crear instrucciones propias me parece mas practico, asi se pueden usar propiedades del PIC, como todos los registros que tiene, y adaptarlo a los flags del PIC, asi se necesita menos codigo para convertir cosas. Ademas como ya sabemos que no va a ser tan rapido, podemos ponerle instrucciones muy CISC que hagan muchas cosas, como division, manejo de bloques de memoria, operaciones de 16 bits y hasta flotantes, etc.

            Saludos
           MARCOS
     

  • Ja!!!
    Esa es mas o menos la cantidad de instrucciones que estaba pensando se podrian ejecutar. smile
    Hay que hacer que todas demoren lo mismo, o 2x, como para simplificar.

    Tambien coincido en lo de usar otros micros para las tareas perifericas. En mi cuaderno acabo de dibujar unos bocetos, e imagino un "bus" con las 16 lineas de direcciones, las 8 de datos, las de control, reset, +5V, GND y +12V y -12V por las dudas, con conectores de bus ISA de 8 bits (tienen 31x2 pines, pero con los de un solo lado alcanzan y no estamos obligados a usar placas dobles faz).

    En ese "bus" imagino plaquitas para leer el teclado PS/2 y enviar el dato ASCII de la tecla al bus, lo mismo para el LCD, e incluso la RAM podria estar en una de estas placas. Se pueden ir pensando en otras ampliciones (RS-232, sonido, etc) para mas adelante.

    Pero lo importante es que despues de muchas vueltas, parece que es posible.

    PD: Si, ni hablar de interrupciones. Ademas, estoy convencido que hay que ir a por algo simple, por que si no lo abandonas sin terminarlo. Hay que hacer algo sencillito para empezar, y luego una segunda version mas compleja, aprovenchando lo aprendido en esta  tongue
     

Moderador (s): homecomputer, Selandari, ArielP, pastbytes, Durandal