Ayuda con DEFB confuso.

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
fulas
Jack The Nipper
Mensajes: 141
Registrado: Lun Jul 02, 2007 3:28 pm
Ubicación: En Tenerife.

Ayuda con DEFB confuso.

Mensaje por fulas » Lun Ago 25, 2008 9:10 am

Pues eso que me he encontrado con esto:

Código: Seleccionar todo

; We want a black screen.

       ld a,71             ; white ink (7) on black paper (0),
                           ; bright (64).
       ld (23693),a        ; set our screen colours.
       xor a               ; quick way to load accumulator with zero.
       call 8859           ; set permanent border colours.

; Set up the graphics.

       ld hl,blocks        ; address of user-defined graphics data.
       ld (23675),hl       ; make UDGs point to it.

; Okay, let's start the game.

       call 3503           ; ROM routine - clears screen, opens chan 2.

; Initialise coordinates.

       defb 33,21,15       ; load hl pair with starting coords.No entiendo como carga hl con los valores
       ld (plx),hl         ; set player coords.

       call basexy         ; set the x and y positions of the player.
       call splayr         ; show player base symbol.

; This is the main loop.

mloop  equ $

; Delete the player.

       call basexy         ; set the x and y positions of the player.
       call wspace         ; display space over player.

; Now we've deleted the player we can move him before redisplaying him
; at his new coordinates.

       ld bc,63486         ; keyboard row 1-5/joystick port 2.
       in a,(c)            ; see what keys are pressed.
       rra                 ; outermost bit = key 1.
       push af             ; remember the value.
       call nc,mpl         ; it's being pressed, move left.
       pop af              ; restore accumulator.
       rra                 ; next bit along (value 2) = key 2.
       push af             ; remember the value.
       call nc,mpr         ; being pressed, so move right.
       pop af              ; restore accumulator.
       rra                 ; next bit (value 4) = key 3.
       push af             ; remember the value.
       call nc,mpd         ; being pressed, so move down.
       pop af              ; restore accumulator.
       rra                 ; next bit (value 8) reads key 4.
       call nc,mpu         ; it's being pressed, move up.


; Now he's moved we can redisplay the player.

       call basexy         ; set the x and y positions of the player.
       call splayr         ; show player.

       halt                ; delay.

; Jump back to beginning of main loop.

       jp mloop

; Move player left.

mpl    ld hl,ply           ; remember, y is the horizontal coord!
       ld a,(hl)           ; what's the current value?
       and a               ; is it zero?
       ret z               ; yes - we can't go any further left.
       dec (hl)            ; subtract 1 from y coordinate.
       ret

; Move player right.

mpr    ld hl,ply           ; remember, y is the horizontal coord!
       ld a,(hl)           ; what's the current value?
       cp 31               ; is it at the right edge (31)?
       ret z               ; yes - we can't go any further left.
       inc (hl)            ; add 1 to y coordinate.
       ret

; Move player up.

mpu    ld hl,plx           ; remember, x is the vertical coord!
       ld a,(hl)           ; what's the current value?
       cp 4                ; is it at upper limit (4)?
       ret z               ; yes - we can go no further then.
       dec (hl)            ; subtract 1 from x coordinate.
       ret

; Move player down.

mpd    ld hl,plx           ; remember, x is the vertical coord!
       ld a,(hl)           ; what's the current value?
       cp 21               ; is it already at the bottom (21)?
       ret z               ; yes - we can't go down any more.
       inc (hl)            ; add 1 to x coordinate.
       ret

; Set up the x and y coordinates for the player's gunbase position,
; this routine is called prior to display and deletion of gunbase.

basexy ld a,22             ; AT code.
       rst 16
       ld a,(plx)          ; player vertical coord.
       rst 16              ; set vertical position of player.
       ld a,(ply)          ; player's horizontal position.
       rst 16              ; set the horizontal coord.
       ret

; Show player at current print position.

splayr ld a,69             ; cyan ink (5) on black paper (0),
                           ; bright (64).
       ld (23695),a        ; set our temporary screen colours.
       ld a,144            ; ASCII code for User Defined Graphic 'A'.
       rst 16              ; draw player.
       ret

