Venia a pediros opinión sobre como os parece el sistema, si complicado de usar o sencillo. Primero os lo describo por encima.

La maquina consiste en una placa base que tiene una cierta funcionalidad propia en forma de un par de dispositivos integrados (bepper, temporizador, RTC y un controlador de teclado) y una "ASIC". Aparte tiene ranuras de expansión para dispositivos, slots de memoria (inicial 128KiB expandible hasta 1MiB), y una ranura par una tarjeta de CPU. Hay un bus de datos de 32 bits y uno de direcciones de 24 bits. Las CPUs de 16 o 8 bits tienen que llevar alguna forma de paginación o segmentación de memoria para poder direccionar por lo menos 24 bits, ya que por norma, los dispositivos se mapean por encima de 0x110000 y la ROM (32 KiB) esta decodificada a 0x100000. Hay como 14 MiB de direcciones para el hardware, lo cual sobra a patadas. En principio vamos con dos CPUs posibles (una variante del DCPU-16 y el TR3200) ficticios, aunque se deja la puerta abierta a otros micros futuros o incluso micros reales como por ejemplo, algo compatible binariamente con un Z80 (no una emulación fiel, pero que si pueda correr código maquina del Z80.)
Aquí viene el tomate gordo y donde me interesa realmente vuestra opinión. Como se espera que se puedan enchufar bastantes dispositivos, lo cual seria un infierno si hubiese que configurarlos todos a mano con "jumpers" ya que es posible tener varias tarjetas duplicadas; habíamos pensado hacer que la placa base tenga una "ASIC" inteligente llamada "Hardware Enumerator Device". Este dispositivo negocia con los dispositivos no integrados y les asigna interrupciones y bloques de direcciones de memoria. Así que el SO o los programas solo tienen que hablar con este dispositivo para saber que tarjetas hay, y que interrupciones usa y que bloque de direcciones decodifica.
¿ Complicado ? ¿ Sencillo ? ¿ Problemático ? Me he planteado otros esquemas, como que un dispositivo tenga una lista de interrupción/bloque de direcciones y que si no puede usar la primera entrada de la lista, pase al siguiente... creo que podría ser algo más sencillo y más predecible (por ejemplo, pase lo que pase, se que en la dirección X esta mapeado la tarjeta gráfica si hay por lo menos una pinchada.). Si hay problemas es más que probable que sean con los dispositivos duplicados y evita tener que sacar listas de recursos vía el "Hardware Enumerator Device", solo habría que tener la lista de dispositivos y sabiendo el orden en que estan, sabes que recursos va a usar.
Los ficheros en "ingles" : https://github.com/trillek-team/trillek ... tree/idea1