EN
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:
CDD-56 (is aimed mainly for usage in the BASIC command line):
- copy buffer length= dynamic (always the longest possible)- ideal for the speed of copying
- massive speed up
- blue border= load, red border= save, black& white border= load/save of the file that is longer than the copy buffer
- can copy also directory names (input "0 ' ", instead of "1 ' ")
- does not end in OUT OF MEMORY error message if you input "1 ' " when trying to copy from a virgin directory (i.e. directory where no files whatever were saved yet)
- can copy around 2500 files, if it is more, programme ends up with OUT OF MEMORY
CDD-58b1 (is aimed for usage with supereme BASIC WDC5.8b1):
- copy buffer length= #23 sectors (35840 bytes)
- displays progress information during copying using 32 chars/ line
- during load and save successive numbers of only valid files are displayed
- can copy long files
- can copy around 3500 files
- copies always whole discs
- if error occurs, programme does not end but continues if there are more discs for copying
- after copying, discs with errorrs are displayed always as both source and target. So the user has to check source as well as target discs with errors to find out the reason of the error
- it resides in memory, does not load with every directory
- you can set on/off in the menu, if you want to copy also dir names
CDD-58b2 (is aimed for usage with supereme BASIC WDC5.8b2). Same as version 58b1, here are the differences:
- copy buffer length= #22 sectors (34816 bytes)
- displays progress information during copying using 64 chars/ line
- in the beginning of copy process, only valid directories are counted, their number is then displayed
- the meaning of particular numbers during copying, see the screenshot below
CDD-58b3- special for Busy:)) (is aimed for usage with supereme BASIC WDC5.8b3) same as version 58b2, here are slight the differences:
- BORDER does not change during load/ save
- numbers of skipped dirs are not displayed
Let's see what the two bottom lines displayed during copying mean in detail (only versions 58b2 and 58b3, see the screenshot):
Disk: AAA=>BBB (CCC/DDD) Load: AAAAA XMenoSuboru (CCCCC/DDDDD)
  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:
Copy times for comparison. Pick up whatever version you like:
- cdd: 0:52
- cdd-56: 0:52
- cdd-58b1: 0:54
- cdd-58b2: 0:58
- cdd-58b3: 0:58
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:
1) CDD46 (is aimed only for usage in the edit line of BASIC)
- can copy long files
- can copy also directory names (input "0 ' ", instead of "1 ' ")
- does not end in OUT OF MEMORY error message if you input "1 ' " when trying to copy from a virgin directory (i.e. directory where no files whatever were saved yet)
- if error occurs, then at the point of return to BASIC the BC register is non zero, so also this version can hand over the information about the error
- can copy around 2500 files, if it is more, programme ends up with OUT OF MEMORY
2) CDD48b (is aimed for usage with supereme BASIC WDC40):
- can copy long files
- can copy around 3500 files
- copies always whole discs
- if error occurs, programme does not end but continues if there are more discs for copying
- after copying, discs with errorrs are displayed always as both source and target. So the user has to check source as well as target discs with errors to find out the reason of the error
- it resides in memory, does not load with every directory
- you can set on/off in the menu, if you want to copy also dir names
Copy times for comparison. Directory 0 was copied, disc LMN GAMES S0 from LMN was used. It contained 156 game files, so it was an appropriate testing sample. Total length around 1,8 MB:
- cdd: 0:52
- MB Commander: 2:30
- Discobolos: 2:01
- cdd48: 2:07
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.
CZ
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:
CDD-56 (určeno pro použití přes dialogový řádek BASICu)
- délka kopírovacího bufferu= dynamická (vždy nejdelší možná)- pro rychlost kopírování ideální stav
- masivní zrychlení
- modrý okraj= load, červený= save, černobílý okraj= load/save souboru delšího než je buffer
- umí kopírovat i dlouhé soubory
- umí kopírovat i jména adresářů (místo "1 ' ", zadáte "0 ' ")
- při pokusu a zadání "1 ' " kopírovat z panenského adresáře (adresář, kde dosud nebylo nic uloženo) už neháže hlášení OUT OF MEMORY
- kopíruje cca až 2500 souborů, pokud je to více, skončí hlášením OUT OF MEMORY
CDD-58b1 (určeno pro použití s BASICovou nadstavbou)
- délka kopírovacího bufferu= #23 sektorů (35840 bajtů)
- zobrazuje průbeh kopírování pomocí 32 znaků na řádek
- při load a save se zobrazují po sobě jdoucí čísla pouze platných souborů
- umí kopírovat dlouhé soubory
- kopíruje až cca 3500 souborů
- kopíruje vždy celé disky
- při chybě se kopírování disků neukončí, ale pokračuje se dalším diskem v řadě
- po skončení kopírování vypíše disky, kde chyba nastala. Vždy jako zdroj i cíl, proto se uživatel musí na dané disky podívat a zjistit příčinu chyby
- je v paměti neustále, nenahrává se s každým kopírovaným adresářem
- v menu si můžete nastavit, zda chcete kopírovat i jména adresářů
CDD-58b2 (určeno pro použití s BASICovou nadstavbou). Jako verze 58b1, drobné rozdíly následují:
- délka kopírovacího bufferu= #22 sektorů (34816 bajtů)
- průběh kopírování zobrazen 64 znaky na řádek
- na začátku kopírování jsou počítány neprázdné adresáře, jejichž počet je zobrazen
- význam jednotlivých číslic při kopírování, viz obrázek níže
CDD-58b3- speciál pro Busyho:)) (určeno pro použití s BASICovou nadstavbou) jako verze 58b2 s těmito rozdíly:
- BORDER při load/ save nebliká
- čísla přeskakovaných adresářů se nezobrazují
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:
Kopírovací časy pro srovnání. Vyberte si, kterou verzi chcete použít
- cdd: 0:52
- cdd-56: 0:52
- cdd-58b1: 0:54
- cdd-58b2: 0:58
- cdd-58b3: 0:58
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:
1) CDD46 (určeno pro použití přes dialogový řádek BASICu)
- umí kopírovat dlouhé soubory
- umí kopírovat i jména adresářů (místo "1 ' ", zadáte "0 ' ")
- při pokusu a zadání "1 ' " kopírovat z panenského adresáře (adresář, kde dosud nebylo nic uloženo) už neháže hlášení OUT OF MEMORY
- při návratu do BASICu je při chybě reg. BC nenulový, takže i tato verze umí uživateli předat informaci o chybě
- kopíruje cca 2500 souborů, pokud je to více, skončí hlášením OUT OF MEMORY
2) CDD48b (určeno pro použití s BASICovou nadstavbou WDC40):
- umí kopírovat dlouhé soubory
- kopíruje cca 3500 souborů
- kopíruje vždy celé disky
- při chybě se kopírování disků neukončí, ale pokračuje se dalším diskem v řadě
- po skončení kopírování vypíše disky, kde chyba nastala. Vždy jako zdroj i cíl, proto se uživatel musí na dané disky podívat a zjistit příčinu chyby
- je v paměti neustále, nenahrává se s každým kopírovaným adresářem
- v menu si můžete nastavit, zda chcete kopírovat i jména adresářů
Kopírovací časy pro srovnání. Kopírován byl 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:
- cdd: 0:52
- MB Commander: 2:30
- Discobolos: 2:01
- cdd48: 2:07
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ží.