
 Routinen zur Verwaltung eines externen RAMs und eines externen EEPROMs
 fuer die C-Control 1.

 Bytes, Words und Vektoren von Bytes koennen unter festen Adressen im
 externen Speicher abgelegt werden, auch koennen sie im RAM auf einem
 Stack abgelegt werden (push/pop).

 Copyright Ruediger Schuetz, Muenchen, 2003.
 Diese Routinen stehen unter der GNU Public License (GPL).
 Verwendung und Weitergabe entsprechend GPL ist gestattet.
 E-Mail: Ruediger.Schuetz@consx.de

 Anpassung: Im Quellcode muessen zunaechst die hart kodierten Adressen
 von RAM und EEPROMS angepasst werden.

 Assemblierung: as05 -svtl asmcode.asm

 Annahmen:

  * das RAM ist 256 Byte gross, es wird eine 8-Bit Adresse benoetigt.
  * das PROM ist groesser, es wird eine 16-Bit Adresse benoetigt,
    jedoch kein Paging.

 Mit anderen Worten: RAM und EEPROM sind exakt so zu bedienen wie das
 EEPROM der C-Control. Die Bausteine muessen entsprechend ausgesucht
 werden. In DeepXS werden auch andere Bausteine bedient (mit Paging),
 das vergroessert jedoch den Code, und Bausteine ohne Paging sind
 problemlos erhaeltlich.

 Beispiele fuer unterstuetzte Bausteine:

  EEPROM  Atmel      AT24C128
  EEPROM  Atmel      AT24C256
  EEPROM  Atmel      AT24C512
  EEPROM  Microchip  24C65
  RAM     Philips    PCF8570

 Exlizit nicht unterstuetzt werden Bausteine mit Paging, die DeepXS von
 Mark Haemmerling unterstuetzt. Grund ist der knappe Platz im EEPROM
 der CC1.

 Die Adressen der Bausteine sind hart kodiert, sie werden nicht wie bei
 DeepXS als Argumente uebergeben. Somit wird der Rechenstack der CC1
 nicht korrumpiert, und die Fetch-Routinen (siehe unten) koennen in
 Ausdruecken eingesetzt werden, es muss keine Zuweisung an eine tempo-
 raere Variable erfolgen.

 Das Modell ist, dass es das on-Board EEPROM der CC1 gibt, wahrscheinlich
 ersetzt durch z.B. ein 64 kByte Atmel, weiter ein externes EEPROM (das
 entsorgte Original der CC1), und ein externes RAM.

 Die Motivation fuer das externe EEPROM ist, dass beim Schreiben in das
 EEPROM on-Board Irgendetwas schiefgehen kann, damit waere das Programm
 korrumpiert. Fuer Konfigurationsparameter bevorzuge ich diese Loesung.

 Die Motivation fuer das externe RAM ist die Moeglichkeit, Variablen
 auszulagern, quasi 'Overlays' fuer ganz, ganz arme Leute. Overlays gab
 es frueher auf grossen Rechnern, man hat Teile des Programmspeichers
 auf die Platte ausgelagert und dafuer Anderes eingelagert.

 Aus Platzgruenden werden NUR EIN externes EEPROM und EIN externes RAM
 unterstuetzt, das on-Board EEPROM wird nicht unterstuetzt. Wer kein
 externes EEPROM braucht, kann die betreffenden Entry-Points entfernen.

 Da es derzeit nur 8-bittiges RAM gibt, also 256 Byte gross, ist auch
 dies hart einkodiert. Sobald es groessere RAMs gibt, die dann 16 Bit
 Adressen benoetigen, koennen die Code-Pfade fuer RAM und EEPROM zu-
 sammengelegt werden.

 Im Quellcode muessen die hart kodierten Adressen von RAM und EEPROMS
 angepasst werden.
