From: Kak <jb...@ti...> - 2002-09-30 22:48:25
|
three quarters of the same >On Tue, 1 Oct 2002 23:52:02 +0200, Alvaro Alea wrote: >>>...mas paginas... de momento para el +3 ya iria bien) >> >>Pues no se que te diga, =BFsabes que en el +3 puedes hacer que= TODO >sea >>memoria ram? me huelo que solo emulas parte del sistema. (me refiero >>a lo de >>abajo, no a la cantidad de memoria). > >cierto :) >de momento solo tengo emulado el port 7ffd, o sea la paginacion= en >modelos 128 y +2... de hecho cuando he dicho "todos los juegos= de >128" me referia a 128, y no a 128,+2,+2a y +3 ;) perdon por la >confusion. >con el puerto 1ffd (+2a,+3) aun no me he metido, pues prefiero >acabar >lo del sonido ay antes de continuar > > >>La manera rapida pues seria tener por un lado xxx K de memoria= y por >>otro 64K >>y meter y sacar bloques de memoria, se ralentizaria mucho al >>paginar, pero >>luego todo iria mas rapido, el problema es que juegos que= abusen de >>la >>paginacion, p.e. para hacer doble buffer o efectos coloristicos= lo >>van a >>acusar mucho, como ventaja facilita la paginacion de= perifericos con >>paginas >>de diferente tama=F1o. > >ya habia pensado este metodo, y lo tenia implementado y todo,= el >problema es que la paginacion en algunos juegos se usa MUCHO >por ejemplo, el where time stood still pagina unas 25 veces= cada >1/50th de segundo, y eso son 1250 veces por segundo! >en cambio la abadia pagina "aleatoriamente": a veces pagina 3 o= 4 >veces por frame, y a veces se esta medio segundo sin paginar,= segun >le venga. > >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 >la velocidad que ganas (aunque en el caso del wtss yo no estoy >seguro >que sea mas rapido), la pierdes haciendo los ifs para las= paginas 2 >y >5 a cada acceso a memoria > >>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 >>=BFNO? 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 > >la mayoria de juegos 128 que he probado cascan de mala manera si= no >esta implementada la pantalla virtual, no se que demonios haran= :) > >para mas info: >http://www.worldofspectrum.org/faq/tech_128.html#MEM > > >>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) > >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) > > >>Una cosa que yo no tenia clara a la hora de hacerlo es el= tama=F1o 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 :) > >>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 = :( > > >>Otra cosa que hay que emular en este mismo codigo es la= memoria >>contenida, >>... >>estados_T=3Destados_T + 1 >>lee mem >>estados_T=3Destados_T + 1 >>lee MEM >>estados_T=3Destados_T + 1 >>escribe MEM >>estados_T=3Destados_T + 1 > >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 > >>contencion de memoria, junto al refresco de la ram, son dos de= los >>grandes >>misterios que le veo al spectrum. > >cierto :) pero personalmente creo que la contended memory es aun= mas >misteriosa que el refresco :) > >venga, buenas noches :) >Kak |