||---------------||

||----------------||

|| DISCOBOLOS ||

||----------------||

||---------------||

Upravil koncem října 1999

HOOD of CRAZYTRONIC.



-----------
|AKTUALIZACE| : v. 2.00, v. 2.05, v. 2.10


-------------



VERZE 2.10
-----------

soubory: (nachází se buď na @12$4, nebo na disketě ZÁLOHA v $3)



ds(2.10)- INPUT rutina do 23296
&dsc(2.10)- zdroják s komentáři
DSCB(2.10)- hl. kód D
dsc$(2.10)- screen
DSCBL_2.10- samotný spustitelný D



vylepšení a opravy v. 2.10:


a) RECORD NOT FOUND- po zapnutí počítače, kdy nedošlo k aktivaci mech. 2 již nehlásí RNF. V rutině na 26170 jsem ihned za FDC BIOS službu #0C zařadil službu #2. Toto se provede pouze jednou, pak už systém ví, na které stopě je hlavička.


b) NOT READY- při kopírování z PC diskety a označení souborů, kt. jsou od sebe v adresáři vzdáleny více než 1 sektor musel uživatel potvrdit hlášku NOT READY. Úpravou jsem to obešel, byl-li důvod k jejímu vypsání. Ale zřejmě jsem zablokoval více NR hlášek. Proto je třeba dát do mojí blokovací rutiny vědět, zda případné NR skutečně náleží kopírování- při stisku C se např. A reg. v mé rutině nastaví na 1 a testuje se. Jinak se nenastaví- neboť rutiny neslouží pouze ke kopírování, ale také k jiným věcem. Při quitu se nesmí měnit CLEAR, jinak při znovuspuštění dojde při takovém hromadném kopírování ke krachu.


c) FREE MEMORY- U PC disket D špatně vypisoval počet KB volné paměti. Podařilo se mi to spravit v kořenáči, ale v podadresářích to funguje pouze do celkové velikosti kopírovaných souborů cca 18Kb. Část rutiny, která zabezpečuje výpočet volného místa jsem vložil ještě na jedno místo, kam skáču. Možná by to šlo vyřešit tak, že jestli v podadresářích přičítá/ odčítá od výsledného čísla stále stejnou hodnotu, tak do rutiny zbudovat test na podadresář a potom, jsem-li v podadresáři, přičítat/ odečítat konstantní hodnotu.


d) PC DIRS- D teď umí číst všechny PC podadresáře. Již změnou pouhých 5ti bajtů jsem toho dosáhl (na 30254- byla, v případě více než 16ti pro HD formát a 32 pro DD formát, instrukce jr nz, skok, která se cyklila). Místo ní jsem dal nopy. Na 30224 byl CALL na výpočet max. počtu souborů pro podadresář (tedy u DD 32, u HD 16). Místo CALLu jsem dal LD HL,max. počet souborů. Fungovalo to, ale když jsem zajel na konec adr. resp. za konec, tak to hlásilo RNF a samozřejmě chaos. Bylo potřeba dát nějak programu najevo, aby se v požadovanou dobu zastavil a dál nešel. Po jednom marném pokusu jsem to vyřešil poměrně elegantně- z FAT diskety (kt. začíná na 34278) zjišťuji při vstupu do podadresáře , kolik sektorů daný podadresář zabírá k tomu jsem použil rutinu D na 31271. Při dalším výpočtu je třeba hledět na to, jedná-li se o HD, nebo DD formát. Z počtu sektorů pak vypočítám max. počet zobrazitelných položek a toto číslo pak dám .... safra nevím přesně kam- buď na 33830 (kontrola pro pohyby kurzoru v okně). A nebo je to dál tak, že při přepnutí editem se na 33830 dává příslušná délka daného podadresáře.
Chyba: v podadresáři DD, při pohybu oknem zpět je D

jaksi o sektor napřed- toto jsem zkoušel odstranit, ale zatím marně (pokusy jsou na #12$3). U HD by mělo být vše OK. Ale D neumí moc dobře pracovat s PC podadresáři, proto se může stát, že připkopírování přes jeden sektor to vyhodí hlášku RNF.


d) BARVY- obarvil jsem údaje v SELECT kvůli větší přehlednosti.


