Karoshi MSX Community
05 de Julio de 2021, 12:56:57 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: En screen 5  (Leído 5626 veces)
0 Usuarios y 1 Visitante están viendo este tema.
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« : 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

En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #1 : 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.
En línea

sempre fun un valente corredor
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #2 : 03 de Febrero de 2015, 05:44:07 pm »

si lo mirare porque creo que es eso
En línea
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #3 : 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
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #4 : 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
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #5 : 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 !!!!!



« Última modificación: 08 de Febrero de 2015, 03:57:54 pm por jrcp_kun » En línea
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #6 : 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


En línea
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #7 : 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??

En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #8 : 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
   
   
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #9 : 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
« Última modificación: 11 de Febrero de 2015, 07:22:14 pm por jrcp_kun » En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #10 : 14 de Febrero de 2015, 06:01:03 pm »

Puuuues no sabría que decirte. Huh
Parecen correctos  Sad 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  Tongue
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 Smiley

A ver si puedo ver que sucede  Wink
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #11 : 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

En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!