R}ckfragen  bez}glich  der  ]bersetzung  des  Originalhandbuches
'Spectrum 128 - Technical Guide' sind zu richten an:            
                                                                
                    Thomas M}nch                                
                    Str. der DSF 3                              
                    Plauen, 9900                                
                                                                
----------------------------------------------------------------
                                                                
               Spectrum 128 - Technisches Handbuch              
                    freigegeben am 18.02.1986                   
                                                                
                                                                
1. Einf}hrung                                                   
=============                                                   
                                                                
Dieses Handbuch ist eine Kurzbeschreibung der Hauptmerkmale  des
Spectrum 128 f}r Softwareentwickler.                            
                                                                
                                                                
2. Hardwarespezifikation                                        
========================                                        
                                                                
Der Spectrum  128  ist  ein  Mikrocomputer  auf  der  Basis  des
Z80A-Prozessors mit 128K RAM (mittels bankswitching  realisiert)
und 32K ROM. Seine externen Ausg{nge und Schnittstellen sind:   
                                                                
                                                                
            1) Kassettenport           wie f}r Spectrum 48K     
            2) TV-Ausgang                                       
            3) Expansions-Bus                                   
                                                                
            4) RS-232/MIDI-Port        Spectrum 128-spezifisch  
            5) RGB-Monitorausgang                               
            6) Keypad                                           
            7) Ton }ber TV-Kanal                                
                                                                
                                                                
Ein Hauptgedanke beim Entwurf des Spectrum 128 war, ihn weitest-
gehend  software-  und  hardwarekompatibel  zum   Spectrum    zu
gestalten.                                                      
 Wenn nicht anderes angegeben, gilt  das  Gleiche  wie  f}r  den
Spectrum (z.B. Screen, Kassetten-Datenformat etc.).             
                                                                
                                                                
3. Speichereinteilung                                           
=====================                                           
                                                                
Der Spectrum 128 enth{lt, in 16K-Bl|cken angeordnet, 32K ROM und
128K RAM.                                                       
 Die beiden ROM-Bl|cke (Page 0 und 1) sind in  den  unteren  16K
des Speichers (#0000 - #3FFF) abgelegt.                         
 Die acht RAM-Bl|cke (Page 0 bis 7) werden in die oberen 16K des
Speichers (#C000 - #FFFF) eingeblendet, wobei RAM-Page 5 auch im
Bereich #4000 - #7FFF und RAM-Page 2 im Bereich  #8000  -  #BFFF
abgelegt werden kann. So ist es m|glich, wenn  auch  nicht  sehr
                                                                
                                                                
                              - 2 -           Spectrum Guide 128
                                                                
                                                                
hilfreich, die gleichen RAM-Pages in zwei verschiedene Adressbe-
reiche des Z80 einzublenden.                                    
 Die  RAM-Pages  unterscheiden  sich  noch  hinsichtlich   ihrer
Verwendbarkeit als Screen (im Original 'video-contended'  d.].);
Page 4 - 7 sind  Screen-'f{hig'  und  Page  0  -  3  sind  nicht
Screen-'f{hig' ('video-uncontended' d.].).                      
                                                                
Der Spectrum 128 erlaubt aufgrund seiner Hardware die Arbeit mit
zwei verschiedenen Hauptscreens, Screen 0 und 1. Screen  0  wird
vom System benutzt, befindet sich in RAM-Page 5 und  stimmt  mit
dem normalen Spectrumscreen }berein. Die Systemsoftware ben|tigt
den zweiten Hauptscreen (Screen 1) nicht; dieser  ist  real  nur
f}r  Maschinencodeprogramme  verwendbar.  Der   zweite    Screen
befindet sich in RAM-Page 7 und  wird  bei  Einblendung  in  den
Adressbereich des Z80 ab Adresse #C000 abgelegt.                
                                                                
     Physischer Speicher                Z80-Speicher            
     ===================                ============            
RAM  page 7  screen 1 contended editor  Einblendung in Adresse  
                                                                
     page 6           contended         RAM-page 0-7 #C000-#FFFF
                                                                
     page 5  screen 0 contended         RAM-page 2   #8000-#BFFF
                                                                
     page 4           contended         RAM-page 5   #4000-#7FFF
                                                                
     page 3           uncontended       ROM-page 0-1 #0000-#3FFF
                                                                
     page 2           uncontended                               
                                                                
     page 1           uncontended                               
                                                                
     page 0           uncontended BASIC                         
                                                                
ROM  page 1  Spectrum                                           
                                                                
     page 0  Editor                                             
                                                                
                                                                
4. I/O-Einteilung                                               
=================                                               
                                                                
Von den I/O-Adressen des Spectrum sind A0-A4 f}r  die  Benutzung
durch Sinclair Research reserviert. Diese Adressen sind lowaktiv
und  werden  durch  ein  Selectsignal  dekodiert.  Nichtbenutzte
Adressen aus der Reihe A0-A4 liegen auf High:                   
                                                                
Zeile    Adresse        Funktion                                
=====    =======        ========                                
 A0       #FE           Tastatur, Kassette, Beeper und Border   
 A1       #FD           Spectrum 128-pages, Screenauswahl, Sound
                        und I/O                                 
 A2       #FB           ZX-Printer                              
A3/A4    #F7/#EF        Interface I                             
                                                                
                                                                
                                                                
                                                                
                              - 3 -           Spectrum Guide 128
                                                                
                                                                
Folgende Adressen gelten speziell f}r den Spectrum 128:         
                                                                
          #7FFD         D2-D0  RAM-page select                  
                        D3     Screen select                    
                        D4     ROM-select                       
                        D5     Umschaltung auf Spectrum         
                                                                
          #BFFD         Sound chip - Datenregister einschreiben 
                                     (1);(data-register write)  
          #FFFD         Sound chip - Daten lesen (1);           
                                     (data read)                
                                   - Adresse schreiben          
                                     0000XXXX, wobei XXXX die   
                                     Registerauswahl #0-#F dar- 
(1)= Registerabh{ngig                stellt (adress write)      
                                                                
Die 16-bit I/O-Adressen k|nnen  vom  Z80  durch  Verwendung  des
Befehls  OUT  N,(C)  angesprochen  werden,  wobei  der  Wert  im
Register N zur 16-bit I/O-Adresse des Registers BC gesandt wird.
                                                                
                                                                
5. Steckverbinder                                               
=================                                               
                                                                
Es gibt drei Buchsen am Spectrum 128,  die  die  Zusatzinformat-
ionen f}r die Benutzung  extern  anschlie~barer  Ger{te  bereit-
stellen.                                                        
                                                                
1) RGB-Buchse                                                   
                                                                
Dies ist ein 8-poliger DIN-Stecker (DIN 45326). Dargestellt  ist
die Ansicht auf die R}ckseite des Computers.                    
                         Pin    Signal          Pegel           
      .. ..              1      Composite PAL   75 Ohm, 1.2V p-p
    .   -   .            2      Masse                           
   . 7     6 .           3      Bright          TTL             
  (  3  8  1  )          4      Composite sync  TTL             
   . 5  2  4 .           5      Vertical sync   TTL             
    .   -   .            6      Gr}n            TTL             
      .. ..              7      Rot             TTL             
                         8      Blau            TTL             
                                                                
2) Serielle/MIDI-Schnittstelle                                  
                                                                
Dies ist eine BT-Buchse; dargestellt ist der Blick auf die linke
Seite des Computers.                                            
                  Pin    Name   Funktion                        
                  1      GND    0 Volt Bezugspot. u. MIDI-Return
   ____________   2      TXD    Input, Daten zum Computer       
 _!            !  3      RXD    Output, Daten vom Computer      
!_ 6 5 4 3 2 1 !  4      DTR    Input, Quitt.sign. zum Computer 
  !____________!  5      CTS    Output, Quitt.sign. vom Computer
                                und MIDI-Out                    
                  6      +12 V  Spannung                        
Die Kontakte 2-5 arbeiten alle mit  5V-Pegeln.  Die  Signalnamen
scheinen ihrer Funktion zu widersprechen; das ist aber so,  weil
der Spectrum 128 mehr DTE- als DCE-aktiv ist.                   
                                                                
                              - 4 -           Spectrum Guide 128
                                                                
                                                                
3) Expansionsport                                               
                                 ____                           
Oberseite                        IORQ       -12V                
                              ____!     ____  !                 
                              MREQ!     WAIT  !                 
                            ____! !       !   ! ____            
           D0               HALT! !   -5V !12V! RFSH            
       !    !              ___! ! !  __ ! ! ! !   !     !       
  A13  !    !  D2  D5  D4  NMI! ! !  WR ! ! ! !   !  A10!       
   !   !    !   !   !   !___! ! ! !__ ! ! ! ! !__ !   ! !       
A15!D7 !SLOT!D1 !D6 !D3 !INT! ! ! !RD ! ! ! ! !M1 !A8 ! !       
 ! ! ! !    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !       
 ! ! ! !    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !       
-----------------------------------------------------------     
 ! ! ! !    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !       
 ! ! ! !    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !       
A14!5V !SLOT!0V !A0 !A2 ! !0V !   !   ! !A7 !A5 ! ! !A9 !       
   !   !    !   !   !   ! !   !   !_____!   !   ! ! !   !       
  A12 9V   0V  CK  A1  A3 !        BUSRQ!  A6  A4 ! !  A11      
                          !             !         ! !           
                        ______       _____     _____!           
                        IORQGE       RESET     ROMCS!           
                                                    !           
                                                 ______         
Unterseite                                       BUSACK         
                                                                
                                                                
6. Soundchip                                                    
============                                                    
                                                                