wspace ld a,71             ; white ink (7) on black paper (0),
                           ; bright (64).
       ld (23695),a        ; set our temporary screen colours.
       ld a,32             ; SPACE character.
       rst 16              ; display space.
       ret

plx    defb 0              ; player's x coordinate.
ply    defb 0              ; player's y coordinate.

; UDG graphics.

blocks defb 16,16,56,56,124,124,254,254    ; player base.


En la parte de "Initialise coordinates" ,defb 33,21,15 ; load hl pair with starting coords., no se como enterpretarla. ¿Alguna idea? Gracias.
Hazlo, o no lo hagas, pero no lo intentes.

utopian
Manic Miner
Mensajes: 219
Registrado: Jue May 10, 2007 2:28 pm

Re: Ayuda con DEFB confuso.

Mensaje por utopian » Lun Ago 25, 2008 9:22 am

Pues es una forma un tanto extraña de hacerlo :?, pero vamos, eso es una sentencia "LD HL, 3861" un poco ofuscada. 33 es el opcode de LD HL, número, y le siguen dos bytes con el número a cargar, que traducido a palabra de 16 bits es 3861.

Y no, no me sé los opcodes de memoria, he tirado de lista :mrgreen:

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Ayuda con DEFB confuso.

Mensaje por mcleod_ideafix » Lun Ago 25, 2008 10:29 am

Lo que no entiendo es por qué usa ahí el DEFB... la instrucción LD HL no es indocumentada, y por otra parte, ese DEFB no tiene ninguna etiqueta que haga pensar que se va a usar para código automodificable.
Claro que también puede que el ensamblador usado sea un poco parco (muy parco!!) ya que para definir una etiqueta de salto, mloop, tiene que hacerlo con equ $, no puede / no sabe que simplemente basta con que haga algo así como "mloop:" a secas, para definirla.

La única razón que se me ocurre para que hubiera puesto LD HL de esa forma, es que se vean bien las coordenadas que está cargando (21,15) por si tuviera que cambiarlas en una supuesta revisión del código, pero vamos, igual le hubiera valido con un LD HL,21+256*15
Web: ZX Projects | Twitter: @zxprojects

Gandulf
Nonamed
Mensajes: 1067
Registrado: Lun May 07, 2007 10:06 pm

Re: Ayuda con DEFB confuso.

Mensaje por Gandulf » Lun Ago 25, 2008 12:27 pm

Pues sí, es raro porque eso se suele usar con las no documentadas (en ensambladores cruzados como Pasmo ya se soportan directamente, sin necesidad de meter a pelo los OpCodes, aunque yo de momento y hasta que empieze algo nuevo los he metido con defines). La explicación más lógica es la que comenta McLeod, que por algun motivo quiera tener bien marcado los valores alto y bajo del registro, aunque desde luego no es necesario meterlo así (salvo que se haya utilizado un ensamblador arcaico que no interprete expresiones como 256*X + Y al asignar a un registro. Quizá sea también el motivo de la definición de etiquetas)

También puede ser alguien acostubrado a meter los opcodes de forma numérica, cosa bastante habitual hace muchos años en la gente que programaba placas con microprocesador y que literalmente picaba todos los opcodes y datos para las EPROM, y que conserve dicha manía; aunque yo creo que más bien se debe al ensamblador que está usando.
Un saludo,

Gandulf

ZXevious
Jack The Nipper
Mensajes: 101
Registrado: Vie Abr 11, 2008 5:37 pm

Re: Ayuda con DEFB confuso.

Mensaje por ZXevious » Lun Ago 25, 2008 2:42 pm

Hola Fulas,

El origen de ese código es de Jonathan Cauldwell :) y es una de las partes para hacer una versión del juego centipede. Me imagino que te lo has encontrado en el "How-To Write Spectrum Games" que por mi parte, recomiendo a todo el que quiera iniciarse en esto de la programación de juegos en spectrum. El manual explica algunas de estas peculiaridades de programación del autor, que lleva haciendo juegos desde el 89.

