2 3 . ausgabi
Transcription
2 3 . ausgabi
CLUB C I u b l n f o der T G u n f E d R N 23. KONTAKTADRESSE : t N N D I Y ~ E ~ K O H T E K H E N D E R - AUSGABI: CLUB ÄO / HARTMUT OBERMANN / SCHWAIBACHER STRAßE ß / 62Cfl HEIDENROD 1 POSTFACH 57 / TEi..: 0612*. / ^ 1 3 ' l i l H B L T S Ü C H n I Neues vom Vorstand ............... 1- 4 Hartmut Obermann Geburtstagskinder ................ 5 Jutta Obermann Vorstellungen .................... 4 Michel, Werner Club-Emblem ...................... 7 - 8 Matthias, Gerald, KaJot In eigener Sache ................. 7 Redaktion Termine / Messen ................. 9 Redaktion - 3 & o i ^ < l w c i / r - e . Maus mit sieben Beinen ........... 49 - 70 Arnulf Sopp Noch ein Druckerpatch ......... 71 - 72 Manfred Held Wieder mal: 40/80 Trackumschaltung . 72 Hartmut Obermann Anmerkung zum CIub-80-ECB-Bus-Projekt 73 Gepufferter DMA- und IM2-fähiger ECB 74 - 84 Helmut Bernhardt PD für M 4 /4P .................. 97 Klaus Hermann CP/M Soft ....................... 98 - 99 Andreas Rychlik Club-89 - Bücherei ............. 100 Hartmut Obermann ______j a i w v L r e .____________________ Wer hat was — wer will was ....... 85 - 87 l U y e . --€ > e / t > g y t e y n Impressum ....................... Schluß .......................... _____ X o ^ ^ b w q / r - e . _______________ Kleines Textprogramm............. 10 - 14 TRS 80: Sortieren ................. 12 TRS 80 erstellt Hardcopy ......... 17 Zeichengenerator -für Nadeldrucker .. 18 Artikel aus MC Wer sucht soll finden ............ 19 - 21 Was TSCRIPS nicht kann ........... 20 - 23 Korrigieren und Steuern innerhalb VC 24 - 24 Klaus-Jürgen Mühlenbein Kleine Hexen bevorzugt ........... 27 - 2? Arnulf Sopp Datenübertragung / M4P als Terminal 30 - 32 Klaus Hermann Druckausgabe -für COBOL-Programme ... 32 Werner Förster Vergleichstest ................... 33 - 48 Hartmut, Kurt, Gerald CP/M intern - kurz und Kompakt ..... 49 - 43 Gerald Schröder dBase II ......................... 45 - 48 Harald Mand Seite: und Autor: Seite: und Autor: Seite: und Autor: 1& ^ * J ^ i / T v lb e / iv r > e ^ L __________ S Z80 Hochintegrations CPUs ........ 88 Heinrich Betz Testbericht KX 1883 .............. 89 - 90 Harald Mand Reingefallen mit Rheintec ......... 90 Paul-Jürgen Schmitz Echte Programmierer meiden PASCAL .. 91 - 97 DATAMON 101 102 Redaktion Sonderausgaben ....... ........... am INFO-Ende KaJot, Hartmut N e u Das e s v o m erste V o r s t a n d Mitglied F a l s c h g e t ippt, nicht das er s t e N e u m i t g l i e d im Jah r 19B8, sondern das erste Mitglied des CLUB BO überhaupt, welches keinen TRS 80 oder auch nur einen kompatiblen sein eigen nennt! Matthias Homann h e i ß t d e r K n a b e , w o h n h a f t i n S e e v e t a l (bei G e r a l d S c h r ö d e r g l e i c h um die Ecke) und stolzer Besitzer eines modifizierten N D R —Klein c o m p u t e r s m i t 6 4 1 8 0 — C P U , G D P 6 4 4 — H R G u n d .. . u n d .. . u n d ... A b e r das soll ja we d e r e i n e k o m p l e t t e V o r s t e l l u n g vo n M a t t h i a s , noch e i n e W e r b e a k t i o n f ü r N D R — Kl e i n — C o m p u t e r w e r d e n . Vielmehr wollte ich e u e r A u g e n m e r k auf den U m s t a n d ric h t e n , daß man nicht unbe dingt Besitzer eines TRS 80 oder kompatiblen sein muß, um Mit glied im C L U B 80 zu werden. Ich h o f f e fü r M a t t h i a s (und a u c h für eventuell noch folg e n d e N i c h t — TRS 80-Besitzer) daß unser Info und die sonstigen Leistungen des CLUB 80 (Bücherei, Programmsammlung usw.) auch für ihn so interessant sind, daß er s ein en Entschluß, bei uns einzusteigen nicht bereut und noch lange Zeit zu uns gehört’ S t r i n g y — F l o p p y Ebenfalls e i n U n i k u m in u n s e r e n R e i h e n s t e l l t W e r n e r H e n t z dar. E r i s t z w a r B e s i t z e r e i n e s T R S 0 0 M o d e l 1, arbeitet aber, meinen Informationen nach als e i n z i g e r im C L U B 80, nur mit StringyF l o p p y s . W e r n o c h s o l c h e D i n g e r i r g e n d w o r u m l i e g e n 4iat o d e r s o g a r d a m i t a r b e i t e t , k a n n s i c h ja mal m i t W e r n e r in V e r b i n d u n g s e t z e n ! MS-DOS Die vor e i n iger Zeit recht h e f t i g e D i s k u s s i o n über ein e MS-DOSE c k e im Info ist zwar e t w a s abgefl a u t , z u e i n e m E n d e ist sie aber immer noch nicht gekommen. Nachdem ich jetzt selbst auch einen PC— kompatiblen mein Eigen nenne, würde ich g e r n e wissen, welche Mitglieder des Clubs ebenfalls zweigleisig fahren. Wer also neben d e m T R S 8 0 a u c h n o c h e i n e n a n d e r e n C o m p u t e r (ob P C , Amiga, Atari oder sonst etwas) beackert, m ö g e s i c h bei m i r m e l d e n . Ein Anruf oder eine Postkarte genügen, wer mich gleich mit einem längeren B r i e f b e e h r e n m ö c h t e , k a n n d a s a u c h tun. E i n e A n t w o r t b e k o m m t ihr auf a l l e F ä l 1e ! C l u b t r e f f e n 88 Nach mehreren erfolglosen Versuchen habe ich (stimmt nicht, Jutta hat) endlich ein g e e i g n e t e s Hotel für unser jährliches ClubTreffen gefunden. E s h a n d e l t s i c h u m d a s H o t e l I d s t e i n e r Hof in Idstein. U r s p r ü n g l i c h w o l l t e n w i r j a in d e n R a u m D a r m s t a d t / B e r g — straße, hatten a b e r bei u n s e r e r S u c h e d o r t k e i n e n Erfolg. Auf I d s t e i n f i e l d i e Wahl, weil e s d i r e k t an e i n e r N o r d — S ü d - A u t o b a h n verbindung (A 3 / E 5 ) , e t w a 3 0 k m n ö r d l i c h v o n W i e s b a d e n u n d ca. 50 km n o r d w e s t l i c h von F r a n k f u r t liegt. Damit ist wieder gewähr leistet, daß die Anfahrstrecke weder für die Nordlichter (ich halte mich z u d i e s e r Zeit ü b r i g e n s in R e n d s b u r g / S c h l e s w i g auf) n o c h f ü r d i e S ü d l ä n d e r z u l a n g ist. Idstein ist ein sehr sch ö n e s kle i n e s S t ä d t c h e n , dessen Altstadt kern gera d e neu renoviert wurde. Auch die nähere Umgebung (Wies baden, Limburg, Diez, F e l d b e r g usw.) b i e t e n e i n i g e s , so daß es auch für e ventuell mit a n r e i s e n d e " b e s s e r e H ä l f t e n ” nicht lang weilig wer d e n dürfte. Das Hotel liegt d i r e k t an der S t raße, die von der Autobahn in d i e S t a d t f ü h r t u n d i st damit leicht zu finden. Die Zimmer sind zwar teilweise recht spartanisch, jedoch sehr orde n d l i c h und sauber eingerichtet. Die Preise für Doppel zimmer liegen zwischen 20,— und 30,— DM p r o P e r s o n incl. Früh stück. Die Tagungsräume, die sehr gemütlich ausgestattet und recht groß sind, werden uns wieder kostenfrei zur Verfügung g e s t e l 1t . W o viel Licht ist, findet sich leider immer wieder auch der eine oder andere Schatten. B e i m Idsteiner Hof ist es di e leider recht b e s c h r ä n k t e U n t e r b r i n g u n g s k a p a z i t ä t v o n 18 B e t t e n , so daß e v e n tuell einige Mitglieder andersweitig untergebracht werden müssen. Aber a u c h d a s ist k e i n B e i n b r u c h , da die sehr h i l f s b e r e i t e und f r e u n d l i c h e W i r t i n v e r s p r o c h e n hat, bei der S u c h e n a c h Q u a r t i e r e n in H o t e l s in d er N a h e t a t k r ä f t i g e U n t e r s t ü t z u n g z u leisten. Da ich nicht weiß, w i e l a n g e e s bei d i e s e m I n f o v o m R e d a k t i o n s termin bis zur Auslieferung dauert, werde ich die Einladung gesondert verschicken. Eigentlich müßte sie euch schon erreicht haben!? W enn d i e s n i c h t der Fall ist (grande Malheur) und ihr am 12. bis 15. Mai am Clubtreffen teilnehmen wollt, ruft mich schleunigst an, damit ich euch noch eine Einladung zukommen 1assen k a n n ! Eine Tagesordnung für d a s Clubtreffen besteht, wie jedes Jahr, noch nicht. T r o t z d e m b i n ich sicher, daß auch dieses Treffen w i e d e r ein voller E r f o l g wird. Der Rahm e n w ird u n g e f ä h r wie folgt a u s s e h e n : Do. 1 2 . 0 5 - A n r e i s e der Computersüchtigen, die das seltene Ereignis voll auskosten wollen. Zeit zum Meinungs— , Erfahrungs- und Pro— grammaustauch Fr. 1 3 . 0 5 — A n r e i s e für die nicht Abergläubischen, Gelegenheitshacker und diejenigen, di e es nicht geschafft haben, für diesen Tag U r l a u b (beim Chef o der der Frau) zu bekom men. Nach dem Mittagessen eventuell erste Vorträge (wenn sich jemand findet, der etwas wissenswertes und interessantes vor z u t r a g e n hat) u nd n o c h m eh r Zeit z u m H a c k e n Sa. 1 4 . 0 5 - V o r - u n d Nachmittags weitere Vorträge und viel Zeit zum M e i n u n g s — und E r f a h r u n g s a u s tausch. Nach d e m F ü n f u h r t e e soll es dann etwas offizieller werden, sprich die Jahreshauptversammlung steigt. So. 1 5 . 0 5 - D a auch das schönste Clubtreffen mal ein E n d e haben muß, wird d i e s wohl der Tag des Abschiednehmens werden. Die einen werden früher, die anderen später das Weite suchen und wie in jedem Jahr bleibt es jedem selbst überlassen, w a n n er den Tagungort v e r 1a ß t . Damit dieser Rahmen sich mit Leben füllt, sind natürlich alle Teilnehmer aufgerufen, sich möglichst akti v am Treffen zu be t e i ligen. Gefragt sind vor allem Vorträge über die v e r s c h i edensten A s p e k t e d e r H a r d - u n d S o f t w a r e (z.B. wird sich Rüdiger Sörensen über Turbo-Pascal auslassen). Aber auch der Gedankenaustausch über d i e Z ukunft des C L U B 80 sollte nicht zu kurz kommen. Themen wie *’ M S - D 0 S - E c k e j a o d e r n e i n “, "V e r b e s s e r u n g d e s Infos durch ansprechendere Gestaltung" oder ’ ’ Ö f f n u n g de s C L U B 80 für nicht T R S 8 0 - k o m p a t i b l e C o m p u t e r " s t e h e n bei der J a h r e s h a u p t v e r s a m m l u n g mit Sicherheit auf der T agesordnung. Auf a l l e F ä l l e gilt das Mottos je v i e l f ä l 1t i g e r d as Angebot, desto Interessanter das Treffen! Damit will ich für d i e smal Schluß machen. Ich f r e u e mi c h jetzt schon, euch m ö g l i c h s t v o l l z ä h l i g in I d s t e i n b e g r ü ß e n z u dürfen und wünsche e uch in d i e s e m Sinne alles G u t e und viel Spaß am C o m p u t e r h o b b y , euer HEFT £3 Februar 1988 02 - 03 v \ \ _ i ‘^ ' “'Gelsen-' kchn, Hotel - Restaurant- Bierstube ID STEIN ER H O F Inh. Maria Keil Wiesbadener Straße 43 6270 IDSTEIN/TAUNUS Telefon 06126/3227 Wir empfehlen uns fü r Tagungen, Geschäfts- und Familienfeiern Der Idsteiner Hof ist - Autobahn A3 Abfahrt - Richtung Innenstadt sehr Idstein nach - Parkplätze Gute Fahrt der gibt und zu finden: abfahren -fahren - d i r e k t an d er S t r a ß e , T e x a c o - T a n k s t e l le - direkt leicht die in die Stadt Tankstelle liegt es Rückseite auf sicheres Hartmut der Ankommen der -führt, Idsteiner des kommt links ei n e Ho-f Gebäudes! wünscht Obermann \m»A\ / - -V i — lllm rtll’ ■ Hallo Clubfreunde. als neues Mitglied im Club möchte ich mich kurz vorstellen. G e b u r t s t a g s k i Ich heiße Werner Hentz. geb. 3.11.42, wohnhaft in Maintal - einer Stadt zwischen Frankfurt und Hanau. Beruflich bin ich in Sachen EDV schon seit gut 20 Jahren tätig und hoffe von Euch noch einiges dazulernen zu können. Es war reiner Zufall, daß über eine CHIP-Anzeige mich ein Frankfurter Arzt auf den CLUB 80 aufmerksam gemacht hatte. n d e r ~ tfallo F r e u n d e , heute ist es wieder soweit. Es weilen wieder viele Geb u r t s t a g s " k i n d e r " u n t e r uns. Im l e t z t e n I n f o k a m e n z w a r e i n i g e G e b u r t s t a g s w ü n s c h e reich lich spät, aber ihr könnt versichert sein, sie waren g e n a u s o h e r r l i c h , w i e es d i e s e sind. Meine TRS-80/Model1 I Anlage besitze ich seit Sommer 1979. die nach und nach in Stufen erweitert bzw. ausgebaut wurde. Als absolute Besonderheit werden meine Program me über STRINGY FLOPPY - einer Alternative zwischen Kassette und Diskette - geladen und gespeichert. Das Modell I arbeitet mit 48 kRAM, erhöhter Taktfrequenz und Klein schreibung (incl. Zeichengenerator mit Un terlängen) . Seit Herbst letzten Jahres kam der Thermo-Transferdrucker TPX-80 von C. ITOH dazu, der über das TANDY-Bufferkabel 26-1411 am Bus angeschlossen ist. Da sich b i s jetzt n o c h kein im letzten Info b e i t r a g verges s e n e s M i t g l i e d bei mir g e m e l d e t hat, n e h m e ich an, d a ß s i c h n i e m a n d ü b e r g a n g e n -fühlteT r o t z d e m m ö c h t e i c h all d i e j e n i gen, von denen ich kein Geburtstagsdatum habe, bitten, mir dieses mitzuteilen. So, nun Im Mo n a t a m 2. a m 4. a m 9. am am 17. 26. endlich geht es los. Februar hatten Geburtstags : Spieß Peter s E m m r i c h H e l m u t (der u n s e r e n k u r z e m v e r l a s s e n hat) : Schmitz Paul-Jürgen und Rensch Richard s Schröder Gerald : Wucherer Jürgen Im M o n a t a m 30. März gibt es nur einen : Sörensen Rüdiger Im M o n a t a m 7. April s i n d e s wied e r e i n i g e mehr: : T r a p p H a r a l d und Schmid Alexander : Loose Gerhard : Pi 11 e r W a l t e r : Böckling Ulrich a m 26. a m 28. a m 30. (reichlich Club leider vor Von meinem Clubbeitritt im November letzten Jahres erhoffe ich mir jn erster Linie gute Kontakte zu den übriggebliebenen Z80-Freaks. schwacher Wie ihr seht, ./[/lCc A-VUl-T <Kst' Liebe Clubfreunde, gab und gibt es Im Namen d e s V o r s t a n d s w ü n s c h e ich den G e b u r t s t a g s " k i n d e r n " u n d a l l e n a n d e r e n , d i e e t w a s zu f e i e r n h a b e n , viel G l ü c k u n d hoffe, daß w i r u n s z u m C l u b t r e f f e n in I d s t e i n W ie d e r s e h e n (12.05.-15.05.). da ich ni c h t sehr stark in deut s c h e r mich hier nur kurz vorstellen. Eigentlich bin 1935 geboren. ich ein Franzose S p r a c h e bin, aus Bordeaux möchte <6 i r o n d e ) ich und Vor ungefähr 6 Jahren habe ich mit ei n e m Model 1 mit K a s s e t ten begonnen. Dann h a b e ich mich an den TRS 80 Club von Yverdon angeschlossen. Um mich weiterzubilden, habe ich viele Bücher gekauft, um Software in Basic besser zu verste hen. D a f ü r h a b e ich in H a r d w a r e k e i n e E r f a hrung. Um CP/M kennenzulernen, habe ich mir einen Commodore 128 und e i n G e n i e III g e k a u f t , sodaß ich die zahlreichen Unterlagen über ZBO—A s s e m b l e r und Pascal a n w e n d e n kann. Soweit meine Vorstellung. Auf Eure > Mit freundlichen Grüßen Weiterhin g r a t u l i e r e n wir zwei ’ frischgebackenen Vätern und den dazugeh ö r i g e n Müttern und wünschen beiden wenig durch w a c h t e N ä c h t e (wegen des Babys). Klaus H e r m a n n (Monat D e z e m ber '87) und M a n f r e d H e l d ( J a n u a r '8 8 ) h a b e n trotz der v i e l e n C o m p u t e r e i n och Zeit für a n d e r e D i n g e gefunden. Sie w u r d e n b e i d e V ä t e r e i n e r T o c h t e r . J u h u u !!! So, das w a r ' s mal wieder. w i e d e r viel zu feiern. Auf gute Zusammenarbeit Werner Hentz Monat): Gute Clubmaus Michel Zusammenarbeit mit euch freue ich mich HEFT £13 _ , Februar 1983 06 JE>e-fcr. •■ ( D I la. b S O - 07, *) A T K ~ ß j2 2 m £ v ^ ß «c A / f A O L ^ t^ . . x &> / V < o c& 3 J)'< b*V<K_ A^ß^lt^tlre^ [c*y*>fcöfr^ Q ] 08 l\'*ltS -h Veckis S,'v\d klar- ’f '^ A A jz ^ jf 2-) S)ev Mfitc.ltc.il £ c z ^ k - a ) c / o ^ r - y ^ j2 ^ d tn 2 . •r^y^boh'jif/i : sou ^©vv. & S T < ^ r v ^ ix y v { £ ^ cj 3- tm ile w i- cke B - <fD Cl<\\p o loti* iaw(/ ny\te*— 2 \ckka.clc- » ta i^ w c ^ /o a .^ i^ 'i/ö .^ e /j ^ l~> i t . i . / t 4 < 9 & t C U ic A ^ n X '*sü6t ctu/>4j2-^a~^ /*** ^ o ^ c X 'vi.rf.cx^ £ o w - ^ . ( b Q u ^ ß s -r 'c z ^ c o ■& ( * CD CJ □ □ D D P O In e ig e n e r S ic h e : W ir haben k e in ? D ru ck e re i fü r das CJMbin+o m ehr !1 P e te r Spieß h ö rt aus b e ru flic h e n Gründen a u f. Da e r s ic h nun nur noch m it 1E 1-P C 's b e s c h ä ftig t, i s t e r g le ic h z e it ig auch aus unserem Club a u s g e tre te n . Aus diesem Grunde suchen w ir einen neuer. U e r v ie lfä l tic j; fr f ü r unsere kommenden C lu b - In fo 's . V ie lle ic h t h at e in e r v o n Euch e in e gut? Adresse b e i der der ijlu b 88 w e ite r h in k o s te n g ü n s tig das C lu b -In fo H e rs te lle n lassen kann? Meldungen dazu b it t e an d ie C lu b - 80-R e d a k tio n . D C j keranwelsungen in diesem Bereich an gepaßt werden. Frank Sandlos Kleines Textprogramm Für T R S - 8 0 Hier ein kleines Text-Verarbeitungsprogramm für das TRS-80Modell 1. Mit wenig Aufwand kann man damit ganz schön Texte erstellen. Vielleicht auch als Beispiel geeignet, wie Besitzer ande rer Computermodelle sich so ein Text-System anlegen könnten. Umlaute und Groß-Kleinschreibung sind möglich. Das Programmllsting (Bild 1 ) enthält in den Zeilen 51000...51020 eine BasicRoutine, die ein Maschinenprogramm ln den Speicher ab 32603 (dez.) schreibt (Speicher: 16 KByte), das Großbuchsta ben mit einem Grafik-Block zur Unter scheidung von den Kleinbuchstaben versieht. Ferner sind die Kleinbuchsta ben direkt wie bei einer normalen Schreibm aschine erreichbar, Großbuch* staben nur mit ..Shift". Besitzer eines T R S-80 mit 16-KByte-Spelcher und ein gebauter Kleinschrift (und möglicher w eise Umlauten) lassen die Zeilen 5 .51000...51020 weg und benutzen Zelle 104 aus dem Listing in Bild 4. Ist ein Umlautsatz ebenfalls schon eingebaut, so kann auch die Sondertastenbelegung in Zeile 132 wegfallen. Man sollte dann auch die in den Zeilen 355...357 unter strichenen Druckercodes experimentell überprüfen, die eventuell modifiziert werden müssen. Bei Benutzung der Kleinschreibroutine muß „MEM SIZE?" m it 32683 beantwortet werden. Selbst verständlich kann dieses Programm auch mit einem anderen Druckermodell als dem MX-BO von Epson benutzt wer* den, es müssen dann die Druckercodes in den Zeilen 132,355...357 geändert werden. Ist bei der Eingabe des Program m es das Programmzeilenende erreicht, d. h. der Computer nimmt keine Zeichen m ehr für die betreffende Zeile an, ob w ohl im Listing noch Zeichen stehen, so gehe man in den Edit-Modus. Nur im Edit-Modus des TRS-60 läßt sich die im Handbuch angegebene Zeilen!fnge von max. 255 Zeichen erreichen! Dieses Programm addiert bei der Drukkerausgabe zum ASCII-Wert des betreff fenden Zeichens 32 hinzu, wenn er Im Bereich von 64...90 lieg t Liegt dieser Wert zwischen 96 und 122, so wird 32 subtrahiert. Deshalb müssen die Druk- Die Bedienung des Program m s Nach Eingabe und Start des Programms wählt man die Hauptzeilenlänge, entwe der 122 oder 72 Zeichen/Zelle. Diese Zellenlänge wird dann beim Programm* ablauf und bei der Druckerausgabe beibehalten. Bei 122 Zeichen/Zeile wird der Drucker auf die Schriftart „Sl“ program miert, ansonsten wird die Normalgröße beibehalten. Der T ext wird m it einem genügend breiten Abstand vom linken PapierTand ausgedruckt (zum Abheften). Um eine optimale Ausnutzung des DINA4-Blattes zu erreichen, muß die ober« Kante des Jeweiligen Blattes mit dem anliegenden RAnd der klappbaren Ska leneinteilung des M X-80 bündig ab schließen. Nach der W ahl der Hauptzeilenlänge wählt man entweder die Schriftart der nächsten einzugebenden Z elle oder man unterbricht den Eingabe modul durch Drücken der Taste „Pfeil untenM. Folgende Eingaben zur Schrift* auswahl sind möglich: .ENTER* JE' 4 )’ & - Normalschrlft (N) - „Emphaslzed“-Schrift (E) - „Double Prlnted“Schrift (D) - „Shift O u r-S ch rift (S), da bei autom. Begrenzung der Zeilenlänge auf 36 Zeichen. Nun erscheint eine Skala, unter der ein Leuchtbalken die Länge der Textzelle markiert. Dahinter befindet sich die Zel lennummer sowie nach einem GrafikBlock eine Abkürzung der Schriftart. Jetzt kann man den Text eingeben, mit Benutzung der in Bild 2 beschriebenen Sondertasten. W ill man die Eingabe be enden und die Textzeile speichern, ein fach „Enter“ drücken. Drückt man „En* ter” ohne Zeicheneingabe, so wird die Zeile beim Ausdrucken des Textes Igno riert, es entsteht keine Leerzeile. Leer Zum automatischen Sichten: Nach Be endigung dieses Vorgangs entweder ,»Enter" zum Verlassen dieses Pro grammteiles oder „A“ zur erneuten Durchsicht drücken. Zum manuellen Sichten: „Enter“ be wirkt Verlassen dieses Programmteiles, „KMbewirkt anschließende Korrektur der zuletzt angezeigten Zeile. Einfügen einer Z eile, „P fe il rechts*1 Nach Tastendruck der „Pfeil rechtsM*Ta* ste muß die Zeilennummer der neu ein zufügenden Zeile eingegeben werden. Diese muß genau in der Mitte zwischen den Nummern zweier schon eingegebe ner Zeilen liegen, also z. B. 1.5 oder 2.5, wenn die Zeilen 1 und 2 bzw. 2 und 3 schon eingegeben sind (möglich ist auch eine Oberschreibung einer schon einge* gebenen Zeile). Danach entweder „N'\ „E*\ „S“ oder J 3 “ zur Schrifttypauswahl drücken (Beantwortung der Frage „Typ?“). Nach Eingabe der Z e lle ,»Enter“ drücken, wie im Eingabemodus. Bitte beachten: Die vorgesehene Zeilenzahl pro DIN-A4-Seite beträgt 67 Zeilen. Des halb nicht mehr als zwei Zeilen zusätz lich einfügen, wenn die volle Zeilenzahl in Anspruch genommen wird. Korrektur einer Z eile, ,JCM Hier gibt man entweder die Zeilennum mer an oder drückt „Enter“, wodurch die erste Zelle des Textes korrigiert wer den kann. Auf dem Bildschirm wird nicht nur die Korrekturzeile, sondern zur besseren Obersicht auch die vorher* zeilen werden erst aufgedruckt, wenn man vor „Enter“ mindestens ein Leerzei chen eingibt. Drückt man, anstatt die Schriftart der Folgezeile auszuwählen, die Taste „Pfeil unten“, so erscheint eine Auswahltafel auf dem Monitor. Diese er klärt sich weitgehend von selbst, einige Punkte sollen jedoch näher erläutert werden. Sichten der Textzeilen, „P fe il unten“ Nach Drücken dieser Taste fragt das Pro gramm nach der Anfangszeilennummer, ab der der Text gesichtet werden soll. „A“ + „Enter" bewirkt automatischen Durchlauf des ganzen Textes. „Enter" bewirkt Anzeige der ersten Zel le. Danach manuelles Weiterschalten durch „Pfeil unten". „xx" + „Enter“, die Zeile Nr. xx wird angezeigt, manuelles Weiterschalten durch „Pfeil unten“. HEFT £3 Februar 1988 10 11 gehende und nachfolgende Zeile ange zeigt. Die besonderen Tastenfunktionen bei der Korrektur einer Zeile zeigt Bild 3. 1000 P»VARPTR(A$(1).-Q *VARPTR(AS(2)) 1010 P l-P E E K (P ):P 2 -P E E K (P + 1 ): P*l»PFFK7P4-2l A u fb a u d e s P ro g ra m m s 1020 Q l-PEEK (Q ):Q 2=P EEK (Q +1): Q 3«PEEK (Q +2) 1030 P O K E Q ,P l:P O K E Q + l‘P2:POKE Q +2.P 3 1040 POKE P,Ql:POKE P+l,Q 2J>O K E P+2.Q 3 Zeilen: 10...90 T itel, Eingabe der Hauptzellenlänge 09 Beginn der Hauptschleife 103 Eingabe der Schriftart 131...143 Eingabemodus 150...155 Auswahltafel 160...169 Sich ten der Textzeilen 175 Einfügen einer Textzelle 190...230 Korrektur 300...305 Speichern des T ex tei auf Kassette 310...315 Lesen des Textes von Kas sette 350...359 T ext Ausdruck ab 51000 Basic-Loader T IP: Zur besseren Orientierung kann man die Umlaute m it einem Prägegerat in Spezialfolie stanzen und vor die ent sprechenden Tastenkappen kleben. B ild 1 zeigt, w ie gesagt, das komplette Programm für den TRS-80, Modell 1, 16 KByte, ohne Modifikationen. In Bild 4 ist das Programm ln einer Version für den T R S-80 mit 48-KByte-Speicher sowie Klelnschriftmodifikatlon und eventuell deutschem Zeichensatz zu se hen (verwendet wird der Kleinschrifttreiberaus m c 12/1982). In dieser Ver sion sind einige Bedienungstasten geän dert worden, näheres klärt sich beim Programmlauf von selbst. Besonders viel Arger bereitete der Aufbau von Zeichenkettendateien in der Form PR IN T+-1, AS JB S ,... Die so aufgebaute Datei wird vom TR S-80 nur unvollständig eingele sen. A lle Versuche, diesen Fehler durch geschickte Programmierung zu umge- 0 Ü Cursor 5 Zeichen vor C irso f 1 Zeichen zurück Cursor 5 Zeichen zurück Bild 2. Die Sondertasten des Eingabe modus * TRS-80: Sortieren ln mc 1982, Heft 2, wurde eine Verbesse rung der Stringsortierung für Verfahren wie z. B. Quicksort vorgestellt. Die Me thode der Sortierung der Ordnungsnum mer anstelle der eigentlichen Strings verbraucht aber zusätzlichen Speicher platz, der dann an Aufnahmekapazität verlorengeht. jedem String eine Ordnungsnummer zu zuweisen (ein Integer-Array belegt 2 n + m Speicherplätze, wobei n die Anzahl der Strings bzw. Ordnungsnum mern ist und m die Anzahl der Bytes der internen Arraybeschreibung), ver braucht also bei großen Text-Arrays zu sätzlich 2 x n Bytes. Nun ist es aber beim TR S-80 oder beim Video-Genie so, daß sich Vertauschung von String-Inhalten ohne eigentliche Basic-Zuweisung aus führen läßt. W ie schon in mc geschildert, wird bei einer Zuweisung an eine String-Variable freier Speicherplatz beschrieben und der alte Platz im Textspeicher einfach ver gessen. Das kann dann bis zur völligen Belegung des Textspeichers und dem damit verbundenen Aufruf der GarbageKollektion führen. Ist eine Textvariable eingerichtet, das ist bei Komponenten eines Arrays immer der Fall, so besteht diese Variable zu nächst nur aus einem Deskriptor, der die Länge des Strings und die Startadresse enthält. Wird nun der Variablen ein (Text-)W ert zugewiesen, so wird dieser Wert im freien Textspeicher abgelegt und der Anfangszeiger des Deskriptors auf die entsprechende Stelle gesetzt. Des weiteren wird der Längenzähler auf den neuen Wert (Länge des zugewiesenen Wertes) gesetzt. Bei einer erneuten Zu weisung wird der alte Deskriptor auf ei nen neueingerichteten String im Text speicher gesetzt usw. Die Belegung freien Speicherplatzes läßt sich vermel den, wenn man nicht einfach eine Zu weisung wie etwa C $-A S(1):A ${1)«A $(2):A $(2)«C $ vomimmt, sondern gleich die entspre chenden Deskriptoren verändert. Fol gende Fragen tauchen dabei auf: 1. Wo findet man den Deskriptor? 2. An welcher Stelle steht der Längen zähler oder der Zeiger? Beim TRS-80 liefert die Funktion VARPTR («Variable»), „Variablen-Pointer", die Stelle, an der im Speicher der Wert einer Variablen zu finden ist. Bei Textvariablen wird die Adresse des De skriptors geliefert. Sei AS eine Textva riable, so liefert P**VARPTR(AS) die Adresse des Deskriptors vom mo mentanen Stand von AS. Die Speicher stelle (P) enthält nun die Länge des Strings. ( P + l) (L S B ), (P + 2 ) (MSB) ent halten den Zeiger auf den Textspeicher. Diese drei Parameter braucht man nur gegen andere auszutauschen, um der Textvariable AS einen neuen Wert zuzu weisen, ohne dabei neuen Textspeicher platz zu belegen. Folgendes Programm bietet sich daher zum „Swapping* (Aus tausch) von Texten an: 100 DIM AS(200) 200 A $ = „ T e x tr 210 A $»„T ext2" Nach Durchlauf der Zellen 1000 bis 1040 sind die Inhalte der Variablen A $(l) und AS(2) ausgetauscht. Bei anderen Systemen erfolgt die Ver waltung von Strings ähnlich. Auf eine weitere Möglichkeit der Aus nutzung der Deskriptoren sei an dieser Stelle noch hingewiesen. Will man etwa direkt auf den VideoSpeicher des TRS-80 zugreifen, so kann dies „peek by peek" (Byte für Byte) oder abschnittweise erfolgen. Die erstere Me thode, bei der jedes Byte einzeln „gepeekt" wird und in die entsprechenden Buchstaben umgewandelt werden muß, verbraucht viel Zeit und auch wieder viel Textspeicherplatz, da jeder Buchsta be im Textspeicher (unnützerweise) ab gelegt wird. Folgendes Programmstück bildet den In halt des Video-RAM auf einem Text-Array ZS(16) ab, wobei nach dieser Abbil dung eine Zuweisung an andere Textva riable vom m ehm en ist, da beim Schrei ben auf den Bildschirm unmittelbar in die Variableninhalte geschrieben wird. Man kann natürlich auch zu Anfang des Programms diese Variablen entspre chend präparieren, und dann deren In halte abfragen. 100 DIM Z$(16) 1000 P«15360:FO R N « 0 TO 15 1010 Q«VARPTR(Z$(N+1)): . P l- N e 6 4 + P 1020 Q 1«IN T (P1/256):Q 2-P 1-256*Q 1 1030 PO KEQ ,64:POKEQ+l,Q2:POKE Q+2.Q 1 1040 NEXT N Alle Variablen sollten bereits eingerich tet sein, um eine Verschiebung ihrer Adressen beim Einrichten neuer Varia blen zu vermelden. Nach Abarbeitung des Programmstücks 1000...1040 zeigen die Pointer der Varia blen ZS(1)...ZS(16) genau auf das VideoRAM. Man braucht also nicht mehr byteweise abzufragen, sondern nur noch zei lenweise. Heinrich Seebauer 3 G0SUB51020 10 CLS*CLEAR9400iDIMA*(133),Z (40)»DEF1NTA-YiPRINT186,"T E X T 8 Y S T E M"*PRINT STRING*<64,42)*F0RZ-0T0200*NEXT*G*-STRING*(4,176U H*-CHR* (143)II*-CHR*(140)lK*-C HR*(191)iM*-CHR*<131) 20 N*-H--- "♦««+"----1— — "+H*+M----2--- "+H*+"----3-- ---------- 4--- "+H*+"---5--- ••♦H*+M----6-- 4"*P*-"— r 8CHRXFT8TAERKE (Nj Dj Ej S ) ----- ' H+CHR* (92) ♦« *8C HREIBMODUS BEENDEN -- " 23 ST*-" >>>>>>>> START <<<<<<<<"»KA*-"** KASSETTENRECORDER BEREIT " 30 PRINT1211, G*" "ßl" "G*" "CHR*(176)" "Gl" "G*CHR*<176)»273,H*I*I*CHR*<188>" "K *" "K*I* I*CHR* (183) M "K*" "K*I*I*H*M "K*»339pM*M*f1*M*" "M*M*M*M*" "Mt" "M* " "M*" "MI" *’M* 60 F0RZ-0T0630*NEXT*PRINT»143,STRING*(34,176)1207,K*1240,K*I271,K*»304,K*»333,K* »368,KM399,STRING*(34,131) 70 FORZ-OT0500*NEXTlPRINT»194,"EIN"»260,"PROGRAMM"»331,"VON“»309,"F R A N K"»37i ,"3 A N D L 0 S"iF0RZ-0T0400» NEXT» PRINTiPRINT"HAUPTZEILENLAENGEi"»PRINT»PRINT" 72 ZEICHEN/ZEILE ---------- N(ORMAL)" 80 PRINT" 122 ZEICHEN/ZEILE---------- E (NG) "»PRINT* PfclNT* PRINT** BIT TE ANFANGSBUCHSTABEN DRUECKEN !" 90 W*-INKEY*»IFW*-"",90ELSEIFW*-"N",ZH-72ELäEIFW*-"E",ZH-122ELSE90 99 F0RZ-0T0132STEP2 100 0*-STR*(-<Z/2-H) )»0*-8TRING*(4-LEN(0*> ,43) «-O*«-"-" *fr>-832» ZL-ZH»CLS»PRINTI768, P*|iE*»"" 103 R*-INKEY*iIFR*-"M,103ELSEIFASC(R*)»13,R*-"N"iG0T0104ELBEIFR*-"D",104EL3EIFR* -"E",104ELSEIFR*-"S",ZL-36ELSEIFASC(R*)-10,150ELSE103 / 104 CLSiZZ-0*F0RZ1-Z-1T0Z-24STEP-1»IFZKO,110ELSEZ2-LEN(A*(Z1)>»IFZ2>0,Z3-INT(Z2 /64)♦ 1»ZZ-ZZ+Z3+1»IFZZM2,110ELSEPRINT»(768-ZZt64),A*(ZI)|tNEXTZ1EL8ENEXTZ1 110 PRINT»(P-64),N*E*STRING*(ZL-LEN(E*>,143)0*R*j 131 A*-INKEY*iIFA*»"",131ELSEA-ASC<A*)»IFA-91,E*-E*+CHR*(123)IG0T0133ELSEIF64<AA NDA<123,E*-E*+A* tPRINT»P,E*|1IFLEN <E«)<ZL,131ELSEE-LEN(E*)»G0T0140ELSEE-LEN(E*)• IFA-8ANDE>0,E*-LEFT*<E*,E-t>»G0T0133ELSEIFA-24ANDE>4,E*-LEFT* (E*, E**5)»G0T0133 132 JFA-32,E*-E*+" "»G0T0133ELSEIFA-31,E*-E*+CHR*(126)*G0T0133EL8EIFA-39,E*-E*+C HR*(92)iG0T0i33ELSEIFA<64ANDA>32,E*-E*+A«iG0T0133EL6EIFA-27,E*-E*^CHR*(91)ELSEIF A-64,E*-E*+CHR*(93>ELSEIFA-9ANDE+3<ZL,E*-E*+" "ELSE IFA-13ANDV-0,143EL8E140 133 E-LEN<E*)»PRINT»P,E*STRING*<ZL-E,143)0*R*|iIFE<ZL,131 140 IF<V-0ANDE>-ZL)0R(V-2ANDE->ZL),141ELSEIFV-10RV-2,A*(ZA)-E*+0*+R*»G0T0203ELSE 131 141 W*-INKEY*iIFW*-"",141ELSEW-ASC<W*)iIFW-B,E*-LEFT*(E*,E-l)»G0T0133ELSEIFW-24, E*-LEFT*(E*,E-3) »GOTO133ELSEIFW-13ANDV-0,143ELSEIFW-13ANDV-2,A*(ZA)-E*+0*+R*»GOT 0205ELSE141 143 A*(Z)-E*+0*+R*»NEXTZ»GOTO130 130 PRINTCHR*(13)iCLS»PRINT»64,“KORREKTUR» ’"CHR*(92)M XX' - SICHTEN DER ZEILEN AB XX"»146,.. CHR*(94)M XX» - EINFUEGEN EINER ZEILEH»210,"’K XX» - KOR REKTUR ZEILE XX"»3B4,"TEXT AUSDRUCKEN» •A»"»376,"AUF CASSETTE SPEICHER Ni ’C'" 131 PRINT»768,"VON CASSETTE LESEN* *L’"»913,"'ENTER* - SCHREIBMODUS"|»98 0,"E - PROGRAMMENDE"! 133 W*-INKEY*»1FW*-"M,133ELSEW-ASC(W*)»IFW-10,160ELSEIFW-9,173ELBEIFW-l3,CLS*©OT 0 100ELSEIFW*-"K",190EL6EIFW*-"A",350ELSEIFW*-"C",300ELSEIFW*-"L",310ELSEIFW*-"E" ,400ELSE133 160 ZA*-"0"tPRINT»114,"NR*" } »INPUTZA*»IFZA*-"A",16BEL6EZA-VAL(ZA*>*2-21IFZA>Z,16 OELSEIFZA— 2, ZA-Oi CLSELSECLS Bild 1. Das Programmlisting für die 16-KByte-Version mit Kassettenspeicherung (MEM SIZE? 32683) 161 PRINTA*(ZA) 163 W*-INKEY*iIFW*-M",163ELSEIFW*-"K",191ELSEW-ASC(W*)»IFW-13,130ELSEIFW-10, ZA-Z A+l»IFZA-Z,ZA-O» G0T0161ELSEIFA*<Z A ) ,163ELSEPRINTA*(ZA)»GOTO163ELSE165 16B CLS»FORZV-OTOZiIFA*<Z V ) ",NEXTZVEUSEPRINTA*<ZV)»NEXTZV 169 W*-INKEY*iIFW*-"",169ELSEIFW*-"A",168ELSEIFASC(W*)-13,130EL8E169 173 PRINT»178,"NR.M|»INPUTZA»PR INT»17B,CHR*(201)|»PRINT»178,”TYP"pIINPUTR*»U*-"E I N F U E G E N"*0-1 *K*-STR*(-ZA)»IFLEN(K*)>4,K*-STR*(ZA)EL8EK*-8TRING*(4-LEN(K *),43)+K* 176 K*-K* + “-"4-R*»ZA«ZA*2-2iZ<T)-ZAiT-T + l»GOT0200 190 ZA-1»PRINT»236,"NR."|iINPUTZA* ZA-ZAJ2-2 191 U*-MK 0 R R E K T U R" 200 WW-O*IFZA-O,203ELSEIFA*(ZA-l)-""tZE-ZA-2ELSEZE-ZA-1 203 1FA*<ZA*1)-"", ZF-ZA+2ELSEZF-ZA+1 203 V-OiCLS»PRINT»19,U*" NR."ZA/2+1»64,A*(ZE)|»236,A*(ZA)j»448,N*LEFT*(K»,WW)CH R*(93)|»768,A*(ZF)|»IFQ-1,230 210 W*-INKEY*»IFW*-"",210ELSEW-ASC <W*)»K*-A* <ZA)»K-LEN<K*>IIFW-13,130ELSEIFW-32A NDK>WW+1,WW-WW*1ELSEIFW-8ANDWW>0,WW-WW-lELBEIFW-9ANDK>WW+5,WW-WW+5ELSEIFW-27,A* ( ZA)—LEFT*(K*,WW)BRIGHT * (K*,K-WW-l>»G0T0203 211 IFW-91,220ELSEIFW-31,230ELSEIFW-25,K-K+l»G0T0220EL8EPRINTS512,LEFT*(K*,WW) CH R*(93)STRING*(K-WW,32)|»G0T0210 220 ZL-WW+1»E*-LEFT*(K*,WW)*0*-RIGHT*(K*,K-WW-1)IR*-""* P-312» V-l»GOT0131 230 ZL-ZH» E*-LEFT*(K*,WW)*0*-RIGHT*(K*,6)» R*-""»P-312* V-2» Q-0*IFRIGHT*(K*,1)-"S" ,ZL-36»G0T0110ELSE110 300 CLS» PR INT»279,"S P E I C H E R N"»PRINT»390,KA*|»INPUTS*PRINT»78B,ST*iPRINT# -1,ZH,Z,T» TN-O» F0RGV-0T0Z-2STEP2*GW-GV 301 W-LEN<A*(GW))»B*-"A"+A*(GW)»IFW-O,305 303 F0RGG-1T0W*1» X-ASC(MID*(B*,GG,1))* Y-LEN(B*)»T*-STR*(GG)*IF(X>32ANDX<48)OR(X> 37ANDX<65),B*-LEFT*(B*,GG-1)+" "+RIGHT*(B*,Y-GG)«-STRING*(4-LEN(T*>,32)♦T*+6TR*(X )INE XTGGELSENE XTGG 305 B-LEN<B*)-W-l»C-W»PRINT#-!,TN,B,C,B*»NEXTGViIFT-OORGV-T,130EL8EFORGV-OTOT-1* TN-Z(GV)*GW-TN» GOT0301 310 CLS*PRINT»282,"U E 8 E N"»PRINT»390,KA*|IINPUTS* PRINT»788,ST*»INPUT#-1,ZH, Z, TiF0RGV-0T0Z-2STEP2» GW-GV»INPUT#-1,TN,B,C,B* 313 IFB-O,A*(GW)-" •'»NEXTGViG0T0130ELSEX*-RIGHT*(B*,B)»FORGG-1T0B8TEP7»Q-VAL(MID* (X*,GG, 3))*IFN0TQ-0,B*-LEFT*<B*,Q-l)4-CHR*<VAL(MID*(X*,GG+4,3>))+MID*(B*,Q+l,C+1~ 0)INEXTGG 313 A*(GW)-RIGHT*(B*,C)»NEXTGViIFT-OORGV-T,15QELSEFORGV-OTOT-1»1NPUT#-1,TN, B, C, B *» GW-TN» G0T0313 350 CLS»PRINT»472,"DRUCKER ON-LINE "|»INPUTS*PRINT»788,ST*»IFZH-122,N-10»8-3»LPR INTCHR*(13)CHR*(24)ELSEN-5»S-5»LPRINTCHR*(24) 333 C-20» FORGX—OTOZ — 1» R*-RIGHT*(A * (GX),1)»A-LEN(A*(GX))»IFA-OORA-6,NEXTGXELSEA*LEFT*(A*(GX),A-6)»IFR*-MN",LPRINTTAB(N)CHR*(27)CHR*(C)A*»C-20*NEXTGXELSEIFR*-"SM ,LPRINTTAB(S)CHR*(27)CHR*(C)CHR*(14)CHR*(27)CHR*(101)A**C-102* NEXTGXELSE357 336 G0T03S8 337 1FR*-"E",LPRINTTAB(N)CHR*(27)CHR*(C)CHR*(27)CHR*(101)A*»C-102»NEXTGXELSEIFR* -"D",LPRINTTAB(N)CHR*(27)CHR*(C)CHR*(27)CHR*(103)A*»C-104»NEXTGX 338 LPRINTCHR*(27)CHR*(C)|*IFZH-122,LPRINTCHR*<18)| 339 GOTO130 400 CLS» PR INT" 8 - LOESCHEN/NEUSTART"*PRINT" E - ENDE" 401 W*-INKEY**IFW*-"",401ELSEIFW*-"S",RUNtOELSEIFW*-"E",END 31000 DATA 42,30,64,34,213,127,33,198,127,34,30,64,42,38,64,34,242, 127,33,233, 12 7,34,38,64, 193,25,26,245,121,205,244,127,56,5,62,130,205,51,0,241,197,205,0,0, 19 3,79,254,8,192,42,32,64,43,126,254,130,192,62,8,195,51,0,245,121,246,32,205,244 51010 DATA 127,241,195,0,0,234,123,63,216,254,97,216,121,238,32,79,201 51020 IFPEEK(16526)-17IANDPEEK(16527)-127,RETURNELSEA-326B3*F0RX-AT032767*READB» POKEX,BiNEXTiPOKE16326,171iPOKE16327,127»A-USR(O) HEFT 23 Februar 1938 14 1 Zeichen gelöscht, duich nachfolgend eingegebenes Zeichen ersetzt. ■1 Zeichen ohne Ersatz gelöscht. - Cursor 5 Zeichen vor gäwiH SCU^l 1 Zeichen wird eingefügt ’ (nachfolgend einzugeben) Zeile w ird ab Cursor bis Ende - gelöscht. Neueingabe dieses Teiles. Bild 3. Die Sondcrtaslen des Korrektur modus 5 G0SUB51000 10 C L S : C L E A R 1 5 0 0 0 : D I M A * ( 1 3 3 ) , Z ( 4 0 ) : D E F I N T A - Y : P R I N T 5 8 6 , "T E X T S Y S T E M":PRIN T S T R I N G * ( 6 4 , 4 5 ) : F 0 R Z - 0 T 0 2 0 0 : N E X T : G * * S T R I N G * ( 4 , 176> «H * - C H R * ( 1 4 3 ) » I * - C H R * ( 1 4 0 ) iK * CHR*<191)iM*-CHR*(131) 2 0 N * - " ---- "*-H*+"-----1----- " ♦ H * + " -----2 -----" + H * + " -----3 — — •♦H*+**-H + C H R * (127) ♦ " — 4 --- " ♦ H * ^ “-----5 -----•■►Ht-*-"-----6 --- 4": P * - M--- S c h r i f t a t A r k e ( n j d j * j s ) ---- — — * t 'Sc h r e i b * o 4 u s b t i n d e n — -•* 25 ST*-“ > » » > > > START <<<<<<<<“ :KA*-"** Kassettenrekorder bereit " » 3 0 P R I N T » 2 1 1,G* " "G*" "G*" " C H R * ( 1 7 6 ) " “G*** " G * C H R * (176) 1275, H * I * I * C H R * (188) " "K ** “K * I * I * C H R * < 1 8 3 > M . "K*" “* * 1 * 1 * « * " "K*»339,H*rt*M*rt*" "M*fl*H*M*" "« * " “M * - "M*** "M*** MM 6 0 F Q R Z - 0 T 0 6 5 0 * N E X T : P R I N T » 1 4 3 , S T R I N G * (34 , 1 7 6 ) *207, K * » 2 4 0 , K * » 2 7 1 ,K * » 3 0 4 , K * » 3 3 5 , K * f3 6 8 , K * » 3 9 9 , S T R I N G * (34,131) 7 0 F O R Z - O T 0 5 0 0 : N E X T j P R I N T » 1 9 4 , " E i n " » 2 6 0 , **Programm"S331, " v o n " » 3 0 9 , "F R A N K " » 3 7 1 , "S A N D L 0 S " «F 0 R Z - 0 T 0 4 0 0 : N E X T * P R I N T :P R I N T '*Haupt 2 e i l e n l ä n g e i ": P R I N T <P R I N T " 7 2 Z e i c h e n / Z e i 1 e ------------- n ( o r m a l ) " 80 PRINT* 1 2 2 Z e i c h e n / Z e l l e ------------- e ( n g )":P R I N T i P R I N T : PRINT** Bit te A n f a n g s b u c h s t a b e n d r ü c k e n !" 9 0 W * - I N K E Y * s I F W * — m “ ,9 0 E L S E I F W * — " n “ , Z H - 7 2 E L S E I F W * - " e " , Z H - 1 2 2 E L S E 9 0 99 F 0 R Z -OTO132STEP2 100 0 * » S T R * ( - ( Z / 2 + 1 ) ) : 0 * - S T R I N G * ( 4 - L E N ( 0 * > , 4 5 ) + 0 * + " - " « P - * 8 3 2 : Z L - Z H » C L S i P R I N T I 7 6 8 , P*j:E*-"" 103 R * « I N K E Y * s I F R * - " “ , 1 0 3 E L S E I F A S C (R*> -13, R * - " n " «G 0 T 0 1 0 4 E L S E I F R * - " d " , 1 0 4 E L S E I F R * -"e", 1 0 4 E L S E I F R * « Ms “ , Z L - 3 6 E L S E I F R * - " *", 1 5 0 E L S E 1 0 3 104 C L S * Z Z - 0 « F 0 R Z 1 “ Z - 1 T 0 Z - 2 4 S T E P - 1 i I F Z K O , 1 1 0 E L S E Z 2 - L E N (A * <Z 1) ) i IF Z 2 > 0 , Z 3 - I N T (Z2 /64)+l» Z Z - Z Z + Z 3 * I F Z Z > 1 2 , 1 1O E L S E P R I N T 1 ( 7 6 0 - Z Z * 6 4 ) ,A * ( Z t ) | i N E X T Z l E L S E N E X T Z l 110 P R I N T i ( P - 6 4 ) , N * E * S T R I N G * ( Z L - L E N ( E * > , 1 4 3 ) 0 * R * | 131 A * - I N K E Y * : I F A * - " * * , 1 3 1 E L S E A - A S C (A « ) i I F 6 4 < A A N D A < 12 7 , E * - E * + A * : P R I N T » P , E * j « IF L E N ( E * ) < Z L , 1 3 1 E L S E E - L E N (E * ) *G O T O 14 0 E L S E E - L E N <E * ) i I F A - 8 A N D E > 0 , E * - L E F T * ( E * , E - l ) * G O T O 1 33ELSEIFA-24ANDE>4,E*-LEFT*(E*,E-5)«G0T0133 132 I F A - 3 2 , E * - E * + " - » G 0 T 0 1 3 3 E L S E I F A < 6 4 A N D A > 3 2 , E » « E * + A * i G 0 T 0 1 3 3 E L S E I F A - 9 A N D E + 5 < Z L ,£*-£*♦" "ELSEIFA-13ANDV-0,143ELSE140 133 E - L E N ( E * ) « P R I N T » P , E * S T R I N G * ( Z L - E , 1 4 3 ) 0 * R * | i I F E < Z L , 131 140 I F ( V - O A N D E > - Z L ) O R ( V - 2 A N D E - > Z L ) , 1 4 1 E L S E I F V - 1 0 R V - 2 , A * ( Z A ) - E * + 0 * + R * « G 0 T 0 2 0 5 E L S E 131 141 W * - I N K E Y * i I F W * - " " , 1 4 1 E L S E W - A S C ( W * > i I F W - 8 , E * - L E F T * ( E * , E - l ) i G 0 T 0 1 3 3 E L S E I F W - 2 4 , E * - L E F T * ( E * , E - 5 ) * G O T O ! 3 3 E L S E I F W - 1 3 A N D V - 0 , 1 4 3 E L S E I F W - 1 3 A N D V - 2 , A * (Z A ) - E * + 0 * + R * i G O T 0205EUSE141 143 ’A » ( Z > - E « + 0 « + R t s N E X T Z s G Q T 0 1 5 0 1 5 0 P R I N T C H R * ( 1 5 ) : C L S : P R I N T § 6 4 , “K o r r e k t u r * XX* - Sich t e n de r Z e i l e n a b X X " » 1 4 6 , " C H R * ( 9 4 ) " XX* - E i n f ü g e n e i n e r Z e i l e " » 2 l O , k X X ’ - K o r r e k t u r Zex le X X " 1384, "Tex t a u s d r u c k e n r v a* " 1576. "Auf C a s s e t t e speichern: 151 P R I N T 4 7 6 8 , "V o n C a s s e t t e lesen: * 1' **1913, " * ENTER* — S e h r e i b m o d u s " ;198 0, “e - Programmenda"; 1 55 W * - I N K E Y * i IFW * - " ", 1 5 5 E L S E W - A S C (W*) i IFW-35, 1 6 0 E L S E I F W - 1 2 3 , 17 S E L S E I F W - 1 3 , C L S : G O T 0 1 0 0 E L S E I F W » - ,*k*', 1 90E L S E I F W * - " a “ , 3 5 0 E L S E I F W * - " c " , 3 0 0 E L S E I F W * - " l ", 3 1 0 E L S E I F W * - " e “ ,4 0 0 E L S E 1 5 5 1 6 0 Z A * - " 0 H »P R I N T » 114, " N r . : INPUTZA*: I F Z A * - " a " , 1 6 8 E L S E Z A - V A L (ZA*) *2-2: IFZA>Z, 16 O E L S E I F Z A — 2, Z A - O : C L S E L S E C L S 161 P R I N T A * ( Z A ) 1 65 W * - I N K E Y * : 1 F W * - " ", 165E L S E IFW*- " K " , 1 9 1 E L S E W - A S C (W*) : IFW-13, 1 5 0 E L S E I F W - 1 0 , Z A - Z A + l : I F Z A - Z , Z A - 0 : G 0 T 0 1 6 1 E L S E I F A * ( Z A ) - " M , 1 6 5 E L S E P R I N T A * (Z A ) :G O T O 1 6 5 E L S E 165 1 6 8 C L S : F O R Z V » O T O Z : I F A * ( Z V ) * " " , N E X T Z V E U S E P R I N T A * ( Z V ) :N E X T Z V 169 W * » I N K E Y * : I F W * - " " , t 6 9 E L S E I F W * - " a " , 1 6 8 E L S E I F A S C ( W * > » 1 3 , 150ELSE169 1 7 5 P R I N T » 178, "Nr. " j « INPUTZA: P R I N T » 178, C H R * (201) P R INT» 178, “T y p " ; : I N P U T R * : U * « " E I N F U E G E N " : Q - 1 »K*«S T R * (-ZA) : I F L EN(K») >4, K * - S T R * (ZA) E L S E K * » S T R ING» (4-LEN (K * ) ,45)+K* 176 K*-K*-*-"-"-*-R*i Z A - Z A * 2 - 2 : Z <T) -ZAt T - T + l :G 0 T 0 2 0 0 19 0 Z A - 1 : P R I N T » 2 3 6 , " N r . " j * I N P U T Z A : Z A - Z A * 2 - 2 191 U * - “K O R R E K T U R " 200 WW-O:IFZA-0,203ELSEIFA*(ZA“ 1)-M",ZE-ZA-2ELSEZE-ZA-1 2 0 3 IF A * (ZA+1 )■**", ZF"ZA-*-2ELSEZF*ZA*l 2 0 5 V - 0 : C L S : P R I N T S 19 ,U * “ N r . " Z A / 2 + 1 » 6 4 , A * (Z E ) ; 5 2 5 6 , A* (ZA)j 5 4 4 8 , N * L E F T * ( K * , W W ) C H R * (95 ) j»76 8 , A * ( Z F ) ; : IFQ-1,230 2 1 0 W * « I N K E Y * : I F W * - " " ,2 1 0 E L S E W - A S C (W*) :K * - A * (Z A ) :K - L E N (K*) : IFW-13, 1 5 0 E L S E I F W - 3 2 A N D K > W W + 1, W W - W W + 1 E L S E I F W —8 A N D W W > 0 , W W - W W — 1 E L S E IFW«9ANDK>WW-*-5, W W - W W + 5 E L S E I F W — 27, A * ( ZA)- L E F T * (K*,WW)+RIGHT*(K*,K-WW-1) *G0T0205 2 1 2 I F W — 123, 2 2 0 E L S E I F W - 3 1 , 2 3 0 E L S E I F W - 2 5 , K - K + l :G 0 T 0 2 2 0 E L S E P R I N T J 5 1 2 , L E F T * (K*, WW) C H R * (9 5 ) S T R I N G * ( K - W W , 3 2 ) | : G 0 T 0 2 1 0 2 2 0 Z L - W W + l : E * - L E F T * ( K * , W W ) :0 * - R I G H T * ( K * , K - W W - 1 ):R * - " " : P —5 1 2 : V - 1:G O T O 131 2 3 0 Z L - Z H i E * - L E F T * ( K * , W W ) : 0 * - R I G H T * ( K * , 6 ) :R*-**" t P-512: V-2: Q»0* IF R I G H T * (K*, l)-"s" ,Z L - 3 6 i G 0 T 0 1 1 0 E L S E 1 1 0 3 0 0 CLSi P R INT »279, "S P E I C H E R N" iP R INT »390, KA*j I INPUTS: P R INT »788, ST*: P R I N T # -1', Z H , Z , T i T N - 0 »F O R G V - O T O Z - 2 S T E P 2 1 G W - G V 30 1 W - L E N ( A * (GW) )» B * — **A " * A * ( G W ) : I F W - 0 , 3 0 5 3 0 3 F O R G G - l T O W + 1 : X - A S C (MID* (B*, GG, l)) * Y - L E N (B*) : T * - S T R * ( G G ) : IF (X>32ANDX<48) O R (X> 5 7 A N D X < 6 5 ) , B * - L E F T * ( B * ,GG-1)+" " ♦ R I G H T * (B*, Y-GG) + S T R I N G * (4-LEN (T*> ,32) ♦ T * + S T R * ( X )* N E X T G G E L S E N E X T G G 3 0 5 B — L E N (B*) — W — 1: C-W* FORINT#— 1, TN, B, C, B*: N E X T G V : IFT—O O R G V — T,.150ELSEF0RGV-0T0T— 1: T N - Z ( G V ) :G W - T N : G 0 T 0 3 0 1 3 1 0 CLS: P R I N T » 2 8 2 , "L E S E N" :P R I N T 5 3 9 0 , KA*; : INPUTS: P R I N T 5 7 8 8 , ST*s I N P U T # - l , ZH, Z, T: F O R G V - O T O Z - 2 S T E P 2 : G W - G V j I N P U T # - 1 ,T N , B , C , B * 3 1 3 I F B - 0 , A * (GW) -"** sNEXTGV: G O T O 1 5 0 E L S E X * - R I G H T * (B*, B ) :F 0 R G G - 1 T 0 B S T E P 7 : Q - V A L (MID* (X*, GG, 5) ) I I F N O T Q — 0, B * — L E F T * (B*, Q — 1) + C H R * <VAL (MID* (X*, G G + 4 , 3) ) )♦MID* (B*, Q + l ,C'**lQ ) jN E X T G G 3 1 5 A * ( G W ) - R I G H T * (B*,C) sNEXTGV: I F T - O O R G V - T , 1 5 0 E L S E F 0 R G V - 0 T 0 T - 1 * I N P U T # - 1, TN, B,C, B * : G W - T N » G 0 T 0 3 13 3 5 0 CL S « P R I N T S 4 7 2 , " D r u c k e r O N - L I N E " j : INPUTS: P R I N T 5 7 8 8 , ST** I F Z H - 1 2 2 , N - 1 0 : S » 5 j L P R IN T C H R * (15)C H R * (24)E L S E N - 5 :S - 5 *L P R IN T C H R * (24) 3 5 5 C — 20: F O R G X - O T O Z - 1 :R * « R I G H T * (A * (GX ) , 1) : A - L E N (A* (GX) ) i I F A - O O R A - 6 , N E X T G X E L S E A * L E F T * (A* (GX) , A — 6) i I F R * - " n " ,L P R 1 N T T A B (N) C H R * (27) C H R * <C) A*: C-20: N E X T G X E L S E I F R * - " ® " ,L P R I N T T A B ( S ) C H R * (27)C H R * ( C ) C H R * (14)C H R * (27)C H R * (69)A * i C - 7 0 « N E X T G X E L S E 3 5 7 356 G0TQ358 3 5 7 I F R * - He", L P R I N T T A B (N) C H R * (27) C H R * (C) C H R * (27) C H R * (69) A * : C - 7 0 : N E X T G X E L S E I F R * - " d ", L P R I N T T A B (N )C H R * (27)C H R * (C ) C H R * (27)C H R * (71)A * i C - 7 2 :N E X T G X 3 5 8 L P R I N T C H R * (27)C H R * ( C ) j i I F Z H - 1 2 2 , L P R I N T C H R * ( 1 8 ) j 3 5 9 G O T O 150 40 0 C LSiPRINT" s - L ö s c h e n / N e u s t a r t " i P R I N T “ e - Ende" 4 0 1 W * - I N K E Y * : I F W * - " ",4 0 1 E L S E I F W * — " s " ,R U N 1 0 E L S E T F W * — " e “ ,E N D 5 1 0 0 0 D A T A 3 3 , 2 2 6 , 2 5 5 , 3 4 , 3 0 , 6 4 , 33, 1 3 2 , 2 5 5 , 3 4 , 2 2 , 6 4 , 2 0 5 , 2 2 7 , 3 , 1 9 7 , 2 1 3 , 8 7 , 2 5 4 , 3 2 , 3 2 , 17,58, 1 2 8 , 5 6 , 1 8 3 , 40,11,58, 2 0 9 , 2 5 5 , 238, 32, 50, 209, 255, 175,24,47, 1 2 2 , 2 5 4 , 3 1 , 4 0 , 2 4 8 , 5 8 , 6 4 , 5 6 , 2 5 4 , 2 , 3 2 , 1 6 , 1 2 2 , 3 3 , 2 1 0 , 2 5 5 , 1,8 , 0 , 2 3 7 , 177, 32,5 , 1 , 7,0,9, 8 6 , 1 2 2 , 2 3 0 , 2 2 3 5 1 0 0 2 D A T A 2 5 4 , 6 3 , 5 6 , 1 1 , 2 5 4 , 9 4 , 4 8 , 7 , 1 2 2 , 3 3 , 2 0 9 , 2 5 5 , 174, 24,1,122, 2 0 9 , 1 9 3 , 2 0 1 , 0 , 6 5 , 7 9,85,97,111,117,83,67,91,92,93,123,124,125,126 ,31,221,110,3,221,102, 4,218,154,4 , 2 2 1 , 1 2 6 , 5 , 1 8 3 , 4 0 , 1 , 1 1 9,121,254,32,218,6,5,254, 128,210, 166,4,195,125,4 5 1 0 0 4 I F P E E K (16526) - 1 1 9 A N D P E E K (16527) - 2 5 5 R E T U R N E L S E F 0 R X — 13 6 T 0 - 11 R E A D B «P O K E X , B* N E X T X s P O K E 1 6 5 2 6 , I 19«P 0 K E 1 6 5 2 7 , 2 5 5 « A - U S R (0) Bild 4. Hier die 48-KByte-Version für TRS-80 mit Kleinschrift und deutschem Zeichensatz (MEM SIZE? 65399) Zeichengenerator für Nadeldrucher TRS-80 erstellt Hardcopy Eine Hardcopy vom Bildschirm erstellt die kleine Maschinenroutine von Bild 1. tooo FOR J - 133*0 TO 14320 « T E P *4: FOR 1 - J TO 4*631 I F PCCK ( I ) >122 THEN L P ftlK T 0 « * < 4 2 > M t F P E t K t I ) -< 1 2 2 T fC H L P « I N T C M R « < P C E X ( I» I 1010 NEXT i s l p r i m t * *:» C K T J Bild 1. Eine Bildschirm-Hardcopy erstellt d i e « « TR5-80-Programm Dazu ist der im Level-Ü und Level-IüBasic nicht benutzte Befehl „NAME“ im Direktmodus oder von einem Programm aus aufzurufen. Dadurch bleibt der Be* FFC0 FFC3 FFC6 FFC? FFCC FFCF FFD1 FFD3 FFD7 FFDfl FFDC FFDD FFE0 FFE1 FFE3 FFES 21 22 22 22 CD 16 DD 06 DD DD CS CD CI DD DD 10 CO 8E Bl BF 94 00 21 3F 4E ES FF 40 40 4t 03 . 00 3C 00 -5F 30 El 23 F0 FFE7 DD ES FFE9 cs FFEfl DS FFEB CD 94 03 f f e e Dl FFEF CI FFF0 DD El FFF2 DD 23 FFF4 14 FFF5 3E 0F FFF7 BR FFF8 20 DB FFFfl C3 CC 06 0009 0001 0002 0003 0004 000S 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 O017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 fehl USR(O) für andere Zwecke frei. Je nach Speicherumfang muß die Starta- i 1 dresse geändert werden. Zu ändern ist eventuell auch die Dnickertreiberadres- • se (037E6H). Eine Hardcopy in Basic ermöglicht das Programm von Bild 2. Dabei kann ln begrenztem Umfang auf nicht graÜkf&higen Druckern Grafik ausgegeben wer« den. Alle Zeichen, deren Code größer als 122 ist, werden näm lich als Sternchen CHR.(42) - gedruckt Natürlich kann man an seiner Stelle Jedes andere Zeichen verwenden. W olfgang Bethmarui ORG 0FFC0H ; HARDCOPY FITER TRS-80'VG^KOMTEK ; W.BETHPWHH 11.1989 HL »0FFC0H LD Stirtsdresse < 408EH >/HL SytteM tertedress« LD <40BIH>,HL MEN-SIZE ««tz «n LD <418FH>,HL* Zsig«r*lises*vertoiegen LD UP: CR euf Drucker CflLL 394H D «u f P setzen LD D, 0 IX,3C00H 1. Bilds cM replatx LD LD B.3FH PRINT noch 63 Zaichen/Zeile C,<XX> *. S ild sc h ir« nsch C laden LD LOOP SpeicherInhalt« retten PUSH IK PUSH BC CALL 38SFH Druckertrelberadr. rfolen BC POP zurück voe Stack POP IX INC IX nächster B ild sch iiap lstz DJNZ LOOP S ch leife noch 63 H l , jl.S C H L E IF E Speicherinhalte r * tt«n PUSH IX PUSH BC PUSH DE CflLL 394H UP: CH «u f Orvcker DE POP zurück voe Stack POP BC POP IX IX INC nächster B ild sch irep lati INC D Zähler für CR A.0FH LD noch 15 Zeilen CP D fe r t ig ? NZ,PRINT JR sonst S ch lsife 15 aal 6CCH JP zurück ins Bsaic END Bild 2. Sogar begrenzt« GrafikmögUchkelten dieses Buic-Progrmmm Selbst die einfachsten Nadeldrucker können Punktgrafiken drucken. Damit setzt nur die eigene Phantasie dem Zeichenvorrat des Druckers Grenzen. Braucht man ein mathematisches Son derzeichen oder ein sonstiges Symbol, beginnt die Gestaltungsarbeit mit Papier und Bleistift. Vor jedem Versuch müs sen die Punkte dann noch in ein Bitmu ster umgesetzt werden. Diese Arbeit kann das abgedruckte Basic-Programm (Bild 1j erleichtern. Mit den Tasten des Zahlenfeldes steuert man die Punkte an, die gesetzt oder gelöscht werden sollen. Leider sind die Grafikpunkte des TRS-80 nicht quadratisch - die auf dem Bild schirm gemalte Figur wirkt also leicht verzerrt. Ein Tastendruck genügt, um das Resultat aufs Papier zu bringen. Im übrigen erklärt sich das Programm sel ber. Es wurde auf einem TRS-80. Model I geschrieben, dürfte aber nach Anpas sung der Grafikbefehle (set (x, y)/reset (x,y)/point (x, y): Koordinate(x, y) set zen/löschen/prüfen) auch auf den m ei sten anderen Rechnern laufen. Bei ein i gen Druckern (Star DP-510 u. a.) können nur sieben Bit direkt angesteuert wer den. Der oberste Punkt muß dann über eine zusätzliche Abfrage (IF P (I)>127 THEN ...) angesteuert werden. Von Drucker zu Drucker verschieden sind auch die Befehle zum Aufruf der Grafik. Sie sind in der DATA-Zeile abge legt. Als Beispiele für nützliche Sonderzei chen mögen Sum m enzeichen, Alpha, das Integralzeichen und das Zeichen für Unendlich genügen (Bild 2). Henning Schulz-Rinne 16 40 6B 68 195 129 165 0 0 2 1 1 28 34 34 34 40 129 126 20 VO CLEAR lOOiCL6lD6FINT X, V , I , J , H ,P,CiDEFBTR E 100 N X -lO iD lM P (M X ). C ( 3 ) iREN MX - Z *h l d mr S p a lte n 110 FOR 1-0 TO SiREÄD C (I)iN E X T 120 PRINT "B ed ien u n g Ober n u m e r is c h «« T a s t e n f e l d ! " 130 PRINT " ♦ «u * (91 (7 ) 140 PRINT - I ISO PRINT " I H ä r t« 140 PRINT Punkt 170 PRINT " I 180 PRINT " I 15 «c h «n 190 PRINT 200 PRINT “ I 210 PRINT - I 220 PRINT 230 PRINT - I au sI Punkt I (ENTER) d ru cken t •e tze n 240 PRINT *1 I" 230 PRINT ■«A l l » « 1 6 «c h «n i r / * - T « « t « l E n d «i 260 PRINT 270 PRINT Zua A nfängen T a a te d rü c k e n "! 200 E-INKEYSi IF E - “ THEN 280 290 CLS 300 FOR X-0 TO MXtSET ( X, B )t NEXT ' 310 FOR Y -0 TO 8iBET (NX+1, V ) * NEXT 320 X-O iY-O 330 S E T (X ,9 H S E T (M X + 2 ,Y ) 340 E «*IN K E Y »tIF E -" " THEN 340 350 IF <ASC(E)<44> 'OR CASC(E>>56) THEN E - “ MiGOTO 340 360 R ESET(X.9 ) iRESET(MX* 2 , Y) 370 ON A S C (E )-4 4 GOTO 6 4 0 .3 8 0 ,3 2 0 ,5 3 0 ,5 1 0 ,4 0 0 ,3 3 0 ,4 2 0 ,4 4 0 ,4 7 0 ,3 3 0 ,4 9 0 380 IF PO IN T<X , Y )« 0 THEN P (X >- P (X > * 2 A (7 —Y > » S E T (X , Y ) 390 60T0 470 400 IF Y<7 THEN Y -Y + l ELSE Y -0 410 60T0 330 420 IF X>0 THEN X -X -l ELSE X-HX 430 GOTO 330 440 IF X>0 THEN X -X -l ELSE X-NX 450 IF POI NT ( Xt Y ) THEN P ( X ) - P ( X ) - 2 * (7 - Y )iR E S E T (X ,Y ) 460 GOTO 330 470 IF X<MX THEN X-fc + 1 ELSE X-0 480 GOTO 330 490 IF Y>0 1>CN Y -Y ~ l ELSE Y-7 BUd 1. 500 GOTO 330 Das Programm hilft 510 P (X >-OlFOR 1-0 TO 7 1RESET (X , I >1NEXT*GOTO 330 Sonderzeichen 520 FOR 1-0 TO N X iP ( I >-OlNEXTiCLß»GOTO 300 530 PRINT 1 5 1 2 ,I»FOR 1-0 TO N XiLPRINT P X ( I ) 11NEXT zu entwerfen 540 FOR 1-0 TO 3 550 IF PEEK(1 4 3 1 2 )—63 THEN POKE 1 4312,C<I> ELBE 550 560 NEXT I 570 FOR !«*0 TO NX 5B0 IF PEEK (1 4312) -6 3 THEN POKE 14312, P U ) EL8E 580 590 NEXT I 600 LPRINTILPRINTiGOTO 330 610 REH E « f o l g e n d i e t u r .I n l t l « 1 1 « 1 eru n g d e « D ru ckers n f i t i g « 620 REN O sten (NX-BO, G raph ik d o p p e lt e r D ic h t e , 11 p l x e l « ) 630 DATA 2 7 ,7 6 ,1 1 ,1 2 6 640 END 16 40 68 68 40 16 • 153 129 129 129 129 129 12B 128 64 0 O / 8 20 34 0 0 O e HEFT S3 Februar 1988 18 0 £ BUd 2. Eingaben und Ergebnisse W e r - s u c h e t , d e r * s o l X -f i n d e n (angebli c h ) Zunächst einmal: All d e n e n , d i e d i e s e s B i b e l z i t a t G l ü c k l i c h e s (welches, wie ich hoffe, 20 lesen, wünsche ich noch N e u e s J « ih r inzwischen noch nicht zu alt ein 1 *988 , g ew or den i st). Denjenigen, die dies hier nicht lesen, brauche ich mehr zu wünschen — d e n n s i e haben b e r e i t s G l ü c k ! Nur f ü r d i e U n g l ü c k l i c h e n , d i e bei E m p f a n g f r e m d e r sich mit den sogenannten das nicht Disketten P D R IV E s herumquälen, dürfte das folgende vielleicht interessant sein <v o r a u s g e s e t z t , sie besitzen noch so einen antiquierten Com puter wie ich, der mit NEWDOS oder G — resp. H —DOS arbeitet!) "Als ich noch — der 'W a l d b a u e r n b u b ' w a r . . . " h ä t t e ich fast mit Peter Rosegger (kein Club m i t g l i e d ! ) gesagt; also: " A l s i c h n o c h e i n D i s k o t h e k a r w a r w (in L a u f f e n e r Originalton: e i n D i s k e t t o t h e k a r ), h a b e i c h m i c h oft genug damit herumge quält, eine Diskette, deren PDRIVEs nicht angegeben waren, z u m L a u f e n ( d i e s m a l m i t n u r e i n e m ' f ') z u b r i n g e n . (1.A n m . : D i e s wa r aber nicht der G r u n d für die Aufgäbe dieser Aufgabe; ich habe dabei manches gelernt, u.a. eben das, worüber ich hier zu b e r i c h t e n mic h anschicke. * E n d e der 1.A n m . ) Heute plagt mich d a s P r o b l e m (das ü b r i g e n s auch von "ID/CMD" keineswegs immer gelöst wird!) nur noch selten. Zum Bei spiel, wenn ich versuche, eine Diskette zu lesen, auf der überhaupt nichts drauf i s t •.• 0 G o t t , i s t d a s e i n K r a m p f ! W i e erkennt man die Leere einer Diskette?? Ich b e d anke mich für die Lehre, die mir hoffentlich jemand darüber erteilt! Es geht kaum etwas über eine solche Leerelehre! Ein lieber C l u b k a m e r a d s c h i c k t e mir 5 0 D i s ketten, die ich mir ansehen durfte, bevor er s ie seiner neuen W A A übergab. Ich entschloß mich prompt zu einer Sitzblockade und saß etwa 3 Tage (ohne weggetragen zu werden! Nicht einmal von meiner F r a u . ..> Als sich die Leseproblematik bei diesem Unternehmen wieder einmal häufte, erinnerte ich mich des hervorragenden Buches von GROSSER (;■ RöCKRATH-Verlag) , u n d s t u d i e r t e d o r t die S e i t e 4 — 3 (was soviel wie S e i t e 3 von Kapitel 4 heißen soll, nicht etwa Seite 4 bis 3! Anscheinend h a t t e GROSSER Nachträge v o r g e s e h e n (sind s i e e r s c h i e n e n ? ) . D ort ist nach z u l esen, wo auf einer ("normalen") Diskette diese verdammten “ ^ D R I V E - P a r a m e t e r " stehen. (2. A n m . : I c h h a l t e diese Bezeichnung für unsinnig. Was soll "PDRIVE" anderes sein als die Abkürzung für "Parameters of D r i v e " ? A l s o ist ' P D R I V E - P a r a m e t e r ' ein schwarzer Rappe. Ich ü b e r s e t z e das g r u n d s ä t z l i c h mit " D r i v e - P a r a m e t e r * Ende der 2.A n m . ) Mit diesem Erwerb unumstößlicher W a h r h e i t e n (danke, großer GROS S E R ! ) g e l a n g es mir dann doch, sämtliche 50 Disks zu le sen — a l l e r d i n g s mit Ausnahme jener, auf denen vermutlich gar nichts stand. SUPERZAP zeigte dennoch einen S e k t o r i n h a l t an, d e n GROSSER o f f e n s i c h t l i c h n i c h t e r f a ß t h a t . . . Da mir r.Z. kein besserer jenen, d ie ebenso hilflos ich, das Orakel verraten e r h e b e n ) C W o Pr&ut***. INFO-Beitrag einfällt, vor ihrer Sphinx sitzen, (ohne einen A n s p r u c h auf Qar : m ö c h t e ich wie einst DELPHI zu Die Drive-Parameter e i n e r D i s k e t t e s i n d im 3 . S e ktor, d.i. der relative Sektor 2 ( D R S 2) gespeichert, and zwar in j e d e r 16-Eyte-Zeile eine Parameter— Bruppe, jeweils für die L a u f w e r k e 0 b i s 3 s o w i e d i e P s e u d o - L a u ^ e r k e A b i s 9. Dieser Sektor läßt sich "mit Hülfe von SUPERZAP" (jawohl, mir wird gan z -feyerlich z u m u t e ) bei e i n e r normalen Diskette st e t s lesen. Ich Qebe hier immer vor, daß d i e D i s k e t t e "normal" sein muß. Es gibt andere, z.B. GENIETEXT, wo das nicht geht. IZENDER h a t sie weitgehend kopiergeschützt durch Umfunk tionierung wichtiger Strukturen.) Was die einzelnen B y t e s b e s a g e n , i n t e r e s s i e r t in d i e s e m Z u sammenhang nur insoweit, als es A u s k u n f t über die gesu c h t e n verfl-, verzwickten Parameter gibt. Und das habe i c h in d e r nachstehenden Tabelle in d e r Reihenfolge zusammengestellt, d i e f ü r d e n f o r s c h e n F o r s c h e r r e l e v a n t ist. daß ei n jeder- schnei 1erDer>n Zei tvergeudung ist 'ne * Was TSCRIPS ni cht (Ein V e x i e r r ä t s e l finde, Sünde ! kann ?) W e n n d i e s e s INFO erscheint, steht D s t e r n vor der Haustür. Das ist die Zeit, in der das Suchen allgemeine Fröhlichkeit verbreitet; nicht nur unter Kindern. Drum laßt uns den Kindern gleich tun! (Denn “. . . d e r s o l l f i n d e n . . . ") Es geht um Zeichen g e s t a l t u n g . Aber diesmal heißt der Hase, der die Eier legt, nicht TSCRIPS, auch nicht NEUSCRIPT o d e r a n d e r s w i e. kann viel. Die Tastenfolge "eP“ erlaubt ein sofortiges Umschalten in den Z e i c h e n m o d u s , in dem man Zeichen in e i n e r Bxl2—Matrix entwerfen oder vorhandene »ehr schnell ändern kann — sogar während «an einen Text schreibt — so daß auch für den in A r b e i t b e f i n d l i c h e n T e x t in a l l e r K ü r z e belie bige F a n t a s i e g e b i l d e zur Verfügung stehen, die man, wenn sie ni c h t m ehr b e n ö t i g t werden, auch s o f o r t wieder löschen kann. Ich halte dies für einen besonderen Vorzug von TSCRIPS , weil ich für Mathe-Texte, manchmal aber auch für Briefe, viele So n d e r z e i c h e n (manchmal auch "Spaßvögel") brauche, die e s im i n t e g r i e r t e n Z e i c h e n v o r r a t n a t ü r l i c h n i c h t gibt. TSCRIPS (Anmerkung: GEHIETEXT b e s i t z t diesen Mo d u s auch| der ist aber sehr viel u m s t ä n d l i c h e r anzuwenden und z e r s t ö r t m e i s t e n s den laufenden Text. A nder* Te x t s y s t e m e m i t d i e s e r “f a c i l i t y “ - d e u t s c h : " F a z i l i t ä t “ sind mir nicht bekannt.) Identifizierung Die Drive—Parameter TI / TD / TC / SPT / TSR / GPL PD's (bzw. der für GENIE« / DDSL / DDGA TI / TD / SP / SEK / SUZ / E1B / / AEIVi s t e h e n in D R S 2 in d e r d e r J e w e i l i g e n r e l . L a u f w e r k — N r . e n t s p r e c h e n d e n Zeile; für das S y s t e m l a u f w e r k O in Z e i l e O usw. Es gilti Ii. “ > Byte 2 in b i n ä r e r Bit " " Darstellung 7 gesetzt 6 5 entspricht! " " TI - H TI - K TI - M 001 011 entspricht! “ TI TI « A - B JI - C Bittriade 4-3-2 « < I 101 OOO Bit 1 + O « B y t e Ei interpretieren! Wenn Bit “ TI - E " ERROR Track Stepping Rate 3 gesetzt, dann TD bs y B y t e F - O O Ol TD - A B IE --> Byte 3 gibt die Anzahl Tracks SPT ■**> Byte 4 gibt die Anzahl Sektoren TSR “ *> Byte C gibt die GPL — Byte 5 gibt die Anzahl BPSL =•> Byte O gibt den PP5A Byte 9 gibt die Anzahl der de« zugeteilten > “ > D i s k - -Typ: Byte 7 l* t g .? g ibt Track Stepping (Spuren) Pro Rate Track an (Spurwechselgeschw Granules Pro Lump an Darstellung Bit! 7 I 8" i 5" & DS SS Directory G r a n u l e s an interpretieren: 4 <) «) g e s e t z t , d a n n TI-I, S e k t o r z ä h l u n g « , TI-L, , TI-K, Spurzählung der an ‘ 'Lump“ (Block) an, in d e m d a s Directory beginnt in b i n ä r e r die Anzahl » L 02 03 04 05 0 6 07 C D E F B H wenn dann Disktyp sonst *) w e n n 2> *) TI Lumps auf der 2 *) *) i •) ») a b i. n i, M i. Diskette 0 gesetzt, DD SD sonst ab 0 " 0 ii > o an. In TSCRIPS kann man die selbst gebauten Zeichen auch schnell nach links, rechts, oben, unten verschieben. Rotieren, Dehnen und Spiegeln geht nicht. W o l l t e nan Zeichen z.B. ua ei nen Winkel drehen oder vergrößern/verkleinern, so «uß «an sie mit D0THR1TER entwerfen und mit " MAHIPULATE “ einem Zusatzprogramm manipulieren. DOTURITER und D0TPR1HT erfordern jedoch viel Zeitaufwand. Will man mehr produzieren, als die genannte Fertig-Software hervorbringt (pro-duz i e r t = "vor— f ü h r t * } , s o b e s i n n e m a n s ich auf das eigentliche Werkzeug, daß - o Gott, KaJott, jetzt erliegst Du auch schon TSCRIPS 's w u n d e r v o l l e r dem Trend; aber ich lasse es trotz E d i t i e r k u n s t mal so s t ehen — a l s o noc h einmal! man besinne sich auf das Werkzeug, das solche Kunstwerke ermöglicht! d e n Hei — reß-fähigen liatrix-Nadeldrucker (so m a n hat!) Auch der Meißel des Bildhauers gehorcht nicht nur dem schöpferischen Künstler, Bondern j e d e « L a u s b u b e n , d e r i h n s c h w i n g t und den geduldigen Stein damit verunstaltet... V e r u n s t a l t e n wir! Bedienen wir uns also der Bitaustet— D r u c k r o u t i n e selbst, statt sie eine« geklauften Textprograma preiszugeben! Ich h a b e d e n E P S O N RX80. Wer e i n e n a nderen Drucker h a t (natüi— lieh nur einen HR6— fähigen, s.o.), kennt sicher sein entspre chendes Kommando und ändert mein nachstehendes Program« ent sprechend (Zeile 3&0) Die Bilder werden aus aufeinander f o l g e n d e n P u n k t s p a l t e n .(bei« RX80 zu je 9 senkrecht übereinander liegenden Punkten) zusam mengesetzt. Jeder Punkt repräsentiert ei n Bit; d i e Bitzählung beginnt unten. Der unterste Punkt ist vom U S E R (Unsereiner Spricht Englisch, Right?) nicht ansprechbar; der nächste e n t spricht B i t O, d e r o b e r s t e B i t 7. Jede Punktspalte wird als Byte codifiziert, ifäß das sich aus der Addition der gesetzten B i t s e r g i b t . E i n "!" ist also eine Spalte, in der von ganz unten gezählt — d e r d r i t t e P u n k t ( B i t 1) sowie die b bis 9 ( B i t s 4 b i s 7> g e s e t z t sind. Das ergibt das Punkte “B i t m u s t e r " 1 1 1 1 O O I O ; u n d d i e s ist g l e i c h F2Hex = 2 4 2 d e z . So erhält jede Spalte ihren Code, und da wir die Spaltencodes für unsere Bilder s e l b s t k o n s t r u i e r e n , können wir ihre A b f o l g e auch selbst manipulieren. Denn jede S p a l t e w i r d in u n s e r e m P r o g r a m m durch eine hierdurch definierte Variable repräsentiert. Es empfiehlt sich, hierfür e i n — oder noch besser zweidimensionale Feldvariable zu verwenden, denn diese lassen sich am elegante sten "manipulieren". Mit nachstehendem Programm wird das Vorgehen verdeutlicht, und zwar an einem Beispiel, das euch etwas e r — B O E T Z — 1 i c h e s vor führt, wenn ihr es ausdruckt. Wer es nicht gleich erkennt, gehe i n s B a d e z i m m e r . (Es b r a u c h t übrigens weder eine Badewanne noch eine Dusche darin zu sein. Aber d i e H a r d w a r e , d i e d a s Vexier b i l d v o n S a i s e n t s c h l e i e r t , i s t b e s t i m m t d r i n . . . *) HEFT A n m e r k u n g : D a d e r E P S O N d i e " C h a r a c t e r s “ 0 , IO, 11 u n d 1 2 v o m T R S S O n i c h t w u n s c h g e m ä ß a k z e p t i e r t , w u r d e e i n Druckei— Hilfstreiber e i n g e b a u t . C.ARHULF h a t einen besseren. A b e r d i e s e r t u t 's a u c h . ) Ich b i n *) Für sicher, das " ihr s p i e g e l t e u c h in e u r e n T e x t e n wie d e r ! * * * Ka - Jot * * * i" g e n ü g t e TSCRIPS1 . ( H. . O nn Februar 1999 O 23 Das Arbeiten mit BIT-Muster-Codes ' ' DATA DATA DATA DATA 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 365 370 375 380 390 400 405 410 420 430 440 450 460 470 DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA o. 0, O, O, 0, O, o, O, 0, O, O, o, o , 129, 255, 129, O, O, O 255, 16, 40, 68, 130, 129, 1, O 255, 1» ^t 1 ® 255, 64, 48, 8, 4, 2, 255, O 255, 132, 132, 132, 132, 72, 48, O 255, 136, 136, 140, 138, 81, 33, 0 98, 145, 145, 145, 137, 137, 70, O 128, 128, 128, 255, 128, 128, 128, 0 252, 2, 1, 1, 1, 2, 252, O 192, 48, 12, 3, 12, 48, 192, O 0, o T E X T : A B D E ’ ' ' ' • • ■ • ' • I K L N P R S T U V Zwischnraum • DATA1,7,7,4,8,15,5,11,12,15,3,1,11,15 DAT A3,4,8,6,4,8,15,4,10,7,1,13,2,12,15 D A T A 14,5,4,7,4,8,15,2,7,4,5,2,12,15 DAT A 4 , 11,15,4,10,11,9,1,10,12 zum Drucker—Hi 1fstreiber G0SUB410 CLSs CLEAR400: DEFSTRA—Z« DIMX (15) ,XX(15> ,CX(53) ' Konstruktion der Buchstaben F0RJX=lT015sF0RIX«lT09 READCX:X(JX)=X(JX)+CHR*(CX) NEXT 17. ' Spiegelung FORKX=9TO1STEP— 1 XX(JX)=XX(JX)+MID*(X(JX),KX,1> NEXTKX,JX LPRINTCHR*(27>;“K ,,sCHR*(221> j C H R * (1) i ' Bitmuster— Modus ein ' ' Text aus DATA-Zeilen 220-250 einiesen und drucken t ' F0RIX=lT053t R E A D C X (IX)INEXT F D R IX=53T01STEP-1:L P RINTXX(CX(IX)) 5 :NEXT END Drucke*— Hi 1 f strei ber -fuer EPS O N s B * = M21E837CB7E20FC211100397E32E837C9" A*=16571 sF0RP= 1TQ32STEP2 B=ASC(MID*(B*,P,1)>-48:IFB>9THENB*=B— 7 T=ASC(MID*(B*,P+1,1))-4B:IFT>9THENT«T-7 POKEA,B*16+T:A=A+l::NEXTP P O K E 16422,1871P OK E 16423,64 RETURN o lOO 110 120 130 140 150 160 170 180 190 200 210 Bitmustei— Codes (Punktspal ten) 0, 255, 136, 136, 136, 136, 136, 255, 0, 255, 145, 145, 145, 145, 145, H O , O, 255, 129, 129, 129, 129, 6 6 , 60, O O, 255, 145, 145, 145, 145, 129, 129, © 30 40 50 60 70 80 90 Ein “erBOETZlicher" Ausspruch (nicht von KaJot liuehlenbein, aber widergespiegelt im Februar 1988 in Meinheim) o • o ' *O o 10 20 [EP50N KX80 &Ce.) r K o 1— 1— i g i i n n e e ? i— r h e r t u n d a l b V I S S t e u e I C A L C i 24 Die "80 MICRO" hat uns Tandianern ja nicht mehr viel zu bieten. Deshalb greift man gern auf ältere Ausgaben zurück und schaut nach, was dort noch auszuschöpfen ist. Da ist z.B. in der Apri 1 —Nummer von 19B3 auf Seite 210 ein Ar— tikel von Arne R o h d e , welcher beschreibt, wie man innerhalb von VISICALC bequem sowohl Eingabekorrekturen vornehmen als auch Drucker— Steuersequenzen eingeben kann. Während ersteres eine nicht allzu wichtige facility ist, über deren Wert man streiten kann — denn oft ist es nicht weniger bequem, die Eingabe in ein Feld schlicht zu wiederholen, als eine Korrektur an der fehlerhaften Eingabe mit dieser trickreichen Methode durchzuführen — bietet die zweite die häufig erwünschte Möglichkeit, den Ausdruck eines VISICALC-Rechenblattes individuell zu formatieren, z.B. durch Unterstreichen, Kursivschrift, Fettschrift etc. Besonders häufig benutze ich diese "facility", um den Drucker von VISICALC aus auf ELITE—Schrift oder Schmalschrift einzustellen, wenn es sich wegen unvorhergesehen größerer Spaltenanzahl, die mit PICA nicht in die Zeile paßt, als notwendig herausstellt oder wenn ich vor dem Laden von VISICALC vergessen hatte, den Drucker auf ir— gendeinen erwünschten besonderen Modus einzustellen. Auch Grafik— Zeichen können mit dieser Utility ausgegeben werden (falls der Drucker dazu fähig ist). Bei der Eingabe von Drucker— Steuersequenzen bedient das Pro gramm sich eines Trickess Da Zeichen wie E S C f FF (Form Feed) f SI (Schmalschr ift ein), DC2 (Schmalschr ift aus), SO (Breitschrift ein), DC4 (Breitschrift aus), BEL usw. nicht von der Tastatur aus direkt eingegeben werden können, wurde eine Umleitung programmiert: Auf f- (Linkspfeil) wird das eingegebene Zeichen in der ASCII—Tabel1e um zwei Spalten nach links verschoben, auf -> (Rechtspfeil) um acht Spalten nach rechts. Ein Beispiel für den EPSON RX 80 und Verwandte: Wenn einem erst unmittelbar vor dem Ausdruck des Rechenblattes einfällt, daß der Druck fett sein soll, kann man die ent sprechende Steuersequenz wie folgt an den Drucker ausgeben: Nachdem die bekannte Zeichenfolge / P P eingegeben wurde, erscheint in der Menue-Zeile: LOWER RIGHT, "SETUP, &, + Statt nun die "untere rechte Ecke" einzugeben, drückt man zu nächst die Anführungsstriche ("). Dadurch gelangt man in den Modus der Druckersteuerung. Die Fettdruck-Einstellung lautet ESC CHR$(69) bzw. CHRS (27) . Gibt man nun den Linkspfeil fein, so wird der ASCII—Wert des nächsten Zei chens um 32 vermindert. Um das Zeichen ESC = CHR$(27) zu erhalten, lautet also die Eingabe <f- ;>. Denn der ASCII-Wert des Semikolons ist 59. Da 59-32=27, empfängt der Drucker durch diese Eingabe das richtige Signal, das ihn "hellhörig '1 macht, nämlich 'ESC* (ESCAPE = 'Fluchtsequenz'). Gibt man anschließend *E' ein, so reagiert er dann entsprechend durch Fettdruck, so bald der Druckbefehl durch 'ENTER' und Eingabe der "unteren rechten Ecke" abgeschlossen ist. Stattdessen kann man aber be liebig oft wieder das Anführungszeichen eingeben, um weitere Steuersequenzen anzuschließen. Will man z.B. die drei Effekte : ■ ELITE (ESC M ) , Kursivschrift (ESC 4) und Unterstreichung, so lautet die Tastenfolge: / P P “ f- 5 M ENTER " t- ; 4 ENTER “ <- ; - 1 ENTER Danach weiter wie gehabt: "Untere rechte Ecke" usw. * Die Auf hebung cjieser Befehle erfolgt entsprechend. Mit dem Rechtspfeil <-t) kann man zu anderen Zeichen gelangen, die der Drucker zwar bereithält, die von der Tastatur aus aber sonst nicht erreichbar sind. Er bewirkt die Addition von 12B zum ASCII—Wert des eingegebenen Zeichens. (Ein sehr ähnliches "Umlenkungsverfahren“ verwendet ZEHDER in seinem GENIETEXT.) Man lasse sich nicht beirren (be-irren; nicht beir— r e n ) , wenn auf Drücken des Linkspfeils ein 'H' und statt des Rechts— pfeils ein 'I' erscheint. Diese Buchstaben werden durch die anschließende Einqab^ajfg 8 schp:_jt>en. Mas sie bedeuten, habe ich nicht herausgefunden. Wahrscheinlich dienen sie nur als Bestä tigung, daß man den richtigen Pfeil gedrückt hat. Dder als Ge lächter über den User, wenn er zuviele (— H- ) ohne weitere Eingaben hintereinander drückt. Denn dann antwortet sein Dia— logpartner eben 'HIHI'! Eine Kurzanleitung findet sich unt e n Co^sr nebenan). Ich hätte auch das Source—Listing assemhliert ausdrucken kön nen. Doch da das sowie niemand abtippt%ind ich das Programm gern jedem Einsender einer Diskette mit Rückporto und Parame terangabe (möglich sind alle) zur Verfügung stelle, unterläl^jt^ dies: Euer *K*a-J*o*t* .. . >0 3 (dtti) S < ü i e ^ K u r z a n l e i t u n g -Für- V C M O D / C M D ACHTUNG: VCMOD/CMD lauft nur, wenn auf VC/CMD zugegriffen werden kann! 1) EDIT-liode Replace—Mode etnstfiO-lten. • _ Insert-Mode und zurück (durch Vorsetzen von “ kann aus einer numerischen Eingabe ein Label gemacht werden) lcufB /) CLEAR Zeichen löschen (durch Löschen von " kann aus einem Label ein numerischer Eintrag gemacht werden) BREAK EDIT-Mode ohne Änderung verlassen ENTER Rückkehr in den normalen Eingabe-Modus. (Danach ENTER oder Pfeiltaste drücken) 2 ) Druckersteueruno Tastenfolge: / P P - 1 4 E M e ESC (Prefix) Schmal sehr i -ft Breitschrift Unterstreichg. Kursi vschri ft Fettdruck ELITE Drucker RESET ein ei n ein ei n ein ein 2 aus 4 aus - 0 aus aus 5 F aus aus P HEFT Anm.l: f- schiebt das eingegebene Zeichen in der ASCII-Tabelle zwei Spalten nach links; -) schiebt das eingegebene Zeichen 8 Spalten nach rechts Anm.2: Mehrere Steuerbefehle können, durch ENTER getrennt, hintereinander eingegeben werden. Sie werden durch Anführungszeichen < ”> eingeleitet. Februar 1988 26 K l e i n e ^ f H e x e n b e v o r z u g t ; Nur noch unverbesserliche Nostalgiker im Club benutzen in selbstquälerischer Mühwaltung D1SASSEM. um für EDTASM eine Source zu erzeugen. Nun ja, ein Indianer kennt keinen Schmerz. Allgemein hat aber sich die Einsicht verbreitet, daß man das mit DSMBLR für ZEUS tun sollte. DSMBLR erzeugt 16 Bit-Labels, die mit M beginnen, gefolgt vom Zahlen wert ln Hex. Bei 8 Bit-Werten wird entweder die ASCII-Entsprechung zwischen Hochkommata gesetzt oder die Hexzahl mit einem H dahinter. Schönere Labels und Zahlenoperanden kann man sich nicht wünschen. Der Haken: DSMBLR kennt nur Großbuchstaben. So kann eine Zeile z. B. so aussehen: MFFOO LD A ,0A4H Natürlich macht es wenig Spaß, mit ZEUS die entsprechenden Labels mit dau erhaft niedergehaltener Shift-Taste für die Majuskeln einzutippen. Deshalb ist die erste Aktion nach einer Disassembly immer, mit der C-Funktion von ZEUS Kleinbuchstaben zu erzeugen: cA,a - cB,b - c C ,c - ... - cH,h - cM,m Wozu ist ein Computer da, wenn nicht *um Automatisieren solch stumpfsinniger Vorgänge? Zuvor hatte ich in DSMBLR nach ^ien Stellen gespürt, wo die Großbuch staben erzeugt werden. M und H konnten bereits dort in m und h verwandelt werden (s. u.). Aber die Hex-Ziffern «erden leider auf die gleiche undurch sichtige Weise erzeugt wie durch dass DOS ln der Routine an 4068h. Hier konnte ich nichts manipulieren, weil Ich den äußerst krausen (aber kurzen und schnellen) Algorithmus nicht durchfcchaue. Das hier vorzustellende Programm! erledigt das. Es geht ziemlich simpel; da wird bei den Hexziffern einfach nur* das Bit 5 gesetzt. Daher verweise ich zur nicht allzu komplizierten Programmlogik nur auf die reichlichen Kommen tare. Etwas schwieriger war, das Programm herausfinden zu lassen, was eine Hex-Ziffer ist und was z. B. ein Zeichen aus einem Mnemonic. Eine DSMBLR-Source hat als mögliche Zeichen oberhalb ASCII 30h nur die Ziffern (bis F), H, M und die Großbuchstaben, aus denen sich die Mnemonics zusammensetzen. Daher konnten die nunmehr kleinen Buchstaben m und h für die Suche nach einem Label oder einer Hex-Zahl herhalten. Eine Verwechslung mit dem M aus dem Befehl JP M.nn oder dem H von PUSH qq war nun nicht mehr mög lich. Arnulf Sopp 3E34 00030 0 0 03 1 00332 loorl 00033 00034 00035 00036 1o o p 2 00037 00038 00039 00040 cipher* 00041 0D042 00043 00044 CI 00045 00C46 00047 00048 00049 Q005G 3E68 EDB« 2019 06C4 7E FE30 3004 OiOO 1SEF FE41 3SC2 cm 2E oc 00052 00053 00354 00055 loop4 00056 00057 00056 00059 0006C heiciph C0061 00062 00063 cioherh C006ft F65C C3C9U 25 synterr erreiit extensr seekh a Wenn keine Typbezeichnung folgt, wird automatisch /SRC angenommen. Das ist die Extension, die DSMBLR generiert, und die ZEUS als gegeben unterstellt, wenn nichts anderes eingegeben wurde. 00 280E 10F3 1BE9 Io o d O 00025 00026 00027 03D2E 00029 seeka © o C O N V E R T ,S O U R C E < C R > 23 00024 w> Um die Konversion von Groß- in Kleinbuchstaben abzufahren, wird das Programm (bei mir heißt es CONVERT/CMD) mit seinem Namen, gefolgt vom Namen des zu modifizierenden Source-Files aufgerufen: CD054C 2644 EB 215C52 C07344 EE 118044 CD1C44 2036 210053 CD2444 202E EB 23 CBF6 26 EB CD3644 2605 FE1C CS 181E E5 010001 C5 3E6D EDB1 20ie 0604 7E FE41 3802 CBEE o U m dies zu erreichen, müssen in DSMBLR/CMD folgende Änderungen durch geführt werden: Im filerelativen Sektor 7 wird das sektorrelative Byte 01h von 4Dh (M) ln 6 Dh (m) geändert. Im Sektor 6 wird das Byte A4h und im Sektor 8 das Byte 6 Ah von 48h (H) auf 68 h (h) gesetzt. Möglicherweise sind durch fleißiges Patchen nicht bei allen ln Umlauf befindlichen Versionen die Diskadressen dieselben. Dennoch lassen sich die zu ändernden Stellen leicht finden; es sind die einzigen, die LD A,'M' (3E-4Dh) und LD A,'H' (3E-48h) lauten. Daher sind sie leicht zu finden, z. B. mit FED. 5200 5200 5203 5205 5206 5209 520C 520D 5210 5213 5215 5218 5216 521D 521E 521F 5221 5222 5223 5226 522£ 522A 522B 522D 522E 5231 5232 5234 5236 5238 523A 523B 5230 523F 5241 5242 5243 5245 5247 5249 5246 524D 5250 5253 5254 5255 5257 5259 5256 5250 525E 5260 5262 5264 5266 526S 526A 526C 526D 00001 ; 00002 ; 00003 ; 00004 ; 00005 00006 00007 Start D000£ 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 Prograa* zur Kenversion von GrcS- in Kleinbuchstaben in Sourccs, die vor, DSPBLR erzeugt wurden (notwendige Änoerung in OSMBLF: fl -) ■ uno H -) h) Arr.ulf Sopp 198S 0RCCAIL JR EX LD CALL EX L0 CALL JR L0 CALL JR EX INC SET DEC EX CALL JR CP RET JR PUSH L0 PUSH LD CPIR JR LD L0 CP JR SET INC DEC JR DJNZ JR LD 0R JP DH DEC POP LD CPDR JR LD LD CP JR LD JR CF JR SET DEC OEC 5200h 4cd5h Z,synterr DE,HL Hi.eitensn 4473h DE,HL 0E,4450h 441ch NZ,erreiit HL.5300h 4424h NZ,erreilt DE,HL HL 6,(HL) HL DE,HL 4436h Z.seeki Ich Z erreiit HL BC,0100h BC A,V NZ,seekh B,4 A,(HL) V C.ciohen 5,(HL) HL C 2 , seekh 1ooo2 loopl A,34h 80h 4409h 'SRC' HL BC A,V NZ.wrsect B,4 A,(HL) '0' NC.heicioh 5,00h 1o o p 3 V C.cipherh 5,(HL) Hl C ;HL auf Dateinamen ii Befehlsstring {falls keine Datei angegeben ;DE <- Dateiname {Default-Eitension /SRC :anhängen, falls keine Ent. angegeben :NL <- Dateiname {Adresse des 00S-PCB :Naien in den FCE übertragen {falls Fehler (z. B. kein gültiger Naae) {Sektorpuffer ;Fi1e eröffnen {falls Fehler aufgetreten ;HL (- FCB-Adresse ;FCB +1. Bit 6: EOF-Uert nicht nach jede» ;Sehreibzugriff auf den NEXT-Wert setzen! {zurück auf FCB +C {Register zurücktauschen ;einen Sektor einiesen {falls kein Fehler eufgetreten ist {Fehlercode ‘Ende der Datei angetrofftn*? {fertig, falls ja ;sonst anderer Fehler: anzeigen und raus {Pufferadresse retten ;Zähler für CPIR {brauchen wir noch für C?DR jSuchbyte für Labels finden {falls Suche erfolglos beendet ;4 Stellen des Labels {Zeichen laden ;Hei-Ziffer? {falls Dez-Ziffer {Klein- aus Großbuchstaben lachen ;auf nächste Ziffer stellen {Bytezähler für CPIR nachstellen {dort weiter, falls Sektor überschritten {bis gegf. 4 Zeichen uigewandelt ;das nächste Label ait V suchen {Fehlercode ’Syntax o. Trennzeichen ...* {Bit 7 setzen für RQcksorung aus 4409 {Fehler anz., evtl. zui Aufrufer zurück lOefault-Extension für Source-Files {Zeiger auf Ende des Sektorpuffers 53FF {Zähler 0100 für CPDR •.Kenner von Mex-Zahlen ;nach V suchen ;Skt. zurückschr., falls Suche erfolglos ;aai. 4 Stellen der Zahl {Zeichen laden ;eine Ziffer? {weiter, falls nicht TAB, CR oder Koiaa {für restlichen CPDR-ZShler 00u~ {nächstes ’h’ suchen ;Hex-Ziffer? {falls Oez-Ziffer {Klein- aus Grofibuchsteben lachen ;eine Stelle zurück auf nächste Ziffer {Sektorpuffer schon unterschritten? 526E 5270 5272 5274 5275 5278 527A 527D 527F 5200 2804 10EB 18E1 El CD4544 20D1 C03944 20CC 18A2 00065 JR 00066 DJNZ 00067 JR 00068 wrsect POP 00069 CALL 00070 JR 00071 CALL 00072 JR 00073 JR 00074 END Z.wrsect loop4 loooj HL 4445h NZ.erreilt 4439h NZ.erreilt loopO start :fa11s ja :bis segf. 4 Zeichen utgevandelt -.nächstes V suchen ;Pufferadresse ;FCß auf alten Sektor zuröckposifcionieren ; fa 11s Fehler aufyetreten ;Sektor zurOckschreiben ;falls Fehler ;sonst nlchsten Sektor bearbeiten ;dort Einsprung ooooo Fehler cioherh 526C Io o d I 5232 start 5200 cipher* 5241 1o o p 2 523A synterr 5249 erreiit 524B 5255 vrsect 5274 1o o d 3 eitensn 5250 loop4 525D heiciph 5266 seekh 5253 IoopO seek* 5223 522D Datenübertragung / Model 4P als Terminal Durch die bereits serienmäßig in das Model 4P (Model 4 nachrüstbar) eingebaute RS 232 Schnittstelle und dem unter TRSDOS 6 .x mitgelieferten Kommunikationsprogramm COMM ist das Model 4 gut gerüstet für Daten(fern)Übertragung. Datenfernübertragung mittels Akustikkoppler war mir bereits bekannt. Durch einen mir kürzlich zugelegten frei steckbaren RS 232-Stecker war es mir nun aber möglich, einen Null-Modem-Stecker herzustellen und so die Möglichkeiten einer Direktverbindung zwischen zwei Computern zu testen. Der Null-Modem-Stecker läßt sich auch mit wenig Aufwand selbst hersteilen. Allgemein üblich ist nachstehende Verbindung: DTR 20 Verbindet man nun die beiden Geräte, so lassen sich nicht nur Daten übertragen, was bei zwei verschiedenen Systemen oft die einzige Möglichkeit darstellt, einen Datenaustausch vorzunehmen. Eine weitere Möglichkeit ergibt sich auch durch die Benutzung des einen Geräts als Hauptcomputer und des anderen als Ein- oder Ausgabeterminal. Auf diese Art und Weise müßte man ein für uns nicht kompatibles System (z.B. MS-DOS) mit einem Model 4 bedienen können. Odet man setzt das Model 4 einfach für einen nicht vorhanden Monitor/Tastatur eines Fremdsystems ein. Nachfolgend nun einige Verbindungsmöglichkeiten, die ich mal versucht habe. Als zweites Gerät hatte ich ebenfalls ein Model 4, was natürlich eine einfache Installierung zuließ. Große Schwierigkeiten dürften sich jedoch bei anderen Systemen ebenfalls nicht ergeben. Zunächst muß bei beiden Geräten der Treiber für die RS 232 Schnittstelle installiert werden. Dies geschieht durch den Befehl SET *CL TO COM/DVR Anschließend werden die Parameter für die Datenübertragung eingegeben (Baud, Word, Par i t y ) . Gute Erfolge hatte ich mit folgender Einstellung: SETCOM (B AUD=9600,W O R D = 8 ,PARITY=NO) 29 Tut mir leid. Papi - Dein Computer istzu primitiv fürmeine Hausaufgaben. Bei einem Versuch, die Übertragung mit 19200 Baud vorzunehmen, stieg das System aus. HEFT Nun noch kurz der Unterschied zwischen den zu benutzenden Befehlen LINK und ROUTE. LINK koppelt ein Gerät an das andere an, während ROUTE ein *^3 Gerät auf ein Ersatzgerät umleitet. Februar Der Monitor wird als "DO", die Tastatur als "KI" und die RS 232 <Qqq Schnittstelle als "CL" bezeichnet. Durch COMM *CL wird das Kommunikationsprogramm von TRSDOS aus Q A aufgerufen. O U Bei den nachstehenden Beispielen ist davon auszugehen, daß es sich bei Gerät 2 um das Model 4/4P handelt. Gerät 1 stellt das evtl. Fremdsystem dar. Bsp. 1: Gerät 1: Gerät 2: LINK *D0 »CL COMM *CL Mit diesem Aufbau wird Gerät 2 im Prinzip nur als Zweit- oder Ersatzmonitor benutzt. Das Gerät 1 dient als Hauptcomputer, während Gerät 2 nur die Daten von Gerät 1 empfängt, jedoch keine Daten an Gerät 1 senden kann. Bsp. 2 Gerät 1: Gerät 2: LINK *KI «CL COMM »CL Gerät 1 ist wieder der Hauptcomputer. Dieses Mal ist anstatt des Monitors jedoch die Tastatur angekoppelt. Die Befehle für Gerät 1 können nun noch zusätzlich/ersatzweise über Gerät 2 eingegeben werden. Sollen die eingegebenen Befehle auch auf Gerät 2 angezeigt werden, sind innerhalb COMM noch die Anweisungen DUPLX ON und ECHO ON einzugeben. Befehle an Gerät 1 können von beiden Geräten eingegeben werden. Bsp. Es wäre interessant zu wissen, bei welchen Systemen sich das Model 4 als Terminal einsetzen läßt. An einem Erfahrungsaustausch wäre ich interessiert. ' " 2t u (Den oben erwähnten RS-232-Stecker gibt es für DM 18,25 DM bei Westfalia Technica, 5800 Hagen. Die Signale sind durch Brücken beliebig zu vertauschen). Klaus Hermann Druckausgabe für COBOL—Programme Der Schreibaufwand für COBOL-Druckausgaben ohne Report-Generator ist auf Grund der fehlenden expliziten Adressierung und Längenangaben sehr groI3. Jede Druckzeile muss in der Form 01 Gerät 1: Gerät 2: LINK »KI »CL LINK »DO »CL COMM »CL Wie Bsp. 2, nur daß jetzt das Ergebnis des an Gerät 1 gesandten Befehls auch auf Gerät 2 angezeigt wird. Gerät 2: PIC PIC PIC PIC PIC PIC PIC X. X (5) . X. X (20) X. X (20) X. definiert werden. Müssen AB viele unterschiedliche Druckzeilen programmiert werden, so ist der Schreibaufwand nicht unerheblich. Bsp. 4 Gerät 1: Druckzeilel. FILLER LAUFENDE-NR FILLER NAME FILLER VORNAME FILLER 02 02 02 02 02 02 02 3 LINK »KI »CL ROUTE »DO »CL COMM »CL (evtl. HNDSHK ON) Auf folgende Weise läßt sich hier Abhilfe schaffen. Man schreibt nachstehendes COPY-Element ab und speichert sich dieses unter einem beliebigen Namen (z.B. DRUCK). Hier wird die Bildschirmausgabe auf Gerät 1 unterdrückt und direkt an Gerät 2 geleitet. Gerät 1 wird nun direkt von Gerät 2 aus bedient. Dieser Aufbau läßt ein Arbeiten mit Gerät 1 zu, wenn dort z.B. Tastatur und Monitor nicht vorhanden sind. Voraussetzung wäre dann allerdings, daß beim Booten von Gerät 1 die o.a. Einstellung automatisch vorgenommen wird. Bei der Bildschirmausgabe auf Gerät 2 ist zu beachten, daß die Daten seriell, also Zeile für Zeile, ausgegeben werden. Ursprünglich direkt adressierte Bildschirmpositionen werden also auf Gerät 2 direkt hintereinander ausgegeben. Weiterhin ist noch zu beachten, daß die Datenausgabe von Gerät 1 über das Betriebssystem erfolgen muß. Teilweise werden die auszugebenden Daten unter Umgehung des Betriebssystem durch direkte Adressierung ausgegeben bzw. eingegeben, öfters findet man dies bei MS-DOS unter 8088-Proz., um so das System etwas schneller zu machen. Auch bei der Grafikausgabe kann es zu Problemen führen. Hauptsächlich einsetzen lassen sich diese Verbi n g u n g e n , um Betriebssysteme zu bedienen. Für die Bedienung von Anwenderprogrammen ist diese Verfahrensweise nur bedingt geeignet. 01 01 01 01 DRUBER DOOl REDEFINES DRUBER D002 REDEFINES DRUBER D003 REDEFINES DRUBER PIC PIC PIC PIC X(8 0 ). X(01) JUSTIFIED RIGHT. X (02) JUSTIFIED RIGHT. X (03) JUSTIFIED RIGHT. 01 DOBO REDEFINES DRUBER PIC X(80) JUSTIFIED RIGHT. Dieses COPY-Element kann nun mit der COBOL-Anweisung ’COPY DRUCK' für alle zukünftigen Programme benutzt werden. Die Cangweilige Definition des oben stehenden Ausgabebereichs ist somit nur eine einmalige Sach». Das Füllen des Druckbereichs erfolgt nun von RECHTS nach LINKS. Vor Bearbeitung des Ausgabebereichs wird dieser gelöscht. Wenn als ein auszugebender Wert auf die Schreibposition 60-63 plaziert werden soll, so erfolgt die Übertragung mit (es muß der Name der höchsten Druckstelle angegeben werden) z .B . MOVE SPACE TO DRUBER. MOVE "TEXT" TO D063. MOVE "UEBERSCHRIF T " TO D037. WRITE ZEILE FROM DRUBER AFTER 1. Viel Spaß Werner Förster *» V e r - g V o r g 1 e e s c * h i c i h c h s t t e s t e Wie ihr im letzten Info lesen konntet, habe ich ein Model 100 In Besitz, auf dem viele meiner Briefe und Texte (so z.B. dieser) entstehen. Zum Erstellen der Texte kann man den 100'ter gut verwenden, zum Drucken derselben taugt das Computerchen allerdings nicht. Daher schiebe ich die Geistesergüsse nach dem tippen über die RS232—Schnittstel1e auf das Model 4p. Hier werden sie mittels TSCRIPS formatiert und gedruckt. Störend wirkt sich dabei aus, daß die Umlaute des Model 100 (selbstverständlich) an einer anderen Stelle im Zeichensatz liegen, als die des 4p. Dieses Problemchen ist aber mit einem kleinen Konvertierungsprogramm sehr leicht zu lösen. Dieses Programm entstand zunächst in BASIC und glänzte vor allem durch seine Lahmheit. Aus diesem Grunde schrieb ich, in einer ruhigen Minute, ein Programm in Pascal. Unter NewDDS laufen auf dem TRS BO mehrere Pascal-Dialekte. Den ersten Versuch startete ich mit PASCAL BO. Nachdem das relativ gut klappte, kam ich auf die wahnwitzige Idee, das Programm auch in PASCAL 4.5 und Al cor— PASCAL zu realisieren und das ganze als eine Art Vergleichstest zu gestalten. Als nach mehreren Stunden (teilweise hatte ich keine Dokumentation zu den PASCAL-Compi1e r n ) alle drei Programme liefen, wollte ich das Problem auch noch in RPNL umschreiben. Dazu hatte ich zwar eine wirklich gute Dokumentation, war aber trotz mehrstündiger verzweifelter Versuche nicht in der Lage, ein funktionsfähiges Programm zu erstellen. Als ich dann auf dem Nordlichtertreffen Kurt Müller traf, der ja RPNL unter NewDOS nutzbar machte, verdonnerte ich ihn sofort dazu, ein entsprechenden Programm in "seiner" Sprache zu erstellen. Last but not least wurde Gerald Schröder damit beauftragt, das Umlauteproblem in Assembler zu lösen. Im Anschluß könnt ihr also zunächst einmal den Vergleichstest zwischen den drei PASCAL—Compilern und im Anschluß daran die Erläuterung der Problemlösung in RPNL und Assembler lesen. Ich wünsche euch viel Spaß bei der Lektüre und hoffe, ihr werdet dadurch dazu angeregt, einmal ein eigenes Problem in PASCAL, RPNL oder Assembler statt in BASIC zu lösen. P a s c a l 8 0 Pascal 80 erinnerte mich bei der ersten Benutzung an Turbo— Pascal, weil es, genau wie dieser wohl bekanntest PascalCompiler unter CP/M, Editor, Compiler und Runtimelibary in einem Programm vereint. Nach dem Start erscheint ein Menü mit den Optionen: E — Editor Q — Quit to DOS K - Kill (Clear) Editor C — Compile Program in Editor R - Run Program in Editor S — Save Program in Editor L - Load Program to Editor A — Append Text to Editor W - Write Object Code to Disk X — Execute Program from Disk. Der Editor ist zwar bei weitem nicht so komfortabel wie der, den man von Turbo gewohnt ist, aber im wesentlichen läßt sich gut damit arbeiten. Das Compilieren geht recht flott vonstat ten. Dabei wird der Quelltext auf dem Bildschirm gelistet und, falls aufgetreten, ein Fehler angezeigt. Wenn man nach einem Fehler wieder in den Editor geht, befindet sich der Cursor in der Zeile, in der der Fehler aufgetreten ist! Wurde ein Quell text fehlerfrei übersetzt, kann man das ent standene Programm mit 'R' direkt vom Menü aus starten. Will man es als /CMD—File abspeichern, tritt eine deutliche Schwäche des Sprachsystems zutage. Um das zu tun, muß man nämlich folgende Schritte durchlaufen: Quelltext compilieren und Objectcode abspeichern PASCAL verlassen AUTHCODE/CMD starten PASCAL starten AUTH0R/SRC laden, compilieren und starten mit der Option 'X' wird dann das gewünschte Programm als /CMDFile auf Diskette geschrieben. Diese Procedur ist recht umständlich und ziemlich zeitaufwen dig. Die Programme AUTHCODE/CMD und AUTH0R/SRC dienen hier dazu, den Objectcode, zusammen mit der Runtimelibary (getrennt von Editor und Compiler) abzuspeichern. Einen richtigen Linker, wie er bei anderen PASCAL-Systemen üblich ist, gibt es hier nicht. Das erklärt auch die ungewöhnliche Größe des entstehen den Programms, in dem immer das gesamte Laufzeitsystem vorhan den ist, unabhängig davon, was gebraucht wird und was nicht! Auffällig an Pascal 80 ist die Möglichkeit der Verwendung von INCLUDE— und CHAIN—Files, wobei auch diese beiden Funktionen an Turbo-Pascal erinnern. Mit INCLUDE kann man Quelltexte, die in einer Diskettendatei stehen, whärend des Compilierens in den im Editor befindlichen Sourcecode einbinden. CHAIN ähnelt den Overlays von T.—P. und erlaubt es, separat compilierte Object— dateien aus einem laufenden Programm heraus aufzurufen. Abschließend wär& zu sagen, daß man Pascal 80 sein Alter (1981) nicht ansieht und nur manchmal, vor allem bei Diskoperationen, daran erinnert wird, daß es urspünglich für TRSDOS geschrieben war (aber unter NewDOS sowohl auf dem Model 1 als auch auf dem 3/4/4p lauffähig ist). Das mit &0 Seiten n i c h t 1 allzu umfang reiche Handbuch erklärt die Möglichkeiten, Erweiterungen (gegenüber Standard—Pascal) und auch die Einschränkungen des Systems sehr gut. P a s c a l 4 - 5 Pascal 4.5 besteht, im Gegensatz zu Pascal 80 oder TurboPascal , aus drei Komponenten: Editor — > PASEDIT/CMD Comp i1er -> PASCT/CMD Laufzeitsystem -> PASCAL/CMD. Das mag den BASIC—Freak zunächst einmal abschrecken, ist aber bei näherem hinsehen (und einigen Testläufen) gar nicht so schlimm. PASEDIT ist ein sehr komfortabler Editor, der mich allerdings beim ersten Diskfehler (Schreibversuch auf schreibgeschützte Diskette) fürchterlich erschreckt hat. Nach Auftreten eines DOS—Fehlers landet man nämlich grundsätzlich im Betriebssystem. Welch ein Glück, daß dabei der soeben erstellte Quelltext nicht zerstört wird, sondern bei erneutem Aufruf von PASEDIT restau riert werden kann. Statt des systemeigenen Editors kann man übrigens jederzeit auch ein Textverarbeitungssystem benutzen, solange es in der Lage ist, ASCII-Files auf Diskette abzulegen. Im Prinzip ist also von SCRIPSIT bis LESCRIPT jeder Editor ver wendbar ! Nachdem man den Quell text erstellt hat, steht man vor dem Problem, den Compiler aufrufen zu müssen. Manchem, der sich noch nie mit einem Compiler herumgeschlagen hat, wird diese Formulierung seltsam Vorkommen, aber der Compileraufruf ist tatsächlich ein nicht zu unterschätzendes Problem. Schließlich muß man dem Compiler (ebenso wie manchen Linkern) zusätzlich zum Namen des zu übersetzenden Programms auch noch allerhand weitere Informationen geben (wer sich einmal mit BASCOM herumgeschlagen hat, wir ein Lied davon singen können). PASCT geht mit dem Programmierer da sehr viel san-fter um- Er 'fragt nicht nur nach dem Namen für Ein— und Ausgabedatei sondern auch nach den gewünschten Optionen, und davon gibt es immerhin sieben. Weniger gut -finde ich die Art, wie der Compiler Fehler anzeigt. Statt Klartextfehlermeldüngen, wie es sich in der heutigen Zeit wohl gehört, bekommt man einen Fehlercode (z.B. Error 104) an den Kopf geworfen und muß sich aus einer Liste den Fehlergrund heraussuchen. Und dann beginnt das Spielchen, das einem die Freude an Pascal (und auch an anderen C o m p i 1ersprachen) vermie sen kann: 1. Quelltext erstellt und abgespeichert 2. Compiler aufrufen 3. Fehlercode notieren (dabei vergißt man mit an Sicherheit grenzender Wahrscheinlichkeit, sich die Zeile zu notieren, in der der Fehler au-fgetreten i st !) 4. Editor au-fru-fen und Fehler beheben und auf ein neues! Auch Pascal 4.5 hat keinen Linker, vielmehr kann man mit dem Programm PASCAL/CMD die als Objectcode abgespeicherten Pro gramme starten. Um eigenständige /CMD—Files zu erzeugen, muß man den com p i 1 ierten Objectcode mittels des DOS— Befehls APPEND an die Datei PASCAL/OBJ anhängen. Zuvor sollte man sich natür— lieh von PASCAL/OBJ ein Backup angefertigt haben!!! Obwohl sich Pascal 4.5 in diesem Punkt nur in der Verfahrensweise, nicht aber im Prinzip von Pascal 80 unterscheidet, entstehen erstaun lich kleine /CMD—Programme. Weiterhin hilft einem das Programm PASJCL/CMD, welches auch im Quellcode vorliegt, beim Erstellen von lauffähigen Programmen, indem es nach verschiedenen Abfra gen (Name des zu übersetzenden Quelltextes, Compileroptionen etc.) eine /JCL—Datei anlegt und mit ihr sowohl den Compiler startet als auch das "Binden" zum fertigen Programm erledigt! Die Möglichkeiten von INCLUDE— und CHAIN—Dateien fehlen bei Pascal 4.5, dafür glänzt es aber durch eine sehr gute Zusammen arbeit mit NewDOS und ein paar sehr brauchbare Sonderbefehle. So kann man mit MOVEDN und MOVEUP Speicherbereiche verschieben (ähnlich dem Z80— Befehlen LDDR und L D I R ) , PEEKen und POKEn und, was sich bei meinem Problem als besonders nützlich erwiesen hat, mit TITLE(file) Dateinamen direkt von der Tastatur einie sen ! Die Anleitung zu Pascal 4.5 ist noch spärlicher ausgefallen, als die Pascal 80-Anleitung, durch die klarere Gliederung findet man sich aber sehr schnell zurecht. Etwas schwach finde ich die Erklärung der Befehle, die nicht zum Pascal—Standard gehören (z.B. TITLE usw.). Hier hilft nur das Studium der mit gelieferten Quelltexte (PASJCL/PAS) und viel probieren! A l c o r -- F* a s c ä 1 Eigentlich dürfte ich mich über dieses Sprachsystem gar^nicht äußern, da ich zu meinen Versuchen damit keinerlei Anleitung vorliegen hatte. Daraus resultierten natürlich viele Fehlschlä ge und eine gewisse Antipathie gegen diesen Compiler. Trotzdem möchte ich wenigstens einige Worte darüber verlieren, jedoch an dieser Stelle schon bemerken, daß meine Aussagen rein subjektiv si nd ' Im Gegensatz zu den Editoren von Pascal 80 und 4.5 kann man mit ED/CMD, dem Alcor— Editor, ohne Anleitung überhaupt nichts an fangen. Selbst heftigem und langwierigen Herumprobieren wieder— setzt er sich erfolgreich! Einziger Vorteil ist der Umstand, daß der Compiler Quellcodes im ASCII—Format verarbeitet und damit praktisch wieder jeder Texteditor zum Erstellen der Pascal programme nutzbar ist. Ich benutze auch hier PASEDIT/CMD, der mir unter Pascal 4.5 ans Herz gewachsen ist! Der Compiler fragt nach dem Start nach Ein— und Ausgabe-, sowie nach der Listdatei, in die er das Compi1erprotokol1 ablegen soll. Auch hier werden leider nur Fehlernummern angegeben, den Klartext muß man sich aus einer Fehlerliste holen. Und natür lich kommt dann auch hier die, beim Pascal 4.5 schon beschrie bene, umständliche und langwierige Entwanzung des Quelltextes, über die Übersetzungsgeschwindigkeit an sich kann man sich nicht beschweren. Nach dem Compilieren kann man sein Programm, inzwischen liegt es als /OBJ—File vor, mit Hilfe des Laufzeitsystems starten (RUN progname/obj). Um ein eigenständiges Programm zu erhalten muß man den Linker zu Hilfe rufen, der die benötigten Routinen aus den verschiedenen Dateien zusammensucht und bindet. Natür lich muß auch hier die komplette Runtimelibary mitgeschleppt werden und die /CMD—Files sind entsprechend groß, dafür kann man aber (so man kann!) von anderen Compilern (z.B. Alcor— C) erzeugte /REL-Dateien in die Pascal programme einbinden. Etwas was mich an Alcor— Pascal sehr stört ist die Tatsache, daß jedes damit erstellte Programm nach seinem Start erst einmal fragt, welches _die normalen Wege für INPUT und OUTPUT sein sollen. Sicher ist es manchmal sehr angenehm, an dieser Stelle z.B. den Printer als Ausgabemedium angeben zu können, trotzdem nervt nach mehreren Programmstarts die ständige Fragerei beträchtli c h . Leider kann ich hier nichts über das Handbuch zu diesem System aussagen, denn es wäre sicher ein Pluspunkt für Alcor! Auch scheint der Sprachumfang recht beachtlich zu sein, was ich aus den mir vorliegenden Quelltexten ersehen kann. Was mir weniger gefällt ist das Filehandling, das mir etwas umständlich er— scheint. Zu bemerken wäre noch, daß es Alcor—Pascal sowohl für das Model 1 als auch für die Modelle 3/4/4p gibt. Im Gegensatz zu Pascal 80 und 4.5, von denen es nur eine Version für alle TRS 80—Modelle gibt, ist aber der Compiler für das M. 1 nicht auf den anderen Maschinen lauffähig und umgekehrt. P r o b l e m und Pr~oQr~ammablaut'fpletn Schon im Vorwort habe ich kurz das Problem angesprochen, wel ches zu lösen gilt. Hier nun die genaue Problemdefinition: aus einer Datei unbestimmter Länge soll der gesamte Inhalt in eine zweite Datei übertragen werden, dabei sollen verschiedene Zeichen durch andere ersetzt werden. Aus dieser Aufgabenstellung ergibt sich folgender Ablaufplan: (in den sich übrigens ein Fehler eingeschlichen hat! Die Abfrage "EOF Eingabe-Datei?" muß natürlich am Ende der Schleife "Buchst. einiesen / Buchst. kritisch? / Buchst. ausgeben" stehen. Da ich aber zu faul bin, das Flußdiagramm noch einmal zu zeichnen, lasse ich es bei dieser Anmerkung!) # P r o g r a m m Ohne größere Umschweife möchte ich euch jetzt auch Lösung des Problems in Pascal 4.5 präsentieren. PROGRAM M 1OOTSC gleich die (IN P U T ,O U T P U T ,FILEA,FILEB); VAR C CIN CHAR; INTEGER; PROCEDURE U M L A U T (C IN :INTE G E R ); BEGIN CASE CIN OF 182s CIN:=123; 183: CIN:=124; 184: CIN:=125; 185: CIN:=126; 177: CIN:=91; 178: CIN:=92; 179: CIN:=93; END; C:=CHR(CIN); END; («Variable deklarieren«) («Unterprogramm UMLAUT*) («je nach Wert von CIN eine der folgenden Aktionen ausführen!*) («Wieder in Buchstaben umwandeln*) BEGIN WRITE(CHR(28),CHR(31)); («Bildschirm löschen«) W R I T E L N ('U M L A U T '); («Startmeldung ausg.«) WRITELN; W R I T E L N ('Model lOO — > TSCrips Umlaute—U m w a n d l e r '); W R I T E L N ('C by H. O b e r m a n n ') : WRITELN; W R I T E ( Eingabe-Datei? '); («Eingabe—Datei abfr.«) TITLE(FILEA); W R I T E ('Ausgabe—Datei? '); TITLE(FILEB); («Ausgabe-Datei abf r .*) RESET(FILEA); («Eingabe—Datei eröffnen«) WRITELN; REWRITE(FILEB) ; («Ausgabe—Datei eröffnen sollte eine Datei gleichen Namens schon einmal bestehen, wird diese zuvor gelöscht!«) REPEAT («wiederhole folgendes —*) READ(FILEA,C); («Buchstabe ei niesen«) CIN:=ORD(C); («in Integer umwandeln*) IF (CIN > 176) AND (CIN < 186) THEN UMLAUT(CIN); («im kritischen Bereich? Wenn ja, dann Umwandeln!«) («Buchstabe schreiben«) WRITE(FILEB,C) ; UNTIL EOF(FILEA); («bis EOF erreicht!*) WRITE(FILEB,CHR(0)); («EOF für TSCRIPS«) CLOSE(FILEA); («Dateien schließen«) CLOSE(FILEB); WRITELN('Umlaute—Umw a n d 1ung beendet!'); END. HEFT E3 Selbstverständlich weiß ich, daß das Programm noch nicht ganz sauber programmiert ist und daß sich die eingefleischten Pascal —Programmierer die Haare raufen werden! Trotzdem zeigt das Progrämmchen meiner Meinung nach, daß der Umstieg von BASIC zu Pascal gar nicht so schwer ist! Vor allein die Lesbarkeit des Programms ist um Welten besser als die des, von mir an zunächst erstellten, BASIC-Programms. Ganz zu schweigen, von der erheb1ichen Geschwindi gkei tsstei gerung! Februar 1933 38 V e r g l ei a h An dieser Stelle möchte ich einen kurzen Vergleich zwischen den verschiedenen Programmen machen, die, in verschiedenen Sprachen bzw. Dialekten, zur Lösung des Problems inzwischen erstellt wur d e n . Größe in Grans Geschwindi gkeit Sprache/Di alekt in Sekunden Quel 1 text CMD-File Alcor-Pascal Pascal 80 Pascal 4.5 RPNL Assembler 1 1 1 3 3 9 10 3 1 11.7 11.0 B.5 10.5 7.5 - 13.0 - 15.0 - 9.2 - Die Geschwindigkeit wurde mit einem Text gemessen, den ich gerade auf dem Model 100 erstellt hatte und der durch Zufall vorlag. Der Text war ca. 1.5 kByte lang und die Tests erfolgten unter NewDOS auf dem Model 4p mit einer Taktfrequenz von 4 MHz. Die Zeitendifferenzen bei den einzelnen Programmen ergeben sich daraus, daß einmal die Programmnamen mit und einmal ohne Drivenummer angegeben wurden. a Das Programm basiert auf einer Tabelle, in der die fragl ichen ASCII-Codes und ihr Ersatz aufgelistet sind: 8.5 Die Größe der Dateien habe ich in Grans angegeben, weil ich es (zumindest bei einer solchen Anwendung) -für uninteressant halte, ob ein Programm 196 oder 248 Byte lang istBeide Programme benötigen auf der Diskette auf alle Fälle 1 Granule! F Nachdem Hart aut- sich nun ausgiebig zu den FASCAL-Versionen in seinem Test geäußert hat, folgt nun mein bescheidener Beitrag dazu. Da das zu lösende Problem bereits ausgiebig beleuchtet wurde, kann ich mich auf eine Beschreibung des Programmaufbaus beschränken. s i -t Eigentlich sollte sich jeder Leser das Fazit aus den obrigen Angaben selbst herauslesen können. Trotzdem hier noch ein paar zusammenfassende Sätze: 1. Wer Wert auf Geschwindigkeit legt und sich von BASIC (auch da gibt es ja Compiler) trennen möchte, dem stehen vor allem die Sprachen PASCAL, RPNL und Assembler zur Verfügung. Ich weiß natürlich, daß ich mir mit dieser Behauptung alle Anhänger anderer Sprachen wie COBOL, Forth usw. zum Feind mache, bin aber erst dann von dieser Behauptung abzubringen, wenn eine Problemlösung in der entsprechenden Sprache im Info erscheint! 2. Am schnellsten ist sicherlich die Assemblerlösung, aber nur Freaks wie Gerald Schröder und Arnulf Sopp schütteln ein sol — ches Assemblerprogramm (so einfach es auch, gegenüber den Pro grammen, die wir von den beiden sonst gewohnt sind, auch sein mag) innerhalb von ein paar Minuten aus dem Ärmel. 3. Am wenigsten zu Schreiben hat man in Pascal (die Quelltexte in allen drei Dialekten umfassen nur ein Granual, die RPNL— und die Assembler1ösung bringen je 3 Grans auf die Waage!). Hat man die Qual der Wahl zwischen den Pascal-Compilern, weil man alle drei zur Verfügung hat, würde ich folgende Wahl treffen: Pascal 80 - für Einsteiger und zum Lernen! Pascal 4.5 - für normale Anwendungen, für Anfänger geeignet! Alcor Pascal - für den Fortgeschrittenen (und nur mit Handbuch 4. Wer sich gerne einer sehr guten (schließlich vereinigt RPNL die Vorzüge von Forth mit denen von Pascal), leider aber sehr seltenen (besser vielleicht exotischen) Sprache zuwenden'möch te, die noch dazu sehr maschinennahes Programmieren erlaubt und außergewöhnlich gut dokumentiert ist (sie liegt sogar im Quell— text vor!), kann sich auf RPNL stürzen! Egal für welche Sprache und welchen Dialekt ihr euch entschei det, ich wünsche euch auf jeden Fall viel Spaß und Erfolg beim Programmi e r e n , euer * itcvrAmu/1 QA>e/T'i*cvTVTi * CALL ASCII, TAB Bö 7B B7 70 Bö 7D B9 7E Bl 5B B2 5C B3 5D 00 00 Kon ver t i er ungs-Tabelle Erster Eintrag altes Zeichen, . . .zweiter Eintag neues Zeichen ■Tabellenende. CEND CODE TABELLE 21 A S C H . TAB E5 CEND ( -> adrl > Jabellenzeiger auf den Stack LD HL, ASCII. TAB PUSH HL Da RPNL keine. DATA-Anweisung kennt, muß, um derartiges zu errei chen, ein Trick angewandt werden. Die Daten-Tabelle wird einfach mit Hilte der CALL-Definition erstellt (s. CALL ASCII. TAB). Auf dieser Definitionsstufe ist es dem Compile nämlich egal, was für Daten vom Anwender vorliegen. Es muß nicht notwendigerweise ein Unterprogramm sein ! Venn wir schon freie Hand haben, dann ist es leider auch 'unser Bier', dafür zu sorgen, daß wir auch an die Daten kommen. Dazu muß eine Ebene höher ein weiteres Wort definiert werden, welches eben diesen Zeiger heranschafft Cs. CODE TABELLE*. Damit wäre der Zugriff auf das Wesentl iche vor erst sichergestel 1 1.. Da die Losung ’Austausch von Unerwünschtem gegen wichtigeres' lautet, ist natürlich noch ein Programm von Nöten, welches sol ches zu leisten im Stande ist. Als erstes der Gegenstand der Diskusion: PROGRAM 7C0NVERT ; (charl adrl -> char2 adrl flag) OVER OVER ?<B) = ; TOS = Tabelleneintrag ? IF COUNT ? INC COUNT := DUF INC ?(B) ;Ersatzzeichen holen und... SWAP ROT DROP ; . . .altes Zeichen ersetzen TRUE ;Setze Erfolgs-Flag ELSE FALSE ;Keine Konvertierung END IF END ‘i PROGRAM DUP 177 185 IF TEST. ASCI I DUP < SWAP > OR NOT ; (charl -> char2) iprüfe ob Zeichen in der Tabelle ;Diese Bereichseingrenzung 1st ;Problemabhängig !!! TABELLE ;Tabellen-Zelger auf den Stack REPEA T 7C0NVERT ;Zeichen ersetzen OVER ?(B) 0= OR ; Tabellenende ? UNTIL IHC INC ;Nein !, nächster Eintrag LOOP DROP ;Nur das Zeichen selbst bleibt. . . ENDIF ; . . . auf dem Stack CHARACTERS ? INC. CHARACTERS := BND D a s Wart 7CONVERT prüft das Zeichen auf dem Stack, ob es in der Tabelle enthalten 1st. Venn Ja, wird es gegen das Ersatzzeichen ausgetauscht, über den Erfolg oder Mißerfolgt gibt ein Flag auskunft, welches alt auf dem Stack übergeben wird. Damit TEST. ASCII nicht an Informationen erstickt, ist es unbedingt notwendig, daß die Menge der Daten nicht zu groß wird. Mehr wie vier Zahlen sind auf dem Stack einfach nicht zu verwalten, ohne daß man ln unvermutete Probleme gerät. Deshalb 1st es wichtig, das 7CONVERT Im Erfolgsfall das alte Zeichen vom Stack entfernt. Wer das nicht elnsehen kann, versuche das Problem im Wort TEST. A S C I I zu lösen. Da nur einige wenige Zeichen zu Prüfen sind, wird durch eine Be reichsabfrage eine Vorauswahl durchgeführt. Liegt ein Zeichen im interessierenden Bereich, wird weiter geprüft und die Tabelle d u rchsucht. Am Ende der Routine wird noch etwas mitgezählt, damit am Schluß die Anzahl der durchgeleierten Zeichen bekannt gegeben werden kann. Das Gleiche passiert ln der Routine 7CONVERT, hier wird die Anzahl der Ersetzungen mitgezählt. Damit ist der Job für ein einzelnes Zeichen bereits erle d i g t . Fehlt nur noch das Prinzip auf eine beliebige Menge auszudeh nen. Im Grunde nichts leichter als das: Man programmiert ein wei teres Wort ! Womit wir beim Hauptprogramm wären. Damit bei der Eingabe der Filenamen kein Murks passieren kann, sorgt das Wort GET.NAMES für saubere Verhältnisse. Hier wird geprüft, ob der Quellfile existiert und das Quelle und Ziel nicht Identisch sind. Sind diese Dinge OK, kann die eigentliche Arbeit starten und die Hatz nach den falschen Bytes beginnen. Ein weiterer Höhepunkt der Byteschaufelei findet sich ln der Hauptschleife im Haupt programm. Als Ende-Kennung sind drei Zustände vorgesehen: 1. Ein Fehler wird bei READF oder WRITEF erkannt 2. Das Fileende wird erkannt, 3. Die NULL für SCRIPSIT File-Ende wird erkannt. Damit beides richtig zur Geltung kommt, wird ein eifriges Bäumchen-Wechsle-Dlch-Spiel auf dem Stack getrieben. Damit die Sache beim ersten gelesenen Byte nicht außer Tritt gerät muß die D u m m y - ’0' auf den Stack gelegt werden. Damit verständlich wird. was sich da so abspielt, einige Momente im Leben eines Daten stacks zu m mitschreiben: 0 = Dummy, d = Databyte, f = Flag READF 0 d TOS-> f ROT OR OVER 0= OR d f 0 - d fl d fl d d fl f2 d f3 - Wie Jeder unschwer erkennen kann, fehlt eine NULL Die wird von dem WRITEF im zweiten Teil der REPEAT/UNTIL/LOOF Schleife erzeugt (das ist deren Flag über die saubere Abwicklung des ln den Zielfile geschriebenen Bytes). Tritt also beim Schreiben oder beim Lesen ein Fehler auf, so bleibt das nicht unbeachtet. Ebenso wie das SCRIPSIT- oder File-Ende nicht übersehen werden kann. ;Dummy '0' REPE A T FILE1 READF R O T OR OVER 0= OR UNTIL TEST. ASCI I FILES WRITEF LOO P DROP 0 FIL E 2 WRITEF DROP ;hole ein Byte ; (Dummy ~ ' 0 ’> OR (flag) ;etwa Tscript Fileende 7 ;nur weiter, kein Fehler ;schreibe ein Byte ;vernichte Stop-Flag ;File-Ende markieren Bel diesem Hürdenlauf der Flags war bis nach Hartmuts Test noch einen Fehler im Programm, den ich nicht bemerkt hatte: Nachdem der File gelesen war, blieb die SCRIPSIT—NULL auf dem Stack. Kein 'Fatal Error', aber unschön. Die hier abgelichtete Version ist Jetzt korrekt. An den Testergebnissen ändert sich dadurch nichts ! Da für die Konvertierung eine Tabelle benutzt wird, wäre es natürlich auch denkbar, diese nicht fest im Programm zu verankern, sondern extern zu verwaren und Je nach bedarf von Diskette nachzuladen. Dazu müßte das Wort ASCII. TAB das Einlesen der Daten übernehmen und Im Wort TABELLE der Zeiger auf die Tabelle im R A M bereitgestellt werden. Im Wort GET.NAMES 1st die Abfrage au f den Namen der externen ASCII-Tabelle einzubauen. Im Anschluß folgt nun das vollständige Programm. ** = »* ** *-*■ r# = =** ** ASCII Flltei— Programm Vers. 1. 0 END 12. 87 ; (charl adrl char2 adrl fl a g ) PROGRAM 7C-ONVERT ; TOS = Tabelleneintrag 7 OVER OVER ?(B> = IF COUNT ? INC- COUNT Ersatzzeichen holen und.■. DUP INC ?<B> . . .altes Zeichen ersetzen SVAP ROT DROP Setze Erfolgs-Flag TRUE ELSE :Keine Konvertierung FALSE ENDIF END =*»• DECLARE VARF VARF VAR VAR VAR VAR DEND FI LEI FILE2 FILE. NAKE1 FILE. NAME2 COUNT CHARACTERS Konvertierungs-Tabelle Erster Eintrag altes Zeichen, . . .zweiter Eintag neues Zeichen CALL ASCII. TAB B6 7B B7 7C B8 7D B9 ?E Bl 5B B2 5C B3 5D 00 00 CEND Tabellenende. Doppel-Null für den Fall, daß jemand unbedingt die Null ln eine Null konvertieren moechte ( -> adrl) Tabellenzeiger auf den Stack LD HL,ASCII. TAB PUSH HL CODE TABELLE 21 ASCII. TAB E5 CEND PROGRAM GET. NAM E S SYSFIELD ? ;( -> f l a g ) ;holt FILENAMEN ;RAM-Pointer retten Hole die Filenamen 14 OUTCHAR VR1TE 'Fi lei: VRITE 'Fl 1 e 2 : 15 OUTCHAR CR FILE.NAME1 READ<CH) FILE. NAME2 READ (CH) ;Beide Namen müssen ungleich sein ;Cursor ON ;erster FILE ;zweiter FILE ;Cursor OFF ! FILE. NAME1 7 FILE.NAME2 7 = <S> NOT IF ;neue Filenamen. . ■ FILE. NAME1 ? FILE1 FILESPEC ;...einsetzen FILE. NAME2 7 F1LE2 FILESPEC ;ERROR-Flags zusammenfassen O R 0= ELSE ’ CR VRITE '*** ERROR: Input-File = Output-File ;Eingabefehl er ! FALSE ENDIF ;Restore RAM-Pointer SVAP SYSFIELD := ; (charl char2) PROGRAM TEST. ASCII ;prüfe ob Zeichen in der Tabelle DUP DUP ;Diese Bereichseingrenzung ist 177 < SVAP iProblemabhängig .'! ! 185 > OR NOT IF ; Tabellen-Zeiger auf den S t a d TABELLE REPEA T ;Zeichen ersetzen ? 7CONVERT ;Tabellenende ? OVER 7(B) 0= OR UNTIL ,-Nein !, nächster Eintrag INC INC LOOP ;Nur das Zeichen bleibt. . ■ DROP ; . . . auf dem Stack ENDIF CHARACTERS ? INC CHARACTERS : END PROGRAM FILTER ;>>>> Hauptprogramm \<<< CLS 0 COUNT := 0 CHARACTERS VRITE '**======================================**' CR VRITE ’** ASCI I-Filter * * ’ CR VRITE ’**======================================**' CR CR GET. NAMES ;Liefert bei OK TRUE-Flag IF ;Fllespec's OK 7 Fl LEI O P E N (I > 0= ;Quell-File vorhanden 7 IF FILE2 OPEN(0> 0= IF ;Abbruch bei FILE-ERROR VRITE 'Vriting data to file' 0 ;Dummy '0' REPEA T FI LEI READF ;hole ein Byte ROT OR ; (Dummy - ’0 ’) OR (flag) OVER 0- OR ;etwa Tscript Flleende ? UNTIL ;nur welter, kein Fehler TEST. ASCII FILE2 VRITEF ;schreibe ein Byte LOOP yernichte stop-Flag D0 FILE2 VRITEF DROP ;FI le-Ende nsrtieren ENDIF F1LE2 CLOSE ENDIF FI LEI CLOSE ENDIF COUNT ? 0 > U M L A U T .M 1F CR VRITE 'Number of CR VRITE 'Total * of characters - CHARACTERS PRINT CR CR BLSCR VRITE 'Nosubstitutions CR VRITE 'File length is VRITE ' Byte' CR CR ENDIF END !'^ CHARACTERS PRINT Hartmuts Artikel über die Umlaut-Konvertierung in Pascal habt cherlich schon gelesen (wenn nicht, tut es am besten jetzt!). bat mich, ein paar Zeilen zu der Assembler-Lösung zu sagen, hinter diesem Artikel abgedruckt findet. Eigentlich ist das fast "selbstdokumentierend", wenn auch in ganz anderem Sinne Pascal-Lösung: in Assembler sind die Kommentare wichtiger als fehle . Ihr si Hartmut die Ihr Programm als die die Be Der Anfang mit den Abfragen der beiden Filenamen dürfte recht klar sein. Ich will nicht näher darauf eingehen. Nur der Ablauf sei kurz dargestellt: Zuerst wird ein Einleitungstext angezeigt, der hier sehr kurz ausfällt. Dann fragt das Programm nach dem Namen des Files, der die fehlerhaften Umlaute enthält. Falls dieser File nicht existiert, kommt eine Fehlermeldung und die Eingabe muß wiederholt werden, bis der Filename korrekt ist oder mit BREAK abgebrochen wird. Der zweite File soll die korrigierte Version des ersten auf nehmen. Es wird nur einmal gefragt; falls ein Fehler auftritt, bricht das Programm ab (mit einer DOS-Fehlermeldung). Nun kommt der interessante Teil, den ich mit markiert habe. Ihn will ich näher erläutern: Zuerst wird ein Byte aus dem ersten File gelesen. Dabei muß DE auf den FCB des ersten Files zeigen! Zurückgege ben wird das gelesene Byte in A und ein Fehlerstatus. Bei Z (Zero-Flag gesetzt) war das Lesen erfolgreich, bei NZ (Zero-Flag gelöscht) ist ein Fehler aufgetreten, wobei jetzt die Nummer des Fehlers in A steht; in diesem Fall wird die Schleife abgebrochen, wobei noch nicht klar ist, ob dieses Ende - erzwungen (Disk-Fehler) oder gewollt (Ende von File 1 * ich bin fertig) wurde. Falls das Lesen erfolgreich war, stel len die beiden ComPare-Befehle fest, ob es sich um einen Umlaut han delt. Falls nicht, kann das Byte sofort in den zweiten File geschrie ben werden. Falls es sich um einen Umlaut handelt, wird 177 von seinem ASCII-Code abgezogen, so daß der erste Umlaut jetzt zur 0 wird, der zweite zur 1 usw. Diese Zahl gibt an, um welchen Umlaut es sich han delt. Nachdem H und L gesetzt wurden, hole ich durch LD A, (HL) den neuen Umlaut aus einer Tabelle. Dabei zeigt HL genau auf den richtigen Umlaut, weil der Anfang der Tabelle immer bei xxOOh liegt. Also steht der erste Umlaut (der zu dem mit der Nusimer 0 gehörende) in (xxOOh) , der zweite (der zu Nummer 1 gehört) in (xxOlh) usw. Das Gleiche hätte ich erreicht, wenn ich die Nummer auf den Tabellenanfang tab addieren würde, aber das dauert länger (ein paar Micro-, Nano- oder sonstwasSekunden). Zuletzt wird der neue Umlaut (bzw. ein normaler Buchstabe, der kein Umlaut ist) in den zweiten File geschrieben. Dabei ist zu be achten, daß DE diesmal auf den zweiten FCB zeigen muß. Falls beim Schreiben ein Fehler auftritt, bricht das Programm ab und zeigt den Fehler an. Ansonsten (im Normalfall) wird die Schleife hier nie ver- HEFT lassen. Die Stadt istnichtgroß genug füruns beide! Bevor das Programm endet, werden alle beiden Dateien geschlossen (was Februar bei der Lese-Datei evtl. nicht nötig ist, aber es sieht schöner aus), Je nachdem, ob ein "ordentlicher" Abbruch mit dem "richtigen" Fehler, nämlich "Dateiende erreicht", erfolgt ist oder nicht, wird eine “Alles i ^ roger"oder eine Fehlermeldung (vom DOS) a n g e z e i g t .Z f Q ' Gerald Schröder 00001 00002 47 00003 00004 00005 00006 00007 00008 00009 0013 00 IB 05D9 402D 4409 441C 4420 4424 4428 4467 00010 00011 00012 U M L A U T .M 1 etzte inderung: . konvert i ert File mi t Umlaut en ; DOS- und ROM-Routinen : readbyt wri tbyt i nbuf dos derror ex f i 1 in it open cl ose scrmes EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 00013 00014 00015 00016 00017 00018 00019 ; 00020 00021 00022 OOIC 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 00041 00042 00043 00044 00045 00046 00047 00048 00049 00050 00051 00052 00053 00054 00055 00056 00057 00058 00059 00060 00061 00062 00063 00064 00065 00066 5200 5200 5203 210953 CD6744 5206 5209 520C 520F 521 1 5214 5217 521fi 521D 5220 5222 5225 5227 522A 522D 213A53 CD6744 218F53 060F CDD905 DA2D40 11AD53 CD1C44 21ED53 0600 CD2444 2808 214A53 CD6744 18D7 5^2F 5232 5235 5238 523A 523D 5240 5243 5246 5249 524B 524E 216953 CD6744 219E53 060F CDD905 DA2D40 11CD53 CD1C44 21ED54 0600 CD2044 2034 5250 11 AD53 CD1300 2016 FEB1 3B0A FEFA 3006 B6 F 1 5256 5258 525A 525C 525E 5260 j j * 8 .2 .8 8 0013h OOlbh 05d9h 402dh 4409h 44 Ich 4420h 4424h 4428h 4467h von Gerald Schröder ;ein Byte lesen {ein Bvte schreiben ;B Zeichen eingeben ;Abgang ins DOS :D0S-Error ausgeben ;Filenamen in FCB :File neu öffnen {exist. File öffnen ;File schließen ;Meldung ausgeben Konstante: : "Dateiende gefunden" EQU Ich ORG 5200h Start LD CALL HL, anfana scrmes ;Anfangsmel dung ;an:ei gen nochmal LD CALL LD LD CALL JP LD CALL LD LD CALL JR LD CALL JR HL. f ragel scrmes HL.buf1 B, 15 inbu-f C. dos DE.-fcbl ex f i 1 HL.sekbuf1 B, 0 open Z,z wei ter H L ,-fehl er scrmes nochmal :Abfrage 1. Filename ;ausgeben ;3uffer für Eingabe ;Länge 15 :B Zeichen nach HL ;at. falls BREAK-Taste :Zeiger auf FCB—Buffer {Name übertragen ir. FCB :Sek toi— Buffer {Seitor-Länge 256 :Fi 1 e öffnen :kein Fehler, weiter :Zeiger auf Fehlermeldung ;ausoeben :nochmal eingeben zwei ter LD CALL LD LD CALL JP LD CALL LD LD CALL JR HL.frage? scrmes HL,buf2 B, 15 inbuf C, dos DE,fcb2 ex f i 1 HL.sekbuf2 B,0 ini t N Z ,error {ebenso für 2. File okerr ; ttttttttttttttttttttttittttttt DE, f cb 1 LD 1OOp readbyt CALL N Z ,ende JR i-J-? CP C. ol. JR 186 CP N C ,ol JR l?” SUE 9t 48 5262 5264 5265 5266 5269 526C 2653 6F 7E 11CD53 CD1B00 28E2 526E 526F 5272 5275 527E 527B 527C 527E 5281 F5 1 1AD53 CD2844 1ICD53 CD2844 Fl FE 1C 217C53 CA6744 5284 5286 F6C0 C30944 0077 5300 5309 5320 533A 534A 5369 537C SB IC OA OA OA OA OA 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080 00081 00082 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092 nrirtOT UUVTO 00094 00095 00096 00097 00098 00099 tab DB 00100 00101 00102 : Texte anfana fracel feh 1 er frage 2 endmel DM DM DM DM DM DM ; Buffer 00103 00104 00105 00106 00107 00108 00109 LD ;MSB der Umw.tsbelle K, tab.'1 0 0 h LD L. A {Code als Tab-Dffset LD fi, (HL) {geändertes Zeichen holen ok LD DE.fcb2 :Zeiger auf 2. FCB wr itbyt CALL {Byte in File 2 schreiben JR Z ,1 oop ;kein Fehler: nächstes Z. ■.itttitttttttJtttttttttltttittttttttttttttttttttttttttttt Status NZ erreicht: irgendein Diskfehler trat auf Bei "Dateiende erreicht " ist das OK, ansonsten hat was nicht geklappt’ ende PUSH LD CALL LD CALL POP CP LD JP AF DE,fcb1 cl ose DE,fcb2 cl ose AF okerr HL,endmel Z .scrmes error OR JP OcOh derror : Tabel1e zur Umwandlung der kritischen Zeichen DS ;Fehlercode retten {File 1 ;schli eßen :ebenso File 2 ;Fehl ercode zurück :Datei ende gefunden" {Zeiger auf OK-Meldung :falls ja: ausoeben und ;Abgang ins DOS ;Bit 7 für Fehl er-Ausgab. ssetzen und Ausgahe u. at S+lOOh&Off00h-S {Anfang auf "gerader“ {Adresse <LSB=00> 91.92,93.180,181,123.124,125,126 Ich,Ifh,’UMLAUT .M ’,Oah,Oah, ’Al 1es klar"'’ O a h , ’Sonst ist es auch e g a l O a h .Odh O a h .’Weleher Fi le? ’,03 Oa h , ’So n i c h t ! Bleich noch einmal’’.Odh O a h , ’In welchen File? ’,03 Oa h , ’Alles roger, bye'’,0dh 001 10 001 11 00112 :diesen neu schreiben •■falls Disl;-Fehler ;Zeioer auf 1. FCB {Byte aus File 1 lesen {Ende oder Fehler {Buchstabe •; 177? ol., kein Umlaut {Buchstabe 185? ; ji.. Gl., kein Umlaut : ‘-T~ = 0 lisw. 00113 00114 00115 00116 00117 0 0 1 18 00119 0100 buf 1 buf 2 f cbl f cb 2 sekbuf 1 0 0 1 2 0 sekbuf 2 DS DS DS DS DS DS 15 15 TO 32 256 256 5200 00121 00122 END Start OOOF OOOF 0020 0020 OlOO 00000 Fehler {Eingabe Filename 1 {ebenso Filename 2 ;FCB File 1 {ebenso File 2 {Sektorbuffer File 1 {ebenso File 2 CF/M intern — kurz und kompakt 1. 0. Vonwort Der C C P wir d direkt unter d as BDOS in d i e T P A g e l a d e n . Er kann mit einem laufenden Programm überschrieben werden. Allerdings muß das Programm d a n n m it e i n e m W a r m B o o t <JP 0000) b e e n d e t werden. A n s o n s t e n kann man den CCP wieder direkt ans p r i n g e n (wenn die Adresse bekannt i s t ) . E r e r w a r t e t d a s D e f a u l t - L a u f w e r k i n R e g i s t e r C. 1. C C P 1.1 W i e s i e h t e i n 1.2 CCP-Kommandos 1.3 CTRL-Codes 2. 3. 4. 5. Filename 1.1 ein Filename aus? ’E R A u f i l e ’ 'DIR’ • DIR 1h ’ • DIR ufi l e ’ ' R E N bfi le=bfi l e ’ 'SAVE n b fi l e ’ ’T Y P E b f i l e ’ ’U S E R n ’ TVV50 für BDOS-Aufrufe 1.3 C T R L - C o d e s CTRL-C: C T R L — Pt CTRL-R: CTRL-S: CTRL-Z: Vorwort N a c h d e m ich a n g e f a n g e n hatte, mich mit C P / M zu beschäftigen, wurmte mich gleich eine Sache ungemein: wie beim alten N e wdos b r a u c h t e ich aus den dicken Anleitungsbüchern wieder nur ein paar Seiten, die wiederum nicht v o l lständig oder zu ausführlich waren. Also woll t e ich mir eine kurze Zusammenfassung der Sachen schreiben, die ich oft b rauchen würde. Daher auch der Titel "Kurz und kompakt*. Leider mußte ich feststellen, daß die Kürze das Verständnis erschwerte und es wieder nötig machte, die dicken Mälzer heranzuziehen. Also habe ich einen Kompromiß beschlossen: die Kapitel sin d kurz gehalten und mit m a s s e n h a f t A b k ü r z u n g e n v ersehen. Im Anhang dagegen werden einige Be griffe und Themen nochmal ausführlicher erläutert, damit auch ein Neuling damit besser zurechtkommt. Klassischerweise müßte die Auf t e i lung a n d e r s sein, aber das war nicht der Sinn der Sache. Die Informationen habe ich mir aus dem "Handbuch zum CP/M" gital Research und dem CP/M-Buch von Plate z u s a m m e n g e s u c h t . von Di Leider bin ich mir bei v i e l e n S a c h e n n i c h t sicher, ob sie stimmen, und wäre sehr froh, wenn das jemand korrigieren würde und Enweiterungen vorschlüge. Vor allem fehlen mir Infos über Terminal-Steuer— Codes. Gerald Schröder sieht Buchstabe, ’* ’= R e s t 1.2 C C P - K o m m a n d o s Genie IIs-CP/M 4.1 DPB-Anhängsel 4 .2 Tastatur— C o d e s Vielen Dank an formationen und Rechners. Wie a) b f i l e = b e s t i m m t e r F i l e , z . B . T U R B 0 . C 0 M b) u f i l e = u n b e s t i m m t e r F i l e , ’? ’= b e l i e b i g e r b e l i e b i g , z.B. T U R B O . ? ? ? o d e r T U R B O . » Disk-Parameter— Tabellen 3.1 DPH 3.2 DPB Anhang: A) E i n P r o g r a m m b e i s p i el B) B e g r i f f s e r k l ä r u n g e n C) D i e S p e i c h e r b e l e g u n g 0. aus? Programmierung 2.1 Z e r o - P a g e 2 . 2 Parametei— Ü b e r g a b e 2.3 Der FCB 2.4 BDOS-Funktionen 2.5 BIOS—Funktionen Terminals 5.1 A D M - 3 A 5.2 VT—52 5.3 TeleVideo CCP Hartmut Obermann für das Korrektur 1esen und viele In an Helmut Bernhardt für die CP/M-Fähigkeit meines 2. 2.1 : : : : : löscht Files I n h a l t s v e r z e i c h n i s akt. L a u f w e r k a n z e i g e n Inhaltsverzeichnis eines bestimmten Laufwerks anzeigen nur bestimmte Files anzeigen F i l e u m b e n n e n (1. N a m e n i n 2. u m ä n d e r n ) n S e k t o r e n (n d e z . ) j e 1 0 0 h a b l O O h s i c h e r n File anzeigen auf a n d e r e n U s e r b e r e i c h (für a l l e L a u f w e r k e gültig) umschalten, n<16 (wichtige) W a r m - B o o t (nur a m Z e i l e n a n f a n g ) Druckei— L i s t i n g a n / a u s Zeile nochmal anzeigen List—Pause, bis irgendeine Taste E n d e e i n e r A k t i o n , a u c h : E O F (Iah) Programmierung Zerp-P»qe 0000: Ansprung W a r m —Boot 0001/2: Zeiger auf Warm-Boot-Routine 0003: 00 01 10 11 I/O-Byte: Bits: 7/b LIST Zuordnung: LIST (LSTi) TTYl CRT: LPT: ULI: 5/4 PUNCH PUNCH TTYs PTP: UPI: UP2: (PUNr) (»BIOS+3) 3/2 READER READER TTY: PTRs URI: UR2: 1/0 CONSOLE (RDR:) CONSOLE TTY: CRT: BAT: UC1: 0004t B i t s 7-4: USER-Nr.} B i t s 3-0: D e f ault-Lw. 0005: Ansprung BDOS (-Funktionen) 0006/0007: Zeiger auf BD O S (bis h i e r h i n kann jedes Programm den S p e i c h e r benutzen, w e n n es mit JP 0 0 0 0 endet) 005ch-007fh: FCB für Benutzer 0 0 8 0 h - 0 0 f f h : Sektor— Buf f e r für B e n u t z e r (C0N:) HEFT 23 Februar 1938 50 Z.2 Parameter-überoafae getstr Übergabe von Parametern beim Aufruf von COM-Programmen am Beispiel von: ’turbo a:abc.pas xyz. c o m ’ 1. FCB: 2. FCB: (005ch) -ff.: 0 1 . 'ABC (006 c h ) ff.: 0 0 , ’XYZ P A S ’ ,0,0,0,0 C O M ’,0,0,0,0 «muß gerettet werden!) getver Rest der Zeile: (OOBOh) ff.: 18,’ A:ABC.PAS XYZ.COM’ (vom CCP in Großbuchstaben umgewandelt, (0080h)=Länge) das Anwender— Programm wird vom CCP geCALLt: es steht ein Stack Ebenen zur Vefügung; also lieber eigenen Stack e inrichten 1 bconst mit open Format des FCB: DR Fl F2 .. FS TI T2 T3 EX S1 S2 RC DO .. DN CR RO RI R2 + 00 01 01 OB 09 10 11 12 13 14 15 16 31 32 33 34 35 close Erklärung FCB-Bytes (bzw. -Felder): search 1 DR: Lw. für Zugriff: 00=Default-Lw. 01=Lw. A 16=Lw. P F1..F8: Filename in Großbuchstaben T1..T3: Extension in Großbuchstaben Bit 7 von TI gesetzt: File kann nur gelesen werden (R/0) Bit 7 von T2 gesetzt: SYS-File (bei DIR nicht angezeigt) EX: akt. Extent-Nr., vom Benutzer auf O zu setzen, bei File E/A 0-31 Sl: reserviert S2: reserviert, bei OPEN/SEARCH/MAKE auf 0 setzen (oder gesetzt???) RC: Record-Nr. im Extent , 0-127 DO..DN: reserviert CR: akt. Record-Nr. bei seq. File, vom Benutzer auf 0 zu setzen R0..R2: Record—Nr. bei Random—File, LSB=R0, MSB=R1, 0verflow=R2 searchn delete readseq wri tseq 2.4 BDOS-Funktionen make BDOS-Funkti onen: (die Funktionsnr. ist jeweils nach C zu laden: es werden keine Register gerettet; s. auch Anhang A) rename 0 0 : sysres 01: bconi n 02 : bconout 03: breader 04: bpunch 05: bl ist 06: condir 07: getio 08: setio 09: prstr ä System-Reset, wie Warm-Boot (zurück zum CCP, Lw. auf A) OUT: A=Tasten-Code IN: E=auszugebendes Zeichen OUT: A=gelesenes Zeichen auf READER-Eingabe warten IN: E=auszugebendes Zeichen auf PUNCH ausgeben IN: E=auszugebendes Zeichen IN: E=0ffh: CONSOLE-Eingabe (Tastatur) <0ffh: CONSOLE-Ausgabe (Bildschirm) OUT: (nur bei E=0ffh) A=00: keine Taste >00: Tastencode OUT: A=I/0-Byte IN: E=I/0-Byte IN: DE=Zeiger auf String, der mit endet String-Ausgabe auf den Bildschirm DE=Zeiger auf Buffer (DE)=max. einzugebende Zeichen (1—255) OUT: (buffer+1): Anzahl eingebene Zeichen (buffer+2) ff.: eingebene Zeichen OUT: A=0ffh: Taste gedrückt =00h: keine Taste gedrückt OUT: H=00: CP/M =01: MP/M L=Versions-Nr. (z.B. 20h=2.0, 22h=2.2) resdsk bseldsk 2.3 Der FCB IN: getlog getdsk setdma getalc wpdsk getro Disk zurücksetzen (bei Diskettenwechsel), DMA auf 0080h Laufwerk A anwählen IN: E=Lw. (00h=A) das angewählte Lw. wird Default-Lw. IN: DE=Zeiger auf FCB OUT: A=0—3: alles OK Offh: Fehler im Filenamen auch ’? ’ erlaubt IN: DE=Zeiger auf FCB OUT: A=Fehlerstatus (s. 15) IN: DE=Zeiger auf FCB OUT: A=Fehlerstatus (s. 15) DMA mit entsprechenden DIR-Sektor geladen, File-Eintrag bei DMA + At32 wenn D R = ’? ’ wird das Default-Lw. auf allen USER-Ebenen durchsucht IN: DE=Zeiger auf FCB OUT: A=Fehlerstatus (s. 15) nächsten passenden Eintrag suchen, ansonsten siehe 17 IN: DE=Zeiger auf FCB OUT: A=Fehlerstatus (Offh: nicht gefunden) Filename darf '?’ enthalten, aber DR nicht, alle pas senden Files werden gelöscht IN: DE=Zeiger auf FCB OUT: A=00: OK >00: Fehler 128-Byte-Sektor wird gelesen, CR und evtl. EX +1 IN: DE=Zeiger auf FCB OUT: A=Fehlerstatus (s. 20) IN: DE=Zei ger auf FCB OUT: A=0ffh: Disk ist voll =0/l/2/3: OK neuen File öffnen IN: DE=Zeiger auf FCB 1 und 2 0LTT: A=0ffh: File nicht gefunden COffh: OK erste 16 Bytes vom FCB: vorhandener Filename zweite 16 Bytes vom FCB: neuer Filename, DR muß 00 sein OUT: HL=Login-Vektor welche Laufwerke wurden bisher angesprDChen? (Bit 0 von L = Lw. A) OUT: A=akt. Default-Lw. (00h=Lw. A) IN: DE=DMA-Adresse OUT: HL=Zeiger auf ALLOCation-Vektor akt. Lw. schreibschützen (R/0) OUT: HL=R/0—Vektor welche Laufwerke sind schreibgeschützt? (Bit 0 von L = Lw. A) 30: setatt 31: getdpb 32: user 33: readrnd 54: writrnd 35: getsiz 36: setrnd 37: resdrv 40: writeO IN: DE=Zeiger auf FCB OUT: A=Fehler— Status (s. 15) R/0 bzw. SYS eines Files neu setzen im Directory OUT: HL=Zei ger auf DPB IN: E=0ffh: hole akt. USER-Nr. =0-15: USER neu setzen OUT: (nur bei E=0ffh)i A=*akt. USER-Nr. IN: DE=Zeiger auf FCB OUT: A=00: OK 0 1 : nicht geschriebene Daten gelesen 03: Extent kann nicht geschlossen werden 04: Versuch, ungeschriebenen Extent zu finden 06: hinter Ende der Diskette <R2>0) bei Fehler 3: nochmal Extent 0 lesen Record—Nr. wird nicht inkrementiert IN: DE=Zeiger auf FCB OUT: Fehlet— Status, s. 33 A=5: neuer Extent kann nicht geöffnet werden (Inhaltsverzeichnis voll) Record-Nr. wird nicht inkrementiert IN: DE=Zei ger auf FCB OUT: R0/R1/R2: File-Größe R0/R1/R2 werden auf letzte Record-Nr.+1 gesetzt IN: DE=Zeiger auf FCB OUT: RO/R1/R2 R0/R1/R2 hei einem File setzen, auf den bis jetzt seq. zugegriffen wurde; nun Random-Zugriff möglich IN: DE=Lw.-Vektor OUT: A=00 Laufwerke zurücksetzen, wenn Bits im Vektor gesetzt IN: DE=Zeiger auf FCB OUT: Fehl erstatus wie bei 34 Block wird vor dem Schreiben mit Nullen gefüllt, wenn er vorher unbelegt war, ansonsten wie 34 2.5 BIOS-Funktionen so erhält man die Startadresse: folgende Tabelle: +00: +03: +06: +09: +12: +15: +18: +21: +24: +27: +30: +33: +36: +39: +42: 53 +45: +48: jeweils BIOS (0001/2)=Zeiger auf BIOS+3 (Basisadresse) + Offset boot Kaltstart wboot Warmstart const Tastatur— Status, OUT: A“ 0ffh: Taste grdückt conin auf Tastendruck warten, OUT: A=Tastencode conout auf den Bildschirm ausgeben, IN: C=Zeichen list auf den Drucker ausgeben, IN: Ce Zeichen punch auf den PUNCH ausgeben, IN: C=Zeichen reader auf Eingabe vom READER warten, OUT: A=Zeichen (lah=E0F> home angewähltes Laufwerk auf Track 0 seldsk Laufwerk anwählen, IN: C=Lw. (00h“A ) ; OUT: HL-Adresse der Sektor-übersetzungs-Tabel1e, HL=0000: Fehler settrk Track anwählen, IN: BC=Track—Nr. setsec Sektor anwählen, INi BC=Sefctor-Nr. setdma DMA-Adresse setzen, IN: BC=DMA-Adresse read Sektor lesen, OUT: A=00i OK, A«01: Fehler write Sektor schreiben, IN: C=0r normales Schreiben; C=li DIRSektor schreiben (sofort ausgeführt); C=2: 1. Sektor eines neuen Blocks; OUT: A=00: OK, A=01: Fehler listst Status des Druckers abfragen, OUT: A=0ffh: READY sectrn Übersetzung der Sektoi— Nr., IN: BC=Sektor— Nr., D E ^ d r e s s e der übersetzungs-Tabel1e; OUT: HL=übersetzte Sektor—Nr. 3. Disk-Parameter-Tabel 1en 3.1 DPH (Disk Parameter Header) Format: XLT Bytes: + 0 0000 2 0000 4 0000 6 DIRBUF DPB 8 10 CSV 12 ALV 14 Bedeutung: XLT: Zeiger auf Sektor— Übersetzungs-Tabelle 0000: für BD0S reserviert DIRBUF: Zeiger auf einen 128-Byte-Buffer für Directory-Zugriffe kann für alle DPHs gleich sein DPB: Zeiger auf den DPB für dieses Lw. CSV: Zeiger auf einen Prüfsummenblock, mit dem festgestellt werden kann, ob die Diskette gewechselt wurde; muß für jeden DPH ein anderer sein; Länge: s. DPB ALV: Zeiger auf einen Block, in dem BD0S die Diskettenbelegung feethält (Allocation-Vektor); muß für jeden DPH ein anderer sein; Länge: (DSM/ 8 )+ l (DSU: s. DPB; evtl. auch: (DSM+l>/ 8 > 3.2 DPB (Pisk Paramater Block) Format: SPT Bytes: + O Achtung: BSH +2 BLM +3 EXfl +4 DSM +5 DRM +7 AL0 +9 ALI +10 CKS +11 OFF +13 indirekt festgelegt: BLS (Blockgröße in Bytes): 1024 * 2 hoch x, wobei x von 0 bis 4 gehen darf (BLS von 1024 bis 16384) Bedeutung: SPT: Anzahl 128-Byte-Sektoren per Track BSH: x+3 (x aus BLS, s. oben), d.h.: wenn BSH=3, ist BLS=1024 usw. BLM: 2 hoch BSH - 1, d.h. wenn BSH=3, ist BLM=7 usw. EXM: hängt von DSM ab; wenn DSM<256: EXM=2 hoch x - 1, d.h.: x=0: EXM=0 usw.; wenn DSM>255: EXM=2 hoch (x-1) - 1; (x=l: EXM=0) DSM: größte Blocknummer (in BLS gemessen); (DSM+1)*BLS ergibt die totale Speicherkapazität der Diskette in Bytes, ohne die System tracks; also: DSH=(Tracks—OFF)»SPT*128/BLS - 1 DRM: Anzahl der Directory-Einträge-1 (d.h.: DRM=127: 128 Dir— Eintr.) AL0/AL1: Bytes AL0 ALI Bits 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 belegt: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 es sind (DSM+1)»32/BLS Bits zu belegen, angefangen von AL0, Bit 7, üt^er AL0, Bit 0, und ALI, Bit 7, bis ALI, Bit 0; bei BLS*= 1024 und DRM=128 sind AL0=0f0h und ALl=OOh (4 Bits belegt) CKS: Länge des Prüfblockes CSV (s. DPH); CKS= (DRM+1)/4; nur bei Disketten, nicht bei festen Speichern (RAM-Disk oder Festplatte: CKS«=0) E3 O F F : Anzahl der System-Tracks; werden am Disk-Anfang ignoriert Februar 1988 4. Genie IIs-CP/M: Besonderheiten Beim Genie IIs—CP/M handelt es sich um eine CP/M—Version, die stark an das Montezuma—CP/M für das Model IV angelehnt wurde. Allerdings wurden nicht alle Features übernommen. Hier nur die für die Programmierung wichtigen Einzelheiten. 54 4. 1 D P B - A n h ä n g s e l DPB+15: DPB+17: 5.1 Z e i g e r auf D C B Hardware—Byte Der DCB enthält nur momentaner Track S e i t e n a n w a h l ). -für d a s Laufwerk (MORD) Name drei Byte-Einträge: Select—Bits für das Laufwerk, (Offh=keiner), momentane Select—Maske (mit D as H a r d w a r e - B y t e sorgt für korrektes Lesen von Fremd-Formaten. Bedeutung der Bits: 7-5: noc h u n b e l e g t 4: S c h r e i b d i c h t e ( 0 = e i n f a c h e , l = d o p p e l t e ) 3: D o p p e l s t e p ( 0 = n e i n , l = ja, f ü r 4 0 e r - D i s k s i n 8 0 e r — L a u f w e r k e n ) 2: T r a c k - Z ä h l u n g ( 0 = g l e i c h e T r a c k - N r . a u f V o r d e r - u n d R ü c k s e i t e , l=ungerade T r a c k - N u m m e r n auf der Rückseite) 1/0: p h y s . S e k t o r g r ö ß e (00=128, 0 1 = 2 5 6 , 1 0 =512, 1 1 = 1 0 2 4 B y t e je Sektor) 4.2 Die Tastatur— Codes Beim IIs übernimmt die T a s t e "PI" die Funktion der Control-Taste. S h i f t PI s t e l l t G r o ß - / K l e i n s c h r e i b u n g um. D i e a n d e r e n F u n k t i o n s t a s t e n liefern f o l g e n d e Codes: Taste entspricht Hochpfei 1 Senkr.pfeil ENTER EOF Linkspfei 1 Rechtspfei I CLEAR BREAK ß P2 C T R L — K (Obh) C T R L — J (LF, O a h ) C T R L — M (CR, O d h ) 7fh, DEL C T R L — H (BS, 0 8 h ) C T R L — I (TAB, 0 9 h ) C T R L — Q (11h) C T R L — C (03h> 7 eh , "ß" 5. ohne Shift mit Shift CTRL-Ä CTRL—Z C T R L — li 5fh, " CTRL—X CTRL—V CTRL—R CTRL—C 5 e h , "- ADM-3A (ESC, lbh) (EOF, Iah) (CR, O d h ) «I (18h) (TAB, (12h) (03h) Code BELL BS TAB LF VT CRT CR INVOFF INVON EOL INVT0S EOS CLS ESC HOME 7 8 9 10 11 12 13 14 15 21 22 25 26 27 30 Funktion Ton ausgeben Backspace zu r n ä c h s t e n Tabulator— Pos. in d i e n ä c h s t e Z e i l e in d i e v o r h e r i g e Zeile ein Zeichen nach rechts an den Zeilenanfang Invers aus I n v e r s an lösche bis Zeilenende Invers umschalten lösche bis Bildschirmende l ö s c h e B i l d s c h i r m u. H O M E E S C - S e q u e n z e i n l e i t e n (s.u.) Cursor an Bildschirm anfa ng Mit der Escape—Sequenz kann der Cursor beliebig auf dem Bildchirm positioniert werden. Nach dem ESC—Code (27) m u ß e i n (61) zum Bildschirm geschickt werden; dieses Zeichen wird nicht ausgegeben. D ann f o l g e n zwei Angaben: zuerst die Zeile und dann die S p a l t e , in die der Cursor positioniert w e r d e n soll. Dabei bedeutet jeweils ein B l a n k (32) d e n W e r t 0. Also wird durch die S e q u e n z “2 7 , 6 1 , 3 5 , 4 0 “ d e r Cursor i n d e r 4. Z e i l e ( Z e i l e 3 v o n N u l l a n g e z ä h l t ) a n d e r 9. S t e l l e (Spalte 8 von Null an gezählt) ausgegeben. 5.2 VT-52 Alle Steuercodes werden durch ein ESC (27) eingeleitet. 19h) Terminals CP/M war ursprünglich ein Terminal-Betriebssystem, d.h. es lief auf einem H a u p t r e c h n e r , an den ein oder meh r e r e Terminal(s) ang e s c h l o s s e n war(en). Je nach Terminal wurden verschiedene Tastatur— Codes gelie f e r t u n d ( w a s w i c h t i g e r ist) v e r s c h i e d e n e R e a k t i o n e n auf Bildschirmsteuer-Codes bei der A u s g a b e verursacht. Das macht es für Program mierer schwer, Programme zu schreiben, die auf j e d e m CP/M-Rechner lauffähig sind (z.B. m i t w e l c h e m C o d e w i r d d e r B i l d s c h i r m g e l ö s c h t ? ) . Daher bieten die meisten Programme eine Anpassung an verschiedene Terminals, z.B. durch Installations-Programme w i e T I N S T bei TurboP a s c a l . Bei h e u t i g e n R e c h n e r n ist die Bi 1 d s c h i r m a n s t e u e r u n g u n d d i e Tastatur zwar meist direkt integriert, aber es werden immer noch v e r schiedene Terminals simuliert, um CP/M gerecht zu werden. Deshalb muß auch heute der Programmierer die Term i n a l —Codes kennen, wenig stens die seines Rechners. Deshalb hier eine Auflistung gängiger T e r m i n a l — Codes. Ergänzung und Korrektur dringend erwünscht. Code Funktion ’A ’ ’B ’ ’C ’ ’D ’ ’E ’ ’H' ’I ’ *J’ Cursor eine Zeile hoch Cursor eine Zeile runter Cursor rechts Cursor links B i l d s c h i r m l ö s c h e n Sc H O M E HOME Cursor hoch; scrollen, wenn nötig B i l d s c h i r m ab Cursor löschen ’ K’ Zeile ab C ursor löschen *L’ Zeile einfügen ’M ’ Z e i l e l ö s c h e n ( R e s t h o c h s c r o l 1 en) ’Y ’ ( y - 3 2 ) ( x - 3 2 ) C u r s o r a n P o s i t i o n x / y s e t z e n ’b ’ F a r b e Schriftfarbe neu wählen ’c ’ F a r b e Hintergrundfarbe neu wählen ’d ’ Bildschirm bis Cursor löschen ’e ’ Cursor einschalten ’f ’ Cursor ausschalten •j’ Cursorposition speichern ’k' Cursor auf gespeicherte Position setzen ’1 ’ Zeileiöschen ’o ’ Zeile bis Cursor löschen ’p ’ Invers ein ’q ’ Invers aus ’v ’ Ü b e rlauf an (Cursor geht über Zeilenende) ’w ’ Ü b e r l a u f a u s (Cursor bleibt a m Zeilenende stehen) (aus: Data-Becker-Führer für Atari-ST) TeleVideo TV950 ASCII Hex -G ~H 07 08 09 0a Ob 0c 0d 16 la le lb lb lb lb ~L ~M ~Z AA ESC ESC ESC ESC ’(’ ’) ’ ’. ’ n ESC ESC ESC ’? ’ ■D’ X ESC ESC ’E ’ ’G ’ X s z lb lb lb lb lb Fu n k t ion 28 29 2a 2e n 3d 3f 44 s z X 45 47 X ESC ESC ESC ESC ESC ’I ’ ■GT ’R ’ T’ ’U ’ lb lb lb lb lb 49 51 52 54 55 ESC ESC ESC ESC ESC ESC ESC W’ ’ Y’ b’ ’d ’ 't* ’y ’ z’ lb lb lb lb lb lb lb 57 59 62 64 74 79 7a n ESC (aus: Anhänge lb 7 b c ’t - A r t i k e l über Ton ausgeben Backspace TAB Cursor runter Cursor hoch Cursor rechts CR wie aber ohne Scroll Bildschirm löschen & HOME HOME normale Leuchtstärke halbe " .» 9 * * ■* \ C L S *. H O M E ( a u c h * C u r s o r — A t t r i b u t e s e t z e n , rn = ' O ’ (30h): C u r s o r a u s ’1 ’ ( 3 1 h ) : C u r s o r a l s B l o c k ( b l i n k e n d ) ’2 ’ ( 3 2 h ) : " (nicht bl.) ’3 ’ ( 3 3 h ) : C u r s o r a l s U n t e r s t r i c h ( b l i n k e n d ) ’4 ’ ( 3 4 h ) : " (nicht bl.) C u r s o r auf S p a l t e s-20h, Zeile z-20h C u r s o r — Pos. a b f r a g e n M o d u s s e t z e n : ’L ’= l o k a l , ’H ’= h a l b - d u p l e x , alles andere: voll-duplex Zeile einfügen Z e i c h e n — A t t r i b u t e s e t z e n (x— 3 0 h ) , B i t s : 6: G r a f i k - M o d u s ( Z e i c h e n a l s G r a f i k ) 5: d o p p e l t h o c h 4: d o p p e l t b r e i t 3: u n t e r s t r i c h e n 2: i n v e r s 1: b l i n k e n d 0: u n s i c h t b a r zurück zum letzten Tabulator Z e i c h e n bei C u r s o r e i n f ü g e n Zeile löschen Zeile ab C ursor l ö s chen Control-Modus ein (alle Steuerzeichen als Buchstaben mit halber Leuchtstärke) Zeichen löschen b i s Bi 1 d s c h i r m e n d e l ö s c h e n Bildschirm invertieren B ild s c h i r m normal Zeile ab Cursor löschen bis Bildschirmende löschen Z e i c h e n s a t z w ä h l e n v o n ’0 ’ ( 3 0 h ) : U S A ü b e r Frankreich, Deutschland, England, Dänemark, S c h w e d e n , I t a l i e n b i s ’7 ’ ( 3 7 h ) : S p a n i e n Schnittstelle initalisieren 1. P a r a m e t e r : B a u d r a t e ( ’? ’= 1 9 2 0 0 , ’0 ’ o d e r ’> ’= 9 6 0 0 , ’< ’= 4 8 0 0 , ’: ’= 2 4 0 0 , ’B ’= 1 2 0 0 , ’7 ’= 6 0 0 , ’6 ’= 3 0 0 , ’5 ’= 1 5 0 , ’3 ’= U 0 ) 2. P a r a m e t e r : ’0 ’= e i n , ’1 ’= z w e i S t o p b i t s 3. P a r a m e t e r : P a r i t y ( ’0 ’= a u s , ’1 ’= u n g e r a d e , ’3 ’= g e r a d e ) 4. P a r a m e t e r : ’0 ’= 8 - , ’1 ’= 7 - B i t - W o r t l ä n g e c ’t - T e x t - T e r m i n a l ) A) B e i s p i el P r o g r a m m -für B D O S Auf ruf e wboot EQU bdos EQU bconi n EQU bconout EQU prstr EQU getstr EQU 0000h 0005h 1 2 9 10 ;W a r m - B o o t - A n s p r u n g ;B D O S - A u f r u f - A n s p r u n g ;hole Zeichen :gib Zeichen aus ;gib String aus shole String start LD LD CALL LD CALL LD LD CALL LD LD CALL LD 0R JR LD LD LD ADD LD LD CALL JP RET DE,string C,prstr bdos C,bconi n bdos E,A C,bconout bdos DE,buffer C,getstr bdos A,(buffer+1) A Z,ab L, A H, 0 DE,buffer+2 HL,DE (HL), C,prstr bdos wboot ;Zeiger auf Str i n g ; B D O S — F k t .— N r . ;S t r i n g a u s g e b e n ; B D O S — F k t .— N r . ;Zeichen holen ;Zeichen nach E ; B D O S — F k t .— N r . ;Zeichen ausgeben ;Zeiger auf Buf f e r :B D O S — F k t .-Nr. DM DB DB DS O d h , O a h , ’Di e 5 0 6 ab ;o d e r : string buffer B) :L ä n g e holen ;=0 ? ; ja, ab ;L ä n g e n a c h HL :Zeiger setzen ;Zeiger auf B u f f e r - E n d e ;Ende-Zeichen setzen ;B D O S — F k t .— N r . ;E i n g a b e n o c h m a l a n z e i g e n ;A b g a n g ;direkt zum CCP i s t e i n T e s t ’, ’* ’ :L ä n g e d e s B u f f e r s ;t a t s ä c h l i c h e i n g e g e b e n :Buffer für Zeichen Beariffserklärunoen In d e r A n l e i t u n g h a b e ich einige Begriffe und Abkürzungen verwendet, die nicht jedermann geläufig sein könnten. Deshalb hier e i n i g e Er— läuterungen. A u ß erdem habe ich noch einige Begriffe aufgenommen, die im Z u s a m m e n h a n g mit C P / M (bzw. C o m p u t e r n a l l g e m e i n ) v e r w e n d e t w e r d e n . Viele Informationen stammen aus der englischen Ausgabe des "Handbuch zum CP/M" von Digital Research. BAT:, BDOS HEFT Batch Batch nennt man das Hintereinanderablaufen von mehreren Programmen, ohne daß eine Person eingreift, wobei die Aktionen (Ein-/Ausgaben> auf einem Drucker p r o tokol1iert werden: FebrUiP BAT: b e z e i c h n e t im C P / M e i n e n Z u s t a n d , in d e m a l l e E i n g a b e n von Reader kommen und d i e Ausg a b e n auf List gehen; ->I/D-BytE B a s i c D i s k O p e r a t i n g S y s t e m ; d a s B D O S ist d er Teil d e s B e t r i e b s s y s t e m s CP/M, der d i e D i s k e t t e n - E i n - / A u s g a b e für alle C P / M - R e c h n e r s t a n d a r d i s i e r t ; e s ist d e s h a l b bei a l l e n C P / M Rechnern gleich und wird von Programmierern intensiv genutzt; das BDOS benutzt das BIOS; -> Anhang C 68 DMA B a s i c I n p u t / O u t p u t S y s t e m : d a s B I O S ist d er " u n t e r s t e ” Teil v o n C P / M ; e s r e g e l t d i e E i n - / A u s g a b e s p e z i e l l -für d e n R e c h ner, auf d e m ein C P / M läuft: es m u ß für jeden R e c h n e r neu • p r o g r a m m i e r t werden; auf das BI D S s o l l t e man m ö g l i c h s t nicht direkt zugreifen; -> Anhang C Block ein e O r g a n i s a t i o n s o r ö ß e auf der Diskette; d ie G r ö ß e wird im DPB D P B f e s t g e l e g t u n d k a n n 1K, 2 K , 4 K , 8 K o d e r 1 6 K b e t r a g e n Blocking ein V e r f a h r e n , da s hilft, auf D i s k e t t e n s c h n e l l e r z u z u g r e i fen; da C P / M nur 1 2 8 - B y t e - S e k t o r e n kennt, d i e D i s k e t t e n — S y s t e m e a b e r oft g r ö ß e r e S e k t o r e n (256, 512, 102 4 B yte) u n t e r s t ü t z e n , w e r d e n m e h r e r e l o g i s c h e S e k t o r e n in e i n e n p h y s i k a lischen Sektor gepackt; dieses Packen wird Blocking genannt; -> Deblocking BIOS 59 CCP C o n s o l e C o m m a n d Processor; dieser Teil d e s B e t r i e b s s y s t e m s ist e i g e n t l i c h ei n P rogramm, d a s n ur d a z u dient, d e m B e n u t z e r e i n e B e n u t z e r o b e r f 1 ä c h e zur V e r f ü g u n g z u s t e l l e n , m i t d e r er leicht die Disketten verwalten kann; es interpretiert die Be n u t z e r k o m m a n d o s ( E R A , DIR' u s w . > u n d s e t z t s i e i n k o n k r e t e A k t i o n e n um; d e r C C P r u f t A n w e n d e r p r o g r a m m e a u f u n d d i e s e k ö n n e n , n a c h d e m s i e a b g e l a u f e n s i n d , in d e n C C P z u r ü c k k e h r e n , f a l l s sie ihn nicht ü b e r s c h r i e b e n haben; f a l l s s i e ihn ü b e r — schrieben haben, müssen sie mit e i n e m W a r m Boot enden, der den C C P neu lädt; es gibt v e r s c h i e d e n e C C P — Versionen, d ie al l e das Merkmal haben, daß sie direkt unter dem BDOS im S p e i c h e r s t e h e n und laufen; -> A n h a n g C Checksum -> Prüfsumme CLS Clear Screen; den Bildschirm löschen Cold Boot K a l t s t a r t heißt, daß d as G e r ä t n o c h n i c h t "warm" ist bzw. erst gerade eingeschaltet wurde und jetzt erstmal die gr u n d s ä t z l i c h e n I n i t i a l i s i e r u n g e n d u r c h z u f ü h r e n sind; normale)— we i s e s o llen d a n a c h nur noch W a r m s t a r t s (Warm Boot) d u r c h g e führt werden; wenn Sie RESET geben, entspricht dies einem Kaltstart COM E x t e n s i o n (z.B. T U R B O . C O M ) v o n d i r e k t a u f r u f b a r e n P r o g r a m m e n , d.h. m a n m u ß in d e r B e n u t z e r o b e r f l ä c h e (CCP) n u r d e n N a m e n des Programms eingeben, um es zu starten; COMmand—Programme w e r d e n immer n ach 100h g e l a d e n u n d d ort g e s t a r t e t Con s o l e , CON: T a s t a t u r und B i l d s c h i r m in m o d e r n e n C P / M - S y s t e m e n , T e l e t y p e ( F e r n s c h r e i b e r ) o d e r s o n s t w a s bei ä l t e r e n ; ü b e r d i e C o n s o l e w e r d e n E i n g a b e n bzw. B e f e h l e g e h o l t und A u s g a b e n g e macht; über CON: kann d i e E i n - / A u s g a b e auf a n d e r e G e r ä t e u m gele i t e t werden; -> I/O— Byte CP/M Control P r o gram for Microcomputers; unser Thema CR C a r r i a g e Return; an den A n f a n g der Z e i l e gehen; b e i m N e w d o s g l e i c h z e i t i g a u c h “i n d i e n ä c h s t e Z e i l e " , w a s t o t a l e r Q u a t s c h ist (aber s e h r e f f i z i e n t ) CRT: C a t h o d e Ray Tube; ein Bildschirm, w i e ihn he u t e jeder b e n utzt DCB Device Control Block; ein Datenblock, der direkt die E i g e n s c h a f t e n e i n e s p h y s i k a l i s c h e n G e r ä t s b e s c h r e i b t bzw. b e e i n flußt; unter dem DPB anzusiedeln und oft auch für Tastatur etc. v o r h a n d e n ; nu r in b e s t i m m t e n B l O S - V e r s i o n e n v o r k o m m e n d Deblocking das Umgekehrte des Blocking: aus einem großen physika l i s c h e n S e k t o r d e n v o m C P / M a n g e f o r d e r t e n 12 3 - B y t e - S e k t o r raussuchen; wird im BIOS erledigt Default bez e i c h n e t einen Wert, der a n g e n o m m e n wird, f a l l s n i c h t * a n d e r e s a n - / e i n g e g e b e n wurde: z.B. ist d a s D e f a u l t - L a u f w e r k bei D i s k e t t e n z u g r i f f e n (wie bei "DI R " ) i m m e r d a s e i n g e l o g g t e Laufwerk, dessen Kennung als Prompt vom CCP ausgegeben wird (" A > " ) DPH EOF E0L EOS ESC Extent FCB Flag HOME D i r e c t M e m o r y A c c e s s ; im C P / M d i e Adresse, an der ein 128 B y t e l a n g e r B u f f e r e x i s t i e r t , in d e n D a t e n v o n d e r D i s k e t t e e i n g e l e s e n bzw. von d e m D a t e n auf die D iskette g e s c h r i e b e n werden; im and e r e n Z u s a m m e n h a n g ein Baustein, der L D I R - ä h n — l i e h e B e f e h l e über den 6 4 K - S p e i c h e r hinaus ausführt Disk Parameter Block; der DPB gibt die Charakteristika eines b e s t i m m t e n S p e i c h e r m e d i u m s (z.B. D i s k e t t e n l a u f w e r k ) w i e d e r ; f a l l s m e h r e r e D i s k e t t e n l a u f w e r k e g l e i c h e n Ty p s in e i n e m S y s t e m v o r h a n d e n sind, mu ß für a lle zusammen nur ein DP B e x i stieren, auf den d ann m e h r e r e D PHs zeigen; da die DPB-Einträge nicht für alle Formate ausreichende Informationen ent halten, w erden s ie je nach CP/M-BIOS-Version durch z usätz l i c h e E i n t r ä g e e r g ä n z t , d i e l e i d e r k e i n e r l e i N o r m u n g unter— 1iegen Dis k Par a m e t e r Header; ein e Datenstruktur, die über dem DPB a n g e s i e d e l t is t (d.h. e i n e n Z e i g e r au f e i n e n D P B e n t h ä l t ) ; d e r D P H b e s t e h t u.a. a u s Z e i g e r n auf v e r s c h i e d e n e Buff e r , d i e d a s B D O S b e n u t z t ; f ü r j e d e s l o g i s c h e L a u f w e r k i m S y s t e m (A:, B: u s w . ) m u ß e i n e i g e n e r D P H e x i s t i e r e n E n d Of F i l e ; e i n r e s e r v i e r t e r Steuer— C o d e (Iah), d e r a n z e i g t , daß ein ASCI I - F i l e hier endet; oft auch die Tastenkombination Ctrl— Z oder Fehlermeldung E n d Of L i n e ; E n d e d e r Z e i l e ; w i e E O S v e r w e n d e t En d Of Screen; E n d e d e s B i ldschirms; oft im Zusamm e n h a n g "to EO S " , z.B. bei " l ö s c h e n b i s B i l d s c h i r m e n d e " E s c a p e ; b e s o n d e r T a s t e b z w . b e s o n d e r e r Steuer— C o d e (lbh); wird benutzt, um eine Folge von Zeichen anzukündigen, die zur S t e u e r u n g ei n e s G e r ä t e s (Bildschirm, Drucker) dienen und nicht ausgegeben werden sollen D i r e c t o r y - E i n t r a g a u s 3 2 Byte; Byte 0-15: Angaben zu m File (Nam e , User— B e r e i c h , E x t e n s i o n u s w . ) : B y t e 1 6 - 3 1 : v o m F i l e b e l e g t e B l ö c k e (Nummern je 2 Byte); falls mehr als 8 B l öcke belegt werden, wird ein zweiter Directory-Eintrag für den F i l e a n g e l e g t ; n a c h D i g i t a l R e s e a r c h ”1 6 K a u f e i n a n d e r f o l g e n d e B y t e in e i n e m F i l e " F i l e Control Block; D a t e n - B l o c k , über den der P r o g r a m m i e r e r auf e i n e n F i l e z u g r e i f t ; im F C B s t e h e n u.a. Name, E x t e n s i o n u n d L a u f w e r k , m o m e n t a n e R e c o r d - N r . usw. F l a g g e ; e i n B i t , d a s e t w a s a n z e i g t , z . B . “d e r e b e n b e r e c h n e t e W e r t w a r N u l l “; - > O v e r f l o w n a c h H a u s e ( t e l e f o n i e r e n , s. E T ) ; C u r s o r i n d i e l i n k e o b e r e E c k e d e s B i l d s c h i r m s s e t z e n bzw. S c h r e i b - / L e s e k o p f d e s D i s k e t t e n l a u f w e r k s über Track 0 positionieren Interleave -> Skew-Faktor I/0-Byte I n p u t / O u t p u t - B y t e ; ein B y t e in der Zero-Page, mit de m lo gis c h e Geräte auf verschiedene physikalische umgeleitet wer d e n k ö n n e n , f a l l s d i e s Ihr C P / M - B I 0 S u n t e r s t ü t z t ; z.B. kan n d a s l o g i s c h e Gerät CON: (Console) die Eingaben von u n t e r s c h i e d l i c h e n p h y s i k a l i s c h e n Geräten erhalten; läßt sich am besten per STAT ändern K Kilobyte; 1024 Byte Kaltstart -> Cold Boot LF LIST, L i n e f e e d ; e i n e Z e i l e w e i t e r gehen (Cursor oder Druckkopf); m e i s t n a c h C R z u f i n d e n , u m e i n e n Z e i l e n v o r s c h u b z u gewähi— leisten LST: d a s G e r ä t L I S T bzw. LST: ist eines der logischen Geräte, die C P / M kennt und ist norma l e r w e i s e ein Drucker 9 loggen meist: ein-/dusloggen; im CP/M: eine neu eingelegte Diskette zum ersten Mal ansprechen bzw. sie dem System bekanntmachen; bei Großrechnern: die Eingabe von Benutzername und —paßwort, bevor man anfangen da r f v zu arbeiten logisch alles, was nicht physikalisch ist; für das CP/M existieren nur logische Geräte, die je nachdem unterschiedlichen phy sikalischen Geräten zugeordnet sein können; eine ConsoleAusgabe, die normalerweise auf einen Bildschirm gelangen wür— de, kann so auf einem Drucker erscheinen; außerdem: logische Sektoren sind Sektoren mit 128 Byte, die CP/M als einzige kennt; das Spei ehermedium "dahinter" (z.B. ein Laufwerk) kann ruhig mit größeren Sektoren arbeiten LFT: Line Printer; das physikalische Gerät, das meist LST: zuge ordnet wird LSB Lowest Signifikant Byte; die unteren 8 Bit eines 16-BitWortes; manchmal auch: Lowest Signifikant Bit, Bit 0 eines Bytes MP/M Multi-Programming Monitor Control Program; der große Bruder des CP/M; für den Betrieb mehrerer Terminals an einem Haupt— Rechner MSB Most Signifikant Byte; obere 8 Bit in einem 16—Bit—Wort; manchmal: Most Signifikant Bit, Bit 7 eines Bytes Nibble obere oder untere 4 Bit in einem Byte Offset fester Wert, der zu jeder Variable (z.B. Adresse oder TrackNr.) addiert wird Overflow Überlauf; falls eine Rechnung oder ein Wert eine gesetzte Grenze überschreitet; meist durch ein Flag angezeigt Page Seite; 256 Byte im Speicher, die allein durch Änderung eines Bytes, des LSB, adressiert werden können (OO-ffh) P T P : , PTR: irgendwelche physikalischen Geräte; P*Punch, R«Reader; -> I/O-Byte Prüfsumme eine Quersumme oder ähnliches von mehreren Bytes; wird beim CP/M vom Directory gebildet, um festzustellen, ob die Diskette gewechselt wurde Punch, PUN: Lochkartenstanzer; früher gebräuchliches Gerät aus der Steinzeit der Rechenanlagen; im CP/M ein logisches Gerät, an dem z.B. physikalisch eine serielle Schnittstelle (mit Modem oder so) hängen kann; -> I/O-Byte Random Zufall; Random-Files sind Daten-Files, bei denen man die Da tensätze (Records) direkt adressieren (lesen/schreiben) kann; -> sequentiell Reader, RDR: Lochkartenleser; s. Steinzeit der Rechenanlagen; logi sches Gerät des CP/M; zum Lesen einer seriellen Schnittstelle nicht schlecht; -> I/O-Byte Record Diskettenorganisationseinheit; je nachdem mal (physikalisch) ein Sektor von 128 Byte oder (logisch) ein voa Benutzer defi nierter Datensatz anderer Länge R/W, R/0 Read/Write, Read/Only; Attribut eines Files oder einer Dis kette; je nachdem darf nur gelesen oder auch geschrieben werden; -> SYS 61 Sector Translation Table Sektoi— Übersetzungs-Tabelle; oft XLT abge kürzt; eine Tabelle, die logische Sektornummern in phsyikalische übersetzt; wird benutzt, um die Drehung der Disketten auszunutzen beim Lesen von hintereinander1iegenden Sektoren; dabei heißt "logisch" hier manchmal auch, daß es sich schon um physikalische (256, 512 ... Byte-) Sektoren handelt; — > Skew— Faktor Select hier: Anwahl(-Bits): eine Bit-Maske, in der 1 Bit gesetzt ist, um ein bestimmtes Laufwerk anzuwählen; manchmal wird noch ein zweites Bit gesetzt, um bei diesem Laufwerk die Rückseite anzuwählen; unterste Ebene des Disketten-Zugriffs; allein dem BIOS überlassen sequentiell hintereinander; Zugriffsform auf Files, bei der nur der jeweils nächste Datensatz (Record) gelesen werden kann; — > Random Skew-Faktor Konstante, die auf die zuletzt adressierte physikalische Sektof— Nummer addiert wird, um den nächsten logischen Sektor zu erhalten; mit diesem Faktor wird die Sector Translation Table aufgebaut, um den Diskettenzugriff zu beschleunigen String Ansammlung von Zeichen; beim CP/M komischerweise immer mit einem "t” abgeschlossen (Zusammenhang mit Turing-Maschine?) SYS Attribut von Files, die unsichtbar und nur für den systeminternen Gebrauch bestimmt sind; SYS-Files auf User 0 können nach Digital-Research-Informationen von jeder User-Nummer aus aufgerufen werden; -> R/W, R/0 System-Tracks eine bestimmte Anzahl Tracks (oft 2) am Anfang einer Diskette, auf denen das CP/M (Boot-Sektor, BIOS, BDOS, CCP) steht, das beim Booten von dort geladen wird; diese Tracks werden nicht als Diskettenplatz gerechnet, sondern per Off set übersprungen; dieser Offset kann auch benutzt werden, um aus einer physikalischen Diskette zwei logische zu machen (eine aus den ersten 40 Tracks und eine mit Offset 40 aus den oberen 40 Tracks oder so) TAB TPA TTY: Tabulator; ein Steuercode (09), der Cursor oder Druckkopf veranlaßt, zur'nächsten durch 8 teilbaren Position zu sprin gen 1 Transient Program Area; Bereich von lOOh bis zum Anfang des BDOS, in den die Anwenderprogramme geladen und ausgeführt werden; der CCP steht auch in diesem Bereich; -> Anhang C Teletype; Fernschreiber; uraltes Gerät, das als Console zur Ein— /Ausgabe benutzt wurde U C : , UL:, UP:, URs physikaliche Geräte, die "U"ser-definiert sind; nicht mit "USER-Bereich" zu verwechseln!; C=Console; L=List; P=Punch; R=Reader User Benutzer; hieri es gibt im Directory verschiedene Bereiche (0— 15), die jeweils nur zugänglich sind, wenn vorher der ent sprechende Userbereich (z.B. per Kommando "USER 1") angewählt wurde; zur Benutzung bei Mehrplatzsystemen bzw. als Urform des Sub-Directory gedacht Warm Boot soll heißen: jetzt ist das Gerät schon warm (länger am Laufen) und muß nicht mehr voll initialisiert werden; die meisten Programme enden mit einem Warm Boot, der dann CCP und evtl. auch BDOS lädt und den CCP startet Warmstart — > Warm Boot Wildcard ein Platzhalter in einem String (z.B. Filenamen) für einen beliebigen Buchstaben oder Teil; im CP/M und Word, Wort 16-Bit-Datum bzw. "Informationseinheit aus 16 Bit" HEFT Zero—Page Seite 0; die ersten 100h im Speicherbereich; ursprünglich Februar von Rechnern stammend, bei denen sich dieser Bereich leichter 1938 oder schneller adressieren läßt (6502); im CP/M als Schnitt stelle von Anwenderprogramm zu BDOS benutzt; -> Anhang C 62 C) Der Soeieheraufbau OOOOh ---Zero-Page 0 1 0 0 h ---- TPA ccpbase “ * (CCP) bdosbase *• BDOS biosbase-■ BIOS ifffh --- Zero-Paae 0000h 0003h 0004h 0005h OOOBh- 0027h 0030h- ■0037h 0038h- -003ah 003bh- 003fh 0040h -004-f h 0050h- ■OOSbh 005c h -006bh OOtch 0080h Maral Boot I/O-Byte User/Default-Lw. BDOS-Ansprung RST-Vektoren 1-5 (unbenutzt) RST 6 (reserviert)' RST 7 (bei Debug über DDT oder SIDs Breakpoint-Entry) reserviert (unbenutzt) ■für BIOS reserviert (je nach BlOS-Version benutzt) reserviert (unbenutzt) 1. Filename bei Aufruf "t.COM filel file2"; bis 007fhs FCB zur freien Benutzung 2. Filenamö - " Def ault-DMA-Buf f er Mein Programm sagt, wir werden hier nie Öl entdecken . j Eine kurze E i n l e i t u n g in da s D a t e n b a n k s y s t e a Hit dea Befehl " L O C A T E " einer Datenbank auffinden. v. H a r a l d H a n d . L o c a t e a r b e i t e t a a s c h n e l l s t e n a u f n i c h t i n d i z i e r t e n bezw. Schlüsseldateien aktivierten Datenbanken. Suaaieren von Feldern : Beispiel Nit d e a Befehl S U N " l a s s e n s i c h n u m e r i s c h e D a t e n f e l d e r von D a t e n s ä t z e n ü b er a e h r e r e S i t z e h i n w e g a u f s u a a i e r e n . Beispiel : Berechnung * USE B : ADRESSEN LOCATE FOR "MÜLLER"»NAHE SATZ : XX DISPLAY — — > E r ö f f n u n g d. D a t e n b a n k ■*” «> A u f s a a a i e r a n g a l l e r Datensitze oder es sollen die Adressen herausgefunden d e r e n P L Z g r ö ß e r a l s 5 0 0 0 ist. Bis zu 5 D a t e n f e l d e r bezw. A u s d r ü c k e las s e n sich jeweils Satz für S a t z a d d i e r e n u n d d a s E r g e b n i s g e t r e n n t in j e w e i l s e i n e r S p e i c h e r v a r i a b l e n ablegen. Beispiel : SUN MENGE, EK:Preis, VK:PREIS. DIFFERENZ, B:PREIS Speicher Inhalte werden alt Hilfe des Befehls ■ D I S P L A Y S. S u c h e n e i n e s D a t e n s a t z e s : De r B e f e h l " C O N T I N U E " B e f e h l s dar. Beispiel Es l a s s e n s i c h b e s t i a a t e S i t z e a l t H i l f e d e r auffinden : folgenden Befehle " F I N D " Hi t diesea Befehl l&Bt sich indizierten Datenbank auffinden. * ein bestiaater Satz in werden, L O C A T E F O R P L Z >5 0 0 0 S A T Z : XX DISPLAY stellt die Fortsetzung des LOCATE- * Z w i s c h e n d e n B e f e h l e n " L O C A T E " u n d "C O N T I N U E " k ö n n e n a n d e r e B e f e h l e zur A u s f ü h r u n g g e b r a c h t werden. H E H O R Y " angezeigt. ohne : A u s d e r D a t e n b a n k A D R E S S E N soll die A d r e s s e v o n Frau M ü l l e r g e f u n d e n wer d e n . der Suaae aller Einkaufspreise USE INVENTUR SUN EX:PREIS in * I s t d e r " L O C A T E " - B e f e h l e r f o l g r e i c h , e r s c h e i n t d e r H i n w e i s "Satz n" a u f d e a B i l d s c h i r a . F o l g e II : 4 l & B t s i c h e i n b e s t i a a t e r Satz : ggf. auch USE B : ADRESSEN LOCATE FOR PLZ>5000 SATZ t XXXX DISPLAY CONTINUE SATZ : XXXX DISPLAY CONTINUE einer Der "FIND"-Befehl l&Bt sich nur anwenden, wenn der Schlüssel (z.B. N a a e ) , n a c h d e a a a n s u c h e n w i l l , a k t u e l l e r H a u p t s c h l ü s s e l d e r a k t i v i e r t e n D a t e n b a n k ist. DATEIENDE ERREICHT E s g e n ü g t ggf. n u r d e n A n f a n g s b u c h s t a b e n d e s N a a e n s e i n z u g e b e n . Positionieren auf einen Datensatz D e r Satz, d e r d u r c h e i n e n " F I N D ' - B e f e h l l o k a l i s e r t w u r d e , wird a u t o a a t i s c h z u a a k t u e l l e n Satz. Er litt sich alt Hilfe des Be fehls "DISPLAY" anzeigen. Mit dea Befehl " G O " o der " G O T O " läBt s i c h d e r dbaseinterne Zeiger a uf ei ne n b e s t i a a t e n Datensatz neu positionieren. 23 Beispiel : Der Naae " Neier” soll aus einer indizierten b a n k d a t e i " A D R E S S E ! " l o k a l i s i e r t w e rden. U S E B: A D R E S S E N I N D E X A D R E S S E 1 FIND NEIER DISPLAY Daten : * D e r B e f e h l " D I S P L A Y " z e i g t d e n n e u e n D a t e n s a t z an. FebrJar l'?öö Beispiel : USE B : ADRESSEN G O TO RECORD 6 DISPLAY od. G O TO ■••> erster Daten- a « «atz h K od. G O B O T T O M « “«> l e t z t e r D a t e n - 1 satz Einfügen von neuen Datensitzen 10. S o r t i e r e n d e r D a t e n b a n k d a t e i Der Befehl ■ I N S E R T ”ermöglicht das Ein f ü g e n eines Satzes an einer lieblgen Position der aktivierten Datenbank. Der Be f e h l Datenbank. * Es k a n n a l t j e d e « B e f e h l n u r e i n D a t e n s a t z i n d i e D a t e n b a n k e i n g e b e n wer d e n . Bei g r oBen nicht indizierten D a t e n b a n k e n ist der " I N S E R T " Befehl sehr zeitaufwendig. * Sortiert wird nach dea angegebenen Datenfeld A u s g a b e d a t e i ist e i n e n e u e a n z u g e b e n d e Datei D i e a k t i v i e r t e D a t e n b a n k w i r d n i c h t g e i n d e r t u n d b l e i b t weiter ia Z u g r i f f . Beispiel 1 : Einfügen hinter d e a aktue l l e n Datensatz " S O R T " be wirkt die Sortierung der aktivierten . S O R T O N f e l d TO d a t e l n a a e Beispiel Beispiel 2 : Einfügen vor den aktuellen Datensatz Beispiel 3 : Einfügen eines leeren Datensatzes : . USE B :A D R E S S E N .SORT O N POSTLZ TO A D R E S S E 1 .USE B : A D R E S S E 1 .LIST 11. ( M b e n e n n u n g v o n D a t e n b a n k d a t e i e n : Zihlen von Oatensitzen : B e l i e b i g e D a t e i e n in d b a s e l a s s e n s i c h a l t d e a Befehl " R E N A M E " umbenennen. Die Anzahl der Sitze in einer Datenbank w e r d e n alt d e a Befehl ■ C O U N T " gezihlt. * D i e V o r e i n s t e l l u n g für d e n D a t e i t y p 1st ".DBF" . E i n e u m z u b e n e n n e n d e D a t e i d a r f n i c h t g e ö f f n e t ( U S E - Befehl) sein. * d b a s e z e i g t d a s E r g e b n i s in f o l g e n d e r F o r a a n ■ Anzahl der Sitze - xxxxx" RENAME B:alter Naae TO Bsneuer Naae B e i s p i e l 1 : D i e A n z a h l d e r S i t z e i n d e r D a t e n b a n k " A D R E S S E N " soll g e z i h l t w e rden. 2 : E s s o l l e n in d e r D a t e n b a n k " A D R E S S E N " n u r d i e S i t z e ge z i h l t werden, d e r e n P o s t l e i t z a h l e n g r ö B e r als 2300 sind. .USE B : A DRESSEN .COUNT FOR POSTLZ >2300 ANZAHL DER SATZE • 00012 Nit Hilfe dieses Befehls " D I S P L A Y F I L E S " lassen s i c h a l l e a u f d e a a n g e g e b e n e n L a u f w e r k v o r h a n d e n e n D a t e i e n von Typ ".DBF" anzeigen. B e i s p i e l 1 : a l l e "DBF" - D a t e i e n v o n L a u f w e r k B s o l l e n a n g e z e i g t werden. :D I S P L A Y F I L E S O N B: B e i s p i e l 2 : a l l e D a t e i e n v o n L a u f w e r k B s o l l e n a n g e z e i g t werden. Oberspringen von Datensitzen : Hit Hilfe des " S K I P " Befehls k a n n der Zeiger, d e r ln a u f d e n a k t u e l l e n D a t e n s a t z zeigt, a u f v o r h e r g e h e n d e bezw. f o l g e n d e S i t z e g e s e t z t werden. B e i s p i e l 1 : .USE B : A D R E S S E N . LIST .5 .DISPLAY .SKIP 3 .DI SP .S K I P - 6 •DI SP . S K I P 2*2 . DISP : .RENAME B:ADRESSEN TO B:ANSCHRIFT 12. A n z e i g e v o n D a t e n b a n k e n i . USE B:ADRESSEN . COUNT ANZAHL DER SATZE - 00008 Beispiel Beispiel D I S P L A Y F I L E S O N B: L I K E *:• dbase nach weitere Möglichkeiten : nur Indexdateien : ...... L I K E n u r R e p o r t d a t e i e n : ..... L I K E *.NDX *.FRN D a s w a r d e r 2. A b s c h n i t t über d b a s e II . Er b e f a S t e sich a l t d e n n o t w e n d i g e n B e f e h l e n zu V e r i n d e r u n g e n u n d S o r t i e r u n g e n v o n D a t e n banken. B e i a n i c h s t e n I n f o g e h t es d a n n w e i t e r a l t d e r E r s t e l l u n g v o n kpl. P r o g r a a a e n , s o w i e n o c h w e i t e r e n n o t w e n d i g e n Befehlen. Ich w ünsche E u c h viel Erfolg bei der Anwendung. Harald M a u s m i t s i e b e n B e i n e n ln der 2 2 . A usgabe des Clubinfos s t e l l t Hartm ut ein e k le in e P la tin e vor, m it deren Hilfe sic h ein e n ich t se r ie ll a rb e ite n d e Maus an u n sere Com p u te r a n s c h lie ß e n lä ß t. Wer nur einen Funken Moral im L eib e und ein en Hunni übrig h a t, b a u t das Ding n a tü rlich nach, so auch ich . Die h u n d ert Mark g e l te n in k lu s iv e der Maus und a lle r T e ile , v e r s te h t sich . CLU» 80 HORB Der e le k tr o n is c h e S c h a lte r 4066 war bei meinem D ealer n ic h t v o rrä tig . S t a t t d e sse n gab e r mir zwei Exem plare des 4 0 1 6 , der l t . B esch reib u n g p ra k t is c h id e n tis c h is t. Damit l ie f die Sch altu n g a b e r n ic h t. D aher m öchte ich em p feh len , fü r die von Hartm ut vo rg esch lag en en T e lle k e in e E rsa tz ty p e n zu nehm en. Wir seh en Im In fo, daß Hartmut zwei T a s te r s e in e r Maus b e n u tz t. Meine h a t a u ch zw ei, die Jedoch ein fa ch m iteinan der k u rz g e sch lo ssen w aren. H art m uts a u ch , a b e r er h a t die Verbindung a u fg e tre n n t und e in e noch u n g e n u tz te L eitu n g des K abels dam it bedröhn t. Nach d ieser A nregung s u c h te und fand ich so g ar noch zwei fre ie L eitu n g en , so d B ß ein w e ite re r T a s t e r a n g e s c h lo sse n w erden k on n te. H ier war B a s te le i in d er Maus nötig: Z u n äch st m ußte H artm uts O p eration d u rch g e fü h rt w erden, um die beiden b e re its v o rh an d en en T a s te n e in z e ln n u tz b a r zu m achen. Fü r ein en d ritte n Knopf fand sic h P la tz a u f d er k le in e n Zu s a t z p la t in e , a u f d er die beiden D ru ck tasten sitz e n . Die d a fü r notw endige Bohrung tr e n n te ein e L eitu n g au f, die Jedoch m it einem S tü ck D rah t w ieder g e sc h lo ss e n w erden k o n n te. E s h an d e lt »ich dabei um die C om m on-L eltu ng a lle r T a s te n und der R o lle n e le k tro n ik . Daher m ußte s ie au ch an d ie n eu e T a s te a n g e sc h lo ss e n w erden. Die le tz t e fre ie Leitung des K ab els kam an ih re n zw eiten Pin. E le k tro n isc h g ab es a lso k ein e Sch w ierig k eiten . M ech an isch i s t d ie G e s c h ic h te Jedoch etw as h e ik e l. Der einzubauende neue T a s t e r b ra u c h t n a tü r lic h Raum. G lü ck lich erw eise fand sich ein er, d essen u n ten a u s d er T a s te n p la tin e h e ra u s ra g e n d e r T e il m it knapp er Not noch n ich t die d a ru n te r lie g en d e n B au t e ile d er H au p tp latin e b e rü h rte. Es m ußte d afü r a b e r b e r e its ein w enig g e s c h liffe n w erden. S e in D ruckknopf s te h t so hoch ü b er, daß e r durch ein e n ie d erz u b rin g en d e Bohrung im G ehäusedeckel g erad e etw a 3 mm h e ra u s ra g t. Das i s t e in e op tim ale A rb eitsh ö h e. Wer da6 n ach b au en m öchte, s o llte sich u n b ed in g t ln s e in e r Maus se h r s o r g fä ltig nach p assen d en P lätzen um sehen. Es i s t au ch n ic h t v e r k e h r t, v o r s ic h ts h a lb e r zwei od er d rei v ersch ied en e k lein e T a s t e r zu r A usw ahl b e r e it lie g e n zu hab en . Wenn ein e so glü ck lich e Anordnung w ie in meinem E xem p lar n ic h t m öglich i s t , g e h t a b e r auch die e in fa c h s te Lösung: Die T a s te wird ü b er einem genügend großen Hohlraum, wovon es ln a lle n M äusen genug g ib t, d ir e k t in den G eh ä u sed eck el g e sch ra u b t. Um den D eckel ganz vom Boden tre n n e n zu k ön n en , em p fieh lt s ic h dann ein e Steck v erb in d u n g zu r ü b rig en E le k tro n ik . L eid er m ußte nun au ch ein e neue O b e rm a n n -P la tin e h e r, denn fü r sie b e n A n s ch lü sse h a t d er 7 4 0 4 ein en In v e rte r zuwenig. E in z w e ite r Chip m ußte se in . A ußerdem m ußte die S teck v erb in d u n g von d ieser P la tin e zur T a s t a tu r um zwei P in s v e r b r e it e r t w erden, die auch n ich t mehr a u f die s e h r k le in e a l t e P la t in e p a ß te n . Im P rinzip h a t sich a b e r n ich ts an dem von H artm ut v o r g e s t e ll t e n S c h a ltu n g s v o rs c h la g g eän d ert, so daß die neu e S c h a ltu n g h ie r n ic h t v o r g e s t e llt w erden muß. F r e ilic h k ann Ich nur fü r meine eig en e Maus (Ml von Noris D a ta ) v e r s i ch e rn , daß die Um bauten problem los m achbar sin d . H artm uts Maus s ie h t In w en dig g en a u so au s, w a h rsch ein lich a lle anderen au ch . Man k ann a u f d er L ad en t h e k e s c h le c h t dem T e il m it dem Sch rau b en zieh er z u le ib e g eh en , um d as zu ü b e rp rü fe n , a b e r die C h ance, ein g eeig n etes Modell zu erw isch e n , d ü rfte bei 100% lie g e n . Möchte jem and m eine a l t e P la tin e h a b en ? S ie t r e ib t die R o lle n e lek tro n ik und e in e T a s t e . A uf dem 7 4 0 4 i s t noch ein In v e rte r, und a u f dem zw eiten 4 0 6 6 sind noch d rei R e la is f r e i, so daß H artm uts T rick m it d er g e tre n n te n V e r bindung zw ischen den b e id en v o rh an d en en T a s te n ohne A nbauten noch d u rch fü h rb ar is t . Ich m öchte die P la tin e a b e r nur u n b e s tü ck t h erg eben , denn ln Lübeck k rieg e ich k ein e n 4 0 6 6 . B itte m eiden! In d er P ra x is s t e l l t e s ic h h e ra u s, daß die Im pulse von d er R olle seh r ra sch a u fe in a n d e r fo lg en . Die Maus d a rf d a h e r nu r se h r langsam bew egt w er den. V ie lle ic h t s o llt e man je d e s zw eite Loch in den beid en B len d en sch eib en d er R ollen m echan ik v e rs to p fe n , so daß nu r noch h a lb so o ft ein Impuls e r fo lg t. Dann w äre d ie G a ra n tie fü r die Maus en d g ü ltig v erw irk t. A ber das h a t den b e g e is te r te n Fum mler no ch s e lte n a b g e s c h re c k t. Es i s t ein e Wonne, m it d er Maus zu a rb e ite n . G erade eben beim K o rre k t u rle s e n d ie s e s T e x te s k a rriö k e re ich dam it im B ildschirm kreu z und quer, Maus in d er R e ch ten , B ie r ln d er L in k en, Augen nur noch a u f dem T e x t, n ic h t m ehr a u f d er T a s t a tu r . Das T e il a r b e ite t näm lich n ic h t nur m it G raph ikp ro grammen zusam m en, so n d ern m it allem , w as die P fe ilta s te n und die and eren T a s te n au s d er K e y b o a rd -R e ih e 3 8 4 0 h b e s p itz e lt. A lso auch m it TSCRIPS. Hartm ut, D eine Idee w ar S a h n e ! A rn u lf Sopp HEFT 23 F eb ru a r l?8 o 70 M c o h i ri vor. Manfred Held D r u c k e r p a t o }~i Nein,nein keine Angst. nicht noch »in ü'dci' Pätch im Syeteir. gendwelche Steuerzeichen oder Grafikzeichen darzustellen. Dieses-mal ein Hardpatch ????! um ir Folgendes Problem: Bei Neudos, Gdos ect. wird CP in LF umgewandsit. Es wird an den Drucker also nur CR <ODh) ausgegeben. Der Drucker 3iuss so eingestellt werden, dass nach einem CR automatisch ein Zeilenvorschub gemacht wird. Man kann dem Betriebssystem zwar beibringen, dass CR und LF getrennt zum Drucker gebracht wird, dies wurde auch schon oeffter getan, aber eit Programmen, die eigene Druckertreiber haben, steht man wieder vor demselben Problem. Ditr bt-ssere Lc-esung ist. i3ii s'JtNt ein freies Fort 'j.nd ein TreierPin an dem Port und verbindet das Pin mit den Eingang am Drucker, es muss nur beachtet werden, dass die Ruhelage des P o r t s nach einem Reset, L-Pegel ist. Der Rest ist Software. Ich habe im Bootsector des CP/M's ein freies Plaetzchen gefunden und vier Byte eingepflanzt. die jetzt bei Arbeiten mit CP/M den Drucker u m sch alt en. Somit stehen mir alle Moeglichkeiten des Druckers unter Newdos und CP/K voll zur Verfuegung. Anders beim Betriebssystem CP/M. CP/M sendet CR und LF getrennt. Es wird keine Umwandlung vorgenommen. Auch die Programme behandeln CR und LF als zwei getrennte Zeichen. Im Betriebssystem CP/M unseres Computers gibt es einen Softschalter, der wahlweise LF zu 00h umwandelt. Somit koennen wenigstens die Programme unter CP/M, in begrenztem Umfang genutzt werden. Damit die Programme in CP/M die Faehigkeiten des Druckers voll nutzen koennen, ber.oetigt der Drucker ein getrennter CR und L F . Das steht aber im Wiederspruch mit dem Drucker, der eben andes eingestellt werden muss. Die Loesung: Laut Druckerhandbuch gibt es einen Schalter oder Jumper (Autolinefeed oder CR(AUTO FEED XT) oder sonst irgendwie) damit der Drucker nach Empfang des CR einen Zeilenvorschub ausfuehrt. Wichtiger ist aber der Anschluss am Drucker. Laut meinen Handbuch hat der Drucker am Pin 14 dps Centronics-Steckers einen Eingang mit der Bezeichnung "AUTO FEED X T " . In der Beschreibung zu den Anschlusspins des Steckers heisst es Empfaengt der Drucker einen CR-Code. wenn dieses Signal L ist, schiebt er das Papier nach Druckende automatisch um eine Zeile vor. Das heisst, wenn L-Pegel an diesem Pin anliegt, und CR empfangen wird, fuehrt der Drucker einen Zeilenvorschub aus. Liegt H-Pegel ar.. wird CR und LF getrennt behandelt. Der Drucker fuehrt keiner. Zei.envorschub auE . wenn CF alleine empfangen wird sondern wartet bis I.F empfanger. wird. Wichtig dabei ist , dass der Schalter CP. (AUTO FEED XT? auf "Drucken ohne LF" steht. Fuer unser Problem heisst das, von Pin 14 auf L-Pegel liegen, unter N e w d o s , Gdos ect. muss der Eingang fuer CP/M auf H-Pegel. Man koennte jetzt einen Schalter in den Anschlusstecker einbauen, mit dem Pin 14 einmal auf Masse geschaltet wird oder auf +5V. Das hat aber den Nachteil, vergisst man den Schalter bei Betriebssystemwechsel umzuschalten, gibt es Schrott am Drucker. W i e d e r d i e s m a m 1s a l s T E A K -40 / P D — B O 55P R — T r - a c k u im s c r h a l t u n g —& —U —L a u f w e r k e 11 Oie Firma TEAK scheint ständig bemüht ihre Laufwerksproduktion auf d e m n e u e s t e n t e c h n i s c h e n S t a n d z u halten. Dadurch kommt aber mancher K ä u f e r e i n e s BO-Spui— T E A K —L a u f w e r k s , von dem behauptet wird, d a ß e s auf 4 0 — S p u r b e t r i e b u n s c h a l t b a r ist, ganz schön in Schwierigkeiten. Immerhin erschienen allein im CLUB BO-Info schon zwei v e r s c h i e d e n e A n l e i t u n g e n für d i e Umschaltung von T E A K — Laufwerken. Vor k u r z e m l i efen m i r zwei L a u f w e r k e über den Weg, die man einem B e k a n n t e n a l s 4 0 — S p ü r e r v e r k a u f t hatte. Bei genauerer Betr a c h t u n g s t e llte sich heraus, d aß e s si c h u m L a u f w e r k e mit der Bezeichnung FD-55FR-611-U handelte, die von einem anderen Anbieter als umschaltbare BO'er verkauft werden. Nach kurzer Suche war die Stelle gefunden, an der ein einfacher Ein/Aus-Schalter eingelötet we r d e n muß, u m sowohl 4 0 a l s a u c h 8 0 T r a c k s b e nutzen z u können. Viel Spaß und Glück beim Löten, euer H a r t m Lt t Obermann Gepufferter Anmerkungen DMA- und IM2-fähioer ECB-Bus für GENIE I und II z u m CI u b - 8 0 - E C B - B u s - P r o . i e k t Helmut Bernhardt Liebe Cl ub-Freunde, die Ihr den M ut g ehabt habt, Euch an die Löterei B us- P ro je kt e s heranzuwagen, Euch speziell gilt der -folgende Artikel zu ma . Vo rher m öc ht e ich aber noch e inige B e me r k u n g e n loswerden, die lichen sollen, war um ich me ine e t wa s a bw e ic he nd e n V o r s t e l l u n g e n e ines Interfaces den en Eures Pro je kt e s e n t g e g e n s t e 11en muß. des ECBdem T h e v e r de u t EC B-Bus- Die G ru nd v or st el l un g des E C B - Bu s ist nicht mur d as U m so r t i e r e n einer w ilden P in an or d nu ng auf den S ys t e m b u s - S t e c k e r n unserer Co mp u t e r auf die noch un ü b e r sichtlichere des ECB-Bus sondern noch eine Rei he w e i t e r e r Srtrukt ur en , die s p e ziell auf die besonderen F ä h i g ke it en der Z 8 0 - C P U a bg e st i m m t si nd und auch von ei nem v ol ls t ändigen ECB-Bus u n te r s t ü t z t werden. Dazu gehört zunächst der Interrupt M o d e 2 <IM2), der vo r au ss et z t, daß die Inte r rupt-auslösende Karte der C PU be i m I n t e r r u p t - A c k n o w l e d g e einen 8Bit-Vektor über den Da t enbus mitteilt. D ieser V e k t o r m u ß vom E C B - B u s üb er den Da tenbuffer auch zur CPU gelangen können, w e n n IORQ* und M l * g l e i c h z e i t i g low sind. A u ß e r d e m m ü s se n die Buffer aller B u s s i g n a l e b i d ir e kt io na l sein, weil bei DMAZugriff auf Ko m ponenten des C P U - B o a r d s der D M A - C o n t r o l l e r auf dem ECB - Bu s auch die e nt s prechenden Baugru pp en des C P U - B o a r d s a d r e s s i e r e n mu ß. Das bedeutet e i nen sehr viel größeren A u f w a n d bei der S te u e r u n g der T r e i b e r r i c h t u n g dieser Buffer. Und schließlich soll der E C B - B u s nicht nur s e l b s t g e s t r i c k t e Karten aufnehmen sondern ha u pt sächlich den Einsatz der bre it en P a l et te kä u f l i c h e r Karten für EC B -Systeme ermöglichen. Daher v e rb i et et sich auch die p r in zipiell geniale L ö sung, der Ri c ht un gs s t e u e r u n g des D a t e n b u f f e r s über F r e i g a b e s i g n a l e , die die E C B - B us -K ar t en liefern. Ko m m e r z i e l l e Karten w i s s e n nicht, daß Euer Bus solche Signale voraussetzt. Das Konze pt Eures EC B-Bus baut auf den M ö g l i c h k e i t e n des T R S - 8 0 - S y s t e m b u s auf, die leider w i rk l i c h recht be s c h e i d e n sind. IM2- und D M A - F ä h i g k e i t sind dort nicht vorha nden. Beim GE NIE u nd b e i m K omtek 1 lassen sich aber alle E i g e n schaften des ECB- B us v er wi rk l ic he n, ohne intern gro ße Ei n g r i f f e m a c h e n zu m ü s sen . l*n aber auch beim T R S- 8 0 z u m in de st 90V. der k o m m e r z i e l l e n Karten, die ohne IM2 u nd DMA arbeiten, nut zen zu können, ist es un u m g ä n g l i c h , von der R i c h t u n g s s t e u er un g des Da te n bu ff er s durch die K ar t en selbst abzuko ranen. Da ist dann auch die bei mir e in g eschlagene O c h s e n t o u r nötig, die R i c h t u n g s s t e u e r u n g aus den Fr e ig ab e s i g n a l e n der Baugruppen in n e r h a l b d es C o m p u t e r s h er z ul ei te n . Die im folg en d en Artike l be s c h r i e b e n e E C B - B u s - E i n g a n g k a r t e b e r ü c k s i c h t i g t nicht nur die o.a. Gesicht sp u nk te s o n d er n br in gt no ch ein paar z u s ä t z l i c h e L e i s t u n gen, die nic ht unbedingt an den E C B - B u s g eb u n d e n sind, s o n d e r n .einige andere H ar An ar e - E r u e i t e r u n g e n u n te rs t üt ze n. D iese F e a t u r e s si nd aber nicht unbedingt w i c h t i g und können auch ausges pa r t w e r d e n . 73 Es ist be im GEN I E und Komtek ohne w e i t e r e s mö g l i c h , den E C B - B u s mit diese r E i n g an gs k ar te ans telle der alten zu b e t r e i b e n . B e im T R S - 8 0 s i n d noc h zusätzliche M a ß n a h m e n nötig, die einen voll f u n k t i o n s f ä h i g e n E C B - B u s e rm ö gl ic he n . He lm ut Be rnhardt W ä h r e n d bei Ve rz ic h t auf DM A- und IM2-Fähigkeit die S te u e r u n g des Da tenb u f f er s zwischen Computer und ex ternem ECB-Bus r e la ti v einfach zu r e a l i sier en ist (der Buffer darf nur in Ri chtung CPU treiben, w en n Daten von B a u gruppen gelesen werden, die nicht auf der C P U - Se i te des Buff e rs - also auf dem ECB - Bu s - sitzen), sin d bei der E in bi n du ng d ieser Fe at u r e s einige z u sätz liche A s p ek te zu berücks ic ht i ge n. Der I n te rr up t -M od e2 der 2 8 0 - C P U setzt voraus, daß der Interrupt -L i ef er an t b ei m Interrupt- Acknowl edge (Ml* und IORQ* beide low) ein 8Bit-Ulort auf den Da t e n b u s legt, das die CPU als LSB einer A d re ss e in der I n t e r ru p t- Ve kt o r- Ta belle interpretiert. D ie se s Byte m u ß von einer In t er ru p t - Q u e l l e vom ECB- B us durch den Dat en bu f fe r auch zur CPU gelangen. Der B uffer m u ß beim I nterruptA c k n o w l e d g e also auch in Ri c ht u n g CPU treiben. Bei Übernahme der Daten-, A d r e ß - und St eu erbusse dur ch einen D M A - C o n t r o l 1 er (DMAC) auf dem ECB- Bu s m u ß dieser auch Zugriff auf RAM, EP R O M und alle CPUseitig des Bu ffers liegenden Baugruppen haben. Für A d r e ß - und S t e u e r l e i t u n gen ge staltet sich diese R ic h t u n g s s t e u e r u n g recht einfach. Hier genügt es, w en n dur ch das low aktive CPU-SIgnal BUSA K* (nur dann darf der DMAC a r b e i ten) die Buffer dieser Signale in Richt un g zur CPU treiben, so daß der DMAC dort e n t s p r ec he n d adre s si er en kann. Für die S t e u e r u n g des D at e nb uf fe r s sind noch w e i te re Umstände zu b er üc ksichtigen. W en n die CPU den Bus kont ro ll i er t, kann beim S c h r e i b e n der Buffer immer in R ic ht u ng ECB-Bus treiben. Be im Lesen darf er nur dann nicht in R ic h t u n g CPU treiben, w en n interne B a u g ru p pe n (C PU -seitig des Bu f fers) a dressiert werden. Sonst wür de ein von außen g e l es e ne s FFH gegen ein von der intern a d r e s s i e r ten B augruppe a u s g e g e be ne s D a tenwort arbeiten. A b g e s e h e n davon, daß die g e gene i na nd er arbeitenden K o mp on e nt en sich irgendwann g e g e n s e i t i g zerstören, w ü r d e die CPU F e hl in f o r m a t i o n e n lesen. W e n n der D M A C ^ 5 ) d e n B us steuert, ist Lesen und S c h r e i b e n für die T r e i b e r r ic h t u n g des Buf f er s das ganze Gegenteil. Wenn der D M A C Daten einer CP U- s ei tigen S ys te mk o mp on en t e liest, wobei er dann auch die L e i t u n g RD* low zieht, m u ß der Buffer in R i ch t u n g ECB- Bu s treiben. Das darf er aber nur dann, wenn er auf CPU -s ei t ig e K om p o n e n t e n zugreift. We nn er von ein er B a ugruppe auf dem ECB- Bu s liest, m u ß der B u ff er in Ri ch tu n g CPU treiben, um dann nicht auf dem E C B - Bu s zwei Dat e nw ör te r g e g e ne i na nd er arbeiten zu lassen. Für die T r e i b e r r i c h t u n g d es Buff e rs m u ß also b e r ü c k s i c h t i g t werden, ob der DMAC oder die CPU den Bus kont r ol li er t , ob die a dr e s s i e r t e Ba ugruppe auf dem ECB- Bu s oder C PU -s e i t i g d es Buff e rs liegt u nd ob g e l e se n oder ge s chrieben wird. In Tab el le 1 sind die für versch ie d en e B e t r i e b s z u s t ä n d e aus obigen Ü b e r l e gung en a b geleiteten T r e i b e r r i c h u n g e n (von der CPU aus ge sehen) zusam me ng e stellt. Dabei ist zu b e r ü c ks ic ht i ge n, daß z u s ä t z l i c h auch noch beim Interr u p t -A c kn ow le d ge die R i c h t u n g ’rein* sein muß, weil der GENI E keine eigenen v ek to r i s i e r t e n IN T-Quellen hat. Diese Tabelle ist G ru n d l a g e der Sch al tu ng in A bb.l. Die R i c h t u n g s s t e u e r u n g soll aussch l ie ßl ic h aus Sig n al en , die von CPUse itigen Baugrup p en zu be z ie he n sind, erfo lgen. N u r da nn ist auch g e w ä h r l e i s t e t , daß auf dem E C B - B u s jede ha n de ls üb l ic he Kar te funk ti on i er t. K o m m er z i e l l e EC B- Bu s -K ar te n legen kein aktives Signal auf den Bus, das in die B uf f e r s t e u e r u n g ei nb ez o ge n w e r d e n kann. -Tabelle 1: Treiberrlchtuno des ECB-Bus Databuffers BusSteuerung durch CPU DMAC interne Baugruppe adressiert Read Write externe Baugruppe adressiert Read Urite raus raus rein rein raus rein raus rein Der Aufwand dafür ist aber nicht unerheblich und der Anwender dieser Bus steuerung muß sein System genau kennen, um die nötigen Steuersignale an die Schaltung legen zu können. Einen Anhaltspunkt dafür, welche Freigabesignale Vorkommen können, mag die Tabelle 2 geben. Darin sind die prinzipiell vor handenen Baugruppen und einige häufig benutzte Hardware-Erweiterungen und die Punkte, wo deren Freigabesignale abzugreifen sind, zusamnengestel 11. Diese Punkte sind mit jeweils einem der Punkte A bis H auf der Eingangskarte zu verbinden. Tabelle 2; Interne Freioabesionale CPU-Board RAM R0M1 R0M2 R0M3 R0M4 Tastatur Video-RAM IC Adresse 4000-FFFF (3900-3BFF) <7> OOOO-OFFF 1000-lFFF 2000-2FFF 3000-34FF(37DF) <7> 3800-3BFF(38FF) <7> 3C00-3FFF Vi deo-Board Cassette 1 Cassette 2 Port FF Por,t FE Expansi on-Interface RAMI RAM2 Floppy Drucker RS 232 EG3020 EG3014 8000-BFFF C000-FFFF 37E0-37FF 37E8 u.Port FD Ports F8 , F9 Typ Pin 37 347 10 11 12 13 7 35 3001 3002 3003 2714 348 32 15 20 20 20 20 1 3 20 20 10 139 154 12 20 10 9 37E0-37FF Port FD Ports 80-88 II dilti Baugruppen werden nicht gelesen und brauchen deshalb nicht in dii Buffirsteuerung niteinbezogen zu werdent dis IN A,(0DFH) dis EGMMBA dimt nicht der Datenaquisition, es setit nur dis 74LS259-Latch zurict, ein Ditenwort wird nicht ausgegebtn Die DMA-Fähigkeit der ECB-Busbuffer alleine reicht nicht aus. Es muß durch Verbinden der Systembus-Leitung BUSAK* mit CCDBS/STADBS* und DODBS/ADDBS* auch dafür gesorgt werden, daß beim DMA-Zugriff die Buffer der CPU-Signale in den hochohmigen Zustand versetzt werden. Das kann entweder auf der Ein gangskarte durch Querverdrahtung der entsprechenden Pins von CN2 bzw. CN3 oder durch feste Verdrahtung auf dem CPU-Board gemäß Abb.11 erreicht werden. Die direkte Verbindung des INT»-Signals (im Schaltplan INTEXP») von der Floppy-Baugruppe zur CPU ist dafür aufzutrennen. Das Signal INTEXP* ist stattdessen an den entsprechend bezeichneten Punkt der Schaltung und an den freien Triggereingang des CTC-Kanals zu legen. Die 1NT*-Leitung des ECB-Bus ist an den Punkt INTECB* zu legen und der Ausgang 1NTCPU* ist mit dem INTEingang der CPU (ZBO, Pinl4) zu verbinden. Damit ist gewährleistet, daß nach dem Einschalten oder Drücken des RESETKnopfes immer der Interrupt vom FDC-Board direkt zur CPU durchgeschaltet wird und das Betriebssystem im IM1 arbeiten kann. Wenn allerdings andere Baugruppen auf dem ECB-Bus in Echtzeit im IM2 betrieben werden sollen, müssen auch die systemeigenen Interrupts dieses Spiel mitmachen können und das geht nur dann, wenn ihnen der CTC-Kanal beim INT-Acknowledge einen Vektor zur Verfügung stellt. Die Schaltung leistet es, daß ein LD A,xxxx xxlxB; OUT (0EDH),A das INT* Signal des FDC-Boards über den CTC umleitet. 9 18 155 2,14 14 32 3 Z80-CTC 14 RB.V24 Z80 -DART 35 ? 155 2,14 Ports 00-7F HRG1B von RB ? 245 19 Schmidtke 80Z.Karte BOOO-BFFF ? 138 15 Ports DO, Dl Port DF bleibt unberücksichtigt EG44MBA ■ Ports DE, DF EG44MBA+ <4) ■ Port EC 254K-Banker <10) ■ (u. ED mi t dieser Karte) ‘ ■ Ports 50-5F CP/M-Banker <4> EXP1 von RB Durch Vorschalten weiterer AND-Gatter vor die Eingänge des 74LS30-ICs <z.B. 74LS08, 74LS11, 74LS21) kann die Anzahl der verwendbaren Eingänge für Frei gabesignale beliebig erhöht werden (Abb.10). Da für die Richtungssteuerung des Datenbuffers ohnehin einige ICs nötig wa ren, und der ECB-Bus auch IM2-fähig ist, ließ sich mit etwas Mehraufwand auch gleich eine Vektorisierung der Interrupts des 25ms-Timers und des Floppy-Controllers realisieren. Dafür ist Voraussetzung, daß auf dem ECB-Bus auf einer Karte ein freier Z80-CTC-Kanal <2> vorhanden ist, über den durch Software das gemeinsame 1NT*-Signa1 des Systems umgeleitet werden kann. Der CTC-Kanal ist dann im Zähler-Modus mit der Zählkonstanten 1 und Triggern durch eine negative Flanke zu programmieren. 20 11 32 bleibt unberücksichtigt «1 37 37 29 31 37 Im Normalfall liegen alle memory-mapped (mm) Baugruppen CPU-seitig des Trei bers, so daß dann einzig MERQ* <IC1<4, 74LS347, Pin5) an die Schaltung ge führt werden muß. Wenn aber auch nur eine im Baugruppe auf dem ECB-Bus steckt, müssen alle anderen mn Freigabesignale einzeln an die Schaltung ge führt werden. Die Software muß dann aber Rücksicht auf diesen Umstand nehmen. In der 1NTVektor-Tabelle darf nicht einfach 4012H stehen (INT-Vektor des DOS), da die Serviceroutine des DOS nicht mit RETI sondern mit RET endet und der Z80-CTC dann nicht weiß, wann er seinen 1E0-Ausgang wieder auf High zurücknehmen soll. Es muß folgender Umweg eingeschlagen werden; «1 ■ ■ ■ ■ 1NTAB CTCN DEFW DEFU DEFU SERV1 SERV2 .... {Anfang 1NT-Tabelle (nächster Vektor ju.s.w. DEFU CTCN DEFU LETZT jVektor für Serviceroutine des INT vom CTC-Kanal ;N, über den die System-Interrupts laufen (Ende der Vektor-Tabelle CALL EI RETI 4012H jServiceroutine des DOS Signale gel ie fe rt wer de n. Der EC B-Bus braucht se i n . ’ A u ß e r d e m bleibt es d em An we n d e r offen, w ä h r e n d d es IM2- Betriebes anderer Baugru pp e n den 25ms INT v er hu n ge rn zu lassen. W e n n b e i m Lable CTCN einfach ein El, RETI steht, w i r d 37E0H nicht mehr gel es en u n d da ra ufhin erfolgt kein we i t e r e r Interrupt des T i m e r s mehr. Eine R e i n i t i a l i s i e r u n g des T i m e r - I N T s g eschieht durch U m p r o g r a mm ie r en des V e k t o r s auf ein anderes Lable, das w i e der den CALL 4Q12H enthält, und e in ma li g es Lesen von 37E0H. Durch Zurücksetzen von Dl in Port EDH w i r d w i e d e r der INT des F DC - Bo ar ds d i rekt an die CPU d ur ch g es c h a l t e t und alle In te r r u p t s des ECB- Bus w er d en u n terbunden . Mit der für die I nt e r r u p t - S t e u e r u n g be n öt ig te n P o r t d e c o d l e r u n g und m it dem Latch w urden noch einige zusä tz l ic he Funkti o ne n r e a li si e rt . Zunäc hst w u r d e n auch die Port fr e ig ab es i gn al e OUTECH*, OUTEEH* und O U T E F H * hergeleitet. Davon kann OUTE CH » zur Freigabe des 74LS 2 73 Lat ch auf dem 256K-Ba nker <10> b e nutzt werden. Dieses Signal w i r d direkt an den Pinll des 74LS273 geführt, wobei dann aber die bisher dahin führende L e i tu n g zu durcht re nn en ist. Damit ist dann das 74LS30 IC auf dem Banker ü b e r f l ü s s i g u nd auch die Leit un g en AO bis A 5 sowie 10RQ* und UIR* b ra uchen nicht m eh r dort hi n geführt zu we rd en <A6 und A 7 w erden dort nicht nur zur P o r t d e c o d i e r u n g sondern auch noch zur E rz e u g u n g der 8 Bi t- Re f r e s h a d r e s s e b en ötigt u nd m ü s s e n deshalb w e i t e r h i n an g es chlossen bleiben). Mit Bit 0 in Port EDH w u r de ein so f t g e s t e u e r t e s In ve rtieren des zum 256 KBanker führenden S i gn a ls A 1 5 re alisiert. Damit läßt sich mit D0=0 an Port EDH (Einschaltzustand) v orgeben, daß die unt er en 32K A d r e ßb e re ic h des Z80 g ebankt werden können, w ä h r e n d D0=1 an Port EDH das B a nk in g der ober en 32K f e s t 1e g t . Und sc hließlich kann m it D2=l an Port EDH ein g e m e i n s a m e s Invertieren der A dres se n A M und A 1 5 er re ic h t werde n. Die dabei g e w o n n e n e n Signa le A14' und AIS' k önnen anstelle der Signale A 1 4 und A I S an die De c o d e r s c h a l t u n g für die löK (ROMs und nun I/O), IC25, 74LS139, Pins 14 und 13 geführt w erden und g e statten dadurch ein V e r l e g e n dieser Komp on e nt en an d as obere Speich er e nd e 48-64K. In diesem Bereich f un k ti o n i e r e n dann zwar die ROMs nicht mehr, we nn man aber dann noch ein 7 4 L S 3 2 IC spendiert und m i t d e m Signal E D , 3 (D3 von Port EDH) ein pr o g r a m m i e r b a r e s A b s c h a l t e n der ROMs e i nb au t (Ab b .10), hat man auch noch die Funkti on e n des Omikr on M a p p e r s ( ko m p a t i b l e r Selbstbau in <9>) für den Betrieb von CP /M rea li s ie rt . Dieser leistet (wenn auch mit ei nem a n deren 0UT-6efehl) e b e nf al l s d as Einstel le n der Sy st e mk on fi g u r a t i o n : 0 0 0 0 H- F7 DF H F 7 E 0H - F7 FF H F 8 0 0 H- FB FF H F C 0 0 H- FF FF H RAM <7> ttl Floppy, Drucker T a s t a t u r <7> Video-RAM II dtr (hikroo Hipptr fir den TRS BO leistet selbst eine vollständige Decodierung des Bereichs des Sonder-RtHs des 6ENIE 77 Ein Patc he n der CP/M S y s t e m d i s k e t t e ist sehr e i nf ac h. Auf den S y s t e ms p ur en läßt sich relativ ein fa c h die Sp ru n gl ei st e des Lo ad er B i os finden, die aus ein er Reihe von J umps b e s te h t (C9 nn nn C9 nn ...). D a r an schließen sich die Di sk Pa rameter T a b e l l e n m it sehr v ielen 00H an un d u n m i tt el b ar danach st eh en die Befehle LD A,40H; OUT (50H),A. Diese b ei d en Befehle sind durch die B ef eh le LD A,xxxx llxxB; OUT ( 0E DH),A zu e r s et ze n . Damit läuft das CP/M des Omikron M a p p er s dann auch ohne de nselben. Ulenn diese Eingriffe auf dem C P U - B o a r d gemacht w e r d e n , ist der C om puter aber von der E CB - Bu s- Ei n g a n g s k a r t e abhä ngig, weil von d i e s e r dann le benswichtige selbst nicht ange s ch lo ss e n zu V on dieser A b h ä n g i g k e i t kann m an sich dur ch einen M e h r f a c h - (oder mehrere Ueni gf a ch -) Um sc ha l te r lösen. A b b . 9 zeigt, wie man damit entweder die u rs pr ün g li ch en Si gnale des CPU-Bo a rd s oder die s t e u er b ar en Signale dieser S ch al tu ng an die en ts p re ch en d en Stellen des C PU - Bo a r d s führt, u n d damit das Gerät entweder wie b i s l an g ohne E C B -E i ng an gs k ar te oder mit ders e lb en und allen ihren M e h r l e i s t u n g e n laufen lassen kann. Um den Um fa ng der ( zu s ätzlich zu denen des S ystembus) an die E ingangskarte gefü hrten Lei tu ng en etw a s zu reduzieren, bietet es sich an, IC7, 74LS30 auf der Eing an g sk ar te nicht zu bestücken und di e se s IC im C om pu t er an geeigneter Stelle hucke pa c k mit den Pins 7 und 14 auf ein anderes Dil l4 IC zu löten und die internen F re i g a b e s i g n a l e fest do rthin zu v er legen (Pins 1-6, 11-12). Dann braucht nur noch das Signal INTERN von Pin8 des 74LS30 an die E in ga ngskarte (CN2, Pin25c) geführt zu werden. U en n die z u s ä t z li ch en F ea tures der E i ng an gs k ar te voll genutzt w e r d e n sollen, können alle b e n ö t i g t e n Signale (SYSRES* AIS* A14' A15' E D , 3 OUTECH«) über freie V e r d r a h t u n g an unbelegte Pins von CN2 gelötet w e r de n. Im Layout sind nur die Sinale INTCPU* INTEXP* 1NTECB* und INTERN über CN2 geführt. Dadurch k önnen alle V er b i n d u n g e n mit dem C om puter (nicht nur der Systembus) über CN2 laufen. U er diese V a r i a n t e des ECB- Bu s bauen möcht e, kann bei m i r für 10 DM (incl. Rückporto) eine geätzte aber ungeboh rt e Karte im E u r o p a fo rm at bekommen. Sollte irgend je m an d die Karte am K omtek 1 b e tr ei b en w o l le n, kann ich e ntsprechende I n fo r ma ti on e n zur V e r f ü g u n g stellen, die eine N u t z u n g auch dort er möglichen. Der A n s c h l u ß an den T R S 80 ist nicht ohne S o n d e r m a ßn ah me n möglich, weil die internen Datentreiber 1 M 2- B et ri eb ver hi nd e rn . Ein Hardw ar e- Pa tc h , der dage ge n hilft, ist in <8> be schrieben. Eine H e r l e i t u n g der Signale 10RQ* M E R Q * RD* und U R* aus den da ra us gewon ne n en S ig n al en IN* OUT* M UR * und MR D* des T R S 80 S ystembus mit Gat te r n erzeugt Signale mit nicht ganz rich ti g em T i m in g, die eventuell S c hw i e r i g k e i t e n b er eiten könn en; hier ist das A b g r e i f e n der original en S ig na le eine bessere Lösung. Aufbau und Anschiie^en der Karte Entgegen der ü bl i c h e n Te chnik, solche K arten d o p p e l s e i t i g geätzt zu e n t werfen, wurd e hier ein ei nseitiges Layo ut mit einer un v e r s c h ä m t e n Menge Drahtb rü ck e n bevorz ug t, wa s das D ur ch k o n t a k t i e r e n an I C - S o ck e l- Pi ns v e r m e i det. Damit w i r d be im A uf ba u aber viel Fummelei und be im Te s t e n viel Arger erspart. Der Stecker CN1 (VG64, a,c, Stifte, gewink el t) w i r d auf den E C B - B u s g e steckt. Für den A n s c h l u ß an den S y s t e m b u s w u r d e n 2 V a r i a n t e n vo rgesehen. Durch Einbau einer V G 6 4 a,c-6uchs en 1e i st e bei CN2 von der Lö ts ei t e ( A bb .8) m u ß durch einen en t sp r e c h e n d e n Draht ve rh a u z um Gegens tü ck für den 50poligen P Ia ti ne n r a n d s t e c k e r des CP U -B oa rd s die A n o r d n u n g der Signale u ms o rt ie rt w e r den. Uer a l l e r di n gs ein ästheti s ch es 50 p o l i g e s Flachkabel bevorz ug t , kann CN2 unbestückt lassen und stattdessen in die nicht a n g e s c h l os se n en Lötaugen von CN3 von der L öt s e i t e einen ge ei g ne te n 50po l ig en Stecker einl ö te n. Dann w i r d aber der z um U m s o rt ie r en der Sig na le nötige Dra ht ve r ha u nur auf die Karte zwischen CN2 u nd CN3 verlagert. A ußer den reinen B u s - Si gn a le n des C o mp ut e rs m ü s s e n bei Bedarf auch noch die aktiven S t e ue r si gn al e der Eingangskarte an den Computer zu r üc k g e f ü h r t werden und die im Co m pu te r abzugr ei f en de n F e ig a b e s i g n a l e an die E in ga n g s k a r t e g e führt werden. Daf ür sind am obe ren P l a t i n e n r a n d ent sp re c he nd e L ö t pu nk t e vor- "handen. Die w i c h t i g e r e n Signale si nd aber auch an Lötpu nk t e von CN2 g e führt, w o m it dann alle Signale Ober CN2 (und bei entsprechender Querver d ra h t u n g auch CN3) mit d em Computer v e r b u n d e n w er de n können. Dafü r re ic ht dann aber der 5 0p ol ig e P Ia t i n e n r a n d s t e c k e r des C PU -B o a r d s m it s ei ne n 3 f r e i en Pins nicht m e h r aus. Da m u B dann noch eine zu sä tzliche f l i e g e n d e S t e c k v e r b i n d u n g he rh al t en , die diese zu s ä t z l i c h e n Signale übergibt. Stick Iist* Seckerbetegiiagen 041 (ECS-Bts) Reihe a NR. Reihe c 6ND BUSAK« A» Al3 RFSHi IORQi II II II II - I W 12 11 HU 11 AM 11 II 32 31 30 » 28 27 2i 25 24 23 22 21 20 1? 18 17 li 15 II 14 ♦12V 13 II 12 BUSRQ« 11 Wiiti 11 Ai * AS 8 A4 7 A2 i D4 5 D3 4 Di 3 05 2 ♦SV 1 END RESET* HEROi CLOCK AIS A12 11 HALT» RDi 11 URi INT« Mil 11 AID All IE0 11 Dl 11 A14 1EI II A7 A8 Al A3 AO D2 D7 DO ♦SV 042 (»ca Srsteabu) Reihe a Nr. Reihe c END BUSAK« CLOCK HER0> 10R0« Hl* HALT« nc nc Mil« All A10 Al 3 A12 nc nc nc nc A7 A5 ,A3 Al BUSRQ« nc nc D5 Di D3 D4 nc nc (♦»/) 32 31 30 2» 28 27 2i 25 24 23 22 21 20 1? 18 17 li 15 14 13 12 11 10 ? e 7 i 5 4 3 2 1 lCs: 4 I 74LS245 I x 74LS174 1 x 74LS13J I I 74LSI25 1 x 74LS8i 1 x 74LS32 1 I 74LS30 1 I 74LS11 1 x 74LS08 1 x 74LSOO GND RESET« nc RFSH« RD< URi nc INTERN INTEXPi 1NTECB* A8 A14 <5> 280 DMA - Schnell, aber kompl iz ie r t / Rolf Keller / c't 12/85, 7 6 -7 9 <4> H a r d w a r e- Um sc h al tu ng für den B e t r i e b von CP /M bei den Computern TRS 80, GENIE 1 und II u n d Komtek 1 / H. B e r nh ar dt / Info des GENIE/TRS 80-User-Club Bremerhaven, H a r dw ar e -S on de r he ft 11/85, 1-5 <7> GENIE I und II: Voll d e c o di er te r Sondei— ROMj RAM im Bereich 3900H bis 3BFFFH / H. B ernhardt / Info d es G E N 1 E / T R S 80-Usei— Cl ub Bremerhaven 11/8 5 .....? <8> Interrupt Yo u r 80 - With ou t a h ar dw a re mod, your 80 is iranune to rude in terruptions / Dougl as C. Fisher / 80 m i cr o, J a n u ar y 1983, 258-264 <9> CP/M Ha rdware für T R S - 8 0 , G E N IE 1 u nd II und Komtek c.Ueberschaar, Info des T R S 80/GENIE-Usei— C l ub s Br e merhaven 1 / H. Bernhardt, <10> 256K- ( 1M-) RAM für 280-S ys te m e / H. Be rnhardt / Info des Club 80 ,Nr.l4, 4 ■ Widerstände: 2 x 10k M AIS nc nc nc nc Ai A4 A2 AO nc UAITi nc DO D7 02 01 1NTCPU« nc (♦W) Sonstiges: 1 x W M »,c Stift* gewinnet I x V6i4 i,c Buchsen gerade 1 x Leiterplatt* jede Hinge Draht •ill Btduld MHIN y0HTEC 11 diese Pins sind im Tii 1 nicht belegt oder fibreo Signale, die hier nicht benutzt «erden 12 die Lage «on -12V «ird nicht einheitlich gehandiibt, diese Spannung kann aoeh Minders liegen (auf bei jeder gekauften Karte geprift «erden) ffSrtt tHkrte 3—t Surer Litl DO Lite r at ur n 13 P4 <1> V e r b i n d e n d - Der E C B - Bu s / Jo hannes A s s e n b a u m / c't 12/85, 40-61 > <1 LS 4) -17t I) « ( m. <2> ZBO CTC - Eins a tz u nd P r o g r a m m i e r u n g / Rolf Keller / c't 4/85, 92-94 C PU - So a rb eiten DMA-Con riKTtps E 5 £ f * - -----1 <3> In t e r r u p t - P r i o r i t y - E n c o d e r und V e k t o r g e n e r a t o r für 1M2 mit dem 280 CTC H. Be rnhardt / Info des G E N1 E/ TR S 80- U s e r - C l u b Br emerhaven 12/85, 1Q-11 <4> Di rekter S p e i c h e r z u g r i f f ; Schneller als die tr o ller-ICs / Rolf Keller / c't 8/85, 80- 83 UR ouftF*- n S T «— l) l/Ltot S te u e r u n g de» TOT*c* Databu-ffers, von A l 5 so wie A14 UND A I S , P ortdecodieru ng, U h is cha lt en der pr og r am m ie rb a re s I n v e r t i e r e n Interrupts M taim 4) Dr ah tb r ü c k e n p l a n , die Drahtbr üc ke n Bautei le zu legen si nd vor der B e s t ü c k u n g aller anderen J 3) La y ou t der E i n g an gs ka r te CNI A . RÄ — St u Ü3.' J L m Rm- M ■ .«!» ± Die. 1 i_ ß A H 13- (C M ) C • » <•• • O interne , Fhcij»V*-Sl'tjnalc 5 US S t_ 2_ <( ■ff \4i C M-StiU HEFT ECB-Bus iNfexp iu r ftj Tun Pu 81 C CM /STA MS Februar 1933 82 DofßJTÄfiÜ 2) P u - H e r u n g des ECB-Bus ES 5) Be s tü ck u n g s p l a n , J1 ist nur dann zu legen, w en n im GE NIE ein s t ä rk e re s Ne tzteil e i n ge b au t wu r d e , das den E C B - B us m it v e r s o r g e n soll ftOM-i E U , P'*>« 9,*e *-» RÖni tu, n»t 41,41 ROM — ZU, Ti*t (,? R o m 41 4* - > ROM« WM3« ROM» P « » 2<J*1 -> r ö m 84 ----*■k»nii pfitiji *• — -+• P o w y. MO' f T' .— T M Li II des H u c k e p a c k 74 L S 3 2 auf 222 , 74LS1M, Pits 9,10 1 +f K ?<», i<r-t< t f,\ i o 6) B e s c h a l t u n g R QM s MH2* ‘ ""jb E43- —» R0M37 ■ & — m s 32 t---s, fLO tlV lfttiOoitt,ni 10,ti W S , ie) ffi2K< e « ED/3 ___ 9.0Hi> tlff, 10011 P'mt L°, H * dem CPU-Board z u m A u s b l e n d e n der MH'« * 11,12 210, 3001, Pias 20,21 211, 3002, Pits 20,21 R0H3'« 212, 3003, Pits 20,21 RtH4'* 213, 2714, Pit 20 diese Signale sind an die m s der Fassung gtbogetea Pins zu MH2'» ■ 4,7 R1S, Seite zu PU 2 4 «oo 213 (RDM) 8) V e r b i n d e n von B US AK * mi t C C D B S / S T A D B S « und DODBS/A DD B S* mLlil"HiA.ckei>*ck~ M iütexr IC5 - C M ) , Pi» , Pi k Z,*,*0/ 13 ( IAir^ West. -* \IVS ( M U 4*9) t A rt \C, IS C w U <31), Pi* 43 I S I K - BanketA4S sysies ■ IS i K - &**!*e r CS>**es) RBSET ■ 9) Unsch a lt en zw is c h e n der Eingin gk a rt e 7) V e r b i n d e n Eingangskarte des EC8~Bus m it de m Systembus d es Computers üb er die o r i g i n a l e n 6 E N I E “Si gn al e n und steuerbaren Signalen __ S Her hat hat ein ^ schreiben» <»»s kann e'neS U » 9 e keh Proqr» »» ‘°*'r IU » • ' • • » * ! « « » BS,C' inS deutsche * -ra * t o ,n . , . r h k e i t , u ^ m t » u< yönnen. ka b e\n ____ Bör se ist, in d«>r L » 9 e auch , uB dl«* sei n h -0 eich«rb *r e i 0 1 ich *»lb,,r 110 * B bö r se ö r s e gebe veT da Z u diese *«* ‘ r k au-f e n : _______ _ _ _ _ Maus» und TRS 80 hl. . ------- 1 O O Im Zuge der Mode r n i s i e r u n g meines Geräteparks habe ich mir vor Kurzem einen IBM-kompatiblen Portable (Toshiba T2100) zugelegt (keine Angst, ich b l e i b e w e i t e r h i n voll auf T a n d y e i n g e s t e l l t ) . Leider arbeitet die Atari-Maus, die ich mi r vor einiger Zeit zugelegt habe, nicht mit dem Toshiba zusammen. Aus diesem Grund h a b e i c h -folgende z w e i P r o b l e m e z u lösen: 1. I c h benötige e i n e R S 2 3 2 — M a u s -für d e n P C . 2. M e i n e B e s s e r e H ä l f t e , zugleich Finanzminister im Hause Ober mann, bewilligt d i e n ö t i g e n M i t t e l -für e i n e s o l c h e s G r a u t i e r nur, wenn ich zuvor die Ata r i —Maus verkaufe! Gratl* a tl* Sowohl d i e M a u s a l s a u c h d a s M o d e l 1 O O s i n d 1 0 0 7.'ig i n Ordnung und i c h g e b e e i n e Ü b e r n a h m e g a r a n t i e v on 14 T a g e n . Wer sich für eines oder beide Geräte interessiert, kann mich entweder anrufen (ab Mitte April b i s E n d e Juni nur an Wochenenden) oder mir schreiben. Hartmut 85 Obermann e ii'etn U >ero sie ,u, . n 0 <*. eV - «° :r> W — , SOT- / C, roe1'nleS Aus diesem G r u n d e mu ß (will) ich mich von de r im letzten Info beschriebenen Maus incl. Inter-face trennen. Die Schaltung funktioniert n a t ü r l i c h n i c h t n u r a m 4p, sondern auch mit allen anderen TRS 80— und Video Genie—Geräten. Wer also mal seine Grafikprogramme mit Maus fahren, oder auch nur mit einem solchen P e r i p h e r i e g e r ä t e x p e r i m e n t i e r e n will, s o l l t e sic h bei mir melden. Meine P r e i s v o r s t e l 1u n g l i e g t s o bei ca. 60 bis 70 Märkern für Ma u s incl. Interface, V e r p a c k u n g und Porto. E b e n f a l l s i m l e t z t e n I n f o e r w ä h n t e ich, daß ich vor einiger Zeit ein Model lOO von T a n d y e r s t a n d e n habe. Da ich für diesen Compu ter , jetzt, nachdem ich den portablen PC habe, keine Verwendung mehr sehe, m ö c h t e ich a u c h d i e s e s Gerät v e r ä u ß e r n . D a s Model 100 hat 24k RAM- und 32k ROM-Speicher, eingebaute Pro g r a m m e für TextVerarbeitung, Adressen— und Terminverwaltung sowie Kommunikation über die e i n g e b a u t e RS 232-Schnittstelle. Natürlich ist auch eine Kassetten— sowie eine Druckerschnittstel1e vorhanden. Das lOO'ter wird komplett mit 4 Akkus sowie einem englischen und einem deut sc h e n H a n d b u c h g e l i e f e r t . M e i n e P r e i s v o r s t e l 1u n g für d i e s e s w i r k l i c h s e h r s c h ö n e G e r ä t l i e g t bei ca. 4 5 0 , — D M (ev. 5 0 0 , — DM mit K a s s e t t e n r e c o r d e r ). är“ ;, z uu ssaa mm wm e n :, m V s ' 8,!i U 4‘ * 5 3 i,»»"4 “ e r " * 0 *5.i awl*"’ I r-r:‘ ‘ ° t)M £ 2 , U B * „ n 40 T r , °” ss/ . 0 » „ i W • 1 8<" " s " ‘* « X “ ?” A « t s0 »s Bas Pirst BOO» l aster andt eries HEFT Basi' f eSt; 80! 2 0 .DM fc o w p l e t x -rl'58 , Tr,-truroen t s ■ - TeX3 _ -rwn* Mod « Klaus Hermann, »rcl • » a « ® * * 7^ Februar 1938 86 87 R SE ~~ Bö* s e — B ö rse Betr. Computer für DDR Ich habe kostenlos folgende Gerate abzuqcben : Sharp PC 1211 - versch - J u n i.o rLiteratur. -Computer in »it Drucker der und Kassettenspeicher, Sasisausführung S o llte dafür Bedarf bestehen, so bin mit Betriebsanleitung Net*teil und Handbücher , ich gerne bereit die Geräte de» Club zur weiteren Verwendung zuzusenden. und Z80 Hochintegrations CPUs in CMOS nutzen bestehende Entwicklungs system e und Software C Unter den B ezeichnungen TM P Z84C 011/013/015 bietet T O S H IB A Hochintegrationsprodukte mit Z80-Kern an. Die Produkte sind in 4 und 6 MHz-Version lieferbar und v o n —4 0 °C bis + 8 5 ° C spezifiziert. TM PZ84C011/015 haben ein 100-Pin Flat-Pack-G ehäuse, w ährend TM P Z84C 013 im 84-Pin PLCC gefertigt wird. G em einsam ist allen 3 Produkten neben der CPU ein O n-C hip-C lock G enerator und Controller. TM PZ84C011 ist durch Ausstattung mit 5 Ports für l/O-intensive A ufgaben ausgelegt, w ährend T M P Z84C 013/014 mit 4 bzw. 2 USART-Kanälen für kom m unikationsintensive Applikationen entwickelt wurden. Beide Produkte verfügen über einen inte grierten W atch Dog Timer, T M P Z84C 015 d arüber hinaus über 2 Tim er/Counter. Bei der Entwicklung der Produkte w urde besonders Wert dar auf gelegt, daß vorhandene Entwicklungssystem e für die Em u lation verw endet w erden können. Für den A nw ender bedeutet dies, daß der Einsatz dieser Pro dukte ohne größere Investitionen in H ard- und Software erfol gen kann. Das wöre alles -für heute. Mit freundlichen Grüßen, txh*Ut:l~ick Mit ihrem sicheren Gespür für Produkte, die der Markt in großen Stückzahlen braucht, haben die Japaner unseren bewährten Z80 um mehrere integrierte Zusatzfunktionen erweitert. Gedacht sind die neuen Schaltkreise für Controller-Anwendungen, bei denen der Mikroprozessor für fest vorgegebene Steuerungaufgaben mit Programmen aus dem ROM betrieben wird. Automaten, Hausgeräte und Verpackungsmaschinen sind Beispiele für den ControllerEinsatz. Werden größere Stückzahlen gefertigt, muß der Her steller mit dem Pfennig rechnen. Sockel, Lötverbindungen und der Platz auf der Leiterplatte kosten Geld. Je mehr mechanische Verbindungen eine elektronische Schaltung hat, desto größer ist ihre Fehleranfälligkeit und um so schwieriger ist das Testen. / J> e * ttlL u (+ T o rtv ) Ks^~ ( his «*/' wtUzf&J Achtung ! !* An a l l e / C 1u b n i t g l i Nürnberg besuchen, und e t e r , die am 23. April den Flohmarkt in ich habe einer» Tisch reservieren l a s s e n wenn Jemani von euch elr. Gerat 2u ver aujber n h a t , k a n n m it b r i n g e r . Ich habe außerdem ein Strirtgy-Floppy zu verkau-fen mit 1/0 Program und vielen K a s s e t t e n . Preis Verband 1ungssache. es Eckehard Unverständlich ist, daß Zilog die Entwicklung hochintegrier ter Contoller-CPU’s nicht schon längst betrieben hat. Andere Halbleiterhersteller, wie z.B. Intel mit seiner 8051-Serie, haben einen großen Marktanteil erobert, ohne daß Zilog die Chance mit seinem weltweit eingeführten Z80-uP und den dafür vorhandenen Entwicklungssystemen genutzt hätte. Der für ein fachere Anwendungen vorgesehene Z8 ist nie so recht zum Zug gekommen und stand im Schatten seines erfolgreichen älteren Bruders. Nachdem der Z80 immer noch der in der größten Stück zahl verkaufte Mikroprozessor ist, kann man erwarten, daß Toshiba mit seinen hochintegrierten Schaltkreisen am Markt offene Türen einläuft. Hätte man diese Produkte schon vor drei oder vier Jahren (von Zilog) bekommen können, wäre heute wahr scheinlich der Z80 mit seinen Abkömmlingen der Industrie standard auch bei den Low Cost Controllern. Kuhn Heinrich Betz < > > • Testbericht Dru cke r PEACOCK D 10 18 (B a u g l e l c h mit Panasonic KX 1083) N a d e l d r u c k e r Kopf Lebensdauer : 100 Hillion Zeichen bei Entwurfs-Qualität Farbband : Kassette mit nahtlosem Farbband Ende des vergangenen Jahres habe Ich mich entschlossen meinen Drucker gegen ein besseres Exemplar einzutauschen. alten Bei der Firma Computer-Service (W .Grundmann) konnte ich meinen alten Nadeldrucker ln Zahlung geben und erstand ein Vorführmodell der Firma PEACOCK, den D 1018, der bauglelch mit dem Panasonic KX 1083 Ist. Mit diesem Gerät bin ich sehr zufrieden und die Testergebnisse der Zeit schrift "Warentest von Januar 1988" gaben dem Drucker die Note "GUT". Schwierigkeiten gab es zuerst mit den Farbandkassetten, aber mittler weile habe Ich ohne Schwierigkeiten vom Händler genügend Ersatz bekommen. Wie geagt das war ein kurzer Steckbrief der technischen Daten. Obrlngs lassen sich die einzelnen Schriftarten per Tastendruck von vorne bequem einstellen, ebenso die Länge des Blattformates. Für meine Wordstar-Version habe ich mir eine eigene Druckeranpassung gemacht und so verfüge ich über zusätzlich weitere Schriftarten. Hier eine kurze Obersicht der Druckarten per Softwareansteuerung : P E A C O C K —D r u c k e r a n p a s s uxna Technische Daten des Nadeldruckers mit 9 Nadeln : (Epson kompatiball Zeichenarten : Entwurf, Pica-Schönschrift, komprimierte Schrift, Elite Schönschrift, Proportional-Schönschrift. Zeichensatz 96 ASCII-Zeichen, 96 ASCII-Kursivzeichen, 32 Internationale Zeichen, 64 Block-Grafik-Zeichen, 132 IBM-PC-Sonderzeichen. : Worte und Leerzeichen unterstreichen Schmalschrift Kursiv Riesenbreitschrift fuer diverse Funktionen: Epson-Fettdruck Epson-Doppeldruck Epson-Elite; Epson-Pica-Schrift Proportionalschrift fuers Auge Punktmatrix : Punktdurchmesser 3/254 Zoll (0.3 mm) Größe der Zeichen : Standardzeichen : 0.078(B)*0.095(H)Zoll Hoch-/tlefgestellte Zeichen : 0.078(B)*0.053(H)Zoll Anzahl der Zeichen pro Zeile : Pica (Entwurf, Schönschrift) 80 Zeichen/Zeile (10 Zeichen/Zoll Ellte(Entwurf, Schönschrift) 96 Zeichen/Zeile (12 Zeichen/Zoll Komprimiert 137 Zeichen/Zelle (17 Zeichen/Zoll Pica gedehnt 40 Zeichen/Zeile ( 5 Zeichen/Zoll Elite gedehnt 48 Zeichen/Zelle ( 6 Zeichen/Zoll Kompimiert und gedehnt 68 Zeichen/Zeile (8.5Zeichen/Zoll Druckgeschwindigkeit : Entwurf Pica 180 Zeichen/s Entwurf Elite 180 Zeichen/s Schönschrift 33 Zeichen/s Druckrichtung : Ausdruck von Text : bidirektional Bitmuster : eine Richtung (links ==>rechts) Zeit für einen Zeilenvorschub : ca 100 ms 89 Papierzufuhr : Traktorantrieb für Endlospapier Friktionsantrieb für Enzelblattpapler schmale Breitschrift kursiv Breitschrift fette Breitschrift kursiv schmale Breitschrift Das war es wieder einmal in Kürze. Für interessierte, kostet im Handes Zwischen 948,- und 1100,- DH. Harald der Drucker Hand Reingefallen mit Rheintec L i e b e Cl ubfreunde. s i c h c r s e i t auc h I hr h i e r und d o r t d a r a u f a n g e w i e s e n , e i n ma l Z ub e hö r bei ei nem Här i dl or z u k a u f e n . Si. A a r d i e s he i mi r a uc h im l e t z t e n Ja hr , a l s i ch nach e i n e r S p e i c h e r e r w e i t e r u n g f ür me i n e n R e c h n e r ( P l . A \ T R 0 \ X T 20 d i e s ma l ; mei n GENI E steht im s e l b e n Zi mme r ) suchte und mi ch an e i n e D ü s s e l d o r f e r Fi r ma v e r t r a u e n s v o l l g e w e n d e t h a b e . Im E r g e b n i s i s t j e t z t me i n A r g e r groß, wei i ni c ht s k l a p p t e und di e Fi r ma am Sc hl uß s i c h u n f ä h i g z e i g t e , w i r k l i c h zu h e l f e n und u n v e r s c h ä m t e r Wei se a uc h d i e d e f e k t e n K a r t e n ni c ht z u r ü c k ne hmen wo l l t e . I c h muß f ü r mi ch f e s t s t e l l c n . d:iß i ch be i d i e s e r Fi r ma n i c h t me hr k a u f e n wer de. P a u l-J ü rg e n Schm ilz 7. .März 1988 HEFT 23 Februar 1988 90 Echte Programmierer neiden PASCAL (Aus DATAMQN 7/83, uebersetzt von Bernd Leeds) Vor langer Zeit, in der goldenen Aera der Computer, war es noch ein fach, die Maenner von den Memmen zu trennen (mitunter auch "Echte Maenner" und “Muesli-Fresser■ genannt). Echte Haenner programmierten Computer und Huesli-Fresser Hessen es bleiben. Ein echter Computerprograamierer sagte Dinge nie "DO 10 1*1,10“ oder “ABF1D“, und der Rest der Welt quengelte “Computer sind mir zu kompliziert* oder “Ich kann 2 u Computern keine gefuehlsmaessige Bindung aufbauen - sie sind zu unpersoenlich“. Dabei zeigt schon Remy Eyssen’s Buch "Echte Maenner moegen kein Müesli“ (Heyne TB 6290), dass Echte Maenner zu nichts und niemanden eine gefuehlsmassige Bindung' aufbauen, und dass sie auch keine Angst haben, unpersoenlich zu sein. Aber die Zeiten aendern sich. Heute stehen wir einer Welt gegenueber, in der kleine alte Damen vol1computerisierte Hikrowel1enherde kaufen koennen, in der 12 Jahre alte Dreikaesehochs gestandene Haenner bei ASTRDIDS und PACHAN sattmachen, und in der jeder seinen eigenen Homecomputer kaufen und sogar verstehen kann. Der Echte Programmierer ist gefaehrdet, von Studenten mit einem igITT 2020 (deutsche Version des ABFALL-II, Anm. d. Uebers.) im Gepaeck ersetzt zu werden! Es gibt allerdings einige Unterschiede zwischen dem typischen, PAC MAN-spi elenden Gymnasiasten und einem Echten Programm!erer. Die Kenntnis dieser Unterschiede wird den Heranwachsenden ein Ziel geben nach dem sie streben koennen - ein Vorbild, eine Vaterfigur. Ausserdem schuetzt sie die Echten Programmierer vor Arbeitslosigkeit. Der einfachste Weg, um einen Echten Programmierer zu erkennen, fuehrt ueber die von ihm benutzte‘Programmiersprache. Echte Programmierer benutzen FORTRAN. Muesli-Fresser benutzen PASCAL. Niklaus Wirth, der Schoepfer von PASCAL wurde einmal gefragt, wie man seinen Namen aus spreche. “You can either call me by name, pronouncing it ’Veert' or call me by value, wor t h “, antwortete er. Diese Bemerkung zeigt sofort, dass Wirth ein Muesli-Fresser ist. Der einzige ParameterUebergabe-Mechanismus, den Echte Programmierer akzeptieren, ist callby-value-return (cal1-by-result, Anm. de. Uebers.), wie er in den IBM/370 FORTRAN-G- und -H-Compilern implementiert ist. Echte Programmierer brauchen schliesslich keine abstrakten Konzepte, um ihre Arbeit zu erledigen; sie sind vollkommen gluecklich mit einem Lochkarten-Stanzer, einem FORTRAN-IV-Compi1er und einem Bier. Echte Programmierer erledigen Listenverarbeitung, Zeichenketten-Hanipulation, Graphikdarstellungen (wenn ueberhaupt) und kuenstliche Intelligenz in FORTRAN. Was sie mit FORTRAN nicht machen koennen, machen sie in Assembler, was sie in Assembler nicht machen koennen, lassen sie veraechtlich liegen. Akademische Computerspezialisten sind in den letzten Jahren aufs Abstellgleis der Strukturierten Programmierung geraten. Sie be haupten, dass Programme verstaendlicher werden, wenn bestimmte Sprachkonstrukte und Programmiertechniken benutzt werden. Sie koennen sich natuerlich nicht einigen, welche Konstrukte am besten geeignet sind, und die Beispiele, an denen sie ihren speziellen Standpunkt aufzeigen wollen, passen ausnahmenslos auf eine einzige Seite irgend eines obskuren Journals. Als ich aus der Schule kam, dachte ich, ich sei der beste Programm ierer der Welt. Ich konnte ein unschlagbares TIC-TAC-TOE-Spiel (Vierin-einer-Reihe, Anm. d. Uebers.) schreiben, beherrschte 5 verschiedene Programmiersprachen und schrieb fehlerfreie 1000-Zei1en-Programme Dann kam ich in die Wirklichkeit. Meine erste Aufgabe bestand darin, ein 200.000-Zeilen-FDRTRAN-Programm zu lesen, zu verstehen und um den Faktor 2 zu beschleunigen. Jeder Echte Programmierer wird einem ver sichern, dass die gesamte strukturierte Programmierung der Welt in einem solchen Fall nicht hilft - hier braucht man wirklich Talent. Einige Beobachtungen zum Thema “Echte Programmierer und Strukturierte Programmierung“: - - Echte Programmierer haben keine Angst vor GOTO's. Echte Programmierer schreiben 5 Seiten lange DO-Schleifen, ohne durcheinander zu geraten. Echte Programmierer lieben das arithmetische IF-Statement (das mit den 3 Ausgaengen, Anm. d. Uebers.), weil e & den Code int eressanter mach{pEchte Programmierer schreiben seibstmodifizierende Programme, speziell, wenn sie da.it in einer kleinen Schleife 20ns ein sparen koennen. Echte Progra.aierer brauchen keine Kommentare; das Program, ist schliesslich selbstdokuaentierend. Da FORTRAN strukturierte IF-, REPEAT UNTIL-oder CASE Anweisungen nicht kennt, braucht sich der Echte Prograaaierer nicht zu sorgen, dass er sie nicht benutzt. Ausserdea kann man sie noetigenfal1s ueber "ASSIGNED GOTO 's" simulieren. Datenstrukturen sind in letzter Zeit in gewissen Kreisen populaer ge«orden. Wirth, der Muesli-Fresser, verfasste sogar ein ganzes Buch (Algorithmen und Datenstrukturen’, Teubner 1975), in dea er be hauptete, dass aan Programme schreiben koenne, die auf Datenstrukturen aufbauen, statt es uagekehrt zu machen. Wie jeder Echte Programaierer weiss, gibt es nur eine wirklich nuetzliche Datenstruktur, das Array. Zeichenketten, Listen, Records und Mengen sind allesamt Sonderfaelle von Arrays und koennen auch so behandelt werden, ohne dadurch die Spräche zu verkomplizieren. Das Schlimmste an den ganzen schoenen Typen ist ausserdem, dass man sie deklarieren muss, waehrend Echte Prograamier5 prachen, wie man weiss, den Typ anhand des ersten Buchstabens eines maximal 6 Zeichen langen Bezeichners implizit festlegt. Welches Betriebssystem der Echte Programmierer benutzt? CP/M? Gott bewahre! Das ist doch im Grunde ein Spielzeug-Betriebssystem. Selbst kleine alte Damen und Hauptschueler koennen CP/M benutzen und verstehen. UNIX ist natuerlich schon viel komplizierter - der typische UNIXHacker weiss nie, wie das PRINT-Kommando diese Woche heisst - aber wenn aan es genau niaat, ist UNIX auch nur ein verherrlichtes Telespiel. Niemand arbeitet auf UNIX-Systemen an ernstzunehmenden Dingen - man schickt kleine Witzchen ueber USENET rund ua die Heit, oder man schreibt ein neues Adventure-Spiel oder Forschungsberichte. Nein, der Echte Prograamierer benutzt OS/370. Ein guter Programm ierer kann die Beschreibung des Fehlers IJK3031 in seinem JCL-Manual (Job Control Language, Batch-Kommandosprache, Ana. d. Uebers.) finden und interpretieren. Ein sehr guter Prograaaierer erkennt die Fehler, ohne in sein Manual zu sehen. Ein wahrhaft ausserordentlicher Pro graaaierer kann Fehler in einea 6 -Megabyte-Hexduap finden, ohne hierfuer einen Taschenrechner zu benutzen. OS/370 ist ein wirklich beaerkenswertes Betriebssystea. Mit einem einzigen falsch plazierten Leerzeichen kann aan die gesaate Arbeit mehrer Tage zerstoeren, was die Wachsaakeit ia Prograaaiertea. ungeaein foerdert. Der beste Weg zum System ist der Kartenstanzer. Zwar behaupten einige Leute, es gaebe ein Tiaesharing-Systeo unter OS/370, aber nach sorgfaeltigen Nachforschungen bin ich zu de» Schluss gekommen, dass sie sich irren. Welche Werkzeuge ein Echter Programmierer benutzt? Nun, theoretisch koennte er seine Programme ueber die Maschinenkonsole eingeben und 1aufen1assen. In den fuehen Tagen der Cofliputerei, als Computer noch Maschinenkonsolen hatten, wurde dies auch gelegentlich getan. Der typische Programmeerer wusste den System-Urlader Bit fuer Bit auswendig und tastete ihn ein, sobald er von seines Programm zerstoert worden war. Daaals war Speicher auch noch Speicher - der war nicht einfach leer, wenn der Stro« ausfiel. Hauptspeicher von heute hingegen vergessen entweder Dinge, die sie behalten sollten, oder halten Informationen, die schon lange weg sein sollten. Aber zurueck zu« Thema. Die Legende sagt, dass Seymour Cray, der Erfinder des Cray-I-Supercomputers und der «eisten anderen Rechner von Control Data, selbst das erste Betriebssystem fuer die CDC 7600 an der Maschinenkonsole eingetastet hat, als sie das erste Mal einge schaltet wurde. Cray ist seibstverstaendlich ein Echter Programmierer. Einer der Echten Programmierer, die ich am meisten bewundere, arbeitete als Sytem-Programmierer fuer Texas Instruments. Eines Tages erhielt er ein Ferngespraech von einem Benutzer, dessen System mitten in einer wichtigen Arbeit abgestuertzt war. Der Typ reparierte dann den Schaden ueber's Telefon. Er brachte den Benutzer dazu, SystemTabellen in Hexadezimal zu reparieren und Registerinhalte uebers Telefon durchzugeben. Die Moral von der Geschichte: obwohl ein Echter Programmierer normalerweise Kartenlocher und Schnei 1drucker benutzt, kommt er im Notfall auch mit Maschinenkonsole und Telefon aus. In einigen Firmen besteht die Programmeingabe allerdings nicht nur aus 10 schlangestehenden Ingenieuren, die auf einem 029-Locher warten. In meiner Firma z.B. steht kein einziger Kartenstanzer. Der Echte Programmierer muss in diesem Falle seine Arbeit mit einem Text Editor erledigen. Auf den meisten Rechnern stehen verschiedene Editoren zur Verfuegung, und der Echte Programmierer muss aufpassen, dass er einen erwischt, der seinen persoenlichen Stil wiedergibt. Viele Leute glauben, dass die besten Editoren der Welt am Xerox Pablo Alto Research Center geschrieben wurden und auf Alto- oder DoradoComputern laufen. Ungluecklicherweise wuerde jedoch kein Echter Pro grammierer einen Computer mit einem Betriebssystem benutzen, das SmallTalk heisst, und sicherlich auch nicht ueber eine Maus mit einem Rechner kommunizieren. Einige Konzepte der Xerox-Editoren sind mittlerweile in Editoren eingeflossen, die unter sinnvoller benannten Betriebssystemen arbeiten, so wie EMACS oder VI. Das Problem mit diesen Editoren ist, dass Echte Programmierer das Konzept des "Du kriegst, was Du siehst” fuer schlecht halten. Der Echte Programmierer will einen "Du hast es so gewollt, da hast Du ’s"-Editor, einen der kompliziert ist, skeptisch, leistungsfaehig, gnadenlos und gefaehrlich. TECO, um genau zu sein. So wurde beobachtet, dass TECO-Kommandofolgen dem Leitungsrauschen aehnlicher sind als lesbarer Text. Eins der unterhaltsameren Spiele, die mit TECO moeglich sind, besteht darin, den eigenen Namen als Kommando einzugeben und zu raten, was dann passiert. So ungefaehr jeder moegliche Tippfehler kann dank TECO das gerade editierte Pro gramm zerstoeren, oder schlimmer noch, kann kleine mysterioese Fehler in einstmals funktionierende Unterprogramme einbringen. Aus diesem Grunde editieren Echte Programmierer nur sehr widerwillig Programme, die schon fast laufen. Sie finden es viel einfacher, den binaeren Objektcode direkt zu aendern, fuer gewoehnlich mit einem wundervollen Programm, das SUPERZAP heisst tauf Nicht-IBM-ftechnern entsprechend anders). Dies funktioniert so gut, dass viele laufende Programme auf IBM-Systemen keine Aehniichkeit mit den urspruenglichen FORTRAN-Quellprogrammen haben. In einigen Fallen ist nicht einmal mehr das urspruengliche Quellprogramm vorhanden. Wenn dann der Zeit punkt gekommen ist, so ein Programm zu aendern, wuerde kein Manager auch nur daran denken, einem geringeren als eine« Echten Programm ierer diese Arbeit zu uebertragen - kein Hueslifressender struktur ierter Programmier er wuesste auch nur, wo er mit der Arbeit anfangen soll. Man nennt das Arbeitssieherungsmassnahme. Hier eine Liste der wichtigsten Programmierhi1fen, die der Echte Programmierer nicht benutzt: - FORTRAN-Praeprozessoren wie MORTRAN oder RATFOR. Diese Haute Cuisine der Programmierung eignet sich hervorragend, um Muesli zu produzieren. Quellcode-orientierte Debugger. Echte Programmierer lesen Hex dumps. Compiler, die Code fuer Array-Indexpruefungen zur Laufzeit erzeugen. Sie ersticken jede Kreativitaet, zerstoeren die meisten der interessantesten Anwendungen der EQUIVALENCE-Vereinbarungen, und machen Aenderungen des Betriebssystems mit Hilfe negativer Indizes unmoeglich. Und schlimmer noch, solcher Code ist ineffizient. Programm-Pf1ege-Systeme. Ein Echter Programmierer haelt seine Software als Kartonstapel unter Verschluss, denn dies zeigt, dass der Besitzer seine wichtigsten Programme nicht unbewacht lassen kann. Wo der typische Echte Programmierer arbeitet? Welche Art von Programmen derart talentierter Individuen wuerdig ist? Nun, man kann sicher sein, dass man nie einen Echten Programmierer beim Schreiben von Buch haltungsprogrammen in COBOL erwischen wird, oder gar beim Sortieren der Abonnentenadressen des'Spiegel^. Nein, ein Echter Programmierer braucht Aufgaben von weltbewegender Bedeutung. Echte Programmierer arbeiten fuer das Los Alamos National Laboratory und schreiben do/rt Atomkriegs-Simulationen auf Cray-I-Supercomputern, oder sie arbeiten bei der National Security Agency und entschluesseln russische Funksprueche. Nur weil tausende Echte Programmierer fuer die NASA gearbeitet haben, waren 'unsere' Jungs eher auf dem Mond als die Kosmonauten. Die Computer im Space Shuttle wurden von Echten Programmierern programmiert, und auch die Betriebssysteme der Cruise Missiles der Firma BOEING wurden von diesen echten Professionals entworfen. Einige der ehrfurchteinfloessendsten Echten Programmierer kennen das gesamte Betriebssystem der Pioneer- und Voyager-Sonden auswendig. Mit einer Kombination aus grossen, bodengebundenen FORTRAN-Programmen und kleinen, von Sonden mitgefuehrten Assemblerprogrammen vollbringen sie unglaubliche Kunststuecke der Navigation und Improvisation. So treffen sie nur 10 Kilometer grosse Fenster nahe Saturn nach 6 Jahren Flug durch den Weltraum, oder reparieren bzw. umgehen defekte Sensoren, Sender oder Batterien. Angeblich soll es einem Echten Pro grammierer sogar gelungen sein, in ein paar Hundert Byte ungenutzten Speichers innerhalb der Voyager-Sonde ein Mustererkennungsprogramm zu pressen, das einen neuen Mond des Jupiters suchte, fand und fotograf ierte. Fuer die Galileo-Sonde ist vorgesehen, dass sie auf ihrem Weg zum Jupiter entlang einer schwerkraftgelenkten Bahn am Mars vorbeizieht. Diese Bahn fuehrt in einer Entfernung von BB ♦/- 3 km an der Marsoberflaeche vorbei. Kein Mensch wuerde diese Art von Navigation einem PASCAL-Programm oder gar -Programmierer anvertrauen. Viele Echte Programmierer dieser Welt arbeiten fuer die amerikanische Regierung, meist fuer das Verteidigungsministeriue. So soll es sein. In letzter Zeit allerdings erscheinen dunkle Wolken am Horizont der Echten Programmierer. Es scheint, als haetten einige einflussreiche Muesli-Fresser im Verteidigungsministerium entschieden, dass in Zukunft alle Verteidigungsprogramme in so einer Art von grösser vereinheitlichter Programmiersprache naciens ADA geschrieben werden muessten. Lange Zeit schien es, als laege ADA's Bestimmung im Verstoss gegen alle Regeln der Echten Programmierung. Es ist eine Sprache mit Strukturen, Datentypen, strenger Typenbindung und Semikoli. Kurz, sie ist wie geschaffen um die Kreativitaet de typischen Echten Programmierers zu verkrueppeln. / Gl uecklicherweise hat die jetzt vom DoD (Department of Defence).noch genuegend interessante Eigenschaften, um dem Echten Programmierer eine Annaeherung zu eraoeglichen: sie ist unglaublich komplex, sie enthaelt Moegl ichkei ten, um mit dem Betriebssystem heruazumachen und Speicher bereiche neu zu verteilen, und Edgar Dijkstra mag sie nicht. Dijkstra ist wie man wissen sollte, der Autor von "GDTD's considered harmful", eines Meilenstein der Programmiermethodologie, der von PASCAL-Prograaaierern und Huesli-Fressern gleichermassen bewundert wird. - Und ausserdeo, ein zu allem entschlossener Echter Programmierer kann in jeder Sprache FORTRAN-Programme schreiben - Der Echte Programmierer ist in der Lage, 30, 40, ja sogar 50 Stunden in einem Rutsch zu arbeiten, unf das unter hohem 2eitdruck. Genaugenommen mag er es so am liebsten. Schlechte Antwortzeiten regen den Echten Programmierer nicht auf - sie geben iha die Chance, zwischen 2 Kommandos ein bisschen Schlaf zu ergattern. Wenn die Planung nicht genug Zeitdruck bereithaelt, dann tendiert der Echte Prograaaierer dazu, seine Arbeit herausfordernder zu machen, indem er sich die ersten'neun Wochen mit einem kleinen, aber sehr inter essanten Teil des Problems befasst, um dann in der letzten Woche seine Aufgabe in zwei oder drei 50-Stunden-Marathonsitzungen zu beenden. Dies beeindruckt nicht nur den Manager, sondern schafft gleichzeitig eine hervorragende Entschuldigung fuer das Fehlen einer Dokumentation. Der Anteil der Echten Programmierern im Bereich der Computer-Graphics ist etwas niedriger als anderswo, was wahrscheinlich daran liegt, dass noch niemand irgendeinen Nutzen der Computer-Graphics entdeckt hat. Andererseits werden Computer-6 raphics ueberwiegend in FORTRAN abgehandelt, daher gibt es einige Leute, die so das Schreiben von COBOL-Prograamen vermeiden. I* Allgemeinen spielt der Echte Programmierer wie er arbeitet mit Computern. Er ist staendig darueber erheitert, dass sein Arbeit geber ihn tatsaechlich fuer etwas bezahlt, was er nur so zum Spass sowieso tun wuerde - allerdings achtet er darauf, dieser Meinung nicht zu laut zu aeussern. Gelegentlich kommt der Echte Programm ierer auch aus seinem Buero heraus, um sich ein wenig frische Luft und/oder zwei Bierchen zu genehmigen. Und ueberhaupt: kein Echter Programmierer arbeitet von 9 bis 5, ausser denen von der Nachtschicht. Echte Programmierer tragen keine Schlipse. Echte Programmierer tragen keine hochhackigen Schuhe. Echte Programmierer kommen zur Arbeit, wenn andere zum Mittagessen gehen. Ein Echter Programmierer vergisst vielleicht den Vornamen seiner Angetrauten, aber niemals den Inhalt der gesamten ASCII— (oder EBCDIC-) Tabelle. Echte ProQrammierPr koennen nicht kochen. Da Supermaerkte um 3 Uhr morgens selten geoeffnet sind, muessen sie sowieso von Kaffee und Keksen leben. Hier daher einige Hinweise, wie man Echte Programmierer ausserhalb des Coaputerrauaes erkennt: - - « Die 2ukunft betrachtend machen sich eine ganze Reihe von Echten Programmierern Sorgen, dass die juengsts P^ograamierergeneration nicht mehr mit der gleichen Lebensperspektive aufwaechst wie sie selbst. Viele der Juengeren haben noch nie eine Computer mit einer Maschinen konsole gesehen. Kaum ein Schulafcgaenger kann heute noch hexadezimal rechnen, ohne einen Taschenrechner zu benutzen. Die Programmierunc durch symbolische Debugger oder Texteditoren, die Klammern zaehlen. und benutzerfreundliche Betriebssvsteme. Und das Schlimmste ist, einige von ihnen werden auf die Menschheit losgelassen ohne je FORTRAN zu lernen! Sind wir dazu verdammt, eine Industrie von UNIXHackern und PASCAL-Programmierern zu werden9 Auf Parties stehen Echte Programmierer in einer Ecke und diskutieren ueber Sicherheitsaassnahmen von Betriebssystemen und wie man um sie heruaprograaaiert. Bei Fussbal1spielen vergleicht der Echte Programmierer die Ergebnisse mit seinem auf gruenliniertem Leporello-Papier gedruckten Conputer-Simulations-Ergebnissen. Am Strand zeichnet der Echte Programmierer Flussdiagramme in den Sand. Ein Echter Programmierer geht in die Disco, ua sich die Lichtorael anzusehen. Bei Begraebnissen sagt der Echte Programmierer typischerweise: "Armer Hans-Helmut. Er war mit seinem Sortierprooramm schon fast fertig, als ihn der Herzinfarkt erwischt hat." Ia Supermarkt besteht der Echte Programmierer darauf, seine Bierdosen selber ueber das Fenster des Barcodelesers zu schieben, weil er keinem Kassierer zutraut, dies beim ersten Versuch richtig zu machen. « • > « Der typische Echte Programmierer lebt vor einem Computerterminal. Rund um dieses Terminal liegen Ausdrucke von jedem Programm, an dee er je gearbeitet hat, sie stapeln sich grob chronologisch geordnet auf jeder ebenen Flaeche des Bueros. Im Zimmer verteilt finden sich ueber ein Dutzend mit kalte» Kaffee mehr oder weniger gefuellte Tassen. Gelegentlich schwimmen Zigarettenkippen darin herum, in einigen Faellen auch Reste von Orangenschalen. Irgendwo liegen Kopien des OS JCL-Manuals und der “Princicles of Operation" herum. Ueber den Boden verteilt liegen Reste der Verpackungen von gefuellten Keksen (der Typ, der schon in der Fabrik so furztrocken gebacken wird, dass er auch bei laengerem Liegen iffi Automaten nicht schlechter wird). Schliesslich, in der linken oberen Schublade des Schreibtisches, unter der Schachtel mit Muntermachern, liegt eine Schablone fuer Flussdiagramme, die sein Vorgaenger dort vergessen hat. Echte Programmierer schreiben Programme und keine Dokumentation; das ueberlaesst man den Typen von der Wartung. Der Echte Programmierer kann allerdings auch Kompromisse in Bezug auf seine Prinzipien eingehen und an etwas geringeren Aufgaben als der Vernichtung des Lebens arbeiten, sofern er dafuer entsprechend bezahlt wird. Viele Echte Programmierer schreiben z.B. Videospiele fuer ATARI, allerdings spielen sie nicht damit. Ein Echter Programmierer weiss, wie er die Maschine jedesmal schlagen kann, und damit ist es keine Herausforderung mehr. Jeder bei Lucas-Film ist ein Echter Programm ierer, denn es waere doch verrueckt, das Geld von 50 Millionen STARSWARS-Fans auszuschlagen. - In welcher Umgebung der Echte Programmierer am besten funktioniert? Nun. dies ist eine sehr wichtige Frage fuer die Manager von Echten Programmierern. Wenn man bedenkt, wie teuer es ist, einen von ihnen ihn Betrieb zu halten, dann sollte man ihn oder sie in eine optimale Arbeitsumgebung versetzen. Nun, aus meiner Erfahrung heraus glaube ich behaupten zu duerfen, dass das Schicksal den Echten Programmiere^n wohl gesonnen ist. Weder OS/370 noch FORTRAN zeigen irgendwelche Syu^ome des Aussterbens, trotz aller Anstrengungen der PASCAL-rrogrammierer. Selbst subtilere Tricks wie das Hmzufuegen st ruf'tu' ier ter 5:hleifen zu FORTRAN sir.d fehlceschlagefi. Sicher, einige Cceputerherstel ler liefern FORTRAN« c < • • ♦ 77-Compiler, aber jeder einzelne von ihnen laesst sich ueber eine einzige Comp1 1er-Option in einen FORTRAN-66 -Compi1er verwandeln Alt DO-Schleifen Hie von Gott geschaffen. Selbst UNIX scheint fuer den Echten Prograaaierer nicht sehr so schlecht zu sein Hie frueher. Die neueste UNIX-Version hat das Potential eines Betriebssystems, das eines Echten Programmierers Huerdig ist. Sie hat zwei verschiedene, leicht inkompatible BenutzerSchnittstellen, einen geheianisvol1en und koaplizier ten TeletypeTreiber und virtuellen Speicher. Und Nenn der Echte Program»!erer die Strukturierung ignoriert, kann er sich sogar ait C anfreunden. Schliesslich gibt es keine Typenbindung, Bezeichner sind sieben (zehn? acht?) Zeichen lang und aan hat Zeiger als Bonus. Das ist, als haette man die besten Teile von FORTRAN und Assembler vereint, von den kreativeren Moeglichkeiten des^KIdefine ganz zu schweigen. Hallo liebe Clubkameraden ! Wie im letztem Club-Info schon beschrieben, haben wir jetzt auch eine große CP/M 2.2-Software Bibliothek ! Ich habe bislang nur drei Zuschriften bekommen !!! Ist denn die CP/M 2.2-Software nicht gefragt ? Damit Ihr einen kleinen Eindruck von der ganzen Biblothek bekommt, habe ich das Inhaltsverzeichnis der CP/M-USER-GROUP ausgedruckt: Nein, die Zukunft ist nicht voellig schlecht. So hat sich in den vergangenen Jahren die populaere Presse sogar ueber clevere neue Brut von Computer-Schraten und -Hackern geaeussert, die Plaetze wie Stanford oder das MIT zugunsten der Wirklichkeit verlassen haben. Allen Anzeichen nach lebt der Geist der Echten Programmierer weiter in diesen jungen ilaennern und Frauen. Und solange es schlecht beschriebene Ziele, bizarre Fehler und unrealistische Zeitplaene gibt, solange wird es Echte Programmierer geben, die bereit sind einzuspringen und das Problem zu loesen, und die sich die Dokumentation fuer spaeter aufheben. Disk-Nr.: LANG LEBE FORTRAN ! ED POST, WILSONVILLE d»s 09 d»*> ® . ti<3eT!' t . X* -\i -vi. Vetrs.io*- ‘1 a ti9e ; r St e ^ Se ^ igeT1 _ , S?^ o<3r 97 t)aS fLlaUS /C US 01 02 03 ~ 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 23B24 25 2G = 27 28 29 30 31 32 33 34 35 36 - "Various CP/M Utilities - 0" — > see CPMUG Vol. 10 11 "BASIC-E Games and Programs" "ACTOR. ML80 and Examples of FORTRAN-80 Code" "BASIC-E Programs and Microsoft BASIC programs" "Maillist Program and CP/M Utilities" "PILOT - Programmed Enquiry Learning Teaching" "Various CP/M Utilities - 1" "General Ledger from Interface Age Vol.2 No.10" "LLBASIC: Lawrence Livermore BASIC interfaced to CP/M" "TINIBASIC and Processor Technology BASIC/5" "PILOT Interpreters interfaced to CP/M" "BASIC-E. CBASIC Microsoft BASIC Programs" "Various CP/M Utilities - 2" "Utilities and non-BASIC Games" "Assemblers. Other Utilities and FOCAL" "Utilities. Denver Tiny BASIC non-BASIC Games" "Maths Routines, Monitors and CASUAL (no CP/M I/O yet)" "Various CP/M Utilities - 3" "BASIC-E, CBASIC Programs Pictures" "Microsoft BASIC Games Programs" "Monsterous StarTrek Games in BASIC" "STOIC - Stack Oriented Interactive Compiler" "STOIC - Overflow Programs From Vol 23" (in CPMUG 25) "CP/M Utilities, Macro Libraries RATFOR" "Various Assembler Utilites" "Microsoft BASIC FORTRAN Games and Utilities" "Microsoft BASIC Games" "BASIC-E Games Utilities. ALGOL-M" "Assembler Games Utilities. BASIC-E Source" "BASIC-E Ver 1.4 Source Code in PL/M" "Tarbell BASIC - 1" "Tarbell BASIC - 2" "Search and Rescue Programs" "SAM-76 Language" "FELIX - Graphics Animation System" "Assemblers. Editors and Utilities" C L U 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 - "CBASIC2 Games. Utilities and CAI Programs" - "Speed Up and Tarbell Disk Controller Utilities" - "Music Programs for SOL CP/M" - "Various Utilities, Disk Catalog System" - "Ham Radio, Chess and FORTRAN programs" - "Disassemblers, Diablo Clock Routines" - "OSBORNE A/P.A/R Business Software I" - "OSBORNE G.Ledger, Budget,R0B0, Business Software II" - "OSBORNE Payroll Business Software III" - "CP/M utilities, CPM LABEL. DU, DIR, REASM" - "CP/M Utilities, MODEM, Copy, BMAP, PROM" - "BDS C Sampler Disk, Comp, by Leor Zolman" - "Rational FORTRAN (RATFOR), precompiler" - "PASCAL PASCAL Compiler , Prgs. for UNIX" - "STAGE2 Macro Processor by Dick Curtiss" — "Copyfast vers. 3.5, BATCH/VARBATCH" - "BDS-C Adventure disk" - "BASIC Games, CAI Programs" - "Adventure run-time disk” _ "Adventure source code implemented for CP/M" - "Expanded Adventure supercedes CPMUG 56" •• "Miscellaneous CP/M Utilities" - "8080 8085 memory and ICOM Controller diagnostics" - "6502 Simulator. 6502 Zapple Monitor" - "Bulletin Board, File Transfer CP/M Utilieties" - "PASCAL Comunication programs" - "Misc. CP/M Utilities" - "Games, Disassembler, North Star Basic, CDOS simulator" - “MITS-CP/M file conversion, PHELP. Utilities, FIG-Forth" - "HELP File system for MBASIC, M80, CBASIC other" - "CPMUG CATALOG disk vol. 01 - 42 with comments" “ "Miscellaneous CP/M Utilities" - "Miscellaneous CP/M Utilities" - "Miscellaneous CP/M Utilities" - "Miscellaneous PASCAL-Z Programs - 1” - "Miscellaneous PASCAL-Z Programs - 2" - "Miscellaneous PASCAL-Z Utilities - 3" - "Miscellaneous PASCAL-Z Utilities - 4" - "PASCAL-Z Programs - 5, MBASIC Disassembler, Date routines" - "Miscellaneous PASCAL-Z Utilities - 6" - "PASCAL-Z Utilities - 7, Datebase System, Disk sort Program" - "Miscellaneous CP/M Utilities" - "MODEM Programs for MMI SMARTMODEM" - "CROMENCO structured BASIC Programs, Mail list. Spelling" - "Miscellaneous CP/M Utilities, Submit, Editor, Hard Disk" - "North Star BIOS Routines" Wie Ihr seht, gibt es eine ganz schöne Auswahl ! Wenn Ihr wollt, dann könnt Ihr noch mehr Informationen auf Disketten anfordern. Das Diskettenformat müßt Ihr allerdings mit angeben ! Bis Bald B S O 1 Hallo Freunde, viel er-freuliches gibt, es wieder von der Bücherfront zu berich ten. Zunächst wäre da zu vermelden, daß es Jens endlich gelungen ist, zwei Sammelordner mit den "alten" Infos Nr. 1 bis 15 zusam menzustellen. Die In-fos sind auf Karton vervielfältigt, so daß sie (hoffentlich) auch mehrere Einsätze auf dem Kopierer überle ben. Die Ordner werden wohl vornehmlich für Neuzugänge interessant sein, die sich noch nicht die älteren Ausgaben des CLUB 80— Info besorgt haben (oder besorgen konnten). Die Ausleihzeit beträgt, da eine rege Nachfrage zu erwarten ist, maximal drei Wochen. Die Besteller werden, wenn beide Ordner unterwegs sind, in eine Warteliste aufgenommen, so daß zuerst malt, wer zuerst kommt! Selbstverständlich geht das Porto zu Lasten des Ausleihers, so daß der Bestellung gleich drei DM (ev. auch in Briefmarken) beigelegt werden sollten. Die Infos 16 bis 21 werden demnächst als Sammelband verfügbar sein, so daß Neuzugänge immer auch das schon dagewesene zur Verfügung haben. Ich möchte die Ausleiher an dieser Stelle bit ten, die Ordner möglichst schonend zu behandeln, damit sie noch möglichst lange den Neuen zeigen können, wie aktiv ein Club mit nur ca. 60 Mitgliedern sein kann (und hoffentlich noch lange sein wi r d ) ! Ebenfalls erfreulich ist die Tatsache, daß der Heise-Verlag wie der mal seine l_ager räumt und der CLUB 80 dadurch sehr hochwerti ge Bücher zu äußerst günstigen Preisen erwerben kann. Welche der bestellten Bücher tatsächlich geliefert werden ("nur solange Vorrat rei c h t ” stand auf dem Angebot), werde ich euch erst im nächsten Info mitteilen können. Wenn aber alles von einer solchen Qualität ist wie das Buch, das schon jetzt als Neuanschaffung in der Bibliothek auzuleihen ist, können wir sehr zufrieden sein. Erst gestern habe ich, ganz kurzfristig und durch Zufall, eine Neuerwerbung für die CLUB 80—Bücherei einkaufen können. Es han delt sich dabei (Model— 1 und III— sowie Video Genie—Besitzer bitte nicht neidisch werden) um das Model 4/4p Technical Refei— ence Manual. Dieses Buch vereint technische Informationen über das Gerät und über das Betriebssystem TRSDOS 6 .x. Von "Model 4/4p Theory of Operation" über die genaue Beschreibung der verwendeten Spezial— IC's (CRT—Controller MC6835, Baud Rate Generator BR1941, Floppy Disk Controller FD 179x—02 usw.) bis zur detaillierten Erläuterung der Diskettenorganisation und den, für Assemblerpro— grammierer sehr wichtigen, SVC's (Supervisor Calls) ist alles vorhanden, was das Herz begehrt. Wieder einmal ans Tageslicht befördern, und euch in Erinnerung rufen, will ich die Sammelmappen, die Günter Wagner in seiner Zeit als Vorsitzender einmal zusammengestellt hat. Es handelt sich dabei um Kopieen von Artikeln aus verschiedenen Computer— Zeitschriften (von ELCOMP bis Computer persönlich), die sich alle mit dem TRS 80 bzw. Video Genie beschäftigen. Die Sammlung dürfte vor allem für die Mitglieder interessant sein, die sich zur Erscheinungszeit der Artikel (1980 bis 1983) noch nicht mit Computern beschäftigt haben. Damit genug zu diesem Thema. Bestellen könnt ihr die Sammelmapoen und Bücher direkt bei mir (Rückporto nicht vergessen) Hartmut Obermann1 * * S » = M I— U Hallo Club-89er, - i m p R E s s u m I. Vorsitzende H a r tm u t 2. Vorsitzende G erald HardMretoordinator E ckehard Diskotheftar_______ W erner RgdaKtion________ Jens Autoren___________ Die Redaktion bedangt sich bei den ia IWttLTSVERZEICMIS genannten Autoren für die Mitarbeit an der Club-INFO. Druck____________ P e te r Bankverbindung OBERMANN SCHRÖDER KUHN FÖ RSTER NEUEDER des C L U B zum Abschluß des ersten 1988'er Info's darf ich mich wieder zu Wort melden. Diesmal bin ich mit dem INFO -fast termingerecht -fertig geworden. Leider habe ich auch eine negative Nachricht für Euch. Dazu gleich, zuerst aber meinen Dank an die fleisigen Autoren unserer INFO. - Wieder sind wir um die hundert Seiten stark geworden. - Macht wei ter so! Wie Ihr im Info schon habt lesen können, hat der Peter Spies seine Offsetdruckerei aus beruflichen Gründen aufgegeben. Ich hoffe, daß es mir gelingt rechtzeitig Ersatz für Ihn zu finden, so daß Ihr weiterhin Euer INFO bekommen könnt. Gleichzeitig bitte ich Euch um eure Mithilfe. Vielleicht hat jemand von Euch einen "Drucker1 in der Hinterhand? -Offset natürlich!- Wer mir helfen kann melde sich bitte bei mir. Wobei ich auch schon beim nächsten Thema bin. Die Redaktionsadresse ändert sich I! Ich bin zwar noch nicht “ körperlich* umgezogen aber 'postmäsig'. Der Nachsendeantrag läuft für ein halbes Jahr. Trozdetti bitte ich Euch alle, meine neue Adresse in Eure Listen aufzunehmen und ab sofort an den neuen (Redaktions-)ßriefkasten zu schreiben: Jens NEUEDER S r iie ß 80 So, das war nun einmal wieder. Als Beilage findet Ihr in diesem INFO ein Infoinhaltsverzeichnis bis 1. 3. 1988 von KaJot. Als weiterer Anhang ist noch ein Kartenauszug dabei. Ich bin sicher, daß Ihr damit die beste 'Anflugschneise’nach Idstein finden werdet. Eine neue Adressenliste habe ich diesmal nicht mit beigefügt. Es gibt noch einige säumige Zahler unter uns. Bis zum nächsten mal ist das sicher geklärt. Dann kommt auch eine neue Liste. HEFT Bis zum Clubtreffen oder nächsten INFO grüßt Euch Das INFO erscheint zveiiionatlich. Es erfolgt keine Zensur oder Kontrolle der jeweiligen eingeschickten Infobeiträge durch die Redaktion. 23 Februar 1938 102 TITEL VERFASSER A S C I I-TABELLE IMMER ZUR HAND KLEINSC HRIFT fuer den EDTASM+ SCHUETZEN VON ASSE M BL ER PR O GR AM ME N HALBAUTOMATISCHE FESTLE GU NG VON ORB MEIN DRITTES ASSEMBLER PR OG R AM M MEIN ERSTES ASSEMBLER PR O GR AM M ■INPUT" ASSEMBLER CONTRA LISP DIE WERKZEUGE DES A S S E M B L. PR OG R AM MI ER E RS EINIGE A SS E MB LE R-ROUTINEN LMOFFSET with DISABLE DOS NERKZEUGE DES A S S E MB L ER -P RO G RA MM IE R ER S LPRINT ALLES einfacher! (Teil 3) SCHOENER LISTEN MIT ZEUS WER HAT ANGST VOR ASSEMBLER? ZEUS MIT 64 UND 80 ZEICHEN BASIC RUFT ASSEMBLER TIP FUER SC H NELLERES ARBEITEN MIT EDTASM SYSC0PY1 und RAMDISK f .H E L M U T '5 BANKER 2 56K -RAM fuer ZBO-SYSTEME EXTENDED B A SI C(RESTOREn u. LPRIN T alles) EIN MYS TERIOESER BASIC-B EFEHL: IsA GENIE IIs - E rf a hrungsbericht FUTTER fuer GENIE Ills CRTC B ILDSCHIRMAUSGABE Bit INVERSEN ZEICHEN BIN ICH STR AH LE N GE FA EH R DE T? DAS PROJEKT (FERNSEHER — > MONITOR) NOCH EIN BILDSCHIR MS CH O NE R SCHWIMMENDE BILDER 8 0- ZEICHENKARTE XBO, SEDIT und TSCR IPS DIE 80 -ZEICHEN-KARTE EIN SCHONER fuer die BILDROEHRE EIN WEITERER BILDSCHIRM SC HO N ER FUTTER fuer den CRTC MEHR FERN SEHEN fuer's GELD (f.GENIE Ills NOCH MEHR FERNSEHN fuers GELD VIDHEX - HEXANZEIGE d . B I L DS CH IR M S m.HRG BEI SIEMENS HEISST ES: CHIP CHIP HURRA! ERSTER MEGABI T- CH I P IN SERIE DER LEIDENSWEG DER CMOS-CHIPS NANO HENRY BLOCKI ER E N DEN F OR TSCHRITT BAS ICODE-INTERFACE BASICODE-2 MEIN ZWEITES A S S E M B L E R PR OG RA M M UN T ERSCHIEDE <2 W. MODEL 1 und 3 bzw. 4) B A S C O M - K U R Z A N L E ITUNG RPNL - DIE ANDE RE ART ZU PROG RA M MI ER EN RPNL-BES CH RE IB U NG CALL ait BASCOM MODEL 4p R O M - 1M AG E-LOADER TA N D Y < — > SCHNEIDER CP/MAC-eine BRUECK E Z W. G -/ NE WD O S u.CP/M WIE PHOENIX AUS DER ASCHE (4 COMP.in 1) DEIN 6 1 1 1 s . . . (NACHTRAG) TRS- 80 MODELL 4p, DER SCHOENSTE PORTABLE TANDY - BETTER AGAIN 32 BIT zu« N I E D R IG P RE IS (TANDY 4000) F L O P P Y C O N T R O L L E R- KO MP A TI BI LI T AE T WAS HABT IHR GEGEN CP/M ? GENIE, CP/M UND 80 ZEICHEN UND HRG??? CMD ==> COM ohne CPMac F.HEIMWERKER: WIE BAUE ICH MIR EIN CP/M? SOPP HEIDENREICH KONRAD J. KONRAD, J. MUEHLENBEIN MU EHLENBEIN SCHROEDER SCHROEDER SCHR OEDER SCHROEDER SCHR OEDER SCHROEDER SOPP SOPP SOPP SOPP WOLLS CHLAEGER ZWICKEL SCHROEDER BERNHARDT OBERMANN SOPP SCHROEDER HE IDENREICH ? BOIKAT, Ute MUELLER, K. SCHMID, A. SCHMID, A. SCHROEDER SCHROEDER SOPP SOPP SOPP SOPP SOPP SOPP ZEITSC HRIFT aus Zeitschrift aus c't aus c 't ? ( aus ELEKTOR) ?(aus Elektor) MUEHLENBEIN OBERMANN MU EH LENBEIN MUELLER, KURT MUELLEF, KURT OBERMANN OBERMANN OBERMANN RENSCH SCH ROEDER SOPP/BERNHARDT W OLLSCHLAEGER ZEITSCHRIFT aus - ? RETZLAFF BERNHARDT HELD SCHROEDER SCHROEDER INFO-#/SE STICHWORT ASCI I ASSEMBLER BANKER BANKING BASIC BERICHT BILDFORMAT BILDSCHIRM CHIP CODE CO MP.-MUSIK CO MP .WECHSEL COMPILER COMPUTER CONTR OLLER CP/M 19/19 20/37 5 9/3 lt/33 14/9 11/5 17/19 21/9 14/17 9/9 21/9 9/11 18/41 CP/M DATEI DATENBANK D ATENUEBERTR DDE D EF.FU NC T IO N D ENKAUFGABEN DFUe WDR DOS s 18/36 21/11 6/67 16/32 14/91 11/33 DOS-FEHLER DOUBLER DRUCKEN 5 9/67 20/22 12/79 20/109 18/61 22/26 22/66 13/17 12/63 20/20 22/28 19/40 14/21 19/39 9/13 18/76 18/18 19/67 19/70 3 3 15/15 14/55 13/3B 15/57 16/37 12/33 15/43 17/49 18/44 17/9 17/54 12/69 16/40 22/79 19/47 21/53 21/43 21/23 21/25 DRUCKER DRUCKERGRAF. D RUCKZEICHEN ECB-BUS EC HTZEITUHR ERFAHRUNG ERROR F ILEVERGLCH FLOPPY F ORMAT IE R UN G GENAUIGKEIT GRAFIK GRAF1K-JKL HAENDLER HARDCOPY H ARD WARE I N H A L T S V E R Z E I C H N I S D ER INFOS E I S 1 . 3.88 TITEL == = = = = == = = =r == === == = = == == == == = i = == == = Wie baue ich mir ein CP/M ? INDE X-DATEIEN BDBS - BAS IC DATENBANK SYSTEM (MODEL 4) dBASE II - eine Einfuehrung VIDEODAT 300 DDE fuer das GENIE Ills BAS I C- PROGRAMMIERBARE FUNKTIONEN MATHEM AT IK fuer FEINSCHMECKER DATE N UE BE RT R AG UN G p.FERNSEHB IL D/ W DR -C LU B R-BEFEHL MSDOS -LIKE (ein Editor f. DOS) LS-DOS 6.3 - KOPIERSCHUTZ EXTENDED NEWD OS 80 NEWD0S /8 0+ 10 VERSION 2.4 (26.10.85) SUPERDOS DIR/SYS ODER INHALT/SYS? FILTER UNT ER TRSDOS 6.x MDOS in INFO??????? DOS - (FAST) OHNE FLOPPY FEHLER IM NE WDOS-BEFEHL 'BOOT' SELBSTBA U- DO UB L ER fuer EXP1 DREI S PA LT IG DRUCKEN EIN F EHLER IM SYS2B/SYS LPRINT MIT MO DERNEN GENIES SPEED WRITING (fuer EPSON MX-DRUCKER) .. .WEIL; KUERZE SO WUERZIG IST... DIE DRUCKER AB FR A GE VON 8 AUF 24 PINS ( - DRUCKNADELN) 6 R A P H I K - J K L , TSCRIPS UND DER NEC P6 AM BILDSC HI R M DEFINIERT/EDITOR f .DRUCKER ECB-ADAPT E R- PL AT I NE V ERBINDEND DIE EINGANGS PL AT I NE ECB-BUS- GR UN DE I NH EI TS A UF BA U ECB- B US -P RO J EK T E CB -B US - TRS80-PR0JEKT ECB-BUS fuer MODEL 3/4!??? ACH DU LIEBE ZEIT! REAL TIME BLACK BOX? PC STATT GENIE? (Ueber »eitere FC's) " PR UE FZAHLFEHLER BEIM L E S E N “ VERG LE I CH ZWEIER DISK-DATEIEN V ERGLEICH ZWEIER PROGRAMME: noch'n TOOL F L OP PY-TRICKS 40 TRACKS? WARUM NICHT 42? MA TH EM A TI SC HE R UEBERFLUSS ERGAEN ZU N G ZU GRAFIK-SHORTY TRS80 Ml/3 SCHNELLE GRAFIK IN BASIC H R 6 - BI L DU EB ER T RA GU NG OHNE HRG (WDR-FILES SCHNELL BEWEGTE GRAFIK AUF DEM TRS80 GR AFIK-STANDARD: ALLEIN G E H T ’ S AUCH EI NF.GRAFIKPROGRAMM: PLOT/BAS L IN IE NMODELLE IN 3 DIMENSIONEN GRAFIK-CLS fuer das 6ENIE Ills S TR IN GANZEIGE MIT VOLLDAMPF GRAFIK-JKL fuer das GENIE Ills TANDY-VE RT AG SH A EN DL ER TANDY SC HL IESST COMPUTER-CENTER HARDCOPY AUCH OHNE INTERRUPT FLOPCOPY AUCH OHNE INTERRUPT DATENFER N UE BE RT R AG UN G R EL AI S- INTERFACE AU SLESEN DES GRAFIKSPEICHERS VERFASSER SCHROEDER H ERMANN HERMANN MAND ? SDPP HERMANN WEBER EDDE u. HERIBERT HEIDENREICH HERMANN OBERMANN OBERMANN OBERMANN RENSCH SOERENSEN, R. SOERENSEN, R. SOPP RETZLAFF SOPP SOPP SOPP LINDSEY MUEHLENBEIN SCHMITZ SOPP SOPP KLUGE ? ASSENBAUM DROWAELDER NEU EDER NEUEDER NEUEDER OBERMANN SOPP SOPP SCHMITZ BERNHARDT SOPP SOPP OBERMANN OBSCHERNINGKAT MUEHLENBEIN HER MANN H0RNUN6 OBERMANN ROECKRATH SCHROEDER SCHROEDER /ARPS SCHROEDER/ ARPS SOPP SOPP SOPP ZEITSCHRIFT RYCHLIK SOPP T BER NH./SEELMANN INFO-Ü/SEITE II II II II II II II II II II II PAGE 2 - 11 INF O S B IS 1 . 3 . 8 8 II II II II II II It II II II II tt STICHWORT I N H A L T S V E R Z E I C H N I S DE R II II II II II It It It II II It II II It II PAGE 1 - 21/25 19/15 22/37 21/33 13/51 12/17 19/26 20/101 12/62 20/44 21/55 10/5 11/25 2 15/21 18/29 20/11 14/69 11/21 17/45 21/15 22/33 18/19 12/65 20/35 18/12 22/20 16/27 9/19 15/65 11/39 15/73 15/71 14/101 13/39 15/84 15/32 15/53 20/99 22/71 22/53 22/57 13/41 18/11 20/17 19/32 2 15/11 2 19/U 14/29 14/35 13/35 6/41 13/32 19/79 18/75 20/15 21/14 6/19 9/47 20/65 H AR DW AR E HRG JKL KASSETTE KOPI ERSCHUTZ LAUFWERK L IBR ARY LI TE RATUR LOGIK M 4/4p-ECKE M ATH.STATIST KATHE-SPIEL TITEL VERFASSER 1NF0-I / SE IT E s x x s z s s £ s s s s e s s s s K e e s s s K C S K K s s s e s s s s s s s 3 i n i E s s r i n : : : : c c c s s o E s s s : DAS B O - Z E I C H E N K A R T E - P R O B L E H u.d. LOESUNG SICHERES, E I N - , PLAETZ C HE N WA CH HUND, Der-, b . u n k o n t r .Schaltlustand BILLIG ES CP/H T AK TFREQUENZ GENIE I/II - VERDOPPLUNG FLOPPYDI S K - C O NT R OL LE RK A RT E T AS TA TU R- UND DR U CK ER PL A TI NE T R S 8 0 , DER-, UND DIE AUS SENHELT INTE RF A CE -A DA P TE R 8255, P RO GR A MHIERBARER P OR TB EL E GU NG M O D E R NI SI E RU NG STATT NEUKAUF H R6 -lb-KARTE J OY ST IC KS FUER DEN TRS BO Ml DIE MAUS AM T R S - 8 0 ! E C B - BU S- P RO JE KT EXT RA RAM (“Ein si cheres P I a e t z c h e n . ..") FLOPPY TR I CK S T A K T UH SC H AL TU N6 FUE R VIDEOGENIE T ES TADAPTER S Y N C HR ON I SI ER TE TAKTUHSCH AL TU N G UM BAU EINES TR S80 MOD.I 16K AUF 48K KLEI N BU CH ST A BE N FUER DEN TRS 80 J OY ST IC K -A NS CH L US S INDIKATORKARTE fuer ECB-BUS AKUSTI KK O PP LE R F UN KT IO N SW EI SE DES DR U CK ERPUFFERS E P R O H - P R OG RA M MI ER GE R AE T HARDWARETIP: NEUE I C s INTERFACE MIT B251 UND B255 FUER Z80 AN SC HLUSS GESUCHT Z BO -B U SANSCHLUSS SI CHERER PLATZ fuer DATEN? (DISKETTEN) DI GITALTECHNIK, GRUNDL AG EN DER HR6 vom BASIC aus (DEMO) H RG-PIXELS aus den BASIC! HRG: 3 B 4 x 192 oder 192x192 H R6 -B IL D UE BE RT R A6 UN G per DFUe UMKEHR! GEN IE Ills, DIE HRG DES HRG lb PROGRAMMIEREN, BESSER ER KLAERT HRG UND BAS IC NETTO H RG-HARDCOPY fuer das G Ills H RG-SPEICHER LOE SCHEN, DEN JKL - ABER DRUCK ERSCHONEND! C AS S ET TE NV E RZ EI CH N IS ERSTELLEN LS-DOS 6.3 - KOPIERS CHUTZ LWT fuer GENIE I und TRS-80 MODELL I WAS TUN BEI VOLLER LIBRAR Y? BUECHERLISTE: DIE ER STEN KURZKRITIKEN HEITERE KU RZKRITIKEN BOOLE XOR ABEL STEN0-L06IK LO GISCHE O PE RATIONEN 2 LOGISCHE O P ER ATIONEN IN BASIC L OGISCHES ZU L06IK L OG IKSIMULATION *it BASIC AUF RUF DER S UP E RV ISOR-CALLS in BASIC DAS BOOT -ROM des 4p HRG fuer MODEL 3/4/4p A UF G E S T I E G E N ’ B IVA RANA (2fache Varian:an alyse) WAS IST MIT DER PRIMZAHL ’ 37' LO S ” B ERNHARDT BERNHARDT BETZ BREWER DRE YER DROWAELDER DROWAELDER KLEIN, WILFRIED KUHN KUHN M AT THAEI/H.COMP MUELLER, KURT NEUEDER OBER MANN OBERMANN OBERMANN OBERMANN OBERMANN RE8GE RETZLAFF RETZLAFF ROEC KRATH SOPP SPIESS TRAPP TRAPP WOLF (aus HC) ZEITSCHRIFT ZWICKEL aus c 't aus c't aus test 9/87 gesäuselt: KUHN NEUEDER NEUEDER NEUEDER OBERMANN O BER MANN SOPP SOPP SOPP SOPP SOPP SOPP W A G N E R , G. HERHANN RETZLAFF SOPP SCHROEDER VERSCH. MUEHLENBEIN HUEHLENBEIN OBERHANN OBERMANN SOPP ZEITSCHRIFT HERMANN OBERHANN OBERHANN WAGNER, G. MUEHLENBEIN MUEHLENBEIN 22/63 7/43 20/63 9/53 3 IB/49 20/71 4 13/47 21/44 5 14/89 5 22/60 9/42 9/63 14/87 8/25 9/45 10/49 10/45 5 6/29 19/45 4 6/lfi 5 17/38 2 20/81 19/51 22/ 73 SOND ER 10/31 10/23 13/14 14/24 20/58 12/21 10/25 10/27 13/25 10/29 12/13 10/33 21/55 13/40 12/15 21/67 22/DIV 17/16 16/24 16/9 15/9 16/14 16/11 14/62 14/63 14/67 14/59 19/21 11/23 I N H A L T S V E R Z E I C H N I S D ER IN F O S B I S 1 . 3.88 STICHWORT TITEL MATHE/GRAFIK MATHEHATIK R ECH N EN (ZEICHNEN) HIT DEH CO HPUTER... WIE der NA T. LOG.die RECHEN ZE I T VERKUERZT P R I M Z A H L B E RE C HN UN GE N (3 P R O G R A M H E ) S P L I N E - I NT ER PO L AT ION (KUBISCH) CRAMER UND DIE D ETERMINANTEN DAS CART ES I SC HE BLATT DER S CHNELLSTE ZAHNARZT (WURZELZIEHEN) 6 0L DENER FIBONACCI RESE T- FE S TE HEHDISK H4-CP/H B O O T -R O H- VE RS I ON und DATUH M4 TURBO TIP KLEINE ZIPPERLEIN RASCH KURIERT DA CAPO... (WIE HAN TOENE ERZEUGT) SCHWERE KAVALLERIE ("DAS CLUBLIED") A P F E L HA EN NC H EN auf der 6DP64 GENIE, CP/H und 80 ZEICHEN und HRG ??? PASC A L- PR OB L EH E TURBO PATCH TURBO PATCH (FEHLERKORREKTUR) TURBO T IP TU RBO-TIP K U R Z K R I TI KE N und B U ECHERLISTE PA S CA L- VO R S T E L L U N G TEIL 2 PASCAL fuer INTERESSIERTE P A S S WO RT -B Y PA SS BEI TRSDOS 6.2 GR O SZ BU CH S T A B E N H O D U S AB SYST EH ST A RT (H4) P D R I V E - ID E NT IF IK A TI ON fuer NEWDOS BO KREIS OHNE T R1G0N0HETRIE P OK E +P EE K- E CK E PO R TB EL EG U NG von C O H PU TE R KO NF IG U RA TI ON E N OUT,PORT«,x x , y y , . . . VERBESSERT: I O , P O R T # < , x x , y y , . . > S T R UK TU RI E RT E P RO G RAHHIERUNG KEINE HEINUNG ZUR STRUKTUR? E DI T-BEFEHLE BASI C- L AU FE N DE P ROGRAMHE E RWEITERN LOKALE VARIABLE BEIH TRS 80 P LA NVOLL P R 06 RA HHIEREN D IRECTORY LESEN EDITOR P R O G RA HH IE R EN HEISST *. DATEIEN ARBEITEN TRICKS HIT STRIN6S DEH INTERPRETER aufs BIT GESCHAUT DIE R IC HTIGE DIMENSION Z80, HD6 41 B0 UND ILLEGALS T A V s ZBO-T UNING 5 1 2 K - R A M- A DR ES SE N «. FLEXIBLER MMU H I N I - R A H- F LO PP Y 1« "SICHEREN PLAETZCHEN" C O H P UT ER KR I MI NA LI T AE T URHE B ER RE CH T SS CH UT Z fuer PROG RAHME ZU GERALDS ARTIKEL ueber LMOFFSET CALLERLEI KLEI NE S LOG IK - LE XI KO N TRAU - SCHAU, WEH! Ein Bitchen Englisch RAH-DISK KOST ENLOS SUPE R TA PE FUER TRS 80 422 NEUE Z80-BEFEHLE HONI TO R IH GENIE ERWE IT E RU NG FU ER TASMON (NEWDOS-BEFEHLE) ALLERLEI N U E TZ L IC HE S FUER DEN TRS 80 BASI C- PA T CH FUER RESTORE N DER GEKNACKTE TRS BO HEHDISK HODEL 4 HUSIK PASCAL PASSWORT PATCH PDRIVE PLOTTER POKEPEEK PORT PROGRAMHIERG PROZESSOR RAH RAHFLOPPY RECHT RECORDORGAN. ROH-ROUTINEN SCHALTALGEBR SEHANTIK SICHERHEIT SOFTWARE VERFASSER INFO-f/SEITE II II II II II II II II II II II II tl II II P AGE 4 - n M II II II II II H II II H II II It It It II II II N N N II II II II I N F O S B IS 1 . 3 . 8 6 11 STIC HW OR T I N HA LT SV E RZ E IC H NI S DER H II II H H It It (I U It II II II PAGE 3 - SCHROEDER GUA6LIAN0 KASPER KASPER HUEHLENBEIN HUEHLENBEIN HUEHLENBEIN HUEHLENBEIN OBERMANN HERHANN OBERMANN WOLLSCHLAEGER MUEHLENBEIN HUEHLENBEIN BERNHARDT HELD KONRAD, J. OBERMANN OBERMANN OBERMANN OBERHANN SCHROEDER SOERENSEN SOERENSEN, R. OBERHANN HERH£NN OBERHANN SCHROEDER HANS - ? KUHN SOPP SOPP •> GRELL HERHANN KRENZKE PAULO SACHSE WAGNER, 6 . WA6NER, G. WOLLSCHLAEGER W0LLSCHLAE6ER ZEITSCHRIFT Zeitschri ft SCHROEDER ZEITSCHRIFT BERNHARDT SOPP KAHLEN SOPP HUEHLENBEIN aus c ’ t HUEHLENBEIN WOLLSCHLAEGER BURGWITZ/STILLR HASSELBERG (HC) KASPER KONRAD J. LICHTERMANN /MC OBERMANN ROECKRATH 10/53 14/77 5 16/19 19/13 18/5 22/11 16/21 19/43 19/42 21/31 12/57 22/13 22/17 21/37 21/43 9/73 21/32 21/32 21/31 21/31 21/71 22/40 20/12 19/42 21/30 10/17 15/8 4 21/44 11/29 12/11 7/17 7/28 14/6 16/1B 7/7 7/23 9/4 9/5 7/29 6/65 12/37 18/26 17/27 17/33 18/67 10/37 19/81 10/55 10/3 20/27 19/61 18/47 2 7/44 4 6/23 6/25 4 5 6/33 PAGE 5 - SP RACHE SPURANZAHL TAKT T AS TA TU R TELEFON TEXT -G R AF IK T EX TS YS T EM T ON E R Z E U G U N G UHR U T I L IT Y VERTRETUNGEN VIDEO VERwpuue&fw Z BO Z AP PE N Z EI CH E N S A T Z ZEITMESSUNG EIN NEUER 8 0 ZEICHEN-TREIBER COBOL - EINE EI NFUEHRUNG DATENVERLUSTE S ONDERTASTEN DIVERSER GENIES S ONDER TA S TE N DIVERSER GENIES (NACHTRAG) CALL UH DIE ECKE (MEM-BEREICHE ERRE I CH EN J OY ST IC K AN MODEL 4/4p T APE-GAMES AUF MODEL III/4/4p ADVEN-SO DAS PIRATE ADVENTURE A DVENTURE GEHEIMAGENT XP-05 COBOL-EI NF U EH RU NG D ER -DIE-DAS MACHT MIR SPASZ CP/M AC - NA UND? 80/40- TR AC K UN SC HA L TU NG TAKT U MS CH AL T UN G - DIE ALLERLETZTE L0ES6. UMLAUTE IM NEWDOS? ABER NATUERLICH! KNOEPFE ES BEHT NOCH SCHNELLER (TAST.ABSCHALTEN) U NIVER SA L GE NI E TELE FO N BU CH MIT PFIFF (TELEFON) - EIN UD-ZEI CHEN auf d.D RU C KE R UMDE FI NI E RU NG v.SCR I PS IT -K O MM AN DO T AS TE N KEINE ANGST VOR... (TRENNEN IN TSCRIPS) SCRIPS IT AUF DEM ALTEN GENIE FREIRAEtlME IN TSCRIPS SCRI P SI T- TA B EL LE N T EX TU MLEITUNG fuer TSCRIPS TSCRIP S- V ER SC HL U ES SE LU N G S CONTRA @ KEINE ANGST VOR PR OPORTIONALSCHRIFT NEUES ZUR PROPORTIONALSCHRIFT TIPS fuer SCRIPS T SCR I PS i> DIE l-CODES TSCR IP S UND DIE 24 NADELN VON DER UIEGE BIS ZUR BAHRE (ADR.AUTOMAT) DAS T S C RI PS - DR AM A - EIN LEHRSTUECK T ON GE NE R AT OR FUER TRS BO U HR UN TE N fuer MODEL 4p THE TIMES, THEY ARE A-CHANGING NE NN DIE UHR MAL STOERT EINGAB ER OU TI N E MIT KOMFORT TR A CE-ON A US GA BE U M S C H A L T U N G IN BASIC DIRE CT O RY LESEN UND KO MMENTARE SPEIC HE R N FILES WIE SAND AM MEER... IN VI SICALC SORTIEREN F IL EV ER 6 L E I C H (s.auch P r o g r .- B i b l i o t h e k ) DDE t< LWT LPRINT ALLES einfacher ZAP IM SU PERZAP/Zappen i« Zeich en be re i ch LPRINT ALLES B IL DS CH I RM A U S D R U C K BEIM T RS 80 + VI DE OG E N IE SMARTSCREEN, SMARTKEY und SMARTPRINT PA G EL IS T/ C MD TRACE od.DIE 6ESCHI CHTE EINER ZEITSCHR. VIDE OD AT - SY ST EM UM WANDLUNG: ROEMISCHE IN A RABISCHE ZAHL A RB EI T S T I E R MIT GESUNDEM HERZEN EIN BYTE UND SEINE FOLGEN NEUE Z EI C HE NSAETZE fuer das GENIE Ills ETW AS fuer LEUTE, die NIE ZEIT haben II S PE ICHER SPIEL VERFASSER U H SO NDER TA ST EN TITEL II II II II H II H It It II II H ST IC HWORT = == == == = == == SOFTWARE I N H A L T S V E R Z E I C H N I S DER INFOS B IS 1 . 3 . 8 8 SCHROEDER TRAPP aus c't SOPP SOPP SOPP OBERMANN OBERMANN SCARGILL SCHROEDER WAGNER, ALEX. MUEHLENBEIN SOPP KUHN MUELLER, KURT NEUEDEER OBERMANN SCHMID, A. aus c't FRISCH SOPP KONRAD MUEHLENBEIN OBERMANN SCHROEDER SCHROEDER SCHROEDER SCHROEDER SOPP SOPP SOPP SOPP SOPP SOPP SOPP SO P P/MÖHLENBEIN PLUMHOFF OBERMANN SOPP SOPP BULLING HOEH (COMP.PERS KONRAD J. MUEHLENBEIN MU EHLENBEIN MU EHLENBEIN NEUEDER OBERMANN OBERMANN OBERMANN SOPP UEBERSCHAAR Z EITSCHRIFT aus Zeitschrift OBSCHERNINGKAT MUEHLENBEIN BETZ OBERMANN SOPP SCHMID, A. INFO-#/SEITE ========*=== 19/77 5 19/80 13/23 14/53 15/49 19/50 20/57 11/9 11/15 3 8/5 19/75 19/78 19/49 li/45 10/41 14/57 22/32 19/57 2 16/29 8/14 20/61 14/43 14/47 14/45 14/49 15/29 19/27 18/13 18/15 13/19 19/16 22/23 19/33 21/56 8/ 19 15/47 22/35 14/39 7/13 4 6/24 13/15 11/7 20/93 10/43 10/19 8/3 8/13 6/31 5 12/45 18/21 18/75 18/57 16/7 21/52 10/21 12/2B 22/31