Bienvenido, Invitado. Por favor Entra
Elije Idioma:
Retrocomputación
09.09.2010 a las 03:50:06
Índice Ayuda Buscar Entrar


Páginas: 1 2 3 
Enviar Imprimir
Sabía Ud. que... (Leído 2558 veces)
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #25 - 04.12.2009 a las 09:17:20
 
Bonus de viernes:

VUMETRO  Sonrisa

Código:
10 LET T=USR "A"
15 LET E$="############################"
20 FOR N=T TO T+17:READ A
30 POKE N,A: NEXT N
40 LET L=USR T
50 LET L=INT((255-L)/9)+1
60 PRINT AT 11,0; E$ ( TO L)
70 GOTO 40
80 DATA 1,0,255,17,0,0,219,254,203,119,32,1,19,16,247,66,75,201


Saludos y buen finde.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #26 - 21.12.2009 a las 11:42:02
 
Hola a todos.

Perdón por la demora (y deframbuesa  Mueca ) Cuac!!

Arranco con una rutina de INPUT un poco mas compleja que la que venia en el BASIC del SPECTRUM.



Código:

30 let a=0:z$=""
35 for n=1 to len t$: print at f,c+n-1;t$(n);"_":next n
40 print at f,c;t$;z$;"_"
50 let a$=inkey$:if a$="" then goto 50
51 if code a$<12 or a$>"z" then goto 50
55 if inkey$=chr$ 13 then print at f,c; t$; z$; " ": return
56 if inkey$ = chr$ 12 then print at f,c,,: goto 30
57 if inkey$<>"" then goto 52
70 let z$=z$+a$
80 let a=a+1: if a>=cc then a=cc: let z$=z$( to a)
110 goto 40


Saludos,
Subir al inicio
« Última modificación: 22.12.2009 a las 08:27:25 por soultaker »  

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #27 - 21.12.2009 a las 11:43:36
 
..que se puede saber la longitud de un programa BASIC con:

Código:

print (peek 23641+256*peek 23642)


Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #28 - 21.12.2009 a las 11:47:21
 
Operación lógica XOR (disponible en LM) en BASIC:

Código:

DEF FN x(x,y)=(1 and (x=0 and y=1)+(x=1 and y=0))+0 and (x=0 and y=0)+(x=1 and y=1)


Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #29 - 21.12.2009 a las 11:58:42
 
INTERRUPCIONES:

Este tema tan escabroso en z80 y comun en las PC, no es tan escabroso como parece. Solo hay que tener unos pocos cuidados. Guiño

Además da una sensación de multitarea en la Z80.   Sonrisa

Les paso una pequeña y sencilla rutina en ASSEMBLER que carga una direccion de memoria de comienzo de un código(programa) de LM y activa el modo de interrupción 2.

Activar modo II de interrupciones:
Código:

LD A,24
LD (65535),A    ; en basic: poke 65535,24
LD A,195
LD (65524),A    ; en basic: poke 65524,195
LD HL, direccion de memoria de la rutina en LM
LD (65525), HL  ; en basic; poke 65525, L: poke 65526, H
LD A,59
LD I,A   ; cargo el registro de interrupciones con 59
IM 2     ; activo el modo de interrupcion II.
RET


Ahora la rutina nuestra en CM, debe primero ser CORTA y RAPIDA, para que no nos la tome otro refresco de interrupción y además debemos hacer un backup de todos los registros para luego restaurarlos al final de la rutina

Esqueleto:
Código:

PUSH HL
PUSH AF
PUSH BC
PUSH DE   ; Backup de los registros.
.
.
.
RUTINA CM
.
.
.
.
POP DE
POP BC
POP AF
POP HL  ; Se restaura en orden inverso por ser pila del tipo FIFO.
RETI  ; En rutinas de interrupciones es mejor usar RETI que RET.


Activar modo I de interrupciones (que deja todo como estaba):
Código:

LD A,63
LD I,A
IM 1
RET

Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #30 - 30.12.2009 a las 18:35:42
 
Hola chicos,

