From: Alvaro A. <A_...@te...> - 2002-10-01 17:06:17
|
BUENOS DIAS!!! Y entonces, va Kak y dice ¿Re: Memoria, era Re: HOLA!!!!? > On Tue, 1 Oct 2002 23:52:02 +0200, Alvaro Alea wrote: > pero hay un problema peor (en mi opinion), y es que si no voy > equivocado, la pagina 2 y/o 5 pueden estar paginadas en la parte > superior de la memoria: entonces un write en la posicion 49152 seria > lo mismo que un write en la posicion 16384 o 32768 (dependiendo de si > es la 5 o la 2)... esto es bastante dificil de controlar creo yo, y cierto, desde luego el metodo escogido es el mas conveniente. > >Lo de la pantalla virtual, no lo entiendo, a ver, que yo sepa, la > >famosa > >pantalla virtual, no es ni mas ni menos que en la direccion 16384- > >32768 puede > >haber una de dos paginas de 16K, o la 5 o la 2, pero se pagina todo aqui un 7 ^^^^ 5 o 7 queria decir > >¿NO? es > >que en algun sitio leido que dicen que solo pagina los 7K de video, > >y eso > >CREO que es erroneo. > > en modelos 128 y superiores, existen dos pantallas: la de la ram 5 y > la de la ram 7. Entonces mediante el puerto 7ffd , bit 3, tu puedes > decir que pantalla quieres ver, si la normal de toda la vida, o la > "shadow". > mas o menos es como una pantalla virtual, pero por hardware: Por > ejemplo, la abadia del crimen no trabaja con la pantalla tipica de la > RAM 5, sino que lo hace con la 7 A ver si me aclaro: - Con toda la RAM a 00h - Si yo pagino R735 (suponiendo lo normal R537, no encuentro cual va entre 8000h y BFFFh, supongo que es la 3) - Relleno con FFh desde C000h hasta FFFFh (toda la pagina 5) - Si ahora mira en la direccion 7FF0h (por ejemplo) ¿encontaria FFh? > la mayoria de juegos 128 que he probado cascan de mala manera si no > esta implementada la pantalla virtual, no se que demonios haran :) Cuando dices "si no esta implementada" te refieres a que siempre haya una pagina fija en esa posicion? > para mas info: > http://www.worldofspectrum.org/faq/tech_128.html#MEM Tengo me leermela con calma, gracias por el link. > >Si tengo razon, la pantalla virtual, es un modo mas de paginacion, y > >la > >manera de emularlo es igual que el resto. y es que supone que TODO > el > >emulador (z80 core, pantalla, debuger) deberia aceder a la memoria > >del > >spectrum a traves de z80memread y z80memwrite, y si en algun momento > >no lo > >hace asi, pues es un bug. > > mmm... no se que decirte, la verdad. quizas se pueda considerar un > bug en cuestion de disenyo, pero el problema es que la pagina 1 > (16384-32768) no se pagina, sino que en el hueco de la zona de la > memoria de video, se usa la ram 7 en vez de la ram 5 (el hardware lo > hace asi) Segun el manual del +2A no es hueco, es la pagina entera, dice textualmente: la pagina 5 de la RAM tambien puede ser encajada en el margen de 4000h a 7ffffh, y la pagina 2 en el compredido entre 8000h y BFFFh. Yo le daria la razon, solamente por la complicacion electronica que supone lo contrario (y es que 6192 bytes es un numero muy rebuscado). Pero justo debajo da datos erroneos, p.e. dice que se produce contencion de memoria en las paginas 4-7 cuando al menos la 2 y la 1 deberian tener contencion de memoria, pues para complicarlo un poco mas hay un modo de paginacion en que se ponen 1234 ¿en ese modo que se ve en la pantalla? creo que voy a tener que refrescar mis conocimientos de ASM, desempolvar el +2A y empezar a hacer pruebas... brrrr :-/ > para hacerlo con memread, se podria paginar la ram 7 en el banco 1 al > entrar a la funcion draw_scanline, y paginar la ram 5 al salir, pero > si lo que buscamos es rapidez a la hora de dibujar, yo optaria por > coger un puntero a la zona de 32 bytes a dibujar (y puntero a los 32 > correspondientes atributos), ni que sea un error "conceptual", en > vez de usar memread (porque piensa que memread es probable que sea > bastante mas lenta a partir de ahora) Ciertamente, ahora que lo pienso, la ULA del spectrum acede directamente a la ram, asi que las rutinas de dibujo del aspectrum deberian hacer lo mismo, ademas facilita el diseño de la memoria contenida. > >Una cosa que yo no tenia clara a la hora de hacerlo es el tamaño de > >las > >paginas, y es que aunque todos los 128K paginan de 16 en 16, casi > >todas las > >interfaces lo hacen en menos, asi que quiza fuese interesante usar > >paginas de > >8 o incluso de 2K, aunque eso complique (un poco,hay macros) la > >paginacion. > mm... eso es cierto :( > complicar no complicaria tanto las cosas. simplemente seria cuestion > de cambiar algunos valores por aqui y por alli y ya ta... donde caben > 8 paginas caben 32 cuartos de pagina :) Hay que decidir el tamaño. la IF1 pagina a 8K, creo que el disciple/+D tambien. creo que el pokeador de MH paginaba a 2K habria que enterarse de los trasntapes, y demas. > >Por otro lado yo tenia pensado hacer dos page[] uno para leer y otro > >para > >escribir, de esta manera por ejemplo el page_r[2] apuntaria a la > >pagina de > >RAM 2 y el page_w[2] apuntaria al misimo sitio, pero page_r[0] > >apuntaria a la > >ROM, y page_w[0] apuntaria a un bloque "dummy", asi implementamos la > >proteccion contra escritura de rom, sin tener que hacer > >comprobaciones > >redundantes en cada escritura. > gran idea! :) > >Esto tiene la ventaja de que por ejemplo podemos emular el efecto de > >RAM del > >INVES Spectrum + > mm... que efecto es ese? no tengo documentacion sobre el, diria :( El INVES tiene 64K de RAM, por arriba todo normal, pero la pagina 0 en lectura va a la ROM, y en escritura va a la RAM. Supongo (de otra manera no entiendo como funciona) cuando enciendes la RAM esta toda a FF. La cuestion es que cuando luego lees un puerto el contenido que llega al Z80 es contenido del puerto AND memoria Asi que em principio no pasa nada hasta que escribes algun 0 en alguna posicion de memoria, momento en que los IN empiezan a fallar, por que se enmascaran. En ecss se habia comentado algo, a ver si encuentro el post... No creo que tenga alguna aplicacion practica, pero bueno, al menos conseguiriamos que algunos juegos no funcionasen en el inves, ;-) y probablemente que con un poke lo dejasemos colgadito. > >Otra cosa que hay que emular en este mismo codigo es la memoria > >contenida, > cierto, pero para emular contencion de memoria se tiene que tocar > gran parte (sino todo) del codigo de emulacion del z80... es una > faena que te cagas :) ademas que se tendra que cambiar las funciones > de display para dibujar a pantalla justamente despues de cada opcode bueno, se puede hacer paso a paso, no tiene que hacerse todo de golpe (obiamente hasta que no se haga todo, las demos y demas no funcionaran perfectamente, pero bueno). bueno, voy a dejar de escribir, y a ver si me pongo con el bicho. -- Antes de hablar, mira a ver si tu silencio vale mas que tus palabas. _ Grettings of __ _| |___ __ _ Al...@as... LiNUX USER #66734 Saludos / _` | / -_) _` | http://pagina.de/alea A_...@te... de \__,_|_\___\__,_| MS Messenger: alv...@ho... Para obtener Llave Publica GnuPGP un mail con subject: enviar clave pub |