published: 9.1.2016

autor: Busy, Hood

So, I could not stand it anymore, and we created another version of our favourite copy programme. The previous versions CDD46 and CDD48b are quite good. But they were missing one essential thing- speed. The two new versions cdd56 and cdd58b have back their lightning speed. While the previous versions 46 and 48 copied file by file using my new copy routine, new versions copy files with the good old Busy's lightning speed, and my copy routine is used only for those files bigger than the buffer. So we are almost back at the original copy times. Apart from the speed we added another enhancements.

So let's sum up the novelties: Let's see what the two bottom lines displayed during copying mean in detail (only versions 58b2 and 58b3, see the screenshot):

  Dir: AAA=>BBB (CCC/DDD) Save:  BBBBB XMenoSuboru (CCCCC/DDDDD)

  • AAA= current source disk/ dir
  • BBB= current target disl/ dir
  • CCC= successive number of disk/ dir
  • DDD= total number of disks/ nonempty dirs for copying
  • AAAAA= number of the file being loaded
  • BBBBB= number of the file being saved
  • XMenosuboru= file header+ file name of the file being loaded/ saved
  • CCCCC= successive number of the file being loaded/ saved
  • DDDDD= total number of valid files of the current directory

    And to have the picture complete, here are copy times summary. Copying carried out on an already known directory 0 from LMN's disk "LMN GAMES S0", containing 156 game files, so it was quite an appropriate testing sample. Total length around 1,8 MB: Busy and me wish you many kilobytes of files copied with our handy programmes:))

    published: 14th of November 2015

    author: Busy, Hood

    Several years ago, when together with Busy we removed format limitation in Easy Hdd, I also wrote or rewrote some utilities, in order to make it easier for people to switch to new Easy Hdd. One utility or programme however was missing and I had had neither time nor energy to prepare such a programme. I am speaking about a convenient copy programme (disc <-> disc). When I was changing disc formats on my hdd discs, I needed to copy many files. And here my troubles started. Busy's superb copy utility cdd has one principal drawback- it could not cope with long files, in my case they were TAP files and snaps. Moreover, cdd could not copy more discs. Another choice would have been MB Commander with quite an unique GUI. But if you have many files, it assigns their number inaccurately and then there's not much copying to happen. The last copy utility Discobolos has neither of the mistakes but it does not copy file flagbyte, which is quite an error. To put it short, none of the copy programmes would satisfy fully your needs.

    Out of them I liked cdd most so I decided to learn it copy long files and extend its functionality to 100%. Its sources were published, but especially there was the fact that Busy, the author himself was at hand and able to communicate and full of brilliant ideas, knowledge and solutions. Needles to say, that substantial changes in cdd code were done directly by himself, I only finished minor things. This time, coding works were rather long as the first solution was not satisfactory as far as file number capacity was concerned, so I had to work on better solutions.

    Let's describe how the good old cdd works, just for pure-knowledge and not-to-disappear-in-the-history-of-time-desert sakes. Cdd loads on #4000, and immediatelly after it the file numbers are put into memory. If they exceed #5c00, cdd ends up with OUT OF MEMORY report. The memory can hold about 2500 files, which is enough in normal life. After the file numbers, the BASIC is moved to (with a simple zeros comprimation) and system variables- the bigger the whole bunch is, the smaller the buffer for file copying. So then all what remains is the file buffer for copying. Beware Busy's astonishing and ingenious dynamic memory structure:). The copying proccess itself is again lightning fast: files are loaded to the buffer with their file headers preceeding and only after the buffer is filled up, saving can take place in one go- this is very ingenious solution owing to which Busy is the utter winner to the rest of the world. There is the only drawback, that if the file is longer then the buffer, cdd ends up with en error. After copying has been finshed BASIC is moved back to its original place so the user can continue in work. My solution is copying a file after a file, which significantly slows down copying process, but files of unlimited length could be thus copied.

    The cdd code however did not enable changes to such extent, that I would have loved to, so actually two new cdd versions originated. The first version is the one as you already know it, i.e. fully controlled through edit line as a single command. No change in its control as compared to old cdd. It is called CDD46.

    At the same time, I wanted more, a bit advanced, performance and settings from the copy utility and that's why the second version comes out. Its name is CDD48b (where b stand for BASIC).. This version is to be used with a BASIC programme which I wrote. The CDD48b executive code is directly built in the BASIC, which is called WDC40 (Whole Disc Copy). The machine code executive file is designed specially for the BASIC, the information texts disappeared, standart error reports are not returned. They are returned in an X variable and are returned back to BASIC. So the user has better view over copying process, it is possible to end copying with a disk error list if any. The copy programme CDD48b itself is called directly from BASIC with LET X= USR address, where copy result is put to X, so that you can take needed action.

    First, I created the new cdd like the old one of Busy's- i.e. dynamically. But because of relativelly long BASIC, only space for about 100 files was left, which is very little. A change was needed. So Busy came up with an idea to compile the new cdd outside the VRAM. So for now: the executive copying code is just behind the BASIC starting from 30200. File numbers are put into memory starting from #4000. This gave me a big advantage- a possibility to display information during copying process. There is another change, that the copy executive code is not loaded into memory with each directory as it happenned always before, but it resides in the memory. Also with single copy routine call, the whole disc is copied, directory after directoriy is taken.

    So to be clear and sure, the programme does not create a sector copy of one disk to another, but it can copy only files.

    A giant advantage of the old solution and Busy's genious is the copy speed. The shorter the files, the quicker copying is. As already said new cdd46/cdd48b (WDC40) uses newly written copy routine that can cope with long files but copying takes place file by file, which implies bigger time consumption owing to frequent disc operations resulting in slowing down copying process. The way out would be to copy short files in an old super fast way, and only the long files would be copied with the newly written copy routine. Unfortunately, this soulution would mean rewriting cdd from the basement so in this case writing brand new and enhanced copy tool would certainly be much better and efficient time and energy investment.

    So, let's sum it up: CDD48b and ist supreme BASIC are quite comfortable copy tools for whole discs with the only drawback of long copy times. But because I am short of leisure time, I do not intend to rebuild it for now.

    Big thanks to Busy for time, advices and code changes. Also thanks for testing to Spezzi63 and LMN. May this programme helps you a lot.


    zveřejněno: 9.1.2016

    autor: Busy, Hood

    Tak mi to přeci jen nedalo a vytvořili jsme s Busym další verzi oblíbeného kopíráku. Předchozí verze CDD46 a CDD48b byly dobré, to ano. Ale chyběla jim jedna podstatná věc a tou byla rychlost. Obě nové verze cdd56 a cdd58b mají nyní navíc zpět svou bleskovou rychlost. Tedy zatímco předchozí verze 46 a 48 kopírovaly soubor po souboru mojí novou kopírovací rutinou, tato nová verze kopíruje po staru, kdy kopíruje do paměti soubor za souborem starým super rychlým Busyho způsobem, a pouze soubory přesahující svou délkou kopírovací buffer jsou kopírovány mou pomalejší rutinou. Takřka jsme se tedy vrátili na původní časy originálního cdd. Kromě rychlosti tu máme i další vylepšení.

    Pojďme si tedy opět udělat shrnutí novinek: Pojďme si nyní vyložit význam jednotlivých údajů, které se zobrazují na spodních dvou řádcích během kopírování (pouze verze 58b2 a 58b3, viz. obrázek):

    Disk: AAA=>BBB (CCC/DDD) Load: AAAAA XMenoSuboru (CCCCC/DDDDD)
      Dir: AAA=>BBB (CCC/DDD) Save:  BBBBB XMenoSuboru (CCCCC/DDDDD)

  • AAA= aktuální zdrojový disk/ adresář
  • BBB= aktuální cílový disk/ adresář
  • CCC= pořadové číslo disku/ adresáře
  • DDD= celkový počet disků/ neprázdných adresářů ke kopírování
  • AAAAA= číslo nahrávaního souboru
  • BBBBB= číslo ukládaného souboru
  • XMenosuboru= hlavička+ název nahrávaného/ ukládaného souboru
  • CCCCC= pořadové číslo nahrávaného/ ukládaného souboru
  • DDDDD= celkový počet platných souborů v aktuálním adresáři

    A pro úplnost opět shrnutí kopírovacích časů. Kopírován byl opět již osvědčený adresář 0 na disku od LMN s názvem "LMN GAMES S0", obsahující 156 souborů ke hrám, takže jde o přiměřený a vypovídající testovací vzorek, celková délka skoro 1,8 MB: Přejeme vám s Busym mnoho a mnoho kilobajtů nakopírovaných souborů našimi skvělými programy:))

    zveřejněno: 14.11.2015

    autor: Busy, Hood

    Když jsme před pár lety s Busym v Easy Hdd odstranili omezení formátu, napsal nebo upravil jsem i podpůrné programy, aby uživatelé, kteří chtějí přejít na nový Easy Hdd měli tento přechod co nejsnažší. Jedna utilita či program však chyběl, tehdy už jsem neměl čas ani sílu jej připravit. Byl to pohodlný kopírák disk <-> disk. Když jsem na svých discích měnil formáty, potřeboval jsem překopírovat spoustu souborů mezi disky. A tady začaly trable. Busyho super kopírák cdd má jedinou nevýhodu- neumí kopírovat dlouhé soubory. U mě to byly TAPky, snapy. Navíc nemůžete mu v podstatě zadat zkopírovat více disků. Pak se nabízel MB Commander. Uživatelské rozhraní vynikající, ale pokud máte více souborů na disku, tak dojde k chybnému číslování souborů a moc přesně si nezakopírujete. Poslední kopírák, Discobolos nemá sice uvedené nevýhody obou předchozích, za to má ale v sobě chybu a nekopíruje flagbyte souboru, což dosti vadí. Prostě ani jeden kopírák vám nesplní vše spolehlivě.

    Nejvíce se mi líbil cdd a řekl jsem si, že ho naučím kopírovat dlouhé soubory, aby z něj byl 100% funkční kopírák. Rovněž zdrojáky existovaly, ale byl to zejména fakt, že zde byl Busy jako autor cdd a zároveň nevyčerpatelná studnice vědomostí a chytrých řešení. Je třeba říci, že zásadní úpravy kódu cdd navrhl a provedl sám Busy, já už v něm jen dokončil kosmetické věci. Tentokrát byly práce dost zdlouhavé, první řešení nebylo dostatečné z hlediska možnosti počtu kopírovaných souborů a paměti a tak jsem musel pracovat na dalších, lepších řešeních.

    Pojďme si popsat, jak pracuje staré cdd, čistě po zajímavost, a taky aby to nezapadlo v poušti historie času. Cdd se nahraje od #4000, hned za něj se začnou soukat do paměti pořadová čísla souborů, která pokud přesáhnou adresu #5C00, tak cdd skončí hlášením OUT OF MEMORY. Do paměti původního cdd se tak vejde cca 2500 souborů, což postačuje. Za soubory se pak ukládá případný BASIC (s jednoduchou komprimací nul) a systémové proměnné- čím je toto všechno delší, tím menší je buffer pro kopírování. Vše co tedy zbude je souvislý buffer pro kopírování. Sledujete Busyho úžasnou a geniální dynamickou strukturu?:) No a soubory se potom opět kopírují geniálně rychle: do takto vytvořené paměti/bufferu se nahraje vždy hlavička souboru a za ní jeho data, a teprve až se zaplní takto buffer, začne se sejvovat- toto je naprosto geniální super rychlé řešení, díky kterému Busy v časech kopírování vyhrává nad ostatními řešeními na plné čáře. Jedinou nevýhodu to má, že pokud je soubor delší než buffer, tak cdd skončí chybou. Po skončení kopírování se obnoví BASIC zpět na své původní místo, a tak můžete pokračovat v práci. Moje řešení kopíruje soubor po souboru, čímž se kopírování dosti zpomaluje, ale je možno zkopírovat libovolně dlouhý soubor.

    Právě popsaná koncepce cdd však neumožňovala zásadní přizpůsobení tak, jak jsem si představoval a proto vznikly cdd dva. Jeden je cdd tak jak jej znáte, tzn. ovládá a spouští se po staru v dialogovém řádku a v jeho uživatelském ovládání není oproti starému cdd rozdíl. Tato verze se jmenuje CDD46.

    Protože jsem však od kopírování chtěl i mírně pokročilejší chování a nastavení, než nabízel cdd, je zde i druhá verze a to CDD48b (b jako BASIC) a tato verze je určena pro použití s BASICovou nadstavbou, kterou jsem napsal. Stroják CDD48b je přímo zakomponovaný do BASICové nadstavby, která nese název WDC40 (Whole Disc Copy). Stroják je speciálně šitý na míru BASICové nadstavbě, nemá informační texty, při chybě nezobrazuje basicová chybová hlášení. Chyby se přenáší v proměnné X a předávají se ovládacímu programu k vyhodnocení. Díky tomu má uživatel o kopírování lepší přehled, je možné na konci kopírování vyjet seznam chybných disků. Samotný kopírák CDD48b se volá z BASICu přes LET X= USR adresa, kde v X obdržíme výsledek kopírování a můžeme se podle toho zařídit.

    Nejprve jsem nový kopírák koncipoval stejně jako Busyho cdd- dynamicky. Jenomže díky relativně velké BASICové nadstavbě zbývalo místo pouze na cca 100 souborů, což je velmi málo. Bylo potřeba to změnit. A tak Busyho napadlo samotný strojový kód přeložit mnimo VRAM. Tedy nyní je to takto: Výkonný stroják je umístěn za BASICovou nadstavbou od adresy 30200. Pořadová čísla souborů se ukládají již od #4000. Toto poskytlo obrovskou výhodu a to možnost zobrazovat na obrazovku informace o kopírování. Další změnou je to, že se kopírák nenahrává z disku do paměti pro každý adresář zvlášť, jako tomu bylo u Busyho verze, ale je v paměti neustále. Další změna je ta, že na jedno zavolání kopíráku se kopíruje celý disk, kopíruje se adresář za adresářem.

    Aby tedy bylo jasno, nejedná se o kopírák provádějící sektorovou kopii z disku na disk, ale o kopírák kopírující soubory.

    Ještě k Busyho geniálnímu způsobu kopírování. Obrovská výhoda jeho řešení spočívá v rychlosti kopírování. Čím více krátkých souborů, tím větší rychlost. Nová verze cdd46/cdd48b (WDC40) používá kvůli dlouhým souborům nově napsanou kopírovací rutinu, kdy se kopíruje soubor po souboru, což znamená větší časovou režii s diskovými operacemi a tedy celkovou menší rychlost kopírování. Řešení by bylo kopírovat krátké soubory po staru a pouze pro ty dlouhé soubory použít novou kopírovací rutinu. Bohužel takové řešení by si vyžádalo zásadní přepsání cdd a v tom případě by bylo lepší napsat celý kopírák od začátku a již vylepšený.

    Pojďme si to tedy shnrnout:

    CDD48b a jeho nadstavba je poměrně komfortní nástroj na kopírování celých disků, jako jedinou nevýhodu vidím dlouhou kopírovací dobu. Ovšem z hlediska nedostatku mého volného času, zatím neuvažuji o dalších úpravách.

    Velké poděkování patří Busymu za čas, rady a změny kódu, rovněž díky za testování Spezzimu63 a LMNmu. Nechť vám tento program dobře slouží.