V 2.10. se znovuspouští od 24259- tam je mazací LDIR, který vymaže od 32380-41090 (aby se nevypisoval chaos, v případě zamítnutí hlášky hned na začátku programu).


Přišel jsem na spoutu nových rutinek a adres, které uvádím v sekci 4.



Některé odskoky do mých rutin:
30943



VEZRZE 2.05
------------



soubory:
DSCB(2.05)- hlavní kód
dscb(2.05)- zdroj do Promethea
ds(2.05)- část od adresy 23296
ds$(2.05)- screen






vylepšení a opravy v 2.05:

- spraveno zarovnávání údajů $ a ` za číslem disku. v 2.00 nebylo uděláno spolehlivě. ve 2.05 je již spolehlivé a jednodušší, zhruba takto: Při každém přepnutí EDITem se na 25953 (sloupec tisku) dosadí patřičná hodnota buď z 23540, nebo 23541. Tak je i pro klávesy pro pohyb kurzoru v oknech zabezpečeno vypisování na vždy správnou pozici.


- Po nahrání D, pokud došlo k nějaké hlášce (např. DISK NOT READY), tak se do oken začaly vypisovat nesmysly. Toto není chyba D ani mojí úpravy. D si načítá z příslušných míst z paměti údaje do oken. Bezprostředně po spuštění však paměť obsahovala zapakovaný kód D, které program interpretoval jako údaje o discích. Proto bylo nutné paměť před spuštěním D vyčistit (od 32380- 41090). Čistící rutina je na 24660, což je také adresa opětovného spuštění D z BASICu.


- Bylo nutné kvůli správnému zarovnávání a vůbec estetickému vzhledu D inicializovat některé hodnoty. Proto při QUITu program dosadí hodnotu 7 na pozici sloupce (25953) i obou proměnných (23540,23541). Podrobnosti jsou ve zdrojáku v. 2.05.












VERZE 2.0
----------


- Discobolos (dále jen D) by teď měl umět pracovat se všemi formáty PC disket. Odstranil jsem test na adresu 38 v BOOTu. Pokud tam D nenašel č. 41, tak zahlásil UNKNOWN FORMAT (ale jinak s disketou pracovat uměl). Takže tento test se nacházel na adr. 27919 (rozbaleno) a 27485 (nerozbaleno).



ld hl, (32890)
ld de, 43605
and a
sbc hl,de
jr nz, 28040
27919 ld a, (32418)
cp 41
jr nz, 28040


- D jsem předělal, aby uměl pracovat, resp. aby mu mohl uživatel zadat č. @ > 9. Vše by mělo fungovat korektně.









2. Co jsem přidal (v. 2.00)
--------------------------


- na adr. 23296 se nachází INPUT rutina, která zabezpečí, aby uživatel mohl zadat č. @ >9. Rutina kontroluje, zda nebylo zadáno č. > 255, pak uživatele dále nepustí, dokud nezadá číslo menší.





- 24477- pro potřeby klávesy EDIT zavádí tato rutina na adr. 23540 a 23541 polohu sloupce pro jednotlivé disky. Jelikož nyní může být č. @ až trojmístné, bylo třeba upravit výpis údajů $ a `, aby se pěkně přizpůsobovali číslu @, proto proměnné 23540 a 1.


- 24495- po stisku EDIT zajišťuje, aby byl tabulátor na správném místě (viz. též předcházející ruitna)





- 24531- zapíše číslo disku do hlášek 26701 a 26728, které zaroveň bylo nutno smrsknout.












3. Úpravy v kódu D (v. 2.00)
---------------------------


- 28129- call na vlastní výpis disku do okna (28131-132 nop)



- 26900- call na výpis čísla v BC (CALL 24847)


- 26892- call na vlastní INPUT rutinu (volba disku) na 23296



- 26193- call na zapsání @ do hlášky (CALL 24531)



- 28243- skok na vlastní (???)


