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: 2 Guest(s)