Título: En screen 5 Publicado por: jrcp_kun en 01 de Febrero de 2015, 10:03:39 pm estoy probando screen 5 y hago lo siguiente. Genero una imagen sc5 y con bytes gen genero el codigo.
hago esta rutina ld a,5 call chgmod ld hl,data ld de,0 :empieza de 0 hasta 5fff o 65ff dependiendo 192 o 212 ld bc,5fff call LDIRVM data:........... bueno el problema es que solo me coge 16160 bytes del archivo data y los demas pasando. en basic es mas facil porque haces bload"...",s y fuego. pero aqui se traba y no se como hacer para que los lea o los meta en otro slot o lo que sea. Supongo que ha llenado 16kb y no sabe o algo donde escribirlos. Entonces solo me saca en pantalla los 16k leidos una ayudita. Gracias Título: Re:En screen 5 Publicado por: e_sedes en 02 de Febrero de 2015, 10:13:10 pm ¿Estas haciendo un .ROM? Se me ocurre que te sale una rom de 32k y no estas situando los segundos 16k. Si es así, tienes que empezar el programa en la página 1 y configurar la página 2 para que apunte a tu programa. En AsMSX usa la directiva .SEARCH. Échale un ojo al manual o busca por este foro, ya se trató ese tema, si mal no recuerdo.
Un saludo. Título: Re:En screen 5 Publicado por: jrcp_kun en 03 de Febrero de 2015, 05:44:07 pm si lo mirare porque creo que es eso
Título: Re:En screen 5 Publicado por: jrcp_kun en 06 de Febrero de 2015, 01:45:55 pm ahora si alguien me puede explicar como va en asm lo de las paginas de vram ?? set page en basic
como puedo cargar un grafico o lo que sea en una pagina y copiarlo a la visible o alternar pero en asm no en basic. gracias Título: Re:En screen 5 Publicado por: j4mk3 en 08 de Febrero de 2015, 01:59:49 am Esto sería un SET PAGE para ponerla visible:
Código: ; A = Pagina Visible (0-3) SETPAGEVIEW: ; Envio a REG 2 0XX1 1111 sla A sla A sla A sla A sla A or 00011111b out [099h],A ld A,80h+02h ; Reg 2 Bitmap Table out [099h],A ret Y para escribir en VRAM tienes que direccionar a que posición vas a escribir. La Página de VRAM va implicita dentro de la dirección completa en sus 17 bits de dirección. Seteas enviando por el 99h la dirección de VRAM. En esa dirección va implicito la página donde escribes. Puedes entrarlo como yo en un registro de la rutina de poner datos en VRAM como se ve en el codigo siguiente y luego ya a enviar por el 98h los datos gráficos. Como ya sabes, internamente el chip de video va guardando lo que le envies por el 98, de manera contigua, byte tras byte. Código: ; DE = direccion VRAM ; B = Pagina on va Grafic ld A,D and 01000000b ; Bits A15-A13 de direccio VRAM (A15 es page) srl A srl A srl A srl A srl A srl A sla B ; A16-A15 Ve per B or B out [99h],A ld A,14 ; a Registre 14 (A16,A15,A14) or 80h out [99h],A ld A,E ; Bits A7-A0 de direccio VRAM out [99h],A ld A,D ; Bits A13-A8 de direccio VRAM and 00111111b or 40h out [99h],A Título: Re:En screen 5 Publicado por: jrcp_kun en 08 de Febrero de 2015, 03:17:16 pm si pero para escribir en cada pagina como lo hago??
0-69ff es la pantalla de 256x212 o 0-5fff es la pantalla de 256x192. como le digo que escriba en la pagina por ejemplo 1. osea si quiero cargar algo en esa pagina 1 y luego traerla a visible. la hago visible con el reg2sav, si fuera set page 0,1 y la quiero visible seria como set page 1. reg2sav= 0 01 1 1111 correcto?? pero como dibujo en en la pagina 1?? si hago ld hl,grafico ld de, 0 (desde el principio del screen) ld bc,5fffh call LDIRVM como hago para que eso lo tenga en la pagina 1?? y que no se vea solucionado !!!!! Título: Re:En screen 5 Publicado por: jrcp_kun en 08 de Febrero de 2015, 04:57:42 pm ahora siguiente paso es como hacer un copy. he mirado el HMMM del libro pero no acabo de hacerlo rular.
asimismo la rutina GRPRT 0089h que es solo para msx2 no consigo hacerla funcionar Título: Re:En screen 5 Publicado por: jrcp_kun en 08 de Febrero de 2015, 10:22:19 pm j4mk3 :
entonces si quiero copiar en la pagina uno lo que tengo en la pagina 0 por poner un ejemplo ld de,8000h direccion vram ld b,1 pagina 1 .... .... y hago un bucle para la longitud que quiera transferir?? osea volcaria 69ffh. seria asi?? Título: Re:En screen 5 (Comandos VRAM) Publicado por: j4mk3 en 11 de Febrero de 2015, 11:27:51 am Es preferible usar los comandos de VRAM
Mi forma de hacerlo es con una rutina que lee un buffer de datos que tengo en RAM que seteo con los datos que necesita y luego lanzo la rutina que carga esos datos a la VRAM y ejecuto el comando. Te pongo la rutina y un ejemplo. Esta es la rutina para hacer comandos a la VRAM: Código: ; ////////////////////////////////////// ; ///////// _VDPCMD /////////////////// ; ////////////////////////////////////// ; Ejecuta un comando al VDP con datos ordenados en puntero HL ; HL = Puntero de datos de comando ; ( SXL, SXH, SYL, SYH, DXL, DXH, DYL,DYH, ; INCXL,INCXH,INCYL,INCYH, COLO, ARG, CMD) ; Toca : BC,HL _VDPCMD: ; Bucle de espera a bit CE call WAIT_CE ld A,20h ; Comando comença al Reg 20h out [099h],A ld A,80h+11h ; Reg 11h Ini. per enviar bytes seguits a Reg Seguits out [099h],A ld B,15 ld C,09Bh ; Port VDP per indirecte @@LOOP: outi ld A,B cp 0 jp nz,@@LOOP ; Bucle de espera a bit CE call WAIT_CE ret ; ////////////////////////////////////// ; ///////// WAIT_CE /////////////////// ; ////////////////////////////////////// ; Espera a que el bit 0 del R2 de Status estigui a 0 per començar o acabar _VDPCOM WAIT_CE: ld A,02h out [099h],A ld A,80h+0Fh ; Llegim el Reg 02h posant 2 a Reg 0Fh out [099h],A in A,[099h] and 1 jp nz,WAIT_CE ; Abans de marxar recoloquem el REG STATUS 0 a Reg 0Fh ld A,00h out [099h],A ld A,80h+0Fh out [099h],A ret Y en RAM tengo este array de datos declarado. Verás que está comentado lo que significa cada byte: Código: VDPCOMDATA: .ds 15 ; 0: Source XL ; 1: Source XH [Normal a cero si SCR 5] ; 2: Source YL ; 3: Source YH [Page 0-3] ; 4: Destiny XL ; 5: Destiny XH [Normal a cero si SCR 5] ; 6: Destiny YL ; 7: Destiny YH [Page 0-3] ; 8: Width XL ; 9: Width XH [Normal a cero si SCR5] ;10: Height YL ;11: Height YH [Normal a cero si SCR5] ;12: Color Register ;13: Arguments [Habitual 000000-EQ-MAJ = 00h para VRAM<->VRAM] ;14: Comando a ejecutar ; HighSpeed CMD: (Que conozco) ; 000h: Stop ; 0D0h: Copy Rectangle VRAM->VRAM Y esto es lo que haría en el código del juego si quiero copiar cachos de pantalla. ld IX,VDPCOMDATA ld [IX+0], ;....( setear todos los valores que corresponden [desde IX+0 a IX+14] con lo que quiero hacer, coordenadas y tamaños)... ld [IX+14],0D0h ;CMD 0D0h HMMM Copy Rectangle ; Lanzar el comando ld HL,VDPCOMDATA ; Envio CMD a la VRAM ; Aqui realiza los push que necesites guardar (ojo que el siguiente CALL toca registros) call _VDPCMD ; Recupera datos anteriores con POP si hiciera falta. Mirate : http://problemkaputt.de/portar.htm#vdpregisters20h2ehmsx2videocommandregisters Para entender un poco que hace cada dato que se envia a los registros. Te recomiendo tambien la lectura del PDF yamaha_v9938_MSX2.pdf en la página 54 hacia delante. Especialmente la página 62 que es el comando que te interesa de copiar de VRAM a VRAM http://www.textfiles.com/bitsavers/pdf/yamaha/Yamaha_V9938_MSX-Video_Technical_Data_Book_Aug85.pdf Título: Re:En screen 5 Publicado por: jrcp_kun en 11 de Febrero de 2015, 07:20:10 pm he hecho esto y no me copia nada a la pagina 3. me la deja en blanco
Código: ld hl,data ;cargo en pagina 0 ld de,0 ld bc,69ffh call LDIRVM Código: ld ix,VDPCOMDATA ld [ix+0],0 ld [ix+1],0 ld [ix+2],0 ld [ix+3],0 ld [ix+4],0 ld [ix+5],0 ld [ix+6],0 ld [ix+7],3 ld [ix+8],100 ld [ix+9],0 ld [ix+10],100 ld [ix+11],0 ld [ix+12],0 ld [ix+13],0 ld [ix+14],0D0h ld hl,VDPCOMDATA call _VDPCMD Título: Re:En screen 5 Publicado por: j4mk3 en 14 de Febrero de 2015, 06:01:03 pm Puuuues no sabría que decirte. ???
Parecen correctos :( los parámetros para copiar 100x100 pixels de página 0 a página 3. hmm nunca he usado el LDIRVM. De hecho nunca uso nada de la BIOS, siempre la quito. Ya, lo se, mala práctica en el sentido más estricto de compatibilidad MSX :P Supongo que LDIRVM puede hacer eso de copiar en la página 0. Por lo que veo no se si puede ir más allá de ella por el direccionamiento. Si quieres pasame el ASM, te ayudo. Lo compilo y miro a ver que podría ser. Tienes mi mail aquí en el foro. Ah! si hay algún archivo extra...grafico o algo, pasalo tambien. Que pueda compilarlo todo :) A ver si puedo ver que sucede ;) Título: Re:En screen 5 Publicado por: jrcp_kun en 15 de Febrero de 2015, 11:26:07 am la idea es cargo el grafico en la pagina 0. y luego hago un copy a la pagina 3.
ldrivm es la rutina de la bios que copia a la vram un bloque de datos |