- 28275....jp 25940 přepsáno na jp 25979 (aby se nepřepisovaly údaje o $ a ` v záhlaví oken)



- 24847- vypíše č. v BC



- hned za 24847- obarví č. v BC fialově









4. Další zajímavé adresy v D
-----------------------------


- 25953- pozice sloupce pro vypispování údajů o $ a ` do záhlaví oken (originálně je tam 7)


- klávesy: šipka dolů- 26046, vpravo- 26108, vlevo- 26085, nahoru- 26015, REREAD- 27695, QUIT- 27673, COPY- 26932, ENTER- 28326 (myslím vstup do dir u PC), 28874 (myslím DIR u BSDOSu), 26793- SPACE, 27551- HELP, 28243- EDIT, 27695- Reread, 31713- DELETE





- 28116 ???- výpis @, $, ` do záhlaví (obsahuje i CALL 25940)


- 25940- výpis $ a ` za pozici disku v záhlaví. Slouží pro různé účely (např. po klávese EDIT)



- odkazy na 25940 jsou na:
26076 jp nc,25940
27670 jp 25940

28275 jp 25940....klávesa EDIT-změněno ve v.2.00 na 25979 (vynechá se výpis), ve v. 2.05 ponechána pův. hodnota.
31645 jp 25940
26028 jr 25940 ...asi klávesa UP
26035 jr z,25940

26044 jr 25940.... sem odkazují rutiny kláves LEFT a RIGHT (přesněji na 26038)
26060 jr 25940 ....klávesa DOWN


- 33871- řádek záhlaví (0 nebo 11) zřejmě aktuálního disku


- čísla @ jsou na: 33815 (asi aktuálního okna), 40429



- čísla $ jsou na:
33827 (asi aktuální), 40441



- č. souboru (asi aktuálního):
33873, 33874



- na
27695 je: (asi) - 26170- motor ON
- 26323- načte BOOT (asi PC diskety)
- 26525- motor OFF+ hláška



- 28140- "Test disk change ? Y/N"



- 24875- vyhodí obě okna



- 24829- "Y/N ?"


- v orig. je na 24847 call 24779- čekání na klávesu a její hodnotu dá do A



- 26873- "ENTER A DRIVE NUMBER"



- 26920- "ENTER B DRIVE NUMBER"



- 26507- "DATA LOST"



- 26157- volá se BSDOS (stejně 26164)



- 25001- tisk $ v hl (???)



- 24964- CLS a otevři kanál 2



- 31616- vypíše catalog


- 31648- řádek FREE:....+ SELECT, hodnota free je na 33810.


- testy kláves: 24695- základní, 24835- potvrzení Y/N ?, 27571- skok z HELPu, 32064- ???



- 33868- počet označených souborů



- 28320- vypisuje catalog



- 25828-

vyhodí "DP-DOS"



- 26507- chybová hlášení ( a= č. hlášky)



- 24956- CLS



- 32380- poslední soubor okna



- 24994- hláška (v HL)


- 30235- 30254- zde se cyklil program při pokusu o načtení poadresáře, kde bylo více než 16/ 32 položek.


- 39398- začátek úseku, kam se načítá obsah PCdiskety. Úsek je dlouhý 1024b a obsahuje ůdaje z adresáře.


- 33817- je-li obsah 512, jedná se o HD disketu. Je-li 1024, jde o DD disketu.



- 33814- 2= MSDOS, 1= DPDOS, 0= BSDOS


- odkazy na zápis volné paměti- 27525 (31657) - po copy, 28062- re-read, 31084- po delete.



- 31956- do HL dává č. souboru aktuálního okna.
5. Soubory, které patří k sobě
-------------------------------



hlavní kód INPUT rutina zdroják



- DSC2 ds5 ?dscb13?

Údaje do záhlaví píše tak, že vypíše @, pak na řádek a sloupec 9 vypíše ostatní.



-

DSCB(4) ds(3a) dscb (3b)
Aktuální verze D

dsc-depack- zdroják, co to rozstrká po paměti. Vše je zabaleno HRUSTem 2.1.