.po10 Eckehard Jagdmann Dr. Werner Domschke VEB Mikroelektronik "Wilhelm Pieck" M}hlhausen Nutzung von 64K-Byte-RAM-Modulen im KC 85/2 oder KC 85/3 als Datenspeicher f}r BASIC-Programme  1. Einf}hrung Eiî wesentlicheò Vorteiì deó KC85-Systemó deó VE Mikroelektronië "Wilhelí  Pieck¢  isô  daó  modularå  Konzept®  Insbesonderå  diå M|glichkeiô  deò  Erweiterunç  deó Speicheró }beò  deî  6´  KBytå Adre~rauí  deó Prozessoró U880Ä isô hervorzuheben®  Aló Grundlagå daf}ò befindeô sicè deò Moduì M01± 6´ KBytå RAÍ iî Produktion® Ií Kà 85/³  k|nneî davoî ohnå weiterå Aufs{tzå  ²  St}cë  betriebeî werden®  Damiô  steheî  deí Anwendeò insgesamô 14´ KBytå  RAÍ  ií Grundger{t zur Verf}gung. Dieseò  umfangreichå  Speicheò kanî iî Maschinensprachå  odeò  iî FORTÈ  relatiö problemloó genutzô werden®  Iî BASIà bereiteô  daó gr|~erå  Probleme¬  dá iî dieseò deò Programm- unä  Datenspeicheò durcè  diå Interpreteò dynamiscè verwalteô werden®  Deò  Anwendeò kanî  ohnå  speziellå Ma~nahmeî nichô  eindeutiç  festlegen¬  auæ welcheò  Speicheradresså bestimmtå Dateî stehen®  Damiô sinä  voî dem 64 KByte RAM-Modul nur 32 KByte nutzbar. Ií folgendeî solì einå M|glichkeiô aufgezeichneô werden¬ wiå aucè iî  BASIà miô  deí Kà 85/3-Grundger{ô 14³ KBytå  (1µ  KBytå  f}ò Programí unä 12¸ KBytå f}ò Daten© bzw® beé Ausbaõ deó Systemó miô eineí  odeò  mehrereî Aufs{tzeî aucè gr|~erå  Speicheò  genutzô werdeî k|nnen. 2. Datenspeicherung in BASIC Deò BASIC-Interpreteò richteô iî deí ihí zuò Verf}gunç  stehendeî Speicheò  nacè  RUÎ unä deò Benutzunç voî  Variableî  bzw®  dereî expliziteò  Vereinbarunç  (DIM-Anweisung© Variablenbereichå  ein® Dabeé werdeî zweé Bereichå unterschieden: 1® Bereicè  deò einfacheî numerischeî unä Stringvariableî  sowiå der definierten Funktionen (DEFFN-Anweisung) 2. Bereich der numerischen und Stringfelder. Auó  deî Arbeitszelleî deó BASIC-Interpreteró l{~ô sicè diå  Lagå der Bereiche eindeutig feststellen: Adresse Inhalt 3D7Hex = 983 dez. Anfang des 1. Bereiches 3D9Hex = 985 dez. Anfang des 2. Bereiches 3DBHex = 987 dez. erster freier Speicherplatz nach dem 2. Bereich Die Variablen werden wie folgt gespeichert: Einfache numerische Variable: 2 Byte - erste 2 Buchstaben des Namens (vertauscht) 4 Byte - Wert der Variablen .pa ŠEinfache Stringvariable: 2 Byte - erste 2 Buchstaben des Namens (vertauscht, Bit 7 des ersten Bytes gleich 1) 2 Byte - L{nge des Strings 2 Byte - Anfangsadresse des Strings   Diå Zeichenkettå selbsô kanî ií Stringspeicheò  odeò im Programm enthalten sein. Numerische Felder: 2 Byte - erste 2 Buchstaben des Namens (vertauscht) 2 Byte - Anzahl der nachfolgend zum Feld geh|renden Bytes 1 Byte - Anzahl der Dimensionen des Feldes (1 - Vektor, 2 - Matrix, 3 - dimensionales Feld usw.) je 2 Byte - Anzahl der Feldelemente je Dimension je 4 Byte - Wert des Feldelements Stringfelder: 2 Byte - erste zwei Buchstaben des Namens (vertauscht, Bit 7 des ersten Bytes gleich 1) 2 Byte - Anzahl der nachfolgend zum Feld geh|renden Bytes 1 Byte - Anzahl der Dimensionen des Feldes je 2 Byte - Anzahl der Feldelemente je Dimension je 4 Byte - Beschreibung des Strings (2 Byte L{nge, 2 Byte Anfangsadresse des Strings) 3. Plazierung von Daten au~erhalb des BASIC-Speichers 3.1. Zugriff auf den 64K-Modul von BASIC Daó Probleí beé deò Einbindunç voî 6´ KByte-RAM-Moduleî iî BASIC- Programmeî  bestehô darin¬  daþ Dateî iî einen Speicheò  abgelegô werdeî m}ssen¬ deò nichô voí BASIC-Interpreteò verwalteô wirä unä desseî   Anordnunç  ií  Adre~rauí  deó  Prozessoró  w{hrenä   deò Programmabarbeitung ver{nderlich ist. Diå Speichergliederunç ií Kà 85/3-Systeí miô eineí 6´ KBytå  RAM- Moduì  miô deî ´ m|glicheî Speicherblockanordnungeî isô ií Bilä ± dargestellt®  Darauó wirä deutlich¬ daþ deò BASIC-Arbeitsspeicheò auæ  deî  1¶ KBytå RAM-Blocë deó Grundger{teó  beschr{nkô  werdeî mu~¬  wenî diå Bl|ckå deó 64K-Moduló w{hrenä deò Programmabarbei tunç vertauschô werdeî sollen®  Weiterhiî erkennô man¬ daþ iî deò Speicherl}ckå  zwischeî RAÍ unä IRÍ auæ deî 64K-Moduì zugegriffeî werdeî kanî (Adresså 4000È bió 7FFFÈ bzw® 1638´ bió 3276· dez.). Dá  deò  IRÍ  voí BASIC-Interpreteò st{ndiç  iî  deî  Hintergrunä geschalteô  wird¬  isô aucè deò Bereicè voî 8000È bió  0BFFFÈ bzw® -3276¸ bió -1638µ dez® daf}ò nutzbar. .pa Š  |-----------------------------------------------| SWITCH 8,3 | 0 | 1 | 2 | 3 | |-----------------------------------------------| |-----------------------------------------------| SWITCH 8,67 | 1 | 0 | 3 | 2 | |-----------------------------------------------| |-----------------------------------------------| SWITCH 8,131 | 2 | 3 | 0 | 1 | |-----------------------------------------------| |-----------------------------------------------| SWITCH 8,195 | 3 | 2 | 1 | 0 | |-----------------------------------------------| |-----------| |-----------|-----|-----| | RAM | | IRM |BASIC|CAOS | |-----------|-----------|-----------|-----|-----| 0 16K 32K 48K 56K 64K Bilä 1º  Anordnunç deò Speicherbl|ckå deó 64K-Moduló ií Adre~rauí des KC 85/3 bei unterschiedlicher Modulprogrammierung 3.2. Datenspeicherung im 64K-Modul Beé  einfacheî numerischeî Dateî bieteô sicè diå  BASIC-Anweisunç PEEË unä POKÅ f}ò Byteó (Zahlenbereicè ° ..®  255© bzw®  DEEË unä DOKÅ f}ò Wortå (² Byte¬  Zahlenbereicè -3276¸ ..®  32767© an® Diå Organisatioî ií 64Ë Speicherblocë erfolgô iî deò Art¬ daþ deò zuò Verf}gunç   stehendå   Speicheò  (Anzahì  deò   64K-Module©   aló eindimensionaleó  Felä  aufgefa~ô  wird®   Deò  Zugrifæ  auæ  eiî Feldelement (lesen oder schreiben) mu~ so organisiert werden, da~ 1®    deò   entsprechendå   64K-Moduì   eingeschalteô   unä   deò erforderlichå  Speicherblocë iî deí Adre~bereicè 4000È  ..® 7FFFH mit der SWITCH-Anweisung angeordnet wird 2. die aktuelle Speicheradresse im Block berechnet wird. Danacè  kanî miô DEEË odeò DOKÅ diå Zahì geleseî odeò geschriebeî werden® Iî Tafeì ± isô eiî Beispielprogramí angegeben¬  daó dieseó iî deî Unterprogrammeî   Zeilå   10°   bió   63°   demonstriert®   Einå Beschreibunç erfolgô ií Abschnitô 4. Solleî Stringvariableî iî Speicherbl|ckeî deó 64K-Moduló abgelegô werden¬  sï  kanî  diå  Arbeiô  durcè  Beeinflussunç  voî  BASIC- Arbeitszelleî effektiö gestalteô werden® Iî deî Arbeitszelleî deó Interpreteró  existierô eiî Pointer¬  iî deí diå  n{chstå  freiå Adresså  ií Stringrauí deó RAÍ stehô (3C4Hex=964dez)®  Dorô  wirä beé jedeí Belegeî eineò Stringvariableî diå Zeichenkettå  abw{rtó ií  Speicherrauí  eingetragen®  Diå n{chstå freiå  Adresså  stehô danacè  wiedeò  iî 3C4Hex®  Solì einå Zeichenkettå iî eineî  64K- Moduì }bergebeî werden¬ brauchô nuò diå gew}nschtå Adresså inner halâ deó miô SWITCÈ zugewieseneî 16KRAM-Blockó deí String-Pointeò (3C4H© }bergebeî werden® Danacè wirä beé eineò Stringmanipulatioî (Zeilå   370©   deò  neuå  Strinç  aâ  dieseò   Adresså   abw{rtó eingetragen®  Isô  diå  Zeichenkettå }bergeben¬  muþ  wiedeò  diå Adresså  iî  3C4È eingetrageî werden¬  diå voò  deò  Manipulatioî dariî stand® ŠSolleî  Stringó verarbeiteô werden¬  diå iî eineí Blocë deó  64K- Moduló stehen¬  sï isô daó ebenfalló relatiö einfacè m|glich®  Eó wurdå  bereitó darauæ hingewiesen¬  daþ ií Variablenspeicheò  diå Stringvariableî miô Name¬ L{ngå unä Anfangsadresså deó Stringó ií RAÍ abgelegô sind®  Zuò ]bernahmå eineò Zeichenkettå auó deí 64K- Moduì  inó  BASIC-Programí  brauchô nuò  diå  Anfangsadresså  deó Stringó  ií zugewieseneî 16KRAM-Blocë deó 64K-Moduló  unä  desseî L{ngå  deò gew}nschteî Stringvariableî ií Variablenspeicheò }ber gebeî zõ werden. 4. Programmbeschreibung Iî  Tafeì  ±  isô eiî Beispielprogramí  angegeben¬  miô  deí  diå vorgestellteî Funktioneî erf}llô werden® Deò universellå Teiì deó Beispieló isô iî Forí voî Unterprogrammeî ausgef}hrô  (Zeilen-Nr® 10°  bió 820)®  Iî deî Zeileî 100° bió 321° isô aló Beispieì  diå Arbeiô  miô deî Unterprogrammeî dargestellt¬  unä iî deí  letzteî Teiì  (Zeilen-Nr®  400° bió 5140© einå M|glichkeiô zuí Retteî unä Ladeî  deò Dateî angegeben®  Dieså Teilå werdeî nachfolgenä  kurú beschrieben. 4.1. BASIC-Unterprogramme Deò  eigentlichå Kerî deó Beispielprogrammó isô deò Blocë miô deî Unterprogrammeî  (Zeileî  10°  bió  630)®  Iî  ihneî  findeô  deò Austauscè deò Dateî zwischeî BASIC-Programí unä deí RAÍ deó  bzw® deò Modulå M01± statt® Diå Unterprogrammå sinä auæ diå Verwaltunç voî  Zeichenketteî  deò  L{ngå 6´ Bytå bzw®  Zahleî  voî  ²  Bytå ausgelegt®  Werdeî Elementå andereò L{ngå verwendet¬  sinä diå ií Programí  iî  deî  Zeileî  77°  bió  81°  angegebeneî  Konstanteî entsprechenä  zõ {ndern®  Nachfolgenä werdeî  diå  Unterprogrammå beschrieben: - Zeile 100 - 140 (UP1) Hieò  wirä  auó  deí  Indeø BÌ deò  Elementå  (6´  Byteó  langå Zeichenketten©  deò  zust{ndigå M01± unä deò  16KByte-Blocë  ií M01±   errechneô  unä  iî  deî  Adressbereicè  voî  4000H-7FFFÈ zugewiesen®  F}ò diå weiterå Adressberechnunç wirä deò Indeø BÌ aufbereitet. - Zeile 200 - 230 (UP2)   Uí  UP± aucè f}ò ² Bytå langå Elementå nutzeî zõ  k|nnen¬  wirä   voò  deí Aufruæ voî UP± auó deí Indeø ZÚ deò Indeø BÌ gebildet®   Miô  ZÁ stehô nacè Abarbeitunç voî UP² diå  Anfangsadresså  deó   Elementes im Speicher zur Verf}gung. - Zeile 300 - 390 (UP3)   Iî UP³ wirä diå L{ngå deó iî deî RAÍ zõ }bergebendeî Stringó B¤ auæ  6´ Zeicheî festgelegt®  Danacè erfolgô diå Berechnunç  deò Adresså  ií  16KRAM-Block¬   aâ  deò  deò  Strinç  B¤   abw{rtó eingetrageî  werdeî soll®  Durcè ]bergabå dieseò Adresså iî deî String-Pointeò   (3C4H©  unä  nachfolgendeò  Stringmanipulatioî (Zeilå 370© wirä diå Zeichenkettå deí 64K-Moduì }bergeben®  Deò Stringpointeò  wirä  voò  deí  Unterprogrammr}cksprunç   wiedeò zur}ckgestellt. - Zeile 400 - 440 (UP4)   Solì  eiî Stringelemenô auó eineí M01± inó BASIC-Programí }ber   nommeî werden¬  wirä nuò diå Anfangsadresså deò Zeichenkettå ií Š  Speicheò  unä dereî L{ngå deí Variablenspeicheò  }bergeben®  Iî   UP´  wirä beideó realisiert®  Nacè Aufruæ voî UP4 stehô iî  DA¤   die ausgelesene Zeichenkette zur Verf}gung. - Zeile 500 - 530 (UP5)   Iî  UPµ werdeî 2Byte-Integerzahleî iî eineî  M01±  geschrieben®   Dazõ  wirä deí Unterprogramí deò Indeø ZÚ unä deò Werô deò Zahì   (in WERT) }bergeben. - Zeile 600 - 630 (UP6)   Miô  dieseí  Unterprogramí  wirä einå 2Byte-Zahì  auó  deí  RAÍ   gelesen®  Dazõ  wirä deò Indeø ZÚ aî UP¶  }bergeben®  Nacè  deò   Abarbeitung steht in WERT der ausgelesene Zahlenwert. - Zeile 700 - 820 (UP7)   Iî  UP·  werdeî  Funktioneî  definiert¬   diå  iî  deî  andereî   Unterprogrammeî zuò Adressrechnunç ben|tigô werden® Deshalâ muþ   dieseó  Unterprogramí  beií  Starô deó  BASIC-Programmó  zuersô   aufgerufeî  werden®  Weiterhiî  wirä daó  iî  eineò  DATA-Listå   vorhandenå Maschinenprogramm¬ zuí Ladeî unä Retteî deò Dateien¬ iî  deî Speicherbereicè voî 20BÈ bió 2E4È geschrieben¬  unä  eó werdeî diå spezielleî Konstanteî zuò Modifikatioî deó Programmó festgelegt. 4.2. Demonstrationsteil 4.2.1. Zahlenverwaltung (Zeile 3000 - 3210) Iî dieseí Programmteiì k|nneî beé deò Verwendunç voî zweé Moduleî M01± eiî Felä voî 6553¶ Zahleî (2Bytå lang© verwalteô werden®  Eó k|nneî Zahleî }beò Tastatuò eingegebeî odeò auæ deí  Bildschirí angezeigô werden® Dazõ isô jeweiló deò Indeø einzugeben. 4.2.2. Zeichenkettenverwaltung (Zeile 2000 - 2210) Unteò   Verwendunç  voî  zweé  Moduleî  M01±  k|nneî  iî   dieseí Teilprogramí  204¸ Stringó deò L{ngå 6´ Byteó eingegebeî und/odeò angezeigô  werden®  Beé deò Eingabå deò Zeichenkettå brauchô  diå L{ngå nichô exakô 6´ Zeicheî zõ betragen®  Iî deî Unterprogrammeî werden die eingegebenen Strings auf 64 Zeichen L{nge korrigiert. 4.3. Laden und Retten von Dateien Voî Basiã auó bestehô nichô diå M|glichkeit¬  bestimmtå Speicher bereichå  auæ Kassettå auszulagern®  Uí diå Dateî voî deî Moduleî M01±  64KBYTÅ  RAÍ retteî zõ k|nnen¬  isô einå  kurzå  Maschinen routinå notwendig. Daó Maschinenprogramí belegô deî Speicheò voî 20BÈ bió  2E4H®  Iî ihí  isô  gleichzeitiç einå Laderoutinå  enthalten®  Beidå  Teil programmå k|nneî voî BASIà miô CALLª aufgerufeî werden. Eó  kanî maximaì deò gesamtå Speicherbereicè eineó M01± miô eineí Aufruæ  auæ  Kassettå  geretteô  werden®   Werdeî  mehrerå   M01± verwendet¬  muþ  dementsprechenä mehrmaló geretteô  werden®  Dazõ sinä deí Unterprogramí jeweiló folgendå Dateî zõ }bergeben: * Steckplatz des M011 in der Speicherzelle 202H ; POKE514,x ª 16KByte-Blocë (1-4)¬ aâ deí diå Dateî geretteô werdeî sollen» POKE526,y   ª zõ rettendå Byteanzahì ií M01± (max®  65536© iî deî SpeicherŠ   zelleî 200È unä 201È » DOKE512,z   * 7-stelliger Name von 203H - 209H (515 - 521 dezimal)   Solleî Dateî auó eineí M01± ií Modulschachô 1² geretteô werden¬   isô deò ií Schachô ¸ vorhandenå Moduì M01± inaktiö zõ schalten®   Der Aufruf "Retten" erfolgt mit CALL*247. Beií  Ladeî m}sseî deí Unterprogramí folgendå  Dateî  }bergebeî werden: * Steckplatz des M011 in der Speicherzelle 202H; POKE514,x ª Anzahì deò maximaì zõ ladendeî 16K-RAM-Bl|ckå (1-4© iî 20FH» POKE527,y ª 16K-RAM-Blocknummeò (1-4© aâ deò diå Dateî geladeî werdeî sollen» POKE526,z Deò  Aufruæ  "Laden¢  erfolgô miô CALL*211®  Wenî  Dateî  iî  deî 64KBytå  RAM-Moduì ií Schachô 1² geladeî werdeî sollen¬  muþ  deò Moduì ií Schachô ¸ inaktiö geschalteî werden. Werdeî  mehò  aló ² Modulå M01± verwendeô (miô  D00²  BUSDRIVER)¬ m}sseî  beií Ladeî bzw®  Retteî iî bzw®  auó Moduleî miô  h|hereò Steckplatznummeò   allå   Modulå  M01±  iî  deî   Sch{chteî   miô niedrigereò Nummeò inaktiö geschalteô werden. Ií  Programmabschnitô (Zeileî 4000-4240© werdeî diå Parameteò deí Maschinenunterprogramí }bergeben®  Danacè wirä danî miô CALLª deò gew}nschtå Programmteiì aufgerufen. Diå Anzahì deò maximaì zõ ladendeî Bl|ckå isô standartm{~iç auæ ´ festgelegt®  Solltå abeò diå gerettetå Dateé z.B®  ³ Bl|ckå  lanç sein¬  unä  eó  solleî abeò nuò ² Bl|ckå davoî  wiedeò  geladeî werden¬  isô  deò  Speicherzellå  20FHeø einå ²  zõ  }bergeben® Weiterhiî  muþ  beií Retteî odeò Ladeî diå Nummeò  deó  Blockeó angegebeî  werden¬  aâ deí geretteô odeò geladeî  werdeî  soll® Fehlô  dieså  Angabe¬  isô  beé Neustarô  deó  Programmó  immeò standartm{~iç deò Bl|cë 1 eingestellt. Deò  Dateityð  deò auæ diå Kassettå geretteteî Dateieî  isô  DAT® Dieså Dateieî k|nneî nuò wiedeò miô dieseí Maschinenunterprogramí eingeleseî werden.