Der Soundgenerator im Spectrum  128  ist  der  IC  AY3-8912  von
General Instruments. Dieser  IC  besitzt  drei  Soundkan{le  und
einen 8-bit I/O-Port, der zur  Steuerung  des  RS-232/MIDI-Ports
und des Keypad benutzt wird.                                    
 Der Soundchip enth{lt 16 Register, die angesprochen werden, in-
dem zuerst }ber das adress-write-Port die Nummer  des  Registers
ausgegeben wird und anschlie~end }ber das  data-write-Port  bzw.
data-read-Port die Daten eingeschrieben bzw. ausgelesen  werden.
In ein einmal ausgew{hltes Register k|nnen solange Daten  einge-
schrieben  bzw.  ausgelesen  werden,  bis  ein  neues   Register
ausgew{hlt wird.                                                
 Der Grundtakt f}r den Soundchip betr{gt 1.7734(476)MHz.        
 Die Register haben folgende Eigenschaften:                     
                                                                
              R0 - Feineinstellung Kanal A                      
              R1 - Grobeinstellung  - " -                       
              R2 - Feineinstellung Kanal B                      
              R3 - Grobeinstellung  - " -                       
              R4 - Feineinstellung Kanal C                      
              R5 - Grobeinstellung  - " -                       
                                                                
Der resultierende Ton ist ein  12-bit-Wert,  der  sich  aus  der
Summe von R1, D0-D3 und R0, D0-D7 zusammensetzt. Die }brigen Bit
von R1 (D4-D7) sind unbenutzt. Um die Grundfrequenz f}r die Ton-
und Gr{uschregister zu erhalten,  wird  der  Grundtakt  f}r  den
Soundgenerator durch 16 geteilt. Mit einem 12-bit Z{hler  k|nnen
somit Frequenzen im Bereich von 27  Hz  bis  100  kHz  generiert
werden.                                                         
                              - 5 -           Spectrum Guide 128
                                                                
                                                                
              R6 - Steuerung des Gr{uschgenerators, D4-D0       
                                                                
Die Periodendauer des Gr{usches ergibt sich aus der  Zeitspanne,
die ben|tigt wird, um den 5-bit Wert mit jeder  16-tel  Soundge-
neratortaktperiode auf 0 herunterzuz{hlen.                      
                                                                
              R7 - Mixer- und I/O-Steuerung                     
                                                                
Dieses Register steuert sowohl das  Mischen  der  Ger{usche  und
Klangwerte f}r jeden Kanal  als  auch  die  Richtung  des  8-bit
I/O-Ports. Die Bits dieses Registers sind alle lowaktiv:        
              D7 - nicht benutzt                                
              D6 - (1) Inputport, (0) Outputport, normalerweise 
                   sind im Outputmode die Bits 4-7 immer gesetzt
              D5 - Kanal C Ger{usch abschalten  -               
              D4 - Kanal B       - " -           !              
              D3 - Kanal A       - " -           !__bei gesetz- 
              D2 - Kanal C Ton abschalten        !  tem Bit     
              D1 - Kanal B     - " -             !              
              D0 - Kanal A     - " -            -               
                                                                
              R8 - Lautst{rke Kanal A                           
              R9 - Lautst{rke Kanal B                           
              RA - Lautst{rke Kanal C                           
                                                                
Diese drei Register steuern die Lautst{rke und ggf. die H}llkur-
venregister.                                                    
              D4 - wenn dieses Bit gesetzt ist, wird die Laut-  
                   st{rkesteuerung des Kanals vom H}llkurvenge- 
                   nerator (RD) }bernommen, ansonsten gilt die  
                   Lautst{rke entsprechend D0-D3                
           D0-D3 - Lautst{rke des Soundkanals                   
                                                                
              RB - Feineinstellung der Lautst{rkever{nderung    
              RC - Grobeinstellung der Lautst{rkever{nderung    
                                                                
Die 8-bit Werte in RB und RC werden zu einem  16-bit  Wert  sum-
miert und mit jedem 256-stel Soundgeneratortakt bis auf 0 herun-
tergez{hlt. Somit k|nnen H}llkurvenfrequenzen  zwischen  0.1  Hz
und 6 kHz gew{hlt werden.                                       
                                                                
              RD - H}llkurvengestaltung und -steuerung          
                                                                
Die niederwertigen vier Bit dieses Registers  steuern  verschie-
dene Funktionen  des  H}llkurvengenerators.  Sie  repr{sentieren
folgende Funktionen:                                            
                                                                
              D3 - Abfallzeit des Tons                          
              D2 - Anstiegszeit des Tons                        
              D1 - Wechsel des Tons                             
              D0 - Halten des Tons                              
                                                                
                              - 6 -           Spectrum Guide 128
                                                                
                                                                
Grafisch stellen sich die Auswirkungen  auf  die  H}llkurvenform
wie folgt dar:                                                  
                                                                
D3 D2 D1 D0                                                     
              *                                                 
               *                                                
0  0  X  X      *                                               
                 *                                              
                  **********************************************
                                                                
                                                                
                  **                                            
                 * *                                            
0  1  X  X      *  *                                            
               *   *                                            
              *    *********************************************
                                                                
                                                                
              *    *    *    *    *    *    *    *    *    *    
               *   **   **   **   **   **   **   **   **   **   
1  0  0  0      *  * *  * *  * *  * *  * *  * *  * *  * *  * *  
                 * *  * *  * *  * *  * *  * *  * *  * *  * *  * 
                  **   **   **   **   **   **   **   **   **   *
                                                                
                                                                
              *                                                 
               *                                                
1  0  0  1      *                                               
                 *                                              
                  **********************************************
                                                                
                                                                
              *        **        **        **        **        *
               *      *  *      *  *      *  *      *  *      * 
1  0  1  0      *    *    *    *    *    *    *    *    *    *  
                 *  *      *  *      *  *      *  *      *  *   
                  **        **        **        **        **    
                                                                
                                                                
              *    *********************************************
               *   *                                            
1  0  1  1      *  *                                            
                 * *                                            
                  **                                            
                                                                
                                                                
                  **    **    **    **    **    **    **    **  
                 * *   * *   * *   * *   * *   * *   * *   * *  
1  1  0  0      *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  
               *   * *   * *   * *   * *   * *   * *   * *   * *
              *    **    **    **    **    **    **    **    ** 
                                                                
                                                                
                  **********************************************
                 *                                              
1  1  0  1      *                                               
               *                                                
              *                                                 
                              - 7 -           Spectrum Guide 128
                                                                
                                                                
                  **        **        **        **        **    
                 *  *      *  *      *  *      *  *      *  *   
1  1  1  0      *    *    *    *    *    *    *    *    *    *  
               *      *  *      *  *      *  *      *  *      * 
              *        **        **        **        **        *
                                                                
                                                                
                  **                                            
                 * *                                            
1  1  1  1      *  *                                            
               *   *                                            
              *    *********************************************
                                                                
                                                                
7. Keypad Layout                                                
================                                                
                                                                
Das Keypad ist mit folgenden Tasten belegt:                     
                                                                
         obere Reihe ----- Editorkommandos                      
      mittlere Reihe ----- games keys                           
        untere Reihe ----- numerische Tasten                    
                                                                
****************************************************************
*               *               *               *              *
*  Delete left  *               *  Delete right *    Toggle    *
*               *  (cursor up)  *               *              *
*       /       *       *       *       (       *       )      *
*               *               *               *              *
****************************************************************
*               *               *               *              *
*               *               *               *     Cmnd     *
* (cursor left) * (cursor down) * (cursor right)*              *
*       7       *       8       *       9       *       -      *
*               *               *               *              *
****************************************************************
*               *               *               *              *
* Del. wrd left * Del. wrd right*    page up    *   page down  *
*               *               *               *              *
*       4       *       5       *       6       *       +      *
*               *               *               *              *
****************************************************************
*               *               *               *              *
* Del. eol left * Del. eol right*  top of text  *              *
*               *               *               *              *
*       1       *       2       *       3       *     Enter    *
*               *               *               *              *
*************************************************    (fire)    *
*                               *               *              *
*             shift             * bottom of text*              *
*             (fire)            *               *              *
*               0               *       .       *              *
*                               *               *              *
****************************************************************
                                                                
                                                                
                                                                
                                                                
                              - 8 -           Spectrum Guide 128
                                                                
                                                                
Das Keypad wird mit dem Spectrum 128 }ber eine  spezielle  bidi-
rektionale Schnittstelle verbunden, die ein  Protokoll  f}r  den
Datenaustausch benutzt,  das  hier  infolge  seiner  Komplexit{t
nicht n{her beschrieben werden kann. Statt dessen soll hier  die
Routine KPSCAN zur Benutzung angegeben werden,  die  }ber  einen
ROM-Vektor im Editor-ROM ab Adresse #118 aufgerufen werden  kann
(siehe auch Abschnitt 9. ROM-Vektoren).                         
                                                                
                                                                
8. Softwareorganisation                                         
=======================                                         
                                                                
Der Editor-ROM enth{lt alle Routinen, die mit  dem  Programmedi-
tor, der Musiksteuerung (PLAY-Befehl), der RS-232 und  der  RAM-
Disk zusammenh{ngen. Der Spectrum-ROM enth{lt  den  BASIC-Inter-
preter und die Routinen f}r das Keypad.                         
 RAM-Block 7 beinhaltet den RAM-Speicher f}r den Editor und  die
Directory der RAM-Disk. RAM-Block 0 wird als BASIC-Programmspei-
cher genutzt.                                                   
 Im Normalfall startet der Spectrum 128 nach dem Einschalten  im
Editor-ROM und Editor-RAM. W{hrend der Eingabe eines  BASIC-Pro-
gramms wird die Bildschirminformation  in  den  Editor-RAM-Block
eingeschrieben; nach Abschlu~ oder Bearbeitung  einer  Programm-
zeile  im  Editor  wird  auf  den  Spectrum-ROM  und   BASIC-RAM
umgeschaltet, die Syntax der Programmzeile  gepr}ft  und,  falls
die Pr}fung keine Fehler offenbart, die Zeile  in  das  Programm
eingef}gt bzw. im Fall eines direkten Befehls sofort  abgearbei-
tet. W{hrend des Programmlaufes befindet sich  der  Computer  im
Spectrum-ROM und  BASIC-RAM;  nach  der  Abarbeitung  kehrt  der
Computer in den Editor-ROM und Editor-RAM zur}ck und blendet den
Screen-Editor ein, der dem Nutzer Programm{nderungen erlaubt.   
 Die Folge dieses Hin- und Herschaltens ist, da~ der  BASIC-Nut-
zer bei PEEK- und POKE-Operationen nur Zugriff zum  Spectrum-ROM
und BASIC-RAM hat.                                              
 Gro~e Aufmerksamkeit  ist  bei  Programmen  geboten,  in  denen
zwischen den ROM- oder RAM-Bl|cken umgeschaltet wird, da vor der
R}ckkehr ins BASIC das System in den Zustand unmittelbar vor der
Umschaltung zur}ckzuversetzen ist. Ein Programm, in dem zwischen
RAM-Bl|cken umgeschaltet wird mu~ sichern, da~ sein Stackbereich
nicht mit einem RAM-Block ausgeblendet wird.                    
 Die RAM-Disk stellt f}r den BASIC-Programmierer  eine  Erleich-
terung dar, da sie ihm das Ablegen von  Files  in  normalerweise
unbenutzten (au~er f}r Maschinenprogramme) RAM-Bl|cken  erlaubt.
Diese Einsprungstellen in die RAM-Disk  sind  vom  Maschinenpro-
grammierer nicht brauchbar, da durch die Einbeziehung spezieller
Maschinencoderoutinen  der  zus{tzliche  RAM-Bereich  wesentlich
|konomischer und schneller genutzt werden kann. Der Zugriff  auf
die RAM-Disk erfolgt vom BASIC aus durch  Nutzung  der  normalen
Systemkommandos  mit  einem  Ausrufezeichen  (!),  gefolgt   vom
Initialisierungsbefehl. Das einzig nicht  unterst}tzte  Kommando
ist VERIFY.                                                     
                                                                
         LOAD! "makpaint" CODE                                  
         SAVE! "demopic" SCREEN$                                
         MERGE! "basprog"                                       
                                                                
                                                                
                                                                
                              - 9 -           Spectrum Guide 128
                                                                
                                                                
9. ROM-Vektoren                                                 
===============                                                 
                                                                
Im Spectrum 128 gibt es eine Anzahl von n}tzlichen ROM-Vektoren,
die f}r die Nutzung durch Maschinencodeprogramme geeignet  sind.
Keine anderen Routinen im Editor-ROM  k|nnen  vom  Programmierer
genutzt werden, da der Inhalt  und  die  Organisation  des  ROMs
[nderungen unterworfen ist.                                     
                                                                
Routine       Adresse                  Funktion                 
                                                                
KPSCAN        #118           zur Nutzung des Spectrum 128 Keypad
MSHOOK        #11B           Musikstrings spielen               
MIDI_SEND     #11E           ein MIDI-Zeichen senden            
RSIN          #121           ein Zeichen }ber RS-232 empfangen  
OUT_T         #124           ein Token zur RS-232 senden        
OUT_T2        #127           ein Zeichen zur RS-232 senden      
SCRDMP        #12A           f}r EPSON-kompatiblen RS-232 Screen
                             dump                               
Diese Routinen zerst|ren alle nichtbenutzten Register!          
                                                                
 KPSCAN - Editor-ROM #118                                       
**************************                                      
- Aufruf dieser Routine bei Nutzung des Keypad                  
- bei Einsprung m}ssen alle Interrupts gesperrt sein            
- Austrittsbedingung aus KPSCAN wie folgt:                      
                                                                
         ROW01, ROW23 und ROW45 beinhalten den momentanen Be-   
         triebszustand des Keypad (speichern der zuletzt bet{-  
         tigten Taste d.].)                                     
                                                                
         Z-Flag nicht gesetzt: irgendetwas ist nicht o.k.       
                            -> kein pp-Ger{t (?) angeschlossen  
                            -> Keypad nicht angeschlossen       
                            -> mehr als eine Taste wurde bet{-  
                               tigt (au~er zusammen mit 0/Shift 
                                                                
         Z-Flag gesetzt      : alles ist o.k.                   
                            -> der Tastencode wird im Register E
                               }bergeben                        
                            -> wenn keine Taste gedr}ckt wurde, 
                               dann ist  < E > = 10000000       
                               ansonsten < E > = 0kkkkkkk       
                                                                
- alle anderen Tastencodes ergeben sich wie folgt:              
                                                                
    Legende   Reihe   Spalte       Taste       Taste und 0/Shift
                                                                
    0         1       1                        #6C (108)        
    .         1       3            #5B ( 91)   #6D (109)        
    ENTER     2       4            #5C ( 92)   #6E (110)        
    3         2       3            #5D ( 93)   #6F (111)        
    2         2       2            #5E ( 94)   #70 (112)        
    1         2       1            #5F ( 95)   #71 (113)        
    )         5       4            #60 ( 96)   #72 (114)        
    (         5       3            #61 ( 97)   #73 (115)        
    *         5       2            #62 ( 98)   #74 (116)        
                                                                
                             - 10 -           Spectrum Guide 128
                                                                
                                                                
    /         5       1            #63 ( 99)   #75 (117)        
    -         4       4            #64 (100)   #76 (118)        
    9         4       3            #65 (101)   #77 (119)        
    8         4       2            #66 (102)   #78 (120)        
    7         4       1            #67 (103)   #79 (121)        
    +         3       4            #68 (104)   #7A (122)        
    6         3       3            #69 (105)   #7B (123)        
    5         3       2            #6A (106)   #7C (124)        
    4         3       1            #6B (107)   #7D (125)        
                                                                
                                                                
           Spalte 1      Spalte 2     Spalte 3     Spalte 4     
         *****************************************************  
         *            *            *            *            *  
 Reihe 5 *  #63/ #75  *  #62/ #74  *  #61/ #73  *  #60/ #72  *  
         *            *            *            *            *  
         *****************************************************  
         *            *            *            *            *  
 Reihe 4 *  #67/ #79  *  #66/ #78  *  #65/ #77  *  #64/ #76  *  
         *            *            *            *            *  
         *****************************************************  
         *            *            *            *            *  
 Reihe 3 *  #6B/ #7D  *  #6A/ #7C  *  #69/ #7B  *  #68/ #7A  *  
         *            *            *            *            *  
         *****************************************************  
         *            *            *            *            *  
 Reihe 2 *  #5F/ #71  *  #5A/ #70  *  #5D/ #6F  *  #5C/ #6A  *  
         *            *            *            *            *  
         *****************************************************  
         *                         *            *            *  
 Reihe 1 *    #6C                  *  #5B/ #6D  *            *  
         *                         *            *            *  
         *****************************************************  
                                                                
                                                                
 MSHOOK - Editor-ROM #11B                                       
**************************                                      
Diese Einsprungadresse erm|glicht den Zugriff auf den Soundgene-
rator }ber  Maschinencoderoutinen.  Die  erforderlichen  Strings
sind wie f}r das BASIC-Kommando PLAY aufzubauen.  Die  erforder-
liche Datenstruktur ist unten dargestellt.                      
                                                                
Indexregister                                                   
                                                                
Die Musikroutinen im Editor-ROM ben|tigen  zwei  Kontrollbl|cke,
auf die man indirekt }ber die Register IX und IY zugreifen kann.
IY zeigt dabei auf den Kontrollblock, der die 'System'-informat-
ionen der augenblicklich interpretierten Strings enth{lt. Dieser
Block mu~ mindestens 60 Byte lang sein. Die Variablen in  diesem
Block sind:                                                     
                                                                
    CT_CHAN0       EQU  0              ; Wert von IX f}r Kanal 0
    CT_CHAN1       EQU  CT_CHAN0 + 2   ;        - " -          1
    CT_CHAN2       EQU  CT_CHAN1 + 2   ;        - " -          2
    CT_CHAN3       EQU  CT_CHAN2 + 2                            
    CT_CHAN4       EQU  CT_CHAN3 + 2                            
    CT_CHAN5       EQU  CT_CHAN4 + 2                            
                                                                
                             - 11 -           Spectrum Guide 128
                                                                
                                                                
    CT_CHAN6       EQU  CT_CHAN5 + 2                            
    CT_CHAN7       EQU  CT_CHAN6 + 2                            
    CT_FLAGS       EQU  CT_CHAN7 + 2   ;Flags: das Bit ist ge-  
                                       ;setzt, wenn der String  
                                       ;abgeschlossen ist       
    CT_Q0          EQU  CT_FLAGS + 1   ;Reihenzeiger f}r Kanal 0
    CT_Q1          EQU  CT_Q0    + 2   ;        - " -          1
    CT_Q2          EQU  CT_Q1    + 2   ;        - " -          2
    CT_Q3          EQU  CT_Q2    + 2                            
    CT_Q4          EQU  CT_Q3    + 2                            
    CT_Q5          EQU  CT_Q4    + 2                            
    CT_Q6          EQU  CT_Q5    + 2                            
    CT_Q7          EQU  CT_Q6    + 2                            
    CT_CHAN        EQU  CT_Q7    + 2   ;Zwischenspeicher f}r Ka-
                                       ;nalz{hler               
    CT_TEMP        EQU  CT_CHAN  + 1   ;Zwischenspeicher f}r    
                                       ;Flagkopien              
    CT_QTEMP       EQU  CT_TEMP  + 1   ;Zwischenspeicher f}r den
                                       ;Zeiger auf den Q-Zeiger 
    CT_EVENT       EQU  CT_QTEMP + 2   ;L{nge des momentanen Er-
                                       ;eignisses in T-Zyklen   
    CT_TEMPO       EQU  CT_EVENT + 2   ;Notiz der f}r einen T-  
                                       ;Zyklus notw. Schleifen  
                                       ;bei Dekrementierung von 
                                       ;BC                      
    CT_ENV         EQU  CT_TEMPO + 2   ;momentane H}llkurvenge- 
                                       ;stalt und -zyklus       
    CT_MIXT        EQU  CT_ENV   + 1   ;tempor{re Mixerschablone
    CT_CODE        EQU  CT_MIXT  + 1   ;RAM-Code f}r Geschwind.-
                                       ;einstellung             
                                                                
 IX zeigt auf einen Puffer f}r den gerade  bearbeiteten  String.
