Idea de proyecto para CPC, necesito ayuda de gente que sepa de soft y hard de CPC.
Publicado: 30 Ago 2018, 00:14
Bueno, resulta que al final eche a andar un par de CPC464 que tenia por casa y la interfaz de floppy multisistema de wilco2009 (si, se que hace tiempo, pero solo la habia probado en spectrum hasta hoy...) el caso es que hecho de menos no tener los 128Kb de RAM, y en alguna ocasion ya se comento por aqui que seria buena idea esta ampliacioin.
Partamos del echo que para mi, hasta hoy los CPC no eran mas que "topes de puerta" (TM) asi que si digo una brutalidad, perdon e iluminarme que estoy "empezando".
Aparentemente la implementacion de la RAM del CPC6128 es la misma que la de un CPC464 + Interfaz de 64K de D'tronic.
La parte hardware la tengo mas o menos definida, se me esta resistiendo la programacion de flip-flops tipo D en una GAL, pero tengo plan B y haré un par de pruebas en unos dias, pero mientras necesito que me contestéis algunas preguntas tecnicas:
1º Basicamente la memoria del CPC se divide en 4 partes, los voy a llamar SLOT para abreviar, en el slot 0 y 3 se puede meter ROM o RAM, segun escribas en un puerto una configuración u otra.
Entiendo que la ROM tiene prioridad sobre la RAM, de manera que en caso de que una rom este paginada y se acceda a uno de estos bancos, la señal RAM_RD NO se activa, y la memoria esta inactiva y la ROM proporciona el dato. ¿CORRECTO?
¿Que pasa cuando ESCRIBES en los bancos 0 o 3 con ROM paginada, ¿escribes en la RAM correspondiente o se ignora?
2º En general la RAM "baja" del CPC se pagina siempre en el mismo sitio (pagina 0 en slot 0, pagina 1 en slot 1, pagina 2 en slot 2, etc....) o bien se pagina uno o toda la RAM "alta".
Pero cuando se escribe en el registro 0x7F00 el valor 0xC3 la configuracion es diferente:
En el slot 0 se pagina la pagina 0 (original del 464)
En el slot 1 se pagina la pagina 3 (original del 464) <- ESTO ES LO RARO
En el slot 2 se pagina la pagina 2 (original del 464)
En el slot 3 se pagina la pagina 7 (el ultimo banco de la ampliacion)
¿Que pasa en un CPC464 a pelo cuando escribes este valor? ¿nada? ¿hay un mirror de la pagina 3 en los slot 1 y 3? creo que este es un punto donde la ampliacion externa y un 6128 serian diferentes, no se si es un mapa de memoria muy habitual o no.
La unica opcion que se me ocurre para esto, es forzar a que la linea A15 se ponga a 1 (cuando se intenta acceder al slot 2), con un transistor a VCC o algo asi, pero esto acabaria extropeando el Z80, salvo que este este preparado y tenga una resistencia entre el Z80 y el resto del circuito (en plan la ULA del Spectrum).
¿Alguien tiene detalles sobre esto?
Y por ultimo, si alguien tiene codigo donde haya basculas tipo D en una GAL22V10 para WinCULPs, me gustaria verlo para coger idea.
(he puesto las notas de lo que voy investigando aqui:
https://docs.google.com/document/d/1A2S ... sp=sharing
por si alguno le quiere echar un ojo y hacer comentarios)
Partamos del echo que para mi, hasta hoy los CPC no eran mas que "topes de puerta" (TM) asi que si digo una brutalidad, perdon e iluminarme que estoy "empezando".
Aparentemente la implementacion de la RAM del CPC6128 es la misma que la de un CPC464 + Interfaz de 64K de D'tronic.
La parte hardware la tengo mas o menos definida, se me esta resistiendo la programacion de flip-flops tipo D en una GAL, pero tengo plan B y haré un par de pruebas en unos dias, pero mientras necesito que me contestéis algunas preguntas tecnicas:
1º Basicamente la memoria del CPC se divide en 4 partes, los voy a llamar SLOT para abreviar, en el slot 0 y 3 se puede meter ROM o RAM, segun escribas en un puerto una configuración u otra.
Entiendo que la ROM tiene prioridad sobre la RAM, de manera que en caso de que una rom este paginada y se acceda a uno de estos bancos, la señal RAM_RD NO se activa, y la memoria esta inactiva y la ROM proporciona el dato. ¿CORRECTO?
¿Que pasa cuando ESCRIBES en los bancos 0 o 3 con ROM paginada, ¿escribes en la RAM correspondiente o se ignora?
2º En general la RAM "baja" del CPC se pagina siempre en el mismo sitio (pagina 0 en slot 0, pagina 1 en slot 1, pagina 2 en slot 2, etc....) o bien se pagina uno o toda la RAM "alta".
Pero cuando se escribe en el registro 0x7F00 el valor 0xC3 la configuracion es diferente:
En el slot 0 se pagina la pagina 0 (original del 464)
En el slot 1 se pagina la pagina 3 (original del 464) <- ESTO ES LO RARO
En el slot 2 se pagina la pagina 2 (original del 464)
En el slot 3 se pagina la pagina 7 (el ultimo banco de la ampliacion)
¿Que pasa en un CPC464 a pelo cuando escribes este valor? ¿nada? ¿hay un mirror de la pagina 3 en los slot 1 y 3? creo que este es un punto donde la ampliacion externa y un 6128 serian diferentes, no se si es un mapa de memoria muy habitual o no.
La unica opcion que se me ocurre para esto, es forzar a que la linea A15 se ponga a 1 (cuando se intenta acceder al slot 2), con un transistor a VCC o algo asi, pero esto acabaria extropeando el Z80, salvo que este este preparado y tenga una resistencia entre el Z80 y el resto del circuito (en plan la ULA del Spectrum).
¿Alguien tiene detalles sobre esto?
Y por ultimo, si alguien tiene codigo donde haya basculas tipo D en una GAL22V10 para WinCULPs, me gustaria verlo para coger idea.
(he puesto las notas de lo que voy investigando aqui:
https://docs.google.com/document/d/1A2S ... sp=sharing
por si alguno le quiere echar un ojo y hacer comentarios)