Les paso una rutina de impresión de letras proporcionales, que salió del ART STUDIO.

1) Cargamos estos bytes a partir de la dirección 60000:

Código:

DATA 42,129,92,38,0,237,91,125,92,213,237,91,54,92,41,41,41,
25,209,6,8,126,197,6,8,197,23,48,11,66,75,213,229,245,205,229,
34,241,225,209,28,193,16,237,21,193,35,62,248,131,95,16,224,201


Esta es la parte BASIC para poder usarla.

2) Cargamos el carácter que vamos a imprimir:

Código:

POKE 23681, <código del carácter>


3) Posicionamos la impresión:

Código:

PLOT INVERSE 1; X,Y: RANDOMIZE USR 60000


Importante: X e Y son coordenadas de píxeles, no de caracteres, asi que tienen que convertirlas con:

Código:

X=(21-fila)*8
Y=columna*8


PD: La idea de esta rutina me salió después de ver el programa ART STUDIO (de spectrum). Me voló la cabeza.

EDIT: Omití por error código ASSEMBLER de la rutina. Aqui va:

Código:

    LD HL,(23681)
    LD H,0
    LD DE,(23677)
    PUSH DE
    LD DE,(23606)
    ADD HL,HL
    ADD HL,HL
    ADD HL,HL
    ADD HL,DE
    POP DE
    LD B,8
LP3 LD A,(HL)
    PUSH BC
    LD B,8
LP2 PUSH BC
    RLA
    JR NC, LP1
    LD B,D
    LD C,E
    PUSH DE
    PUSH HL
    PUSH AF
    CALL 8933
    POP AF
    POP HL
    POP DE
LP1 INC E
    POP BC
    DJNZ LP2
    DEC D
    POP BC
    INC HL
    LD A,248
    ADD A,E
    LD E,A
    DJNZ LP3
    RET


Para vuestro mejor análisis les paso el desensamble de la rutina ROM que invoca el CALL (8933):

Código:

        LD (23677),BC
        CALL 8874
        LD B,A
        INC B
        LD A,254
LOOP3   RRCA
        DJNZ LOOP3
        LD B,A
        LD A,(HL)
        LD C,(IY+57)
        BIT 0,C
        JR NZ, LOOP1
        AND B
LOOP1   BIT 2,C
        JRNZ, LOOP2
        XOR B
        CPL
LOOP2   LD (HL),A
        JP 3035


Y la 3035 del jump (JP):

Código:

        LD A,H
        RRCA
        RRCA
        RRCA
        AND 3
        OR 88
        LD H,A
        LD DE,(23695)
        LD A,(HL)
        XOR E
        AND D
        XOR E
        BIT 6,(IY+57)
        JR Z,LOOP1
        AND 199
        BIT 2,A
        JR NZ, LOOP1
        XOR 56
LOOP1   BIT 4,(IY+57)
        JR Z, LOOP3
        AND 248
        BIT 5,A
        JR NZ, LOOP3
        XOR 7
LOOP3   LD (HL),A
        RET


Saludos.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #31 - 30.12.2009 a las 19:22:45
 
REGALITO de FIN de AÑO:

Les paso una rutina en ASSEMBLER que hice. Cambia el color de borde cada segundo:

Se invoca con RANDOMIZE USR 35000.

Código:

ORG 35000
ENT
LD A,24: LD (65535),A
LD A,195: LD (65524),A
LD HL, START: LD (65525),A
LD A,59: LD I,A: IM 2: RET
CC DEFB 0
START PUSH HL: PUSH AF
      PUSH BC: PUSH DE
      LD A,(CC): SUB 50
      JP M,OTRA
      ADD A,50: CP 100
      CALL Z, NUEVO
      LD A,6: OUT (254),A
      LD A,CC: INC A
      LD (CC),A
      JP FIN
OTRA  LD A,7: OUT (254),A
      LD A,(CC): INC A
      LD (CC),A
      JP FIN
NUEVO XOR A: LD (CC),A
      RET
FIN   POP DE: POP BC
      POP AF: POP HL
      JP 56
