APPLICATIONSPROGRAMMATION ★ Avtomatični relokator programov|Moj Micro) ★

Z80 Relocator (Moj Micro)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Gotovo ste že kdaj pisali kakšen uporabni program v strojnem jeziku. Program je lepo delal v določenem delovnem okolju, težave pa so se pojavile takoj. ko ste kupili nove uporabne programe. Programi so kajpada bili locirani na istem pomnilniškem prostoru kot vaša strojna rutina in edina možnost, da bi imeli oba programa naenkrat v pomnilniku, je ponovno asemblirati vašo rutino na drugo mesto. S tem ste dobili dve verziji istega programa in komajda zagotovili koeksistenco, ki pa se v novem okolju ponovno poruši. Edina prava rešitev te težave je pisati relokativne programe, kar pa je zelo težko, navadno kar nemogoče. Prav zaradi tega je problem reloka-cije zelo pogosta tema pri uporabnikih takih programov in so principi v glavnem znani.

Najenostavnejša in hkrati tudi najslabša rešitev problema je manipulacija s skladom (stackom). Treba je napisati rutino, ki pri vseh klicih izračuna pravilen naslov ne glede na to. na katerem mestu je rutina. Ta način pa ima več slabih lastnosti: rutina za izračun naslova mora biti vedno na istem mestu (več delov programa), namesto pravega naslova morate vedno klicati to rutino, težave so pri popravljanju in dodajanju novih delov programa, in kar je najhujše, programi so daljši in do 30% bolj počasni. Torej - neuporabno!

Veliko boljša rešitev je delo s tabelo. Vanjo so vpisani vsi naslovi, ki vsebujejo kakršenkoli relativni naslov programa, kamor program skače ali shranjuje podatke (način so pokazali Mikrosoftovi fantje). Tako je treba poleg osnovnega programa napisati še tabelo relativnih skokov in rutino, ki mora biti relokativna in ki bo spremenila naslove na pravilne vrednosti ob vsakem nalaganju v računalnik. Da pa bodo naslovi relativni glede na začetek programa. je treba program asemblirati z ORG 0. Takšna rešitev ne obremenjuje pomnilnika, ker lahko po popravljanju naslovov tabelo in relativno rutino zbrišete, ker je ne potrebujete več. hitrost pa ostane enaka ne glede na to. kje v pomnilniku je program.

Do tod vse lepo in prav Težave nastanejo, ko je treba napisati tabelo. ki bo vsebovala relativne naslove (LD (labela), XX; JP labela; labela CALL...) Morate dobro poznati sintakso posameznih ukazov, dolžino ukaza v bytih, področja, kjer so spravljeni podatki... Najbolje je, da si zlistate strojni program z asemblersko kodo. Tako bo laže glede naslovov in sintakse.

Ko se preskusite v tem poslu, boste naslednjič že zmajevali z glavo. Ni treba poudariti, kaj se zgodi, če se zmotite samo pri enem naslovu ali ga napačno locirate. Zato bi bila uporaba računalnika še kako dobrodošla Večkrat sem že imel priložnost delati s kakšnim programom. ki poskuša glavno delo opraviti sam. Velika napaka teh programov je hitrost in algoritem: skoraj vsi so poskušali iskati relativne naslove glede na kodo ukaza, npr: JP #A000 = C3 00 A0, vendar pa se lahko C3 pojavi tudi kot del naslova. Zato je bil vedno potreben človek. Verjetno bi še danes delal tako. če ne bi nekoč slučajno primerjal dva strojna programa, asemblirana z dvema različnima ORG

Gotovo vam je že vse jasno. Takšna programa imata to lastnost, da sta popolnoma enaka razen na nekaterih mestih - ta pa pomenijo relativne naslove. Tako je treba samo primerjati dva programa in večji del posla je opravljen. Težava je že vedno napraviti relokativne programe iz asemblerjev. ki uporabljajo obliko

labela: EQU #A000
LD (labela),HL

kar je identično z

