10-24-2016, 10:55 PM
Code:
sub UnoSetSpeed(mode) '0=3.5 Mhz, 1=7 MHz, 2=14 MHz, [3=28 MHz]
out 36411,mode
end sub
Code:
sub RadastanSprite(x as ubyte, y as ubyte,address as uinteger)
' RUTINA DE IMPRESION DE UN SPRITE 8x8 PIXELS
' EN CUALQUIER POSICION DE BYTES (cada byte dos pixels horizontales)
' ENTRADAS:
' D será la posición del cursor vertical en pixels
' E será la posición del cursor horizontal en parejas de pixels
' HL es la posición de memoria donde tenemos el sprite
' SALIDAS: se escribe en el mapa de pantalla
' ADVERTENCIAS: no comprueba límites de pantalla
asm
ld E,(IX+5) ;' get x value
ld D,(IX+7) ;' get y value
LD L,(IX+8) ;' data address
LD H,(IX+9)
ld a, d ;' recuperamos el valor vertical
rrca
rrca ;' rotamos para dejar su valor en múltiplos de 64 (linea, de dos en dos pixels)
and 192 ;' borramos el resto de bits por si las moscas
or e ;' sumamos el valor horizontal
ld e, a ;' e preparado
ld a, d ;' cargamos el valor vertical
rrca
rrca ;' rotamos para quedarnos con los bits altos
and 63 ;' borramos el resto de bits
or 64 ;' nos posicionamos a partir de 16384 (16384=64+0 en dos bytes)
ld d, a ;' d preparado, ya tenemos la posición en pantalla
ld b, 8 ;' Indicamos que vamos a pintar 8 líneas
RadSptDrw:
;' dibujamos 8 pixels (4 bytes)
ld c, 4 ;' Indicamos que vamos a pintar 4 pares de pixels
ldi
ldi
ldi
ldi
ld a, e
add a, 60 ;' incrementamos una línea y retornamos los pixels dibujados
ld e, a
jr nc, sigue
inc d ;' incrementamos D si sale acarrero al incrementar E en 64 bytes
sigue:
djnz RadSptDrw
end asm
end sub
Code:
sub StartRadastanMode()
out 48955,64 'ULAplus reg. $40, bits 0 and 1 set to 1
out 65339,3
if in(65339)<>3
OUT 64571,64
OUT 64827,3
end if
end sub
Code:
sub RadastanSprite10(x as ubyte, y as ubyte,address as uinteger)
' {
' // -------------------------------------------
' // RUTINA DE IMPRESION DE UN SPRITE 10x10 PIXELS
' // EN CUALQUIER POSICION DE BYTES (cada byte dos pixels horizontales)
' // ENTRADAS:
' // D será la posición del cursor vertical en pixels
' // E será la posición del cursor horizontal en parejas de pixels
' // HL es la posición de memoria donde tenemos el sprite
' // SALIDAS: se escribe en el mapa de pantalla
' // ADVERTENCIAS: no comprueba lÃmites de pantalla
' // -------------------------------------------
asm
ld E,(IX+5) ;' get x value
ld D,(IX+7) ;' get y value
LD L,(IX+8) ;' data address
LD H,(IX+9)
ld a, d ;' recuperamos el valor vertical
rrca
rrca ;' rotamos para dejar su valor en múltiplos de 64 (linea, de dos en dos pixels)
and 192 ;' borramos el resto de bits por si las moscas
or e ;' sumamos el valor horizontal
ld e, a ;' e preparado
ld a, d ;' cargamos el valor vertical
rrca
rrca ;' rotamos para quedarnos con los bits altos
and 63 ;' borramos el resto de bits
or 64 ;' nos posicionamos a partir de 16384 (16384=64+0 en dos bytes)
ld d, a ;' d preparado, ya tenemos la posición en pantalla
ld b,10 ;' Indicamos que vamos a pintar 10 lÃneas
RadastanSprite10draw3: ;' dibujamos 10 pixels (5 bytes)
ld c,5 ;' Indicamos que vamos a pintar 5 pares de pixels
ldi
ldi
ldi
ldi
ldi
ld a,e
add a,59 ;' incrementamos una lÃnea y retornamos los pixels dibujados
ld e,a
jr nc, RadastanSprite10sigue3
inc d ;' incrementamos D si sale acarrero al incrementar E en 64 bytes
RadastanSprite10sigue3:
djnz RadastanSprite10draw3
end asm
end sub
Code:
sub rplot(x as ubyte,y as ubyte,color as ubyte)
asm
ld D,(IX+7)
ld E,(IX+5) ;' get x value
rr e ;' quitamos el valor de las unidades (los pixels van de dos en dos por byte)
ld a,0
jr c, rplotnext ;' si es impar no hacemos nada (se dibuja por defecto a la derecha)
ld a,1
rplotnext:
LD L,(IX+9)
ld h,a
ld a, d ;' recuperamos el valor vertical
rrca
rrca ;' rotamos para dejar su valor en múltiplos de 64 (linea, de dos en dos pixels)
and 192 ;' borramos el resto de bits por si las moscas
or e ;' sumamos el valor horizontal
ld e, a ;' e preparado
ld a, d ;' cargamos el valor vertical
rrca
rrca ;' rotamos para quedarnos con los bits altos
and 63 ;' borramos el resto de bits
or 64 ;' nos posicionamos a partir de 16384 (16384=64+0 en dos bytes)
ld d, a ;' d preparado, ya tenemos la posición en pantalla
ld a,(de)
rr h
jr c, rplotnext2
and 240
or l
jr rplotfin
rplotnext2:
and 15
rl l
rl l
rl l
rl l
or l
rplotfin:
ld (de), a
end asm
end sub
------------------------------------------------------------
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!