BASTA LD A,63: LD I,A
      IM 1:RET


FELIZ AÑO 2010.

Hasta el año que viene.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #32 - 15.01.2010 a las 15:11:11
 
Hola a todos!!
Antes que anda, perdon por la demora, les paso otra colaboración:

Programa que emite el sonido de un grillo:
Se finaliza presionando la barra espaciadora.

Código:
	JP INIC
TECLA CALL 703
LD A,(23560)
RET
INIC LD A,R
SRL A
SRL A
OUT (254),A
CALL TECLA
CP " "
RET Z
SRL A
SRL A
OUT (254),A
LD A,R
SRL A
SRL A
OUT (254),A
JP INIC


Antes deben hacer
Código:
	CLEAR 23999
RANDOMIZE USR 4654


Saludos!!
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
juan carlos fekete
God Member
*****
Desconectado


BUJE DEL EJE DEL MAL

Mensajes: 3561
Mar del Plata
Re: Sabía Ud. que...
Respuesta #33 - 15.01.2010 a las 23:49:27
 
Código de máquina para Z80, éste lugar se va para arriba !!! Guiño
Subir al inicio
 

Jovatus Electronic´s Trashman,
ANDRES NUMBER ONE FAN

Sony F1XDJ
Talent TPC-310
Talent DPC-200
Spectravideo 738
Spectravideo 728
Toshiba HX-20
Yamaha C5XMII
Sony HB-20P
 
IP Registrada
 
Eduardo
YaBB Newbies
*
Desconectado


I love YaBB 2!

Mensajes: 18
Re: Sabía Ud. que...
Respuesta #34 - 17.01.2010 a las 10:07:58
 
Lo bueno de aquellas maquinolas es que te hacían pensar.Realmente tenías que saber computación.No es como ahora:aceptar,aplicar,cancelar y listo.

el código me hace recordar uno de los programas  del Apollo Guindance Computer.No me imagino a ningún pendejito flogger haciéndole frente a eso.


buenísimo.

Subir al inicio
 
 
IP Registrada
 
juan carlos fekete
God Member
*****
Desconectado


BUJE DEL EJE DEL MAL

Mensajes: 3561
Mar del Plata
Re: Sabía Ud. que...
Respuesta #35 - 17.01.2010 a las 11:04:55
 
Apollo Guindance Computer...

Es el del módulo que baja? Yo lo tenía para TI-59...
Subir al inicio
 

Jovatus Electronic´s Trashman,
ANDRES NUMBER ONE FAN

Sony F1XDJ
Talent TPC-310
Talent DPC-200
Spectravideo 738
Spectravideo 728
Toshiba HX-20
Yamaha C5XMII
Sony HB-20P
 
IP Registrada
 
Eduardo
YaBB Newbies
*
Desconectado


I love YaBB 2!

Mensajes: 18
Re: Sabía Ud. que...
Respuesta #36 - 17.01.2010 a las 11:46:34
 
Apollo Guindance Computer es la computadora que el MIT desarrolló para poner a bordo de los cohetes del  Proyecto Géminis.Después la mejoraron un poco y la usaron en el Proyecto Apollo.
Esta maquinola no podía fallar porque casi todos los sensores estaban conectados a ella realizando cálculos  y mandando la información a la Tierra.
En el Apollo 13 la apagaron y quedaron en tarlipes.Para reingresar tubieron que hacer milagros para prenderla porque sin ella no podían.
Hay un par de simuladores de AGC y algunos  ADD ONs para el orbiter simulator  con los que podés hacer tu propia misión  Apollo 11 sentado en tu casa.

Subir al inicio
 

DSKYS_interface.JPG (256 KB | 11 )
DSKYS_interface.JPG
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #37 - 17.01.2010 a las 15:39:23
 
Eduardo dijo 17.01.2010 a las 10:07:58:
No me imagino a ningún pendejito flogger haciéndole frente a eso.

Hace una semana me compré el libro "Assembly Language Step-by-Step: Programming with Linux, 3rd Edition" http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470497025.html