F}r 8 Strings werden 8 solcher Puffer ben|tigt, wobei eine hoch-
wertige Software den Wert von IX  st{ndig  umschaltet.  Beachten
Sie, da~ die Werte von IX am Anfang des  IY-Kontrollblockes  ge-
speichert sind. Ein IX-Puffer mu~ mindestens 55 Byte lang sein. 
 Die Puffervariablen sind:                                      
                                                                
    MV_CURR        EQU  0              ;augenblickl. MIDI-Note  
    MV_MIDI        EQU  MV_CURR  + 1   ;MIDI-Kanalnummer        
    MV_CHAN        EQU  MV_MIDI  + 1   ;Kanalnummer (0,1 oder 2)
    MV_OCTAVE      EQU  MV_CHAN  + 1   ;augenblickl. Oktave     
    MV_VOL         EQU  MV_OCTAVE+ 1   ;augenblickl. Lautst{rke 
    MV_NOTE        EQU  MV_VOL   + 1   ;augenblickl. Notencode  
    MV_ADD         EQU  MV_NOTE  + 1   ;Zeiger auf n{chsten CHR 
    MV_END         EQU  MV_ADD   + 2   ;Zeiger auf Ende des     
                                       ;Strings                 
    MV_REPEAT      EQU  MV_END   + 2   ;Zeiger auf letzte Wie-  
                                       ;derholung               
    MV_FLAG        EQU  MV_REPEAT+ 2   ;Flags f}r Mixing        
    MV_OPEN        EQU  MV_FLAG  + 1   ;Stack f}r ge|ffnete     
                                       ;Klammern (Byte + 5Worte)
    MV_CLOSE       EQU  MV_OPEN  + 11  ;Stack f}r abgeschlossene
                                       ;Klammern (Byte + 5Worte)
    MV_PEND        EQU  MV_CLOSE + 11  ;Notizen f}r Reihe       
    MV_QUEUE       EQU  MV_PEND  + 1   ;Beginn der Reihe        
                                       ;(20 Worte)              
                                                                
                             - 12 -           Spectrum Guide 128
                                                                
                                                                
