ZX-Uno - kit de programación modo Radastaniano

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
na_th_an
Amiga 1200
Amiga 1200
Mensajes: 1270
Registrado: 10 Oct 2012, 11:17
Sistema Favorito: (Otro)
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Sega Master System
Gracias dadas: 18 veces
Gracias recibidas: 12 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor na_th_an » 27 May 2015, 14:44

(perdón por el off-topic)

La verdad es que sí que recuerdo que entre mi círculo de amigos de la facultad la asignatura era un hueso. Sin embargo, mi compañero de piso Phobeous (con quien hice Phantomas Uprising) y yo, que veníamos de frikear bien en nuestros años mozos con los 8 bits (él en CPC, yo en Spectrum) la disfrutamos bastante porque por aquellos entonces nos flipaban las demos de MSDOS y hacíamos nuestros pinitos con los plasmas y los rotozoomers e intentábamos meternos de cabeza a hacerlos en ensamblador. Nos gustaban las cosas a bajo nivel y la asignatura le daba bastante caña al ensamblador. Además, las prácticas de microcontroladores nos parecían muy interesantes.

Al final terminamos la asignatura con un sobresaliente y nos hartamos de trastear... Pero entiendo que para un alumno que llegue a la carrera sin saber qué es un número hexadecimal le resulte dura.

Avatar de Usuario
Haplo
MSX Turbo R
MSX Turbo R
Mensajes: 276
Registrado: 14 Abr 2014, 22:24
Sistema Favorito: PC
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Nintendo NES/Clónica
Ubicación: Ciudad Real
Gracias dadas: 20 veces
Gracias recibidas: 5 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor Haplo » 27 May 2015, 18:14

Sí, si ya digo que leí lo que había sobre el tema y lo busqué en los foros, pero se conoce que soy más torpe de lo que pensaba y no funciona como pienso yo que tiene que hacerlo. Así que nada, esta noche si puedo voy a ver si me aclaro haciendo un programita que me revele la organización de la pila y los registros cuando se llama a una function, sub, sea fastcall o no. (si alguien se atreve le estaría agradecido :mrgreen: )

Por cierto, no sé si es porque me acabo de registrar en el foro de boriel, pero los mensajes que envío no se muestran, me aparecen como "pendientes de aprobación" desde hace días, así que poca ayuda puedo pedir allí.

Avatar de Usuario
na_th_an
Amiga 1200
Amiga 1200
Mensajes: 1270
Registrado: 10 Oct 2012, 11:17
Sistema Favorito: (Otro)
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Sega Master System
Gracias dadas: 18 veces
Gracias recibidas: 12 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor na_th_an » 27 May 2015, 18:28

Lo tienes, más o menos, en mi post, pero es algo así, por ejemplo:

Código: Seleccionar todo

Sub prueba (uByte x, uByte y, uByte color)
    Asm
        ld a, (ix + 5)    ; x
        ld b, (ix + 7)    ; y
        ld c, (ix + 9)    ; color
    End Asm
End Sub


O, por ejemplo:

Código: Seleccionar todo

Sub prueba2 (uByte a, uInteger b)
    Asm
        ld b, (ix + 5) ; a
        ld l, (ix + 6)
        ld h, (ix + 7) ; b (LSB, MSB)
    End Asm
End Sub


Funciona así, para el parámetro "iésimo" (con i = 1, 2, 3...)

- Si es de 8 bits (uByte, Byte), está en (ix + 3 + 2 * i)
- Si es de 16 bits (uInteger, Integer), el LSB está en (ix + 2 + 2 * i) y el MSB en (ix + 3 + 2 * i)

O, más sencillo:

Código: Seleccionar todo

Sub Fastcall prueba3 (uByte p1, uByte p2, uByte p3)
Asm
    ; p1 está en el registro "A" porque ponemos "Fastcall"
    ; Ahora, en orden:
    pop bc   ; dirección de retorno
    pop hl    ; parámetro p2
    pop de   ; parámetro p3
    push bc  ; hay que poner la dirección de retorno de nuevo en la pila

End Asm
End Sub


O bien

Código: Seleccionar todo

Sub Fastcall prueba3 (uInteger p1, uByte p2)
Asm
    ; p1 está en el registro "HL" porque ponemos "Fastcall" y p1 es de 16 bits
    ; Ahora, en orden:
    pop bc   ; dirección de retorno
    pop de   ; parámetro p2
    push bc  ; hay que poner la dirección de retorno de nuevo en la pila

End Asm
End Sub


Asín es, no tiene mucho más.

Avatar de Usuario
Haplo
MSX Turbo R
MSX Turbo R
Mensajes: 276
Registrado: 14 Abr 2014, 22:24
Sistema Favorito: PC
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Nintendo NES/Clónica
Ubicación: Ciudad Real
Gracias dadas: 20 veces
Gracias recibidas: 5 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor Haplo » 27 May 2015, 18:58

