Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: cybernoid en 16 de Diciembre de 2009, 10:22:10 am



Título: ejecutar comandos copy (MSX2) heeelp
Publicado por: cybernoid en 16 de Diciembre de 2009, 10:22:10 am
Hola,

Vereis, queria hacer unas pruebecillas con los copiando datos de VRAM a VRAM en msx2, he visto que dispone de unas funciones por hard, pero no tengo ni idea de como llamarlas

he visto que esta funcion en la bios BLTVV que permite hacer eso(copiar de vram a vram)... pero la verdad ni puñetera idea de como usarla

para empezar aparentemente hay que pasar por la funcion SUBROM o EXTROM pasandoles en IX la direccion de la funcion deseada en este caso BLTVV

parece que la cosa seria algo asi

;aqui los parametros para BLTVV
ld ix,BLTVV
call subrom

pero bueno, entonces me miro la funcion  BLTVV y aqui viene el mas dificil todavia :P, entre mi pobre nivel de ingles y mi poca experiencia ensamblera me lia una poco

  Function:   transfers data in VRAM area

  Input:   HL register <-- F562H
      The following parameters should be set:

      * SX (F562H, 2)    X-coordinate of the source
      * SY (F564H, 2)    Y-coordinate of the source
      * DX (F566H, 2)    X-coordinate of the destination
      * DY (F568H, 2)    Y-coordinate of the destination
      * NX (F56AH, 2)    number of dots in the X direction
      * NY (F56CH, 2)    number of dots in the Y direction
      * CDUMMY (F56EH, 1)   dummy (not required to be set)
      * ARG (F56FH, 1)   selects the direction and expansion
               RAM (same as VDP R#45)
      * LOGOP (F570H, 1)   logical operation code (same as the
               logical operation code of VDP)

  Output:   the CY flag is reset

  Registers:   all

entiendo que SC,SY,etc,etc son posiciones de memoria, pero no se si pertenecen a la ram o a la vram
creo (si, CREO) que NX y NY hace referencia a el ancho y alto de la imagen, pero no lo tengo claro( eso de "numero de puntos" me despista)


alguien tiene algun ejemplo que me pueda servir?

gracias de antemano

EDIT: adjunto pedacin de codigo que no chuta

Código:
;  MSX2

;---------------------------------------------------------
; ASSEMBLER DIRECTIVES (asMSX)
;---------------------------------------------------------
        .bios           ; Defines MSX BIOS routines
        .page 1         ; Assembly starts at 8000h
        .rom            ; Selected format
        ;.basic
        .db      "MSX2",1Ah
                        ; Text header - not MSX standard
        .start  INIT    ; Program start

INIT:
call    INIGRP
ld a,5
   call CHGMOD
   

      ld hl,0    ; inicio pantalla sc5
   ld b,100   ; repetir 100 veces
      ld a,255
PINTA:                ; dibujo un rallote feo
   call WRTVRM
   inc hl
   djnz PINTA


;copio los parametros de copia en la direccion que toca (teoricamente claro...)
ld de,$F562 ; direccion de los parametros
ld hl,datas
ld bc,15
ldir

; ahora quiero copiarlo en otras coordenadas

   ld hl,$F562 ; direccion de los parametros
   ld ix,$0191 ; BLTVV
   call EXTROM


BUCLE:                      ; dando vueltas como un tonto...
jp BUCLE


; parametros
datas:
db 0,0,0,0   ; sx,sy
db 0,100,0,100 ; dx,dy
db 0,100,0,100  ; nx,ny
db 0 ; dummy
db 0 ; arg
db 0 ; logical operation
; 15 bytes


¿ por que no chuta?   WHYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY?


Título: Re: ejecutar comandos copy (MSX2) heeelp
Publicado por: Jon_Cortazar en 16 de Diciembre de 2009, 03:14:11 pm
Yo siento no poder ayudarte, porque no tengo ni guarra de como van los comandos del VDP del MSX2 :'(, de todas formas te dejo un link a un artículo del MAP donde se trata el tema y que tal vez te de alguna pista: VDP programming tutorial (http://map.grauw.nl/articles/vdp_tut.php) ;)


Título: Re: ejecutar comandos copy (MSX2) heeelp
Publicado por: cybernoid en 16 de Diciembre de 2009, 03:44:55 pm
Yo siento no poder ayudarte, porque no tengo ni guarra de como van los comandos del VDP del MSX2 :'(, de todas formas te dejo un link a un artículo del MAP donde se trata el tema y que tal vez te de alguna pista: VDP programming tutorial (http://map.grauw.nl/articles/vdp_tut.php) ;)

gracias, le pegare un vistazo, aunque mi ingles no vale mucho que se diga :P


Título: Re: ejecutar comandos copy (MSX2) heeelp
Publicado por: cybernoid en 16 de Diciembre de 2009, 05:02:24 pm
parece que he conseguido copiar a traves del VDP, pero atraves de la bios nada :P

bueno, seguire jugando a ver que pasa...

por cierto, al VDP del msx2 tambien hay que dejarle tiempo entre out y out?  si hay que dejarle tiempo ¿como lo calculo?


Título: Re: ejecutar comandos copy (MSX2) heeelp
Publicado por: cybernoid en 17 de Diciembre de 2009, 09:27:52 am
solucionado :P estaba pasando mal los parametros, me di cuenta leyendo el manual del VDP del msx2


Título: Re: ejecutar comandos copy (MSX2) heeelp
Publicado por: ARTRAG en 17 de Diciembre de 2009, 12:02:57 pm
This is from the tutorial and works
Código:
;
;Is supposed to run in screen 5, so you should make a small BASIC loader,
; or call the CHMOD BIOS routine.
;
DoExampleCopy:
xor a ;set vram write base address
ld hl,#8000 ; to 1st byte of page 1...
call SetVDP_Write

ld a,#88 ;use color 8 (red)
FillL1: ld c,8 ;fill 1st 8 lines of page 1
FillL2: ld b,128 ;
out (#98),a ;could also have been done with
djnz FillL2 ;a vdp command (probably faster)
dec c ;(and could also use a fast loop)
jp nz,FillL1

ld hl,COPYBLOCK ;execute the copy
call DoCopy

ret


COPYBLOCK:
DB 0,0,0,1
DB 0,0,0,0
DB 8,0,8,0
DB 0,0,#D0 ;HMMM

;As an alternate notation, you might actually prefer the following:
;
; DW #0000,#0100
; DW #0000,#0000
; DW #0008,#0008
; DB 0,0,#D0



Título: Re: ejecutar comandos copy (MSX2) heeelp
Publicado por: cybernoid en 17 de Diciembre de 2009, 12:33:24 pm
This is from the tutorial and works
Código:
;
;Is supposed to run in screen 5, so you should make a small BASIC loader,
; or call the CHMOD BIOS routine.
;
DoExampleCopy:
xor a ;set vram write base address
ld hl,#8000 ; to 1st byte of page 1...
call SetVDP_Write

ld a,#88 ;use color 8 (red)
FillL1: ld c,8 ;fill 1st 8 lines of page 1
FillL2: ld b,128 ;
out (#98),a ;could also have been done with
djnz FillL2 ;a vdp command (probably faster)
dec c ;(and could also use a fast loop)
jp nz,FillL1

ld hl,COPYBLOCK ;execute the copy
call DoCopy

ret


COPYBLOCK:
DB 0,0,0,1
DB 0,0,0,0
DB 8,0,8,0
DB 0,0,#D0 ;HMMM

;As an alternate notation, you might actually prefer the following:
;
; DW #0000,#0100
; DW #0000,#0000
; DW #0008,#0008
; DB 0,0,#D0


tnx :)

me lo mirare, igualmente ya lo tengo solucionado :)

disculpa que no conteste en ingles, mi ingles escrito es peor que mi ingles leido


Título: Re: ejecutar comandos copy (MSX2) heeelp
Publicado por: MsxKun en 19 de Diciembre de 2009, 04:05:34 pm
parece que he conseguido copiar a traves del VDP, pero atraves de la bios nada :P

bueno, seguire jugando a ver que pasa...

por cierto, al VDP del msx2 tambien hay que dejarle tiempo entre out y out?  si hay que dejarle tiempo ¿como lo calculo?


Pues no hace falta, de hecho se come ristras de outis a pelo... (que me corrijan si me equivoco)