CODINGLISTINGS ★ PRENOS STROJNIH PROGRAMOV NA DISK (MOJ MICRO) ★

Prenos Strojnih Programov na Disk (Moj Micro)Coding Listings
★ 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 ★ 

Najpreprostejši programi za prenos na disk so tisti, ki izpolnjujejo naslednje pogoje: imajo glavo, njihov začetni naslov je večji od &172 končujejo pa se na naslovu, manjšem od &A76B in se naložijo z ukazom RUN" ali iz basic loaderja Take programe prenesemo na disk na naslednji način:

Spustimo vrh pomnilnika (HIMEN) na naslov, ki je za enega manjši od začetnega naslova programa. Če se začenja na naslovu, ki je manjši od &1173. je treba pred MEMORY napisati LOAD" (RETURN) in takoi prekiniti včitavanje. Če tega ne naredite, bo računalnik potem, ko vtipkate LOA-D"(RETURN). javil MEMORY FULL. Nato začnemo z včitavanjem. Takoj ko računalnik javi LOADING IME. ustavite kasetofon, prekinite branje in poglejte začetni naslov, dolžino in startni naslov programa (iz alave);

za CPC 464:
? PEEK(&B81C) + 256 * PEEK(4B81D) - začetni naslov
? PEEK(&B81F) + 256 * PEEK(4B820) - dolžina programa
? PEEK(&B821) + 256 * PEEK(4B822) - startni naslov

za CPC 6128:
? PEEK(&B134) + 256 * PEEK(&B135) - začetni naslov
? PEEK(&B137) + 256 * PEEK(&B138) - dolžina programa
? PEEK(4B139) + 256 * PEEK(&B13A) - startni naslov

Če se program nalaga iz basic loaderja na neki drug naslov ali pa je startni naslov drugačen od tistega iz glave, je treba vzeti podatke iz loaderja (edino dolžina programa v glavi je gotovo pravilna). Upam. da pojasnilo o iskanju teh podatkov iz basic loaderja ni potrebno.

Zdaj. ko imamo vse zahtevane podatke, ni težko nadaljevati Vrnimo trak na začetek programa in preberimo celoten program. Napišemo DISC in posnamemo program na disk z ukazom:

SAVE"ime",B, začetni naslov, dolžina, startni naslov

Program naložimo z diska z ukazom RUN"ime".

Če se program naloži s strojnim loaderjem, je postopek nekoliko drugačen , Izlistajte loader s pomočjo MONS in poiščite ukaz LD HL.#NNNN. ki mu sledi CALL #BC83 ; #NNNN je začetni naslov Če tega ni. boste najbrž našli ukaz EX DE HL in za njim CALL #BC83. V tem primeru je začetni naslov enak kot v glavi. Sedaj iščemo startni naslov. Najti je treba JP #NNNN, kjer je #NNNN startni naslov. Veliko programov tega nima. pač pa boste našli POP HL in zatem JP (HL) ali samo RET. Na začetku takih programov je najpogostejše nekaj logičnih operacij med akumulatorjem in registri, nato pa se vsebina akumulatorja prenese v H in L Vsebina HL se shrani na sklad (PUSH HL) in tam ostane do konca programa, kjer se pojavi POP HL, JP (HL) ali pa samo RET. Če poznamo logične operacije in vsebine registrskih parov po nalaganju kateregakoli programa (BC=#B0FF , DE = #0040 , HL = #ABFF). lahko preprosto izračunamo začetni naslov, dolžino programa pa preberemo iz glave.

Primer strojnega loaderja:

