@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED561 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 170ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u8<<  B JKIHiDiELV`L8 8 BLV`LxT}8t8l Lu8hihiHHȱȱL8c !#3`Lu8JJJJ`H 8h`HU}ȩh Q8L8 Z8L8 8L8 8L8 8L8S:@9E:E9H '9 H9I9 8 '9h)0ICV}9D9L8 L :::: :Lr:::IEL[::i:iIIL[:`:i::iX}::L:`L{:w:w: C`L:L: D8:MEM.SAV: 8| 9 '9`L:L: D:DUP.SYS:̩ 8Y} x:ɀL: '9`88 |9Y:X: '9L); D8:DUP.SYS; 8::88 9 '98? :`;WL`; 9Z}Ln; ` :Y;Y;L;L;)} Setting Up ATARI 130XE Ram Disk; 9L; ; -9  [} L;D8:; :9 :Y;L( | |H( | |R..(y}& | Mit diesem Programm koennen |\..(& | Texte auf dem Bildschirm mit |f..(& | 40 Zeichen und auf dem Drucz}- |p..(& | ker mit 80 Zeichen ausgegeben |z..(& | werden (mit Heftrand!). |..(& | Die Texte werd{}en automatisch |..(& | formatiert. |( | |( | |( | |} |( | |( | |..(& | Druecke fuer weiter |00(' }}KA @'A@f9A@fKAY@4- F:B2y,@A@~}#'- A0 #A$-A6A6%@2."  86-?:A6,B$Lll104,169,17,141,40,2,}169,6,141,41,2,169,30,141,26,2,96,173,243,2,41,2,73,2,141,243,2,169,30,141,26,2,96j%%6-F:A`,%AV$F:Aa,~226}.( A.B.B.U.C. .V. XEP-80 TEXT -@@@!!%Ah@:7<,,&@2 @f}+%@@3+%@@$%%6-F:A`,%AV$F:Aa,226.( = WEITER = NEU}START -@@@!!%Ah@:7<,,&@2 %@(@f+%@)@3+%@0}@ %@1@e+%@2@2+%@3AV$(("@((@ }2$ D:START.BASAV$(("@((@ 2$"@((@ Y *** Vorwort ***Die Texte XEP80.T1 bis *.T3 sind eine moeglichst genaue Uebersetzung des englischsprachigen} Originals. Es konnten allerdings manche Unklarheiten nicht vermieden werden, zumal sich ein grosser Teil des gaengigen Compu}ter-Englisch einfach nicht in verstaendliche deutsche Umgangssprache uebersetzen laesst. Wir - ABBUC - gehen davon aus, dass }diese Anleitung sowieso nur fuer einen "Fachmann" (Assembler- bzw. MC-Programmierer) sinnvoll ist. Der englischsprachige "Sou}rce-Code" ist auf der XEP-80 Originaldiskette zu finden.Um eine bessere Uebersichtlichkeit der im Text enthaltenen Tabellen} zu erreichen, wird empfohlen, den Drucker auf den US-Zeichensatz zu stellen. Wenn gar nichts mehr weiterhilft - was ich mi}r bei einem o.a. "Fachmann" nicht vorstellen kann - hier meine Adresse: Alfons Kluepfel Rhoenblick 2 } 8741 Hohenroth Tel.: 09771/2769Viel Glueck! ns Kluepfel Rhoenblick 2 V PRODUKTBESCHREIBUNG FUER XEP80 80-Zeichen und Parallel-Drucker-BoardUebersetzt durch Alfons Kluepfel, ABBUC;Fach}liche Beratung: Wolfgang Burger, ABBUC; 01/26/87 XEP80 Festprogramm - Rev}. 41.1 6502 XE Handler - Rev. 70.0Inhalt:1.0 Allgemeine Beschreibung2.0 Das Interface (Hardware)3.0 Da}s Interface (Software)4.0 Das Kommunikations-InterfaceAnhang A AnwendungsanmerkungenAnhang B Das Relocater FormatAnhang} C Inhalt der System-Diskette 1.0 Allgemeine Beschreibung1.1 Packungsinhalt Die XEP80-Paket enthaelt folgend}e Teile: 1. Bedienungsanleitung 2. Video-Adapter-Kabel RCA-Typ 3. XEP80 System-Diskette 4. Garantie-Karte} 5. Die XEP80 6. Netzteil (wie fuer die 2600-Spiel-Konsole) 7. Schachtel fuer das Netzteil 8. Geschenk-Ve}rpackung1.2 Technische Angaben Dauerlast des XEP80 400mA Stromversorgung 500mA 9V Gleichstrom Masse: Hoehe 4}0mm, Laenge 240mm Breite 142mm Video-Ausgang - NTSC Composit Monochrom Video Display: Text - 80 Zeichen in 25 Zeile}n Graphik - 320 Punkte in 200 Zeilen Parallel-Port: Pin-Belegung - 8 Data-Bits, Strobe, busy, Masse} Anschluss - DSub5 weiblich1.3 Allgemeine Information Die XEP80 ist ein Video-Output-Geraet, das ausserdem einen 8}-Bit-Parallel-Anschluss unterstuetzt. Die Video-Hardware erzeugt einen 80 Zeichen - in 25 Zeilen - Text-Bildschirm, indem man} per Videokabel einen separaten Monitor anschliesst. Als Monitor kann jeder beliebige vom Composite-Video-Typ benutzt werden,} um optimale Ergebnisse zu erzielen, ist jedoch unbedingt ein Monochrome-Monitor zu empfehlen. Intern bietet die XEP80 P}latz fuer 256 Zeichen (in der Breite) in 25 Zeilen. Sie zeigt ein 80-Zeichen-Display-Fenster. Die Zeichen koennen im Geraet b}eliebig gesetzt werden, unabhaengig von der Position des Fensters. Das Fenster kann ueber die ganze 256-Zeichen-Breite "gescr}ollt" werden. Auf Wunsch kann die XEP80 in einen Punkt-Graphik-Modus geschaltet werden. Dieser unterstuetzt eine Graphic}-Matrix von 320 Punkten (40 bytes) waagrecht zu 200 Punkten senkrecht. Das Fenster ist dann etwa halb so gross wie das Textfe}nster. Der Datenaustausch zum und von der XEP80 laeuft ueber ein Joystick-Kabel auf der Rueckseite des Geraets. Man kann} dieses in einen der beiden Joystick-Ports an jedem ATARI-8-Bit-Computer stecken. Auf dem Weg ueber dieses Kabel erhaelt die }XEP80 ihre Befehle und Daten vom Computer und sendet sie dann an den Bildschirm oder den Drucker. Ueber den 8-Bit-Parall}el-Port koennen Epson-, Centronics- und gleichartige Drucker an die XEP80 angeschlossen werden, was also bedeutet, dass der A}TARI-Computer diese Drucker nun ansprechen kann. Der Parallel-Anschluss ist ein Weibchen vom Typ SubD25 (siehe Grafik). }Ein Audioanschluss kann (weiterhin) per Video-Kabel vom ATARI-DIN-Anschluss an einen passenden Audio-Eingang (etwa den des Mo}nitors) gelegt werden. Das braucht man fuer alle SOUND-Befehle und das "Tastenpiepsen". Die Software ist auf einer DOS-D}iskette als Binaer-File mit Namen AUTORUN.SYS bereitgestellt. Dieses File wird automatisch in den Rechenspeicher geladen und }vom DOS beim Booten initialisiert.Anmerkung: Die "*"-Zeichen, die in diesem Dokument verwendet werden, stehen fuer 1 oder 0}. Im Falle eines 8-Bit-Wertes, wird bei dieser Angabe "0 0 * * * * * * " jeder Wert von 00 bis $3F als gueltig akzeptiert.2}.0 Das Interface (Hardware)Zwei Leitungen des Joystick-Ports werden fuer das Interface benutzt: eine PIA-Leitung fuer den In}put von der XEP80 und eine PIA-Leitung fuer den Output zur XEP80. Ausserdem benutzen beide, XEP80 und Computer, diesselbe Mas}seleitung. Jeder der beiden Joystickports kann mit der hier vorgesehenen Software benutzt werden. JOYSTICK 1 } JOYSTICK 2 ______________________ ______________________ \ 1 2 3 4 5 / \ 10 11 } 12 13 14 / \ / \ / \ 6 7 8 9 / \ 15 16 17 18 /} \______________/ \______________/ PIN FUNCTION 1 Data to XEP80 2 } Data from XEP80 3-7 Not Used 8 Common Ground 9 Not Used 10 Dat}a to XEP80 11 Data from XEP80 12-16 Not Used 17 Common Ground 18 Not Use}d FEMALE (XEP80) PARALLEL PRINTER PORT PIN CONFIGURATION: _________________ ________________________ \ 1}3 12 11 10 9 8 7 6 5 4 3 2 1 / \ 25 24 23 22 21 20 19 18 17 16 15 14 / \________________ ___________}________/ PIN FUNCTION 1 Strobe 2-9 Parallel Data 10 Not Used } 11 Busy 12-17 Not Used 18-25 Ground 2-9 Parallel Data 10 Not Used D3.0 Software Interface3.1 Allgemeine Beschreibung Das Software-Interface fuer die XEP80 am 8-Bit-Computer ist ein Han}dler auf einer Boot-Disk. Dieser ersetzt die Handler E:, S:, und P: in der Handler-Adressen-Tabelle ($13A). Man laedt de}n Handler wie folgt: Legen Sie eine DOS-Disk, auf der sich das Handler-Programm befindet, in Drive 1. Nachdem sie den Compute}r eingeschaltet haben, bootet er die Disk. Das DOS erkennt automatisch das AUTORUN.SYS auf der Diskette und laedt es ebenfall}s. Die XEP80-Handler ist daher als AUTORUN.SYS-File abgespeichert. Er wird ab Adresse $3000 ins RAM geschrieben und belegt do}rt etwa 1.5K (aufwaerts). Das File besteht aus einem Relocater Teil und dem danach folgenden XEP80-Handler. Nachdem das }File geladen ist, schaltet das DOS den Initialisierungs-Code des Handlers ein. Dieser Code ist der Relocater selbst, der eine} Variable benutzt - genannt MEMTOP ($2E5,2E6)) - , um die letzte Adresse eines User-Programms (also keines System-Programms w}ie DOS) zu finden. MEMTOP wird daraufhin durch den Relocater zurueckgerechnet, bis es auf eine Adresse ca. 1.5K unterhalb ihr}es ersten Wertes zeigt. Dies bewirkt, dass fuer den Handler Platz geschaffen wird, um ihn an jene Adressen zu bringen (wo er }arbeiten soll). Dieser Adressen-Platz, an den der Handler geladen werden soll, liegt gerade unter dem Bildschirm (Screen)-RAM} und dem Adress-Platz der Display-List. Waehrend der Relocater den Handler an seinen passenden Platz bringt, loest er al}le absoluten Verweise im Handler-Code. Auf diese Weise wird der Handler-Code von der Disk gleich in das noetige Relocater-For}mat umgewandelt (siehe Anhang B). Anschliessend setzt der Relocater den DOSINI-Vektor ($0C) so, dass er auf den Initiierungs-}Code des Handlers zeigt, und setzt gleichzeitig eine Adresse im Handler so, dass diese auf den alten DOSINI-Code zeigt. Nun s}pringt er zum Initiierungs-Code des Handlers.Die Handler-INIT-Sequence befaehigt das PIA-Register mit die XEP80 zu kommunizi}eren (Daten auzutauschen usw.), modifiziert die Handler-Adress-Tabelle (HATABS $31A), legt die neuen Randmarken des Bildschir}ms fest und stellt darueber hinaus fest, ob es sich bei dem gesamten System um ein NTSC (60 Hz = USA!!)- oder um ein PAL-Syst}em (50 Hz) handelt. An diesem Punkt angelangt, prueft der INIT-Code die Position der SHIFT-Taste. Ist sie gedrueckt, belaesst} der Code den Bildschirm im "Normal"-Zustand und schaltet den Handler ab. Andernfalls schaltet er den ANTIC-Chip vom Display }weg, so dass die XEP80-I/O beginnen kann. Der Handler schaltet nun zurueck zum DOS, dieses zum OS, welches dann entschei}det, wie es weitergehen soll (z.B. mit dem eingebauten BASIC oder einer anderen Cartridge), und dann zu diesem Code springt. }Solange das benutzte Programm auf dem ueblichen OS-CIO-Weg I/O-Aufrufe zum Bildschirm oder zum Drucker sendet, faengt die XEP}80-Handler die Daten ab und gibt sie weiter an das ans XEP80 angeschlossene Geraet (Screen/Drucker). 3.2 Funktions-Besc}hreibung3.2.1 Bildschirm-Operationen Der Handler kontrolliert und steuert die folgenden Adressen zur XEP80 und bringt s}ie auf den noetigen Stand (update), falls die XEP80 etwas veraendert . $055 Cursor x Position COLCRS (low byte}) $056 Cursor x Position (high) zur Ueberpruefung des Bereichs $054 Cursor y Position ROWCRS } Folgende Adressen werden ebenfalls kontrolliert und zur XEP80 gesteuert: Default Op}tional Voreinstellung Moegliche Einstellung$2FE List Flag DSPFLG ........... $00 (OFF) $01} (ON)$2F0 Cursor On/Off Flag CRSINH .. $00 (ON) $01 (OFF)$052 Cursor Left Margin LMARGN .. $00 (XEP80) $XX(ANY)$0}53 Cursor Right Margin RMARGN . $4F (XEP80) $XX (ANY)$2F4 Character Base CHBAS ....... $E0 (ATASCII) $CC (ICM) Fo}lgende Adressen werden durch den Handler kontrolliert und ausgefuehrt , um Bildschirm-Editor-Operationen zu emulieren.$2FF } Start/Stop Sreen Output FlagY Reg EOF Status (CNTL 3 Tastenanschlag) und Break-Taste Logische Textzeilen auf dem Bil}dschirm koennen u.U. laenger als eine natuerliche Zeile sein (man sieht also nur die Zeile auf dem Bildschirm). Die Laenge je}der natuerlichen Zeileinnerhalb einer logischen Zeile ist durch den linken und rechten Zeilenrand begrenzt. Innerhalb einer l}ogischen Zeile koennen bis zu 24 natuerliche Zeilen eingeschlossen sein Tabulator-Marken koennen gesetzt werden bei:2, }7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95, 103, 111, 119, 127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223}, 231, 239, 247, 255.Dies sind die voreingestellten Marken. Sie koennen durch die SET und CLEAR TAB Characters veraendert w}erden. Die Tabulatorwerte passen nur fuer natuerliche Zeilen, so dass eine logische Zeile, die aus zwei oder mehr natuerliche}n Zeilen besteht, die Tabulator-Stops jeweils an derselben Stelle in jeder natuerlichen Zeile hat. Der 40-Zeichen Bildsc}hirm des ANTIC-Bausteins kann wieder eingeschaltet werden, falls der Benutzer Farb-Grafiken, einen 40-Zeichen-Text wuenscht o}der keinen 80-Zeichen-Monitor besitzt. Der "Parallel"(angeschlossene)-Drucker kann auch in diesem Modus weiter angesprochen w}erden. Graphics kann (ausserdem) durch einen speziellen OPEN-Befehl an das Geraet "S:" (Screen=Bildschirm) eingeschaltet} werden. In diesem Modus bietet der Schirm 320 Punkte (40 bytes) (waagrecht) in 200 Zeilen (=senkrecht). Der Cursor steht dan}n in der linken oberen Ecke des Schirms. Jedes an die XEP80 gesendete Zeichen wird in der eingegebenen Reihenfolge abgebildet}; alle 8 Bits entsprechen den aufeinanderfolgenden Punkten entlang einer Sichtlinie. Das MSB wird zuerst abgebildet, das LSB }zuletzt. Die Statuszeile hat auf der Y-Achse des Cursors den Wert 24 (senkrecht, 25. Zeile). Diese Zeile kann fuer Ein-} oder Ausgaben benutzt werden, Control-Zeichen werden in jedem Fall nur in dieser Zeile, nicht aber in den oberen 24 Zeilen a}usgegeben. Eine Control-Eingabe ist erlaubt: SHIFT DELETE. Die Statuszeile scrollt nicht. Es ist darauf zu achten, dass der C}ursor nicht versehentlich per POSITION- oder POKE-Befehl in die Statuszeile gesetzt wird, solange im BASIC gearbeitet wird; d}as kann zu einem RESET fuehren; denn der Cursor kann dort haengen bleiben.3.2.1.1. Der Handler fuer den Bildschirm "E:" } Folgende Funktionen werden von dem (supplied) Handler unterstuetzt und emulieren den 8-bit-Bildschirm-Handler (editor):OPEN} Legt den Edit Handler auf I0CB #n fest und gibt den Bildschirm frei. Falls AUX1 auf $2C liegt, w}ird der Schirm nicht freigegeben.CLOSE Loest den Handler von I0CB #n.GET CHAR Textzeile bis EOL (Eingabe in BASIC) D}er besondere Read-Modus (liest eine Bildschirmzeile ohne Tasteneingabe) wird auch unterstuetzt, } wenn AUX1 benutzt wird I0CB nach $0d zu rufen.PUT CHAR Bringt ein Zeichen auf den Bildschirm oder erfuellt }Editier-Funktionen (PRINT oder PUT in BASIC). Siehe unten.GET STATUS Geht zum voreingestellten "on line" Status} zurueck.SPECIAL Sendet Befehle an den XEP80 und bekommt von dort Status-Angaben (XIO im BASIC). Da}s AUX1-byte muss $0C sein, AUX2 dient als Sende-Code, CMD liegt darunter. (vergl. Original-T}ext)Put-Character-WerteATASCII Funktion $1B Escape - Print next char even if a control char $1C Cursor} Up $1D Cursor Down $1E Cursor Left $1F Cursor Right $7D Clear Screen $7E Backspace $7F } Tab $9B Atari EOL (CR/LF) $9C Delete Line $9D Insert Line $9E Clear Tab $9F Set Tab }$FD Sound Bell - Not Available (See item 6 below) $FE Delete Character $FF Insert CharacterEinzelhe}iten: 1) PUT CHAR rueckt den Cursor weiter. 2) GET CHAR rueckt den Cursor weiter. 3) Am logischen Ende einer Z}eile wird eine neue Zeile eingefuegt. 4) Wenn kein EOL gegeben wird, ueberschreibt put vorhandene Zeiche}n. 5) Die XEP80-Handler "E:" kann abgeschaltet werden, indem man beim Einschalten des Computers oder wae}hrend eines Resets die SHIFT-Taste drueckt. 6) Die "Schreibmaschinen-Klingel" (Bell Sound) ist durch den} Handler abgeschaltet, um den Zeichen-Output an die XEP80 zu beschleunigen. Eine Anwendung (ein Progr}amm) kann stattdessen den SOUND-Befehl (oder die entsprechenden Assembler-Werte) benutzen, um irgendwelche To}ene, Musik usw. zu erzeugen.Spezial-Befehle an "E:"CMD AUX1 AUX2 Funktion$14 $0C CMD sende Befehle ($00-BF,D0-DF) an} XEP80 (s.4.3.2)$15 $0C 00 Normaler Zeichen-Uebermittlungs- Modus$15 $0C 01 Burst Zeichen-Uebermittl}ungs-Modus$16 $0C CMD sende Input-Befehl ($C1-C6) an XEP80 (s. 4.3.4) Die Antwort wird in A}dresse $2EB gespeichert$18 $0C 00 40-Zeichen abschalten, XEP80 Schirm einschalten und freigeben.$18 $2C } 00 40-Zeichen abschalten, 80-Zeichen ein, Schirm nicht freimachen.$19 $0C 00 XEP80-Schirm abschalten,} 40-Zeichen-Schirm einschalten.3.2.1.2 Bildschirm-Handler "S:"OPEN Legt den Bildschirm-Handler auf} I0CB #n (Graphics s.u.!)CLOSE (Gegenteil)GET CHAR Zeichen setzen und Cursor vorruecken (i}n BASIC = LOCATE)PUT CHAR Zeichen auf den Schirm schreiben - keine EditierfunktionGET STATUS Zurueck zum "}on line" Status (s.engl.O.)SPECIAL Kein EffektEinzelheiten:1) PUT CHAR rueckt den Cursor weiter und setzt evtl. Zeile}n ein.2) GET CHAR rueckt nur den Cursor weiter.3) GET CHAR ueber einer Leerstelle fuehrt zurueck zu } $20 (SPACE). (s.engl.O.!)4) PUT EOL ($9B) fuehrt den Cursor auf den linken Rand der naechsten Zeile.5) GRAPHIC}S 8+16 schaltet den Graphics-Modus auf der XEP80 ein. Falls I0CB #n geoeffnet ist, kann dies mit AUX1}=$1C und AUX2=08 geschehen.6) Im Graphics-Modus befindet sich der Cursor in der linken oberen Ecke des Graphic-F}ensters. Jedes an den XEP80 gesendete Byte wird auf dem Bild- schirm als eine Serie von 8 Punkten (MS}B bis LSB) entsprechend dem binaeren Wert der Bytes oder dem ATASCII-Wert der Zeichen. Der Cursor  } bewegt sich anschliessend um 8 Punkte nach rechts, um anzuzeigen, wohin das naechste Byte p }laziert wird. Sobald der Cursor den rechten Rand des Fensters erreicht, bewegt er sich eine Zeile tie }fer an den linken Rand.7) Ein nun ausgefuehrtes PUT CHAR sendet ESC gefolgt vom Zeichen. Dies ergibt } jeweils 2 Byte im Graphics-Modus. Deshalb benutzt man PUT CHAR mit "E:", wenn man Graphic-Daten uebe }rmitteln will.8) Der Graphic-Modus-Befehl schaltet automatisch den Burst- Modus ein.9) Der Handler unterstuetzt} Standard-ANTIC-Graphic- Kommandos, solange man im 40-Zeichen-Modus ar- beitet, vorausgesetzt im RAM }steht genug Platz zur Verfuegung. Fuer die uebliche Speicher- groesse bedeutet das ausschliesslich } GRAPHICS 1,2,3,4.3.2.2 Drucker Operationen Die XEP80 gibt durch einen internen 2K-Puffer auch einzelne Zeich}en an den Drucker-Anschluss. Daten, die durch den Handler an den Drucker ausgegeben werden, koennen in jeweils einer von drei} Moeglichkeiten "bearbeitet" sein: No Translation=Keine Uebersetzung - Alle 8-bit-Daten-Informationen gehen unbeeinflus}st an den Drucker. Light Translation=Geringe Uebersetzung - Das ATASCII EOL (#9B) wird vom Drucker-Handlerin CR- und LF-}Zeichen uebersetzt, bevor es an den Drucker weitergegeben wird. Das ist der voreingestellte Drucker-Modus. Optional (auf Wuns}ch) kann auch lediglich der CR-Befehl anstelle von EOL gesendet werden. Heavy Translation=Schwerwiegende Ue. - bedeutet }Light Transl. plus Uebersetzung der ASCII-Zeichen unter $20, die zu einem "(Hochzeichen, s.engl.O.! - mit diesem Schreibprogr}amm nicht darstellbar)"-Zeichen (fuer CONTROL) umgewandelt werden, gefolgt von dem entsprechenden Zeichan. Erst dann werden s}ie an den Drucker geschickt. MSB wird auf 0 gesetzt. Der Drucker-Output kann an die XEP80 gerichtet werden (parallel) od}er an einen seriellen Port oder an beides. Die Geraetenummern (z.B. P2:) kann je nach Bedarf beibehalten oder geaendert werde}n. Siehe unten.Befehle an "P:"OPEN Legt den Drucker-Handler auf I0CB #n und gibt die STATUS-Anfrage auf }"Drucker". AUX1 muss 08 sein (nur schreiben).CLOSE (Gegenteil)GET CHAR (nicht unterstuetzt)PUT CHAR Se}ndet ein Zeichen an den Drucker-PortGET STATUS Holt die Status-Angabe von der Drucker-BUSY- Leitung: 1=frei, 139=}busy oder AUS (off line).SPECIAL Drucker anpassen (configurieren) und Uebertragungs-Modus auswaehlen (siehe un}ten) Diesen Befehl benutzen bevor man den OPEN-Befehl schickt.Spezial-Configurations-Befehle an P: B}efehls-Byte=$17Belegung der Configurations-Bytes fuer AUX1 +-+-+-+-+-+-+-+-+ |7|6|5|4|3|2|1|0| Bit position }s +-+-+-+-+-+-+-+-+ 0 0 0 0 0 * * 0 P1: - Parallel Port 0 0 0 0 0 * * 1 P1: - Serial Port as P1:!} 0 0 0 0 0 0 0 * P2: - Serial Port as P2: 0 0 0 0 0 0 1 * P2: - Serial Port as P1: 0 0 0 0 0 1 0"} * Reserved 0 0 0 0 0 1 1 * P2: - Parallel Port 0 0 0 0 1 * * * Reserved 0 0 0 1 * * * * #} " 0 0 1 * * * * * " 0 1 * * * * * * " 1 * * * * * * * " Dasselbe fuer AUX2 0 0$} 0 0 0 0 0 0 Light translation - EOL to CR/LF 0 0 0 0 0 0 0 1 No translation 0 0 0 0 0 0 1 0 Heavy %}translation - EOL to CR/LF 0 0 0 0 0 0 1 1 Reserved 0 0 0 0 0 1 0 0 Light translation - EOL to CR &} 0 0 0 0 0 1 0 1 No translation 0 0 0 0 0 1 1 0 Heavy translation - EOL to CR 0 0 0 0 0 1 1 1 Rese'}rved 0 0 0 0 1 * * * " 0 0 0 1 * * * * " 0 0 1 * * * * * " 0 1 * * * * * * " (} 1 * * * * * * * " Anmerkung: P3 bis P15 sind nicht verwendbar; sie werden vom Handler nicht angesprochen, dies )}ist nur ueber den seriellen Bus moeglich. P3 bis P15 sind nicht verwendbar; sie werden vom Handler nicht angesprochen, dies *4.0 Das Kommunikations Interface4.1 Grundsaetzliches Die Kommunikation mit der XEP80 funktioniert, indem man fortlaufen!+}de Daten ueber Bit 0 oder 4 (JOY-stick-0, JOY1) sendet und ebensolche ueber Bit 1 oder 5 (JOY0,JOY1) vom PIA A I/O-Register e!,}mpfaengt. Die Daten werden bei 15.7 KB verschoben. Uebertragene und empfangene Daten enthalten 9 Bit Information. Die Daten w!-}erden folgendermassen weitergegeben: ein Start-Bit - Wert Null, gefolgt von den Bits D0 bis D7, gefolgt als naechstes von ein!.}em Kontroll-Bit - es soll anzeigen, ob es sich um eine Daten-(0) oder eine Befehlsinformation (1) handelt, diese Sequenz wir!/}d durch ein Stop-Bit im Wert 1 abgeschlossen. Dabei sorgt der eingesetzte Handler fuer die fortlaufende Verschiebung von Date!0}n am Computer-Ende (Speicherende). Jede Anwendung die weder den Handler benutzt noch die XEP80 mit einer unterschiedlichen B!1}AUD-Rate anspricht, muss einen Code dafuer vorsehen. Dabei muss man sich darueber im klaren sein, dass dieser Code in der Ope!2}ration zeitkritisch ist. So muessen also alle 6502/ANTIC - Zyklen waehrend des Datentransports miteingerechnet werden. E!3}in alternativer Sende/Empfangs-Modus, der "burst-Modus", erlaubt einen schnelleren Transport. Die XEP80-Daten-Leitung zum Com!4}puter (Empfang) steht auf high (1), wenn Zeichen gesendet werden koennen, steht auf low (0), wenn die EXP80 arbeitet. In dies!5}em Fall wird keine Cursor-Information ausgegeben (kommt keine C.-Inf. zurueck). Dieser Modus funktioniert nur, wenn man Zeich!6}en an den Bildschirm sendet (einschliesslich) der Control-Zeichen) und, wenn man Zeichen an den Drucker sendet (der einzige M!7}odus fuer den Drucker). Der Burst-Modus ist nicht geeignet fuer Befehle irgendwelcher Art. Fuer jeden programmspezifisch!8}en Handler, der den Burst-Modus benutzt, muss klar sein, wie er von diesem Punkt aus die Kommunikation handhaben (handle) ka!9}nn. Waehrend man auf den Cursor oder ein Zeichen wartet (im Non-Burst-Modus), muss man die Data-in-Leitung unmittelbar n!:}ach dem Transport eines Bytes kontrollieren. Im Burst-Modus darf man hoechstens 90 Millisekunden warten, bis man die Dat!;}a-in-Leitung auf 0 (busy) oder 1 (ready) ueberprueft. Vermeiden Sie unter allen Umstaenden jeden 6502-Interrupt waehrend!<} der Uebermittlung bzw. des Empfangs von fortlaufenden Daten, da dies das BAUD-Raten-Timing veraendert. Interrupts sind !=}moeglich, waehrend man darauf wartet, dass die EXP80 im Burst-Modus auf READY geht. Auf diese Weise werden andere interrupt-g!>}esteuerte Prozesse z.B. ein Modem-Handler keine Zeichen verlieren.4.2 Kommunikations-Protokoll Zeichen, die an die XE!?}P80 gesendet werden, bewirken die Ausgabe eines 1 oder 2 Byte Cursors - siehe 4.3.1 und 4.3.6 Befehle werden in drei Gru!@}ppen unterteilt:1) Stand Alone Befehle - keine Antwort erwartet - s. 4.3.22) GET CHARACTER - Zeichen und Cursor werden aus!A}gegeben - s.4.3.33) GET DATA Befehle - Datenbytes werden nur zurueck- empfangen - s!B}.4.3.4Die Cursor-Werte, die von der XEP80 zurueckgegeben werden, sind durch folgende Logik definiert:1) Wird nur der Y-Cur!C}sor (y-Achse) veraendert, wird nur Y zurueckgegeben2) dto. X3) Werden beide (X und Y) veraendert, werden beide zuruec!D}kgegeben (X zuerst)4) Wird keiner der beiden veraendert, wird nur X zurueckgegeben.Computer XEP801 CMD--> !E} Stand alone Befehl2 CMD--> Get Data Befehl <--CHAR Wert zurueck (Return value)3 CMD--> !F} Get Character Befehl <--CHAR Return character <--CURSOR X und X Cursor 4!G} CMD--> Get character Befehl <--CHAR Return character <--CURSOR Y und Y Cursor5 CMD--> !H} Get character Befehl <--CHAR Return character <--CURSOR X und X und Y Cursor <--CURSO!I}R Y6 CHAR-> Zeichen-Ausgabe <--CURSOR X Return X Cursor7 CHAR-> Zeichenausgabe Zeichenausgabe <--CURSOR X Return X und Y Cursor <--CURSOR!K} Y9 CHAR-> Burst Modus - Sende Zeichen ___. .___ High (1) Ready |_____| !L} Low (0) Busy4.3 Befehls/Daten-Werte4.3.1 Datenausgabe - Return Cursor+-+-+-+-+-+-+-+-+-+|8|7|6|5|4|3|2|1|0|+-+-+-+-+!M}-+-+-+-+-+ 0 * * * * * * * * Character to be output ($00-FF) (3.2.1.1, 3.2.2)4.3.2 Stand Alone Befeh!N}l - Keine Information zurueck+-+-+-+-+-+-+-+-+-+|8|7|6|5|4|3|2|1|0|+-+-+-+-+-+-+-+-+-+ 1 0 0 * * * * * * Horizontal Cu!O}rsor Position ($00-3F) 1 0 1 0 0 * * * * Horizontal Cursor Position ($40-4F) 1 0 1 0 1 * * * * Horiz Curs Pos High Nibb. !P}wide screen 1 0 1 1 0 * * * * Left Marg.Low Nibb. high nibb. to 00 1 0 1 1 1 * * * * Left Margin High Nibble 1 1 0 0 0 *!Q} * * * Vertical Cursor Position ($00-0F) 1 1 0 0 1 0 * * * Vertical Cursor Position ($10-17) 1 1 0 0 1 1 0 0 0 Set Curs !R}to Status Row ($18) See Pg.6 1 1 0 0 1 1 0 0 1 Set Graphics to 60 Hz 1 1 0 0 1 1 0 1 0 Modify Graphics to 50 Hz 1 1 0 0 !S}1 1 0 1 1 Reserved 1 1 0 0 1 1 1 * * Reserved 1 1 0 1 0 * * * * Right Marg. Low Nibb. high nibb. to 04 1 1 0 1 1 * * * !T}* Right Margin High Nibble 1 1 1 0 1 0 0 0 0 Clear List Flag 1 1 1 0 1 0 0 0 1 Set List Flag 1 1 1 0 1 0 0 1 0 Set Scr!U}.Normal Mode-curs ret.each char 1 1 1 0 1 0 0 1 1 Set Screen Burst Mode-no cursor ret. 1 1 1 0 1 0 1 0 0 Select CharSet A!V} - Atari graphics 1 1 1 0 1 0 1 0 1 Select CharSet B - Atari international 1 1 1 0 1 0 1 1 0 Select XEP80 Internal Charac!W}ter Set 1 1 1 0 1 0 1 1 1 Modify Text to 50 Hz Operation 1 1 1 0 1 1 0 0 0 Cursor Off 1 1 1 0 1 1 0 0 1 Cursor On Conti!X}nuous 1 1 1 0 1 1 0 1 0 Cursor On Blink 1 1 1 0 1 1 0 1 1 Move Cursor to Start of Logical Line 1 1 1 0 1 1 1 0 0 Set Sc!Y}roll Window to Cursor X Value 1 1 1 0 1 1 1 0 1 Set Printer Output 1 1 1 0 1 1 1 1 0 Select White Char on Black Backgroun!Z}d 1 1 1 0 1 1 1 1 1 Select Black Char on White Background 1 1 1 1 * * * * * Reserved(Nibble = Halbbyte)4.3.3 Get Chara![}cter Befehl - Datenbyte und Cursor werden zurueckgegeben (4.3.5,4.3.6)+-+-+-+-+-+-+-+-+-+|8|7|6|5|4|3|2|1|0|+-+-+-+-+-+-+!\}-+-+-+ 1 1 1 0 0 0 0 0 0 Get Character from XEP80 at cursor (and advance)4.3.4 Get Data Befehl - Dat!]}enbyte zurueck (4.3.5)+-+-+-+-+-+-+-+-+-+|8|7|6|5|4|3|2|1|0|+-+-+-+-+-+-+-+-+-+ Command Function XEP80 Byte Ret. 1 !^}1 1 0 0 0 0 0 1 Request Horizontal Cursor X Cursvalue 1 1 1 0 0 0 0 1 0 Master Reset 01 1 1 1 0 0 0 0 1 !_}1 Printer Port Status 00=busy 01=on line 1 1 1 0 0 0 1 0 0 Fill RA!`}M with previous char 01 1 1 1 0 0 0 1 0 1 Fill RAM with space ($20) 01 1 1 1 0 0 0 1 1 0 Fill RAM with EOL ($9B) 01!a} 1 1 1 0 0 0 1 1 1 Reserved 1 1 1 0 0 1 * * * "4.3.5 Empfangene Daten - Normaler Kommunikations-Modus+-+-+-+-+-+-+!b}-+-+-+|8|7|6|5|4|3|2|1|0|+-+-+-+-+-+-+-+-+-+ 0 * * * * * * * * Zeichen vom Bildschirm oder vom Horiz!c}ontalen Cursor, falls verlangt4.3.6 Empfangener Cursor - Normaler Kommunikations-Modus+-+-+-+-+-+-+-+-+-+|8|7|6|5|4|3|2|!d}1|0|+-+-+-+-+-+-+-+-+-+ 1 0 0 * * * * * * H. Curs Pos($00-3F)Vert does not follow 1 0 1 0 0 * * * * H. Curs Pos($40-4F)!e}Vert does not follow 1 0 1 0 1 0 0 0 0 H. Curs Pos >4F No Vert follows see n. 1 0 1 0 1 0 0 0 1 Reserved 1 0 1 0 1 0 0 1!f} * Reserved 1 0 1 0 1 0 1 * * Reserved 1 0 1 0 1 1 * * * Reserved 1 0 1 1 * * * * * Reserved 1 1 0 * * * * * * H. Cu!g}rsor Pos. ($00-3F) Vert follows 1 1 1 0 0 * * * * H. Cursor Pos. ($40-4F) Vert follows 1 1 1 0 1 0 0 0 0 H. Curs Pos >4F !q}5B%DOS SYSB*)DUP SYSB SRAMDISK COMB\UTOPUN SYSB'^START BASBVOBWORT TXTB(XEP80 T1 BuXEP80 T2 Bh*XEP80 T3 Vert Follows - see note 1 1 1 0 1 0 0 0 1 Reserved 1 1 1 0 1 0 0 1 * Reserved 1 1 1 0 1 0 1 * * Reserved 1 1 1 0 1 1 *!r} * * Reserved 1 1 1 1 0 * * * * V. Cursor Position ($00-0F) 1 1 1 1 1 0 * * * V. Cursor Position ($10-17) 1 1 1 1 1 1 0!s} 0 0 V. Cursor Pos. for Status Line ($18) 1 1 1 1 1 1 0 0 1 Reserved 1 1 1 1 1 1 0 1 * Reserved 1 1 1 1 1 1 1 * * Rese!t}rvedAnmerkung: wenn folgendes Byte empfangen wird "Horizontale Cursor-Position groesser als $4F", kann der Computer mit dem!u} Befehl "Ersuche Horizontalen Cursor von der XEP80 (Request H.C. from XEP80)" den aktuellen Wert erhalten. ANHANG A An!v}merkungen zur Anwendung1) Zeichen koennen am rechten Rand ueber dia AOLs `usgegeben werden, ohne einen Zeilenvorschub zu bew!w}irken, wenn man den rechten Rand um mindestens eine Position weiter nach rechts verschiebt.2) Das Festprogramm der XEP80 be!x}nutzt weniger als 2K des vorhandenen Adressenplatzes. Dies erlaubt ROM-Adressen-Veraenderungen um zusaetzliche Programm-Moegl!y}ichkeiten einzubauen.3) Der Debug-Modus erlaubt es, den parallelen Port auszulesen. So kann man unter zusaetzlicher Benutzu!z}ng eines Signalspeichers (latch) an der XEP80 den Port bidirectional (in zwei Richtungen benutzbar) gestalten.4) Wenn ein gr!{}osser Text-Bildschirm (breiter als 80 Zeichen) geloescht werden soll, benuetzt man besser den Fill-XEP80-RAM-with-EOL-Befehl !|}als das Zeichen Clear Sreen. Diese loescht nur das augenblicklich gezeigte 24-Zeilen-Fenster.5) Der X-Cursor > $4F wird durc!}}h den Handler gesteuert. Dieser sendet jedesmal automatisch den Request-Hor.-Cursor-Befehl an die XEP80, wenn der Wert des X-!~}Cursors als $50 gemeldet wird.6) Wenn man den XEP80-Zeichensatz benutzt, gibt man den Befehl Fill-XEP80-RAM-with-Space, um !}den Schirm zu loeschen. Auf alle Faelle schickt man jedem Zeichen, das man an die XEP80-Schirm sendet, das ESC-Zeichen voraus!}, oder man setzt die LIST-Flag so, dass keine Zeichenausgabe auf dem Schirm erfolgt.7) Graphics 8 Screen Dumps beduerfen ein!}er kurzen Erklaerung. Da das OS 8K des RAM benoetigt, um einen Modus-8-Bild aufzubauen, kann der Handler nicht an seinem vorg!}esehenen Platz bleiben. Ein angehaengtes (appended) AUTORUN.SYS-File muss zuerst den MEMTOP-Zeiger auf 8K unter dem Top des R!}AM richten (kontrolliere den aktuellen Modus-8-Wert). Dann verschiebt der Relocater den Handler an den Platz unterhalb dieses!} Punktes. Nachdem man in den 40-Zeichen-Modus gewechselt hat, kann der Graphics-8-Befehl gegeben werden. Zeichnen auf dem Sch!}irm funktioniert auf dem ueblichen Weg ueber das S:-Interface des OS. Sobald dies beendet ist, wird der EXP80-Modus, anschlie!}ssend XEP80-Graphics eingeschaltet. Der ANTIC-Screen-RAM wird nun ausgelesen und an die XEP80 ausgegeben.8) Wie man die vore!}ingestellte Drucker-Configuration beim Booten veraendert, zeigt das Programm PRINTER.BAS auf der System-Diskette.!} ANHANG B Das Relocater-Format des XEP80-HandlersDie Werte in den Kaestchen sind im HEX-Format angeg!}eben.AUTORUN.SYS File Format Relocating Format of Handler+-------+ +----+| FF,FF | DOS Loa!}d File +--| XX | Link byte to first+-------+ | +----+ Relocate byte| 00,30 | Start Address=$30!}00 | : :+-------+ | : : Valid 6502 Code| LO,HI | End Address | +----++-------+ !} +->| XX | High Byte to reloc.: : Relocater +----+ add offset: : Code !} +--| XX | Link byte to second+-------+ | +----+ Relocate byte| LO,HI | Handler Length | : !} :+-------+ | : : Valid 6502 Code| 20 | JSR Instruction | +----++-------+ for DOSINI set !} +->| XX | High Byte to reloc.| LO,HI | by Relocater +----+ add offset+-------+ +--| 00 !}| Example Link of 0| 4C | BMP Instruction | +----+ following byte is+-------+ to INHT code +->| XX | High !}byte to reloc.| LO,HI | set by Relocater +----++-------+ +--| 80 | Spec. Case 80 means| 00,00 | !}Printer Aux bytes | +----+ skip 127 data bytes+-------+ | : : then treat byte 128: : XEP 8!}0 Handler | : : as the next link: : Code in +->+----+: : Relocating Format +--| XX | Lin!}k+-------+ | +----+| E2,02 | INIT Vector | | | Valid 6502 Code+-------+ !} | +----+| E3,02 | for DOS +->| 00 | Dummybyte to Reloc.+-------+ +----+ to maintai!}n links| 00,30 | RUN Address | FF | Spec. Case FF means+-------+ +----+ end of File!} ANANG C Inhalt der System-DisketteDOS.SYS DOS 2.5DUP.SYSAUTORUN.SYS XEP80 Relocater und HandlerXEP8!}0.DOS Dieses DokumentXEP80HAN.SRC Handler als Assembler Source-CodeRELOC.SRC dto. der RelocaterMAKER.BA!}S Programm, das das AUTORUN.SYS erzeugtWINDOW.BAS Beispiele zur GebrauchsanleitungEIGHTY.BAS "PRINT!}ER.BAS "GRAPHICS.BAS "DEMO80.BAS Demo-Programm fuer die XEP80sanleitungEIGHTY.BAS "PRINT W/