Documentatie PCONE                                                   1


        DOCUMENTATIE PCONE

       Programma   voor   ontwerp   van   dubbel-   en  enkelzijdige  gedrukte
       bedradingen.

       Versie 13 oktober 1984

        Inhoud.


        1. Inleiding

        1.1 Overdraagbaarheid

        2. Formaat datainvoer

        3. Gebruiksaanwijzing hoofdprogramma

        3.1 Toelichting op de opties

        3.2 Foutmeldingen

        3.3 Controles

        4. Hulpprogramma

        5.1 Programmabeschrijving: 1. Gereedschap

        5.2 Programmabeschrijving: 2. Basisprincipes

        6. Aanwijzingen voor verdere uitbouw

        7. Koppeling aan andere randapparaten

        8. Overzicht van de diverse files die bij PCONE horen



































       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   2


       1. Inleiding.

        PCONE is een programma dat kan helpen bij het  ontwerp  van  enkel  en
       dubbelzijdig gedrukte bedradingen. Met behulp van een matrixprinter kan
       men  op  ware  grootte  een  afdruk  krijgen  van  een lay-out voor een
       gedrukte bedrading. Versie PCONE van het  programma  kan  dubbelzijdige
       printen   ontwerpen   op   eurokaart   formaat  (10x16  cm).   Bij  het
       ontwerpproces kan men zich geheel richten op een optimale verdeling van
       de  componenten  over  het  vlak  omdat  alle  verbindingen  in  eerste
       instantie  worden  opgegeven met een icnummer en een pennummer, waarbij
       de plaats en de orientatie van de IC voet of bus nog variabel zijn. Met
       behulp  van  het  hulpprogramma  ICUTIL   is   het   mogelijk   om   de
       invoervolgorde van de verbindingen te wijzigen, zodat meer verbindingen
       gevonden  kunnen worden zonder doorverbindingen tussen de beide vlakken
       van een dubbelzijdige gedrukte bedrading.
        Versie PCONE van het  programma  is  niet  voor  interaktief  grafisch
       gebruik  bedoeld,  omdat  vooral  de  CP/M gebruikers slechts zelden de
       beschiking hebben over een terminal met grafische mogelijkheden.

        PCONE behoort tot de vrije programmatuur waarvoor geen  vergoeding  is
       vereist en die vrij mag worden gekopieerd. Zou iemand er voor voelen om
       het  programma  commercieel  te  gebruiken,  dan  mag dat alleen als de
       auteur daarmee schriftelijk instemt.

       ___ __________________
       1.1 Overdraagbaarheid.  Het programma is geschreven in Fortran-66.  Dit
       is  niet gedaan omdat Fortran de schoonheidsprijs verdient, maar vooral
       omdat Fortran nu eenmaal de meest eenvoudig te overdragen  computertaal
       is.   De  programma's  kunnen  modulair  worden  opgezet  en  in  delen
       gecompileerd terwijl  de  in  en  uitvoer  is  gestandaardiseerd.  Voor
       vrijwel iedere computer is een compiler beschikbaar die in staat is een
       minimale,  overdraagbare subset, goed te vertalen. Er is een versie van
       het programma in Pascal gemaakt, maar die is nog niet  beschikbaar.  Ik
       hoop dat de auteur mij een kopie stuurt!

       __ _______ ___________
       2. Formaat datainvoer.

       Bij  gedrukte  bedradingen  moet het ene punt op een printplaat met het
       andere worden doorverbonden, zonder andere verbindingen te snijden.  Om
       dit   probleem  hanteerbaar  te  maken  voor  computergebruik,  is  een
       eurokaart afgebeeld op een rooster met 126*80 punten. De lange as is de
       X as, de korte de Y as.  De afstand tussen de poten  van  een  IC  voet
       bedraagt  twee  roosterafstanden (2x1.26 mm). Tussen twee poten van een
       IC voet kan  een  verbinding  lopen.   Dit  blijkt  voldoende  voor  de
       overgrote meerderheid van gedrukte bedradingen.
        De  basis  van  de  invoer  bestaat uit het opgeven van de positie, de
       orientatie en het aantal pennen  van  IC  voeten.  Een  IC  voet  bevat
       meestal twee rijen pennen, maar kan ook opgegeven worden als een enkele
       rij  pennen. Het programma heeft steeds als basisgegeven een file nodig
       waarin de positie van tenminste een voet is gedefinieerd. De  definitie
       van een voet is als volgt:
        Xcoordinaat,(teken1)Ycoordinaat,(teken2)aantal  pennen  De  X  en de Y
       coordinaat zijn in roostercoordinaten van pen 1 van het  IC.  Pen  twee
       wordt in de negatieve X of Y richting getekend.
        Teken1  is  positief als de orientatie van de pennen parallel aan de Y
       as is.  Als teken 1 negatief is wordt de orientatie parallel aan  de  X
       as.
        Teken2  is positief voor een gewoon IC. Als teken2 negatief is, worden
       alle pennen in een rij getekend.
        Als het aantal pennen als 22 en hoger is opgegeven wordt een grote  IC
       voet  getekend. Wil men een kleine DIL behuizing van 22 pennen tekenen,
       dan is dat mogelijk door twee enkele rijen van 11 punten te definieren.
        De file met voetgegevens wordt niet afgesloten met een of ander teken,
       het programma ontdekt zelf een end of file conditie.







       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   3


       Voorbeeld van een voeten invoer file:

        10,16,10    (IC met 10 pennen, referentie als ic nr 1)
        20,16,12    (IC met 12 pennen, referentie als ic nr 2)
        20,-40,18   (IC met 40 pennen, groot getekend, -90' gedraaid)
        40,-40,-9   (rij met 9 pennen -90' gedraaid)

        De  andere  files  die  nodig  zijn,  zijn  files  met  gegevens   van
       verbindingen.  Het formaat is:
        (teken1ICnummer1,pennummer1,teken2ICnummer2,pennummer2)
        De  betekenis  van  dit formaat is dat uitgaande van het ICnummer1 een
       verbinding wordt gelegd naar ICnummer2. De verbinding ziet  er  in  het
       algemeen  anders  uit  wanneer  de  volgorde  wordt omgedraaid. Met het
       hulpprogramma kan men de volgorde zo berekenen dat  steeds  de  kortste
       manier wordt opgeslagen op een file.
        De betekenis van het teken is, dat bij een negatief teken het ICnummer
       en  het  pennummer  worden geinterpreteerd als respectievelijk een X en
       een Y roostercoordinaat (op het rooster  van  128*80  punten)  Op  deze
       manier kan dus iedere verbinding worden gelegd.
        Voorbeeld van een verbindingen invoer file:

        1,1,1,10 (pen 1 ic 1 met pen 10 ic 1)
        1,5,4,10 (pen 5 ic 1 met pen 10 ic 4)
        -10,10,3,5 ( punt 10,10 met pen 5 ic 3)














































       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   4


       __ __________________ _______________
       3. Gebruiksaanwijzing hoofdprogramma.

        Het  hoofdprogramma  meldt  zich  met een menu, waaruit men kan kiezen
       door het nummer in te tikken van de optie die men wenst.
        Voor goed begrip van de betekenis van de opties is  het  nodig  om  te
       begrijpen  wat  het  programma  intern  en  op diskette opslaat. In het
       geheugen is ruimte voor een vlak dat bit  voor  bit  op  een  MX-80  of
       compatibele  matrixprinter  kunnen worden afgebeeld. Voor ieder vlak is
       er een roostermatrix gedefinieerd die de informatie bevat over de  mate
       waarin het vlak al vol getekend is met verbindingen en voeten. Hierdoor
       kan  het  programma  dus twee vlakken tegelijk in de gaten houden en er
       voor zorgen dat  doorverbindingen  tussen  vlakken  niet  op  verkeerde
       verbindingen terechtkomen.
        In  het  menu  wordt  gesproken  over  datagrid en over plotfield. Het
       datagrid bevat de roosterpunten, terwijl het  plotfield  de  bitgewijze
       afbeelding voor de matrixprinter bevat.

        3.1. Toelichting op de opties.

        1. Clear, read data of pen lay-outs and draw lay-outs
        Het  geheugen  wordt  geheel  gewist (plotfield en datagrid). Er wordt
       daarna gevraagd om de filenaam waar de  voeten  op  zijn  gedefinieerd.
       Hierna  kan optie 6 (plotten van de lay-out) gekozen worden en optie 3,
       opslaan van het plotfield. Dit zal men doen indien men een  tweezijdige
       lay-out  wil  maken  waar  alle  voeten  ook  op  de tweede kant worden
       getekend.
        2. Read and search connections.
        Na keuze van deze optie wordt eerst om de filenaam gevraagd waarop  de
       verbindingen  zijn  gezet. Daarna wordt gevraagd om een filenaam waarop
       de niet gevonden (stukken van) verbindingen worden  gezet.  Optie  twee
       kan  herhaald worden: men kan zo de verbindingen in verschillende files
       onderbrengen. Dit vergroot de overzichtelijkheid van  de  verbindingen.
       Men  kan bijvoorbeeld eerst een file maken waarop de geheugen ic's zijn
       doorverbonden, dan een file met de buslogica en dan een met de rest van
       de logica.
        Meer details over het zoekproces staan bij de beschrijving  van  optie
       10.
        3. Store the plotfield.
        Gevraagd  wordt  om  een  file waarop het tekenvlak bit voor bit wordt
       opgeslagen. De file is 12K groot.
        4. Read in new plotfield.
        Leest een plotfield in dat het  bestaande  vervangt.  Bij  tweezijdige
       ontwerpen zal men dus eerst het plotfield opslaan.
        5. Clear plotfield en datagrid.
        Het   plotfield   en  het  datagrid  worden  geheel  gewist.  Wil  men
       bijvoorbeeld geen afbeelding van de voeten op de een zijde, dan zal men
       na deze optie een leeg plotfield opslaan. Dit plotfield kan  dan  later
       weer  worden  ingelezen,  eventueel  na het tekenen van voeten. Op deze
       manier worden de voeten niet getekend, maar wordt wel rekening gehouden
       met hun aanwezigheid.
        6. Plot the plotfield.
        Deze optie heeft twee varianten: men kan emphasized  plotten  (dubbele
       aantal  punten in de X richting) en men kan al dan niet in spiegelbeeld
       plotten.  Spiegelbeeld is nodig om een tekening voor de tweede zijde te
       maken.  Deze optie vereist dat er een goede handshake is via  het  lst:
       device.  Is  dat  er niet, dan werkt het wellicht als de printer op 300
       baud  wordt  gezet.   Voor  sommige  CP/M  computers  is  een  speciale
       uitvoerroutine  vereist,  zoals bij de KAYPRO-4. (Bij de KAYPRO-2 werkt
       het wel goed, evenals bij de Bondwell-2)
        7. Interchange the datagrids
        Als men naar een ander vlak wil overgaan, dan zal zowel het  plotfield
       als  het datagrid verwisseld moeten worden. Het plotfield wordt via een
       file omgewisseld, het datagrid wordt intern omgewisseld.  Het  datagrid
       bevat  alle  informatie  die nodig is over verbindingen en voeten. Deze
       optie zal gekozen worden na optie 3 en 4, of daarvoor.
        8. Separate found and unfound connections.
        Bij deze optie wordt alleen gezocht of  een  verbinding  gevonden  kan
       worden.   Zo ja dan wordt hij getekend, zo nee dan wordt die verbinding


       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   5


       op de file van  niet  gevonden  verbindingen  gezet.  De  wel  gevonden
       verbindingen  worden  op  de  file van gevonden verbindingen gezet. Dit
       gaat dus anders dan bij optie 2, waarbij een niet  gevonden  verbinding
       zo ver mogelijk getekend wordt en het overblijvende stuk op de file van
       residuals gezet wordt.
        9. Optimize order of connections
        In  het algemeen zal men een verbinding niet kunnen vinden ten gevolge
       van  eerder  getrokken  verbindingen.  Soms  is  een   verbetering   te
       verkrijgen  door  dergelijke  verbindingen  wat  eerder  in de reeks te
       zetten. Via optie 9  gebeurt  dat  automatisch.  Eerst  moet  opgegeven
       worden  hoeveel  keer het geprobeerd moet worden.  Bijgehouden wordt of
       het er beter van wordt, zo niet dan kan men kiezen tussen opslag van de
       verbindingen file of nog een paar keer proberen. Verwacht niet te  veel
       van deze optie: hij zit er voor de aardigheid bij.
        10. Set parameters for searching.
        Deze  optie  wordt  als  eerste  opgeroepen  voor  alle  andere worden
       getoond.  Er wordt gevraagd om een voorkeursrichting (X, Y of niets) en
       om de maximale omweg die het pad mag bevatten.
        In het programma is een heuristische procedure opgenomen  om  zo  goed
       mogelijk  van  het  ene punt naar het andere te zoeken. Dit gebeurt via
       een schildpad die in een doolhof van  het  ene  punt  naar  het  andere
       zoekt.  De  schildpad kun je de instruktie geven eerst in de X richting
       of eerst in de Y richting te zoeken.  Geef je hem  die  voorkeur  niet,
       dan  zoekt  hij  eerst  of  hij  rechtdoor  kan en pas als dat niet tot
       dichterbij komen leidt, slaat hij een ander pad in.  Het  is  duidelijk
       dat  men  zal  proberen  op  het  eerste vlak alle verbindingen in de X
       richting te laten lopen, en op het tweede vlak in  de  Y  richting  (of
       omgekeerd  natuurlijk.)  Je kunt de schilpad ook instrueren een niet al
       te grote omweg te maken. Hij zal dan proberen een pad te vinden  zonder
       een  dergelijke omweg. Het programma zal, als een omweg bijvoorbeeld 16
       roosterafstanden mag bedragen, ook proberen of  het  met  een  kleinere
       omweg  kan.  Dit  gebeurt via een bisectie algoritme waarin in een paar
       stappen de kleinste omweg wordt gevonden die nog  tot  een  pad  leidt.
       Deze  zoekprocedure  is heuristisch en niet gegarandeerd:  het kan zijn
       dat er een pad is met een  omweg  van  twee,  maar  dat  dat  pad  niet
       gevonden  wordt  als  de  maximale  omweg twee bedraagt. Dat komt omdat
       ieder punt slechts een keer  onderzocht  wordt.  In  tegenstelling  tot
       kortste  pad  algoritmen, zoals die van Dijkstra (zie: "Een methode van
       programmeren, Academic Service 1984 pagina 132  en  volgende  voor  een
       algemene  oplossing  van  het  kortste  pad  probleem  in  willekeurige
       grafen), wordt het kortste pad door dit algoritme  niet  gevonden.  Het
       kortste   pad   algoritme   van  Dijkstra  is  trouwens  heel  goed  te
       programmeren, maar het leidt in het algemeen tot een zoekproces dat wat
       minder efficient is en dat wat meer geheugen vraagt. Ik beloof bij deze
       dat ik het in de MS-DOS versie zal bijvoegen.
        11. End -spreekt voor zich

        Meer algemene toelichting:

       Omdat het programma gericht  is  op  het  ontwerpen  van  dubbelzijdige
       gedrukte  bedrading, kan het eerste tekenvlak met het tweede verwisseld
       worden. In PCONE kan dit via een diskfile.
        Het datagrid van de kant waarin niet getekend wordt, wordt gebruikt om
       doorverbindingen aan  te  geven.  Het  programma  zoekt,  als  er  geen
       verbinding  gevonden  kan  worden  van  beide punten af naar het andere
       punt, en wel naar het dichtstbijzijnde punt dat bereikt kan  worden  en
       waar  op  het tweede vlak geen ander punt aanwezig is. Het plotgrid van
       de voeten wordt naar het tweede vlak gekopieerd, door  na  het  tekenen
       van de voeten het plotfield weg te schrijven naar een diskfile.
        Dit  geeft  de  mogelijkheid  om verbindingen die niet in het ene vlak
       gevonden zijn, in het andere vlak te vinden. Dit is ook  de  reden  dat
       men  bij  het  opgeven van een filenaam voor de invoer van verbindingen
       ook een  naam  voor  de  uitvoer  van  overgebleven  verbindingen  moet
       opgeven.  Deze  file  kan dan weer worden ingelezen als naar het andere
       vlak gewisseld is.  Ook voor het ontwerp van enkelzijdige prints is dit
       bruikbaar: de tweede kant wordt dan met draadbruggen gerealiseerd.  Als
       het  gaat  om  een  klein aantal verbindingen in het tweede vlak is dat
       natuurlijk een stuk makkelijker.


       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   7


        Als er na het tweede vlak nog verbindingen over zijn, dan kan weer  in
       het  eerste  vlak  verder gezocht worden, vervolgens weer in het tweede
       etc. Als alle sporen oneindig dun waren, zou er  altijd  een  oplossing
       gevonden worden!
        Naast  deze  opties  kent het programma nog een paar mogelijkheden die
       kunnen  helpen  om  de  goede  volgorde  te  bepalen  van   een   serie
       verbindingen.  De  eerste  mogelijkheid  is  het splitsen van een reeks
       verbindingen in twee files: een waar de gevonden  vervindingen  opstaan
       en een waar de niet gevonden verbindingen opstaan. Deze optie is ook te
       gebruiken  voor het ontwerpen van enkelzijdige prints, waarbij men geen
       halve paden wenst. De tweede mogelijkheid is een  echte  optimalisering
       van  de  volgorde  van verbindingen. Ik geef hem voor wat hij waard is:
       het vraagt wel even wat rekentijd en ik denk dat ik binnenkort nog  wel
       iets  slimmere  principes bedenk, maar in principe moet het wel werken.
       Bij de optimalisatie wordt geen plotfield gebruikt,  zodat  het  zoeken
       wat  sneller  in  zijn werk gaat dan anders. Niet gevonden verbindingen
       worden iets eerder in de volgorde van verbindingen gezet. Als men klaar
       is, dan kunnen de verbindingen volgens de  nieuwe  volgorde  uitgevoerd
       worden.  Er wordt een kwaliteitsmaat voor de oplossing uitgerekend, die
       evenredig is met het aantal verbindingen en omgekeerd evenredig met  de
       weglengte boven het absolute minimum.

       ___ ______________
       3.2 Foutmeldingen.

        Het  programma  kent  een  aantal  foutmeldingen.  De  betekenis wordt
       hieronder uitgelegd.
        ____ ______
        STOP INSMEM Het  programma  houdt  er  mee  op  omdat  er  onvoldoende
       geheugen  beschikbaar  is: sommige CP/M systemen gaan te royaal met hun
       geheugen om en dan werkt het niet.
        __________ __ __ __ __ ___ ______ ___________
        PEN-NUMBER 38 OF IC 10 TOO LARGE, TERMINATED:  In de invoer wordt  een
       pennummer  gedefinieerd  dat  niet  overeenkomt  met  de  opgave  in de
       definitie van de IC voeten. Controleer de invoer
        _______________ ___ ______ ____ _________
        GRIDCOORDINATES TOO LARGE: X,Y= 1000,1440 Een absolute  coordinaat  is
       opgegeven met een te grote waarde. Controleer de invoer
        __  __  ________  ____ ____ ____ __ _____ ___________
        NO  IC  POSSIBLE  WITH MORE THAN 60 PINS, TERMINATED:  In de definitie
       van een IC mag geen IC met meer dan 60 pennen worden opgegeven.
        _______ ______ ______________________ ___________
        PROGRAM ERROR: ITX,ITY,IEINDX,IEINDY= 63,54,64,54  Deze  fout  mag  in
       principe niet optreden. De foutmelding is een controle dat een gevonden
       pad  ook  inderdaad  uitkomt bij het punt waar het moet uitkomen. Stuur
       mij, als deze fout optreedt, de invoer die tot de  fout  geleid  heeft,
       dan kan ik uitzoeken wat er aan de hand is.

       ___ __________
       3.3 Controles.

        Het  programma  voert  allerlei controles uit of er geen arrays worden
       overschreven.  Deze  controles   kunnen   geelimineerd   worden,   maar
       verstandig  is  dit  niet zo erg: wat kost tenslotte microcomputertijd?
       Het voordeel van dergelijke controles is dat je bij  eigen  knutselwerk
       niet zo snel een onbegrijpelijke fout krijgt die door adressering wordt
       veroorzaakt:   aan  deze fout hangt bij FORTRAN nooit een kaartje. (Als
       er bij FORTRAN iets fout gaat, vaak op een variabele manier,  neem  dan
       aan dat het een array is dat buiten zijn grenzen wordt geadresseerd. Ik
       heb  nog  nooit  anders  meegemaakt,  en  vandaar de controles. Je wint
       echter in snelheid door de controles weg te laten.)

       __ _____________
       4. Hulpprogramma

        Het   hulpprogramma   ICUTIL   sorteert   de   verbindingen    volgens
       verschillende  principes,  gerealiseerd  door  een  gewogen  som van de
       afstand tussen twee punten in de X en de Y richting  te  berekenen.  Er
       wordt  gevraagd  naar  een  vermenigvuldiger  voor  de  X  en voor de Y
       afstand. Door deze op 1,1 te kiezen worden de  verbindingen  gesorteerd
       op  kortste  afstand.  Door de vermenigvuldigers op 1,0 te kiezen wordt
       gesorteerd op kortste afstand in de X richting, 0,1 in de  Y  richting,
       terwijl mengvormen zijn toegestaan.
        De  tweede optie is gerealiseerd door de afstand van de X en/of van de
       Y as van het punt dat het dichtst bij de  linkerbenedenhoek  (oorsprong
       van het coordinatensysteem) ligt, in de afstandensom mee te nemen.


       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   8


        De derde optie bestaat uit het aangeven van vermenigvuldigingsfactoren
       waarmee  het  mogelijk  wordt  de  volgorde  van  de verbindingen om te
       draaien, zodat alle verbindingen van links naar rechts lopen, en/of van
       boven naar beneden, of omgekeerd. De uitvoer is  in  een  standaardvorm
       die  zo  in  het  programma  kan  worden  ingevoerd,  voorzien  van een
       nummering. Op een hulpfile wordt dezelfde uitvoer uitgevoerd, maar  dan
       in  absolute  coordinaten. Dat is handig om in de gaten te houden welke
       verbinding met welk nummer overeenkomt.
        Voor het gemak zijn een aantal mogelijkheden al  ingeprogrammeerd.  Ze
       kunnen  via  een  menu  worden  gekozen. Vele ervan leveren erg slechte
       resultaten!

       ___ ______________________ __ ____________
       5.1 Programmabeschrijving: 1. Gereedschap.

        Het programma is opgebouwd door te beginnen  met  het  maken  van  het
       gereedschap   dat   nodig  is  om  meer  complexe  funkties  te  kunnen
       definieren.  Het allereerste stuk gereedschap is het beschikbaar  maken
       van  Bit-arrays via een geschikte bewerking op 8 bits getallen. In zo'n
       bit array moet je individuele  bitjes  kunnen  controleren,  zetten  en
       wissen.  Dit  gebeurt  met  de  routines  CHECK(X,Y,RESULT) SET(X,Y) en
       UNSET(X,Y). Deze routines maken gebruik van  de  bitgewijze  operatoren
       die in Microsoft Fortran beschikbaar zijn, en wel de operatoren OR voor
       het  zetten  van een bit, en AND voor het controleren en het wissen. De
       routines spreken verder voor zich.
        Bij de APPLE-II versie is de bitmap verschillend, omdat een byte  daar
       serieel wordt uitgelezen in een lijn. Het principe is echter hetzelfde.
        De  tweede  funktie  die  nodig  is, is het bewegen op een rooster van
       punten.  Dit gebeurt door  richtingen  te  definieren:  1  positieve  X
       richting, 2 positieve Y richting, 3 negatieve X richting, 4 negatieve Y
       richting.  Het  programma  gebruikt  een  soort  van schildpad (Turtle)
       manier om over het rooster te bewegen. In het COMMON gebied PCOORD zijn
       de huidige coordinaten van de schildpad opgeslagen. Met SETM worden  de
       coordinaten  aangepast  als funktie van de beweging. Met BACK wordt een
       beweging de omgekeerde kant op gebruikt. Met CHECK wordt getest of  een
       beweging mogelijk is naar een vrij punt.
        Als  je  begint  met een ontwerp, worden eerst de voeten gedefinieerd.
       Deze voeten worden op de roosters voor de twee vlakken "bezet"  gemaakt
       door  de  routine  ICPEN.  Je  moet  de coordinaten van een IC pen weer
       kunnen terugvinden als funktie van het  IC  nummer  en  het  pennummer.
       Hiervoor zorgt de routine CPEN. Daar zitten allerlei problemen aan vast
       die  te  maken  hebben  met de orientatie van een IC; de programmatekst
       maakt wel duidelijk hoe dit is opgelost. Er wordt gebruik  gemaakt  van
       een richtingvector IMX,IMY.
        Al  werkend  is  het nodig om een tijdelijk roosterarray te maken voor
       het uitproberen van verbindingen. De routines SAVE  en  RESTORE  zorgen
       hiervoor.  De routine CHANGE verwisselt de roosters.

       ___ ______________________ __ _______________
       5.2 Programmabeschrijving: 2. Basisprincipes.

        Als  je  op een rooster aan het zoeken bent moet je kijken of je in de
       richting van een doelpunt kunt bewegen, en of als dat niet kan, er  nog
       een  andere  mogelijkheid  is  om  verder  te komen. Dit gebeurt met de
       routines PRIOR en PRIOR1. PRIOR1 is een eenvoudige routine die kijkt of
       een gegeven richting kan worden gevolgd, PRIOR zoekt  een  richting  op
       volgens  een  bepaalde  heuristiek. De routine SEARCH beheerst het hele
       zoekproces en zorgt ervoor dat er een serie bewegingen  wordt  gevonden
       die samen een pad tussen twee punten vormen.
        In  de routine SEARCH zit het intellectuele hart van het programma. In
       het array DIR worden de bewegingen  opgeslagen.  Via  PRIOR  wordt  een
       richting  bepaald.  Als  prior  aangeeft  dat er geen richting meer is,
       wordt de laatste beweging ongedaan gemaakt en  wordt  naar  een  nieuwe
       beweging  gezocht.   Tijdens  het  zoeken  worden  alle bereikte punten
       gemarkeerd, zodat  een  punt  niet  twee  keer  wordt  onderzocht.  Het
       programma  onderzoekt  dus niet alle mogelijke paden van A naar B, maar
       breidt als het ware een veld van bereikbare punten uit tot het gezochte
       punt bereikt is. Op een grafische unit heb ik dat zichtbaar gemaakt: je
       ziet als het ware een olievlek zich uitbreiden  tot  het  doel  eenmaal
       gevonden  is.   Het  gevonden  pad  is  derhalve  niet noodzakelijk het


       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   9


       kortste. SEARCH heeft ook nog een andere funktie. Het is  mogelijk  dat
       een richting wordt ingeslagen die daarna weer in tegengestelde richting
       wordt  doorlopen.  Dit  kan tot zeer lange paden leiden. Een dergelijke
       omkeer wordt ontdekt en geelimineerd.
        Nadat een verbinding is gevonden, wordt met de routine  CONV  het  pad
       ingetekend  in  het  plotfield  en  het  datagrid. Hierbij wordt ervoor
       gezorgd dat een verbinding die een zogenaamde shift maakt  (zie  onder)
       met  een  schuine  lijn  wordt  getekend.  Alleen op deze manier is het
       mogelijk om het "doorlussen" van IC's te realiseren.

               ........                  x.........
        ........           wordt:  .......
        Het punt gemarkeerd met x wordt geelimineerd, waardoor verbindingen er
       uit zien als:
                  /-------                            |--------
            -----//-------     en niet als:     ------||-------
            -----/                              -------|

        De preciese manier waarop dit wordt gedaan is nogal ingewikkeld, omdat
       ervoor gezorgd moet worden dat  de  schuine  hoek  op  dezelfde  manier
       loopt, onafhankelijk van hoe de verbinding loopt.

        Een  klein  detail  is  de manier waarop de orientatie van een IC voet
       wordt  aangegeven.  Dit  gebeurt  met  de  richtingsvector.  Als   deze
       richtingsvector de nulvector is, dan gaat het om een niet IC voet punt.
       Een  dergelijk  punt  wordt  vierkant  i.p.v.  rechthoekig getekend. De
       resolutie  van  de  matrixprinter  staat  niet  toe  om  een  dergelijk
       vierkantje  los  te  tekenen  tussen  twee  poten  van  een IC. Bij het
       overnemen van de tekening moet daar wel rekening mee  worden  gehouden.
       (een MX-82 printer met eenzelfde resolutie in de X als in de Y richting
       heeft dit euvel niet. Aanpassing is dan wel nodig)
        In  het  programma  zitten  een  paar min of meer heuristisch gevonden
       zaken.  Een IC voet neemt in het rooster drie punten in beslag. Dit  is
       gedaan  om  ervoor te zorgen dat er ruimte is om een soldeereiland. Bij
       het zoeken naar een verbinding wordt ervoor  gezorgd  dat  een  IC  pen
       alleen  onder een hoek van 90' wordt benaderd. Dit kan aanleiding geven
       tot moeilijkheden als meer dan een verbinding  ontspringt  aan  een  IC
       pen.  De  oplossing  is  dan  om  een  verbinding  te  leggen  naar  de
       verbindingslijn die al gelegd is. Dit zal meestal ook korter zijn.

       __ ____________ ____ _______ ________
       6. Aanwijzingen voor verdere uitbouw.

        De heuristiek van het zoeken van  verbindingen  wordt  in  de  routine
       PRIOR gedefinieerd. Het is eenvoudig mogelijk een andere heuristiek uit
       te proberen: de routine SEARCH heeft daar geen enkele last van. Ik vind
       het  uitproberen  van  diverse heuristieken erg interessant. Het is wel
       belangrijk de heuristieken op meer dan een voorbeeld  uit  te  proberen
       omdat  men  anders  het  gevaar loopt iets te maken dat alleen voor een
       bepaalde print goed werkt. In deze  versie  is  het  mogelijk  om  drie
       heuristieken te kiezen: in de eerste wordt in de X richting gezocht, de
       tweede  zoekt  in  de Y richting en de derde gaat door in de ingeslagen
       richting, behalve als er een betere bewegeing is.
        In principe is het mogelijk om een vlak met willekeurige afmetingen te
       definieren. Het aantal bytes dat echt nodig is voor een print is gelijk
       aan: Aantal  roosterpunten  x  3/8,  als  er  geplot  wordt  nadat  een
       verbinding   is   gevonden.  Moet  ook  de  richtingsinformatie  worden
       opgeslagen, dan is het  aantal  benodigde  bytes  5/3  keer  zo  groot.
       Gegeven  dat  er  zo'n  32K  vrije geheugenruimte beschikbaar is, is de
       grootste print die zonder overlay trucs kan worden  ontworpen  ongeveer
       28x28  centimeter. Het is een interessant probleem om dit verder uit te
       breiden, bijvoorbeeld door een silicium hulpgeheugen te gebruiken.
        De snelheid van het programma kan vermoedelijk worden vergroot door de
       routines voor het controleren en zetten van punten in  machinetaal  uit
       te  voeren.  Beschouw dat als oefening: er is weinig echt mee te winnen
       en veel mee te verliezen aan duidelijkheid.
        Als eenmaal een pad is gevonden kan men proberen of dit pad  nog  iets
       fraaier  kan worden gemaakt, door hoekjes eruit te halen en zo. Dit kan
       in principe met een aparte routine die vanuit  de  routine  CONV  wordt


       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   9


       aangeroepen.
        Liefhebbers van elegante interfacemethoden kunnen hun hart ophalen aan
       het  gebruik  van  een goede grafische terminal. Het hele padzoekproces
       kan men dan geheel in de hand houden. Ik  betwijfel  overigens  of  dat
       veel  oplevert.   Een  enkel  pad zal er wel fraaier op worden, maar de
       essentie van CAD is dat het tijdrovende werk versneld wordt. Ik  geloof
       meer  in  retouchering  van  een tekening, iets dat overigens weer heel
       goed met de computer kan, maar dan met een programma dat  de  getekende
       plot  als  invoer  heeft.  Een  goed  programma zou een tekening dan zo
       kunnen retoucheren, dat hij samen met een rooster weer als invoer  voor
       PCONE gebruikt kan worden.
        Een  verdere  uitbreiding  ligt  in  het koppelen van PCONE aan andere
       programma's zoals het PES programma van ter Haseborg en  Schotanus  van
       de  Rijksuniversiteit  te Groningen. Ook kan men denken aan simulatoren
       van logische schakelingen gekoppeld  aan  een  programma  dat  funkties
       toewijst aan IC's. De duurdere commerciele programma's kunnen dat vaak.
        Een  uitbreiding  is  verder ook mogelijk bij het optimaliseren van de
       verbindingen en het plaatsen van de IC's. Enig gezond oordeel zal  hier
       al  veel  goed  aan  kunnen doen, maar het is heel goed mogelijk om het
       plaatsen van onderdelen via een programma te doen.
        De verbindingen kunnen geoptimaliseerd worden door de verbindingen die
       niet worden gevonden eerder in de reeks te plaatsen. Dit gaat door  tot
       er geen verbetering meer optreedt.
        Ik  ben erg benieuwd of er mensen zijn die zin hebben om het programma
       te vertalen in talen zoals Pascal, Modula-2 en C. Het zou  een  aardige
       test zijn om eens te kijken wat nu het verschil wordt van een toch niet
       erg  klein  programma,  zowel op het eerste gezicht als wat de snelheid
       betreft. (Er is, via de Heath gebruikersgroep, die al langer  over  een
       oudere versie kan beschikken, al een Pascal vertaling gemaakt)

       __ _________ ___ ______ ______________
       7. Koppeling aan andere randapparaten.

        Voor de grafische terminal TERM1 van Graf elektronik is een eenvoudige
       koppeling  ontwikkeld  via  een  in mijn computer (Heath H89) aanwezige
       derde seriele poort. Voor  CP/M  kan  men  ook  gebruik  maken  van  de
       routines  voor  grafische  output op een matrixprinter: deze werken ook
       als een grafische unit als de TERM1 wordt  aangesloten.  Koppeling  met
       incrementele  plotters  is  erg  eenvoudig: het programma berekent alle
       stappen die de motoren moeten maken, zodat de meest  simpele  interface
       zal  voldoen.  Ik  heb  in  feite  de  routines voor het plotten op een
       bitrooster gemaakt voor een incrementele  plotter!  Koppeling  aan  een
       computer   met  grafische  uitvoer  volgens  de  CALCOMP  norm  is  erg
       eenvoudig: de aanroep van de routines voldoet precies  aan  deze  norm,
       allen de inhoud zal veranderd moeten worden.
        Op  de  schijf  is een demonstratieprogramma aanwezig dat op een TERM1
       laat zien hoe het zoeken in zijn werk gaat.
























       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.




       Documentatie PCONE                                                   10


        8. Overzicht van de bijbehorende files.
        _____        ____
        File:        Doel

        CPMFMT.FOR   Programma om een filenaam in de vorm te krijgen die
                     de fileroutines van F80 nodig hebben.
        SUPPORT.REL  Programma om het door L80 ingenomen gebied te kunnen
                     gebruiken, en om via het CP/M list device een printer aan
                     te sturen met 8 bits data. Dit zijn assembly programma's
                     van Jan Schouten en William R. Pearson.
        PCONE.REL    Source en vertaalde versie van het hoofdprogramma met een
        PCONE.FOR    paar routines
        PCONE.COM    Executeerbare file
        PLOMAT.FOR   Source en vertaalde versie van de plotroutines
        PLOMAT.REL
        PCSUB.FOR    Routines voor algemeen gebruik
        PCSUB.REL
        ZOEK.FOR     De eigenlijke zoekroutines SEARCH, PRIOR1 en PRIOR
        ZOEK.REL
        PCONE.SUB    Submitfile om een nieuwe COM file te maken.
        ICUTIL.FOR   Utility programma, source en executeerbaar.
        ICUTIL.COM
        SORT.FOR     Sorteerroutine.
        PCONE.DOC    Deze file
        term1.for    Aangepaste routines voor de grafische terminal TERM1
        C.VOE        Voeten van een ontwerp voor een seriele interface
        C.DAT        Verbindingen van een seriele interface
        ENGELS.DOC   Documentatie in het engels.













































       (c) 1984 G.J. te Meerman  Klooslaan 12 9721 XN Groningen Nederland.