Loading ...
Sorry, an error occurred while loading the content.

old tapes... RescuED

Expand Messages
  • Gemeny, Steve
    WOW... Perfect copy! I say that for the program part of what you recovered. I did a byte by byte check against the original of the program and it is a
    Message 1 of 2 , Sep 3, 2002
    • 0 Attachment
      WOW... Perfect copy!

      I say that for the program part of what you recovered. I did a byte by byte
      check against the original of the program and it is a complete match. There
      is a portion of the file with data formatted within that I was not able to
      check (we can assume it is fine too).

      If it was not in an ASCII Dump format, but BIN, I could check using HexEdit
      and see the data as well.

      I think the next step would be to add a binary format to the output.

      May I just say... "Damn that was fast! " and a FINE job.

      Well done,
      Steve



      -----Original Message-----
      From: apendragn [mailto:apendragn@...]
      Sent: Monday, September 02, 2002 1:39 AM
      To: cosmacelf@yahoogroups.com
      Subject: [cosmacelf] Re: Rescuing old tapes


      --- In cosmacelf@y..., "Gemeny, Steve" <Steve.Gemeny@j...> wrote:
      > I've posted the relevant part of the Cassette Specs. as a PDF on
      the web
      > (thanks Todd) http://mywebpages.comcast.net/aa3nm/cassette.pdf
      <http://mywebpages.comcast.net/aa3nm/cassette.pdf>
      > < http://mywebpages.comcast.net/aa3nm/cassette.pdf
      <http://mywebpages.comcast.net/aa3nm/cassette.pdf> >
      >
      >
      > I also posted a short WAV file that I know well as
      > http://mywebpages.comcast.net/aa3nm/elf.wav
      <http://mywebpages.comcast.net/aa3nm/elf.wav>
      > < http://mywebpages.comcast.net/aa3nm/elf.wav
      <http://mywebpages.comcast.net/aa3nm/elf.wav> >

      Is this the data?:

      Start = 0x0000
      length= 0x0201

      0000 D5 6F 64 22 F9 E0 FB F0 32 0F 76 33 60 30 01 8E
      0010 52 65 22 9E FC 10 52 66 22 FF 10 52 66 22 30 00
      0020 D5 6F 64 22 F9 D0 FB F0 32 2F 76 33 60 30 21 8E
      0030 52 65 22 9E FC 20 52 66 22 FF 20 52 66 22 30 20
      0040 D5 6F 64 22 F9 B0 FB F0 32 4F 76 33 60 30 41 8E
      0050 52 65 22 9E FC 40 52 66 22 FF 40 52 66 22 30 40
      0060 7B 6F 64 22 F8 04 52 66 22 F8 00 52 66 22 00 00
      0070 AC FB 84 32 C3 6F 64 22 F9 7E FB FE 3A C3 F8 00
      0080 A1 BE F8 98 B1 F8 06 AE D4 00 01 01 30 C6 8C FB
      0090 0D 32 A8 8C 7C DF 3B C3 8C 7C 81 33 C3 8C AE D4
      00A0 00 21 01 FC C0 CF 30 C3 F8 08 AE D4 00 41 01 AE
      00B0 AF 8F 32 CB C4 1E 1E 1E 1E 1E 2F 30 B1 D4 00 01
      00C0 F8 00 51 C0 01 54 FC 01 51 30 8E 9E FC 04 BE 30
      00D0 BD F8 98 B1 B2 F8 00 A1 51 F8 84 B4 B5 F8 2A A4
      00E0 F8 3C A5 F8 01 B3 F8 09 A3 F8 FF A2 E2 D3 7C 1B
      00F0 30 33 50 93 10 11 12 B1 04 83 70 31 5C 13 4E 33
      0100 30 09 00 C0 00 70 30 80 00 F8 00 AC BC BF F8 08
      0110 AF F8 01 B1 BE F8 0C AE F8 7F A1 35 1B 2E 9E 3A
      0120 1D 8C F6 7B 3D 29 7A FC 80 AC 2F 8F 32 3A F8 01
      0130 BE F8 1B AE 2E 9E 3A 34 30 21 F8 03 AF F8 01 BE
      0140 F8 1B AE 2E 9E 3A 43 7A 2F 8F 3A 3D 8C F6 73 60
      0150 64 22 30 03 AC F8 00 B1 F8 08 A1 30 62 8C F6 AC
      0160 33 63 7B F8 01 BE F8 1B AE 2E 9E 3A 69 7A 21 81
      0170 3A 5D F8 01 BE F8 59 AE 2E 9E 3A 78 30 09 00 0D
      0180 F8 00 AC F8 11 AE 3D 8B 8C F6 D5 8E F6 D5 00 00
      0190 02 8B 4E CB 4A 87 42 8B 0A 9B 6E BB 4A 8B 06 CB
      01A0 5C 31 14 31 14 17 34 53 58 19 10 33 54 3D 34 13
      01B0 64 91 54 53 64 19 74 91 56 99 14 D8 58 93 74 F3
      01C0 4A D3 8C B3 0E 71 46 DF CA 8B 4C CB 0E CB 66 0B
      01D0 26 C3 0C AB 44 B3 4D AB 4E 8B 48 EB 62 CB 8A FB
      01E0 54 73 50 13 54 11 74 9F 6C 1A 14 F7 14 07 18 0F
      01F0 50 09 74 B1 3C 39 14 11 3C 13 7C 1A 3E 19 20 1B
      0200 A4

      If so, we might have the beginnings of a technique for recovering old
      tapes.

      My program reads a wave file and generates a data file. With some
      signal processing, it might be possible to recover damaged tapes.


      Cheers,
      Art Ed LeBouthillier




      Yahoo! Groups Sponsor

      ADVERTISEMENT



      <http://rd.yahoo.com/M=212804.2303158.3720906.2225242/D=egroupweb/S=17055661
      62:HM/A=810327/R=0/*http://geocities.yahoo.com/ps/info?.refer=blrecs>
      <http://rd.yahoo.com/M=212804.2303158.3720906.2225242/D=egroupweb/S=17055661
      62:HM/A=810327/R=1/*http://geocities.yahoo.com/ps/info?.refer=blrecs>

      ========================================================
      Visit the COSMAC ELF website at http://www.cosmacelf.com
      <http://www.cosmacelf.com>

      To unsubscribe from this group, send an email to:
      cosmacelf-unsubscribe@yahoogroups.com



      Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service
      <http://docs.yahoo.com/info/terms/> .




      [Non-text portions of this message have been removed]
    • apendragn
      ... byte by byte ... match. There ... able to ... using HexEdit ... output. That s easy to do. Like I said, I m still working on doing a correlation match. I
      Message 2 of 2 , Sep 3, 2002
      • 0 Attachment
        --- In cosmacelf@y..., "Gemeny, Steve" <Steve.Gemeny@j...> wrote:
        > WOW... Perfect copy!
        >
        > I say that for the program part of what you recovered. I did a
        byte by byte
        > check against the original of the program and it is a complete
        match. There
        > is a portion of the file with data formatted within that I was not
        able to
        > check (we can assume it is fine too).
        >
        > If it was not in an ASCII Dump format, but BIN, I could check
        using HexEdit
        > and see the data as well.
        >
        > I think the next step would be to add a binary format to the
        output.

        That's easy to do. Like I said, I'm still working on doing a
        correlation match. I think that'll be the most important thing to do
        for really old tapes. It's most likely to pull weak signals out.

        > May I just say... "Damn that was fast! " and a FINE job.

        Thank you. It was almost an obsessive quest.

        Cheers,
        Art Ed LeBouthillier

        Here's the program. It's not very sophisticated but it seems
        to work. Remember, I had to low pass the signal using a
        wav filtering program (audiofilter.exe). I think some of the
        preprocessing will be the most important to making old tapes readable.

        =============================================================

        Option Explicit

        Const THRESHOLD = 19
        Const Pi = 3.14159

        Dim tmpData() As Single
        Dim outData() As Single
        Dim theSlope() As Single

        Dim tmpLength As Long

        Dim SlopeRise As Boolean
        Dim SlopeFall As Boolean
        Dim ConvertState As Integer

        Dim PushBit(0 To 8) As Boolean
        Dim BitCount As Integer

        Dim StartAddress As Long
        Dim DataLength As Long
        Dim DataCount As Long

        Private Sub Command1_Click()
        Open "data.txt" For Output As #2
        BitCount = 0
        ConvertState = 0
        Convert
        Close #2
        End Sub

        Private Sub Form_Load()
        Dim i As Long
        Dim j As Long
        Dim aByte As Integer
        Dim b1 As Integer
        Dim b2 As Integer
        Dim b3 As Integer
        Dim b4 As Integer
        Dim thesum As Single
        Dim p0 As Single
        Dim p1 As Single

        ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++
        ' GET THE DATA
        Open "c:\temp\cosmac\wav2bin\elf.wav" For Binary As #1

        ' skip header
        For i = 1 To 40
        aByte = Asc(Input(1, 1))
        Next i

        Get 1, , tmpLength
        Label1.Caption = "Length = " + Str$(tmpLength)

        ReDim outData(tmpLength)
        ReDim tmpData(tmpLength)
        ReDim theSlope(tmpLength)

        For i = 1 To tmpLength
        aByte = Asc(Input(1, 1))
        tmpData(i) = (aByte - 128) / 128#
        Next i

        Close 1
        ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++

        ' Average the data
        For i = 5 To tmpLength - 5
        For j = -5 To 5
        If ((i + j >= 0) And (i + j) <= tmpLength) Then
        thesum = tmpData(i + j)
        End If
        Next j
        tmpData(i) = thesum / 5
        Next i

        ' Determine the slope
        For i = 1 To tmpLength
        p0 = tmpData(i - 1)
        p1 = tmpData(i)
        theSlope(i) = 1000 * (p1 - p0)
        If theSlope(i) > 1# Then
        theSlope(i) = 0.5
        End If
        If theSlope(i) < -1# Then
        theSlope(i) = -0.5
        End If
        Next i
        End Sub



        Sub drawIt(n As Long)
        Dim i As Long

        Picture1.Cls
        Picture1.Line (0, Picture1.ScaleHeight / 2)-(Picture1.ScaleWidth,
        Picture1.ScaleHeight / 2), RGB(128, 0, 128)
        For i = 0 To Picture1.ScaleWidth
        If (n - Picture1.ScaleWidth / 2 + i > 0) Then
        Picture1.PSet (i, Picture1.ScaleHeight / 2 - theSlope(n -
        Picture1.ScaleWidth / 2 + i) * Picture1.ScaleHeight / 2), RGB(64,
        255, 64)
        Picture1.PSet (i, Picture1.ScaleHeight / 2 - outData(n -
        Picture1.ScaleWidth / 2 + i) * Picture1.ScaleHeight / 2), RGB(255, 0,
        0)
        End If
        Next i
        Picture1.Refresh
        End Sub

        Sub Convert()
        Dim i As Long
        Dim StartTime As Long
        Dim nextTime As Long

        For i = 0.3625 * tmpLength To tmpLength
        'drawIt (i)
        If theSlope(i - 1) < 0.1 And theSlope(i) > 0.1 Then
        StartTime = i
        nextTime = i + 16
        End If
        If i = nextTime Then
        If theSlope(i) > 0.1 Then
        PushBits (False)
        Else
        PushBits (True)
        End If

        If theSlope(i) > 0.1 Then
        Label2.Caption = "0"
        Else
        Label2.Caption = "1"
        End If
        Label2.Refresh
        End If
        Picture2.Line (0, 0)-(i / tmpLength *
        Picture2.ScaleWidth, Picture2.ScaleHeight), RGB(0, 255, 0), BF
        Picture2.Line (i / tmpLength * Picture2.ScaleWidth,
        Picture2.ScaleHeight)-(Picture2.ScaleWidth, Picture2.ScaleHeight), RGB
        (255, 0, 0), BF
        Next i
        End Sub

        Sub PushBits(n As Boolean)
        Dim i As Integer
        Dim ParityCount As Integer
        Dim result As Integer

        BitCount = BitCount + 1

        For i = 0 To 7
        PushBit(i) = PushBit(i + 1)
        Next i
        PushBit(8) = n

        ParityCount = 0
        For i = 0 To 8
        If PushBit(i) Then
        ParityCount = ParityCount + 1
        End If
        Next i

        If ConvertState = 0 Then
        If ParityCount Mod 2 = 0 Then

        If PushBit(0) Then
        result = 128
        Else
        result = 0
        End If
        If PushBit(1) Then
        result = result + 64
        End If
        If PushBit(2) Then
        result = result + 32
        End If
        If PushBit(3) Then
        result = result + 16
        End If
        If PushBit(4) Then
        result = result + 8
        End If
        If PushBit(5) Then
        result = result + 4
        End If
        If PushBit(6) Then
        result = result + 2
        End If
        If PushBit(7) Then
        result = result + 1
        End If
        PushWord result, ParityCount Mod 2 = 0
        BitCount = 0
        End If
        BitCount = 0
        Else
        If BitCount = 9 Then
        If PushBit(0) Then
        result = 128
        Else
        result = 0
        End If
        If PushBit(1) Then
        result = result + 64
        End If
        If PushBit(2) Then
        result = result + 32
        End If
        If PushBit(3) Then
        result = result + 16
        End If
        If PushBit(4) Then
        result = result + 8
        End If
        If PushBit(5) Then
        result = result + 4
        End If
        If PushBit(6) Then
        result = result + 2
        End If
        If PushBit(7) Then
        result = result + 1
        End If
        PushWord result, ParityCount Mod 2 = 0
        BitCount = 0
        End If
        End If
        End Sub

        Sub PushWord(n As Integer, parity As Boolean)
        Label3.Caption = Str$(n)
        Select Case ConvertState
        Case 0 ' Not Started
        If n = 255 And parity Then
        ConvertState = 1
        End If
        Case 1 ' Getting Start Address 1
        StartAddress = n
        ConvertState = 2
        Case 2 ' Getting Start Address 2
        StartAddress = 256 * StartAddress + CLng(n)
        ConvertState = 3
        Case 3 ' Getting Length 1
        DataLength = n
        ConvertState = 4
        Case 4 ' Getting Length 2
        DataLength = DataLength * 256 + CLng(n)
        DataCount = 0
        ConvertState = 5
        Print #2, "Start = 0x" + Hex$(StartAddress)
        Print #2, "length= 0x" + Hex$(DataLength)
        Case 5 ' Getting Data
        If parity Then
        If StartAddress + DataCount Mod 16 = 0 Then
        Print #2,
        Print #2, Hex$(StartAddress + DataCount); " ";
        Hex$(n);
        Else
        Print #2, " "; Hex$(n);
        End If
        Else
        Print #2, "*" + Str$(StartAddress + DataCount),
        Hex$(n)
        End If
        DataCount = DataCount + 1
        If DataCount >= DataLength Then
        ConvertState = 6
        End If
        Case 6 ' Finished
        End Select
        Label1.Caption = Str$(ConvertState)
        End Sub
      Your message has been successfully submitted and would be delivered to recipients shortly.