Merge pull request 'traducción_día_6_y_demases' (#5) from jota/compudanzas:traducción_día_6_y_ocb into main

Reviewed-on: #5
This commit is contained in:
sejo 2022-01-12 00:15:12 +00:00
commit ea43a7f5e6
9 changed files with 1761 additions and 27 deletions

View File

@ -43,7 +43,25 @@ también hablamos del uso de la memoria del programa como un espacio para datos
# día 5
¡proximamente!
aquí introducimos el dispositivo de ratón varvara para explorar más posibles interacciones, y cubrimos los elementos restantes de uxntal y uxn: la pila de retorno, el modo de retorno y el modo de retención.
también discutimos posibles estructuras para crear bucles y programas más complejos utilizando estos recursos.
{tutorial de uxn día 5}
# día 6
aquí hablamos de cómo podemos integrar todo lo que hemos cubierto para crear subrutinas y programas más complejos para el ordenador varvara.
basamos nuestra discusión en una recreación del clásico juego pong.
además de utilizar estrategias y fragmentos de código anteriores, cubrimos estrategias para dibujar y controlar sprites de varios tiles, y para comprobar las colisiones.
{tutorial de uxn día 6}
# día 7
¡próximamente!
# índice tentativo

View File

@ -0,0 +1,3 @@
# apéndice A
¡proximamente! traducción en proceso. :)

View File