Der Stringinterpreter                                           
                                                                
 Um die Stringinterpretation f}r den  Maschinenprogrammierer  zu
realisieren, wurde als Einsprungpunkt f}r den Maschinencode  die
globale Marke MUSIC_HOOK vorgesehen. Bei Einsprung mu~ das  auf-
rufende Maschinenprogramm einen Kontrollblock mit IY  und  einen
Musikpuffer  f}r  jeden  zu  interpretierenden  String  (max.  8
Strings) geschaffen haben.                                      
                                                                
 Der Kontrollblock mu~ folgende Parameter haben:                
                                                                
         (IY + CT_CHAN0): Wert von IX f}r 1. String             
         (IY + CT_CHAN1):      - " -      2.  - " -             
            usw., falls n|tig bis zu 8 Strings                  
         (IY + CT_FLAGS): Bit r}ckgesetzt -> String vorhanden   
                          Bit gesetzt -> String nicht vorhanden 
                                                                
 Bei Einsprung in die Routine ist eine Geschwindigkeit  von  120
Viertelnoten pro Minute voreingestellt.                         
 Jeder Musikpuffer mu~ folgende Parameter haben:                
                                                                
         (MV_MIDI)      #FF wenn kein MIDI-out gefordert wird,  
                        ansonsten die MIDI-Kanalnummer (0..15)  
         (MV_CHAN)      die Kanalnummer f}r diesen String,      
                        erster String ist Kanal 0 usw.          
         (MV_OCTAVE)    die eingestellte Oktave als Basis der 2 
                        Oktavreihen; ein Wert von 5 ergibt f}r C
                        den Code f}r das mittlere C             
         (MV_VOL)       die Lautst{rke f}r den Soundchip f}r    
                        diesen Kanal (0..15)                    
         (MV_NOTE)      eingestellter Notentyp (5=Viertelnote)  
         (MV_ADD)       16-bit Adresse des ersten Zeichens im   
                        String. Dieser Wert kann auch zu        
                        (MV_REPEAT) kopiert werden wenn eine    
                        Wiederholung gefordert wird, die am     
                        Anfang des Strings beginnt              
         (MV_END)       Zeiger auf das n{chste Byte nach dem    
                        Stringende                              
         (MV_OPEN)      mu~ 0 enthalten (Byte)                  
         (MV_OPEN+1)    mu~ die 16-bit Startadresse des Strings 
                        enthalten                               
         (MV_CLOSE)     mu~ #FF enthalten                       
                                                                
 Bei Einsprung in die Routine  m}ssen  die  Interrupts  gesperrt
sein. Die Routine  wird  mit  Abschlu~  aller  Strings  ein  RET
ausf}hren. Bei  Auftreten  von  Fehlern  wird  in  eine  interne
Fehlerbehandlungsroutine  gesprungen  und  die  Kontrolle   geht
verloren. Die Routine zerst|rt alle normalen Register.  IY  wird
als korrekter Zeiger wieder an  das  System  zur}ckgegeben.  Der
Schattenregistersatz bleibt unbenutzt.                          
                                                                
 MIDI_SEND - Editor-ROM #11E                                    
*****************************                                   
 Diese Routine gibt ein Byte zur RS-232-Schnittstelle  aus,  die
nun als MIDI-OUT Port arbeitet. Auf die MIDI-Ausgaberoutine kann
man }ber einen Aufruf der globalen Adresse MIDI_SEND  zugreifen.
                                                                
                                                                
                             - 13 -           Spectrum Guide 128
                                                                
                                                                
Das auszugebende Byte mu~ sich im Register A befinden  und  wird
sofort ausgegeben. Diese Routine zerst|rt die Register A, BC, DE
und L. Um korrekte Zeitabl{ufe zu sichern, m}ssen die Interrupts
gesperrt sein.                                                  
                                                                
 RSIN - Editor-ROM #121                                         
************************                                        
 RSIN ist eine RS-232 Routine zum Empfang von Zeichen.          
 Wenn ein Zeichen empfangen ist, wird das C-Flag gesetzt und das
Zeichen im Register A }bergeben,  anderenfalls  ist  das  C-Flag
r}ckgesetzt (d.h. wenn kein Zeichen empfangen wurde).           
 Die RSIN-Routine erwartet 8  Datenbits,  keine  Parit{t  und  1
Stopbit. Sie zerst|rt alle Register.                            
                                                                
 OUT_T - Editor-ROM #124                                        
*************************                                       
 RS-232 Routine zum Senden von Tokens. Die zu  sendenden  Tokens
sind im Register A zu }bergeben. Die Baudrate wird  eingestellt,
indem in die Systemvariable BAUD  ein  Wert  gepoked  wird,  der
einer Bitzeit in T-Zyklen dividiert durch 26 entspricht.        
 Vom BASIC aus kann dies mittels des Kommandos FORMAT "P", speed
eingestellt werden.                                             
 Die Routine sendet Daten im Format 8 Daten,  keine  Parit{t,  2
Stopbits und zerst|rt alle Register.                            
                                                                
 OUT_T2 - Editor-ROM #127                                       
**************************                                      
 RS-232 Routine zum Senden  von  Zeichen  (characters).  Die  zu
sendenden Zeichen sind im Register A zu }bergeben.  Die  Baudra-
teneinstellung, das Datenformat und die von der Routine zerst|r-
ten Register sind analog zu OUT_T.                              
                                                                
 SCRDMP - Editor-ROM #12A                                       
**************************                                      
 Ausgabe eines Screens auf einen EPSON-kompatiblen Drucker.  Die
Routine zerst|rt alle Register,  ben|tigt  keine  Parameter  und
gibt  den  augenblicklichen  Screen  bitweise  }ber  die  RS-232
Schnittstelle an einen EPSON-kompatiblen Drucker aus.           
 Die Einstellung der Baudrate erfolgt analog zu OUT_T.          
                                                                
                                                                
10. Musik und Sound                                             
===================                                             
                                                                
In diesem Abschnitt wird beschrieben, wie  das  Musiksystem  des
Spectrum 128 funktioniert, wie es aus dem BASIC  heraus  genutzt
werden kann und wie Sie damit experimentieren  k|nnen.  Die  f}r
Maschinenprogramme ben|tigten Strings sind  im  Format  mit  den
unten beschriebenen und f}r das BASIC-Kommando  PLAY  ben|tigten
Strings identisch.                                              
 Der Spectrum 128 kann auf  zwei  verschiedene  Arten  T|ne  und
