Posts: 8
Threads: 4
Joined: Oct 2016
Reputation:
0
Hi everyone !
I'm new to this forum. Been using Boriel's Basic for about a year and now that I own a ZXUNO would like to use the Radastan Mode for making simple games.
I've read an old topic with a Plot routine. Are there more I could use? I know there is a kit in C by Radastan himself, but I'd be happy if I could continue programming with ZX Basic.
Thanks in advance and THANK YOU Boriel for bringing me back the joy of writing programs for my beloved ZX Spectrum.
Posts: 615
Threads: 49
Joined: Feb 2009
Reputation:
2
I adapted the PLOT routine from Z88dk to ZXBC and also 8x8 and 10x10 PUT. (No transparency. This was not made in Assembler). Also the new version of BorIDE will support ZesareUX Emulator, which emulates the Radestan Modes and SPECTRA. So this will be suitable to develop also for Spectrum Next.
Will add the routines here later. Too much work ...
Posts: 615
Threads: 49
Joined: Feb 2009
Reputation:
2
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
Posts: 8
Threads: 4
Joined: Oct 2016
Reputation:
0
Thank you so much, this is quite encouraging !
Looking forward to your new BorIDE.
Posts: 8
Threads: 4
Joined: Oct 2016
Reputation:
0
Hello!
I've tried and tried the Radastan Sprites code, it doesn't seem to work. Coordinates are right, but it puts nonsense pixels on the screen and the sprite data seems random. I'm afraid it's me who doesn't use it properly. Could anyone post an example of code to put a sprite in Radastan Mode using the above routines ?
Thanks in advance for your help.
Posts: 8
Threads: 4
Joined: Oct 2016
Reputation:
0
BTW, plot routine works perfectly.
Posts: 8
Threads: 4
Joined: Oct 2016
Reputation:
0
My apologies. Sprites routine works. I just used it wrongly.
Posts: 615
Threads: 49
Joined: Feb 2009
Reputation:
2
|