Gracias na_th_an! Lo probaré esta noche.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 7 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor antoniovillena » 27 May 2015, 21:12

Exacto. Yo tengo algunos ejemplos en FASE. Lo mejor es hacer todas las funciones FASTCALL, ya que si sólo tienen un parámetro no tienes que manipular la pila, y si tienen más de uno te ahorras un POP. Te pongo un par de funciones del engine por si te valen, pero con lo que te ha explicado na_th_an es suficiente:

Código: Seleccionar todo

sub FASTCALL pausa( time as uinteger )
  asm
loop1:  ld      bc, 21
loop2:  djnz    loop2
        dec     c
        jr      nz, loop2
        dec     hl
        ld      a, l
        or      h
        jr      nz, loop1
  end asm
end sub


Código: Seleccionar todo

sub FASTCALL PrintStr( source as uinteger, xy as uinteger )
  asm
        pop     af
        pop     de
        push    af
        push    hl
        pop     ix
        ld      hl, ($5c00)
print:  ld      a, e
        and     $18
        or      $40
        or      h
        ld      h, a
        ld      a, e
        rrca
        rrca
        rrca
        and     $e0
        add     a, d
        ld      l, a
print1: ex      de, hl
        ld      a, (ix+0)
        inc     ix
        add     a, a
        ret     z
        ld      l, a
        ld      h, $0f
        add     hl, hl
        add     hl, hl
        ld      b, 4
print2: ld      a, (hl)
        ld      (de), a
        inc     l
        inc     d
        ld      a, (hl)
        ld      (de), a
        inc     l
        inc     d
        djnz    print2
        ld      hl, $f801
        add     hl, de
        jr      print1
  end asm
end sub


Por cierto el ret del final no lo pongas nunca, lo hace el compilador automáticamente.

Avatar de Usuario
Haplo
MSX Turbo R
MSX Turbo R
Mensajes: 276
Registrado: 14 Abr 2014, 22:24
Sistema Favorito: PC
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Nintendo NES/Clónica
Ubicación: Ciudad Real
Gracias dadas: 20 veces
Gracias recibidas: 5 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor Haplo » 28 May 2015, 01:05

Me he tenido que pelear de lo lindo con varias cosillas aparte de los push, pop y non stop pero al final funciona:

radok.JPG
radok.JPG (35.83 KiB) Visto 1242 veces



Mañana limpiaré el guarreo de código que tengo de hacer pruebas y lo subo para que le echéis un ojito.
A dormir!

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: Nintendo NES/Clónica
Ubicación: Córdoba-Jaén
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor radastan » 28 May 2015, 08:59

¡Oleeeeeee!

Pues no olvides poner las rutinas definitivas en otro hilo al efecto, uno que se llame "Kit ZX Basic para ZX Uno" o similar. Hay que promocionar esto para que empiece a coger carrerilla.

A mi me han puteado esta semana y estoy de sol a sol modificando el funcionamiento de una planta de biocombustible, una putada porque ya tengo todo lo necesario para hacer algún juego chorra. A ver si mañana, que tengo el día libre, puedo sentarme y hacer aunque sea un mojoncillo para los que van a Retromadrid Days dentro de una semana.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
na_th_an
Amiga 1200
Amiga 1200
Mensajes: 1270
Registrado: 10 Oct 2012, 11:17
Sistema Favorito: (Otro)
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Sega Master System
Gracias dadas: 18 veces
Gracias recibidas: 12 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor na_th_an » 28 May 2015, 14:11

¿Qué emuladores que funcionen en Windows soportan esto? ¿Los de A. Villena, por ejemplo?

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5310
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 46 veces
Contactar:

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor mcleod_ideafix » 28 May 2015, 18:15

Yo estoy intentando portar a Windows el ZEsaurUX de César, que tiene soporte de ULAplus y modo Radastaniano
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Haplo
MSX Turbo R
MSX Turbo R
Mensajes: 276
Registrado: 14 Abr 2014, 22:24
Sistema Favorito: PC
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Nintendo NES/Clónica
Ubicación: Ciudad Real
Gracias dadas: 20 veces
Gracias recibidas: 5 veces

Re: ZX-Uno - kit de programación modo Radastaniano

Mensajepor Haplo » 28 May 2015, 19:27

mcleod_ideafix escribió:Yo estoy intentando portar a Windows el ZEsaurUX de César, que tiene soporte de ULAplus y modo Radastaniano


Ufff, si lo consigues tienes una cerveza tamaño familiar pagada en Retromadrid!
No te imaginas cómo tengo el dedo de sacar/meter la SD entre el portátil y el ZXuno para hacer pruebas...


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 7 invitados