Home | Computer | Foto-album | Grappig | Interessant | Projects | Links | Gastenboek
Index | DS64 | HDR1000 | Toetsenborden
Grotere harddisk in Philips HDR1000 Harddiskvideorecorder     NEW: This page is also available in english!!
Vrijdag, 26 maart 2004

Update Zondag, 25 juli 2004:
Vanaf vandaag wordt de nederlandstalige versie van deze site niet meer geüpdatet!
Voortaan update ik alleen de engelstalige versie.

Inleiding
Een paar maanden geleden heb ik voor weinig geld een Philips HDR1000 Harddiskvideorecorder gekocht. Er gaan dus geen banden in, maar alle opgenomen programma's worden op de interne harddisk bewaard. Deze harddisk is 40 GB groot, en kan dus 12 tot 38 uur aan beeld en geluid opslaan, afhankelijk van de gekozen kwaliteit (HQ, SQ of LP). Nu leek het me nuttig (en ook erg leuk) om eens te proberen er een grotere harddisk in te doen, aangezien programma's dan langer bewaard kunnen worden (omdat de schijf dan minder snel vol is dus).

Inventarisatie
Afgelopen dinsdag heb ik mijn harddiskvideorecorder maar eens opengeschroefd, en de harddisk eruit gesloopt, en als tweede schijf (/dev/hdb) in mijn PC geprikt om eens te kijken wat er nou eigenlijk op staat. Fdisk snapte er al niks van. Dan maar ff een hexdump gedaan, het volgende kwam er uit:
    00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 01 80  |................|
    000001c0  00 01 7f 0c ff ff 00 3f  00 00 2d 41 04 c9 00 00  |.....?..-A...|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 aa 55  |..............U|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
Toch lijkt dit verdacht veel op een partitietabel!
Maar als je goed kijkt, zie je dat op 000001be 01 80 staat, terwijl dit bij een normale partitietabel 80 01 moet zijn (mits de eerste partitie bootable is). En de laatst 2 bytes (op 000001fe) zijn aa 55, terwijl een normaal MBR dit juist andersom heeft. Van ieder word is dus de hoge en lage byte verwisseld...
    00007e00  00 e9 50 00 49 48 49 4c  53 50 00 20 40 02 00 20  |.P.IHILSP. @.. |
    00007e10  00 02 00 00 f8 00 00 00  00 3f 00 80 00 00 00 00  |........?......|
    00007e20  0e 00 04 c9 26 48 00 00  00 00 00 00 00 02 00 00  |...&H..........|
    00007e30  00 01 00 06 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00007e40  00 80 00 29 00 00 56 00  4c 4f 4d 55 4c 45 42 41  |...)..V.LOMULEBA|
    00007e50  20 45 41 46 33 54 20 32  20 20 00 00 00 00 00 00  | EAF3T 2  ......|
    00007e60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
Verder begint gewoon op 00007e00 de eerste partitie, op 00007e02 zou ".PHILIPS" moeten staan, maar nu staat er dus "P.IHILSP". Verderop staat "VOLUMELABE FAT 32 ". Dus om de schijf leesbaar te maken moet deze in zijn geheel gedecodeerd gekopieerd worden naar een image of een andere schijf. Gelukkig beschikt het commando dd over de optie "conv=swab" (inderdaad, swap met een b), die precies doet wat hier gebeuren moet.

Partitietabel leesbaar maken/schijf mountable maken
Om dus deze schijf leesbaar te maken, moet deze gekopieerd worden naar een derde schijf (of bij gebrek aan een extra schijf via een image naar de originele schijf):
    dd if=/dev/hdb of=/dev/hdc conv=swab
