Posteriormente hize otra rutina, que hace lo mismo que esta (mostrar la señal), pero pintando cada onda en la parte izquierda de la pantalla, de forma alineada.
Se notaba la misma distorsion, es decir, la frecuencia de los pulsos variaba de unos a otros de forma constante.
He cronometrado con el ZX-SPIN el tiempo en el que la ROM original, invierte la señal, siendo esta constante a 2168 T-States durante 255 pulsos y luego tiene 1 de 2173 T-States
Posteriormente el pulso SYNC es invertido a 667 T-States y a 735 T-States.
0-. 855/855 - 857/855 - 855/857 - 855/859
1-. 1710/1713 - 1712/1710 - 1714/1712
Es decir, variar varia, pero no mas alla, de unos pocos T-States.
Al contar el numero muestras que se toman para ambos numeros y que la diferencia, es de aproximadamente 8 muestras.
El registro E contiene el valor #40, las instrucciones marcadas con * se repiten 8 veces
*IN A,[#FE]
*ADD A,E
*RL D
LD [HL],D
T-States = 11+4+8=23
T-States para 8 muestras 184 aproximadamente
Esto quiere decir que el muestrear desde un TZX, genera un error maximo de 184 T-States.
Lo que deberia durar 4341 T-States, puede durar 184 T-States menos o 184 T-States mas. un 4.24% de error.
Como aparecia aproximadamente cada 8 lineas, perdia 1 de cada 2 pulsos, quiere decir, que aproximadamente cada 16 * 4341 = 66288 T-States, la frecuencia, cambiaba.
En resumen, en los frames pares, hay una frecuencia para el "pure tone" y en los frames impares hay otra frecuencia completamente distinta distinta.
Código: Seleccionar todo
di ; 8000 f3 $04ts
l_8001: ld hl, $5800 ; 8001 21 00 58 $0ats
ld b, $03 ; 8004 06 03 $07ts
l_8006: ld a, l ; 8006 7d $04ts
add a, a ; 8007 87 $04ts
add a, a ; 8008 87 $04ts
add a, a ; 8009 87 $04ts
and $18 ; 800a e6 18 $07ts
or $20 ; 800c f6 20 $07ts
ld (hl), a ; 800e 77 $07ts
inc l ; 800f 2c $04ts
jr nz, l_8006 ; 8010 20 f4 $07/$0cts
inc h ; 8012 24 $04ts
djnz l_8006 ; 8013 10 f1 $08/$0dts
ld hl, $4000 ; 8015 21 00 40 $0ats
l_8018: in a, ($fe) ; 8018 db fe $0bts
add a, $40 ; 801a c6 40 $07ts
jr nc, l_8018 ; 801c 30 fa $07/$0cts
l_801e: in a, ($fe) ; 801e db fe $0bts
add a, $40 ; 8020 c6 40 $07ts
jr c, l_801e ; 8022 38 fa $0c/$07ts
push hl ; 8024 e5 $0bts
ld b, $20 ; 8025 06 20 $07ts
l_8027: in a, ($fe) ; 8027 db fe $0bts
add a, $40 ; 8029 c6 40 $07ts
rl c ; 802b cb 11 $08ts
in a, ($fe) ; 802d db fe $0bts
add a, $40 ; 802f c6 40 $07ts
rl c ; 8031 cb 11 $08ts
in a, ($fe) ; 8033 db fe $0bts
add a, $40 ; 8035 c6 40 $07ts
rl c ; 8037 cb 11 $08ts
in a, ($fe) ; 8039 db fe $0bts
add a, $40 ; 803b c6 40 $07ts
rl c ; 803d cb 11 $08ts
in a, ($fe) ; 803f db fe $0bts
add a, $40 ; 8041 c6 40 $07ts
rl c ; 8043 cb 11 $08ts
in a, ($fe) ; 8045 db fe $0bts
add a, $40 ; 8047 c6 40 $07ts
rl c ; 8049 cb 11 $08ts
in a, ($fe) ; 804b db fe $0bts
add a, $40 ; 804d c6 40 $07ts
rl c ; 804f cb 11 $08ts
in a, ($fe) ; 8051 db fe $0bts
add a, $40 ; 8053 c6 40 $07ts
rl c ; 8055 cb 11 $08ts
ld (hl), c ; 8057 71 $07ts
inc l ; 8058 2c $04ts
ld a, c ; 8059 79 $04ts
cp $00 ; 805a fe 00 $07ts
jr nz, l_8062 ; 805c 20 04 $07/$0cts
djnz l_8027 ; 805e 10 c7 $08/$0dts
jr l_8001 ; 8060 18 9f $0cts
l_8062: dec b ; 8062 05 $04ts
l_8063: in a, ($fe) ; 8063 db fe $0bts
add a, $40 ; 8065 c6 40 $07ts
rl c ; 8067 cb 11 $08ts
in a, ($fe) ; 8069 db fe $0bts
add a, $40 ; 806b c6 40 $07ts
rl c ; 806d cb 11 $08ts
in a, ($fe) ; 806f db fe $0bts
add a, $40 ; 8071 c6 40 $07ts
rl c ; 8073 cb 11 $08ts
in a, ($fe) ; 8075 db fe $0bts
add a, $40 ; 8077 c6 40 $07ts
rl c ; 8079 cb 11 $08ts
in a, ($fe) ; 807b db fe $0bts
add a, $40 ; 807d c6 40 $07ts
rl c ; 807f cb 11 $08ts
in a, ($fe) ; 8081 db fe $0bts
add a, $40 ; 8083 c6 40 $07ts
rl c ; 8085 cb 11 $08ts
in a, ($fe) ; 8087 db fe $0bts
add a, $40 ; 8089 c6 40 $07ts
rl c ; 808b cb 11 $08ts
in a, ($fe) ; 808d db fe $0bts
add a, $40 ; 808f c6 40 $07ts
rl c ; 8091 cb 11 $08ts
ld (hl), c ; 8093 71 $07ts
inc l ; 8094 2c $04ts
ld a, c ; 8095 79 $04ts
cp $ff ; 8096 fe ff $07ts
jr nz, l_809e ; 8098 20 04 $07/$0cts
djnz l_8063 ; 809a 10 c7 $08/$0dts
jr l_80a3 ; 809c 18 05 $0cts
l_809e: xor a ; 809e af $04ts
l_809f: ld (hl), a ; 809f 77 $07ts
inc l ; 80a0 2c $04ts
djnz l_809f ; 80a1 10 fc $08/$0dts
l_80a3: pop hl ; 80a3 e1 $0ats
inc h ; 80a4 24 $04ts
ld a, h ; 80a5 7c $04ts
and $07 ; 80a6 e6 07 $07ts
jp nz, l_8018 ; 80a8 c2 18 80 $0a/$0ats
ld a, h ; 80ab 7c $04ts
sub $08 ; 80ac d6 08 $07ts
ld h, a ; 80ae 67 $04ts
ld a, l ; 80af 7d $04ts
add a, $20 ; 80b0 c6 20 $07ts
ld l, a ; 80b2 6f $04ts
jp nc, l_8018 ; 80b3 d2 18 80 $0a/$0ats
ld a, h ; 80b6 7c $04ts
add a, $08 ; 80b7 c6 08 $07ts
ld h, a ; 80b9 67 $04ts
cp $58 ; 80ba fe 58 $07ts
jp nz, l_8018 ; 80bc c2 18 80 $0a/$0ats
ld hl, $4000 ; 80bf 21 00 40 $0ats
jp l_8018 ; 80c2 c3 18 80 $0ats
ld de, $fedb ; 80c5 11 db fe $0ats
add a, $40 ; 80c8 c6 40 $07ts
rl c ; 80ca cb 11 $08ts
in a, ($fe) ; 80cc db fe $0bts
add a, $40 ; 80ce c6 40 $07ts
rl c ; 80d0 cb 11 $08ts
in a, ($fe) ; 80d2 db fe $0bts
add a, $40 ; 80d4 c6 40 $07ts
rl c ; 80d6 cb 11 $08ts
in a, ($fe) ; 80d8 db fe $0bts
add a, $40 ; 80da c6 40 $07ts
rl c ; 80dc cb 11 $08ts
ld (hl), c ; 80de 71 $07ts
inc l ; 80df 2c $04ts
ld a, c ; 80e0 79 $04ts
ret ; 80e1 c9 $0ats
ldir ; 80e2 ed b0 $10/$15ts
ld a, h ; 80e4 7c $04ts
inc a ; 80e5 3c $04ts
and $0f ; 80e6 e6 0f $07ts
ld hl, $e000 ; 80e8 21 00 e0 $0ats
ld b, $00 ; 80eb 06 00 $07ts
di ; 80ed f3 $04ts
l_80ee: in a, ($fe) ; 80ee db fe $0bts
add a, $40 ; 80f0 c6 40 $07ts
rr c ; 80f2 cb 19 $08ts
ld (hl), c ; 80f4 71 $07ts
ld l, b ; 80f5 68 $04ts
djnz l_80ee ; 80f6 10 f6 $08/$0dts
inc h ; 80f8 24 $04ts
jr nz, l_80ee ; 80f9 20 f3 $07/$0cts
ei ; 80fb fb $04ts
ld hl, $e000 ; 80fc 21 00 e0 $0ats
ld de, $4000 ; 80ff 11 00 40 $0ats
l_8102: ld c, $08 ; 8102 0e 08 $07ts
l_8104: push de ; 8104 d5 $0bts
ld b, $13 ; 8105 06 13 $07ts
l_8107: ld a, (hl) ; 8107 7e $07ts
ld (de), a ; 8108 12 $07ts
inc hl ; 8109 23 $06ts
inc de ; 810a 13 $06ts
djnz l_8107 ; 810b 10 fa $08/$0dts
pop de ; 810d d1 $0ats
inc d ; 810e 14 $04ts
dec c ; 810f 0d $04ts
jr nz, l_8104 ; 8110 20 f2 $07/$0cts
ld a, d ; 8112 7a $04ts
sub $08 ; 8113 d6 08 $07ts
ld d, a ; 8115 57 $04ts
ld a, e ; 8116 7b $04ts
add a, $20 ; 8117 c6 20 $07ts
ld e, a ; 8119 5f $04ts
jr nz, l_8102 ; 811a 20 e6 $07/$0cts
ld a, d ; 811c 7a $04ts
add a, $08 ; 811d c6 08 $07ts
ld d, a ; 811f 57 $04ts
cp $58 ; 8120 fe 58 $07ts
jr nz, l_8102 ; 8122 20 de $07/$0cts
ret ; 8124 c9 $0at
Compilarlo y hacer un RANDOMIZE USR 32768.
Mini-instrucciones:
La rutina detecta un pulso, y muestra el siguiente. Lo que se ve es una onda completa, al verse el fondo, la señal esta a nivel bajo y cuando se ven pixels negros, esta a nivel alto.
Tiene una forma rudimentaria de detectar los cambios de nivel, pero funciona a velocidades bajas como las de los cargadores turbo.
P.D. hay codigo de mas en la anterior rutina.
P.D. noto que falta la posibilidad de subir ficheros en el foro.
Si vas a tirar Hardware, primero pregunta si alguien lo puede recuperar.
No abandones un ordenador en un vertedero, donalo a alguien.