||---------------||
||----------------||
|| DISCOBOLOS ||
||----------------||
||---------------||
Upravil koncem října 1999
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-
- 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ě
-------------------------------
Údaje do záhlaví píše tak, že vypíše @, pak na
řádek a sloupec 9 vypíše ostatní.
dsc-depack- zdroják, co to rozstrká po
paměti. Vše je zabaleno HRUSTem 2.1.