Fdisk bleek de kopie op deze manier wel te zien, en ook was de enige partitie te mounten.
De volgende bestanden bleken op de schijf te staan:
    -rwxr--r--    1 root     root       414720 Jan  1  1982 back.omp*
    -rwxr--r--    1 root     root     81920000 Jan  1  1982 D0000000.BIN*
    *
    -rwxr--r--    1 root     root     81920000 Jan  1  1982 D0000499.BIN*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 D enter_channel_name.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 D enter_file_name.omp*
    -rwxr--r--    1 root     root         1024 Jan  1  1982 disp_bak.cl8*
    -rwxr--r--    1 root     root         1024 Jan  1  1982 disp.cl8*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 D_parts1A.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 D_parts1B.omp*
    -rwxr--r--    1 root     root       676800 Jan  1  1982 D_parts2.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 D_parts3.omp*
    -rwxr--r--    1 root     root        13600 Jan  1  1982 D_WParts.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 enter_channel_name.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 enter_file_name.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 E_parts1A.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 E_parts1B.omp*
    -rwxr--r--    1 root     root       676800 Jan  1  1982 E_parts2.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 E_parts3.omp*
    -rwxr--r--    1 root     root        13600 Jan  1  1982 E_WParts.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 F enter_channel_name.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 F enter_file_name.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 F_parts1A.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 F_parts1B.omp*
    -rwxr--r--    1 root     root       676800 Jan  1  1982 F_parts2.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 F_parts3.omp*
    -rwxr--r--    1 root     root        13600 Jan  1  1982 F_WParts.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 G enter_channel_name.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 G enter_file_name.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 G_parts1A.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 G_parts1B.omp*
    -rwxr--r--    1 root     root       676800 Jan  1  1982 G_parts2.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 G_parts3.omp*
    -rwxr--r--    1 root     root          512 Jan 14  1984 guide_user_bak.dat*
    -rwxr--r--    1 root     root          512 Jan 14  1984 guide_user.dat*
    -rwxr--r--    1 root     root        13600 Jan  1  1982 G_WParts.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 I enter_channel_name.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 I enter_file_name.omp*
    -rwxr--r--    1 root     root       102900 Jan  1  1982 IndParts.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 I_parts1A.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 I_parts1B.omp*
    -rwxr--r--    1 root     root       676800 Jan  1  1982 I_parts2.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 I_parts3.omp*
    -rwxr--r--    1 root     root        13600 Jan  1  1982 I_WParts.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 logo.omp*
    -rwxr--r--    1 root     root         1024 Jan  1  1982 mark_bak.cl8*
    -rwxr--r--    1 root     root         1024 Jan  1  1982 mark.cl8*
    -rwxr--r--    1 root     root        43200 Jan  1  1982 MarkParts.omp*
    -rwxr--r--    1 root     root       421292 Jan  1  1982 ompfile.tb2*
    -rwxr--r--    1 root     root        48216 Jan  1  1982 osd_down.omp*
    -rwxr--r--    1 root     root        31600 Jan  1  1982 osd_up.omp*
    -rwxr--r--    1 root     root         1536 Jan 14  1984 rec_seq_bak.bin*
    -rwxr--r--    1 root     root         1536 Jan 14  1984 rec_seq.bin*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 S enter_channel_name.omp*
    -rwxr--r--    1 root     root       108000 Jan  1  1982 S enter_file_name.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 S_parts1A.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 S_parts1B.omp*
    -rwxr--r--    1 root     root       676800 Jan  1  1982 S_parts2.omp*
    -rwxr--r--    1 root     root       414720 Jan  1  1982 S_parts3.omp*
    -rwxr--r--    1 root     root        13600 Jan  1  1982 S_WParts.omp*
    -rwxr--r--    1 root     root     17965056 Jan  1  1982 TAPE_LIB.BIN*
    -rwxr--r--    1 root     root         2048 Jan 14  1984 tuner_user_bak.dat*
    -rwxr--r--    1 root     root         2048 Jan 14  1984 tuner_user.dat*
    -rwxr--r--    1 root     root          512 Jan  1  1982 usrSet_bak.dat*
    -rwxr--r--    1 root     root          512 Jan  1  1982 usrSet.dat*
    -rwxr--r--    1 root     root          512 Jan  1  1982 VERSION.TXT*
* Hier heb ik dus niet alle 500 "D0000nnn.BIN" bestanden weergegeven.
Er staan dus 500 van deze bestanden op, deze zijn allemaal 80mb groot, en vullen dus vrijwel de hele schijf. Opgenomen programma's staan dus IN deze bestanden.
 HDR1000 met nieuwe 80GB harddisk.
De administratie van de opgenomen programma's (vergelijkbaar met een soort File Allocation Table) gebeurt in het bestand TAPE_LIB.BIN. Het bestand ompfile.tb2 is een bijzonder bestand. Dit is namelijk een POSIX TARball, ingepakt met BZIP2. In dit bestand zit alles wat nodig is om een volledig lege nieuwe schijf geschikt te maken voor gebruik in de HDR1000. Om precies te zijn, zitten in dit bestand alle grafische files, dus files met de extensie .omp en .cl8 (resp. bitmaps en palettes).

