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
, 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
; 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?