.PL 70 .MT 4 .HM 2 .HE Variablå Speicherausnutzunç in TURBO-Pascal-Programmen .MB 6 .FM 2 .FOArtikeì voî Jenó Kalské Seitå ­ £ - .PM 6 .CP 4      Beií  Themá  "Variablå  Speicherausnutzung¢  denkô  man¬  ií Zusaímenhanç miô Pascaì ií Allgemeineî unä TURBÏ-Pascaì ií Beson deren¬ wohì iî ersteò Liniå aî Pointer¬ Listen¬ B{umå unä wiå diå ganzeî Gew{chså nocè allå hei~en. .CP 28      Icè  meinå abeò eiî andereó Problem® Diå  Speicherverwaltunç siehô beií Lauæ eineó TURBÏ-Pascaì-Programmó folgenderma~eî aus: .PM +-------+ º FFFFè º Speicherende º : : º xxxxè º BDOS-Einsprung Variablenobergrenze º xxxxè º TPA-Endå (ª ª *) º : : Variablenuntergrenze º xxxxh : CPU-Stack º xxxxh : (nacè unteî wachsend) º : : º v : Recursionstacë º xxxxh : (nacè unteî wachsend) º : : º v : º : º : º ^ : (nacè obeî wachsend) º : : Heað º xxxxh : Programmcodeende º xxxxh : º : Programmcodebeginn º 0100è º TPA-Anfang º 00FFè º ZEROPAGE-Ende º : º 0000è º ZEROPAGE-Anfanç +-------+ .PM 6 .CP 6      Iî  dieseí Beispieì steheî diå Variablenobergrenzå  unä  daó TPÁ-Endå aî derselbeî Stellå ií Speicher® Dieó bedeutet¬ daþ  deò gesamtå veòf}gbarå Speicheò volì voî TURBÏ-Pascaì genutzô  werdeî kann®  Dieó setzô abeò aucè strenç voraus¬ daþ beé deò  Compiliå runç deó Prïgrammó diå Compileò-Endadresså exakô auæ daó TPÁ-Endå eingestellô wurde. .CP 6      Wenî maî nuî eiî Programí schreibeî m|chte¬ welcheó miô  dù namischeî  Variableî  arbeiteô unä gleichzeitiç  miô  verschiedeî gro~eî  Arbeitsspeicherî zusammenarbeiteô waò maî bisheò  gezwuî gen¬  diå Compileò-Endadresså auæ eineî m|glichsô niedrigeî  Werô zõ setzen® Auæ deî Werô also¬ deò diå "kleinste¢ Speicheòkonfigõ ratioî repr{sentiert. .CP 5      Bedingô dadurcè treteî aber¬ jå nacè  Speicherkonfiguration¬ aî  deò iî deò Grafië miô (ªª*© bezeichneteî Stellå  mehò  odeò wenigeò  gro~å L|cheò auf® F}ò daó Programí unverwertbareò  Speé cher¬  deò  daó Programí unteò Umst{ndeî voò  deí  Absturú  durcè Speichermangeì bewahreî k|nnte. .CP 3      Uí  dieså unbefriedigendå Situatioî zõ l|sen¬ habå icè  micè zun{chsô  auæ diå Suchå gemacht¬ oâ vielleichô schoî  jemanä  auæ einå L|sunç gesto~eî ist. .CP 13 Š     Nacè l{ngereí Sucheî stieþ icè dann¬ auæ eineò deò  zahlreé cheî   Disketteî  voî  Jaù  Sage¬  auæ  einå  Dateé   miô   Nameî TURBMEM.FIX®  Iî dieseò Dateé wirä einå L|sunç vorgeschlageî  beé deò  innerhalâ deó Quelltextes¬ beií compilierteî  Programí  alsï nacè deò TURBÏ-interneî Initialisierung¬ diå dreé Pointeò auæ deî CPÕ-Stack¬ deî Recursioî-Stacë unä deî Heað ver{nderô werden® Unä zwaò  wirä  daó Programí zõ dieseí Zwecë m|glichsô  kleiî  compé liert¬ damiô deò gesamtå freiå Arbeitsspeicheò auæ jedeî Falì ií meò nacè deò Variablenobergrenzå liegt® Deò Variablenblocë  liegô iî dieseí Falì alsï direkô ií Anschluþ aî deî Programmcode® Nacè deí icè einigå Malå wegeî Systemabsturzeó neõ gebooteô hatte¬ kaí miò deò Gedanke¬ daþ diå L|sunç docè nichô sï guô sei® Irgenä eô waó schieî aî dieseò L|sunç zõ fehlen. .CP 6      Voî deò Ideå heò waò siå allerdingó ausgezeichnet® Nuò  m}ó seî  diå Begrenzungeî deó freieî Arbeitsspeichers¬ zwaò nacè  deí Programmstart¬ abeò voò deò Initialisierunç deó Speicheró ií Prï gramí  eingetrageî  werden® Danî fanä icè aucè nocè  durcè  eineî gl}cklicheî  Zufalì diå Stellå ií Programmcode¬ aî deò  diå  enô sprechendeî Adresseî zõ {nderî sind. .CP 6      Ií  compilierteî  Programí steheî aâ deò Adresså  20EEè  diå folgendeî beispielhafteî Programmzeilen: .PM 20EEhº LÄ HL,23AFÈ ;(Codeendå « 1© ½ Heapanfang 20F1hº LÄ DE,2F4BÈ ;(Variablenanfanç ­ 1© ½ Heapende 20F4hº LÄ BC,3000È ;Variablenendå ½ Compilerendadresse .PM 6 .CP 11      Jetzô  muþ maî eó eigentlicè nuò nocè schaffen¬  voò  dieseò Zuweisunç  diå Wertå aî diå jeweiligeî Gegebenheiteî  anzupassen® Haô  maî  daó Programí kleinstm|glicè compiliert¬  kanî  maî  diå Zuweisunç f}ò 'BC§ lassen¬ wiå siå ist® Deò Variablenblocë  stehô danî  direkô  ií Anschluþ aî deî Programmcodeblocë  ií  Speicher® Damiô deò gesamtå freiå Arbeitsspeicheò nutzbaò wird¬ m}sseî  nuò diå  Zuweisungeî f}ò 'HL§ unä 'DE§ gleicè nacè deí  Programmstarô ge{nderô werden® Unä zwaò m}sseî siå folgendå Wertå erhalten: .PM 20EEhº LÄ HL,(20F5h)+± ; 20F1hº LÄ DE,(0006h© ; .PM 6 .CP 6      Uí dieó deí Programí einzuverleiben¬ habå icè deî f}ò  dieså [nderungeî  n|tigeî Programmcodå einfacè iî diå  INLINÅ-Anweisunç deò Dateé CLINE127.INà voî Tilmanî Reè eingebaut® Nat}rlicè k|nn tå  maî aucè einå eigenå INLINÅ-Routinå daf}ò schreibeî  unä  daó Programm¬ wiå beé CLINE127.INC¬ voî Hanä patchen® Deò Codå f}ò sï einå INLINE-Anweisunç k|nnte folgenderma~eî aussehen: .CP 11 .PM LÄ SP,0100h ; LÄ HL,(20F5h© ;Compilerendadresså holen INà HÌ » « 1 LÄ (20EFh),HÌ ;½ neueò Heapanfanç --¾ sichern ; LÄ HL,(0006h© ;TPA-Obergrenzå holeî (BDOS-Einsprung) DEà HÌ » ­ 1 LÄ (20F2h),HÌ ;½ neueó Heapendå --¾ sichern ; JÐ 20E5è ;Programí normaì weiterlaufeî lassen .PM 6 .CP 7 Š     Wirä auó dieseí INLINÅ-Codå einå Prozeduò gemachô unä  dieså danî aló allererstå ií Programm¬ aí besteî gleicè nacè deí Reseò vierteî Bezeichneò PROGRAÍ eingef}gt¬ muþ nuò nocè diå  Sprungan weisunç 'JP20FFh'¬ bzw® diå Bytefolgå "C3h"¬ "FFh¢ unä "20h"¬ aî deò Adresså 20E2è iî daó compiliertå Programí geschriebeî werden® Dieó isô haargenaõ derselbå Ablauæ wiå eò f}ò CLINE127.INà  n|tiç ist. .CP 12 .PM PROCEDURE Variabler_Arbeitsspeicher; BEGIN INLINE($31/$01/$00¯ ;LÄ SP,0100h $2A/$F5/$20¯ ;LÄ HL,(20F5h) $23¯ ;INà HL $22/$EF/$20¯ ;LÄ (20EFh),HL $2A/$06/$00¯ ;LÄ HL,(0006h) $35¯ ;DEà HL $22/$F2/$20¯ ;LÄ (20F2h),HL $C3/$E5/$2° ;JÐ 20E5h ); END; .PM 6 .CP 5      Einigå  Malå habå icè jetzô schoî erw{hnt¬ daþ daó  Programí f}ò dieseî Patcè m|glichsô kleiî compilierô werdeî mu~® Dieó  isô ganú  einfach® Zun{chsô compilierô maî daó Programí miô deí  vor eingestellteî  Werô f}ò diå Compileò-Endadresse® Danî erh{lô  maî z.B® nacè deò Compilierunç folgendå Zahlenangaben: .CP 3 .PM 20E² ­ 23AÅ (Code) 23AÆ ­ 2F4 (Free© (Dieó isô nuò eiî Beispieì !) 2F4à ­ 300° (Data) .PM 6 .CP 6      Diå neuå Compilerendadresså errechneô sicè jetzô  folgender ma~en: .PM Compilerendadresså ½ Codeendå (23AEh© « ¨ Dataendå (3000h© ­ Dataanfanç (2F4Ch© ) « 200è "Puffer¬ wirä unbedingô ben|tigt" .PM 6 .CP 4      Jetzô  muþ maî nuò nocè pr}fen¬ oâ diå errechnetå  Compiler endadresså durcè ´ teilbaò ist® Wenî nicht¬ isô siå  entsprechenä zõ vergr|~ern® Miô dieseò Compilerendadresså wirä daó Programí sï kleiî wiå m|glicè compiliert. .CP 3      Icè hoffe¬ daþ icè miô dieseí Patcè jemandeí helfeî  konnte® Wenî nicht¬ hoffå ich¬ daþ icè wenigstenó niemandeí damiô geschá deô habe.