Me gusta mucho, es muy didáctico, y lo mejor de esto es que me permite comparar el assembler/modelos de memoria del Z80 (lo que recuerdo) contra x86.

Para el que quiera hacer sus primeros palotes en assembler de x86 bajo un Sistema Operativo multitarea, poderoso, seguro y gratuito, lo recomiendo. (Se nota que me gusta un poco Linux).  Mueca

Uno de las comparaciones es que el codigo ASSEMBLER del z80 en el 99,9% de la veces no es relocalizable, es decir, si se ensambló en la dirección 40000, no lo podes llevar a la 30000, u otra.

Al ensamblarlo, el ensamblador (Zeus u otro), hardcodea las direcciones de memoria propias del código invocadas en éste; saltos relativos (JR), y saltos (JP).

En cambio en x86 cuando se trabaja en modo protegido, es el S/O el que asigna la posición de memoria donde el código correrá. Entonces el ensamblador resuelva las etiquetas del código como "offset", permitiendo al S/O relocalizar el código donde mejor sea necesario.  Guiño
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #38 - 21.01.2010 a las 08:54:46
 
Hola a todos.

Les paso una rutina interesante en LM.

Les debo el código en Assembler por no estar transcripto en mi cuaderno de notas.
Esta rutina, si bien recuerdo, utiliza interrupciones, e imprime en el recuadro superior derecho de la pantalla un número de 5 dígitos que informa la línea en BASIC que se está ejecutando en ese momento.
Les paso los octetos para cargarlo.

Código:
DATA 62,24,50,255,255,62,195,50,244,255,33,90,
255,34,245,255,62,59,237,71,71,237,94,201,62,63,231,
71,237,86,201,229,245,197,213,42,69,92,17,71,71,237,
83,24,88,237,83,26,88,205,126,255,209,193,241,225,
195,56,0,17,24,0,237,83,200,255,17,232,3,205,189,255,
17,100,0,205,189,255,17,10,0,205,189,259,255,77,205,
179,255,62,58,205,189,255,58,71,92,38,0,111,17,100,0,
209,189,255,17,101,0,205,189,255,77,25,62,48,129,225,
205,199,255,225,201,167,14,0,237,82,56,239,12,24,249,
17,32,0,38,0,111,237,75,54,92,41,41,41,9,122,230,24,
198,64,71,122,15,15,15,230,224,131,95,80,6,8,126,18
,20,35,16,250,33,200,255,52,201

Unas observaciones:
  • Para activarlo invocar la dirección 65340.
  • Para desactivarlo invocar la dirección 65363.
  • Tener presente que no es reubicable, en caso de que lo necesiten reubicar, deben tipear los siguientes POKE's:
    POKE direccion+1, PEEK 23670
    POKE direccion+12, PEEK 23671


Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
Hernan
Ex-miembro


Re: Sabía Ud. que...
Respuesta #39 - 21.01.2010 a las 12:29:00
 
Che, está muy buena esa, para debugear un programa BASIC viene bárbaro!!
Subir al inicio
 
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #40 - 21.01.2010 a las 12:41:42
 
Cita:
para debugear un programa BASIC viene bárbaro!! 

Exacto Hernán, esa fué la idea.

Saludos.

PD1: Lo mejor a lo último.


Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
pastbytes
YaBB Administrator
*****
Desconectado


I love YaBB!

Mensajes: 2742
Puerto Madryn, Chubut
Re: Sabía Ud. que...
Respuesta #41 - 21.01.2010 a las 18:20:43
 
Se carga a partir de la direccion 65340?
Subir al inicio
 

Jorge Castillo
http://www.pastbytes.com
info@pastbytes.com
WWW  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #42 - 21.01.2010 a las 19:12:58
 
Si bien no tengo el assembler, viendo el LM en decimal, me juego a que si.

