Matrix

23 views
Skip to first unread message

galil...@gmail.com

unread,
Apr 30, 2016, 1:27:40 PM4/30/16
to reda4
| Matrix
| Adaptacion del programa homonimo en PS2Yabasic. Galileo (2016)

^r4/lib/gui.txt

#mx 80 #my 40 #ms 50
#scr )( 3200
#sxy )( 140

:color | r g b --
  8 << or 8 << or ink ;

:ran | n -- n
  rnd swap mod abs ;

:caracter | x y -- 
  mx * + 'scr + c@ "%k" print ;

:escribe | x y -- 
  0 >? ( my <? ( 2dup gotoxy 2dup caracter ) ) ;

:matrix
  'sxy 1 ( ms <=? )( swap c@+ swap c@+ rot swap
    0 255 0 color escribe 1-
    0 200 0 color escribe 1-
    0 150 0 color escribe 1-
    0 70 0 color escribe 23 -
    0 0 0 color escribe 1-
    2drop swap 1+ ) 2drop
  'sxy 1 ( ms <? )( swap dup 1+ 5 ran 1+ 1 =? ( drop 1 over c+! )( drop )
    dup c@ my 25 + >? ( drop 0 swap c! mx ran swap c!+ 1+ )( 2drop 2 + ) swap 1+ ) 2drop
;

:inicializa 
  'scr 0 ( 3200 <? )( 96 ran 33 + rot c!+ swap 1+ ) 2drop
  'sxy 1 ( ms <? )( swap mx ran swap c!+ my ran swap c!+ swap 1+ ) 2drop ;

: msec rndseed inicializa $000000 paper cls show matrix 'exit >esc< ;


Pablo Hugo Reda

unread,
Apr 30, 2016, 3:42:04 PM4/30/16
to reda4

Ahi vamos

Le cambie el uso de memoria para que sea dinamica segun la pantalla y use la fuente de letra del zx81, spectrum..etc.


| Matrix
| Adaptacion del programa homonimo en PS2Yabasic. Galileo (2016)


^r4/lib/gui.txt
^r4/lib/fontj.txt


#ms 50 | cantidad de hilos
#sxy | hilos
#scr | pantalla
#cntscr | tamaño de pantalla


:color | r g b --
 
8 << or 8 << or ink ;

:ran | n -- n
  rnd swap mod abs
;

:caracter | x y --

  cols
* + scr + c@  emit ;

:escribe | x y --
 
-? ( ; ) rows >=? ( ; )
 
2dup gotoxy 2dup caracter ;

:dibuja | x y -- x y
   
0 255 0 color escribe 1-

   
0 200 0 color escribe 1-
   
0 150 0 color escribe 1-
   
0 70 0 color escribe 23 -

   
0 0 0 color escribe 26 -
   
;

:matrix
  sxy ms
( 1? )( >r
    c@
+ swap c@+ rot swap
    dibuja
   
5 ran 1 =? ( 1 pick4 1- c+! ) drop
    rows
25 + >? ( 0 cols ran pick4 2 - c!+ c! )
   
2drop
    r
> 1- ) 2drop ;

:inicializa
 fontj2
| probar..fonti fonti2 fontj
 clrscr
| ajusta cols y rows segun fuente de letra

 mark
| marca inicio de memoria libre
 here dup
'scr !
 cols rows * dup '
cntscr ! | mem ocupada por pantalla
 
+ dup 'sxy !
 ms 2* + | mem ocupada por x,y
 '
here !

 scr cntscr
( 1? )(

   
96 ran 33 + rot c!+
swap
   
1- ) 2drop
 sxy ms
( 1? )( swap
   cols ran swap c
!+ rows 25 + ran swap c!+
   swap
1- ) 2drop

   
;

: msec rndseed inicializa $000000 paper cls show matrix 'exit >esc< ;


inicializa:

necesito llamar a "clrscr" para que ajuste las variables "rows" y "cols" que son la cantidad de filas y columnas para la fuente seleccionada en la pantalla actual.
una vez hecho esto uso "mark" para guardar el inicio de la memoria libre, la variable "here" queda en este lugar.
"scr" apunta a here y calculo cuanto necesito filas*columnas
incremento here en esto y ahora lo copia a "sxy", hago lo mismo, calculo cuando necestio e incremento "here"

en este programa no tiene sentido guardar here pero en otro que reutilize memoria este es el mecanismo basico, la memoria sera una pila de partes que voy guardando su direccion de comienzo, la idea es puedo desapilar estas direccione con "empty" que seria lo contrario de "mark".

luego recorro la pantalla eligiendo caracteres y las coordenadas para las tiras de numeros.

matrix

voy a recorrer solo una vez las coordenadas, dibujando y actualizandolas a a vez.
con solo cambiar la variable "ms" se obtienen mas hilos.

si en un bucle no utilizo el valor, prefiero contar para atras porque la condicion de salida sera mas simple y si no utilizo la pila r, puedo pasarla aqui para tener menos cosas en la pila d y quizas se simplifiquen los calculos.
trato de evitar tener mucho bucles anidados o condicionales, prefiero cortar la palabra o armar otra palabra.



galil...@gmail.com

unread,
May 1, 2016, 3:41:34 AM5/1/16
to reda4
Muy útil la explicación de tus modificaciones. Por lo demás, he comprobado que con fonti y fontj se producen lapsos en los que la ventana queda vacía. 

Pablo Hugo Reda

unread,
May 1, 2016, 9:56:55 AM5/1/16
to reda4
yo puse la variable ms en 200 ya que con la pantalla mas grande necesita mas "hilos"

galil...@gmail.com

unread,
May 2, 2016, 11:39:33 AM5/2/16
to reda4
He provado valores superiores de ms y persiste el problema. Con mi código esto no pasa.

Pablo Hugo Reda

unread,
May 2, 2016, 12:14:43 PM5/2/16
to re...@googlegroups.com
Proba la version que esta en el sitio, 

a mi me funciona bien (1024x600)​

galil...@gmail.com

unread,
May 3, 2016, 11:34:10 AM5/3/16
to reda4
Estaba usando la versión que publicaste aquí, no la que subiste a la distribución.
Reply all
Reply to author
Forward
0 new messages