Musikeffekte erzeugen. Beide geben die T|ne  entweder  }ber  den
Lautsprecher des Fernsehers oder }ber einen externen  Verst{rker
wieder. Der Spectrum 128 besitzt  keinen  eingebauten  Lautspre-
cher.                                                           
                                                                
                                                                
                                                                
                             - 14 -           Spectrum Guide 128
                                                                
                                                                
 Eine Methode benutzt den 'BEEP'-Befehl des Spectrum-BASIC.  Das
128 BASIC kennt aber  auch  einen  'PLAY'-Befehl,  mit  dem  die
Programmierung aufwendiger, bis zu 3-stimmiger Melodien  m|glich
ist. Diese Anweisung erlaubt eine umfassendere  Kontrolle  jeder
einzelnen Note, als dies mit dem BEEP-Befehl m|glich ist.       
 Die 'PLAY'-Anweisung kann auch zur Ansteuerung vieler Synthesi-
zer und verschiedener anderer  elektronischer  Musikinstrumente,
(wie z.B. Rhythmusmaschinen) durch den Spectrum  128  eingesetzt
werden. Der Spectrum 128 verwendet hierzu den MIDI-Standart, der
die Verbindung mit allen zu diesem  Standard  konformen  Ger{ten
zul{~t.                                                         
                                                                
Tonprogrammierung                                               
                                                                
Musik- und Toneffekte mit  dem  'PLAY'-Befehl  zu  erzeugen  ist
recht einfach.  Geben  Sie  dazu  einfach  die  Tonfolgen  einer
Melodie  ein  und  lassen  Sie  diese  dann  vom  Spectrum   128
abspielen. Es ist dabei m|glich, Anweisungen einzuschlie~en, die
dem Spectrum 128 mitteilen, welchen Klang bestimmte  T|ne  haben
sollen.                                                         
 Um eine Auswahl der verf}gbaren T|ne zu h|ren, k|nnen  Sie  die
beiden nachfolgenden Programme eingeben und mit  'RUN'  starten.
Lassen Sie sich nicht beirren, wenn die Programmeingabe  kompli-
ziert aussieht, sie wird sp{ter noch detailliert erkl{rt.       
                                                                
MUSIK                                                           
10 LET A$="T180O6(CDEC)(5EF7G)(3GAGF5EC)5Cg7C9CgC"              
20 LET B$="O4(CDEC)(5EF7G)(3GAGF5EC)5Eb7E9EbE"                  
30 LET C$="O3(7CG)(7CG)(7CG)5GD7G9GDG"                          
40 PLAY A$,B$,C$                                                
                                                                
TONEFFEKTE                                                      
10 LET A$="M8UX350W5O7(((C))):PLAY A$:PAUSE 25                  
20 LET A$="M56UX5000W1O3(((C))):PLAY A$:PAUSE 25                
30 LET A$="M56W2O1N8C":PLAY A$:PAUSE 25                         
                                                                
Die Verwendung des 'PLAY'-Befehls                               
                                                                
In den oben angef}hrten Beispielen sehen Sie, da~ jedesmal, wenn
der 'PLAY'-Befehl  verwendet  wird,  bis  zu  drei  verschiedene
Zeichenketten folgen, jede durch einen Buchstaben mit dem Zusatz
'$' gekennzeichnet; wie beispielsweise                          
                                                                
                          PLAY a$,b$,c$                         
                                                                
 Jedem dieser Buchstaben ist eine Zeichenkette, ein sog. String,
zugeordnet. Dieser String sagt dem Spectrum 128, welche  Tonfol-
gen gespielt werden sollen.                                     
 'PLAY' steuert drei verschiedene Tonkan{le an, die A, B  und  C
genannt werden und es sind bis zu drei  Zeichenketten  zul{ssig.
Im Beispielprogramm "MUSIK" weist die Zeichenfolge in  'A$'  dem
Kanal A eine Melodie zu,  'B$'  spielt  auf  dem  Kanal  B  eine
Harmoniefolge und 'C$' belegt Kanal C mit dem Ba~.  Im  Beispiel
mit den Toneffekten wird zu einem Zeitpunkt nur ein Ger{usch auf
einem Kanal erzeugt, obwohl auch hier drei gleichzeitig  m|glich
w{ren. Dies ist jeweils der Kanal A und der Befehl lautet  daher
nur 'PLAY A$'.                                                  
                                                                
                             - 15 -           Spectrum Guide 128
                                                                
                                                                
 Jeder der Kan{le kann also nach  Belieben  T|ne  oder  Gr{usche
produzieren, d.h. es ist m|glich, einer Melodie  Ger{uscheffekte
zu unterlegen (s.a. Kanalwahl).                                 
                                                                
Aufbau der Zeichenketten                                        
                                                                
Musik- und Toneffekte auf dem Spectrum 128 zu erzielen ist  also
nur eine Frage des Aufbaus  geeigneter  Zeichenketten,  die  die
entsprechenden Informationen enthalten. Jede  Zeichenkette  wird
mit dem Befehl  'LET'  aufgebaut,  gefolgt  von  dem  Namen  der
Zeichenkette. Der Inhalt wird  innerhalb  der  Anf}hrungszeichen
'""' geschrieben.                                               
 Hier ein Beispiel, das nur den Kammerton A spielt:             
                                                                
                       LET A$="a":PLAY A$                       
                                                                
Jedes Musikprogramm mit einer  'PLAY'-Anweisung  mu~  also  auch
'LET' zur Eingabe der Information verwenden, wie  die  vorherge-
henden Beispiele zeigen. Der Grund, weshalb die ersten Beispiele
komplizierter aussehen als das letzte Programm ist der, da~  die
dort in den Zeichenketten stehenden Buchstaben und  Zahlen  eine
l{ngere Melodie bzw. ein komplexeres Tongef}ge beschreiben.     
 Die Tonh|he und die Tondauer kennzeichnen einen einzelnen  Ton.
Hinzu kommen Angaben }ber die Lautst{rke und die Klangform.  Die
Zeichenketten in den ersten  Beispielen  beinhalten  alle  diese
Angaben. Hier eine Zusammenfassung aller  erlaubten  Anweisungen
mit ihren Auswirkungen auf die Tonerzeugung:                    
                                                                
Befehls}bersicht zum 'PLAY'-Befehl                              
----------------------------------                              
                                                                
Dies ist eine Zusammenstellung der Kontrollanweisungen,  die  in
einer Zeichenkette f}r den 'PLAY'-Befehl stehen d}rfen:         
                                                                
String-Eintrag     Funktion                                     
                                                                
c-b oder C-B       die Tonh|he innerhalb der spezifizierten     
                   Oktave                                       
$                  erniedrigt die nachfolgende Note             
#                  erh|ht die nachfolgende Note                 
O                  gefolgt von einer Zahl zwischen 1 und 8 gibt 
                   dies die Oktave an                           
1-13               bestimmt die Notenl{nge                      
&                  gibt eine Pause vor                          
N                  trennt zwei Zahlen                           
V                  gefolgt von einer Zahl zwischen 1 und 15     
                   bestimmt die Lautst{rke einer Note           
W                  gefolgt von einer Zahl zwischen 0 und 7      
                   bestimmt diese Angabe den Lautst{rkeverlauf  
                   einer Note                                   
U                  schaltet den Lautst{rkeverlauf in einer      
                   Zeichenkette ein                             
                                                                
                             - 16 -           Spectrum Guide 128
                                                                
                                                                
X                  wird von einer Zahl zwischen 0 und 65535     
                   gefolgt und bestimmt die Dauer eines Laut-   
                   st{rkeverlaufes                              
T                  gefolgt von einer Zahl zwischen 60 und 240   
                   bestimmt das Spieltempo                      
( )                schlie~t einen zu wiederholenden Musikteil   
                   ein                                          
! !                schlie~t einen Kommentar ein                 
H                  beendet eine 'PLAY'-Anweisung                
M                  gefolgt von einer Zahl zwischen 1 und 255    
                   w{hlt einen Kanal                            
Y                  gefolgt von einer Zahl zwischen 1 und 16     
                   spezifiziert einen MIDI-Kanal                
Z                  gefolgt von einer Zahl sendet diese Zahl als 
                   MIDI-Programmiercode                         
                                                                
Bestimmung der Tonh|he                                          
                                                                
Wie Sie bereits  gesehen  haben,  wird  die  Tonh|he  durch  den
Notennamen bestimmt, z.B. C, E oder G. Erh|hte  Halbt|ne  werden
mit einem vorangestellten # gekennzeichnet (z.B. #C), erniedrig-
te Halbt|ne mit einem '$'. Ihr "Musikcomputer" }berstreicht zwei
Oktaven in der Tonart C-Dur, wobei Kleinbuchstaben  die  untere,
Gro~buchstaben die obere Oktave ansprechen.                     
                                                                
 Eine beliebige Anzahl von Noten kann  innerhalb  dieser  beiden
Oktaven nacheinander gespielt werden, wie z.B.                  
                                                                
10 LET A$="cfedafgCFEDAFGCC"                                    
20 PLAY A$                                                      
                                                                
 Wenn dieser Tonumfang }berschritten werden soll, k|nnen Sie die
"Grundstimmung" Ihres Computers  mit  dem  Oktavenkommando  'O',
gefolgt von einer Zahl zwischen 0  und  8  umstellen.  Wenn  Sie
keine Zahl angeben, wird hierf}r automatisch der Wert 5  wie  im
obigen Beispiel angenommen (dieser Bereich beinhaltet das  mitt-
lere C). Der eingestellte Oktavenbereich bleibt  solange  erhal-
ten, bis er mittels einer 'O'-Anweisung wieder ge{ndert wird.   
 Das folgende Programm spielt dieselbe Tonfolge wie  das  vorige
Beispiel,  jedoch  eine  Oktave  h|her  (in  das   vorhergehende
Programm wird lediglich O7 eingef}gt):                          
                                                                
10 LET A$="O7cfedafgCFEDAFGCC"                                  
20 PLAY A$                                                      
                                                                
 Wenn Sie die zul{ssigen Werte f}r den Oktavenbereich nacheinan-
der durchprobieren, h|ren Sie den vollen Tonumfang, }ber den der
Spectrum 128 verf}gt. Dabei werden allerdings einige  der  tief-
sten Noten in der Oktave 0 und 1 nicht h|rbar  reproduziert,  es
sei denn }ber die MIDI-Ausgabe.                                 
 Da jeder Oktavenbereich zwei Oktaven  }berstreicht,  }berlappen
sich jeweils folgende Bereichsangaben um eine Oktave. Beispiels-
weise ist die obere Oktave  im  Bereich  O4  identisch  mit  der
                                                                
                                                                
                                                                
                                                                
                                                                
                             - 17 -           Spectrum Guide 128
                                                                
                                                                
unteren Oktave im Bereich O5.  Sie  sollten  wissen,  da~  jeder
Oktavenbereich durch  mehrfache  Verwendung  der  Erh|hung  bzw.
Erniedrigung der Tonh|he  (####)  bzw.  ($$$$)  etwas  erweitert
werden kann, indem damit einzelne T|ne beeinflu~t werden.       
                                                                
Tondauer                                                        
                                                                
Sofern Sie die Tondauer nicht anders vorgeben, werden alle  T|ne
mit derselben L{nge als Viertelnoten gespielt. Die Tondauer kann
jedoch durch einfaches Voranstellen einer Zahl zwischen 1 und 12
variiert werden. Dieses  Progamm  spielt  die  Noten  mit  einer
Dauer, die den Werten von 1 bis 9 entspricht:                   
                                                                
10 LET A$="1C2C3C4C5C6C7C8C9C"                                  
20 PLAY A$                                                      
                                                                
Dabei entspricht 1 der  k}rzesten,  9  der  l{ngsten  Note.  Die
Tondauer richtet sich nach der }blichen  musikalischen  Notation
gem{~ der Tabelle:                                              
                                                                
              Nummer    Bezeichnung                             
                                                                
              1         Sechzehntelnote                         
              2         punktierte Sechzehntelnote              
              3         Achtelnote                              
              4         punktierte Achtelnote                   
              5         Viertelnote                             
              6         punktierte Viertelnote                  
              7         Halbe Note                              
              8         punktierte Halbe Note                   
              9         Ganze Note                              
                                                                
Jede Eingabe des Notenwertes beeinflu~t alle  nachfolgenden  bis
zur n{chsten [nderung der Tondauer. Zahlenwerte von  10  bis  12
ergeben Triolen,  d.h.  drei  Noten  werden  in  derselben  Zeit
gespielt, die sonst nur die Wiedergabe von zwei Noten erlaubt.  
                                                                
              10        Sechzehntel-Triole                      
              11        Achtelnoten-Triole                      
              12        Viertelnoten-Triole                     
                                                                
Diese Angabe bezieht sich auf die drei nachfolgenden Noten,  die
mit dem Notennamen angegeben werden m}ssen, wie beispielsweise: 
                                                                
10 LET A$="11ACE"                                               
20 PLAY A$                                                      
                                                                
Eine Pause innerhalb einer Melodie wird durch  die  Eingabe  von
einem '&'                                                       
                                                                
10 LET A$="7A&B&C&D&E"                                          
                                                                
erzielt. Hier folgt auf jede ganze Note eine gleichlange  Pause.
Verbundene Noten sind erlaubt, wenn die Notendauer  durch  einen
Tiefstrich verbunden wird:                                      
                                                                
10 LET A$="3_5A"                                                
                                                                
                             - 18 -           Spectrum Guide 128
                                                                
                                                                
Nachfolgende T|ne besitzen dabei die Dauer, die durch die zweite
Angabe spezifiziert wird.                                       
                                                                
Das Trennzeichen "N"                                            
                                                                
In einigen der Beispiele finden Sie den  Buchstaben  N  zwischen
zwei Zahlen, wie beispielsweise                                 
                                                                
10 LET A$="O7N1CDE"                                             
                                                                
'N' wird in denjenigen F{llen verwendet, wo andernfalls  Zahlen-
angaben kollidieren w}rden. Im  obigen  Beispiel  w{hlt  O7  die
Oktave und 1 bestimmt die  Tondauer.  Ohne  das  'N'  w}rde  der
Spectrum 128 die Oktavenangabe als 71 interpretieren, was offen-
sichtlich nicht beabsichtigt wird.                              
                                                                
Lautst{rke                                                      
                                                                
Die Grundeinstellung der Lautst{rke wird durch  den  Lautst{rke-
regler am Fernseher oder  am  Verst{rker  vorgenommen.  Mit  dem
'V'-Befehl  kann  die  Lautst{rke  einzelner  T|ne   individuell
gesteuert werden. V mit einer nachfolgenden Zahl von  0  bis  15
bewirkt die Ausgabe der nachfolgenden T|ne mit einer  konstanten
Lautst{rke. Je kleiner die Zahl, desto leiser der Ton. 'V0' ent-
spricht dabei v|lliger Stille. 'V0' ist eine geeignete Anweisung
um einzelne  Kan{le  abzuschalten,  w{hrend  die  anderen  nicht
beeinflu~t  werden.  'V15'  ist  die  gr|~te   Lautst{rke    und
gleichzeitig  die  Voreinstellung  nach  dem  Einschalten.   Die
niedrigen Lautst{rkewerte sind sehr leise und Sie werden in  der
Regel mit Lautst{rkewerten zwischen 10 und 15 arbeiten,  solange
Sie nicht den MIDI-Anschlu~ oder ein Verst{rkersystem verwenden.
 Probieren Sie zu diesem  Thema  das  folgende  Programmbeispiel
aus:                                                            
                                                                
10 LET A$="V10cdefgabCDEFGAB"                                   
20 PLAY A$                                                      
                                                                
Sie werden den Unterschied der verschiedenen  Lautst{rken  fest-
stellen, wenn Sie den Wert hinter dem Buchstaben 'V' {ndern.    
                                                                
Klangeffekte                                                    
                                                                
Anstatt jeden Ton mit  einer  festen  Lautst{rke  wiederzugeben,
k|nnen Sie auch verschiedene Kurvenformen  f}r  den  Lautst{rke-
verlauf eines Tones w{hlen. So kann man  ihn  ausklingen  lassen
(wie ein Klavier) oder anschwellen  und  anschlie~end  abklingen
lassen (wie eine Dampflokomotive).                              
 Dieser Effekt wird durch ein vorangestelltes 'W' und einer Zahl
zwischen 0 und 7 eingeleitet und er kann in jede Tonzeichenkette
eingebaut werden. Zus{tzlich mu~ der  Buchstabe  'U'  eingegeben
werden, wenn  die  Toneffekte  zum  Tragen  kommen  sollen.  Die
Klangeffekte werden wirkungslos, wenn die Tonfolge bereits  eine
Lautst{rkeeinstellung mit der 'V'-Anweisung beinhaltet.         
 Die Anweisung 'W' wird von einer Zahl zwischen 0 und 7 gefolgt,
die folgende Auswirkung hat:                                    
                                                                
                                                                
                                                                
                             - 19 -           Spectrum Guide 128
                                                                
                                                                
Zahl               Wirkung                                      
                                                                
                   **                       abfallende Lautst{r-
                   * *                      ke auf 0            
0                  *  *                                         
                   *   *                                        
                   *    ******************                      
                                                                
                       **                   ansteigende Laut-   
                      * *                   st{rke, dann stumm  
1                    *  *                                       
                    *   *                                       
                   *    ******************                      
                                                                
                   *    ******************  abfallende Lautst{r-
                    *   *                   ke, dann gleichblei-
2                    *  *                   bend                
                      * *                                       
                       **                                       
                                                                
                       *******************  steigende Lautst{r- 
                      *                     ke, dann gleichblei-
3                    *                      bend                
                    *                                           
                   *                                            
                                                                
                   *    **    **    **      wiederholtes Abfal- 
                    *   * *   * *   * *     len der Lautst{rke  
4                    *  *  *  *  *  *  *                        
                      * *   * *   * *   *                       
                       **    **    **    *                      
                                                                
                       **    **    **    *  wiederholtes Anstei-
                      * *   * *   * *   *   gen der Lautst{rke  
5                    *  *  *  *  *  *  *                        
                    *   * *   * *   * *                         
                   *    **    **    **                          
                                                                
                       **        **         wiederholtes Anstei-
                      *  *      *  *        gen und Abfallen    
6                    *    *    *    *                           
                    *      *  *      *  *                       
                   *        **        **                        
                                                                
                   *        **        **    wiederholtes Abfal- 
                    *      *  *      *  *   len und Ansteigen   
7                    *    *    *    *                           
                      *  *      *  *                            
                       **        **                             
                                                                
Hier nun ein kurzes Programm, das die verschiedenen Klangeffekte
verdeutlichen soll:                                             
                                                                
10 LET A$="UX1000W0C&W1C&W2C&W3C&W4C&W5C&W6C&W7C"               
20 PLAY A$                                                      
                                                                
                                                                
                                                                
                             - 20 -           Spectrum Guide 128
                                                                
                                                                
Beachten Sie den Buchstaben 'U', der die Klangeffekte erst erm|-
glicht, sowie die nachfolgenden 'W'-Befehle.                    
 In dem Beispiel finden Sie noch eine weitere Anweisung mit  dem
Buchstaben 'X'. Darauf kann  eine  Zahl  zwischen  0  und  65535
folgen, die die Dauer des Klangeffektes bestimmt. Je gr|~er  die
Zahl, um so l{nger w{hrt der Effekt.                            
 Diese Angabe mu~ aber nicht in jedem Fall bei einer Klangvaria-
tion erfolgen. Wenn Sie nicht anders  festlegen,  verwendet  der
Spectrum automatisch die l{ngstm|gliche  Klangdauer.  Grunds{tz-
lich sind Klangeffekte, die sich  wiederholen  (Nummern  W4  bis
W7), mit k}rzerer Dauer  wirkungsvoller,  z.B.  X300.  Einmalige
Klangeffekte hingegen (W0 bis  W3)  kommen  bei  l{ngerer  Dauer
besser zur Geltung, also z.B. bei X1000. Versuchen Sie im  oben-
stehenden Beispiel mit verschiedenen Werten  nach  dem  'X'  die
unterschiedliche Wirkung festzustellen.                         
                                                                
Tempo                                                           
                                                                
Das Tempo, mit dem ein Musikst}ck gespielt wird,  kann  mit  der
Anweisung 'T' beeinflu~t werden. Die Zahl nach dem 'T' gibt  die
Anzahl der Viertelnoten pro Minute (Schl{ge pro Minute)  an  und
kann im Bereich  zwischen  60  und  240  liegen.  Dieser  Befehl
beeinflu~t  die  Geschwindigkeit  f}r  alle  Noten  im  gleichen
Verh{ltnis, kann aber nur in der Zeichenkette f}r  den  Kanal  A
festgelegt werden (dies ist der jeweils  erste  String  f}r  den
'PLAY'-Befehl), sonst wird er ignoriert. Hier ein Beispiel:     
                                                                
10 LET A$="T180cdefg"                                           
20 PLAY A$                                                      
                                                                
Wird kein Tempo gesondert angegeben, so verwendet  der  Spectrum
128 automatisch den Wert 120 Viertelnoten pro Minute.           
                                                                
Wiederholungen                                                  
                                                                
Jede Tonfolge kann wiederholt werden, wenn sie in Klammern  ein-
geschlossen wird:                                               
                                                                
10 LET A$="abC(DEFG)"                                           
                                                                
Mit der vorhergehenden Anweisung werden demzufolge  die  letzten
vier Noten wiederholt. Wird die |ffnende Klammer weggelassen, so
werden alle Noten bis zum Anfang wiederholt, also               
                                                                
10 LET A$="abCDEFG)"                                            
                                                                
wiederholt alle 7 Noten. Doppelt schlie~ende  Klammern  bewirken
ein unendlich langes Wiederholen, wie beispielsweise            
                                                                
10 LET A$="O2CEGA))"                                            
                                                                
                             - 21 -           Spectrum Guide 128
                                                                
                                                                
Diese Anweisung ist besonders f}r Anwendungen  wie  fortlaufende
Ba~g{nge interessant. Eine "unendliche"  Wiederholung  kann  mit
dem Befehl 'H' beendet werden.                                  
                                                                
Die 'H'-Anweisung                                               
                                                                
Das Kommando  'H'  in  einer  Zeichenkette  beendet  sofort  die
'PLAY'-Anweisung. Die h{ufigste Verwendung wird dabei sicherlich
in der Beendigung wiederholter Ba~g{nge bestehen. Sie k|nnen die
Wiederholung des Basses beenden, wenn Sie  in  der  Zeichenkette
f}r die Melodie ein 'H' eingeben.                               
                                                                
Kommentare                                                      
                                                                
Anmerkungen und Kommentare d}rfen in  eine  Zeichenkette  einge-
schlossen werden, wenn sie mit dem  '!'-Zeichen  am  Anfang  und
Ende versehen werden.  Alle  Eingaben  nach  dem  Ausrufezeichen
werden entweder bis zum n{chsten  Ausrufezeichen  oder  bis  zum
Ende der Zeichenkette }berlesen.                                
                                                                
10 LET A$="abCDEFG! Chorus !aCEaDG"                             
                                                                
ist dazu ein Beispiel.                                          
                                                                
Kanalwahl                                                       
                                                                
Die Anweisung 'M' wird verwendet, um festzulegen, welche  der  3
Tonkan{le verwendet werden und  ob  diese  T|ne  oder  Ger{usche
produzieren sollen.                                             
 Maximal  3  Kan{le  d}rfen  gleichzeitig  in  Betrieb  genommen
werden, wobei es allerdings gleichg}ltig  ist,  ob  alle  Kan{le
T|ne oder Ger{usche oder eine Kombination daraus erzeugen.      
 Die Einstellung wird durch eine Zahl nach dem 'M' bestimmt, die
sich in folgender Weise zusammensetzt:                          
                                                                
              TONKAN[LE           GER[USCHKAN[LE                
                                                                
             A    B    C          A      B     C                
Zahl         1    2    4          8     16    32                
                                                                
Kennzeichnen Sie in dieser Tabelle jeden Kanal, den Sie aktivie-
ren m|chten und notieren Sie sich die entsprechende  Kennziffer.
Addieren Sie dann die Werte, um den Steuercode f}r  die  'M'-An-
weisung zu erhalten. Sollen  also  beispielsweise  auf  allen  3
Kan{len T|ne erzeugt werden, so berechnet sich die Kennzahl zu: 
                                                                
1 + 2 + 4 = 7                                                   
                                                                
und der Befehl lautet dann 'M7'. Analog w}rde das Kommando 'M56'
den Gr{uschgenerator auf Kanal A, B und C aktivieren.           
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                             - 22 -           Spectrum Guide 128
                                                                
                                                                
 Jeder Kanal  kann  zur  Gr{uscherzeugung  herangezogen  werden,
wobei allerdings Kanal A den gr|~ten Freuenzbereich  zul{~t.  Um
zu den wirkungsvollsten Ergebnissen zu  kommen,  legen  Sie  die
Toneffekte also am besten in der Zeichenkette f}r  den  Kanal  A
fest - A$ ist in unseren Beispielen die erste Zeichenkette  nach
der 'PLAY'-Anweisung, die den Kanal A ansteuert.                
                                                                
Musikinstrument-Steuerung                                       
                                                                
Die 'PLAY'-Anweisung erm|glicht an der MIDI-Schnittstelle am RS-
232 Interface die Abnahme eines entsprechenden  Signales.  Diese
Ausgabe kann zur Ansteuerung eines beliebigen  Musikinstrumentes
nach dem MIDI-Standart herangezogen  werden.  Viele  Synthesizer
und Rhythmusmaschinen verf}gen }ber  eine  solche  Schnittstelle
und sie spielen dann die gleichen Tonfolgen,  die  Sie  f}r  den
Spectrum 128 programmiert haben.                                
 Allerdings  erm|glicht  der  MIDI-Anschlu~  das   gleichzeitige
Spielen von maximal 8 Noten anstatt der 3 Noten auf dem Spectrum
128. Der  einzige  Unterschied  in  der  Programmierung  besteht
darin, da~ auf  die  'PLAY'-Anweisung  bis  zu  8  Zeichenketten
folgen d}rfen, die alle analog der  vorhergehenden  Beschreibung
aufgebaut werden m}ssen.                                        
 Versuchen Sie bitte nicht, die MIDI-Schnittstelle anzusprechen,
solange Sie kein  entsprechendes  Musikinstrument  angeschlossen
haben. Um ein Ausgangssignal am MIDI-Port  zu  erhalten,  sollte
jede Zeichenkette den Buchstaben 'Y' am Anfang erhalten, gefolgt
von einer Kanaltrennung von 1 bis 16. Wenn Sie in allen Zeichen-
ketten dieselbe Zahl verwenden, k|nnen auf einem Instrument  bis
zu 8 verschiedene T|ne gleichzeitig gespielt  werden.  Wenn  Sie
verschiedene Kanaltrennungen verwenden,  k|nnen  Sie  bis  zu  8
Instrumente gleichzeitig ansteuern. Wenn Sie hier auf die Angabe
einer Kanaltrennung verzichten, verwendet der Spectrum 128 auto-
matisch die Kennziffer 1, d.h. den Kanal Nr. 1.                 
 MIDI-konforme  Musikinstrumente  w{hlen  nach  dem  Einschalten
automatisch die Betriebsart "OMNI", so da~ sie die Informationen
von Kanal 1 genauso }bernehmen wie von dem Kanal,  auf  den  sie
programmiert  wurden.  Um  Noten  getrennt  nach   verschiedenen
Kan{len zu spielen, mu~ ein MIDI-Musikinstrument auf  den  Modus
"POLY" eingestellt werden. Das  ist  m|glich,  indem  direkt  am
Instrument  der  MIDI-Kanal  eingestellt  wird  oder  indem  die
entsprechende MIDI-Programmierung in einer Zeichenkette eingege-
ben wird. Die dementsprechenden Kontrollcodes f}r Ihr Instrument
sollten in dessen Handbuch aufgelistet stehen.  Sie  k|nnen  vom
Spectrum 128 }bertragen werden, wenn  der  Kontrollcode  in  der
Zeichenkette nach dem Buchstaben 'Z' folgt.                     
 Verf}gt Ihr MIDI-Instrument }ber eine Tastendynamik,  d.h.  das
Steuerprogramm beeinflu~t auch das  Anschlagverhalten,  so  wird
dies durch das 'V'-Kommando mitgesteuert. Dabei wird  der  Laut-
st{rkewert auf den 8-fachen Wert der 'V'-Anweisung gesetzt, d.h.
es sind die Einstellungen 0, 8, 16, ..., 120 m|glich.  Die  Ein-
stellung der  Tastaturr}ckstellung  erfolgt  auf  den  Wert  64.
Sollte ein Synthesizer oder ein anderes MIDI-Ger{t keine Tasten-
dynamik aufweisen, so wird alles mit gleichbleibender Lautst{rke
gespielt.                                                       
                                                                
                                                                
                                                                
                                                                
                             - 23 -           Spectrum Guide 128
                                                                
                                                                
11. Unterschiede zwischen der spanischen und der englischen     
    Version des Spectrum 128                                    
===========================================================     
                                                                
Der Spectrum 128 arbeitet in zwei verschiedenen Modi, der  erste
und nach  dem  Einschalten  automatisch  angesprungene  ist  der
128-er Modus, der zweite ist der 48-er Modus. Der einzige Unter-
schied im 48k Modus zum Spectrum  48k  besteht  darin,  da~  der
bislang ungenutzte Platz im Spectrum-ROM jetzt von  der  Keypad-
Routine belegt wird. Im 128-er Modus ist der Buffer f}r den  ZX-
Printer von zus{tzlichen Systemvariablen  belegt,  so  das  Pro-
gramme, die  diesen  Bereich  belegen,  im  128-er  Modus  nicht
laufen. In der spanischen Ausf}hrung des Spectrum  128  ist  das
Z80-Taktsignal nicht auf den Steckverbinder  ausgef}hrt.  Ebenso
fehlen auf dem Steckverbinder die Signale VIDEO, NOT-Y, V und U,
da diese Signale }ber die RGB-Buchse gef}hrt sind.              
 Eine m|gliche Ursache f}r Kompatibilit{tsprobleme mit  periphe-
ren Ger{ten liegt im Startmodus des Systems (mit Editor-ROM  und
BASIC-RAM). So kann es bei intelligenten peripheren Ger{ten  mit
eigenem ROM  zum  Absturz  kommen,  da  diese  Ger{te  nach  dem
Einschalten den Spectrum-ROM  erwarten  und  ihn  irgendwie  f}r
Daten ben|tigen oder nach einer Initialisierungsroutine  in  den
Spectrum-ROM gesprungen werden soll. Nat}rlich gibt es keinerlei
Datenverbindung zwischen dem Editor-ROM und dem Spectrum-ROM, so
da~ solche Versuche meist mit einem Systemabsturz enden.        
 Der Spectrum-ROM im Spectrum 128 hat eine gro~e [hnlichkeit mit
dem Standart-ROM im Spectrum 48k. Der  Hauptunterschied  besteht
darin, da~ ein Teil des ungenutzten Speichers am Ende  des  ROM-
Bereiches (zuvor mit #FF aufgef}llt) nun mit den Keypad-Routinen
belegt ist. Es wurde gro~e Sorgfalt darauf gelegt, die Speicher-
zellen, die zuvor f}r IM2 genutzt werden konnten, unver{ndert zu
lassen, um sie weiterhin f}r Interrupts nutzen zu k|nnen.       
 In allen Spectrumversionen gibt  es  eine  enge  Wechselwirkung
zwischen dem Interruptvektor oder I-Register und  dem  Videocon-
troller. Im Detail sieht das so aus, da~ w{hrend des Speicherre-
freshs der  Inhalt  des  I-Registers  auf  die  h|herwertigen  8
Adressleitungen  ausgegeben  wird.  Wenn  die  daraus  gebildete
Adresse auf den VIDEO-RAM zeigt, verwechselt der Videocontroller
den Speicherrefresh mit einem Speicherzugriff.  Das  Endresultat
ist ein Ger{usch, verbunden  mit  einem  Screen-  oder/und  RAM-
Absturz.                                                        
 Wenn  Sie  selbst  Spectrum-Programme  schreiben,  sollten  Sie
beachten, da~ die Werte f}r das I-Register zwischen #40 und  #7F
diesen oben beschriebenen Effekt verursachen.  Im  128-er  Modus
verursachen die Werte zwischen #C0 und #FF den gleichen  Effekt,
wenn sich die RAM-Bl|cke 4-7 (Video) im  Speicherbereich  #C000-
#FFFF befinden.                                                 
 Einfach ausgedr}ckt, Programmierer, die den  Z80-IM2  benutzen,
sollten den Interruptvektor nur in  den  Speicherbereich  #8000-
#BFFF zeigen lassen. Anderenfalls  riskieren  Sie  unauffindbare
Programmfehler und Screenabst}rze.                              
 Weiterhin gibt es eine Reihe von geringf}gigen  physischen  und
elektrischen Verbesserungen zwischen den Entwicklungsger{ten und
der in Gro~britannien produzierten Version.                     
 Das Z80-Taktsignal ist zum Steckverbinder ausgef}hrt.          
                                                                
                                                                
                                                                
                             - 24 -           Spectrum Guide 128
                                                                
                                                                
 Softwareentwickler, die die spanische Version des Spectrum  128
benutzen, werden aus Erfahrung die Schwierigkeiten mit dem guten
Sound und der  Bildqualit{t  bei  TV-Ger{ten  in  Gro~britannien
kennen. Die Ursache daf}r ist, da~ der Tontr{ger  f}r  spanische
TV-Ger{te auf  eine  andere  Frequenz  moduliert  ist,  als  f}r
englische TV-Ger{te.                                            
 Die Belegung der RGB-Buchse wurde ge{ndert; hinzu kam ein  PAL-
colour-composite Signal und V-SYNC; das monochrom-composite-Sig-
nal wurde weggelassen.                                          
                                                                
Systemvariable im Spectrum 128-Mode                             
                                                                
Dieses sind die neuen Systemvariablen im 128-er Modus, die  sich
im Printerbuffer befinden. Die wichtigsten Systemvariablen  sind
BAUD,  die  Ihnen  erlaubt,  die  ]bertragungsrate  der  RS-232-
Schnittstelle festzulegen, sowie ROW01, ROW23 und ROW45, die den
Zugriff auf das Keypad erlauben.                                
                                                                
Variable      Adresse   Funktion                                
                                                                
SWAP          #5B00     ROM-Umschaltroutinen                    
YOUNGER       #5B14                                             
ONERR         #5B1D                                             
PIN           #5B2F                                             
POUT          #5B34                                             
POUT2         #5B4A                                             
TARGET        #5B58     Adresse der Unterprogramme im alten ROM 
RETADDR       #5B5A     Returnadresse im neuen ROM              
BANKM         #5B5C     Kopie des letzten auf die RAM-Bank aus- 
                        zugebenden Bytes                        
RAMRST        #5B5D     (? hier war das Original unleserlich ?) 
RAMERR        #5B5E     Errornummer oder alter ROM              
BAUD          #5B5F     Bitperiode in T-Zust{nden / 26          
SERFL         #5B61     Second-character-received-flag und Daten
COL           #5B63     momentane Spalte von 1 bis WIDTH        
WIDTH         #5B64     Paper-Spaltenweite                      
TVPARS        #5B65     Zahl der Parameter, die von der RS-232  
                        erwartet werden                         
FLAGS3        #5B66          Bit 0 ... Calculator/Editmode      
                             Bit 1 ... BASIC-Zeile ge{ndert     
                             Bit 2 ... RAM-Disk-File f}r        
                                       Schreiboperationen       
                             Bit 3 ... RAM-Disk/Kassetten SLVM  
                             Bit 4 ... Load                     
                             Bit 5 ... Save                     
                             Bit 6 ... Merge                    
                             Bit 7 ... Verify                   
N_STR1        #5B67     SLVM-Name                               
                                                                
SLVM Headerbl|cke                                               
                                                                
HD_00         #5B71     Typencode                               
HD_0B         #5B72     L{nge des Blockes                       
HD_0D         #5B74     Start des Blockes                       
HD_0F         #5B76     Programml{nge                           
                                                                
                                                                
                                                                
                             - 25 -           Spectrum Guide 128
                                                                
                                                                
HD_11         #5B78     Zeilennummer                            
SC_00         #5B7A     zweiter Satz f}r LOAD, VERIFY, MERGE    
SC_0B         #5B7B                                             
SC_0D         #5B7D                                             
SC_0F         #5B7F                                             
XLOC          #5B71     Screen dump variable                    
YLOC          #5B72     (Doppelnutzung von Variablen)           
OLDSP         #5B81     alter SP, wenn TSTACK benutzt wird      
SFNEXT        #5B83     Zeiger auf den letzten (leeren) Eintrag 
                        in der Directory                        
SFSPACE       #5B85     Zahl der }brigen Bytes (17 Bit)         
                                                                
Die folgenden Systemvariablen werden benutzt, wenn KPSCAN aufge-
rufen wird.                                                     
                                                                
ROW01         #5B88     pdmm1111 - angesprochen, Ger{t, Mikro,  
                                   Reihe 1                      
ROW23         #5B89     22223333 - Reihe 2, Reihe 3             
ROW45         #5B8A     44445555 - Reihe 4, Reihe 5             
SYNRET        #5B8B     Returnadresse f}r ONERR                 
LASTV         #5B8D     letzter Wert, der vom Kalkulator        
                        gedruckt wurde                          
RC_LINE       #5B92                                             
RC_START      #5B94     Wert der neuen Startzeile (Wort)        
RC_STEP       #5B96     Schrittweite zwischen den Zeilen (Wort) 
TSTACK        #5BFF     Zeitweiliger Stack, der w{hrend der     
                        Speicherumschaltung benutzt wird        
                                                                
                                                                
          SPECTRUM 128 UND 128 +2 / APPLIKATION APPS 5          
                                                                
      Nutzung moderner Druckerausf}hrungen }ber die RS-232      
     ******************************************************     
                                                                
Als die BASIC-Version fertig  war,  gab  es  keine  M|glichkeit,
Zeichen wie ESC oder SI }ber die RS-232  zum  Drucker  zu  }ber-
tragen, da die Schnittstelle nur  Standartzeichen  des  Spectrum
ausgeben kann. Es gibt jedoch zwei  POKE's  die  benutzt  werden
k|nnen, um beliebige Zeichen  zum  Drucker  zu  }bertragen.  Das
folgende kleine BASIC-Programm demonstriert das:                
                                                                
  10 REM als erstes die Adresse der                             
  20 REM Routine 'Drucke ein 'Token' ermitteln                  
  30 LET ADD=(PEEK 23349)+256*(PEEK 23350)                      
  40 REM die Routine 'Drucke ein beliebiges Zeichen (char)'     
  50 REM befindet sich auf einer 217 Byte h|heren Adresse       
  60 LET NEWADD=ADD+217                                         
  70 REM jetzt die neue Adresse aktivieren                      
  80 LET X=NEWADD:GO SUB 1000:STOP                              
  90 REM um wieder Tokens zu drucken                            
 100 LET X=ADD:GO SUB 1000:STOP                                 
1000 REM die Adresse von X in 23349/23350 poken                 
1010 POKE 23349,X-(256*INT (X/256))                             
1020 POKE 23350,INT (X/256)                                     
1030 RETURN                                                     
                                                                
                             - 26 -           Spectrum Guide 128
                                                                
                                                                
Sie k|nnen nat}rlich das Wesentliche dieses  kleinen  Programmes
in Ihre eigenen Programme }bernehmen. Die beiden POKE's  beenden
auch LLIST korrekt, so da~ Sie vor einem LLIST alles  wieder  in
den Originalzustand zur}ckversetzen sollten. Die Zeilen  90  und
100 im obigen Programm veranlassen dies.                        
 Das Programm ist so konzipiert, da~ es sowohl auf dem  Spectrum
128 als auch auf dem Spectrum 128 +2 l{uft. Diese  haben  unter-
schiedliche Adressen f}r die  Druckroutinen.  Sie  k|nnen  diese
Adressen an Ihrem Ger{t durch den Befehl PRINT ADD,NEWADD (nach-
dem das obige Programm gelaufen ist) herausfinden und in Zukunft
diese so ermittelten Adressen benutzen.                         
                                                                
                                                                
Rupert Goodwins, Amstrad Technical                      20/01/87