Een nieuwe schijf initialiseren
De HDR1000 blijkt goed met een 80GB schijf overweg te kunnen. Het enige probleempje is dat bij SQ en LP de nog vrije ruimte (in uren en minuten) niet wordt weergegeven wanneer er geen programma's zijn opgenomen. Blijkbaar is de firmware niet berekend op zo'n hoog aantal. In HQ wordt wel netjes aangegeven dat er 26 uur en 10 minuten vrij is. Als de harddisk een beetje voller is, wordt er ook in SQ en LP gewoon de vrije ruimte netjes aangegeven.
Waar ook nog op gelet moet worden is de exacte grootte van de schijven. De originele 40GB schijf is precies 80293248 sectoren groot. Een 80GB schijf moet dus twee keer 80293248 groot zijn, oftewel 160586496 sectoren. Iets minder gaat ook nog wel, maar mijn 80GB schijf van 160086528 sectoren bleek toch iets te klein te zijn, waardoor ik genoodzaakt was het 1000e bestand te wissen (D0000999.BIN), ik sta er dus niet raar van te kijken als mijn HDR1000 raar doet wanneer hij er achter komt dat het laatste bestand ontbreekt...

1. Zorg dat je voldoende ruimte hebt op je PC (meer dan de grootte van de nieuwe harddisk), in de vorm van een tweede harddisk OF gewoon vrije harddiskruimte op een bestaande harddisk.
2. Partitioneer de nieuwe harddisk, 1 partitie, type c (Win95 FAT32 (LBA))
3. Formatteer de partitie als FAT32
4. Mount de partitie (in onderstaand voorbeeld heb ik hem als /dev/hdb1 in /hdb1/ gemount)
5. Kopieer bestand ompfile.tb2 er naartoe en pak deze uit:
    belfast:/hdb1 # tar jxvf ompfile.tb2
6. Maak 1000 bestanden aan, met als naam D0000000.BIN t/m D0000999.BIN (voor 80GB schijf) deze bestanden worden NIET door de HDR1000 zelf aangemaakt:
    belfast:/hdb1 # for i in $(seq 1000 1999|cut -c2-);do dd if=/dev/zero of=d0000$i.bin bs=8192 count=10000;done
Bestandsnamen zijn overigens NIET case-sensitive
7. Umount partitie
8a. Hele disk gecodeerd (met de swab-optie van dd dus) kopieren naar andere (identieke) schijf:
    belfast:/ # dd if=/dev/hdb of=/dev/hdc conv=swab
OF
8b: Hetzelfde, maar dan eerst naar een image kopieren en dan van image terug naar dezelfde schijf:
    belfast:/ # dd if=/dev/hdb of=/images/hdr1000;dd if=/images/hdr1000 of=/dev/hdb conv=swab


 Aangepast logo (op 50%).
Logo
Bij het aan- en uitzetten van de videorecorder verschijnt er altijd een PHILIPS-logo op het scherm, dit blijkt het bestand logo.omp te zijn. Dit bestand is een uit 8 bitplanes bestaand plaatje van 720 bij 576 pixels, zonder header en dus ook zonder palet. Het palet zit in bestand disp.cl8. Om het logo te kunnen bewerken is er nogal wat knip- en plakwerk nodig, de data lijkt nog het meest op een windows bmptje. Klik hier om het plaatje in bmp-vorm te downloaden, het ziet er niet echt uit (kleurtjes zijn anders, en het logo is gespiegeld) maar het is wel bewerkbaar en op te slaan. Het moet wel net zo fout worden opgeslagen als het ingeladen is (gespiegeld en bruin dus), en na het opslaan moet de header (de eerste 1078 bytes) weer verwijderd worden.

Overige opmerkingen
Ik hoop dat je het allemaal een beetje snapt, het documenteren vond ik nog het moeilijkste van dit hele project, dus ik kan me voorstellen als er misschien iets niet helemaal duidelijk is. Op zich kun je me daar wel over mailen, als het een beetje mee zit dan krijg je nog antwoord ook...

© 1986-2004 Martin Meyerink.   Last update: Saturday, 17 November 2012, 14:11:55