DATA
62,24,50,255,255,62,195,50,244,255,33,90,
255,34,245,255,62,59,237,71,71,237,94,201
,
62,63,231,
71,237,86,201
,
229,245,197,213,42,69,92,17,71,71,237,
83,24,88,237,83,26,88,205,126,255,209,193,241,225,
195,56,0,17,24,0,237,83,200,255,17,232,3,205,189,255,
17,100,0,205,189,255,17,10,0,205,189,259,255,77,205,
179,255,62,58,205,189,255,58,71,92,38,0,111,17,100,0,
209,189,255,17,101,0,205,189,255,77,25,62,48,129,225,
205,199,255,225,201,167,14,0,237,82,56,239,12,24,249,
17,32,0,38,0,111,237,75,54,92,41,41,41,9,122,230,24,
198,64,71,122,15,15,15,230,224,131,95,80,6,8,126,18
,20,35,16,250,33,200,255,52,201


En
rojo
, el activador en IM 2.
En
verde
, el desactivador a IM 1.
En
gris
, la rutina en si.

EDIT: Lo estoy desensamblando a mano para verificar y encuentro discrepancias... Cuando termine posteo el assembler.


Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #43 - 21.01.2010 a las 20:34:20
 
Va el codigo desensamblado... fiuuuu..  Huh
Fue una buena práctica y me trajo algunos recuerdos...  llorar

Código:

ORG 65340

62,24 LD A,24
50,255,255 LD (65535),A
62,195 LD A,195
50,244,255 LD (65524),A
33,90,255 LD HL,65370
34,245,255 LD (65525),HL
62,59 LD A,59
237,71 LD I,A
237,94 IM 2
201 RET
62,63 LD A,63
231,71 LD I,A
237,86 IM 1
201 RET
229 PUSH HL
245 PUSH AF
197 PUSH BC
213 PUSH DE
42,69,92 LD HL,(23621)
17,71,71 LD DE,18247 ; RUTINA ROM??
237,83,24,88 LD (22552),DE
237,83,26,88 LD (22554),DE
205,126,255 CALL 65406
209 POP DE
193 POP BC
241 POP AF
225 POP HL
195,56,0 JP 56 ; RET ESTABLE EN ROM
17,24,0 LD DE,24
237,83,200,255 LD (65480),DE
17,232,3 LD DE,1000
205,189,255 CALL 65469
17,100,0 LD DE,100
205,189,255 CALL 65469
17,10,0 LD DE,10
205,189,255 CALL 65469
255 RST 38H ; IMPRESION?
77 LD C,L
205,179,255 CALL 65459
62,58 LD A,58
205,189,255 CALL 65469
58,71,92 LD A,(21063)
38,0 LD H,0
111 LD L,A
17,100,0 LD DE,100
209 POP DE
189 CP L
255 RST 38H ; IMPRESION?
17,101,0 LD DE, 101
205,189,255 CALL 65469
77 LD C,L
77 LD C,L
25 ADD HL,DE
62,48 LD A,48
129 ADD A,C
225 POP HL
205,199,255 CALL 65479
225 POP HL
201 RET ; SALGO AL BASIC
167 AND A
14,0 LD C,0
237,82 SBC HL,DE
56,239 JR C, -111 ; 239 CON SIGNO
12 INC C
24,249 JR -121 ; 249 CON SIGNO
17,32,0 LD DE,32
38,0 LD H,0
111 LD L,A
237,75,54,92 LD BC,(23606)
41 ADD HL,HL
41 ADD HL,HL
41 ADD HL,HL
9 ADD HL,BC
122 LD A,D
230,24 AND 24
198,64 ADD A,64
71 LD B,A
122 LD A,D
15 RRCA
15 RRCA
15 RRCA
230,224 AND 224
131 ADD A,E
96 LD E,A
80 LD D,B
6,8 LD B,8
126 LD A,(HL)
18 LD (DE),A
20 INC D
35 INC HL
16,250 DJNZ -122 ; 250 CON SIGNO
33,200,255 LD HL, 65480
52 INC (HL)
201 RET


Prueben y me cuentan...  "Fingercrossed"  indeciso
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #44 - 21.01.2010 a las 21:14:37
 
Sumo una anécdota al último post que hice:

