APPLICATIONSPROGRAMMATION ★ RUTINA FILL IN POVEčANI ZNAKI NA ZASLONU|MOJ MICRO) ★

Rutina FILL in povečani znaki na zaslonu (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 ★ 

zpis znakov na zaslon je ena temeljnih izhodnih operacij vsakega operacijskega sistema. Znaki se izpisujejo tako. da se njihovo število preračuna v naslov definicije, nato pa se prenese definicija iz ROM (ali RAM. če gre za uporabniško definirane znake) na ustrezno mesto v video pomnilniku. Vse to je mogoče opraviti z nekaj preprostimi operacijami. če video pomnilnik ni zapleten. Pri računalnikih CPC obstajajo trije različni načini prikaza znakov, vsak ima drugačno ločljivost in tako tudi način oganizacije. V ROM (ali RAM) je definicija znakov, od katerih vsak zavzema osem bytov. Vsak bit v bytu predstavlja eno točko, nanaša pa se na vse zaslonske načine. Le v MODE 2 se da taka definicija prenesti brez sprememb v video pomnilnik, za vse druge načine pa je pred vsakim izpisom treba predelati osnovno definicijo, ki ustreza posameznemu načinu. Te predelave so precej zapletene, vendar nam pomagajo podprogrami v ROM.

Iz opisanega je mogoče skleniti, da je izpis znakov v MODE 2 najpreprostejši, zato pa tudi najhitrejši (kar je bistveno za vse resne programe).

Poleg izpisov znakov običajne velikosti je občasno treba izpisati tudi večje znake. Pri tem pa nam operacijski sistem ne pomaga. Za vse zvečane izpise uporabimo dodatni ukaz RSX:

|WRITE. < povečanje normalne točke 1..255 > , < povečanje normalne točke 1..255 >, < nizovna spremenljivka niza znakov, ki jih je treba izpisati > = 4

Niz. ki ga želimo izpisati, je treba namestiti v nizovno spremenljivko, ki jo navajamo kot parameter v ukazu. Pred nizovno spremenljivko je treba dati tudi opičji znak (CHR$(64)). Izpis se začne od grafičnega kurzorja. Znaki bodo izpisani v barvi, ki smo jo določili kot grafično pero in grafični papir. Riše se vedno v načinu FORCE, kajti cilj je bil čim hitrejša rutina. Začetek in meje grafičnega okna zanemarimo; vedno rišemo po vsem zaslonu. Znaki, ki izpadejo z zaslona. bodo izrisani, vendar na nepredvidljivem mestu.

Glavna rutina programa WRITE je pojasnjena v komentarjih k listingu 1.

Rutina FILL je ena temeljnih rutin različnih razširitev grafičnega dela basicovega interpre-terja za vse majhne računalnike, kajti ta rutina zaradi obsega navadno ni v ROM. Pri amstradu CPC 464 je enako. Z racionalizacijo kod operacijskega sistema se je konstruktorjem CPC 6128 posrečilo, da so tudi to rutino spravili v ROM. V časopisih so bile že večkrat objavljene različne rutine FILL. niti ena pa se ne more kosati s tisto v ROM amstrada CPC 6128 - ne po hitrosti, kaj šele po kakovosti (zmožnosti izpolnjevanja zelo kompliciranih likov). To rutino lastniki CPC 6128 lahko pokličejo s CALL &BD52. Vhodni parametri so A = barva, s katero je treba izpolniti lik; HL = naslov prostora, ki ga uporablja program za analiziranje likov in DE* = največja dovoljena dolžina tega prostora Ob vsakem prehodu zraven dela slike, ki ga med tem prehodom ni mogoče izpolniti, si zapomni koordinate tega stolpca, za tako pomnjenje je potrebno sedem bytov. Če prostora ni zadosti, rutina le deloma izpolni lik. Na izhodu je v tem primeru zastavica C resetirana. To rutino začnemo uporabljati z ukazom RSX. Slovnica ukaza je:

|FILL , < barva > , < naslov prostora za analiziranje lika>, < dolžina tega prostora >

Zadnja dva parametra nista obvezna. V tem primeru uporabimo pomnilnik s 64 byti, ki je izza programa. To zadošča le za najpreprostejše like. če pa želite izpolniti tudi bolj zapletene, je treba prej spustiti HIMEM:

MEMORY HIMEM-2000
|FILL,1 ,HIMEM +1,2000

Izpolnjevanje likov se začne od grafičnega kurzorja. Kot meja lika. se vzame barva grafičnega peresa in barva, s katero rišemo. Druge barve obravnavamo tako kot ozadje. V našem primeru se izhodišče in meje grafičnega okna zanemarijo.

Zaradi dolžine programa ne moremo objaviti popolnega listinga izvirnega besedila s komentarji. zato pa opisujemo algoritem.

Ker se pri izdelavi rutine FILL algoritem za risanje ne more bistveno spremeniti, da bi dobili hitrejšo rutino, je treba nameniti posebno pozornost sami tehniki izvedbe. Večina rutin dela tako. da preiskuje točke levo in desno in tako izpolnjuje lik z barvo. Vendar se je pokazalo, da je mnogo boljše, če je zaznavanje točk gor in dol (torej ne po vrstah, ampak po stolpcih). To omogoča računalniku, da masko za posamezno vrsto točk izračuna samo na začetku risanja stolpca, potem pa pride do zgornje linije z rutino SCR PREV LINE. do spodnje pa SCR NEXT LINE, ti rutini sta veliko krajši in hitrejši kot stalno računanje naslova naslednje točke z rutino SCR DOT POS.

Algoritem

Najprej je treba pregledati, ali je grafični kurzor sploh v grafičnem oknu in ali je na mestu kurzorja točka, katere barva je enaka grafičnemu peresu ali barvi, ki izpolnjuje lik.

V obeh primerih je treba prekiniti rutino. V prostor za pomnjenje koordinat stolpcev je treba dati na prvo mesto število 1 , ki označuje dno pomnilnika. Nato je treba poklicati podprogram za izpolnjevanje vseh točk nad začetnim položajem' nato pa še pod tem položajem. Oba podprograma rišeta točke, dokler ne prideta do meje (t.j. grafično pero. barva, s katero se riše. ali konec okna). Iz izhodnih parametrov teh podprogramov je treba potegniti zgornjo in spodnjo koordinato X in Y začetnega stolpca (koordinata X je znana). Nato pokličemo zanko za izpolnjevanje z desne smeri, nato z leve.

Zanka: preverjanje smeri barvanja, pregled konca okna, klic podprograma za izpolnjevanje toliko časa, dokler podprogram ne sporoči, da je stolpec izpolnjen. Nato se vzamejo vrednosti iz prostora za pomnjenje stolpca, drugo za drugo. dokler ne pride število 1. Za vsak stolpec se pomni zgornja in spodnja meja Y. koordinata X in smer. Tu je konec rutine. Podprogram za izpolnjevanje stolpca najprej preveri, ali je na trenutnem položaju mogoče risati (ali pa je tam meja). Če ne more. poišče prvo vrstico, kjer je to mogoče. Če take sploh ni. se vrne. V primeru pa, da lahko takoj riše. izpolnjuje navzdol. Če je trenutna spodnja koordinata Y večja od zgornje, se spremeni smer n preverja točka na poziciji; če naleti na rob. potem poišče konec roba; če je za robom še kaj. kar je mogoče izpolniti, se to vnese v pomnilnik v za to predvideni prostor in nato se spet spremeni smer. Potem se spremenita zgornja in spodnja koordinata Y in se izpolni navzgor. Če je spodnja koordinata Y večja od zgornje, razišče robove in eventualno vnese v pomnilnik (če je še kaj zadaj, do konca okna). Zdaj je treba le paziti, katere koordinate vzamemo kot izhodne. Samo v tej veji podprograma se postavi oznaka za izpolnjeni stolpec.

Kot vidimo, je algoritem precej zapleten. Za njegovo razumevanje moramo porabiti precej časa. ko poskušamo izpolniti lik na papirju, kot to dela računalik. Če to ne zadošča, je treba disassemblirati rutino v strojni kodi in skušati izvleči kaj iz same kode.

Kot je že običajno, se basicov del primera tipka z listinga 2, snema pa se s SAVE"WRFILL.BAS". Nato tipkamo program z listincga 3. Ko se požene, poteka snemanje strojnega programa WRFILL.BIN. Program na disketi ali kaseti je prestavljiv. Demonstracijo je mogoče odtipkati z listinga 4.

V prihodnjem In zadnjem nadaljevanju bomo pitali o risanju likov v vseh načinih.

Siniša Jagodič , Moj Micro

★ PUBLISHER: Moj Micro
★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTHOR: SINIŠA JAGODIČ

Page précédente : Zrcaljenje in pomikanje zaslona
★ AMSTRAD CPC ★ DOWNLOAD ★

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

Lien(s):
» Applications » CPC464 Fill Routine
» Applications » Rutina Fill Colocada (Your Computer)
» Applications » RSX DFILL (Schneider Aktiv)
» Applications » Pattern Fill (Computing with the Amstrad)
» Applications » CPC464 Fill Subroutine (Australian Personal Computer)
» Applications » Fill 464 (AM-Mag)
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/c
Page créée en 121 millisecondes et consultée 26 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.