en realidad esa rutina no funciona del todo bien...el porque se lo explica
perfectamente en la MAP
http://map.tni.nl/articles/fast_loops.php
agregando eso, si funcionaria .... bueno, estás usando en esa rutina, un
registro BC donde B es el byte bajo, y C es el alto.....y no es exacto,
porque no tiene la corrección, que dolor de cabeza para el
programador....!!!
insertate lo siguiente y suprimite los LD que pusiste.
dec bc ;Mystery fast loop calculus
ld e,b
ld b,c
inc b
inc e
O sea
MI_RUTINA_1:
; Y esto no está muy optimizado, lo estoy programando "para que funcione"
; Hacemos que el puntero a VRAM del VDP esté donde queremos
DI
LD A,E
OUT [99h],A
LD A,D
OR 40h
OUT [99h],A
; Hacemos algún apaño
dec bc
ld e,b
ld b,c
inc b
inc e
LD C,98h
; Empezamos el proceso de copia
BUCLE:
OTIR ; Copia datos
DEC E
JR NZ,BUCLE
; Y ya está
EI
RET
De esa manera, en forma perfecta y con absoluta exactitud, le pones en BC
cuantos bytes queres copiar.
----- Original Message -----
From: "Roberto E. Vargas Caballero" <i62vacar(_en_)uco(_punto_)es>
To: <hispamsx(_en_)yahoogroups(_punto_)com>
Sent: Saturday, May 15, 2004 9:37 AM
Subject: Re: [hispamsx] De vuelta On-topic: OPTIMIZACION
2.-Reprogramo la BIOS y consigo algo que funciona mejor y puede ser un
poco
más rápido.
LD HL,ORIGEN_RAM
LD DE,DESTINO_VRAM
LD BC,NUM_BYTES
CALL MI_RUTINA_1
MI_RUTINA_1:
; Y esto no está muy optimizado, lo estoy programando "para que funcione"
; Hacemos que el puntero a VRAM del VDP esté donde queremos
DI
LD A,E
OUT [99h],A
LD A,D
OR 40h
OUT [99h],A
; Hacemos algún apaño
LD E,C
LD C,98h
; Empezamos el proceso de copia
BUCLE:
OTIR ; Copia datos
DEC E
JR NZ,BUCLE
; Y ya está
EI
RET
Pruebalo en un MSX2 veras que risa te da esa rutina ;). En MSX2 hay algo
que se llama mas de 16K de vram y distintas paginas, asi que si no
compruebas el paso de una p.gina a otra vas mal por la vida.
Roberto
*HispaMSX. La mailing-list de MSX en castellano*
Para cualquier duda: hispamsx-owner(_en_)yahoogroups(_punto_)com
Web de lista: http://www.hispamsx.org
Enlaces a Yahoo! Grupos
Para visitar tu grupo en la web, accede a:
http://es.groups.yahoo.com/group/hispamsx/
Para cancelar tu suscripción en este grupo, envía
un mensaje en blanco a:
hispamsx-unsubscribe(_en_)yahoogroups(_punto_)com
El uso que hagas de Yahoo! Grupos está sujeto a
las Condiciones del servicio de Yahoo!:
http://es.docs.yahoo.com/info/utos.html