Hice el desensamble en el trabajo. Mientras estaba desensamblando, me la pasaba los papeles para buscar los opcodes, se aparece mi jefe (un tipo de 40 largos) y se establece este diálogo:

J: ¿que estas haciendo?

S: (con la mejor cara de piedra de mi catálogo)
Estoy desensamblando este código de Z80.
Postee estos números pero me temo que puede haber errores de tipeo.

J: (Mira el desensamble y dice) Ese assembler es de Spectrum... (y se va)

S:  Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado Chocado

Nunca me lo hubiese imaginado....

Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
pastbytes
YaBB Administrator
*****
Desconectado


I love YaBB!

Mensajes: 2742
Puerto Madryn, Chubut
Re: Sabía Ud. que...
Respuesta #45 - 22.01.2010 a las 01:36:53
 
Hiciste el desensamble a mano?  Chocado

soultaker dijo 21.01.2010 a las 19:12:58:
Si bien no tengo el assembler, viendo el LM en decimal, me juego a que si.

Te pareces al tipo de Matrix que interpretaba el mundo mirando los numeros de la pantalla.  Mueca
Subir al inicio
 

Jorge Castillo
http://www.pastbytes.com
info@pastbytes.com
WWW  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #46 - 22.01.2010 a las 08:21:58
 
pastbytes dijo 22.01.2010 a las 01:36:53:
Hiciste el desensamble a mano? 

Si, el desensamble lo hice a mano, pero no recuerdo todos los opcodes por eso las planillas de la anécdota.
Lo marcado en verde y rojo, fue una interpretación de los numeros on-the-fly (en la mosca =P )

Jajaja!! Si, me recibí de "Operator", en cualquier momento me pongo a diseñar mujeres de rojo.  Mueca

Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #47 - 16.02.2010 a las 08:58:43
 
...En la Spectrum, si uno se equivocaba, bajo assembler, en la lógica de la programación, el costo era un cuelgue.  Enojado

...En los sistemas operativos multitarea actuales, si uno se equivoca no solo no se cuelga, ni se pierde nada, sino que se puede interrumpir. (por lo menos, bajo linux, con la famosa Ctrl+C).  Sonrisa

Las veces que putee en la speecy....  indeciso

Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #48 - 16.02.2010 a las 10:24:38
 
... para multiplicar en assembler, se utiliza un método desde tiempos inmemoriables, que aún hoy se usa: El desplazamiento de registros.

¿Cómo es esto?

Un breve intro, seguro que todos lo saben, pero igual lo repasamos:

Sistema decimal:

Sabemos que dentro de cualquier dispositivo digital, todo es binario, y en la speccy, estos dígitos se agrupaban de a 8 formando algo que se lo llama "byte".

Cada "posición" en esos lugares tiene un "peso", llendo de izquierda (los mas pesados) a derecha (los menos pesados).

No se sientan confundidos, es igual que nuestro sistema numérico:
Para el caso de del número 69, el 6 pesa mas que el 9 (porque el 9 son 9 unidades, y el 6 son 6 decenas)

Recordemos nuestras clases...
Si descomponemos el numero del ejemplo, en el sistema decimal, vemos que esta formado por:


6 x 101 + 9 x 100 = 69

Fig.1


Acá también se aclara porque se dice que nuestro sistema numérico tiene base decimal. Porque en la potencia de la Fig.1, el número 10 es la base del término potencial.

Sistema binario:
Una aclaración: Vamos a trabajar con números de 8 bits (1 byte).
Veremos que los bits en los números binarios tambien tienen su peso:


Pos:   7   6   5   4   3   2   1   0
     | x | x | x | x | x | x | x | x |
       ^   ^   ^   ^   ^   ^   ^   ^
       |   |   |   |   |   |   |   +-- 1
       |   |   |   |   |   |   +------ 2
       |   |   |   |   |   +---------- 4
       |   |   |   |   +-------------- 8
       |   |   |   +------------------ 16
       |   |   +---------------------- 32
       |   +-------------------------- 64
       +------------------------------ 128

