GrayBars

16 views
Skip to first unread message

galil...@gmail.com

unread,
Apr 9, 2016, 2:26:13 PM4/9/16
to reda4
Esto es como una especie de "carta de ajuste" de las que se usan para sintonizar bien una imagen de televisión o video. Y una buena excusa para seguir practicando reda4.

^r4/lib/gui.txt

#mitad 0

:mitad? mitad 0? ( drop dup 8 * sw swap / 'mitad ! )( 2 / 'mitad ! ) ;

:swm sw mitad / ;

:color dup dup 8 << or 8 << or ink ;

:selcol
  2dup * pick3 2 mod 1? ( drop 255 swap - )( drop ) color ;

:rectang  pick2 1 - sh 4 / * >r dup mitad * >r pick2 sh 4 / * >r dup 1+ mitad *
  r> r> r> cajaf ;

:barras 0 ( swm <? )( selcol rectang 1+ ) 2drop ;
 
:dibuja 1 ( 4 <=? )( mitad? 255 swm / barras 1+ ) drop ;

: clrscr dibuja show 'exit >esc< ;


Pablo Hugo Reda

unread,
Apr 10, 2016, 10:10:11 AM4/10/16
to reda4
Galileo

Impecable lo tuyo, existen formas de hacerlo mas rápido pero no tiene que ver con la programación sino con diferentes conversiones que es posible hacer.
Pero esto a veces confunde al lector del código.

:selcol
 
2dup * pick3 1 and? ( drop 255 xor )( drop ) color ;

Quizás yo agregaría un comentario en la definición con la descripción de la pila, para que sea mas fácil de seguir.

galil...@gmail.com

unread,
Apr 10, 2016, 4:13:59 PM4/10/16
to reda4
Me gustaría una explicación un poco más detallada.

Pablo Hugo Reda

unread,
Apr 10, 2016, 4:55:50 PM4/10/16
to reda4
Si

cuando estas tomando el resto de dividir por 2 estas fijandote en si esta prendido el bit 1, las divisiones por potencias de dos son corrimientos de bits
2 / es 1 >>
4 / es 2 >>
8 / es 3 >>
y el resto es justamente los bits que quitaste.
Por eso preguntar si esta prendido el bit 1
1 and?
es preguntar si un numero es par o no. que es lo que haces!! sin necesidad de un calculo mas.

El reemplazo del - por el xor no tiene tanto impacto como lo anterior, simplemente invierte los bits y queda la misma operacion que la resta.
El compilador hace desaparecer muchas palabras de movimiento de pila, asi que no es necesario preocuparse tanto.



galil...@gmail.com

unread,
Apr 11, 2016, 11:50:51 AM4/11/16
to reda4
Lo de la división lo entiendo, pero ¿quieres decir que, aunque yo directamente no optimize como tú explicas, el compilador lo hace de forma automática?

Pablo Hugo Reda

unread,
Apr 11, 2016, 7:31:03 PM4/11/16
to reda4
Si, actualmente no lo hace, el proximo compilador si.
Reply all
Reply to author
Forward
0 new messages