LD(#A000),HL
ali pa

LD HL,(#A000)
JP (HL)

Pri takšnih oblikah se da veliko doseči že v samem postopku programiranja, če organizirate posamezno tabelo relativno na začetek programa. npr.

labela: DEFW 00 LD (labela),HL

razen če tega naslova ne uporablja še kakšen drug program V tem primeru pa vam tega naslova tako ni treba relokatizirati. Pri JP (HL) pa si morate še vedno pomagati ročno.

Zato sem napisal štiri programe, pri čemer sta dva v strojnem jeziku (123 in 47 bytov) in dva v basicu. Strojna dela sta namenjena iskanju relokativnih naslovov in sami relokaciji ob nalaganju, basica pa za ogrodje in podporo strojnima programoma. Za najlažje instaliranje celote prepišite najprej program z listinga 1 in strojni del programa posnemite na medij. Program ne bo težko vnesti, ker imajo vse linije check vsoto in vas opozorijo na vse napake s številko linije, kjer je napaka nastala.

Potem se lotite tipkanja programa z listinga 2. Skupaj z prejšnjim programom napravi tabelo vseh naslovov, ki jih je treba popraviti, na koncu doda rutino za izračun pravilnih naslovov in vse skupaj posname na medij. Posebno pazite v vrsticah
s PEEK in POKE. Tretji program je nalagalnik za takšne programe. Omogoča instaliranje strojnega programa v katerikoli del pomnilnika. tudi na najvišjo možno lokacijo.

Delo s programi

Programi so prilagojeni uporabniku in omogočajo enostavno delo. Za pripravo relokativnega programa najprej včitajte kak zbirnik in asem-blirajte svojo rutino z ORG 0 in ga posnamite pod imenom FILE0.BIN (ime je važno, ker ga pod takšnim imenom poišče na mediju strojni podprogram). Ponovno asemblirajte svojo rutino z drugim ORG (priporočam 15000) in posnamite program pod imenom FILE1.BIN. Nato starlajte program z listinga 2. Poskrbel bo. da bo včital FILEO v pomnilnik. FILE1 pa bo primerjal byte po byte kar prek diskete. S tem je omogočeno relokatiziranje kar okoli 32K programa s približno 6 K dolgo tabelo kar je dosti za vsako uporabo. Večji programi pa skoraj nikoli niso relokativni.

Po osnovni analizi vam program omogoča še dopolnitev tabele, če ste v programu uporabljali enega od gornjih načinov pisanja programov. V večini primerov je sicer ne potrebujeta. Če o kakšnem naslovu niste natančno prepričani, potem rajši najprej poizkusite včitati program na kak poljuben naslov in ga preizkusite. Če ne dela. potem morate najprej včitajte kak zbirnik in asem-blirajte svojo rutino z ORG 0 in ga posnamite pod imenom FILE0.BIN (ime je važno, ker ga pod takšnim imenom poišče na mediju strojni podprogram). Ponovno asemblirajte svojo rutino z drugim ORG (priporočam 15000) in posnamite program pod imenom FILE1.BIN. Nato starlajte program z listinga 2. Poskrbel bo. da bo včital FILEO v pomnilnik. FILE1 pa bo primerjal byte po byte kar prek diskete. S tem je omogočeno relokatiziranje kar okoli 32K programa s približno 6 K dolgo tabelo kar je dosti za vsako uporabo. Večji programi pa skoraj nikoli niso relokativni.

Po osnovni analizi vam program omogoča še dopolnitev tabele, če ste v programu uporabljali enega od gornjih načinov pisanja programov. V večini primerov je sicer ne potrebujeta. Če o kakšnem naslovu niste natančno prepričani, potem rajši najprej poizkusite včitati program na kak poljuben naslov in ga preizkusite. Če ne dela. potem morate poiskati še to lokacijo. Med asembliranjem si zapišite možne naslove, nato pa poglejte, ali so že v tabeli. Dvakratno preračunavanje enega in istega naslova bi privedlo do porušenja programa. Tabela med sestavljanjem od lokacije 10000 navzdol in vsak naslov zaseda dva byta. Kje je tabele konec, lahko zveste z PRINT FN deek(42002)

Vse relokativne naslove lahko izpišete s kratkim basicovim programom. preden program posnamete na medij (disketo ali kaseto).
Vse tako poiskane naslove vnesete na vprašanje o posebnem naslovu za relokacijo naslovu, ki ga program ni našel. Ko vnesete vse naslove. preprosto pritisnete tipko ENTER (sporočilo, da ste vnašanje končali. Vse naslove lahko vnašate v decimalni ali heksadecimalni obliki s predlogom 4.

Veliko programov moramo takoj po nalaganju inicializirati. zato program predvideva tudi takojšnjo inicializacijo. Na vprašanje o inicializiranju lahko odgovorite z naslovom, ki pomeni začetek inicializacijske rutine, ali s črko N. V tem primeru se po nalaganju ne bo izvršila inicializacija. To možnost največkrat uporabimo pri nalaganju ukazov Resident System Extension (RSX) ali rutin. ki spreminjajo vektorje skočnega bloka (Jump Blocku).

S tem ste oblikovali celotni relo-kativni program in ga je treba samo še posneti. V imenu priporočam končnico .REL. da se bodo relokativni programi ločili od programov tipa. .BIN. Zapomnite si dolžino celotnega programa, ki jo imate napisano na ekranu, ker je pomembna za nalaganje na najvišje mesto v pomnilniku.

Zadnji program je avtomatična nalagalna rutina. Program je samo osnovna oblika te rutine in jo lahko poljubno spreminjate v vseh programih. ki bodo uporabljali relokativne programe. Če ga boste uporabljali v tej obliki, potem na vprašanje o naslovu nalaganja odgovorite z želenim naslovom ali pa kar pritisnite tipko ENTER, kar bo pomenilo, da želite največji možni naslov. Drugi vprašanji sta še celotna dolžina programa (skupaj s tabelo in inicializacijsko rutino) in ime programa Tako vam ostane samo še uporaba programa, kot ste si ga zamislil«, vendar tokrat na kateremkoli mestu v pomnilniku.

Za lažje razumevanje delovanja ali pisanja programa za relokacijo za lastne potrebe podajam še asemblerski listing relokativne rutine. Tazna brati tabelo, napisano s prejšnjimi progami, in izračuna prave naslove ob včitavanju v računalnik. Rutina je vedno priključena reloka-tivnim programom.

Na koncu naj še opozorim na asembliranje z ORG 0. Pri Devpacu morate izbrati opcijo 16. da se vaš program res ne bo vpisal na prvo stran, pri Geniusu pa operirajte z *OPENOUT "ime" in *CLOSEOUT namesto z PUT.

Moj Micro

★ PUBLISHER: Moj Micro
★ ANNÉES: 1987 , 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTHOR: IGOR RAZBORNIK

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Z80  Relocator    (Moj  Micro)    LISTING    SLOVENIANDATE: 2021-11-20
DL: 4 fois
TYPE: PDF
SIZE: 278Ko
NOTE: 4 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Turbo - Relocator (CPC Amstrad International)
» Applications » Code Relocator
» Applications » Relocate Code Laser Genius
» Applications » MC-Relocator (Schneider Magazin)
» Applications » Relocator v1.0 (CPC Amstrad International)
» Applications » Relo
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 921 millisecondes et consultée 42 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.