@ -1018,32 +1018,32 @@ por ejemplo, lo siguiente dividirá el ancho de la pantalla en dos, utilizando e
#01 SFT2
```
### macros HALF
### macros MITAD
para seguir ilustrando el uso de las macros, podríamos definir unas macros HALF y HALF2, utilizando DIV o SFT.
para seguir ilustrando el uso de las macros, podríamos definir unas macros MITAD y MITAD2, utilizando DIV o SFT.
usando DIV:
```
%HALF { #02 DIV } ( numero -- numero/2 )
%HALF2 { #0002 DIV2 } ( numero -- numero/2 )
%MITAD { #02 DIV } ( numero -- numero/2 )
%MITAD2 { #0002 DIV2 } ( numero -- numero/2 )
```
usando SFT:
```
%HALF { #01 SFT } ( numero -- numero/2 )
%HALF2 { #01 SFT2 } ( numero -- numero/2 )
%MITAD { #01 SFT } ( numero -- numero/2 )
%MITAD2 { #01 SFT2 } ( numero -- numero/2 )
```
and use any of them to calculate the center:
```
.Pantalla/ancho DEI2 HALF2 .Pantalla/x DEO2
.Pantalla/alto DEI2 HALF2 .Pantalla/y DEO2
.Pantalla/ancho DEI2 MITAD2 .Pantalla/x DEO2
.Pantalla/alto DEI2 MITAD2 .Pantalla/y DEO2
```
notemos que la macro HALF2 que utiliza SFT2 necesitará un byte menos que la que utiliza DIV2. esto puede o no ser importante dependiendo de tus prioridades :)
notemos que la macro MITAD2 que utiliza SFT2 necesitará un byte menos que la que utiliza DIV2. esto puede o no ser importante dependiendo de tus prioridades :)
## dibujando sprites en posiciones específicas

View File

@ -172,7 +172,7 @@ Controlador/tecla DEI ( lee la tecla y la introduce en la pila )
AND ( aplica un AND a las banderas de la pila, y empuja el resultado a la pila )
```
que la instrucción sea bitwise significa que aplica la operación AND a cada uno de los bits de los operandos.
que la instrucción sea a nivel de bit (o "bitwise") significa que aplica la operación AND a cada uno de los bits de los operandos.
si ambas banderas fueran "verdaderas":
@ -569,7 +569,7 @@ dependiendo de nuestra aplicación, podríamos necesitar permitir que algunos de
en ese caso, ¿cómo podríamos aislar cada uno de los bits para comprobar su estado individualmente?
conoce las máscaras AND a nivel de bits
conoce las máscaras AND a nivel de bits.
## máscara AND

View File

@ -286,7 +286,7 @@ una posible desventaja es que podría ser menos legible. pero una posible ventaj
```
( incrementar un short desde la página cero )
%ZP-INC2 { DUP LDZ2 INC2 ROT STZ2 } ( zp-dirección -- )
%PC-INC2 { DUP LDZ2 INC2 ROT STZ2 } ( pc-dirección -- )
```
## variables en direcciones relativas
@ -402,7 +402,7 @@ el siguiente programa ilustra los puntos anteriores, haciendo que nuestro cuadra
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &pad $2 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
( macros/constantes )
%HALF2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
%MITAD2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
%color-borrar { #40 } ( borrar 1bpp sprite del primer plano )
%color-2 { #4a } ( dibujar sprite de 1bpp con color 2 y transparencia )
@ -418,7 +418,7 @@ el siguiente programa ilustra los puntos anteriores, haciendo que nuestro cuadra
#2ce5 .Sistema/b DEO2
( fijar la Pantalla/y a la mitad de la pantalla, menos 4 )
.Pantalla/alto DEI2 HALF2 #0004 SUB2 .Pantalla/y DEO2
.Pantalla/alto DEI2 MITAD2 #0004 SUB2 .Pantalla/y DEO2
( fijar la dirección del sprite )
;cuadrado .Pantalla/direc DEO2
@ -503,7 +503,7 @@ el siguiente programa nos permite controlar la posición horizontal de nuestro c
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
( macros/constantes )
%HALF2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
%MITAD2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
%color-borrar { #40 } ( borrar 1bpp sprite del primer plano )
%color-2 { #4a } ( dibujar sprite de 1bpp con color 2 y transparencia )
@ -519,7 +519,7 @@ el siguiente programa nos permite controlar la posición horizontal de nuestro c
#2ce5 .Sistema/b DEO2
( fijar la Pantalla/y a la mitad de la pantalla, menos 4 )
.Pantalla/alto DEI2 HALF2 #0004 SUB2 .Pantalla/y DEO2
.Pantalla/alto DEI2 MITAD2 #0004 SUB2 .Pantalla/y DEO2
( fijar la dirección del sprite )
;cuadrado .Pantalla/direc DEO2
@ -826,7 +826,7 @@ la sección "borrar el sprite" no es realmente necesaria en este caso debido a l
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &pad $2 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
( macros/constantes )
%HALF2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
%MITAD2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
%8MOD { #07 AND } ( byte -- byte%8 )
%A-CORTO { #00 SWP } ( byte -- corto )
@ -845,8 +845,8 @@ la sección "borrar el sprite" no es realmente necesaria en este caso debido a l
#2ce5 .Sistema/b DEO2
( fijar Pantalla/x y y a la mitad de la pantalla menos 4 )
.Pantalla/ancho DEI2 HALF2 #0004 SUB2 .Pantalla/x DEO2
.Pantalla/alto DEI2 HALF2 #0004 SUB2 .Pantalla/y DEO2
.Pantalla/ancho DEI2 MITAD2 #0004 SUB2 .Pantalla/x DEO2
.Pantalla/alto DEI2 MITAD2 #0004 SUB2 .Pantalla/y DEO2
( establecer la dirección del sprite )
;animación .Pantalla/direc DEO2

View File

@ -562,7 +562,7 @@ para llamar a la subrutina, podrías hacer algo como lo siguiente
```
#0008 ( empujar x inicial )
.Pantalla/altura DEI2 HALF2 ( empujar y )
.Pantalla/altura DEI2 MITAD2 ( empujar y )
#ff ( empujar longitud de la línea )
;dibujar-linea-horizontal JSR2 ( llamar subrutina )
```

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
# día 7
¡proximamente! traducción en proceso. :)

View File

@ -346,6 +346,7 @@ i used nasu to draw a paddle consisting of 2x3 tiles in 2bpp mode. i will number
2 3
4 5
```
=> https://100r.co/site/nasu.html 100R - nasu
the resulting data is the following:
@ -956,7 +957,7 @@ we get 0! fffe works effectively as "-2"!
we could continue in that way getting more and more "negative" numbers that works thanks to the constrained size of computer memory.
going back to our code, if we initialize our speed with
going back to our code, if we initialize our speed with:
```
#ffff .ball/speed-x STZ2
@ -1079,7 +1080,7 @@ the y coordinate of the bottom wall would be the height of the screen, less the
.ball/y LDZ2 BALL-SIZE ADD2 ( y + ball size )
.Screen/height DEI2
WALL-MARGIN SUB2 ( height - margin )
GTH2 ( is the ball y greater than the wall y? )
GTH2 ( is the ball-y greater than the wall-y? )
,&set-negative-speed JCN
,&continue JMP
@ -1090,7 +1091,6 @@ the y coordinate of the bottom wall would be the height of the screen, less the
### update-ball code so far
our update-ball subroutine looks like the following right now:
```
@ -1192,7 +1192,6 @@ and what happens if both conditions are not met at the same time?
we can let the ball keep moving, but checking that it hasn't crossed the left wall, by comparing with 0000.
the whole x-in-left code would end up looking like:
```
@ -1223,7 +1222,6 @@ the whole x-in-left code would end up looking like:
finish would be a label at the end of the subroutine, and reset is a subroutine that we will discuss later.
this approach of comparing with 0000 is the easiest, but keep in mind that it might not work if you change the ball speed: it could happen that it crosses the wall but with an x coordinate that is never equal to 0.
we can't really check if the x coordinate is less than 0, because as we discussed above, that would actually be a number close to ffff.