(http://members.fortunecity.com/jonathan ... d/id5.html)

El how-to no está completo según me comentó su autor por e-mail (falta la parte de hacer música en la AY y alguna otra cosa) y además si quieres hacerle preguntas, en el foro de WOS le encontrarás. Eso sí, ya sabes que en inglés. ¡Es un tipo genial!

Creo recordar que al listado del capítulo 7 le faltaba una etiqueta y que el listado del juego de coche de 16K no fui capaz de echarlo a andar con el PASMO, pero tampoco me maté a ver que pasaba.

La dirección URL de Jonathan es http://members.fortunecity.com/jonathan6/egghead/ Dentro de la web podrás encontrar su dirección de correo por si quieres comentarle personalmente tus dudas, sugerencias, etc...

Un saludo.

fulas
Jack The Nipper
Mensajes: 141
Registrado: Lun Jul 02, 2007 3:28 pm
Ubicación: En Tenerife.

Re: Ayuda con DEFB confuso.

Mensaje por fulas » Lun Ago 25, 2008 8:42 pm

ZXevious escribió:Hola Fulas,

El origen de ese código es de Jonathan Cauldwell :) y es una de las partes para hacer una versión del juego centipede. Me imagino que te lo has encontrado en el "How-To Write Spectrum Games" que por mi parte, recomiendo a todo el que quiera iniciarse en esto de la programación de juegos en spectrum. El manual explica algunas de estas peculiaridades de programación del autor, que lleva haciendo juegos desde el 89.


Pues eso mismo y la verdad es que en calidad de muy novato :oops: me esta siendo de mucha ayuda, aunque con los de RADASTAN, a parte de aprender, te ries un rata, me parece una forma cojonuda de estudias, con buen sentido del humor.


ZXevious escribió:Creo recordar que al listado del capítulo 7 le faltaba una etiqueta y que el listado del juego de coche de 16K no fui capaz de echarlo a andar con el PASMO, pero tampoco me maté a ver que pasaba.


A mi si me compilo con pasmo, incluso estube conduciendo un ratito para probar el tema.

Gracias a todos, con estos tutores que tengo da gusto estudiar ensamblador :D
Hazlo, o no lo hagas, pero no lo intentes.

ZXevious
Jack The Nipper
Mensajes: 101
Registrado: Vie Abr 11, 2008 5:37 pm

Re: Ayuda con DEFB confuso.

Mensaje por ZXevious » Mar Ago 26, 2008 9:52 am

fulas escribió: ... aunque con los de RADASTAN, a parte de aprender, te ries un rata, me parece una forma cojonuda de estudias, con buen sentido del humor.


A mi tambien me gustó mucho. Otro buen manual es el de SRomero en las revistas Magazine ZX.

Un saludo.

fulas
Jack The Nipper
Mensajes: 141
Registrado: Lun Jul 02, 2007 3:28 pm
Ubicación: En Tenerife.

Re: Ayuda con DEFB confuso.

Mensaje por fulas » Mar Ago 26, 2008 5:54 pm

ZXevious escribió:
fulas escribió: ... aunque con los de RADASTAN, a parte de aprender, te ries un rata, me parece una forma cojonuda de estudias, con buen sentido del humor.


A mi tambien me gustó mucho. Otro buen manual es el de SRomero en las revistas Magazine ZX.

Un saludo.

Ese tambien me lo he estudiado, incluso lo estoy encuadernando a medida que lo va publicando, me parece una buena referercia para consultas.
Hazlo, o no lo hagas, pero no lo intentes.

ZXevious
Jack The Nipper
Mensajes: 101
Registrado: Vie Abr 11, 2008 5:37 pm

Re: Ayuda con DEFB confuso.

Mensaje por ZXevious » Mar Ago 26, 2008 9:02 pm

fulas escribió:Ese tambien me lo he estudiado, incluso lo estoy encuadernando a medida que lo va publicando, me parece una buena referercia para consultas.


Pues estás de enhorabuena porque sromero comentó en este foro que tiene las dos últimas partes del curso ya escritas y que las publicará... La siguiente entrega es la pila ...

Fulas, en el foro de Topo Siglo XXI son bienvenidos los programadores noveles para hacer juegos. Esta es la URL http://topoxxi.creatuforo.com por si te quieres apuntar. Yo he empezado así y estoy haciendo mi primer juego.

Un saludo.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados