NL8503461A - Werkwijze voor het genereren van lijnstukken. - Google Patents

Werkwijze voor het genereren van lijnstukken. Download PDF

Info

Publication number
NL8503461A
NL8503461A NL8503461A NL8503461A NL8503461A NL 8503461 A NL8503461 A NL 8503461A NL 8503461 A NL8503461 A NL 8503461A NL 8503461 A NL8503461 A NL 8503461A NL 8503461 A NL8503461 A NL 8503461A
Authority
NL
Netherlands
Prior art keywords
bus
line
data
lines
bit
Prior art date
Application number
NL8503461A
Other languages
English (en)
Original Assignee
Oce Nederland Bv
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oce Nederland Bv filed Critical Oce Nederland Bv
Priority to NL8503461A priority Critical patent/NL8503461A/nl
Publication of NL8503461A publication Critical patent/NL8503461A/nl
Priority to AT86202167T priority patent/ATE63650T1/de
Priority to DE8686202167T priority patent/DE3679304D1/de
Priority to EP86202167A priority patent/EP0229412B1/en
Priority to JP61301147A priority patent/JPH0675977B2/ja
Priority to US07/290,823 priority patent/US4905166A/en

Links

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/20Function-generator circuits, e.g. circle generators line or curve smoothing circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K2215/00Arrangements for producing a permanent visual presentation of the output data
    • G06K2215/0002Handling the output data
    • G06K2215/0005Accepting output data; Preparing data for the controlling system
    • G06K2215/0014Transforming the printer input data into internal codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K2215/00Arrangements for producing a permanent visual presentation of the output data
    • G06K2215/0002Handling the output data
    • G06K2215/004Generic data transformation
    • G06K2215/0042Rasterisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K2215/00Arrangements for producing a permanent visual presentation of the output data
    • G06K2215/0002Handling the output data
    • G06K2215/004Generic data transformation
    • G06K2215/0042Rasterisation
    • G06K2215/0048Converting skeleton to bitmap
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K2215/00Arrangements for producing a permanent visual presentation of the output data
    • G06K2215/0002Handling the output data
    • G06K2215/0062Handling the output data combining generic and host data, e.g. filling a raster
    • G06K2215/0065Page or partial page composition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K2215/00Arrangements for producing a permanent visual presentation of the output data
    • G06K2215/0082Architecture adapted for a particular function

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Image Generation (AREA)
  • Laser Beam Printer (AREA)
  • Dot-Matrix Printers And Others (AREA)
  • Record Information Processing For Printing (AREA)
  • Manufacturing Of Printed Wiring (AREA)
  • Light Guides In General And Applications Therefor (AREA)
  • Character Discrimination (AREA)

Description

Γ
— ~-S
< -*
Uitvinder: C,P. Schuerman
Océ-Nederland B.V., te Venlo
Werkwijze voor het genereren van li.instukken
De uitvinding betreft een werkwijze voor het genereren van lijnstukken volgens de aanhef van conclusie 1.
Een dergelijke werkwijze kan worden toegepast in een electronisch printsysteem, waarbij gegevens omtrent het te vormen lijnstuk met 5 behulp van bijvoorbeeld een aangesloten werkstation kunnen worden ingevoerd en via een front-end systeem dat een woord-geörienteerd bit-map geheugen bevat aan een raster output scanner kunnen worden toegevoerd.
Dergelijke raster output scanners zijn ingericht om met behulp 10 van serieel aangeboden data lijnsgewijs een volledige pagina af te drukken.
Een typische vertegenwoordiger van dit soort raster output scanners is een laserprinter, waarbij een lichtstraal beeldmatig wordt gemoduleerd en waarbij deze gemoduleerde lichtstraal met behulp van 15 een polygoonspiegel lijnsgewijs wordt afgebogen over een lichtgevoelig oppervlak, zoals een zinkoxide-hinderlaag welke op een flexibele band is aangebracht. Op bekende wijze kan hierop een latent beeld worden geschreven met behulp van de gemoduleerde lichtstraal. Dit latente beeld kan op bekende wijze worden ontwikkeld en overgedragen op een 20 ontvangstmateriaal zoals een blad papier.
Met behulp van het werkstation kan ook tekst worden ingevoerd die eveneens op een pagina moet wordenjafgedrukt. In het front-end wordt deze (gecodeerd) ingevoerde tekst geëxpandeerd met in een geheugen opgeslagen font-data, en de geëxpandeerde tekst wordt eveneens in het 25 bit-map geheugen opgeslagen. Bovendien kan met behulp van een scanner verkregen grafische data van bijvoorbeeld een origineel aan het werkstation en bit-map geheugen worden toegevoerd.
Het werkstation is voorzien van een display met behulp waarvan de af te drukken pagina kan worden samengesteld. Via het werkstation kan de 30 lay-out van de pagina naar believen worden gevarieerd. Met speciale commando's welke via het werkstation worden ingegeven kan het front-end allerlei krommes zoals rechte lijnstukken, cirkels of cirkelbogen, 8503431 v.
t » -2- r· enz. genereren en in het bitmapgeheugen plaatsen.
De toenemende resolutie van raster output scanners maakt deze steeds beter geschikt voor het afdrukken van grafische informatie. De grafische informatie (lijnstukken e.d.) moeten op het raster van deze 5 raster output scanner afgebeeld worden. Het afbeeldingsproces bestaat uit het bepalen van de verzameling rasterpunten die geactiveerd moeten worden. De geactiveerde rasterpunten worden aldus in een woord georiënteerd bit-map geheugen geschreven. Gezien het grote aantal te genereren rasterpunten is een snelle verwerking hiervan noodzakelijk.
10 Het doel van de uitvinding is dan ook om een werkwijze voor het genereren van lijnstukken te verschaffen welke in overeenstemming is met de grote afdruksnelheid bij een hoog oplossend vermogen van de printer.
Dit doel wordt volgens de uitvinding bereikt met een werkwijze volgens 15 de aanhef door het kenmerkende gedeelte van conclusie 1.
Hiermee wordt bereikt dat lijnstukgeneraties met eenvoudige en dus snelle algorithmen kunnen worden gerealiseerd en dat het aantal benodigde geheugenaccess cycli minimaal is.
Deze en andere voordelen zullen duidelijk worden gemaakt aan de 20 hand van de hierna volgende beschrijving en met behulp van figuren, waarvan:
Fig. 1 een schematische weergave van een front-end systeem is,
Fig. 2 de processen weergeeft die door de raster-beeld-processor kunnen worden uitgevoerd, 25 Fig. 3 een schematische weergave van een raster-beeld-processor is,
Fig. 4 een schematische weergave van een VME-bus interface is,
Fig. 5 een schematische weergave van een laser scan module interface is,
Fig. 6 een schematische weergave van een 16-bits processor systeem van de raster-beeld-processor is, 30 Fig. 7 een schematische weergave van een raster-beeld-bus interface is,
Fig. 8 een schematische weergave van een VME-master interface van het VME-bus interface is,
Fig. 9 de plaatsing van een karakter in het bit-map geheugen voorstelt, Fig. 10 de resultaten van een aantal mogelijke bewerkingen in het bit-35 map geheugen weergeeft, en
Fig. 11 een schematische weergave van een raster-beeld-geheugen is.
Fig. 12 een lijnstuk met ronde einden voorstelt, 8503461 -3-
Fig. 13 een lijn door de punten P1 en P2 voorstelt,
Fig. 14 een detailsehets ter verduidelijking van de bepaling van het snijpunt van de lijn met een cirkel om het beginpunt van die lijn is, 5 Fig. 15 een flow diagram van een werkwijze voor de bepaling van het snijpunt S* is,
Fig. 16 een lijnstuk, afgebeeld op rasterpunten voorstelt,
Fig. 17 a, b en c een flow diagram van een werkwijze voor een lijngeneratie van een lijnstuk met ronde einden voorstelt, en 10 Fig. 18 een lijnstuk met rechte uiteinden voorstelt.
Fig. 1 is een schematische weergave van een front-end systeem. Hierin is een front-end controller 10 (FEC) met een bedieningsconsole 19 verbonden en tevens met het besturingssysteem van een printer 20. Printer 20 is een raster output scanner, waarbij een lichtstraal 15 beeldmatig wordt gemoduleerd en lijnsgewijs over het oppervlak van een lichtgevoelig element wordt afgebogen. Het lichtgevoelig element wordt loodrecht op de afbulgrichting van de lichtstraal voortbewogen teneinde een totaal beeld rastervormig te kunnen schrijven. Een voorbeeld van een rasteroutput scanner is een laserprinter, waarbij een 20 gemoduleerde laserstraal met behulp van een roterende meervlaksspiegel over het oppervlak van een opgeladen fotogeleider wordt voortbewogen. De fotogeleider wordt hierbij beeldmatig uitbelicht, en het verkregen ladingsbeeld kan op bekende wijze met toner worden ontwikkeld, vervolgens overgedragen op een ontvangstblad en met warmte gefixeerd. De 25 front-end controller 10 bevat een 16-bits microprocessorsysteem met -een 68000 microprocessor van Motorola en fungeert in samenwerking met lokale ROM en een deel van een random-acces-geheugen 12 (RAM) als besturingssyteem voor het front-end. In een font-leesgeheugen 13 zijn de bitpatronen van een aantal lettertypen opgeslagen. Het front-end 30 kan via een 1/0 processor 11, welke eveneens een 16-bits micropro- cessorsysteem met een 68000 microprocessor van Motorola bevat, met een schijfgeheugen, werkstation, computer en/of clustercontroller worden verbonden. De FEC 10, 1/0 processor 11, RAM 12 en font-geheugen 13 zijn met elkaar verbonden via een standaard VME-bus 14. Het font-35 geheugen 13 kan ook als RAM worden uitgevoerd of deel uitmaken van SS Ö 3 4 S t r * * -4- RAM12. Vanuit een schijvengeheugen of floppy-diskgeheugen worden de bitpatronen van de fonts dan in dit RAM geladen.
Een raster image processor 15 (RIP) is eveneens met de VME-bus 14 verbonden. Bovendien is de raster image processor 15 via een raster 5 image bus 17 (RI-bus) met een pagina-groot bit-raap geheugen 16, ook raster image memory genoemd (RIM), verbonden. De RIP 15 dient voor het beeldmatig vullen van het bit-map geheugen 16 (RIM) met lettertekens die uit het font-geheugen 13 worden opgehaald en op de juiste plaats in het bit-map geheugen 16 worden weggezet. Bovendien kan de RIP 15 10 grafische informatie uit geheugen 12 ophalen en eveneens op de gewenste plaatsen in het bit-map geheugen 16 wegzetten. Indien het bit-map geheugen 16 is gevuld kan dit weer via de RIP 15 worden uitgelezen, waarbij de uitgelezen gegevens als een seriële pixel-bit stroom via lijn 18 aan de modulator van de laserprinter worden toegevoerd.
15 Het beeld dat op de fotogeleider wordt geschreven wordt opgebouwd uit pixels van 0,05 x 0,05 mm, zodat voor het afdrukken van een A4 formaat zwart/wit beeld circa 4000 x 6000 pixels nodig zijn. Dientengevolge is bit-map geheugen 16 circa 24 Megabit of 3 Megabyte groot. Bij het uitlezen van het bit-map geheugen 16 is de pixel-bit-20 rate naar de modulator van de laserprinter via lijn 18, circa 25
Megapixels/sec., zodat een pagina van A4 formaat in circa 1 sec. kan worden geprint.
Alle gegevens omtrent een af te drukken pagina worden via de 1/0 processor 11 vanaf bijvoorbeeld een werkstation en onder besturing 25 van de FEC 10, in het RAM 12 opgeslagen.
Hiertoe staan verschillende mogelijkheden ter beschikking.
Uitgaande van bijvoorbeeld een A4 pagina die in de "portretmode” moet worden geprint, worden circa 4000 deeltabellen gemaakt, overeenkomende met de circa 4000 scanlijnen die nodig zijn om een pagina te 30 schrijven. In elke deeltabel worden lettercodes van die lettertekens of grafische tekens opgeslagen die op een bepaalde scanlijn hun startpunt hebben. Elke lettercode bevat bovendien gegevens omtrent de X-positie welke het teken op de scanlijn inneemt, gegevens omtrent het font-type alsmede gegevens omtrent de hoogte en de breedte van een bepaald 35 teken. Ook bevat de lettercode gegevens omtrent een basisadres in het font-geheugen 13, waar de bit-representatie van dit teken in 16-bits woorden is opgeslagen. De verzameling van de aldus gevormde lijsten 8503 461 -5- * '* f wordt de lijst der primitieven genoemd.
Zijn de gegevens omtrent een af te drukken pagina aldus in het HAM 12 opgeslagen, dan kan gestart worden met het vullen van het bitmap geheugen 16. Daartoe worden de lettercodes uit het RAM 12 één voor 5 een door de RIP 15 opgehaald, en met de bijbehorende bit-representatie uit het font-geheugen 13» geëxpandeerd en op de juiste X en Y-positie in het bit-map geheugen 16 weggezet. Op overeenkomstige wijze worden alle tekens een voor een afgewerkt totdat het bit-map geheugen 16 geheel is gevuld met de pixel-representatie van de af te drukken 10 pagina.
Het is niet noodzakelijk deze deellijsten te vormen. De gegevens omtrent een af te drukken pagina kunnen ook in een willekeurige volgorde in het RAM 12 worden opgeslagen. Bij het vullen van het bit-mapgeheugen 16 wordt het RAM 12, waarin de primitieven in een wille-15 keurige volgorde zijn geplaatst, achter elkaar uitgelezen, geëxpandeerd en op de bijbehorende plaatsen in het bit-map geheugen 16 geplaatst. Volgens weer een andere mogelijkheid worden alle op een pagina voorkomende tekens slechts één keer opgeslagen en voorzien van gegevens omtrent de verschillende posities die elk teken op de pagina inneemt.
20 Zo worden de gegevens omtrent een veel voorkomend teken, zoals bijvoorbeeld de letter e, slechts één keer opgeslagen in het RAM12 en alle posities die deze letter op de pagina inneemt worden in een aparte tabel toegevoegd.
Gewoonlijk worden eerst de grafische tekens die in het RAM12 of 25 font-geheugen 13 zijn opgeslagen in het bit-map geheugen 16 gezet en daarna pas de lettertekens.
De Raster Image Processor
In Fig. 2 zijn de processen weergegeven die door de RIP 15 kunnen worden uitgevoerd. Na het opstarten van het systeem (3tap 24) wordt de 30 RIP 15 gelnitialiseerd (stap 25)(INIT-commando) door een systeemreset of een INIT-commando van de front-end controller 10, waarna het "zelftest” proces (stap 26) wordt gestart. Deze "zelftest" omvat het testen van verschillende RIP functies en bit-map geheugen (RIM) functies. De RIP 15 mag geen toegang tot de VME-bus 14 hebben gedurende de 35 zelftestprocedure, want de FEC 10 heeft de VME-bus 14 nodig voor het testen van het RAM 12 en font-geheugen 13· Wanneer de RIP 15 het "zelftest" programma met succes heeft uitgevoerd, wordt een interrupt 35Ö34S1 • % -6- signaal aan de FEC 10 doorgegeven, en de RIP 15 gaat in de wachtstand (stap 27). Wanneer het zelftestprogramma een fout heeft gedetecteerd gaat de RIP 15 ook in de wachtstand (stand 27), maar er wordt geen interrupt naar de FEC 10 gegenereerd. Op deze wijze weet de front-end 5 controller 10 dat er een fout in de RIP 15 "zelftest" is geconstateerd. Een fout wordt tevens door het oplichten van een LED aan de bedienaar gesignaleerd.
Op een "RIP-diagnose" commando van de FEC 10 naar de RIP 15» start het RIP-diagnose proces. De RIP 15 voert een aantal interne 10 testen uit en ook een aantal testen op het RIM 16. De resultaten van deze testen worden opgeslagen in het RAM 12 en kunnen worden doorgegeven aan, en zichtbaar gemaakt op bedieningsconsole 19. Het RIP-diagnose proces test ook de VME-interfaces. Het RIP-diagnose proces heeft een meer uitgebreid karakter, terwijl het zelftest proces een 15 meer functionele hardwaretest uitvoert. Na het beëindigen van het RIP-diagnose proces, slaat de RIP 15 status informatie op in het RAM 12, genereert een interrupt naar de FEC 10 en geeft de VME-bus 14 vrij.
Nadat de RIP 15 een "vul bitmap" commando ontvangt van de FEC 10, controleert de RIP 15 het datatransport op de VME-bus 14. De RIP 15 20 krijgt zo toegang tot het RAM 12, welke de primitieven bevat van de pagina die geprint moet worden.
De RIP 15 expandeert de primitievenlijst met behulp van de pixelrepresentaties van de fonts en zet deze weg in het bit-map geheugen 16 (RIM). De RIP 15 heeft toegang tot het RIM 16 via de RI-25 bus 17. Het RIM 16 bevat bovendien modificatie logica, welke de RIP 15 ondersteunt bij het uitvoeren van verschillende rekenkundige bewerkingen op data voor het bit-map geheugen 16, zoals bijvoorbeeld AND-, 0R- en INVERT-operaties. Na het vullen van de bit-map (stap 28), slaat de RIP 15 status informatie· op in het RAM 12, genereert een 30 interrupt naar de FEC 10 en geeft de VME-bus 14 vrij.
De FEC 10 genereert vervolgens een "lees bitmap"-commando en de RIP 15 zal wachten op een pagina-synchronisatie signaal dat van de laserprinter afkomstig is via een besturingsinterface. Na deze pagina-synchronisatie start de RIP 15 met het uitlezen van het RIM 16 (stap 35 29) en genereert een seriële pixel-bit-stroom welke via een video interface aan de modulator van de laserprinter wordt toegevoerd. Na het beëindigen van het bit-map leesproces (stap 29) slaat de RIP 15 850 3 46 1 " t * -7- weer status gegevens op in het RAM 12, genereert een interrupt naar de FEC 10 en geeft vervolgens de VME-bus 14 vrij.
Qe RIP 15 (Fig. 3) is opgebouwd rond een intern bussysteem, de raster image processor bus 46 (RIP-bus), welke een synchrone bus is 5 en ingericht om uitsluitend 16-bits woorden te transporteren. De RIP-bus 46 bevat datalijnen 47, adres- en controlelijnen 48 en con-ditielijnen 49· Via een VME-bus interface 41 is de RIP-bus met de VME-bus 14 verbonden en via een RI-bus interface 45 met de RI-bus 17.
Deze RI-bus 17 bevat onder andere data-en adreslijnen 58, een busy-10 lijn 57, een RI-bus-address-available lijn 56, een klok-lijn 54 en modificatielijnen. Bovendien i3 de RIP-bus 46 verbonden met een laserscanmodule interface 44 (LSM-interface) en de eigenlijke Central Processing Unit 43 (CPU) van de RIP 15. Het laserscanmodule LSM-interface 44 is verbonden met lijnen afkomstig van de printer, zoals 15 een «start of scan*’ lijn 52 (SOS), waarover een synchronisatie signaal wordt aangevoerd om het begin van een te printen lijn aan te geven, een burst-lijn 53, waarover een signaal dat overeenkomt met de gewenste pixelfrequentie wordt toegevoerd en een videolijn 18, waarover de seriële pixel-bit-stroom bij het uitlezen van het bit-map 20 geheugen 16 aan de modulator van de laserprinter wordt toegevoerd. De adres- eri controlelijnen 48 en de conditielijnen 49 zijn ook nog met een pagina-synchronisatie interface 42 verbonden. Over lijn 50 wordt . een "page-available” signaal (PAV) aan de besturingsinrichting van de printer toegevoerd, dat aangeeft dat een pagina in het bit-map 25 geheugen 16 volledig is geformateerd en dat de RIP 15 met een "start-of-page" (SOP) via lijn 51, afkomstig van de besturingsinrichting van de printer, aan de uitlezing van het bit-map geheugen 16 kan beginnen.
VME-bus interface 30 In Fig. 4 is de VME-bus interface 41 schematisch nader weergege ven. Een master-interface 100, een slave-interface 101 en een interruptor 102 zijn met de VME-bus 14 verbonden. De datalijnen 47 van de RIP-bus 46 zijn met het master-interface 100 verbonden. De adresen controlelijnen 48, evenals de conditielijnen 49 van de RIP-bus 35 46 zijn aangesloten op het master-interface 100, het slave-interface 101 en de interruptor 102. De VME-bus interface 41 heeft als taak om de RIP 15 af te schermen van de a-synchrone VME-bus 14. Het VME- 8503461 -8- master-interface 100 (VME-MI) bevat een intern besturingssysteem waarmee de aanwezig buffers en registers worden gestuurd en via deze interface kunnen accesscycles op de VME-bus 14 worden uitgevoerd. In de besturing is programmeerbare logica toegepast. Ook het slave-5 interface 101 en de interruptor 102 zijn voor de besturing van programmeerbare logica voorzien.
Het VME-MI 100 (Fig. 8) omvat ook data-transfer functies zoals data base-master (DTB master) en data base requestor (DTB requestor). Om de gewenste snelheid in het data transport te bereiken zijn in dit 10 VME-MI 100 enkele extra functies toegevoegd. '
De eerste functie is een adres up/down teller, gevormd door een adres-hoog teller 132 en adres-laag teller 133* Bij het laden van het RIM 16 met de bit representaties van de verschillende lettertekens of grafische tekens die elk afzonderlijk met opeenvolgende adressen in 15 het font-geheugen 13 of het RAM 12 zijn opgeslagen, worden de tellers 132 en 133 voor elk teken vóóringesteld met het basisadres van dat teken in bijvoorbeeld het RAM 12. Via buffer 134 en de VME-adresbus 141 van VME-bus 14 wordt dit basisadres aan het RAM 12 toegevoerd, en het eerste 16-bits woord op die betreffende geheugenplaats wordt via 20 de VME-databus 142 van de VME-bus 14 aan een bi-directionele buffer 135 toegevoerd en vervolgens op de juiste plaats in het RIM 16 geplaatst. Het volgende adres voor het RAM 12 wordt gegenereerd door de teller 133 met één te verhogen en het tweede 16-bits woord wordt via het VME-MI 100 aan het RIM 16 toegevoerd. Op overeenkomstige wijze 25 worden alle bij een bepaald teken behorende adressen gegenereerd, net zo lang tot het teken volledig in het RIM 16 is geschreven.
Op deze wijze wordt bereikt dat de CPU 43 per teken slechts één keer een basisadres hoeft te genereren, zodat tijdens het laden andere functies uitgevoerd kunnen worden, bijvoorbeeld pixel bewerkingen, 30 RIM-adres bepaling, enz.
Nadat een teken is afgewerkt, wordt een nieuw basisadres voor een volgend teken aan de tellers 132 en 133 toegevoerd en de bovenbeschreven cyclus wordt herhaald.
De tweede functie, de spiegelfunctie, wordt uitgevoerd met een 35 spiegelschakeling 136, welke is opgebouwd met programmeerbare logica, zoals FPLA1s of PAL’s, en welke kan worden toegepast wanneer tekens 1800 geroteerd in het RIM 16 moeten worden gezet. De spiegelscha- 8503461 * » -9- keling 136 verwisselt van een 16-bits woord bit-0 met bit-15, bit-1 met bit-14, bit-2 met bit-13» enz.
De CPU 43 genereert nu niet het basisadres, maar berekent uit gegevens omtrent lengte en breedte en het basisadres van een teken het 5 hoogst voorkomende adres voor dat bepaalde teken in het RAM 12. Dit hoogste adres wordt in de tellers 132 en 133 geladen terwijl de tellers tevens door VME-MI controller 130 worden omgeschakeld tot down-tellers. Na elk geheugen access van RAM 12 wordt de inhoud van de teller 133 met één verlaagd en de 16-bits woorden uit RAM 12 worden in 10 spiegelschakeling 136 gespiegeld en via het data-in register 137 in het RIM 16 geplaatst. Deze cycli worden voortgezet totdat het oorspronkelijke basisadres van het teken is bereikt.
In het VME-MI 100 is ook een data-uit register 138 via datalijnen 47 met de RIP-bus 46 verbonden, om aldus data naar bijvoorbeeld de FEC 15 10 of naar RAM 12 te voeren.
De VME-MI controller 130 is via controlelijnen 48 en conditielijnen 49 met de RIP-bus 46 verbonden en bovendien via een buffer 131 «net adres-, data-, en controlelijnen 139 en bus-arbitragelijnen 140 van de VME-bus 14.
20 De CPU 43 kan verschillende toestanden in het VME-MI 100 aanroepen, zoals "release-bus", "multiple access", "single access" en "change". Voordat de VME-MI 100 in de single-of multiple access toestand kan overgaan, moeten eerst nog de volgende gegevens worden gespecificeerd: lezen of schrijven, normaal of gespiegeld, het 25 gewenste adres en de te verwerken data. Deze specificaties kunnen alleen veranderd worden tijdens de "release-bus" toestand en tijdens "change" toestand. De te verwerken data kan echter steeds worden gewijzigd. Dit wordt ook aangegeven door een "CHANGE ACKNOWLEDGE" lijn. Het register dat de gelezen data van de VME-bus 14 bevat kan 30 steeds worden uitgelezen wanneer een "REGISTER FULL"-lijn actief is.
Na het aanroepen van een "release-bus" toestand zal de VME-MI 100 de VME-bus 14 vrijgeven. Dit betekent dat de VME-bus drivers gedisabled worden en een BBSY-signaal van de VME-bus inactief wordt gemaakt. Het vrijgeven van de VME-bus 14 kan slechts dan geschieden 35 wanneer de laatste access cycle volledig is afgewerkt. Een "CHANGE ACKN0WLEDGE"-signaal geeft aan dat de "release-bus" toestand is ingetreden. In deze toestand van het interface kan geen access op de 8503461 » 4 -10- VME-bus 14 plaatsvinden. Na een "change" aanvrage wordt het VME-MI 100 geïnstrueerd bezit te nemen van VME-bus 14, indien dit nog niet het geval was. Dit wordt gerealiseerd met de bus-arbitrage lijnen 140. Via de "CHANGE ACKNOWLEDGE"-lijn wordt aangegeven dat de "change" 5 toestand is bereikt. Een access op de VME-bus 14 kan dan plaatsvinden. Ook tijdens de "change" toestand kunnen de inhouden van de adres- en dataregisters worden veranderd. Met "change" wordt een mogelijkheid gegeven om accesses op de VME-bus tijdelijk te stoppen zonder dat de VME-bus wordt vrijgegeven. Een single access op de VME-bus kan gestart 10 worden door het aanroepen van een "single cycle" toestand. Wanneer de voorgaande toestand een "release-bus" toestand was, wordt pas bezit genomen van de VME-bus via een overeenkomstig actief signaal van de arbritrage logica. Hierna kan pas een woord access worden uitgevoerd op de VME-bus.
15 Een lees/schrijf indicator beslist of een lees- of een schrijf- cyclus moet worden uitgevoerd.
Een leescyclus betekent dat data van de VME-bus 14 worden ingeklokt in het data-in register 137 via de spiegelschakeling 136» welke laatste geactiveerd kan worden met behulp van een 20 normaal/gespiegeld indicator. Wanneer data in het data-in register 137 worden ingeklokt, wordt een REGISTER-FULL vlag gezet om aan CPU 43 te signaleren dat de transfer van data is afgelopen en dat de data zijn binnengekomen in het genoemde register. De REGISTER-FULL vlag wordt gezet op het moment dat de data in het data-in register 137 worden 25 gelezen en na deze access wordt de inhoud van de adresteller met één verhoogd. In het geval van een enabled spiegelfunctie, wordt de inhoud van de adresteller met één verlaagd. Wanneer de REGISTER-FULL vlag nog is geactiveerd en data worden gelezen van de VME-bus, wordt de normale VME-cyclus verlengd totdat het data-in register 137 geheel is uitgele-30 zen en nieuwe data in het data-in register 137 zijn ingelezen.
Een schrijfcyclus is in principe hetzelfde als een leescyclus. Het enige verschil is de richting van de datastroom. In een schrijf-cyclus worden de data, welke zich in het data-uit register 138 bevinden, getransporteerd naar de VME-bus 14. De spiegelschakeling 136 35 verandert niets aan de geschreven data. Het data-in register 137 moet al reeds gelezen zijn om de REGISTER-FULL vlag te kunnen clearen.
De "multiple access" toestand vertoont veel overeenkomsten met de 85 0 3 4 6 1
* V
-11- "single access” toestand. Een "single-access” is bedoeld voor het lezen en schrijven van commando’s van, en status informatie naar de FEC. Een "multiple access" is vooral bedoeld voor het lezen van grafische- en font-data, waarbij door het VME-MI 100 automatisch een 5 volgende access wordt gestart. Het nieuwe adres wordt gegenereerd door de adresteller. De enige actie die hierbij uitgevoerd moet worden is het lezen van het data-in register 137.
De hiervoor beschreven verschillende toestanden worden geselecteerd met de VME-MODE lijnen welke verbonden zijn met enkele 10 signaallijnen van de CPU 43. De lees/schrijfselector en de normaal/gespiegeld selector zijn eveneens verbonden met dergelijke signaallijnen. De CHANGE-ACKNOWLEDGE en VME-Register-Full signalen zijn afkomstig van de WAIT-lijnen van de CPU 43. Het VME adres wordt opgeslagen in 24-bit tellers132 en 133» de input- en output-data in 15 twee 16-bit registers 137 en 138. "Adres-hoog"- en "adres-laag" van tellers 132 en 133 en het data-out register 138 worden geladen met behulp van register-kloklijnen. Het data-in register 137 kan gelezen worden met behulp van een register enable lijn afkomstig van de CPU 43- 20 Het LSM-interface
In Fig. 5 is het LSM-interface 44 nader schematisch weergegeven.
Bij het uitlezen van het RIM 16 haalt de RIP 15 een 16-bits woord uit dit geheugen op en geeft dit via datalijnen 47 van de RIP-bus 46 door aan register 111. Het besturingsblok 110 geeft over lijn 115 een 25 "load"-signaal af aan schuifregister 112 en de inhoud van register 111 wordt parallel in het schuifregister 112 geladen. De laserprinter geeft burst-pulsen af met een frequentie van circa 24 MHz, die over lijn 53 en via 1/0 buffer 113 aan het schuifregister 112 en het besturingsblok 110 worden toegevoerd. Met deze pulsen wordt de inhoud 30 van het schuifregister 112 serieel uitgeschoven en via I/O buffer 113 over lijn 18 aan de modulator van de ROS toegevoerd.
De burst-pulsen worden in het besturingsblok 110 aan een 16-teller toegevoerd en wanneer 15 pulsen zijn geteld of tijdens de 16e telpuls, wordt een inmiddels nieuw in register 111 gezet woord, 35 parallel aan schuifregister 112 doorgegeven en uitgeschoven. Vóór de uitschuifoperatie van dit 16-bits woord start, wordt het register 111 geladen met een nieuw 16-bits woord. Er wordt een "EMPTY"-vlag gezet 8503 4Si -12- , J> » wanneer data in het schuifregister 112 zijn gezet en nieuwe data in het register 111 mogen worden geschreven. De "EMPTY”-vlag is aangesloten op een "wachtlijn” van de CPU 43 van de RIP 15. Op deze wijze wordt achtereenvolgens een hele scanlijn aan de ROS doorgegeven. Het 5 besturingsblok 110 geeft conditiesignalen af aan de CPU 43 over con-ditielijnen 49 van de RIP-bus 46. Nadat een scanlijn is afgewerkt en vóór een SOS-signaal via lijn 52 vanaf de ROS aan het besturingsblok 110 wordt toegevoerd, wordt het ophalen van data uit het RIM 16 door de RIP 15 even gestaakt (wait-conditie). Gedurende deze tijd wordt het 10 register 111 gecleared via lijn 114. Op het SOS-signaal wordt de eerder beschreven cyclus van vullen van register 111, doorgeven aan schuifregister 112, uitschuiven enz., weer voor een volgende scanlijn herhaald. Na het laden van een woord in register 111 wordt de "full” status eveneens via conditielijnen 49 aan de CPU 43 doorgegeven, 15 waarbij deze met het ophalen van een nieuw woord wacht totdat de inhoud van het register 111 weer in het schuifregister 112 geladen is. Met behulp van een teller in de CPU 43 wordt na een PAV-signaal het aantal SOS-pulsen geteld, en hiermee kan worden vastgesteld wanneer een pagina volledig aan de ROS is doorgegeven.
20 De Central Processing Unit
In Fig. 6 is de CPU 43 van de RIP 15 nader schematisch weergegeven. Deze CPU is opgebouwd rond een microprogrammeerbare microprocessor, processor 74, type Am2911ö, en een bijbehorende address sequencer 70, type 2910A, beide van Advanced Micro Devices.
25 Op elke klokcyclus wordt de microinstructie die moet worden uitgevoerd in het micro-instructieregister 72 gezet. Deze microinstructie is afkomstig van de micro-PROM 71 en deze wordt weer geadresseerd met behulp van de address sequencer 70. Elke functie in de processor 74 wordt bestuurd door een deel van de micro-instructie-30 bits. Deze micro-instructies kunnen worden verdeeld in bits voor de address sequencer 70, de processor 74, de sprong-adres besturingseenheid 79» de conditieselector 75, de wachtselector 77 en de enables 78.
De volgorde van uitvoering van de micro-instructies die zijn 35 opgeslagen in de micro-PROM 71» wordt eveneens gestuurd door de address sequencer 70. Naast de mogelijkheid van opeenvolgende toegang tot de adressen, kunnen ook conditionele spronginstructies naar elke 8503 46 1 -13- micro-instructie in het 4096 grote micro-woordbereik van de micro-PROM 71 worden uitgevoerd. Een LIFO-stack voorziet in een micro-subroutine-return-koppeling en inlusmogelijkheden. De stack is negen stappen diep. Voor elke micro-instructie voorziet de address sequencer 5 70 in een 12-bits adres dat wordt geïnitieerd vanuit een van de vier navolgende bronnen: - het micro-programma-adresregister (PC), welk gewoonlijk een adres aangeeft met een adresverhoging van één, ten opzichte van het in behandeling zijnde adres. Echter, wanneer een "wacht" toestand wordt 10 gegenereerd door wacht-selector 77, wordt de PC niet verhoogd.
- een externe ingang, aangesloten op lijnen 92, die zijn data krijgt van het sprong-adres besturingseenheid 79.
- een negen stappen diepe LIFO-stack, welke tijdens een voorafgaande micro-instructie wordt geladen met de inhoud van het micro- 15 programma-adresregister (PC).
- een register/teller, welke de data die gedurende een voorafgaande micro-instructie vanaf een externe ingang zijn geladen, vasthoudt.
De processor 74 is een microprogrammeerbare 16-bit microprocessor, type Am 29116, met een instructieset die geoptimaliseerd is 20 voor grafische toepassingen. De instructieset voor de processor 74 omvat met name single and double operand, rotate-n-bits en rotate & merge.
De processor 74 ontvangt zijn instructies voor het uitvoeren van een operatie van het micro-instructieregister 72 via bus 83 en een 25 instructie-modificatieschakeling 73.
De instructie-ingang wordt ook als data-Ingang toegepast voor "immediate"-instructies. Wanneer de "instructie-enable" (IEH) ingang van de processor 74 via lijn 9¾ wordt geactiveerd, worden de resultaten van de uitgevoerde instructie in de accumulator en het status-30 register in de processor 74 vastgehouden. Wanneer een "output enable" (0E) via lijn 95 wordt geactiveerd, worden de datalijnen van de CPU 43 geschakeld als uitgangen en ze bevatten de inhoud van de ALU van processor 74. Omgekeerd, wanneer via lijn 95 de "output enable" inactief wordt gemaakt, fungeert de databus van de CPU 43 als 16-bits ingang, 35 en kunnen gegevens welke op de RIP-bus aanwezig zijn via datalijnen 47 aan de processor 74 worden toegevoerd. Deze gegevens kunnen dan in een intern register worden vastgehouden. De databus van de processor 74 is 8503461 -14- rechtstreeks met de datalijnen 47 van de RIP-bus verbonden.
Op de "status bus" 87 van de processor 74 is tijdens elke cyclus de status van de ALÜ beschikbaar (bijvoorbeeld carry, negatief, nul, overflow). De instructie-modificatieschakeling 73 maakt het mogelijk 5 om de in de micro-PROM 71 vastgelegde instructies aan te passen om bij instructies, zoals bijvoorbeeld "rotate n-bits", het aantal bits aan te geven waarmee moet worden geroteerd. Dit aantal bits wordt dan gespecificeerd via een aantal lijnen (91) van de processor-datalijnen 47» 10 Wanneer een IEN signaal op de lijn 94 de instructie input van de processor 74 inactief maakt, kunnen dezelfde processor-instructie-bits die op bus 83 aan de processor 74 worden toegevoerd, via bus 84 ook aan de sprong-adres besturingseenheid 79 worden toegevoerd, en zo worden gebruikt om de address sequencer 70 naar een willekeurig ander 15 adres te laten springen. Normaliter ontvangt de eenheid 79 zijn sprongadres uit de inhoud van een register dat via bus 90 met data van datalijnen 47 is gevuld.
De conditieselector 75 bevat een één-uit-acht multiplexer, en de uitgang hiervan is via lijn 89 met de address sequencer 70 verbonden. 20 Eén van de acht mogelijke condities, welke van de conditielijnen 49 van de RIP-bus, of van de processor-status lijnen 87, via status buffer 76 en lijnen 88 aan de ingang van de conditieselector 75 worden aangelegd, kan worden gekozen. De geselecteerde conditie wordt gebruikt door de adress sequencer 70 om de gewenste conditionele 25 instructie uit te voeren. Eventuele nieuwe condities kunnen in de statusbuffer 76 worden geladen door een selectie-enable signaal (SLE) via lijnen 85 aan de status buffer 76 toe te voeren.
De "wachtselector" 77 bevat eveneens een één-uit-acht multiplexer, welke in actieve toestand één van de acht "wacht"-lijnen 30 97 via lijn 93 met de address sequencer 70 verbindt. Een nul-niveau op een wachtlijn stopt de programmateller van het programma-adres-register. De wachtlijnen zijn verbonden met de conditielijnen van de RIP-bus.
Het enable blok 78 heeft verschillende functies en genereert 35 bovendien alle signalen die nodig zijn voor de besturingslijnen op de RIP-bus. Het voert drie verschillende functies uit: A. Het genereren van "enables".
850 3 46 1 * \ -15-
De enable signalen bepalen welke van de data registers die met hun uitgangen aan de RIP-bus zijn verbonden moeten worden geactiveerd.
Voor elk register is één enable lijn voorhanden.
B. Het opwekken van registerklokken.
5 De kloklijnen bepalen welke dataregisters die met hun ingangen aan de RIP-bus zijn aangesloten, data moeten inklokken. Er is voor elk register één kloklijn aanwezig.
C. Het opwekken van andere signalen.
De signalen op de signaallijnen worden gebruikt als flags en func-10 tieselectoren op de interface modulen die met de RIP-bus zijn verbonden.
Raster Image bus interface
De verbinding tussen de RIP-bus 46 en de RI-bus 17 wordt gevormd door het RI-bus interface 45 (Fig. 7). Deze interface buffert de bi-15 directionele data, de aan te roepen adressen en de modificatiecode.
Het bufferen wordt uitgevoerd met behulp van registers. De registers "data-uit" 120, "adres-laag” 122, "adres-hoog" 123 en het modifica-tieregister 124 kunnen geladen worden vanuit de RIP-bus 46. Het laden gebeurt onder besturing van adres- en controlelijnen 48 van het enable 20 blok 78 van de CPU 43. Het "data-in" register 121 kan uitgelezen worden onder invloed van besturing met een enable lijn van het enable blok 78. Het "adres-hoog" register 123 bevat de meest significante bits van het adres. Het "adres-laag" register 122 bevat de minst significante bits. Na het laden van het "adres-hoog" register 123 25 wordt de RI-bus lees/schrijfcyclus automatisch gestart. Dit betekent dat de volgende processen door de controller 125 worden uitgevoerd: cyclus 1- zet een adres op de RI-bus en activeert RAV, cyclus 2- zet data-uit op de RI-bus en inactiveert RAV, cyclus 3- leest de data op de RI-bus in het "data-in" register 121.
30 Vóór het starten van een RI-bus cyclus, moet de CPU 43 testen of de RI-bus-busy-lijn 57 inactief is. Deze busy-lijn 57 is verbonden met een van de wachtlijnen van de CPU 43.
De Raster Image bus (RI-bus)
De RI-bus 17 verbindt de RIP 15 met het bit-map geheugen 16 35 (RIM) en is opgebouwd uit 64 lijnen. Het omvat een 32-bits brede gemultiplexte adres/data-bus. Op de RI-bus 17 fungeert de RIP 15 als master. Het RIM 16, dat een of meer RIM borden omvat neemt zelf geen 8503 4 l .
-16- initiatief op de bus. Verder kunnen op de RI-bus 17 nog RI-bus-DMA devices aangesloten worden, die bij de RIP 15 een verzoek in kunnen dienen om beschikking te krijgen over de bus.
De RI-bus 17 is een synchrone bus. Door de RIP 15 wordt een 5 kloksignaal (BCLK) aan de RI-bus aangeboden. Alle acties op de bus worden op de flanken van de bifase klok uitgevoerd. Zo vinden alle akties van de RIP op de opgaande flank, en alle akties van het RIM op de neergaande flank van het kloksignaal (BCLK) plaats. De overige toestanden op de RI-bus 17 kunnen beschreven worden met behulp van 10 drie signaalniveau’s, hoog, laag en hoog-impedant (tri-state). Alle veranderingen in signaalniveau’s vinden plaats nadat ze zijn ingeleid door een actieve flank van de bifase klok. Er zijn aldus drie groepen signalen: de kloksignalen, de adres/data signalen en de overige signalen.
15 De signalen die op de bus voorkomen zijn hierna gedefinieerd: - BCLK: dit is een symmetrische klok, die door de RIP op de RI-bus wordt aangeboden.
- RAD 00 .. RAD 31 (RIP adres/data lijnen): dit is een gemultiplexed adres/data pad, dat door alle bus-devices aangestuurd wordt met 20 tri-state drivers. Alle lijnen zijn "hoog" actief.
- RMC 0 .. RMC 3 (RIM modify code): op deze lijnen wordt door de RIP of een DMA device een code aangeboden aan het RIM bord. Deze code specificeert de "modify" functie die plaats vindt tijdens de logische operatie die op het RIM bord wordt uitgevoerd op de inhoud 25 van het geadresseerde geheugenwoord. Ook deze signalen zijn tri-state uitgevoerd.
- RROFF (RI-bus refresh-off): met dit signaal wordt aangegeven dat de RIM borden de refresh uit kunnen schakelen om een minimale cyclustijd te kunnen halen. Om verlies van data te voorkomen wordt 30 een speciale adresseringsvolgorde tussen de RIM borden en de RIP aangehouden.
- RBR 0, RBR 1 (RI-bus bus-request): met deze open collector signalen kunnen twee DMA devices aan de bus-arbiter om toegang tot de bus vragen. De devices hebben een verschillende prioriteit.
35 - RBG (RI-bus bus-grant): met deze lijn geeft de bus-arbiter aan dat de bus beschikbaar is voor het aanvragend device met de hoogste prioriteit.
8503461 -17- - RBUSY (Rl-bus bus-busy): met dit open collector signaal kan een geadresseerd RIM bord aangegeven, dat het bord gedurende een bepaalde tijd niet in staat is om een nieuwe buscyclus te verwerken.
5 - RAV (RI-bus address valid): dit tri-state signaal dat laag actief is, geeft aan dat op de Rl-bus een geldig adres staat.
De Rl-bus is uitgevoerd met een 32 bits breed data- en adres-pad dat gemultiplexed wordt op RAD 00 .. RAD 31. De toewijzing van deze lijnen is als volgt: 10 A 24 - D 16 : in deze situatie worden de adreslijnen RA00 .. RA23 gebruikt. De lijnen RAD 24 .. RAD 31 zijn dan don’t care. Voor de' datalijnen wordt RAD00 .. RAD15 gebruikt. De lijnen RAD16 .. RAD31 zijn op dat moment don’t care. Datatransport vindt zo op basis van 16-bits woorden plaats en de adressen zijn 24-bits breed.
15 Een andere mogelijkheid om de 32 data- en adreslijnen te gebruiken is: A24 - D16 - D16: Deze situatie is hetzelfde als de A24 - D16 situatie voor wat betreft de adreslijnen. Door het toevoegen van een tweede bord in dezelfde adresruimte, waarbij de data via de lijnen RAD16 ..
20 RAD31 over de bus lopen, kan met twee borden die intern 16-bits breed zijn, een 32-bits brede databus gecreëerd worden. Op een RIM-bord kan ingesteld worden over welk gedeelte van de adres/databus de data getransporteerd worden.
Met behulp van de signalen RBRO, RBR1 en RBG wordt de toegang tot 25 de Rl-bus geregeld tussen de RIP en eventuele DMA devices. Deze arbitrage gaat volledig buiten het RIM 16 om.
Iedere cyclus op de bus bestaat uit een WRITE/READ cyclus. Indien de bus vrij is (RBUSY niet actief) kan de RIP een adres (ADR£nJ) op de bus op lijnen (RAD00 .. RAD23) zetten. Dit gebeurt samen met het aan-30 bieden van een RAV-signaal en een RI-bus modify code (RMcode) via lijnen RMC00 .. RMC03· Na het adres biedt de RIP zijn data (DATAOjnJ) aan op de bus op lijnen (RAD00 .. RAD15).
Het door ADRfnJ geadresseerde RIM-bord maakt het RBUSY signaal actief. Vervolgens gaat de RIP van de Rl-bus af om het door ADRfn-13 35 geadresseerde RIMbord de mogelijkheid te geven DATAI £n_-|j op bug zetten, zodat de RIP deze data kan inlezen. Twee opeenvolgende WRITE/READ cycli worden hierdoor als het ware in elkaar geschoven. Dit 8503461 -18- wordt nog verder geoptimaliseerd door de tijd, die de RIP nodig heeft om te beslissen of RBUSY inactief is geworden, samen te laten vallen met de laatste verwerkingsfase van het door ADRfriJ geadresseerde RIMbord in de lopende cyclus. Dit is gerealiseerd doordat het RIMbord 5 RBUSY al inactief maakt, voordat het RIMbord al helemaal gereed is maar waarbij al zeker vast staat dat dit gereed zal zijn wanneer de RIP dit geconstateerd kan hebben. De eerste cyclus bevat dus ongeldige data en er is tevens een extra cyclus nodig om de laatste data uit het RIM op te halen.
10 Op bovenbeschreven wijze wordt een minimale cyclustijd op de bus gehaald. Met de minimale cyclustijd wordt bedoeld die timing volgorde van bustoestanden, waardoor een maximale transfer rate op de bus verkregen wordt.
Door de refresh van het RIM kan het voorkomen, dat een RIMbord 15 niet in staat is de minimale cyclustijd te halen. De RIMborden maken dit kenbaar met behulp van het RBUSY signaal. Door dit RBUSY 3ignaal met een bepaald aantal klokperiodes (BCLK) te verlengen, stelt de RIP zijn volgende access op het geheugen uit met een geheel aantal klokperiodes.
20 Eenzelfde situatie kan optreden indien de RIP nog niet klaar is met een bepaalde taak. De RIP geeft dit aan op de bus door het RAVsignaal een geheel aantal klokperiodes uit te stellen.
Raster image memory
Het RIM 16 (Fig. 11) omvat een 24 Mbit dynamisch geheugen 220, 25 georganiseerd in 16-bits woorden en wordt als een paginagroot bitmap geheugen gebruikt. Elke geheugenplaats in het geheugen 220 stemt overeen met één exacte plaats op de uiteindelijke afgedrukte pagina. Het RIM 16 is via de RI-bus 17 met de RIP 15 verbonden en wordt door de RIP 15 gevuld met geëxpandeerde font-data en grafische data. Een 30 belangrijk proces dat in het RIM 16 plaatsvindt is het modify proces, welk wordt uitgevoerd op een geadresseerd woord. Het modify proces omvat 16 verschillende logische operaties welke kunnen worden toege-past op de inkomende data en de alreeds op een bepaald adres aanwezige data. Eén bepaalde modify functie wordt geselecteerd door een 35 RIM modify code op de lijnen RMC0 ... RMC3 223 van de RI-bus 17 aan te bieden.
Deze modify code wordt in het RMC register 222 gezet en toege- 8503461 » \ -19- voerd aan de logische rekeneenheid 223 (ALU) die is opgebouwd met programmeerbare logica. De nieuwe data (NT) wordt via het DATAO register 227 over datalijnen 225 aan de ALU 223 toegevoerd, terwijl de oude, reeds in het geheugen 220 aanwezige data (0D) via data out-5 putlijnen 226 aan de ALU 223 wordt toegevoerd. Het resultaat van de bewerking (MD) in de ALU 223 wordt via lijnen 224 in het geheugen 220 geschreven.
In onderstaande tabel zijn enkele modify functies met de erbij behorende RM codes en de overeenkomstige logische functies weergege-10 ven.
Modify RMC Logische functie functie 3210 15
WRITE 0 0 0 0 ND
PAINT 0001 ND.OR.OD
MASK 0010 ND.AND.OD
ERASE 0 0 11 NÏJ.AND.OD
20 INVERT 0 10 0 ND
INV.PAINT 0101 ND.EXOR.OD
NOP 0 110 OD
CLEAR 0111 ZERO
SET 1 X X X ONE
25 _ ND = nieuwe data 0D = oude data
Omdat de RI-bus 17 een gemultiplexte bus is, moeten de afzon- 30 derlijke adressen en de data in registers worden ingeklokt. De RI-bus
17 is daartoe met een address/data busbuffer 228 verbonden en bij het aanbieden van een adres op de RI-bus 17 wordt dit adres via buffer 228 aan het address register 229 toegevoerd. Bij de aanbieding van data (een klokperiode later), worden deze data via buffers 228 in het DATO
35 register 227 opgeslagen. Het data-in register 230 ("in" voor de RIP
maar "uit" voor het RIM) is toegevoegd om de uit het geheugen 220 afkomstige data, welke behoren bij het vorig aangeboden adres, op de 850 3 4 e ; -20-
Rl-bus 17 te kunnen zetten.
De besturing van de RIM 16 wordt verzorgd door het geheugen-besturingscircuit 231. Het geheugen besturingscircuit 231 bevat een bus state sequencer om op een RAV signaal een aantal akties te star- 5 ten, welk bestaan uit het inklokken van een adres, het inklokken van erbij behorende data, het inklokken van de modify code en het op de RI-bus 17 zetten van data behorende bij het voorgaande adres. Boven dien bevat het geheugenbesturingscircuit 231 een memory state sequencer, welke gesynchroniseerd is met de bus state sequencer. De 10 memory state sequencer kan worden geïnitieerd door een refresh request of door een buscyclus voor een geheugen access. Wanneer een refresh cyclus wordt uitgevoerd, moet de eerstvolgende buscyclus worden opgeschort. Het circuit 231 is met programmeerbare logica geïmplementeerd.
15 Het geheugen 220 is opgebouwd met 256 K dynamische geheugen chips en is georganiseerd in zes "banks" van 256 K woorden van 16 bits. Bank selectie vindt plaats door middel van decodering van de adreslijnen A18, A19 en A20 in de address multiplexer 232. Het adresseren van een geheugenplaats in één bank vindt plaats met behulp van adreslijnen 20 AO - A7 en A16 en het genereren van een row-address strobe (RAS) vanuit het besturingscircuit 231» en vervolgens worden adreslijnen A8, A15 en A17 aan de geheugenadreslijnen via de address multiplexer 232 toegevoerd, en een column address strobe (CAS) wordt tevens door het besturingscircuit 231 gegenereerd.
25 Omdat dynamische geheugens zijn toegepast moeten alle geheugenplaatsen van het geheugen 220 tenminste één keer per 4 msec, een refresh ondergaan. Dit geschiedt door periodiek een "RAS-only" cyclus toe te voegen. Tijdens deze cyclus wordt aan alle banken een row-address aangeboden. Het refresh address in een rij wordt afgeleid met 30 behulp van een 9-bit teller welke na elke refresh cyclus met één wordt verhoogd.
Door activering van de RROFF-lijn van RI-bus 17 wordt de normale refresh cyclus onderbroken en de RIP 15 zorgt ervoor dat er aan de minimale cyclustijd van de eerstvolgende cyclus wordt voldaan.
35 Niet-geadresseerde banks van het geheugen gebruiken dan het adres op de RI-bus 17 om een refresh uit te voeren. Op de geadresseerde bank vindt refresh plaats door een access op het geselecteerde adres.
850 3 46 1
♦ * A
-21-
Bij het uitlezen van het RIM 16 zal, indien slechts één afdruk van een pagina moet worden gemaakt, op de RI-bus 17 de "CLEAR” modify code worden gezet omdat het RIM 16 na uitlezen geheel met nullen moet zijn gevuld. Indien de pagina moet worden bewaard om nog eens te wor-5 den geprint, zal op de RI-bus 17 de "NOP" modify code worden gezet. Grafische instructies
De bitmap vuiler 28 (Fig. 2) is ingericht om verschillende teksten grafische instructies uit te voeren, zoals bijvoorbeeld CHAR, MCHAR, LINE en CIRCLE.
10 Al deze instructies, welke zijn opgeslagen in de micro-PROM 71 (Fig.6), zijn uitgevoerd als micro-instructies voor de CPU 43.
De algorithmen voor deze instructies zijn zodanig geïmplementeerd dat een zo groot mogelijke bitmap vulsnelheid wordt verkregen.
CHAR: is een instructie voor het plaatsen van een teken op de 15 juiste plaats in het bit-map geheugen 16. Aangezien de woordgrenzen van een teken meestal niet overeenkomen met de woordgrenzen van het bit-map geheugen is een verplaatsing nodig (zie Fig. 9). In het font-geheugen 13 is de bitmap representatie 200 van een teken 201 in 16-bits woorden opgeslagen. Een teken omvat gewoonlijk een aantal 20 16-bits woorden, waarvan enkele zijn aangegeven met 203, 204 en 205.
Het hoekpunt 202 van het teken 201 wordt hier als voorbeeld als referentiepunt aangenomen, en het eerste 16-bits woord 203 bevat 16-bits waarvan het eerste bit met "0" is aangegeven, en het laatste bit met "F". De bit representatie van het eerste woord is aldus: 25 0000 0000 0001 1111.
Bij het plaatsen van dit teken 201 op de gewenste y-positie in het bit-map geheugen 16 zal de woordgrens 207 van het bit-mapgeheugen over het algemeen slechts zelden met de woordgrens 0' van het teken 201 overeenkomen. De uit te voeren operatie zal dus overeenkomen met 30 het verschuiven van de bitmap representatie van het teken 201 over een aantal (n)bits, in de figuur aangegeven met Δ y.
Op micro-instructie niveau zijn hiervoor de volgende stappen uit te voeren: rotate: van bit 0 tot bit F over/^ y (n: s Δ y) 35 merge : mask = 1 rotate mask s 0 non-rotate MCHAR: is een instructie voor het plaatsen van een teken in het 8503461 -22- bitmap geheugen 16 in gespiegelde vorm. Het uitlezen van de bit-map representatie van het teken door de VME-bus interface gebeurt in omgekeerde volgorde. Het verplaatsen van de woordgrenzen van het teken in het bit-map geheugen 16 geschiedt op identieke wijze als beschreven 5 bij CHAR. De schakeling voor het spiegelen is eveneens in de VME-bus interface ondergebracht.
Voor het schrijven van tekens, lijnen, cirkels, enz. in het bitmap geheugen 16 bezit het front-end een aantal overlay mogelijkheden (Fig. 10). Aan de hand van een letter V (210) zijn in Fig.10 deze 10 mogelijkheden schematisch weergegeven. Een arcering 211 betekent dat de inhoud van het RIM 16 onveranderd is. Aangenomen wordt dat een "O" in het RIM "wit” oplevert en een ”1” in het RIM "zwart” oplevert.
WRITE: de bestaande inhoud van het RIM 16 wordt ”0" gemaakt en de bit- map representatie van een teken wordt met enen geschreven (212). 15 INVERT: de bestaande inhoud van het RIM wordt "1" gemaakt en de bit-map representatie van een teken wordt met nullen hierin geschreven (216).
PAINT: de inhoud van het RIM wordt niet gewist en de enen van het teken ondergaan met de inhoud van het RIM een ”0R" functie (213).
20 MASK: de inhoud van het RIM wordt ”0" gemaakt op die plaatsen waar het teken nullen bevat, en daar waar het teken enen bevat blijft de inhoud van het RIM gehandhaafd (214).
ERASE: de inhoud van het RIM wordt "0" gemaakt op die plaatsen waar het teken enen bevat, en daar waar het teken nullen bevat blijft 25 de inhoud van het RIM gehandhaafd (215).
INVERTING-PAINT: de inhoud van het RIM blijft gehandhaafd waar het teken een "0" bevat en waar het teken een "1" bevat wordt de inhoud van het RIM geïnverteerd.
Voor het maken van lijnen, cirkels en cirkelbogen wordt gebruik 30 gemaakt van de meet- en regelmethoden, gebaseerd op het algorithme van Bresenham. Hierbij wordt uitgegaan van het theoretisch verloop van de lijnen en voor elke scanlijn wordt dat punt gekozen, dat deze gewenste lijn het dichtst benaderd. Het bekende algorithme, is bijvoorbeeld beschreven in ACM Transactions on Graphics, Vol. 1, no. 4, oct.
35 1972, p. 259-279 door Robert F. Sproull, met als titel "Using programm transformations to derive line-drawing algorithms".
Voor het genereren van cirkels met een lijndikte van één pixel wordt een algorithme toegepast zoals bijvoorbeeld beschreven door 8503461 -23- J.Bresenham in communications of the ACM, februari 1977, volume 20 no. 2, pag. 100-106, "A liniar Algorithm for incremental digital display of circular arcs”. Hiermee kunnen cirkels worden getekend op een rastervormig display waarbij slechts gebruik wordt gemaakt van een-5 voudige, en dus snelle, instructies zoals het testen van een teken, optellen en aftrekken.
Voor het genereren van rechte lijnstukken met een dikte van 3 of meer pixels, waarbij dat lijnstuk in een woord-georiënteerd bit-map geheugen wordt opgeslagen, is hierna een werkwijze beschreven.
10 Het lijnstuk heeft een bepaalde dikte (D) en ronde einden. Het beginpunt en het eindpunt vallen samen met een rasterpunt en de dikte is een oneven veelvoud van de rasterafstand. Er wordt verondersteld dat het raster een bit-map is dat zich in een woord-georiënteerd geheugen bevindt. In de beschrijving van het algorithme wordt gebruik gemaakt 15 van een rechtsdraaiend Cartesisch coördinatenstelsel dat bestaat uit een x-as en een y-as. De organisatie van het geheugen is zodanig dat de woorden in het geheugen evenwijdig aan de y-as liggen.
Een lijnstuk 250 (fig.12) wordt gegeven door de coördinaten van het beginpunt 251 (Xbeg,Ybeg), de coördinaten van het eindpunt 252 20 (Xe,Ye) en de dikte D gemeten in de rasterafstand. De begrenzing van het lijnstuk 250 wordt gegeven door een gesloten kromme, die zich in het gebied (XI <= X <= Xr, Ybot Y <= Ytop) bevindt. Bij elke waarde van X (XI <= X <s Xr) horen twee punten, 253 (X,Yb) en 254 (X,Yt) die op de begrenzing van het lijnstuk liggen. Het gebied dat de vertikale 25 lijnstukken (dikte nihil) van (X,Yb) tot (X,Yt) met ( XI <= X <= Xr) samen bestrijken is gelijk aan het gebied dat het lijnstuk met dikte D in beslag neemt. Het afbeelden van het lijnstuk kan dus herleid worden tot het afbeelden van de vertikale lijnstukken voor opeenvolgende waarden van X tussen de punten Yb en Yt. De vertikale lijnstukken 30 liggen in de woordrichting van het geheugen. Voor het afbeelden van het lijnstuk met dikte D moeten de begin- en eindpunten van deze vertikale lijnstukken bepaald worden. Deze punten worden gegenereerd door de afbeelding van de begrenzing van het lijnstuk met dikte D te bepalen. Het lijnstuk 250 met dikte D kan begrensd worden gedacht door een 35 lijn door P1 en P2, een lijn door P3 en P4, een cirkelboog door P3 en P2 en een circelboog door P4 en P1. Zoals eerder opgemerkt kunnen lijnstukken met het algorithme van Bresenham worden afgebeeld. Het is 3503461 -24- daarvoor noodzakelijk dat het begin- en eindpunt van het lijnstuk samenvallen met een rasterpunt. In de meeste gevallen zullen de punten P1, P2, P3 enP4 echter niet samenvallen met een rasterpunt, maar worden ze elk omgeven door een viertal rasterpunten: Pi1, Pi2, Pi3 en Pi4 5 (i = 1...4).
In figuur 13 is een afbeelding gegeven van een lijn door de punten PI en P2. Van de rasterpunten P1j (j = 1...4) moet het punt dat de kleinste afstand heeft tot de lijn gekozen worden als beginpunt van het af te beelden lijnstuk, hier dus punt P12. Op analoge manier komt 10 men tot een keuze voor het eindpunt, punt (P24), van het af te beelden lijnstuk. Voor het afbeelden van cirkels wordt eveneens het Bre-senham algorithme toegepast. Het beginpunt (Xbeg, Ybeg) en het eindpunt (Xe, Ye) van het af te beelden lijnstuk met dikte D vallen nu samen met het rasterpunt. Aan de eis van het Bresenham algorithme dat het 15 middelpunt van de cirkel moet samenvallen met het rasterpunt is dus voldaan. Niet alle rasterpunten van de cirkel-afbeelding moeten gegenereerd worden, maar slechts de punten die tot de afbeelding van de cirkelbogen behoren die met de afgebeelde lijnstukken de afbeelding van de begrenzing van een lijnstuk met dikte D vormen. Met behulp van 20 gegevens omtrent het begin- en het eindpunt en de dikte van het lijnstuk, kunnen nu de coördinaten van de rastersnijpunten P1*, P2*, P3* en P4* worden bepaald.
Gegeven een cirkel 261 (fig.14) met middelpunt 251 (Xc,Yc) en straal R en een lijnstuk 262 met beginpunt (Xbeg,Ybeg). Het beginpunt 25 van het lijnstuk en het middelpunt van de cirkel vallen samen met punt 251. De straal R van de cirkel 261 is gelijk aan (D-1) / 2. De cirkel 261 en het lijnstuk 262 snijden elkaar in het snijpunt S. Van de vier rasterpunten S1, S2, S3 en S4 die S omgeven moet degene met de kleinste afstand tot de raaklijn 263 aan de cirkel 261 door S geselec-30 teerd worden. Dit rasterpunt S* met de coördinaten (X*,YK) levert de informatie om de coördinaten van de rastersnijpunten P1*,P2*,P3* en P4X, dus de begin- en eindpunten van de twee lijnstukken van de begrenzing te bepalen. Hierbij worden de loodrechte afstanden van het punt S* tot het middelpunt 251 (Xc,Yc) van de cirkel 261 bepaald, 35 waarbij Hx = Xx - Xc, en Hy s Y* - Yc. Daaruit volgt voor de coörd inaten van de rastersnijpunten: 8 5 Θ 3 4 o ‘s -25- PI*: (pbeg - HyJ, pbeg + HxJ), P2*: (pe - HyJ, pe + HxJ), P3*s (pe + HyJ, pe - HxJ), en P4*: (pbeg + HyJ, pbeg - HxJ).
5 De punten P1* tot en met P4* vallen nu precies samen met de rasterpun-ten. Van het lijnstuk 262 en de cirkel 261 worden met de algorithmen van Bresenham de afbeeldingen op het raster bepaald.
Bij het genereren van een lijnstuk wordt verondersteld dat het middelpunt van de cirkel samenvalt met de oorsprong van het 10 assenstelsel en dat een lijnstuk zich in het eerste oktant bevindt. Deze veronderstelling doet geen afbreuk aan de algemeenheid, daar door een eenvoudige translatie de andere gevallen naar dit geval getransformeerd kunnen worden.
Het Bresenham algorithme voor het lijnstuk wordt gestart in de 15 oorsprong van het assenstelsel en het Bresenham-algorithme voor de cirkel wordt gestart in het punt (R,0), waarbij R de straal van de cirkel is. Deze algorithmen worden in het front-end quasi parallel uitgevoerd. De rasterpunten die gegenereerd worden, worden gesynchroniseerd op een gelijke y-waarde. Met het navolgend algorithme worden de 20 coördinaten (X*,Y*) van het snijpunt S* bepaald. Het algorithme convergeert naar het gebied rond het snijpunt S. In dit gebied wordt een selectie voor S* met de coördinaten (X*,Y*) gemaakt. In fig. 15 is in een flow diagram de bepaling van het snijpunt S* weergegeven.
Na het starten (300) van het algorithme worden eerst de verschillende 25 variabelen van de lijn en de cirkel geinitialiseerd (301): XL = 0, YL = 0, XC = R en YC = 0. Wanneer aan de voorwaarden XI < XC (302) is voldaan wordt de waarde van XL met één verhoogd (303). Vervolgens wordt met het algorithme van Bresenham de waarde voor YL van de lijn berekend (304). Wanneer aan de voorwaarden YL > YC (305) niet is 30 voldaan, dan wordt in het programma teruggesprongen naar blok 302. Indien nu nog steeds geldt XL ^ XC, dan wordt de programmalus bestaande uit blokken 303 en 304 nog een keer doorlopen en de waarde van YL wordt in blok 305 weer vergeleken met YC. Wordt aan de voorwaarde YL > YC voldaan, dan wordt YC met één verhoogd (306) en met 35 behulp van het algorithme van Bresenham wordt XC voor de cirkel berekend (307), waarna in het programma teruggekeerd wordt naar 302. Op deze wijze worden de beide programmalussen bestaande uit blokken 302 tot en met 305 en blokken 302 tot en met 307 net zo lang doorlopen 8503461 -26- tot dat XL niet meer kleiner is dan XC (302). Het programma springt dan naar blok 308. Wanneer nu geldt XL = XC dan wordt X* gelijk gemaakt aan XL en Y* aan YL (309). Is XL XC (308) dan volgt voor de waarden van X* en Y* (310): X* = XC + 1 en Y* s YC - 1.
5 Het lijnstuk 250 (fig.16) wordt gegeven door de coördinaten van het beginpunt (Xbeg,Ybeg), de coördinaten van het eindpunt (Xe,Ye) en de dikte D gemeten in de rasterafstand. Er wordt verondersteld dat Xe >= Xbeg en Ye >s Ybeg. Met andere woorden, het lijnstuk maakt een hoek met de positieve x-as die ligt tussen 0° en 90°. Als Xe < Xbeg, 10 dan kan door verwisseling van het begin- en eindpunt aan de veronderstelling Xe >= Xbeg voldaan worden. Als Ye < Ybeg dan kan door een lijnstuk te spiegelen om de horizontale lijn y = Ybeg (Ye° = 2 x Ybeg - Ye) aan de veronderstelling Ye Ybeg voldaan worden. De begin- en eindpunten van de vertikale lijnstukken moeten dan 15 echter eerst gespiegeld worden om de lijn y = Ybeg voordat de raster-punten die tot de afbeelding van deze vertikale lijnstukken behoren (in de bit-map) geactiveerd worden.
Na het bepalen van S* worden met behulp van Hx en Hy op eerder beschreven wijze de coördinaten van P1* (XT*,Y1X), P2*(X2*,Y2*), 20 P3*(X3*,Y3X) en P4*(X4*,Y4*) bepaald. De gegevens zijn nu beschikbaar om vier algorithmen, twee lijn- en twee cirkel-algorithmen, quasi parallel uit te voeren. In fig.16 loopt cirkel 1 van punt 255 tot P1* en van P2X tot punt 256, cirkel 2 loopt van punt 255 tot P4* en van P3* tot punt 256. Lijn 1 loopt van P1* tot P2* en lijn 2 loopt van P4* 25- tot P3*. De cirkel-algorithmen 1 en 2 genereren een halve cirkel die bij het bereiken van P1* respectievelijk P4* het middelpunt 251 (Xbeg, Ybeg) vervangen door het middelpunt 252 (Xe, Ye). De lijngeneratie doorloopt achtereenvolgens de gebieden 270 tot en met 274.
In figuur 17a, b en c is in een flow diagram het toegepaste 30 algorithme weergegeven. Het programma start (320) met het initialiseren van een aantal variabelen (321) zoals R = (D - 1)/2, XI = Xbeg - R, XR = Xe + R, Xc1 = Xbeg, Yd = Ybeg, Xc2 = Xbeg, Yc2 = Ybeg, X = XI,
Yt - Ybeg en Yb s Ybeg. Voor X = XI wordt ook de eerste vertikale lijn getekend (321). Met de code (Drln(X,Yb,Yt)) wordt aangegeven de 35 instructie: trek een vertikale lijn bij deze X, tussen de punten Yb en Yt en plaats deze lijn op de overeenkomstige plaats in het bit-map geheugen. Vervolgens wordt gestart met de berekening en generatie van 35 0 3 4 ü 1 -27- de vertikale lijnen in het gebied 270 (Fig.16). Getest wordt X < X1* (324). Indien dit geldt wordt eerst X verhoogd met één (322) en met behulp van het algorithme van Bresenham wordt voor deze waarde van X het punt Yt op cirkel 1 bepaald en het punt Yb op cirkel 2 (323).
5 Tevens wordt de vertikale lijn tussen Yb en Yt getekend (323) (Drln(X,Yb,Yt)) en het programma keert terug naar 324. Zolang geldt X < Xl* wordt de lus 322, 323, en 324 steeds weer doorlopen.
Wanneer X = X1*, dan gaat het programma naar blok 325. Hierin . 10 wordt vergeleken of X4* < X2*. Is het antwoord nee, dan wordt, zoals later zal worden verklaard, het programma van blok 350 tot blok 364 doorlopen. Dit geldt bijvoorbeeld voor steile lijnen en voor lijnen die kort zijn ten opzichte van hun dikte. Wanneer geldt dat X4* < X2* (325) en X < X4* (328) dan wordt X met één verhoogd (326) en 15 met behulp van het algorithme van Bresenham wordt voor deze waarde van X het punt Yt op lijn 1 bepaald en het punt Yb op cirkel 2 (327). Bovendien wordt voor deze waarde van X de vertikale lijn tussen Yb en Yt getekend (323) (Drln(X,Yb,Yt)) en in het geheugen opgeslagen.
Zolang geldt X < X4* (328), dus voor het gebied 271 (fig.16) wordt de 20 programmalus 326,327 en 328 doorlopen. Bij het bereiken van X = X4* wordt getest op X < X2* (331) en indien dit geldt gaat het programma voort met het verhogen van de waarde voor X met één (329), het met het algorithme van Bresenham berekenen van Yt op lijn 1 en Yb op lijn 2 en weer Dlrn(X,Yb,Yt) (329). Zolang geldt X < X2* (331) dus voor het 25 gebied 272 (fig.16) wordt de programmalus 329,330 en 331 doorlopen.
Bij het bereiken van X = X2* worden eerst in blok 332 de oorspronkelijke variabelen Xc1 en Yc2 van waarde veranderd, door nu de coördinaten van het eindpunt van het lijnstuk in te vullen. Dus: Xc1 s Xe en Yd a Ye. Hierna vindt generatie van het gebied 273 (fig.16) 30 plaats. Getest wordt of X < X3* (335) en zoja dan wordt de waarde van X met één verhoogd (333) en met het algorithme van Bresenham de waarde voor Yt op cirkel 1 bepaald en de waarde voor Yb op lijn 2 (334). Met Drln(X,Yb,Yt) (334) wordt de bijbehorende vertikale lijn in het bitmap geheugen geplaatst. Zolang geldt: X < X3* (335) wordt de 35 programmalus 333,334 en 335 doorlopen. Wanneer X de waarde voor X3* bereikt worden de oorspronkelijke variabelen Xc2 en Yc2 aangepast (336) volgens: Xc2 = Xe en Yc2 = Ye.
§ R I) η *\ « J v o . < · · -28-
Nu vindt generatie plaats voor het laatste gebied 274 van het lijnstuk. Geldt X < XR (339) dan wordt X weer met één verhoogd (337) en met het algorithme van Bresenham wordt Yt op cirkel 1 en Yb op cirkel 2 (338) bepaald en met Drln(X,Yb,Yt) wordt het vertikale 5 lijntje in het bit-map geheugen geplaatst. Zolang geldt X < Xr (339) wordt de programmalus 337,338 en 339 doorlopen. Wanneer X de waarde XR bereikt is de generatie van het lijnstuk volledig voltooid en stopt het programma in blok 364.
Voor steile lijntjes (X4* > X2*) springt het programma van blok 10 325 naar 350. Wanneer geldt X < X2* (352) wordt de waarde voor X met één verhoogd (350) en met het algorithme van Bresenham wordt nu Yt op lijn 1 en Yb op cirkel 2 (351) bepaald en met Drln(X,Yb,Yt) wordt dit vertikale lijntje in het bit-map geheugen geschreven (351). Zolang geldt: X < X2K (352), wordt de programmalus 350,351 en 352 doorlopen.
15 Voor X = X2* worden evenals in blok 332 de variabelen voor Xc1 en Yc1 veranderd in Xc1 = Xe en Yc1 = Ye (353). Wanneer geldt X < X4* (356) wordt X met één verhoogd (354) en met het algorithme van Bresenham wordt nu Yt op cirkel 1 en Yb op cirkel 2 bepaald (355) en de lijn tussen Yb en Yt op de overeenkomstige plaats op het bit-map geheugen 20 weggezet (355). Zolang weer geldt: X < X4* (356), wordt de programmalus 354,355 en 356 doorlopen. Bij X = X4* wordt getest of X < X3* (359) en zo ja, dan wordt X met één verhoogd (357) en met het algorithme van Bresenham wordt Yt op cirkel 1 en Yb op lijn 2 bepaald en met Drln(X,Yb,Yt) (358) wordt dit lijntje in het geheugen 25 weggeschreven. Bij X < X3* (359) wordt steeds de programmalus 357,358 en 359 doorlopen. Wanneer X = X3* worden de variabelen veranderd (360) : Xc2 s Xe en Yc2 = Ye. Zolang geldt X < XR (363) wordt X met één verhoogd (361) en met het algorithme van Bresenham wordt Yt op cirkel 1 en Yb op cirkel 2 bepaald (362) en met Drln(X,Yb,Yt) (363) vindt een 30 geheugenopslag plaats. Zolang X * Xr (363) wordt de programmalus 361,362 en 363 doorlopen. Bereikt X de waarde XR, dan is de lijngeneratie ten einde en stopt het programma (364).
Op overeenkomstige wijze kan men een algorithme opstellen voor lijnstukken met rechte einden. In figuur 18 is een dergelijk lijnstuk 35 afgebeeld. De begrenzingen van het lijnstuk zijn de punten P1,P2,P3 en P4. Evenals bij de generatie van een lijnstuk met ronde einden, zullen deze punten samen moeten vallen met de rasterpunten 8503461 p p -29- P1*,P2*,P3* en P4*. Deze punten worden dan ook op overeenkomstige wijze bepaald. Met een algorithme zoals bij figuur 15 is beschreven wordt eerst S* bepaald. Vervolgens worden de hulpfuncties Hx en Hy gedefinieerd volgens: 5 Hx = X* - Xc en Hy = Y* - Yc. Hieruit volgt weer voor P1*: (JXbeg - Hy - HxJ,(Ybeg + Hx - HyJ) P2*: (fXe - Hy - HxJ,£Ye + Hx - HyJ) P3*s (£Xe + Hy - HxJ,CYe - Hx - HyJ) en P4*: (fXbeg + Hy - HxJ,£Ybeg - Hx - HyJ) 10 Nu zijn alle gegevens bekend voor het bepalen van de lijnstukken P1* P2*, P4* P3*, P1* P4* en P2* P3* waarmee respectievelijk lijn 1 (line 1), lijn 2 (line 2), lijn 3 (line 3) en lijn 4 (line 4) worden bedoeld. Het (Pascal) programma ziet er als volgt uit: XI: = XI*; 15 Xr: = X3*; X: = XI;
Yt: s Ybeg;
Yb: = Ybeg;
DrawVerticalLine(X,Yb,Yt); 20
IF (X4* < X2*) THEN BEGIN
WHILE (X < X4*) DO BEGIN
25 X: = X + 1; BRESENHAM_LINE 1JSTEP(Yt); BRESENHAM_LINE3__STEP (Yb);
DrawVerticalLine(X,Yb,Yt) END;
30 CX = X4*J
WHILE (X < X2*) DO BEGIN
X: s X + 1; BRESENHAM_LINE 1 JSTEP(Yt); 35 BRESENHAMJLINE2JSTEP (Yb);
DrawVerticalLine(X,Yb,Yt)
tX = X2*J
8503461 ί· -30-
WHILE (X < XR) DO BEGIN
X: = X + 1; BRESENHAM_LINE4_STEP(Yt); 5 BRESENHAM_LINE 2_STEP(Yb);
DrawVerticalLine(X,Yb,Yt) END;
END
£X = XrightJ
10 ELSE
BEGIN
WHILE (X < X2*) DO BEGIN X: =X +1; 15 BRESENHAM_LINE1__STEP(Yt); BRESENHAM_LINE3-STEP(Yb); DrawVertikalLine(X,Yb,Yt) END; CX = X2x]
20 WHILE (X < X4*) DO BEGIN
X: = X + 1; BRESENHAM_LINE4_STEP(Yt); BRESENHAM_LINE3_STEP(Yb); 25 DrawVerticalLine(X,Yb,Yt) END; CX = X4*3
WHILE (X < XR) DO BEGIN
30 X: +X +1; BRESENHAM__LINE4_STEP (Yt); BRESENHAM_LINE2_STEP(Yb); DrawVerticalLine(X,Yb,Yt) END;
35 END
CX * XrightJ
8503461 -31-
Bovenbeschreven algorithmen maken gebruik van de woordorganisatie van het geheugen en garanderen dat het aantal toegangen tot het geheugen minimaal is. De dikte van een lijnstuk is meestal klein in vergelijking tot de lengte van dat lijnstuk. Dit impliceert dat er 5 relatief weinig tijd nodig is om de coördinaten van P1* tot en met P4X te bepalen, zodat beschreven lijnen van het type "Solid” buitengewoon snel op een raster kunnen worden afgebeeld.
De uitvinding is niet beperkt tot de beschreven uitvoeringsvormen. Zo kunnen met vergelijkbare methoden van lijngeneraties, lijnstukken op 10 andere dan orthogonale rasters worden geïmplementeerd. Deze en andere werkwijzen die door de vakman eenvouding uit de beschreven lijngeneraties kunnen worden afgeleid zullen echter alle vallen onder de hierna volgende conclusies.
3503461

Claims (4)

1. Werkwijze voor het genereren van een lijnstuk met een dikte D op een homogeen raster waarvan de rasterpunten in een aantal evenwijdige lijnen zijn gerangschikt, en waarbij de bit-representatie van het lijnstuk (250) wordt opgeslagen in een woord-georiënteerd bit-map 5 geheugen in de vorm van een groot aantal beeldpunten of pixels, gekenmerkt door, het bepalen van de omhullende van het lijnstuk en het afbeelden van deze omhullende op de rasterpunten, het voor de opeenvolgende rasterlijnen bepalen van de lengte van de 10 doorsnede door het lijnstuk, en het plaatsen van de bit-representatie van deze lengten in het bit-map geheugen op overeenkomstige plaatsen, waarbij de richting van de bepaalde lengten overeenstemt met de woordrichting van het bit-map geheugen.
2. Werkwijze volgens conclusie 1, gekenmerkt door, 15 het bepalen van de afbeelding van het begin- en het eindpunt van het .lijnstuk (250) op de rasterpunten, het genereren van een cirkel (261) met het beginpunt van het lijnstuk als middelpunt (X*,Y*) en met (D - 1)/2 als straal, het bepalen van de vier rasterpunten waarbinnen het snijpunt (S) van 20 deze cirkel (261) met de lijn (262) door het beginpunt (251) en het eindpunt (252) van het lijnstuk (250) zich bevindt, het bepalen van dat rasterpunt (S*) in de direkte omgeving van het snijpunt (S) dat de kleinste afstand heeft tot de raaklijn (263) aan de cirkel (261) door het snijpunt (S), en 25 het met behulp van dit bepaalde rasterpunt (S*) bepalen van vier rastersnijpunten (P1* tot en met P4*) als punten van de afgebeelde omhullende.
3. Werkwijze volgens conclusie 2, voor het genereren van een lijnstuk met ronde einden, met het kenmerk, 30 dat de vier rastersnijpunten (P1* t/m P4*) de afbeeldingen van de aansluitpunten tussen de ronde uiteinden en de rechte omhullende lijnen van het lijnstuk vormen.
4. Werkwijze volgens conclusie 2, voor het genereren van een lijnstuk met rechte einden, met het kenmerk, 35 dat de vier rastersnijpunten (P1* t/m P4*) de afbeeldingen van de hoekpunten van de omhullende lijnen van het lijnstuk vormen. 8503461
NL8503461A 1985-12-17 1985-12-17 Werkwijze voor het genereren van lijnstukken. NL8503461A (nl)

Priority Applications (6)

Application Number Priority Date Filing Date Title
NL8503461A NL8503461A (nl) 1985-12-17 1985-12-17 Werkwijze voor het genereren van lijnstukken.
AT86202167T ATE63650T1 (de) 1985-12-17 1986-12-04 Verfahren zum generieren von linienteilen.
DE8686202167T DE3679304D1 (de) 1985-12-17 1986-12-04 Verfahren zum generieren von linienteilen.
EP86202167A EP0229412B1 (en) 1985-12-17 1986-12-04 A method of generating line parts
JP61301147A JPH0675977B2 (ja) 1985-12-17 1986-12-17 線分発生方法
US07/290,823 US4905166A (en) 1985-12-17 1988-12-22 Method of generating line parts

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
NL8503461A NL8503461A (nl) 1985-12-17 1985-12-17 Werkwijze voor het genereren van lijnstukken.
NL8503461 1985-12-17

Publications (1)

Publication Number Publication Date
NL8503461A true NL8503461A (nl) 1986-04-01

Family

ID=19847019

Family Applications (1)

Application Number Title Priority Date Filing Date
NL8503461A NL8503461A (nl) 1985-12-17 1985-12-17 Werkwijze voor het genereren van lijnstukken.

Country Status (6)

Country Link
US (1) US4905166A (nl)
EP (1) EP0229412B1 (nl)
JP (1) JPH0675977B2 (nl)
AT (1) ATE63650T1 (nl)
DE (1) DE3679304D1 (nl)
NL (1) NL8503461A (nl)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0249285A1 (en) * 1986-06-09 1987-12-16 Océ-Nederland B.V. A method of and a device for filling surface parts of an image with a surface pattern
EP0250196A2 (en) * 1986-06-19 1987-12-23 Rank Cintel Limited Computer graphics

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH074952B2 (ja) * 1987-01-12 1995-01-25 キヤノン株式会社 プリンタ制御装置
US4837847A (en) * 1987-02-03 1989-06-06 Canon Kabushiki Kaisha Image processing apparatus
US7382929B2 (en) * 1989-05-22 2008-06-03 Pixel Instruments Corporation Spatial scan replication circuit
US5041848A (en) * 1989-11-13 1991-08-20 Gilbert John M Non-gary scale anti-aliasing method for laser printers
US5122884A (en) * 1989-11-13 1992-06-16 Lasermaster Corporation Line rasterization technique for a non-gray scale anti-aliasing method for laser printers
US5371845A (en) * 1990-04-27 1994-12-06 Ashlar, Inc. Technique for providing improved user feedback in an interactive drawing system
US5237655A (en) * 1990-07-05 1993-08-17 Eastman Kodak Company Raster image processor for all points addressable printer
JP2969285B2 (ja) * 1990-09-26 1999-11-02 武藤工業株式会社 Cad用入力装置
WO1992006427A1 (en) * 1990-10-09 1992-04-16 Ast Research, Inc. System for selectively controlling slots in an ibm-at/nec 9801 dual-compatible computer
US5109517A (en) * 1990-10-09 1992-04-28 Ast Research, Inc. System for selectively controlling slots in an IBM-AT/NEC 9801 dual-compatible computer
US5293472A (en) * 1991-04-22 1994-03-08 International Business Machines Corporation Method of generating lines and curves of user specified thicknesses on a raster device
JPH056431A (ja) * 1991-06-27 1993-01-14 Matsushita Electric Ind Co Ltd 輪郭線特徴点検出装置
JPH0512442A (ja) * 1991-07-02 1993-01-22 Hitachi Software Eng Co Ltd 線画像追跡方法
JP3137245B2 (ja) * 1991-10-30 2001-02-19 ソニー株式会社 自由曲線作成方法及び自由曲面作成方法
US5361333A (en) * 1992-06-04 1994-11-01 Altsys Corporation System and method for generating self-overlapping calligraphic images
JP2904673B2 (ja) * 1993-04-27 1999-06-14 シャープ株式会社 画像作成装置
JP3037854B2 (ja) * 1993-07-13 2000-05-08 富士通株式会社 文字生成方法及びその装置
US5872553A (en) * 1994-10-28 1999-02-16 Advanced Displays Corporation High speed graphics fill of liquid crystal display
US6137471A (en) 1995-07-24 2000-10-24 L-3 Communications Corporation High speed graphics fill of liquid crystal display
US6091860A (en) * 1997-11-12 2000-07-18 Pagemasters, Inc. System and method for processing pixels for displaying and storing
US5903279A (en) * 1997-12-17 1999-05-11 Industrial Technology Research Institute Method for antialiasing
US6628840B1 (en) 2000-05-16 2003-09-30 International Business Machines Corporation Boundary mapping for multi-pel thickness lines
JP2004086809A (ja) * 2002-08-29 2004-03-18 Fuji Xerox Co Ltd 画像形成システム、バックエンドプロセッサ
FR2869146B1 (fr) * 2004-04-20 2006-09-15 Thales Sa Procede de generation graphique de lignes a extremites arrondies

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4031519A (en) * 1974-11-11 1977-06-21 Ibm Corporation Printer
US4262290A (en) * 1978-05-12 1981-04-14 Smiths Industries Limited Display systems
US4300136A (en) * 1979-05-10 1981-11-10 Nippon Electric Co., Ltd. Display pattern preparing system
ZA832830B (en) * 1982-04-30 1983-12-28 Int Computers Ltd Digital display systems
US4621273A (en) * 1982-12-16 1986-11-04 Hewlett-Packard Company Print head for printing or vector plotting with a multiplicity of line widths
US4601002A (en) * 1983-01-06 1986-07-15 The United States Army Corps Of Engineers As Represented By The Secretary Of The Army Digital technique for constructing variable width lines
US4620287A (en) * 1983-01-20 1986-10-28 Dicomed Corporation Method and apparatus for representation of a curve of uniform width
US4679039A (en) * 1983-11-14 1987-07-07 Hewlett-Packard Company Smoothing discontinuities in the display of serial parallel line segments
NL8502643A (nl) * 1985-09-27 1986-04-01 Oce Nederland Bv Werkwijze voor het genereren van lijnstukken.
US4805116A (en) * 1986-04-23 1989-02-14 International Business Machines Corporation Interpolated display characteristic value generator

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0249285A1 (en) * 1986-06-09 1987-12-16 Océ-Nederland B.V. A method of and a device for filling surface parts of an image with a surface pattern
EP0250196A2 (en) * 1986-06-19 1987-12-23 Rank Cintel Limited Computer graphics
EP0250196A3 (en) * 1986-06-19 1989-10-18 Rank Cintel Limited Computer graphics