Fig.2

De la Fig.2 podemos sacar algunas conclusiones:

  • El mayor número posible, en 8 bits, es 255: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128.
  • El peso entre bits es en potencias de 2: f(x):R->R / f(x)=x2
  • La paridad de cualquier número esta dada por el estado (1 o 0) del bit menos significativo (el de la derecha).


Por cada bit encendido, tendremos su valor incorporado, o siendo componente del número expresado en el byte. Y para convertir un número binario a decimal, solo basta sumar el peso de aquellos bits encencidos o lo que es lo mismo, en estado 1.

Ejemplos:
000000012 = 110 (1x20)
000000102 = 210 (1x21)
000000112 = 310 (1 x 21 + 1 x 20)

Y ahora si llegamos al principio:
La forma clásica de multiplicar en assembler es desplazando los bits hacia la izquierda. Y en contrapartida, se divide (Z+ únicamente!) desplazando hacia la derecha.
Pero haciendo esto, multiplicamos (o dividimos) por 2.
¿Y si queremos multiplicar por 3?
Se desplaza a la izquierda una sola vez y se suma. Recordemos que el multiplicando nos dice cuantas veces sumamos.

000000102 = 210

Desplazando 1 sola vez hacia la izquierda (multiplicando por 2), queda:

000001002 = 410

Otro ejemplo:

000000112 = 310
Desplazando:
000001102 = 610

La instrucción en assembler del Z80 que lo hace es "RL" (rotate left) y hacia la derecha, "RR" (rotate right).

Una última aclaración: desplazar y rotar son dos cosas distintas, si bien ambas desplazan, la diferencia radica en que es lo que sucede con el bit que se quedo al "borde". Si se rota, el mismo se inyecta en el "otro lado" del byte, y se desplaza, se va al tacho (el bit de carry se activa en ambos casos).

Saludos y espero haber sido claro.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
Ricardo
God Member
*****
Desconectado



Mensajes: 522
Cap. Fed.
Re: Sabía Ud. que...
Respuesta #49 - 16.02.2010 a las 12:08:27
 
Uhh... Maestro!!!! lo que me hiciste acordar!!!
Hace muchos años eso lo haciamos en la materia Sistemas de Procesamiento de Datos o Matemáticas (no recuerdo), en los tiempos en que se enseñaba...
El truco era ver los numeros en binario y desplazar el multiplicando a todas las posiciones donde el multiplicador tuviera un uno, lo que equivale a factorizar el número por potencias de 2.

Por ejemplo Multiplicar 15 x 17 ... resultado 255

15 = 00001111 -> multiplicando
17 = 00010001 -> multiplicador
     76543210 <- posiciones

el N° 17 en binario tiene 2 unos, son 2 desplazamientos y respectivas acumulaciones.

15 << 0 + 15 << 4

15 << 0 => 00001111
15 << 4 => 11110000
suma =     11111111 -> 255    


Bueno por conmutatividad del producto, si intercambio los operadores

17 = 00010001 -> multiplicando
15 = 00001111 -> multiplicador
     76543210 <- posiciones

el 15 en binario tiene 4 unos, son cuatro desplazamientos y cuatro sumas.
(17 << 0) + (17 << 1) + (17 << 2) + (17 << 3)

17 << 0 => 00010001
17 << 1 => 00100010    
17 << 2 => 01000100    
17 << 3 => 10001000
suma =     11111111 -> 255    


 
En C quedaba algo como esto:

Código:
long int multiplicacion(int multiplicando, int multiplicador){
  int indice=0;
  long int resultado = 0;
 
  for( indice=0; indice < sizeof(int); indice++ )
    if( multiplicador & (1 << indice) )
      resultado += multiplicando << indice; 

  return resultado;
}

 
Bellezaaa!!! diría el bambino... 
 
Subir al inicio
 

Algunas fotos de mis cachivaches en <A HREF="http://picasaweb.google.es/compuclasico">Album PICASA</A>
WWW  
IP Registrada
 
Páginas: 1 2 3 
Enviar Imprimir