Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Radastan mode in ZX Basic
#1
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.
Reply
#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 ...
------------------------------------------------------------
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!
Reply
#3
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!
Reply
#4
Thank you so much, this is quite encouraging !

Looking forward to your new BorIDE.
Reply
#5
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.
Reply
#6
BTW, plot routine works perfectly.
Reply
#7
My apologies. Sprites routine works. I just used it wrongly.
Reply
#8
Big Grin
------------------------------------------------------------
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)