Also Published As

Publication number Publication date
EP0229412B1 (en) 1991-05-15
DE3679304D1 (de) 1991-06-20
JPH0675977B2 (ja) 1994-09-28
ATE63650T1 (de) 1991-06-15
JPS62156961A (ja) 1987-07-11
EP0229412A1 (en) 1987-07-22
US4905166A (en) 1990-02-27

Similar Documents

Publication Publication Date Title
NL8503461A (nl) Werkwijze voor het genereren van lijnstukken.
NL8502643A (nl) Werkwijze voor het genereren van lijnstukken.
EP0547242B1 (en) Single chip page printer controller
US4203154A (en) Electronic image processing system
US5748986A (en) Method and apparatus for displaying a page with graphics information on a continuous synchronous raster output device
US4891768A (en) Raster image processor
NL8502640A (nl) Front-end systeem.
US5282269A (en) Raster image memory
US4771340A (en) Method and apparatus for printing information
NL8502641A (nl) Raster-beeld-geheugen.
JP2941688B2 (ja) グラフィック処理装置
JP2822856B2 (ja) グラフィック処理装置
JPH06195469A (ja) グラフィック処理装置
JPH05204356A (ja) 画像描画装置
JPH06208626A (ja) グラフィック処理装置
JP2006011639A (ja) グラフィックオブジェクト処理装置及びグラフィックオブジェクト処理方法

Legal Events

Date Code Title Description
A1A A request for search or an international-type search has been filed
BB A search report has been drawn up
BV The patent application has lapsed