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 |
From: Kak <jb...@ti...> - 2002-10-03 16:31:01
|
On Wed, 2 Oct 2002 16:00:33 +0200, Alvaro Alea wrote: >cierto, desde luego el metodo escogido es el mas conveniente. creeme, yo pense lo mismo que tu, lo implemente, y cuando ya= estaba todo hecho vi el pequenyo problema que no habia sabido ver :) y seguramente no sere ni el primero ni el ultimo en hacerlo ;) >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) >=BFencontaria FFh? mmmm diria que no me he enterado de nada XDDDDD tu plantealo asi: es independiente de como pagines la ram tanto= en +2,+2a y +3: la pantalla no esta en la posicion 16384, sino que= esta al inicio del banco 5 (o 7 si es la shadow) de RAM. o sea, si en el bloque 16384-32768 pudieras paginar ROM (que= diria que no se puede de ninguna manera), la imagen no se cogeria de la= rom, sino que se cogeria del banco 5 (o 7). Si en la zona 16384-32768 pones la pagina 1, la pantalla se sigue cogiendo del= banco 5 (o 7) si pones el banco 7 en la zona 16384-32768, la pantalla SIGUE= estando en la RAM 5, a no ser que le digas que es la pantalla shadow la= que quieres ver. resumiendo: da igual que haya de 16384-32768. se coge de RAM5 o= de RAM7 >Cuando dices "si no esta implementada" te refieres a que= siempre >haya una >pagina fija en esa posicion? no, por no implementada me refiero a que el programa "cambia" a pagina shadow, pero el emulador no sabe que es eso y sigue con la= pantalla de siempre (ram5) >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. lo dicho antes: la paginacion y la pantalla visible son= totalmente independientes >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=F1o de la memoria contenida. si yo no digo que no :) pero hacerlo fielmente y hacerlo rapido a veces son= contradictorios, y este es uno de los casos :) vosotros decidid como lo quereis= ;) >Hay que decidir el tama=F1o. >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. en eso de decidir tamanyos que meta baza Santi, que es el jefe= del proyecto :) >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. vaya, no tenia ni idea de esto... un poco chapuzero no? :) ya mirare a ver si encuentro alguna cosa al respecto un saludo :) Kak |
From: Alvaro A. <A_...@te...> - 2002-10-03 17:46:26
|
BUENOS DIAS!!! Y entonces, va Kak y dice ¿Re: [Aspectrum-devel] Re: Memoria, era Re: HOLA!!!!? > On Wed, 2 Oct 2002 16:00:33 +0200, Alvaro Alea wrote: > lo dicho antes: la paginacion y la pantalla visible son totalmente > independientes Bueno, creo que ya me he enterado y lo empiezo a tener mas claro, (mas o menos, ya dare mas la lata, ya...) > si yo no digo que no :) > pero hacerlo fielmente y hacerlo rapido a veces son contradictorios, > y este es uno de los casos :) vosotros decidid como lo quereis ;) Lo he estado pensando y lo de la memoria contenida vale mas la pena olvidarlo por ahora, hay que reescribir el emulador z80 enterito. y creo que vale mas que las rutinas de dibujo acedan directamente a la memoria. > >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. > en eso de decidir tamanyos que meta baza Santi, que es el jefe del > proyecto :) Ah!!!, explendida idea, ademas acabo de leer un comentario de www.speccy.org que dice que se va a dedicar mas en profundidad a aspectrum, asi que, que empieze... X-D > >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. > vaya, no tenia ni idea de esto... un poco chapuzero no? :) > ya mirare a ver si encuentro alguna cosa al respecto bastante, pero como se supone que nadie tendria la peregrina idea de escribir en la ROM, pues... seguro que se ahoraron algun chip y $$$ con la tonteria esa. mira en las groups.google.com por que en eccs se hablo de eso y de otro fallos/features del inves, p.e. el poke que jode la ula y otros... Espero tener preparado el codigo para principios de la siguiente semana ¿Tu tenias el DJGPP instalado? es que me gustaria subir a sourceforge binarios de DOS/Win32/Linux Tenia algo mas que comentar pero no me acuerdo, bueno, otra vez sera... -- "I find it in-ter-es-ting, A noun's a person, place, or thing..." _ 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 |
From: Kak <jb...@ti...> - 2002-10-03 21:39:16
|
On Fri, 4 Oct 2002 19:43:32 +0200, Alvaro Alea wrote: >Lo he estado pensando y lo de la memoria contenida vale mas la= pena >olvidarlo >por ahora, hay que reescribir el emulador z80 enterito. >y creo que vale mas que las rutinas de dibujo acedan= directamente a >la memoria. estoy totalmente de acuerdo :) siempre se esta a tiempo de incluir esto, y antes que= perfeccionar la emulacion (el 99.% de las cosas van bien sin contended) quizas= seria mejor hacerlo mas atractivo para el usuario de a pie, y para= tener alternativas al xzx. eso si, diria que cuando incluyamos contended memory, olvidate de= verlo a 50fps en tu p166 :( ... cosa que me plantea una duda:= para meter un switch contended emulation on/off, tendriamos que= mantener las dos emulaciones (la antigua/actual y la nueva/proyectada) o a= alguien se le ocurre alguna otra forma? >Ah!!!, explendida idea, ademas acabo de leer un comentario de >www.speccy.org >que dice que se va a dedicar mas en profundidad a aspectrum,= asi >que, que >empieze... X-D venga, le esperamos :) >bastante, pero como se supone que nadie tendria la peregrina= idea de >escribir en la ROM, pues... seguro que se ahoraron algun chip y= $$$ >con la tonteria esa. cierto, el $$$ mandaba en esa epoca. Y por desgracia en esta= tambien :) >Espero tener preparado el codigo para principios de la= siguiente >semana >=BFTu tenias el DJGPP instalado? > >es que me gustaria subir a sourceforge binarios de= DOS/Win32/Linux yo tengo djgpp pero no tengo el mingw32, con lo que podria= compilar el de MSDOS. el problema es que tengo el djgpp 2.95, y por algun bug raro me= peta de mala manera al compilar el z80.c con optimizaciones, con lo= que preferiria que alguien con otra version superior lo compilara, ya= que sin optimizaciones va como un poquiiillo mas lento :) >Tenia algo mas que comentar pero no me acuerdo, bueno, otra vez >sera... pues otra vez sera :) yo si que quiero comentar otra cosa... he estado trabajando con= unas funcioncitas para recoger parametros de un fichero (al estilo del= ini de cualquier emulador/aplicacion) para el zxdeb. Creeis que= la configuracion mediante .ini es mejor que la configuracion= mediante linea de parametros? un saludo :) Kak |
From: Alvaro A. <A_...@te...> - 2002-10-03 23:26:39
|
BUENOS DIAS!!! Y entonces, va Kak y dice ¿Re: [Aspectrum-devel] Re: Memoria, era Re: HOLA!!!!? > siempre se esta a tiempo de incluir esto, y antes que perfeccionar la > emulacion (el 99.% de las cosas van bien sin contended) quizas seria > mejor hacerlo mas atractivo para el usuario de a pie, y para tener > alternativas al xzx. cierto > eso si, diria que cuando incluyamos contended memory, olvidate de > verlo a 50fps en tu p166 :( ... cosa que me plantea una duda: para jasp, hace tiempo que me olvide, al menos bajo linux maximo 30 fps. tengo que probar bajo win32, a ver cuanto da... > meter un switch contended emulation on/off, tendriamos que mantener > las dos emulaciones (la antigua/actual y la nueva/proyectada) o a > alguien se le ocurre alguna otra forma? Humm, no, son cosas separables, el problema de la emulacion z80 actual es que emula instruccion completa por instruccion completa, asi que nunca conseguirmos precision a nivel de estado_t por que el programa salta 4,8,12 los que necesite en cada instruccion. Esto no solo afecta a la memoria contenida, afecta al dibujado de pantalla, afecta al bucle principal, afectara cuando se implemente el tzx, etc... La contencion de memoria es otra cosa, muy sencillita de implementar, simplemente en cada scanline, en determinado estado_t, si se acede a la segunda pagina de memoria, se gasta un estado_t mas. osea dos lineas añadidas a readmen y writemem. sencillo pero muy lento (alguna operacion matematica y varias comparaciones cada vez que se acede a memoria, 2-3 veces de media por instruccion, calcula) asi que a la hora de implementarlo hacemos que writemem sea un puntero a funcion, y luego tenemos writemem_no_conte y writemem_si_conte segun queramos contencion de memoria apuntamos a una u a otra. lo mismo para readmem. ¿facil no? X'DDDDD El problema es que necesitamos saber exactamente en que estado t, se produce el acesso a memoria, pues si no no vale para nada la emulacion, por que no contendra lo adecuado, asi que lo primero que necesitamos es que el z80 emule exactamente los estados_t que le digas. bueno, eso mas o menos, habria que meditar las cosas un poco mas, pero creo que los tiros van por ahi. > >Espero tener preparado el codigo para principios de la siguiente > >semana > >¿Tu tenias el DJGPP instalado? > >es que me gustaria subir a sourceforge binarios de DOS/Win32/Linux > > yo tengo djgpp pero no tengo el mingw32, con lo que podria compilar > el de MSDOS. > el problema es que tengo el djgpp 2.95, y por algun bug raro me peta > de mala manera al compilar el z80.c con optimizaciones, con lo que > preferiria que alguien con otra version superior lo compilara, ya que > sin optimizaciones va como un poquiiillo mas lento :) ok, a ver si lo busco y lo instalo, es que me daba una pereza... > >Tenia algo mas que comentar pero no me acuerdo, bueno, otra vez > >sera... > pues otra vez sera :) pcierto, puedes pasarme el ghost'n'goblins en snapshop o .tap es que juraria que lo tengo, pero no doy con el, y en wos no lo encuentro. > yo si que quiero comentar otra cosa... he estado trabajando con unas > funcioncitas para recoger parametros de un fichero (al estilo del > ini de cualquier emulador/aplicacion) para el zxdeb. Creeis que la > configuracion mediante .ini es mejor que la configuracion mediante > linea de parametros? No es que sea mejor, es que tienen que haber los dos, ejemplos: un parametro para definir el lenguaje por defecto, pues eso tendria que ir en un ini, seria un coñazo tener que llamar "aspectrum -l es" otros ejemplos directorios por defecto, resolucion... En cambio otras cosas, p.e. que active la emulacion de gunstick, pues son mejor en linea de parametros, p.e. si haces un frontend tipo mame y quieres que carge asi que en mi opinion lo mejor era tener todo por duplicado. juraria que allegro tiene rutinas para facilitar eso, lo que no se es si eso te sirve a ti con el zxdeb. -- WINDOWS 2050, AHORA CON MULTITAREA EN REALIDAD VIRTUAL!! _ 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 |
From: Kak <jb...@ti...> - 2002-10-04 10:32:08
|
On Sat, 5 Oct 2002 01:24:30 +0200, Alvaro Alea wrote: >jasp, hace tiempo que me olvide, al menos bajo linux maximo 30= fps. >tengo que probar bajo win32, a ver cuanto da... la verdad es que la grandisima mayoria de juegos no van a 50fps= ni por casualidad :) por poner un ejemplo, el batman de Jon Ritman,= que es probablemente mas o menos el juego que mas conozco :) ) iba a= 10fps. otra cosa son los efectos concretos de ciertos juegos,= especialmente en los menus, que entonces si que si no van a 50fps algunos= efectos se pierden, pero bueno, que se le va a hacer :) me parece recordar que tony brazil (con su p150) me prob=F3 el= emulador con sonido (pero sin emulacion 128) y dijo que le iba a 50 o algo= muy cercano a 50. >Humm, no, son cosas separables, el problema de la emulacion z80 >actual es que >emula instruccion completa por instruccion completa, asi que= nunca >conseguirmos precision a nivel de estado_t por que el programa= salta >4,8,12 >los que necesite en cada instruccion. ...... >contendra lo adecuado, asi que lo primero que necesitamos es que= el >z80 emule >exactamente los estados_t que le digas. > >bueno, eso mas o menos, habria que meditar las cosas un poco= mas, >pero creo >que los tiros van por ahi. meditemos pues, hermanos ;) >ok, a ver si lo busco y lo instalo, es que me daba una= pereza... hombre, con una conexion rapida es un plisplas, pero si tienes un= modem 56k y una conexion tan eficiente como la mia... buf... da= mas pereza aun que buscarlo ;) >pcierto, puedes pasarme el ghost'n'goblins en snapshop o .tap es= que >juraria >que lo tengo, pero no doy con el, y en wos no lo encuentro. mirare de buscarlo y te lo envio directamente a tu correo >No es que sea mejor, es que tienen que haber los dos, ejemplos: .... totalmente de acuerdo :) >juraria que allegro tiene rutinas para facilitar eso, lo que no= se >es si eso >te sirve a ti con el zxdeb. si, serviria, pero prefiero mantenerlo independiente de allegro= por si acaso. Ademas son solo 4 funcioncillas tontas, para hacerlo generico, y es el programa quien tiene que llamar las funciones= para coger los parametros que quiera un saludo :) Kak |