LD A,E ;A=#40
XOR #09 ; A=#49
LD L,A ; L=#49
XOR #E8 ; A=#A1
LD H,A ;H=#A1
PUSH HL ; na sklad #A149 (startni naslov)
LD B,#00 ; ime ni pomembno
LD DE,#C000 ; naslov medpomnilnika
CALL #BC77
LD HL,#0400 : začetni naslov v HL
CALL #BC83
RET ; skoči na naslov iz sklada (#A149)

Ko najdemo vse potrebne podatke, se vrnemo v basic in naložimo program z ukazom LOAD "ime', začetni naslov Pred tem seveda znižamo vrh pomnilnika. Nadaljevanje je enako kot pri programih, ki jih naložimo iz basica.

Če je začetni naslov manjši od &173, lahko za prenos na disk uporabite naslednjo strojno rutino, ki posname program s traku in ga po pritisku na katerokoli tipko pošlje na disk z imenom »B». Program bo deloval, če boste pred tem vtipkali

10 FOR A=&B590 TO &B5CD
20 READ A$: POKE A,VAL ("&"+A$)
30 NEXT A
40 CALL &B590
50 DATA CD,65,BC,CD,6E,BC,11,00,C0,06
60 DATA 00,CD,77,BC,D0,21,LB,HB,CD,83
70 DATA BC,D0,CD,7A,BC,CD,71,BC,CD,18
80 DATA BB,11,00,C0,21 ,CD,B5,06,01,CD
90 DATA 8C,BC,2A,A0,B5,ED,5B,37,B1,01
100 DATA LB,HB,3E,02,CD 98,BC,CD,8F,BC
110 DATA C9,42

CALL #BC65
CALL #BC6E ; vključi motor kasetofona
LD DE,#C000
LD B,#00
CALL #BC77
RET NC ; ob napaki se vrni
LD HL,HBLB ; napolni HL z začetnim naslovom
CALL #BC83
RET NC ; ob napaki se vrni
CALL #BC7A
CALL #BC71 ; izključi motor kasetofona
CALL #BB18 ; počakaj, da pritisnem tipko
LD DE,#C000
LD HL,#B5CD ; naslov imena programa
LD B,#01 : število znakov v imenu programa
CALL #BC8C
LD HL,(#B5A0) ; začetni naslov v HL
LD DE,(#B137) : dolžina v DE
LD A,#02 ; tip programa (strojni) v A
CALL #BC98
CALL #BC8F
RET
DEFB #42

Prenos programov, ki imajo končni naslov večji od &A76B je nekoliko bolj zapleten. Program najprej preberemo s traku in ga ponovno zapišemo na trak - tokrat v dveh delih. Prvi del posnamemo od začetnega naslova do &A000, drugi pa od &A000 do končnega naslova Nato resetiramo računalnik in vsak del posebej prenesemo na disk. Ob prenosu drugega dela ga seveda ne posnamemo v diskovni medpomnilnik, temveč npr od naslova &4000 in ga od tam prenesemo na disk Če Hočemo uporabiti tako zapisan program ie treba napisati strojni program, ki bo prebral oba dela: prvega od začetnega naslova drugega pa od #C000 v video RAM, prenesel drugi del iz video RAM-a na naslov #A000 in ga pognal. Za prenos uporabite ukaz LDIR, pred tem pa napolnite BC z dolžino drugega dela. DE s #A000 in HL s #C000 Pisanje tega programa prepuščam vaši hekerski duši.

Če ste dojeli osnovno idejo prenosa programa na disk, vam tudi program« brez glave ne bi smeli delati težav. Začetni naslov in dolžino takega, programa lahko najdete zelo enostavno. Pred ukazom CALL #BCA1 (s katerim se nalagajo programi brez glave) napolnite HL z začetnim naslovom programa in DE z dolžino programa. Startni naslov najdemo tako kot pri programih, ki se nalagajo s strojnim loaderjem.

Če imate tudi po branju tega besedila težave s prenosom programa na disk ali pa vas zanima zamenjava diskovne in tračne verzije programa, mi to sporočite na naslov: Vladimira Nazora 8, 43404 Bušetina.

Moj Micro

★ PUBLISHER: Moj Micro
★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTHOR: BRANISLAV ERPAČIČ
 

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

Lien(s):
» Coding Src's » Transfert disk 40 to 80 tracks
» Coding Src's » Disk Monitor (Pixel)
Je participe au site:

» 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/c
Page créée en 733 millisecondes et consultée 564 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.