Skip to main content

peeker 1984 01

  • PublicationApple Periodicals
  • Date1984-01-01
  • Pages68
  • Sourcepeeker-1984-01.pdf
← Magazines peeker 1984 01
/ 68
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
Text content (OCR)
o& Einzelpreis DM 6,50 ak g = MAGAZIN FUR APPLE-COMPUTER (final SRE Ti \ Aa wir haben die und die Software... AsagltheGohey wir haben die Bucher... ‘Fordern Sie unseren Gratiskatalog an! ALLES FUR DEN APPLE I, Ils, IE panday@Ft.. -Ing. Eolen UHLANDSTR. 195 - D-1000 BERLIN 12 TEL.:(030) 310423 - TELEX:185859 Autorisierter @gappla Fachhandler microsort Distributor Mit diesem Heft liegt Ihnen die erste Aus- gabe von ,Peeker" vor, die Uibrigens be- reits die 45. Zeitschrift der Verlagsgruppe Dr. Alfred Huthig ist. ,Peeker“ ist - wenn man von dem nicht allgemein erhaltlichen Vereinsblatt des deutschen Apple-Clubs in Oberhausen absieht - das erste deutschsprachige Magazin, das sich aus- schlieBlich mit Apple-Computern befaBt. PEEK ist ein Befehl aus der Programmier- sprache BASIC, der die Untersuchung ei- ner Speicherstelle gestattet. ,,Peeken“ muB man immer dann, wenn man bei ei- nem Computer etwas genauer wissen will. Und genau dies ist die Zielsetzung unse- rer neuen Zeitschrift ,Peeker“. Schén verpackte, aber oberflachliche Information hilft keinem Apple-Besitzer weiter, gleich- viel ob er Selbstprogrammierer oder reiner Anwender ist. Nehmen wir als Beispiel den Image-Writer als einen der fir Apple- Computer erhaltlichen Matrix-Drucker. Die Handhabung der nicht genormten Steuer- zeichen von Druckern war stets und ist im- mer noch ein leidiges Problem fur alle Ap- ple-Benutzer. Man kénnte sich nunineinem Aufsatz Uber den Image-Writer auf ober- flachliches Blabla in der Art ,,Der Image- Writer hat ein gefalliges beige Design undin seinem Herzen klopit ein kraftiger Prozes- sor“ beschranken. Besitzt man jedoch erst einmal einen Image-Writer, dann stellt man plotzlich ganz andere Dinge als ein pochendes Herz oder ein formschénes Styling fest. So kommt man beispielswei- se rasch zu der erniichternden Erkenntnis, daB die mitgelieferte serielle Schnittstelle keinerlei druckerspezifische ROM-Soft- ware enthalt und demzufolge viele nuitzli- che Befehle fehlen. Jetzt beginnt die Pha- se des ,Peekens“, d.h. die Suche nach gezielten Detailinformationen, damit der Drucker das macht, was Sie von ihm er- warten. Und genau hier setzt unser ,,Pee- ker" ein. Jedes Heft enthalt eine Fille nutzlicher Utilities und Programme, Tips und Tricks, Test- und Erfahrungsberichte sowie Aufsatzserien fur Anfanger und Fortgeschrittene. Damit Sie die teilweise sehr umfangreichen, professionellen Pro- gramme nicht abtippen mlissen, erscheint je nach Bedarf etwa alle 2-3 Monate eine Sammeldiskette, die die gréBeren Pro- gramme aus den vorangehenden Heften von ,,Peeker“ zusammenfaBt. (= Hithig PUBLIKATION Impressum eeker 9 for den gesamten Inhalt einschlieBlich der Programme Dr, Alfred Hathig Verlag, foidelberg 1984 Verleger und Herausgeber: Dipl.-Kim, Holger Hathig Geschafts{thrung Zeitschriften Heinz Melcher Chefredakteur: Ulrich Stiehl (us) Tel. (06221) 4893.52 Anzeigenleltung: Bernd Beutel, Tel. (06221) 489218 2. Zt, gilt Anzeigenpreisiiste Nr. 1 Vertriebsleitung: Ruth Biller, Tel. (06221) 489280 Produktionsleitung: Gunter Sokollek Gestaltung: Rainer Schmitt Feature Der neue 65C02-Prozessor 6 65C02-Disassembler flir Apple lle pee 4 65C02-Feature ker 51 Turbo-Pascal Fir alle Pascal-Liebhaber, die auf das schnellere und komfortablere Turbo-Pas- cal umsteigen wollen, wird hier eine minu- tiése Schritt-flir-Schritt-Anleitung zur Sy- stemkonfigurierung und zur Erstellung |h- res ersten ,,Turbo“-Programms gebracht. 54 ProDOS-Patches Mehrere Patch-Programme zeigen, wie man erstens ProDOS auch bei geander- tem Monitor-ROM sowie zweitens bei 80- Spur-Laufwerken zum Laufen bringt. 58 Primzahlen-Preisausschreiben Wollen Sie 500— DM gewinnen? Dann beteiligen Sie sich an unserem Prim- zahlen-Geschwindigkeitswettbewerb! und II Plus 14 In diesem dreiteiligen Feature ist alles zu- Accelerator lle = sammengetragen, was Sie schon immer . Uber den neuen 65C02-Prozessor wissen Die neue Superkarte 19 wollten. Im ersten Beitrag ,Der neue Grafik 65C02-Prozessor“ werden die neuen Be- Resa fehle detailliert geschildert und an Hand pprieel eee 26 von Beispielprogrammen erlautert. Im ute Sl apnie . zweiten Aufsatz wird ein ,,65C02-Dis- Wie man die Grafik verdoppelt assembler fiir Apple Ile und Il Plus“ vor- Teil 1: Double Lores 32 — gestellt, der auf dem IIc-Disassembler ba- Hires-Grafik-Dump siert und sogar auf Geraten lauffahig ist, ‘ a die nur Uber den alten 6502-Prozessor IME Peon sucker a verfiigen. SchlieBlich werden im dritten Pascal Beitrag sa corer lle — Die neue Super- 5 7 karte“ die Geheimnisse der brandneuen Lee aa 51 CMOS-Karte mit dem 4MHz-65C02C ent- huillt. Insbesondere wird gezeigt, wie ProDOS man sich das Pseudo-ROM fiir modifizier- _ a te Monitor- und Applesoft-ROMs zunutze Eoues talch fiir geanderte 7 machen kann: Patch fur PRODOS.INIT 80 Spuren 56 Hobby Double Lores Wer ist der schnellste? Double Hires auf dem Apple-lle mit 64K- Primzahlen-Preisausschreiben 5g Karte ist seit einiger Zeit bekannt. DaB . nies aber auch doppelte Lores-Grafik mdglich Hinweise fiir Autoren 62 ist, wird hier erstmals geschildert, Damit Neue Produkte 63 — eréffnen sich neue Perspektiven fiir Spiel- Neue Biicher 65 programme, fiir die Hires zu fein und nor- male Lores zu grob in der Grafikauflésung ist. Hires-Grafik-Dump Diese professionelle Utility gestattet den Hires-Bildschirmausdruck mit allen nur denkbaren Features wie horizontaler und vertikaler Verzerrung, Bildausschnittver- gréBerung usw. Verlag: Erscheinungsweise: Zahlungen: an den Or. Alfred Hilthig-Verlag Dr. Alfred Hithig Verlag GmbH Im Weiner 10, Postfach 102869 6900 Heidelberg Telefon (06221) 489-1 ‘Telex 4-61727 hued d, 1984 2 Hefte, ab 1985 12 Hette jahrich Jahresabonnement DM 58, einschileBlich Mwst, im Iniand portorei. Einzelheit DM 6,50 Halen: Mailand 47718; Belgien: ‘GmbH, D-6900 Heidelberg 1: Postscheck- konten: BRD: Karlsruhe 48545-753; Osterreich: Wien 7555888; Schweiz: Base! 40-24417; Niederlande: Den Haag 1 45726; VIVID Bankkonten: Landeszentralbank Heidel- berg 67207341 ; BLZ 67 200000; Deutsche Bank Heldelberg 0 2165 041; BLZ 67270003; Bezirkssparkasse Heidelberg 20451, BLZ 67250020, Briissel 72026; Danemark: Kopenhagen 94969; Norwegen: Oslo 99424; Schweden: Stockholm 5477 76-5 Hersteliung: Heidelberger Verlagsanstalt Printed in Germany VIIIYBEIBBGB ILS A Der neue 65C02-Prozessor Ulrich Stiehl — Der neue 65C02-Prozessor - 65C02 Disassembler fiir Apple lle und II Plus — Accelerator Ile: Die neue Superkarte Der 65C02 ist eine Erweiterung und Verbesserung des alten 6502-Prozes- sors. Wahrend der neue Apple llc den neuen 65C02 in der 1 MHz-Version be- reits eingebaut hat, besteht beim Apple Il Plus und Apple Ile die Méglichkeit, den alten 6502 durch den neuen 65C02 {indes nur in der 1-MHz-Version) aus- zuwechseln. Dariiber hinaus kann die brandneue 65C02C-Karte namens ,,Ac- celerator Ile“, die mit 4 Megahertz ge- taktet ist, in den Apple lle oder auch den Apple II Plus eingesetzt werden, womit alle Programme bis zu 350% schneller laufen. Die nachfolgenden technischen Details sowie das Diagramm basieren auf Unterla- gen der Rockwell International GmbH, FraunhoferstraBe 11, 8033 Miinchen-Mar- tinsried, sowie auf eigenen Untersuchun- gen anhand der Accelerator-Karte. Neben dem sog. R65C02 liefert Rockwell noch die Derivate R65C102 und R65C112. Den R65C02 gibt es (a) in Keramik- und Pla- stik-Versionen, (b) in 1, 2, 3 und 4 MHz- Versionen sowie (c) in kommerziellen und industriellen Temperatur-Versionen (im ersteren Fall 0 Grad bis 70 Grad Celsius). 9449444944444 leavure 4 Alle 65C02-Prozessoren werden als CMOS-CPUs geliefert, wahrend die alten 6502-Prozessoren NMOS-CPUs waren (CMOS = Complementary Metal Oxide Semiconductor). Von Vorteil ist der erheb- lich geringere Stromverbrauch gegentiber der NMOS-Technologie. Von Nachteil ist dagegen die relativ hohe Empfindlichkeit gegeniiber statischer Elektrizitat. (Bei- spielsweise sollte man sich bei der Acce- lerator-Karte erst einmal ,entladen", in- dem man etwa auf das Netzteil-Metallge- hause des Apples greift, bevor man die Karte anfaBt.) Verbesserungen Neben den eigentlichen neuen Befehlen sind folgende technische Verbesserungen implementiert worden: a) Ungiiltige Operationscodes Ungiltige Op-Codes, z.B. $02, werden jetzt allesamt als NOPs bzw. $EA behan- delt. Beispiel fiir Apple I! Plus/tle: CALL -151 0300: 02 4C 59 FF 0300G —Beim Apple Il Plus bzw. lle mit normalem 6502-Prozessor wiirde der Apple nach 300G hangen". — Beim Apple llc oder beim Apple Ile mit Accelerator lle wlirde $02 ignoriert und dann der nachste Befehl ab $0301 ausge- fhrt. Fur das Debuggen von Maschinenpro- grammen ist die Behandlung von Nicht- Op-Codes als NOPs indessen eher nach- teilig, da man hierbei u.U. nie feststelit, daB das Programm ,,Schrott-Stellen“ ent- halt. b) Bug beim indirekten JMP Der Fehler beim indirekten Sprung, z.B. JMP ($10FF), wurde beseitigt. Dieser Feh- ler trat nur dann auf, wenn sich das Low Byte der indirekten Adresse in einer belie- bigen Speicherstelle $??FF befand, also das Low Byte am Ende der letzten Page und das High Byte am Anfang der nach- sten Page stand. Beispiel: CALL -151 0300: 4C 59 FF JMP $FF59 (Reset-Adresse) 0303: 6C FF 10 JMP ($10FF) 10FF: 00 Low Byte von $0300 1100: 03 High Byte von $0300 0303G Nach 303G erfolgt beim neuen 65C02 ein korrekter indirekter Sprung zur Adresse $0300, die sich der Prozessor aus $10FF (Low Byte) und $1100 (High Byte) hoit, Demgegentiber wide sich der alte 6502 irrtumlicherweise das Low Byte von Spei- cherstelle $10FF und das High Byte von Speicherstelle $1000 holen. Um dies zu beweisen, geben wir folgendes ein: 1000: 03 (High Byte!) 10FF: 00 (Low Byte!) 1100: 00 (High Byte wird ignoriert!) 0303G Beim alten 6502 springt der Prozessor nunmehr nicht nach $0000, sondern nach $0300. c) Dezimalmodus Nach Hardware-Reset, d.h. nach Driicken der Ctrl-Reset-Tasten, schaltet der 65C02 nunmehr automatisch auf Binaérmodus bzw. Nicht-Dezimalmodus (CLD) um. Da dies beim alten 6502 nicht der Fall war, muBte CLD durch die Software-Reset- Routine bei $FF59: CLD bzw. bei $FA62: CLD nachgeholt werden. Bei ADC und SBC im Dezimalmodus sind die Flags N (Negative), V (Overflow) und Z (Zero) nunmehr giitig, wobei diese Befeh- le jedoch dann 1 Takt mehr bendtigen. Beim alten 6502 waren bei Dezimalopera- tionen die N-, V- und Z-Flags unbestimmt bzw. ungiltig. d) Read-Modify-Write Die direkten Speicheranderungsbefehle (Read-Modify-Write-Befehle) DEC, INC, ASL, LSR usw. werden beim 6502 mit 1 Lese- und 2 Schreibzyklen und bei 65C02 mit 2 Lese- und 1 Schreibzyklus ausge- fulhrt. Inwieweit dadurch die Softswitches des Apple Il, z.B. $C030 fiir Lautsprecher, andersartig beeinflu8t werden, konnte bis- lang nicht festgestelit werden. Bei den Softswitches ist es bekanntlich nicht irrele- vant, ob man auf diese mit LDA oder STA zugreift. SinngemaBes gilt fur DEC, INC usw, Erweiterungen Neue Befehle BRA = Op-Code $80 = Branch relative always Dieser Befeh! bewirkt eine unbedingte, re- lative Verzweigung, wahrend die alten be- dingten Verzweigungsbefehle BCC, BCS usw. von dem jeweiligen Flag abhangen. Der BRA-Befehl ist insbesondere fiir relo- kative Programme sehr niitzlich. Beim al- ten 6502 war man gezwungen, Schein- flags zu setzten, um eine unbedingte, rela- tive Verzweigung zu erzwingen, z.B. CLV BVC LABEL. DEC A = DEA = Op-Code $3A = Decre- ment A INC A = INA = Op-Code $1A = Incre- ment A DEC A vermindert den Akkumulator um 1: A = A- 1 und entspricht insoweit den DEY- und DEX-Befehlen. Die Assembler- Syntax ist DEC A, DEC oder DEA. INC A erhoht den Akkumulator um 1: A = A +1 und entspricht den INY- und INX-Befeh- len. Die Assembler-Syntax ist entspre- chend INC A, INC oder INA. DEC A ersetzt die Folge SEC SBC #1 und INC A ersetzt CLC ADC +1, wodurch einige Prozessor-Takte eingespart werden kénnen. PHX = Op-Code $DA = Push X on Stack PHY = Op-Code $5A = Push Y on Stack PLX = Op-Code $FA = Pull X from Stack PLY = Op-Code $7A = Pull Y from Stack Bei alten 6502 konnte man nur den Akku- mulator direkt auf den Stack retten. Wollte man auch noch die X- und Y-Register ret- ten, so muBte man etwa wie folgt ko- dieren: PHA Vorher: A, X und Y auf Stack TXA schieben PHA TYA PHA PLA Nachher: Y, X und A vom Stack TAY holen PLA TAX PLA Beim 65C02 geht es nunmehr viel ele- ganter: PHA Vorher: A, X und Y auf Stack PHX schieben PHY PLY Nachher: Y, X und A vom Stack PLX holen PLA Dadurch wird das Programm nicht nur kir- zer, sondern auch schneller, da jeweils 2 Befehle eingespart werden. STZ $1000 = STZ Absolute Adresse = Op-Code $9C STZ $1000,X = STZ Absolute Adresse, X = Op-Code $9E STZ $00 = STZ Zeropage = Op-Code $64 STZ $00,X = STZ Zeropage, X = Op- Code $74 Diese Befehle setzen eine Speicherstelle auf Null bzw. Zero $00. Das ,Z" in STZ steht nicht fiir Zeropage-Adressierung, sondern fiir Zero = Null = Byte $00. Die Register A, X und Y bleiben unverandert. aa 7 ‘O S = S 3S = Ro) N @ = : iS) re Kapitalist die Welt verandert. pus Apple hat den Macintosh erfunden. (i << neoisren secrion contnot secTion ——p | RES ho Wr 10 a} EX neoeren {| bic ae iy ne wor ess 2 x po ov rel a0. k—— res o Ee es : ere LS = pel tel | om ced i ose mu ce a ia ) pee AponESs ii Pt oe: = azil Ls A eI [7] contnon el i Pa soe Pe h Cia Py res a J 40K (epcesson: cxoce TE gay he PLwatsed | | || Leeserin foo Ki input pata ees eal Carew ou) fe sowne aud j= at OATA BUS KI STRUCTION Le as UU ‘REGISTER a LEGEND: ey (i) acre 23 | oara 2 o |e | - 1emrune Ps R 65C02 Interne Architektur Beim 6502 muB man demgegeniiber ein Register , opfern“, um eine Speicherstel- le zu léschen, z.B. LDA +#$00 STA ADRESSE. TRB $FFFF = Test and reset memory bits with accumulator (Absolute Adresse) = Op-Code $1C. TRB $00 = Test and reset memory bits with accumulator (Zeropage-Adresse) = Op-Code $14 Dieser Befehl ist neu und entspricht einem AND-Befeh! mit umgekehrten Vorzeichen, d.h. Undierung mit Einerkomplement des Bitmusters. Beim alten 6502 wurde man etwa wie folgt simulieren: LDA BITMUSTER AND MEMORY EOR #%11111111 STA MEMORY TRB besagt, daB eine Speicherstelle M durch den Inhalt des Akkumulators A ver- andert wird, wobei A selbst unverandert bleibt, und zwar blendet TRB bei M dieje- nigen Bits weg, die bei A gesetzt sind. “AN1111114 10 Beispiele: M 1111 1111 LDA #$00 TRB M, wobei M A 0000 0000 vorher $FF M 11111111 M nachher $FF M1111 1111 LDA +$FF TRB M, wobei M A11411111 vorher $FF M 0000 0000 M nachher $00 M 0000 0000 LDA +$FF TRB M, wobei M vorher $00 M 0000 0000 M nachher $00 M 0000 0000 LDA +$00 TRB M, wobei M A 0000 0000 vorher $00 M 0000 0000 M nachher $00 M 1111 1111 LDA +#$7E TRB M, wobei M A.01111110 vorher $FF M 1000 0001 M nachher $81 M 1010 1010 LDA #$FO TRB M, wobei M A 1111 0000 vorher $AA M 0000 1010 M nachher $0A TSB $FFFF = Test and set memory bits with accumulator (Absolute Adresse) = Op-Code $0C TSB $00 = Test and set memory bits with accumulator (Zeropage-Adresse) = Op- Code $04 TSB entspricht dem ORA-Befehl, der je- doch direkt auf eine Speicherstelle ange- wandt wird. TSB blendet bei M diejenigen Bits hinzu, die bei A zuséatzlich gesetzt sind. Beim alten 6502 wirde man dies simulieren mit LDA BITMUSTER ORA MEMORY STA MEMORY Einige Beispiele: M 1111 1111 LDA #$00 TSB M, wobei M A 0000 0000 vorher $FF M1111 1111 M nachher $FF M1111 1111 LDA 4$FF TSB M, wobei M A1111:1111 vorher $FF M1111 1111 M nachher $FF M 0000 0000 LDA +$FF TSB M, wobei M A11111111 vorher $00 M1111 1111 M nachher $FF M 0000 0000 LDA 4$00 TSB M, wobei M A 0000 0000 vorher $00 M 0000 0000 M nachher $00 M1111 1111 LDA 4$7E TSB M, wobei M A 01111110 vorher $FF M 11111111 Mnachher $FF M 1010 1010 LDA +$F0 TSB M, wobei M A 1111 0000 vorher $AA M 1111 1010 M nachher $FA Wahrend die Befehle AND und ORA nur den Inhalt des Akkumulators beeinflussen, kénnen mit TRB und TSB die Inhalte von Speicherstellen direkt verandert werden, wobei der Akkumulator unverandert bieibt. Die Befehlsfoige lautet stets: LDA BITMUSTER TSB MEMORY oder LDA BITMUSTER TRB MEMORY Nehmen wir an, bei einem Textverarbei- tungs-Text, der sich im Speicher $2000- $3FFF befande, sollte bei jedem Buchsta- ben Bit 7 geléscht werden. Zu diesem Zweck miBte man beim alten 6502 den gesamten Bereich mit der Befehlsfolge LOOP LDA M AND #%01111111 STAM ..jetzt M inkrementieren und erneut zu Loop... » bearbeiten“. Hingegen wiirde man beim neuen 65C02 mit der Schleife LDA + % 10000000 LOOP TRB M .. jetzt M inkrementieren und erneut zu Loop... zu einer erheblich kiirzeren Ausfiihrungs- zeit kommen. BBR, BBS, RMB, SMB BBR (Branch on bit reset), BBS (Branch on bit set), RMB (Reset memory bit) und SMB (Set memory bit) sind laut Auskunft der Firma Rockwell nur beim R65C02 als Zeropage-Bitmanipulationsbefehle imple- mentiert. Meine Accelerator-Karte ist mit einem NCR-65C02C bestiickt, der diese Befehle nicht kennt. Dasselbe gilt fiir den im Apple IIc befindlichen 65C02. Auch der Apple-lic-Disassembler verwendet die neuen Op-Codes nicht. Es wird empfoh- len, auf die Benutzung dieser OP-Codes zu verzichten, um Kompatibilitat mit allen 65C02-Varianten zu gewahrleisten. Neue Adressierungsarten Indirekte nicht-indizierte Adressierung Anstelle der haufig benutzten Adressie- rungsform LDA (INDIREKT), Y usw., die bislang nur mit Hilfe des Y-Regi- sters implementiert werden konnte, be- steht nunmehr die zusatzliche Méglichkeit, auf Y véllig zu verzichten. Im einzelnen gilt dies fur folgende Befehle: LDA (INDIREKT) = Op-Code $B2; neben LDA (INDIREKT), Y STA (INDIREKT) = Op-Code $92; neben STA (INDIREKT), Y ORA (INDIREKT) = Op-Code $12; neben ORA (INDIREKT), Y EOR (INDIREKT) = Op-Code $52; neben EOR (INDIREKT), Y AND (INDIREKT) = Op-Code $32; neben AND (INDIREKT), Y ADC (INDIREKT) = Op-Code $72; neben ADC (INDIREKT), Y SBC (INDIREKT) = Op-Code $F2; neben SBC (INDIREKT), Y CMP (INDIREKT) = Op-Code $D2; neben CMP (INDIREKT), Y a Dies ist eine nutzliche Erweiterung, da man nunmehr bei Array-Manipulationen nicht mehr permanent das Y-Register ret- ten bzw. fir die indizierte Adressierungs- form freinalten muB. BIT-Adressierung Der BIT-Befehi wurde um drei neue Adressierungsarten erweitert. Insgesamt gibt es jetzt folgende BIT-Instruktionen: BIT $00 Zeropage-Adressierung (alt) - Op-Code $2C BIT $1000 Absolute Adressierung (alt) - Op-Code $24 BIT $00,X Indizierte Zeropage-Adressie- rung (neu) - Op-Code $34 BIT $1000,X Indizierte absolute Adressie- rung (neu) - Op-Code $3C. BIT +$00 Unmittelbare Adressierung (neu) - Op-Code $89 Die _unmittelbare | Adressierungsform scheint mir nutzlos zu sein, da hiermit nicht Bit 7 (N-Flag) und Bit 6 (V-Flag) getestet werden kénnen, was fir alle an- deren BIT-Adressierungsarten zutrifft. Indizierter, indirekter JMP. JMP ($1000,X) - Op-Code $7C - ist eine wertvolle Erweiterung des _ indirekten Sprungs fur den Fall, daB eine Sprung- adresse einer Tabelie entnommen werden soll. Nehmen wir an, ab Speicherstelle $1000 steht folgende fingierte Sprungta- belle: 1000: 00 20 $2000 0. Sprung 1002: 00 30 $3000 1. Sprung 1004: 00 40 $4000 2. Sprung usw. Nehmen wir fernerhin an, der zweite Sprung sei auszufiihren. Dann verfahren wir wie folgt: LDA #2 ;2. Sprung ASL j2* 2 = 4 = $1004 TAX JMP ($1000,X) ;entspricht JMP $3000 D.h. $1000 + X = $1004 enthalt das Low Byte und $1004 + 1 = $1005 enthalt das High Byte der effektiven Sprungadresse. Das nachfolgende ,,65C02-Demo einiger neuer Op-Codes“ veranschaulicht die Anwendung der neuen Befehle und Adressierungsarten. Dieses Demo zeigt Ubrigens folgende Hexzahlen und ASCII- Zeichen an: 030201 01 BCA OA AF 949444 feature gg Zur Assemblierung wurde der zu den von Firma Apple herausgegebenen_,,ProDOS Assembler Tools“ gehdrige 6502-Assem- bler verwendet, der ebenso wie der ,,Bug- byter Debugger“ die neuen Befehle verar- beitet. Der Assembler-Quellcode mu8 zu diesem Zweck mit dem Pseudo-Op-Code »X6502" eingeleitet werden. Zusaizlich zu dem Source-Code des 65C02-Demos wird das disassemblierte Listing in der Form abgedruckt, wie es mit dem ,65C02-Disassembler“, der im nachfolgenden Aufsatz geschildert wird, erzeugt werden kann. SchluBbemerkung a) Da der Apple I! Plus und der Apple Ile im Gegensatz zum Apple Ilc ,von Hause aus" den 65C02 nicht enthalten, sollte man in kommerziellen Programmen, die flr alle Geratetypen gedacht sind, auf die neuen Op-Codes verzichten b) Bei eigenen Programmen lohnt es sich u.U., den alten Apple II Plus bzw. Apple Ile mit dem neuen 65C02 zu bestiicken und die neuen Op-Codes zu verwenden, da Programme dann etwas kompakter und zugleich etwas schneller werden. Der Vor- teil ist jedoch nur in Spezialfallen tiberzeu- gend. Grundsaitzlich kann man auch ohne die neuen Op-Codes auskommen. c) Wichtiger scheint mit der Umstand, da8 der 65C02 weniger Warme entwickelt. Wer sich z.B. noch an die ,,briitende Hit- ze" der alten Videx-Karte im Appie !I Plus zurlickerinnern kann, der wird von der »wohligen Kihle“ der Accelerator-lle-Kar- te im Apple lle angenehm tberrascht sein. Ventilatoren werden dann tiberflissig. d) Der 65C02-Prozessor wird erst dann richtig munter, wenn er mit mehr als 1 MHz getaktet ist, d.h. mit etwa einem 3,5- MHz-65C02 und der Verwendung der neuen Op-Codes laufen entsprechende Programme bis zu 400% schneller als vor- her, womit ein 65C02C durchaus an die Leistungsfahigkeit von 16-Bit-Prozesso- ren heranreichen kann. Deshaib ist es be- dauerlich und unverstandlich, weshalb die Firma Apple den Apple Ile und Apple llc nicht mit den schnelleren Prozessor-Va- rianten besttickt hat. BIIIFIFIIFAFFIFIIFIVA 03001 ORG $300 0370:92 CE 89 STA (IND) 2 os72: 90 * 3 * 65COZC-Demo ciniger neuer Op-Codes 0372:12 CE 91 oRA (IND) 46 0374:52 CE 92 EOR (IND) B® 0376:32 CE 93 AND (IND) 0300 6 X6502 ;65C02C-Pseudo-Op 0378 o4 oes 0378:72 CE 95 apc = (IND) O00CE 8 IND QU SCE OSTA: F2 CE 96 SBC (IND) FDED 9 coUT QU $FDED + PRINT O37C; 7s FDDA 10 PRBYTE EQU SFDDA :HEXOUT 0370:D2 CE 98 cup (IND) ae O37B: 99% Be 0378 100 # Neue BIT-Adressierungsarten 13 * Unbedingte, relative Verzweigung 0376 101 » Me 0376:89 AO 102 BIT #$A0 ol 0303 «16 BRA STETS iVerzeigung erfolgt stets 0380:34 AO 103 BIT $A0,X 16 BRK BRK wird Gbersprungen! 130 00 AO 104 BIT §A000,X We 5 105 + 18 * Push/Pull X/Y on/from Stack TAA 106 BYTE] DFB 10101010 + 2A 107 BYTE2 © DFB_ ‘10101010 ol 20 STETS Lox = #1 02 21 Loy #2 assembler-Listing zu 03 22 LDA 43 i 46 23 PAX ;Push X auf Stack »65C02-Demo einiger neuer Op-Codes' 24 PHY ;Push,Y auf Stack 0300-80 01 BRA $0303 25 PHA 0302-00 BRK 26 PLA 0303— AZ «01 LDX = #$01 DA FD ar JSR PRBYTE 0305-0 02 Loy #802 28 PLY ;Pull Y vom Stack 0307- AD 03 LDA #803 29 TVA 0309- DA PAK DA FD 30 JSR PRBYTE O30A- 5A PHY 31 PLX 111 X vom Stack 030B- 48 PHA 32 XA o30c- 68 PLA DA FD 33 JSR PRBYTE 030D- 20 DA FD JSR SFDDA 34% 0310-7A PLY 8D 35 LDA #$8D ;Return: O3ll- 98 TYA ED FD 36 JSR COUT 0312-20 DAFD JSR $FDDA 37 * 0315- FA PLE 38 + $1000. $10FF, $00FE und $00FF auf 1 setzen 0316- 8A TxA 39+ 0317- 20 DAFD JSR o1 40 LDA #1 031A- A9 8D LDA FF 41 ‘LOX = #$FF O31c- 20 ED FD JSR 00 10 42 STA $1000 O31F- 9 01 LDA 00 10 43 STA $1000,X O321- a2 FF Dx FE 44 STA $O0FE 0323— 8D 00 10 STA 00 45 STA $0000,X 0326- 9D 00 10 STA 46 * 0329-85 FE STA 47 * $1000, $10FF, $00FE und $00FF auf 0 setzen 032B- 95 00 STA 48 *# STZ = Store Zero entspricht LDA #$00 STA Adresse 032D- 9C 00 10 STZ 49 * A-Register bleibt jedoch unverdnder' 0330-96 0010 STZ 50 * 0333-64 FE STZ 00 10 51 STZ $1000 0335- 74 00 STZ 00 10 52 STZ $1000,X 0337- 20 DA FD JSR FE 53 STZ §00FE O3sA- A9 8D LDA 00 54 STZ $0000,X 033C- 20 ED FD JSR DA FD 55 ‘JSR PRBYTE iA noch 1! O33F- A C2 LDA 8D 56 LDA #$8D :Return 0341- 20 ED FD JSR ED FD 87 JSR COUT 0344- 1A Inc 5B + 0345-20 ED FD JSR 59 * INC A (= INA) und DEC A (= DEA) 0348- 3A DEC 60 * Increment/Deorement von A-Register 0349- 3A DEC bls 034A- 20 ED FD JSR = $FDED C2 62 LDA -#'B'+$80 034D- AS 8D LDA #$8D ED FD 63 JSR COUT Bt 034F- 20 ED FD JSR $FDED 64 Inc A jARAtL 0352- AQ FO LDA SFO ED FD 65 JSR = COUT act 0354~ 1C 85 03 TRB = $0385 66 DEC A pA=A-1 oss7— AG -OF LDA #80F 67 DEC A F 1 0359- OC 86 03 TSB $0386 ED FD 68 JSR COUT 035C- AD 85 03 LDA = $0385 8 69 LDA #880 ;Return O35F- 20 DAFD JSR SFDDA ED FD 70 JSR COUT 0362- AS AO LDA = #$A0 le 0364-20 ED FD JSR = $FDED ‘72 * Test Memory Bits with Accumulator 0367—- AD 86 03 LDA = $0386 Bs 036A- 20 DA FD JSR = $FDDA FO 4 LDA = #%11110000 036D- 60 RTS 85 03 ea ‘TRB BYTEL ;Reset Bits O36E- B2 CE LDA = ($CE) OF 6 LDA = #400001111 0370-92 CE STA ($CE) 86 03 7 TSB BYTE2 ;Set Bits 0372- 12 CE ORA = ($CE) 85 03 78 LDA BYTE] 0374-52 CE EOR ($CE) DA FD 2 ‘JSR PRBYTE 0376- 32 CE AND = ($CE) AO 80 LDA #8A0 0378- 72 CE ADC ($CE) ED FD 81 JSR COUT O37A- *F2 CE SBC ($CE) 86 03 82 LDA BYTE2 o37C- D2 CE CMP = ($CB) DA FD 83 JSR PRBYTE O37E- 89 AO BIT #$A0 84 RTS: iEnde Demo 0380-34 AO BIT $A0,X 85 + 0382- 3C 00 AO BIT $a000.x 86 * Indirekt Adressierung ohne ¥ o385- AA TAX O36E: BT # 0386- AA TAX 036E:B2 CE 88 LpA (IND) Hui thhiig -FACHBUCH-TIP Apple Assembler Tips und Tricks von Utrich Stieh! 1984, 226 S., 3 Abb., kart., DM 34,- ISBN 3-7785-1047-9 Hilthig Verlag, Heidelberg »Apple Assembler“ wendet sich an alle, die bereits Anfangerkennt- nisse der 6502-Programmierung haben — z.B. aufgrund des Buches »Apple Maschinensprache“ — und nunmehr ein Nachschlagewerk fiir ihren Apple II Plus/Ile/ilc suchen, in dem alle wichtigen ROM-Routi- nen sowie eine Vielzah! sonstiger Hilfsprogramme in einer systemati- schen Form zusammengestellt werden, Insgesamt umfaBt dieses Buch Uber 40 Utilities, darunter mehrere villig neuartige Program- me wie Double-Lores, Double Hi- res, Screen-Format u.a. Der erste Teil enthailt ein Repetito- rium der wichtigsten Befehle, Adressierungsarten und sonstigen Besonderheiten des 6502. Appie Assembier Mit ausfiihrlichen Programmbeispielen Ulrich Stieht Im zweiten Teil werden alle Adres- sen des Monitors zusammenge- stellt, die fir Assembler-Program- mierer von Nutzen sein kénnen. Dartiber hinaus findet der Leser Un- terroutinen fur hexadezimale Ad- dition/Subtraktion/Multiplikation/ Division, — Binar-Hex-ASCII-Um- wandlung usw. Der dritte Teil befaBt sich mit der Speicherverwaltung der Language Card und der lle-64K-Karte und enthalt Move-Programme zum Verschieben von Daten in die und aus der Language Card sowie der 64K-Karte. Der vierte Teil ist dem Applesoit- ROM gewidmet und listet eine groBe Anzahl niitzlicher Interpre- ter-Adressen. Bei den Utility-Pro- grammen liegt das Schwergewicht auf FlieBkommamathematik ein- schileBlich Print Using. Der letzte Teil behandelt den Text- und Graphikspeicher. Neben ei- nem professionelien Maskengene- ratorprogramm werden auch Routi- nen zur Double-Lores- und Dou- ble-Hires-Grafik vorgestellt. Aus dem Inhalt: 6520-Repetitorium — Monitor-ROM — Speicherverwaltung — Applesoft- ROM — Text- und Grafikspeicher 13 65C02-Disassembler Dieser hier vorgestellte 65C02-Disas- sembler basiert auf dem im Jahre 1977 von Steve Wozniak geschriebenen 6502-Disassembler, der spater fur den Apple llc gepatcht und von uns nun- mehr fiir den Apple Il Plus und Ile modi- fiziert wurde. Da unsere Variante die neuen Op-Codes selbst nicht benutzt, kann sie auch als “Cross“-Disassem- bler auf denjenigen Apple-Modelien eingesetzt werden, die nicht mit dem 65C02-Prozessor bestiickt sind. fiir Apple lle und II Plus Wenn man sich in seinen Apple Ile oder Apple | Plus einen 65C02-Prozessor ein- gebaut hat oder wenn man eine Accelera- tor-lle-Karte benutzt, wird einem erst rich- tig bewuBt, wie wertvoll der im Monitor- ROM enthaltene Disassembler ist, denn dieser funktioniert jetzt nicht mehr. Ge- nauer gesagt, werden die neuen Op- Codes des 65C02 als ,???" gelistet. Der Apple llc enthalt zwar in dem umgeschrie- benen Monitor-ROM einen fiir den 65C02 gepatchten Disassembler, aber dieser laBt sich nicht ohne weiteres in die Language Card des Apple lle oder II Plus kopieren, da er teilweise Routinen Uberschreiben wiirde, die dringend bendtigt werden, z.B. bei $FAB8 die PWRUP-Routine (Power- Up, Disk-Booten). Grundsatzlich gilt: Der ROM-Bereich $D000-$FFFF (Applesoft- Interpreter und Monitor) des Apple II und II Plus la6t sich in die Language Card des Apple lle kopieren, Dagegen laBt sich we- der der ROM-Bereich des Apple Ile noch der des llc in die LC des Apple I! oder II Plus schieben. Ferner kann auch der ROM-Bereich des Apple Ile nicht in die LC des Apple llc verlegt werden und umge- kehrt. Die Griinde hierflir liegen in dem INTCXROM-Bereich $C100-$CFFF, der beim Apple II Plus fehit und beim Apple lle und IIc vollig unterschiedliche Einsprung- adressen hat. Deshalb habe ich den im Apple IIc enthal- tenen 65C02-Disassembler dergestalt modifiziert, daB er uneingeschrankt auf dem Apple Ile und II Plus lauffahig ist. Allerdings mu8ten aus Platzgriinden die Lores-Grafik-Routinen teils Uberschrieben werden, die deshalb nicht benutzt werden dirfen, wahrend der modifizierte Monitor in der Language Card aktiv ist. Notfalls mu8 man den Bereich $F82A-$F878 aus dem Lores-Bereich heraus in einen ande- ren Bereich verlegen. Es wurde darauf geachtet, da8 der Disas- sembler die neuen Op-Codes selbst nicht benutzt, so daB man damit sogar 65C02- Maschinenprogramme _ disassemblieren kann, wenn man nicht tiber einen 65C02- Prozessor verfiigt. Das »65C02-DISASSEM- BLER‘" gliedert sich in folgende Teile: Programm $6000-$604D enthalt eine Move-Routine, die den eigentlichen Disassembier, der zunachst im Speicher ab $604E liegt, in die Language Card verschiebt. $F82A-$F878 enthalt eine Erweiterung des alten 6502-Disassemblers. Aus Platz- griinden muBte die Program-Counter-Ad- just-Routine nach $F86A verschoben wer- den, doch steht an der urspriinglichen Stelle von PCADJ = $F953 ein Sprung nach $F86A, so daB die Kompatibilitat mit den anderen Monitor-Routinen gewahrt bleibt. $F879-$FA3F enthalt den Hauptteil des Apple {Ic-Disassemblers mit einigen Pat- ches flr den Apple Ile und II Plus. Man beachte, daB es zwei Mnenomics-Tabel- len gibt, und zwar zum einen die erwelter- te alte Mnenomics-Tabelle ab $F9F9 so- wie zum anderen eine neue Mnemonics- Tabelle ab $F853. Der 65C02-Disassem- bler beriicksichtigt alle Mnemonics, die in den Programmzeilen 514-585 gelistet sind. Dazu gehéren nicht die Befehle BBR, BBS, RMB und SMB, iber die der Rock- well R65C02 zusatzlich verfiigt; diese werden als ,,7??" gelistet. Fur diejenigen, die den Disassembler - z.B, wegen der nicht berticksichtigen Op- Codes - andern wollen, ist nachfolgend der Source-Code gelistet. Da man dieses Programm infolge der mehrfachen ORGs in den Zeilen 1 und 120 als Assembler- Hexdump nur mit Mihe eingeben kénnte, ist auBerdem noch ein ,,normaler® Hex- dump hinzugefiigt. us 14 9444444944444 leanne 6000 6003: 6006: 6008: 600A 6o0c: 600R: 6010 6012: 6013: 6015, 6017: 6021: 6047: 604A: 604D: SSSSSERSRBSE aD 60 00 Fo FD Fe FD FS 83 co 83 co ORG $6000 * ‘# 65C02-DISASSEMBLER * seeeeanenenenenens, * * © Move-Routine * * * ees + APSOFT = Interpreter + Monitor . ‘$D000-SFFFF * REST = Sonstiger Monitor . ‘SFA40~SFFFF * APSOFT QU $0000 REST EQU $FA4O INDL —-EQU. SFC IND2 -EQU SFE * * Language Card schreibfahig ¢ machen: Read ROM, Write LC j-SD i-SFF MOVE. LDA $coB1 LDA $c081 :ROROM WRRAM . * ROM ab $D000-$FFFF in LC * kopieren: Applesoft + F8-ROM Lby 40 STY INDL LDA #>APSOFT STA IND1+1 Movs2 LDA (IND1),¥ STA (IND1),¥ INY BNE MOVE2 INC IND1+1 BN MOVE2 sLOADROM ;STORELC i-SFFFF . * $82A-SFASF mit neuen * Disassenbler iiberschreiben = INDI: $604E * LDA +<MOVES+L STA INDL LDA #>MOVES STA INDI+1 * © IND2: $Fe2A . LDA #<NSUL STA IND2 LDA #>NEUL STA IND2+1. Loy 40 MOVES LDA (IND1),¥ STA (IND2),¥ INC IND] BNE MOVES INC INDI+1 Move4 INC IND2 BNE MOVES INC IND2+1 MOVES LDA IND241 CMP $>REST BCC MOVES LDA IND2 CMP $<REST BCC MOVES 3 <$FA00 :<$FA40 L¢ lese- UND schreibranig machen: Bank 2 R/W enable eee LDA $coBs LDA $coas MOVES == RTS. * jRDLC iHRLC sExit Apple IIc Disassembler + fur 65C02-Processor, » umgeschrieben far IIe, « II Plus von U.Stieh? peeeeeeee teeny Verwendbar auf Apple II Plus mit Language Card sowie auf Apple Ile. Disassemblierung ist sowohl méglich mit als auch ohne 65C02-Processor, da der Disassembler selbst die neuen Op-Codes NICHT benutzt! Achtung: Lores-Grafik-Routinen ab $F800 werden teils Uber- schrieben und dirfen nicht aufgerufen werden! ee ee es a . + Externe Routinen + PRYX2 —-EQU $FD96 PRBYTE EQU $FDDA cour = EQU. SFDED ——— * + Disassembler-Beginn: $F82A ORG $F8ZA NEUL = TYA Lox #816 NEU2 CMP NEUTABL,X BEQ NEUS DEX BPL NEU2 RTS * NEUS LDA NEUTAB2,X LDY #$00 RIS . NEUTABL HEX 12 2800 HEX 14 HEX 1A HEX 1¢ HEX 32 HEX 34 HEX 3A HEX 3C HEX 52 HEX 5A HEX 64 HEX 72 HEX 74 HEX 7A HEX 70 HEX 89 HEX 92 #10 HEX 90 HEX 9E HEX B2 HEX D2 HEX F2 HEX FC * NEUTAB2 HEX 38 :0RA HEX 43 FIRB HEX 37 HINC HEX 43 :TRB HEX 39 AND HEX 21 :BIT HEX 36 sDEC HEX 21 :BIT 15 F8sB: Fasc: F85E: SSF: F860: F861: Fe62: FE63: F864: F865: F866: F867: B69: BA 40 42 3B 42 al 22 21 3c 42 42 3D 3E 3F 44 2 38 2 Ad 2 AR : 10 2 65 : 90 208 60 2F 3B 3A on 33 Fo 170 171 172 173 14 115 176 178 179 181 182 183 184 185 215 216 217 218 219 220 p21 222 223 225 226 227 228 229 230 231 282 233 235 236 237 239 240 Bal 242 243 245 247 248 249 281 252 253 255 256 257 PC-Adjust aus Platzgriinden Urspringlich ab $F953, * * * an diese Stelle verschoben. . * wo jetzt ein JMP steht. + PCADJ SEC PCADJ2 LDA PCADJS LDY TAX BPL DEY PCADJ4 ADC BoC INY RTS2 RTS. 5 $F953 ‘$2F $3B PCADJ4 $3 RTS2 Apple IIo ROM-Kopie ab SF879 mit diversen Patches, da sich die Opcodes TRB, PHY, PLY usw. im TIo-ROM bei $FABE-SFABC wo beim Apple II Plus und Ile unentbehrliche Monitor— Routinen stehen. ScRN2 BCC RTMSKZ AND R INSDS1 LOX INSDSIA LSR EVEN LDY GeTFMT TAX MNNDXL —LSR MNNDX2 —_LSR * * * * * * und $FAF8-$FAFC befinden, * * * . RTWSKZ +$0F $3a $38 PRYK2 PRELNK ($34,X) INSDS1A IEVEN #887 FTL, X SORN2 GETFMT ¥SFC s$PBAL! #500 NEUL A #88F #803 4984 MNNDXS MNNDXS #820 F8C5 Face BCS FaCo: FBCA Face: F8CD: 88 Do cs 88 Do 60 20 48 Bl 20 A2 20 c4 8 90 Az co : 90 2 68 Ag. BO 85 BO 85 a9 40 06 26 2k F953: F956: F997: F958 F959: 88 Do or 22 FF 33 FF 82 3A DA o1 4a oF FL 03 04 Fe B4 FO 2D 00 05 2D 2c Fe ED 6A FF Fa Fo FD Fo FD FO FD FD FD FB 258 259 260 261 262 263 264 265 266 268 269 270 2am 273 274 275 276 277 278 279 280 281 282 283 284 285 287 288 289 290 291 292 293 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343, 344 345 MNNDXS RTSNEU * DEY BNE INY DEY BNE RTS HEX unwox2 MNNDXL jnew FRFFFF ;Faller * * Wird von $FE64 angesprungen . INSTDSP PRNTOP PRNTBL PRMNL PRNM2 PRADRL PRADR2 PRADRS PRADR4 PRADRS RELADR PRNTYX PRBLNK PRBL2 JSR PHA LDA JSR Lox JSR Py INY BCC Lox oPY Bcc PLA TAY JSR LDA cMP LDA BCC JSR TAK INX BNE INy TYA JSR TxA MP LDx LDA JSR DEX BNE RIS INSDS1 sextern ($3A).¥ PRBYTE #801 PRBL2 Ser PRNTOP #803 #804 PRNTBL MNEML, ¥ $2¢ MNEMR,Y $2D #800 #805, $2p $20 PRNM2 +8BF cour PRMNL PRBLNK $2F #806 #803 PRADRS $28 PRADRS CHAR2, x cour CHARL, X PRADRS cour PRADR1 PRADR2 PRBYTE S2E $$E8 {$3A),¥ PRADR4 PCADJS PRNTYX PRBYTE PRBYTE #803 #540 cour PRBL2 . * Aus Platzgriinden JMP nach * Program Counter Adjust + Wird von $FB67 angesprungen. * Pe CADJJMP. IMP * FMTL PCADS sextern HEX OF jnew HEX 22 HEX FF HEX 33 ure CHARL CHAR pneu FOB2: AB POBS: Ad FOB4: FOBS FOB6 F9B7 F9B8 FOB9 FOBA: 1B FOBB: Al FOBC FOBD FOBE FOBF: F9co: 9D F9C1: 8B F9C2: 1D F903: Al F9ca: 1¢ F9C5: 29 F9C6: 19 F9CT: AE F9CB: 69 F9c9: As Foca: 19 FOB; 23 Face: 24 F9cD: 53 FOCE: 1B FOOF: 23 F9D0: 24 F9D1: 53 Fop2: 19 FOD3: Al F9p4: AD F9D5: 1A F9D6: 5B FOD7: 5B FODB: A5 F9D9: 69 FODA: 24 FODB: 24 FODC: AE F9DD: AE FODE: AB FODF: AD FOEO: 29 FOEL: 8A FOE2: 76 FOES: 8B FOE4: 15 FOES: 9C FOES: 6D FOES: AD FOES: 69 FOEA: 29 FOEB: 53 FOEC: 84 FOED: 13 FORE: 34 FOEF: 11 FOFO: AB FOF1: 69 FOF2: 23 FOFS: AO FORA: 8A FOFS: 8B FOF: AS FOFT: AC FOF8: 00 FOFO: D8 FOFA: 62 FOFB: 5A FOFC: 48 FORD: 26 FOFE: 62 FOFF: 94 434 435 436 437 438 439 440 441 442 443, 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 468 469 470 47. 472 473 474 475 476 aqT 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 Est HEX HEX HEX HEX HEX a8 a4 3$10 2820 514 515 516 517 518 519 520 Ein Bildschirm- F Maskengenerator fir DOS 3.3 und ProDOS von U. Stiehl 1984, Diskette und Manual, DM 98,— ISBN 3-7785-1021-5 say co BA 65C02-Disassembler . . ces ier aa $6000: AD 81 CO AD 81 CO AO 00 Der fiir den Apple II bestimmte Mas- 524 HEX cB $6008: 84 FC A9 DO 85 FD Bl FC kengenerator ,,Input 2.0" basiert auf 525 HEX 54 $0010; 88, Fe C800 Fa as FD DO 5 ne aS $6018: F5 A9 4E 85 FC AS 60 85 den friheren Programmen_ Input ae fey) aa $6020: FD AQ 2A 85 FE AQ F8 85 1.0" und ,,Input 80 1.0" (von denen 528 HEX ES pee fee Coe eee ee noch Restbestande lieferbar sind) See Her 34 $5058 Oe Be FF AB FF CO FA 90 F 530 HEX 04 und ist sowohl unter DOS 3.3 wie 531 ime Bd $6040: EA AS FE C9 40 90 B4 AD auch unter dem neuen ProDOS lauf- 532 HEX 08 Solas) Fe C0/AD 5 G0.60 a8 Ae ora : 533 HEX 84 $6050: 16 DD 3C F8 FO 04 CA lo fahig. Der Maskengenerator setzt ei- 54 i a $6058: F8 60 BD 53 F8 AO 00 60 nen Apple II Plus mit Language Card 535 HEX Ba eee ay CER oder einen Apple Ile voraus. Im 40 Z/ 536 HEX 28 pie a = He o ie = i z Z-Modus funktioniert er auf beiden nea eo $6078: 43 37 43 39 21 36 21 3A Geratetypen, im 80 Z/Z-Modus dage- 539 HEX F4 es Ono a PS gen nur auf dem Apple lle mit 80- a = a $5090, oe a 3B aA 10 OL = & Zeichen-Karte. (Die alte Videx-Karte 542 HEX 72 $6098: SA 90 01 CB 60 90 04 4A fir den Apple | wird nicht unter- 343 HEX F2 S080: 4k 4A 4h 20 OE 60 AG a Lf cy tex $60A8: A4 3B 20 96 FD 20 48 FO stiitzt!) 545 er BA $60B0: Al 3A AB 4A 90 05 6A BO Input 2.0“ liegt wahlweise in der 546 HEX 06 be oy Aedes Bank 1 oder Bank 2 der Language ey fer ta $6008: 00 AA BD 9A F9 85 25 29 Card und wird durch einen kurzen 549 HEX 42 2000+ 05) 85 2820 28'S: R018) Drivetina cae = oe $60D8: 29 SF AA 98 AO 03 EO BA river inden unteren 48K aufgerufen. Sei Ee Td $60E0: FO OB 4A 90 08 4A 4A 09 »Input 2.0" laBt sich problemlos in 552 HEX 74 S6OE8: 20 88 DO FA C8 88 DO F2 nicht-compilierte und compilierte 553 HEX 72 oe BL a Es mi FA ig a 5 Applesoft- sowie in Assemblerpro- ee ee At $6100: 4A F9 C4 2F CB 90 Fl AZ aie meer 565 HEX 68 gramme einbinden, Die Ubergabe der 556 HEX B2 oo pace en be be pene ce Feldinhalte an das Anwenderpro- Be Hey = $6118: 2D A9 00 AO 05 06 2D 26 ramm erfolgt durch ein einfaches $6120: 2¢ 2A 8B DO FB 69 BF 20 4 5 ed jer 2 $6128: ED FD CA DO EC 20 4 Verfahren, das auch bei Compilern 560 HEX 22 i OBE, 2038 Fy funktioniert. 561 HEX 72 $6130; A4 2F A2 06 EO 03 FO 1C : 2E 90 OE BD AD F9 20 a . . 862 HEX 1A Fur jedes Feld der Bildschirmmaske 565 HEX 1A s a o e - . lassen sich u. a. definieren: Feldlange ee se 20 DA FD A5 26 C9 EB (bis zu 255 Zeichen) — Vtab — Htab — 566 HEX 72 2 » Bt 60a aA Datentyp (insgesamt 8 Typen) — oer HEX, 72 4C DA FD z 7 ra 1 Scroliflag (stare oder dynamische tes ier se 5D FD CA Do FB 60 4 Maske) — Ctriflag — Filllflag — Lésch- 870 HEX C4 ince seas ee ee flag — Bildschirmflag (40- oder 80 Zei- He es $6188: FF 77 OF 20 FF 33 CB 60 chendarstellung). Innerhalb eines 573 HEX 48 gereoe He TOF oe Paco cee Eingabefeldes besteht jeder denkba- 574 HEX 44 CBee EE Se oe Ae. fe hs ie a $610: FF 73 11 22 FF 33 CB AG te Redigierkomfort (insert, Delete, Te ex ae $61A8: FF 87 01 22 FF 33 CB 60 Rubout, Restore usw.). 877 HEX 8 be OR are a Bei der neuen Version des Masken- pee $61C0: 81 82 59 4D 91 92 86 4A n 0 579 % Erginzung der Tabelle generators kénnen jeizt auch Ctrl- 580 @ ee oe as tee te ae Zeichen beim Datentyp String einge- ees per en Bes $61D8: 1 8A 1C 23 5D 8B 1B Al geben werden. Ferner sind — das gilt FASB: 76 583 HEX 76 1812 S616): 90 BA 10,28 90.08 1D AL nur fur lie — die Apfeltasten als ASC: 0 364 HEX 06 vB etpo: 24 os lp os 24 oe 19 Al schnelle Cursortasten —_definiert. ea = iat $61FB: AD 1A SB 6B AS 69 24 24 SchlieBlich d Feat ‘ i pees $6200: AE AE A8 AD 29 8A 7C 8B chlieBlich wurden Features imple- S87 + Fuller bis SPASF testa: 18 Oe ica sae mentiert, die den Einsatz von ,Input ae soo ne $6210: 84 13 34 11 AS 69 23 A0 2.0" als zeilenorientiertes Textverar- PASF: BA 590 ENDE NOP SSPASF pee : 2 Re 4 : ‘A y 4 88 54 44 CB beltungsprogramm erméglichen. Die $6228: 54 68 44 EB 94 C4 Bd 08 Input 2.0“-Diskette enthalt zahlrei- ind assenbiy== $6230: 84 74 B4 28 GE 74 F4 CC che Demos zur Veranschaulichung pts = 2 sy _ * oe ae der Anwendung. Gee $6248: 52 B2 72 22 72 1A 1A 26 E a is $6250; 26 72 72 88 CB C4 CA 26 Gerdtevoraussetzung: Apple lle oder Errors: 0 ees ea dd bb Ge va sae llc; ferner Apple Il+ im 40-Zeichen- $6260: C6 00 EA EA 00 00 00 00 modus Hiithig Software Service, Postfach 10 28 69, D-6900 Heidelberg 18 4 feature As Accelerator Ile Die neue Superkarte Die neue Accelerator lle der Firma Titan (die friiher als Saturn firmierte) kam etwa im April dieses Jahres auf den Markt. Ich wage zu behaupten: Wer diese Karte ein- mal in den Apple gesteckt hat, wird sie nicht mehr herausziehen wollen. In zwei- erlei Hinsicht ist sie wohl eine der besten Interface-Karten, die je flr den Apple lle bzw. II Plus konzipiert wurde. Einerseits ist deren Benutzung flr den reinen Apple- Anwender denkbar unkompliziert: Karte in irgendeinen Slot stecken, einschalten, fer- tig! Andererseits kann ein Programmierer weitergehende Features der Karte ausnut- zen, so daB sich vielfaltige Anwendungs- méglichkeiten im Hinblick auf die Modifi- zierung des weiter unten geschilderten »Pseudo-ROMs* bieten. verschiedene _—_ Preboot-Konfigurationen (Phantom 0, Fast Applesoft, Standard und Disable), und der damaligen Anleitung war eine ellenlange Liste von (geschiitzten) Programmen beigefligt worden, aus der ersichtlich war, welches Programm welche Konfiguration erforderte. Auch diese Be- schrankung ist bei der neuen Accelerator lle insoweit entfallen, als erstens eine Pre- boot-Diskette normalerweise iberfliissig ist und zweitens grundsatzlich alle Pro- gramme lauffahig sind, auch die ,ge- schitzten“. Die Karte verfiigt Uber 8 Schalter und 7 Briicken. Die Schalter 1-7 sind den Slots 1-7 zugeordnet. Bei den Schaltern bedeu- Accelerator II 1. Hardware und Installation Die Accelerator lle, die ich fiir den stolzen Preis von $ 623.00 bzw. umgerechnet DM 1805,00 erwarb, dient zunachst nur einem einzigen Zweck, namlich alle Programme bis zu ca. 3,5mal schneller zu machen. Die sorgfaltig verarbeitete, sehr kompakte Kar- te ist u.a. mit einer 4 MHz NCR-65C02C- CPU (CMOS-Technologie) sowie mit 80K RAM (dynamisch, 150 ns) bestiickt. Im Gegensatz zur alten Accelerator II kann die neue Accelerator Ile in jeden beliebi- gen Slot gesteckt werden, (Beim Apple II Plus wird jedoch wegen der Language Card Slot 0 empfohlen.) Die alte Accelera- tor I muBte sich links von einer ggf. vor- handenen Z80-Karte befinden. Diese Be- schrankung gilt fiir die Accelerator Ile nicht mehr. Ferner gab es bei der Accelerator II tet ON = 4 MHz und OFF = 1 MHz. Bei Zeitkritischen Interface-Karten (Disk-Con- troller, Modem usw., nicht dagegen z.B. Druckerkarten usw.) muB der entspre- chende Slot-Schalter auf OFF (nach un- ten) gestellt werden. Dies gilt nicht fiir die 80-Zeichenkarte bzw. 64K-Karte des Ap- ple lle. Mit dem Schalter Nr. 8 kann man die Accelerator lle insgesamt permanent auf 1 MHz herunterschalten (Dies ent- spricht dem Softswitch C086:1). Die Briicken kontrollieren ggf. vorhandene RAN-Karten. Wenn sich in irgendeinem Slot eine RAM-Karte (128K-RAM-Karte usw.) befinden sollte, mu8 die entspre- chende Slot-Briicke (ein kleiner Plastik- Aufsatz) abgezogen werden. Dies gilt wie- derum nicht fir die tle-64K-RAM-Karte in Slot 3. Da die CMOS-Teile der Karte sehr emp- findlich gegen Elektrostatik sind, empfiehit es sich, die Karte in eine Alu-Folie einzu- wickeln, falls sie versandt werden soll. Be- vor man die Karte anfaBt, z.B. wenn man sie in einen Slot steckt oder einen Schalter umlegt, sollte man die Hande an einem Metallstiick ,,entladen". Die Accelerator Ile wird denkbar einfach aktiviert: Man braucht lediglich den Apple einzuschalten; das ist alles. In dem Mo- ment, da der Apple eingeschaltet wird, zieht die Karte quasi ,alle Energie“ an sich, d.h. der alte 6502 sowie die gesam- ten 64K RAM des Motherboards inklusive LC und das 12K-ROM ($D000-$FFFF) werden desaktiviert. Wie bereits erwahnt, umfaBt die Accelerator Ile 80K RAM, das sich wie folgt aufteilt: — 48K Motherboard“ — 16K ,,Language Card“ — 16K ,,Pseudo-ROM“ Beim Einschalten des Apple wird der ech- te ROM $D000-$FFFF in das Pseudo- ROM der Accelerator Ile kopiert, worauf softswitchmaBig die Klappe herunter- falit", d.h. das Pseudo-ROM, das in Wirk- lichkeit RAM ist, wird gegen Uberschrei- ben geschiitzt. 2. Geschwindigkeit Der 4 MHz 65C02C lauft theoretisch auf 3,5 MHz heruntergetaktet, doch konnte durch detaillierte Testprogramme gezeigt werden, daB die Accelerator-CPU maximal 3,32mal schneller als die normale 6502- CPU ist. Lediglich wenn von den erweiter- ten 65C02-Befehlen Gebrauch gemacht wird, konnen Programme den Wert von 3,5 erreichen bzw. gar tiberschreiten. Im einzeinen wird die Accelerator Ile in fol- genden Fallen kurzfristig auf 1 MHz _,,her- untergetaktet": — beim Zugriff auf Peripheriegerate wie Disk-Controller usw., bei denen der ent- sprechenden Slot-Schalter von vornherein auf 1 MHz eingestellt wurde. — beim Zugriff auf RAM-Karten aller Art, insbesondere wenn diese virtuell in den Bereich $D000-$FFFF ,,gemappt" sind. — beim Zugriff auf Softswitches und ROM- Routinen im Bereich $CO00-$CFFF. Das Demo-Programm ,ACCEL.WAIT“ zeigt, daB das Ansprechen von INTCXROM- oder Softswitch-Adressen nur dann zur einer splrbaren Reduzierung der Ge- schwindigkeit fuhrt, wenn dies mit einer nicht bis ins letzte Detail untersuchten ge- wissen Haufigkeit geschieht. a 19 Praktische Beispiele a) Das an anderer Stelle in dieser Zeit- schrift gelistete Applesoft-Primzahlen- Programm ist mit der Accelerator-Karte 3,28mal schneller. b) Die Bildschirm-Scroll-Geschwindigkeit ist speziell beim Apple Ile mit Accelerator dann kaum sptirbar schneller, wenn man den lle-Monitor benutzt, der bekanntlich permanent in den INTCXROM-Bereich $C100-$CFFF springt. Ladt man dagegen z.B. den Apple Il Plus FPBASIC-File von der System Master Diskette in die Accele- rator Language Card, dann ist etwa die LIST-Geschwindigkeit bei Applesoftpro- grammen ca. 2,8mal schneller. Ahnliches gilt fur die 80-Zeichen-Scroll-Geschwin- digkeit beim Applewriter lle, da dieser die INTCXROM-Routinen nicht benutzt. c) Der Zugriff auf die 64K-Karte des Apple lle ist mit Accelerator ca. 2mal schneller. Die Datentibertragungsrate von der und auf die Karte betragt maximal 80K/s. Dies entspricht der kaleidoskopartigen Darstel- lung von 10 Hires-Bildern pro Sekunde. C086: 5 = POKE -16250, 5 = 3,5 MHz (High Speed; Normaizustand) (Zwischen dem langsamen und schnelien Modus kann man beliebig oft hin- und herschalten.) C086: A = POKE -16250, 10 (Disable; Karte absteilen) Das Abstellen der Karte bedeutet, daB nunmehr wieder das eigentliche RAM und ROM des Apple aktiv wird. Zum Abstellen der Karte verwende man entweder die mit- gelieferte Preboot-Diskette oder verfahre beim Apple ile wie folgt: CALL -151 C086:A Ctri-Geschlossener Apfel-Reset (Ctrl-Taste, schwarze Apfel-Taste und Re- set-Taste gleichzeitig driicken. Dieses Verfahren bewirkt, daB sich die Softswit- ches normalisieren.) Ist die Karte erst einmal desaktiviert, be- steht meines Wissens keine Méglichkeit mehr, sie wieder zu reaktivieren, d.h. man ist gezwungen, den Apple erst aus- und dann wieder einzuschalten, wenn die Ac- celerator wieder aktiv werden soll. Appie-Motherboard Accelerator-Karte SFFFF ROM RAM, 770M" RAM. 134, Wi aktiv Speicherorganisation mit Accelerator Ile ACCEL. LC. KOPIE kopiert (4) nach (@) ACCEL. ROM. KOPIE 1 kopiert (3) nach ACCEL. ROM. KOPIE 2 kopiert (1) nach 8 (Zu Testzwecken wurde das AUXMOVER- Programm von der MMU-Diskette benutzt, das mit der Accelerator Ile zu einer Uber- zeugenden ,,Bilderschau“ fiihrt.) In der Anleitung zur Accelerator Ile, die leider fir Programmierer und Techniker etwas durftig ist, sind nur 3 Softswitches genannt: C086: 1 = POKE -16250, 1 = 1 MHz (Low Speed; fiir Spiele usw.) 3. Reset Der Hardware-Reset durch Driicken der Ctrl-Reset-Tasten bewirkt beim Apple lle stets die Normalisierung der Softswitches in folgender Weise: Es werden die ,,unte- ren“ 48K des Motherboards lese- und schreibfahig gemacht, also eine vor Reset ggf. aktive 64K-Kartes desaktiviert. Ferner wird das ROM $D000-$FFFF lesefahig und die Bank 2 der Language Card der unteren 64K schreibfahig gemacht. SchlieBlich werden durch die Software-Reset-Routine ab $FA62 Grafik und 80-Zeichenkarte ab- gestellt. Fur die Accelerator Ile gilt demgegentiber, daB eine ggf. aktive (lese-schreib-fahig gemachte) Language Card durch Ctrl-Re- set nicht desaktiviert wird. Ferner ,,dreht* die Accelerator Ile durch", wenn man Ctrl-Reset driickt, wahrend sich die 64K- Karte in einem Read-Write-Enabie-Zu- stand befindet. Obwohl dies nicht eindeu- tig bewiesen werden kann, diirfte in die- sem Fall kurzfristig das Motherboard-RAM und -ROM aktiviert werden. Da sich dort jedoch nur ,,Zufallswerte“ befinden, wird neu gebootet. Wenn man danach mit Ctrl- Schwarzer Apfel-Reset die Softswitches normalisiert, gerat die Accelerator lle wie- der unter Kontrolle. Andernfalls kann man nur noch das Gerat ausschalten. Ein Bei- spiel: Der Applewriter lle benutzt — falls vorhanden — die 64K-Karte als Textspei- cher und muB deshalb beim Scrollen usw. haufig auf die ,oberen“ 64K springen. Driickt man dann in einem solchen Mo- ment Ctrl-Reset, wird neu gebootet. 4. Die Geheimnisse des ,,Pseudo- ROMs“ in der Betriebsanleitung der Firma Titan wird zwar beildufig erwahnt, daB nach dem Einschalten des Apple das ,,richtige“ ROM in das ,Pseudo-ROM" der Accelerator- Karte kopiert wird, doch wie das geschieht und insbesondere, ob dieser Kopiervor- gang spater, wahrend der Apple noch ein- geschaltet ist, wiederholt werden kann, dariiber hilt sich Titan in Schweigen. Die Vorstellung, ggf. in dieses Pseudo-ROM einen anderen Inhalt hineinladen zu kén- nen, faszinierte mich, denn dann ware man allen ,,F8-EPROM-Brennern" mei- lenweit Uberlegen, kénnte man doch je nach Anwendungszweck mat diesen und mal jenen Monitor oder mat dieses und mal jenes Applesoft oder Integer-Basic usw. in das Pseudo-ROM laden. Es hat mich dann zwei schlaflose Nachte geko- stet, bis ich herausfand, daB dies tatsach- lich méglich ist. Insgesamt habe ich 256 verschiedene Softswitches ausprobieren mussen, wobei mir im Ubrigen ,Kommis- sar Zufall“ zu Hilfe kam. Durch Untersu- chung der Speicherbereiche nach dem Einschalten des Apple stellte ich namlich fest, daB ein echtes Zusatz-ROM der Ac- celerator-Karte ein kurzes Kopierpro- gramm in den Stack-Bereich $0100- $01FF verlegt. Obwohl sich dieses Pro- gramm nachher durch die Ubliche Verwen- 20 4 feature Ks @ Wechselplatten-Subsysteme ® Bandstreamer fiir Backup @ NC-Net Lokales Netzwerk in Yorbereitung: NovoComp Dotensysteme GmbH Walramsneustrafie 7 +9 0-5500 Trier (0651) 4 22 44 Tx. 472569 ® kombinierte Fest-/Wechsel-Subsysteme @ NCW 2.0 Muttibetriebssystem-Software ®@ 6" Floppy mit SS/SD + DS/DD, IBM-komp. ® Fest-/Wwechselplatten fur Macintosh und Apple Ic. APPLE-BUS Kompatibititat ® Schon fiir die Einzelplatz Fest/wechsel- platten gelten konkurrenzlose Leistungen ... Die Massenspeicher-Profis fir Apple Computer wir haben die derzeit leistungsstarksten Subsysteme ! @ Hard Disk /Festplatten-Subsysteme und ... * US-Fachleute bewerten : “Die mit Abstand beste Losung am Markt!" . bis zu 63 Keywords /Benutzer definier- und editierbar . Wahifrei unter DOS 3.3 Cink. Ya- rianten), ProDOS , UCSD-Pascal 1.1 u. 1.2, CP/M sowie NCNDOS (Multiuser-DOS) ein- setzbor. Betriebsystem-Wechsel per Befehl in Sekunden. Fir jedes Keyword komplette Konfigurations-Umgebung in allen Betrieb- systemen definierbar. Schreib/Leseschutz f. alle Keywords u. “logische Unit-Bezeich- nungen” definierbar. Anderung der Platten- aufteilung ohne (!) Datenverlust in allen Be- triebsystemen. Turnkey-Losungen .. und .. dung des Stacks von selbst Uberschreibt, konnte noch der wichtigste Teil rekonstru- iert werden. Dieser ist in dem Programm »ACCEL.BOOT“ gelistet. Weitere Unter- suchungen ergaben dann folgendes: LDA #3 STA $C086 LDA $C081 LDA $C081 macht das Pseudo-ROM der Accelerator lle schreibfahig (write-enable) und zu- gleich das echte ROM des Apple lesefahig (read-enable). LDA #5 STA $C086 LDA $0081 LDA $C081 macht das Pseudo-ROM der Accelerator lle (wieder) schreibunfahig (write-disable) und zugleich das echte ROM des Apple leseunfahig (read-disable). Damit war es méglich, folgende Program- me zu schreiben: ACCEL.LC.KOPIE kopiert den Inhalt der Accelerator Language Card Bank 2 in das Accelerator Pseudo-ROM. Zu diesem Zweck muB zuvor FPBASIC usw. in die Language Card geladen worden sein. Nach BRUN ACCEL.LC.KOPIE kann die Language Card dann anderweitig verwen- det werden, ACCEL.LC.KOPIE kopiert zu- nachst den LC-Inhalt $D000-$FFFF nach $1000-$3FFF und dann wieder hinauf in das Pseudo-ROM. Anwendungszweck: ACCEL.ROM.KOPIE1 kopiert zunachst den Inhalt des Pseudo-ROMs $D000- $FFFF nach $1000-$3FFF. Nunmehr kann man den herunterkopierten Bereich be- quem patchen. Im AnschluB daran wird dann der Bereich $1000-$3FFF wieder in das Pseudo-ROM zuriickkopiert. Anwen- dungszweck: Verwendung eines partiell modifizierten Pseudo-ROM-Inhalts. ACCEL.ROM.KOPIE2 kopiert auf dem Umweg Uber $1000-$3FFF den echien Apple-ROM-Inhalt (wieder) in das Pseu- do-ROM der Accelerator-Karte. Anwen- dungszweck: Wiederherstellung des Kalt- start-Zustandes. - Nach meinen Erfahrungen scheint es ge- boten zu sein, die Kopierroutinen auf dem Umweg liber einen Bereich in den unteren 48K, z.B. $1000-$3FFF, vorzunehmen, da sich die Accelerator-Karte nach LDA +3 STA $C086 in einem partiellen Schwebe- zustand befindet, der durch permanente Softswitch-Aktivierung zu einem ,,Durch- drehen" der Karte filhren kann. Ein praktisches Beispiel: Nehmen wir an, wir wollten den 65C02- Disassembler (Dateiname ,,065C02") im Pseudo-ROM der Accelerator-Karte ,,ver- ewigen“, damit die Language Card fiir an- dere Zwecke wieder frei wird. Dies kénn- ten wir mit folgenden Applesoft-Programm realisieren: 10 PRINT CHR$ (4) ROM. KOPIE2“ 20 PRINT CHR$ (4) ,BRUN D65C02“ 30 PRINT CHR§ (4) ,BRUN ACCEL. LC.KOPIE“ »BRUN ACCEL. Zeile 10 stellt zunachst sicherheitshalber eine ,saubere” Pseudo-ROM-Kopie des Original-Apple-ROMs her. Zeile 20 kopiert dann das Pseudo-ROM einschlieBlich des neuen 65C02-Disassemblers in die Language Card. Und Zeile 30 kopiert dann die Language Card in das Pseudo-ROM. Diese Prozedur lieBe sich natirlich da- durch vereinfachen, daB man das Move- Programm des Disassemblers dergestalt umschreibt, daB_ man den neuen Dis- assembler direkt in das Pseudo-ROM ko- piert. Es sei abschlieBend darauf hingewiesen, daB die Accelerator Ile mit diesem Beitrag noch lange nicht endgiltig erforscht ist. Beispielsweise besteht u.U. die Méglich- keit, auch die Language Card des Apple- Motherboards (neben der LC der Accele- rator-Karte) zur Datenspeicherung zu ver- wenden. Ob man allerdings auch die restli- chen 48K des Motherboards als Daten- speicher benutzen kann, scheint zweifel- haft, wenngleich nicht unméglich. “2 21 BB i BM 5G A AB) | i ORG $300 2 « 3 * ACCEL.WAIT 4, # 5 6 ADR = BQU. §C000 7 ADR2 = EQU. SFFFF. 8 + 9 * Wenn ADR1 im Bereich 10 * $CO00-S$CFFF liegt, dann ll betragt die Warteschleife 12 ca, 30s statt ca. 208 13 bei einer beliebigen anderen 14 * ADR1. Wenn zusdtzlich ADR2 15 im Bereich $CO00-SCFFF liegt, 16+ betragt Warteschleife ebenfalls 17 # ca. 30 s. Wenn aber nur ADR2 18 # allein im Bereich $C000-SCFFF 19 liegt, betragt die Warteschleife 20 + wieder ca. 20 s. Fazit: 21 * Ein spiirbare Zeitverzdgerung 22 ist nur dann gegeben, wenn 23 eine Adresse im Bereich 24 * $CO00-$CFFF quasi permanent 25 ® angesprochen wird. 26 0300: a2 6F 27 LX #111 0302: 200903 28 WAIT. JSR WAIT 0305: CA 29 DEX 0306: DO FA 30 BNE WATT 0308: 60 31 RTS 0309: 8E 2005 32 WAIT2 STX XSAVE ogoc: Az 0033. Lpx #0 O30E: A000 34 Loy #0 0310: AD 00 CO 35 WAITS LDA ADRI paar 0313: CA 36 DEX 0314: DO FA 87 BNE WAITS 0316: AD FF FF 38 LDA ADR2 yAdr2 0319: 88 39 DEY 031A: DO F4 40 BNE WATTS 031¢: AE 2003 41 LDX XSAVE 031F: 60 42 RTS 0320: 00 43 XSAVE HEX 00 1 oRG $0180 2 6 3 ACCEL.BOOT 46 5 oe 6 * Diese Routine wird von einem 7 ® nicht ndher bekannten ROM— 8 * Bauelement der Accelerator~ 9 * Karte nach dem Einschalten 10 # des Apple in den Stack 11 Kopiert durch eine nachfolgend 12 * nicht aufgefiihrte Routine, 13° die ihrerseits im Stack 14 # ab $0100 ligt. 15 # Danach erfolgt ein Sprung 16 # nach $0180 zu der eigentlichen 17 * hier disassemblierten Routine, 18 * dio das echte ROM $D000-$FFFF 19 * in das Schein-ROM der Accelerator~ 20 * karte movt. alo 22 23° INDL —-EQU $04 24. INDH = EQU $05 25 ACCEL = BQU $C086 26 © WRROMBK1 EQU © $COBA 27 WRROMBK2 EQU $CO82 28 RESET © EQU $FAG2 29° ROM BQU $0000 30 + 31 LDA 4803 STA $CO86 ist ein 32 * in der Anleitung von Titan nicht 33 * dokunentierter Softswitch, um 34 oin WRITE-ENABLE der RON-16K 35 « der Karte 2u ermdglichon. 3608 0180: A903 87 LDA #803 0182: 80 86 co 38 STA ACCEL 39 + 0185: a9 DO 40 LDA #>ROM o1s7: 8505 041 STA INDH 01g9: A000 42 LDY #<ROM o1gB: 8404 = 43 sTY INDL o1gD: B104 = 44. KOPIE = LDA’ ( INDL).¥ o1sF: 9104 45 STA (INDL),Y 0191: AE 8A CO 46 LDX WRROMBK2 0194: 9104 = 47 STA (INDL),Y 0196: AE 82 CO 48 LDX WRROMBK2 0199: 88 49 DEY 019A: DOF1 =—50 BNE KOPIE 019¢: 6 05 51 INC INDH O19E: DO ED = 52 BNE KOPIE 53 oe 54 # LDA #$05 STA $CO86 ist der 55 » dokumentierte Softswitch, 56 4 der auf 3,5 Megahertz 57 * “Pull Speed" umschaltet. 5B ox 59 * LDA #801 STA $CO86 schaltet 60 + demgegeniiber auf 1 Megahertz 61 * herunter. Das RAM der Karte 62 * ist danach jedoch weiterhin 63 # aktiv. 64 + 65 4 LDA #$0A STA $CO86 schaltet 66 * zusdtzlich das RAM der Karte 67 * ab, so da8 nunmehr das normale 68 * RAM des Apple aktiv ist. Da 69 * sich hier jedoch nur Zufallswerte 70 * befinden, muB man nach diesen 71 * Softswitch mit Reset neu booten. 72 * Danach besteht offenbar keine 73 * Méglichkeit mehr, die Karte zu 14 * reaktivierten, d.h, man mB 1S + den Apple zundchst wieder 7 * ausschalten, wenn man die 77 * Karte wieder aktivieren will Tm m2 + O1A0: A905 = 80 LDA #805 0142: 8D 86 CO 81 STA ACCEL O1A5: 4c 62 FA 82 IMP RESET z ORG $300 2 6 3 * ACCEL.LC.KOPIE ‘6 ee 5 4 6 * Diese Routine kopiert zunachst 7 * den Accelerator-Le-Inhalt Bank2 8 — # $D000-SFFFF nach $1000-$3FFF 9 * und kopiert dann $1000-SSFFF 10 # in das Accelerator-"ROM" llo« 12 * Warnung: Vorher mu FPBASIC 13 * oder INTBASEC usw, in die Le 14» Bank2 geladen worden sein! 15 # 16 Applesoft-Beispie: WT #——— aaa 1g oe 19 # 10 X = PERK (49281): X = PEEK (49281) 20 20 PRINT CHR$ (4) “BLOAD FPBASIC, A$D000" 21 30 PRINT CHRS (4) “BRUN ACCEL.LC.KOPIE" 22 + 25 INDADR1 EQU $0000 24 INDADR2 EQU $1000 jAnfang 25 INDADRS EQU $4000 ;Bnde+1 26 IND EQU $FC SFD 27 IND2 = EQU SFE 28 ACCEL © BQU $coB6 29 ® 30 + -Kopie nach untel - Blo 22 Ge Die Marke |) 32 * Pointer initialisieren 35k 0300: a9 00 34 LDA #<INDADR1 ;$D000 og02: 85 FC 35 STA INDL 0304: A9 D036 LDA #>INDADRI 0306: 85 FD 37 STA INDI+1 3B oe 0308: A900 39 LDA #<INDADR2 ;$1000 030A: 85 FE 40 STA IND2 og0c: a9 1042 LDA #>INDADR2 OS0E: 85 FF 42 STA IND2+1 43 « 44» Aocelerator-LC Bank 2 iese— 45» fabig machen. 46 0310: a9 05 47 LDA 45 ;ACCEL: 5 0312: 8D 86 co 48 STA ACCEL 0315: aD 83 co 49 LDA $c08S RDBK2 0318: AD 83 CO 50 LDA $c083 i WRBK2 Sl ue 52 + $D000-$FFFF nach $1000-S3FFF kopieren 53 oe 031B: A000 54 LDY #0 031D: BL FC 55.-—« LOOP. «=sLDA_ (IND), ¥ OSIF: 91 FE 56 STA (IND2),¥ 0321: cB 87 NY 0322: DO F958 BNE LOOP2 0324: BE FD 59 INC IND1+) 0326: 6 FF 60. INC IND2+1 0328: AS FD 61 LDA IND1+2 032A: DO FL 62 BNE LOOP1 63 oe oszc: AD 81 CO 64 LDA $co81 ;RDROMBK 032F: AD 81 CO 65 Lba $co81 :WRRAMBK2 6 67s -Kopie nach oben——— 68 8 69 Pointer initialisieren 7 0332: a9 0071 LDA #<INDADR2 ;$1000 0334: 85 FC 72 STA INDL 0336: A910 73. LDA #>INDADR2+1 0338: 85 FD 74 STA INDI+1 1% 033A: A900 76 LDA #<INDADR1 ; $0000 033¢: 85 FE 77 STA IND2 033E: Ag DO 7B LDA #>INDADRI+1 0340: 85 FF 79 STA IND2+1 go x 81 + “ROW™ der Accelerator-Karte 82 + schreibfahig machen! 83 * 0342: A903 84 LDA #3 0344: 8D 86 CO 85 STA ACCEL 0347: AD 81 CO 86 LDA $coBl :RDROMBK2 034A: AD 81 CO 87 LDA $coBL PWRRAMBK2 eB x 89 $1000-$3FFF nach $0000-SFFFF, 90 *d.h. in das Accelerator-"ROM" 91 * kopieren! 92 « 034D: A000 93 Loy #0 o34F: Bl FC = 94 LOOP2. «LDA. ( IND1),¥ 0351: 91 FE 95 STA (IND2),¥ 0353: C8 96 INY 0354: DO FOOT BNE LOOP2 0356: 6 FD 9B. INC INDL+2 0358: EG FF 99) INC IND2H 035A: AS FD 100 LDA INDL+1 o36¢: ¢9 40101 MP #>INDADRS O35E: DO EF 102 BNE LOOP 103 + 104 » "ROM" der Accelerator wie quasi 105 echtes ROM schreibunfahig machen 106 * 0360: A905 107 LDA #5 ;ACCEL:5 0362: 8D 86 co 108 STA ACCEL 0365: AD 81 CO 109 LbaA $co8l. s RDROMBK2 0368: AD 81 CO 110 LDA $c081 2: WRRAMBK2 ill e 0368: 60 12 RIS 10 PRINT CHR$ (4)"BLOAD ACCEL.LC.KOPIE" 20 X= PEEK (49281):X = PEEK (49281) 30 INPUT “LC-FILE: ";XS 40 PRINT CHRS (4)"BLOAD";x$;", a$D000" 50 CALL 768 Wem die (Deutsch)Stunde schidgt: dachte der Computer und lernte eilends um. IWT Logo ... @ die leicht zu erlernende Computer-Sprache fur jede Altersstufe @ die Computer-Sprache mit modernen Strukturen, Prozeduren, lokalen Variablen, Listen usw. @ die Computer-Sprache mit der »Igel-Grafik«, die von Anfang an zu sichtbaren Erfolgen fuhrt @ die Computer-Sprache, die sofort auf den Kern der Sache —- das Programmieren und Erproben von Programmen — fllhrt ... natrlich in deutsch (Befehie, Fehler- und Systemmeldungen in deutscher Sprache) IWT Logo. ~ fir Apple If //e, 2c Best.-Nr. 400 01101 DM 395, — deutsche Erweiterung zum C64 Logo, Version C64 105 Best.-Nr. 400 22 101 DM 98, *incl. MwSt./unverbindl. Preisempfehlung IWT Software Service -farInformation, Wissenschaft, Technologie ‘Technotogie-Zentrum: HohestraGe 66, Postfach 1325, 5093 Burscherd | Tel (02174) 62815, Tx 5213989 wi Vertneb/Beratung: Dohlienstr 4 Postfach 1002 43, 8011 Baldham, Tel (08106) 31017, Ix 6213989 wi 23 IILALIMS 0310: 0312: 0315: 0318: 0332: 0345: Se SRRRSSLES 20 ao FE 81 or 03 sss 03 earounanre ORG $300 ACCEL .ROM.KOPIE1 (Pseudo-ROM) Diese Routine kopiert zundchst den Accelerator—"ROM"—-Inhalt $D000-SFFFF nach $1000-S3FFF und kopiert dann §1000-$3FFF erneut in das Accelerator—"ROM", nachdem man (bei Bedarf) das spatere “ROM entsprechend gepateht hat. ee ey INDADR1 INDADR2 INDADRS INDL IND2 ACCEL + — BQU EQU EQU QU EQU BQU $0000 $1000 $4000 SFo SFE scoss :-$FD :-SFF —Kopie nach unten— * Pointer initialisieren . LDA #<INDADR1 ;$D000 STA IND1 LDA 4>INDADRL STA INDI+1 * LDA 4<INDADR2 ;$1000 STA IND2 LDA #>INDADR2 STA IND2+1 * # Accelerator-"ROM" lesefahig machen. . LDA #5 :ACCEL:5 STA ACCEL LDA $0081 : RDROMBK2 LDA $cO81 |S WRRAMBK2 * $D000-$FFFF nach $1000-$3FFF kopieren Lby #0 LDA (IND1),¥ STA (IND2),Y INY BNE INC INC LDA BNE Loop? LOOP. IND141 IND2+1 IND141 LOOP) LDA LDA gcosl $co8i :RDROMBK2 :WRRAMBK2 Hier ggf. RTS, falls spéteres “ROM" ganuell vom Monitor aus gepatoht werden soll, eee JSR PATCH * *——-—--Kopie nach oben-- * » Pointer initialisieren + LDA #<INDADR2 STA INDL LDA #>INDADR2H1 STA INDI+1 +$1000 LDA STA LDA STA #<INDADR1 ;$D000 IND2 4>INDADR1+1 IND2+1 "ROM“ der Accelerator-Karte schreibfahig machen! wae LDA #3 STA ACCEL LDx $c081 Lpx $c081 ;ACCEL:S sRDROMBK2 i WRRAMBK2 87» $1000-$3FFF nach $D000-SFFFF, 88 #d.h. in das Accelerator—"ROM" 89 * kopieren 90 « 00 OL Ly 40 FC 92 LOOP2 ~=—-LDA_(IND1),¥ FE 95 STA (IND2),¥ 94 INY F995 BNE LOOP2 FD (96 INC IND1+1 FFT INC IND2H FD 98 LDA IND1+1 40 99 CMP #>INDADRS EF 100 BNE LOOP2 lol + 102 * “ROM der Accelerator wie quasi 103. * echtes ROM schreibunfahig machen 104 + 05 105 LDA #5 86 co 106 STA ACCEL 81 CO 107 LbA $coBl sRDROMBK2 81 co 108 LDA $COB1 : WRRAMBK2 109 * 110 RTS ul « 112 * Gewinsohte Patches hier ein- 113. fiigen. Es gil 114 * $1000-$3FFF = $D000-SFFFF us * OS6F: EA 116 PATCH NOP uy * 118 + Beispiel fir einen mdglichen 119» Patch von XAM: Bewirkt 120 * nach 2.B. 1000.3FFF einen 121 # Hexduap mit 16 statt sonst 122 * 8 Bytes pro Zeile. 123 + 124 LA #15 isonst 7 aD 126 STA $3DA6 i$FDAG 0375: 8D BO 3D 126 STA $3DB0 +$FDBO 127 + 128 * Beispiel fir einen weiteren 129 # Patch: Piepston-Anderung 130 + 20 131 LDA #$20 isonst $0C BS 3B 152 STA $3BE5 2SFBES 0370: 60 133 RTS 1 ORG $300 2 = 3 ACCEL.ROM.KOPIE2 (Echtes ROM) 4° 5 + 6 # Diese Routine kopiert zundchst 7 * den echten Apple-ROM—Inhalt 8 — * $D000-SFFFF nach $1000-$3FFF 9 * und kopiert dann $1000-$3FFF 10 * in das Aocelerator-"ROM", 11 * nachdem man (bei Bedarf) das 12 * sptere "ROM" entsprechend 13 * gepatcht hat. 4 15 INDADR1 EQU $0000 16 INDADR2 EQU $1000 17 —INDADRS EQU $4000 18 INDI EQU SFC i-$eD 19 IND2 —-EQU SFE :-SFF 20 ACCEL © EQU $coRE 21 * 2 + —-Kopie nach unten——-———- 23 8 24 * Pointer initialisioren 2 6 0300: 49 00-26 LDA #<INDADR1 $0000 oso2: a5 FC 27 STA INDL 0304: a8 D028 UDA #>INDADRI 0306: 85 FD 29 STA INDI+1 so + 0308: Ag 0031 LDA <INDADR2 ;$1000 030A: 85 FE 32 STA IND2 o30¢: A910 33 LDA #>INDADR2 O30E: 85 FF 34 STA IND2+1 358 24 0310 0312: 0315 0318 0318: 031D: osiF: 0321: 0322: 0324: 0326: 0328 32a: oszc. os2F: 0332 0335: 0337 0389: 0338: 0330: 033F 0341: 0343 0345: 0347 034A: 34D: ag 8D aD aD AO Bl 91 8 DO 45 Do AD aD Ag 85 Ag 85 Ag 85 a9 85 Ag ep AE AE 0387: 0359: O35B: 035D O35F: 0361: 0363: 0365: 0368 0368: osee: os6F: 0370: Ag 8D AD AD 03 86 81 a1 00 FC Fe oF 00 FO 10 FD 00 FE Do FF 03 86 al a1 00 FC FE FO FD FF FD 40 =F 05 86 al 81 co 40 co 41 co 42 co 56 co 67 co 83 co 84 co 85 100 tol 102 103 104 105 co 108 co 107 co 108 109 110 un uz 113 14 1s 116 alr 118 119 120 + Eohtes Apple-ROM lesefahig * machen * + $0000-SFFFF * Loop LDA STA LDA LDA Ly LDA STA INY BNE INC INC LDA BNE LDA LDA 8 SACCEL:3 ACCEL Scosl RDROMBK2 $cosi. sRANBK2 nach $1000-S3FFF kopieren #0 (1ND1),¥ (IND2),Y LoOPL INDI+1 IND2+1 INDI+1 LOoPL $coat > RDROMBK2 scoal :WRRAMBK2 Hier gef- RTS, falls spateres gepatcht werden soll. * « © “ROM manuell vom Monitor aus * * JSR PATCH —Kopie nach oben——-———- * Pointer initialisieren * sae kopier ween Lope echtes ene Gewins eeeee PATOR LDA STA LDA STA LDA STA LDA STA LDA STA LDxX Dx en Loy LDA STA INY BNE Inc Inc LDA MP BNE ROM LDA STA LDA LDA RTS chte NOP $<INDADR2 ;$1000 INDL +> INDADR2+1 INDI+1 #<INDADR1 ;$D000 IND2 #>INDADRI+1 IND2+1 "ROM" der Accelerator-Karte schreibfahig machen! 48 sACOBL:3 ACCEL $cosi PRDROMBK2 $coBl :WRRAMBK2 $1000-$3FFF nach $D000-$FFFF, d.h. in das Accelerator—"ROM" +0 (IND1),Y (IND2),¥ LooP2 INDI+1 IND2+1 INDI+1 ‘¥>INDADRS LooP2 “ROM! der Accelerator wie quasi schreibunfahig machen 5 ACOBL $cosl : RDROMBK2 $co81 WRRAMBK2 Patohes hier ein- fligen. Es gilt. $1000-S3FFF = ‘$D000-$FFFF ‘+ Patch-Routine nicht aktiv * RTS FORTH—-SYSTEME FORTH Encyclopedia DM System Guide to FIG FORTH OM Floating Point Listing in FORTH OM Expertensystem in FORTH7? oM Dokumentation derFORTH Konferenzen 1980, 249 Seiten, 1982, 368 Seiten, je DM 1981, 608 Seiten (2 Bande? oM Rochester FORTH Proceedings 1981, 1982, 1983 je DM 98,-~ 280 FORTH von LMI auf APPLE-Disk DM 376,28 APPLE 3D-GraFORTH OM 282,20 APPLE II Master FORTH mit Editor, Assembler, Debugger, 258 S. Handbuch 0M 398,-- MasterFORTH + Hires + Floatinap. 0M 598,-- Expertensystem auf Diskette DM 376,28 fysFORTH mit Einféhrungskurs DM 198,-- Professional Applikation Development System mit Metacompiler, FPA DM 1881 ,-~ Cross Compiler fir LMI Systeme DM 1258,-- Wir unterstitzen natérlich auch andere Rechner, fordern Sie doch einfach unseren kostenlosen Katalog an: FORTH-SYSTEME Angelika Flesch, Schitzenstr. 3, 7820 Titisee-Neustadt, Tel.: 7651/1665 estachendeLeistun! ‘AP a 6800 CPU mut (28K RAM 4 H | AP 20 mst Assembler und Pseudodisk aon ¥ V | iehacninne 2 ) AIG ete Bee = rane — EaTeimcmcim inne ak connie BEC Disc Hanbun eum ne rere Bante Sahn ita Baste Rewuint , a eS oaige Disketten mit Beko noenn BIER ‘AP 23 2808 CPU 6 Mitr Innenlochverstirkung ss, sd ZHOA Karte re RASC M05, oe Zone oan Das Texipropramm Wordsar Dyat0,~ Bie Pree ine MOWSE 100er Pack DM 500,— i cz Olper Str. 10 1011 Rose Marie Lane 16 i3> COMPUTE: cECHNIL 4800 Bielefeld 14 Stockton, CA 95207 Tel. 0521/444032 Tel. (209) 473-7473 West-Germany USA 25 Applesoft simuliert Turtle Graphic a ULL Turtle Graphic ist ein in viele Hoch- sprachen, wie zum Beispiel in UCSD- Pascal oder im Apple Graforth ][, inte- griertes Graphic-System. Es eignet sich besonders fiir den unbedarften Anwender, der damit ohne mathemati- schen Ballast an den Computer heran- gefuhrt wird. Eine der bekanntesten Anwendungen diirfte wohl die Pro- grammiersprache Logo sein, die sich vor allem fiir Kinder eignet. Harald Grumser Das hier vorgestellte Programm stellt die wichtigsten Befehle der Turtle (Schildkré- te) bereit. Nach dem Programmstart er- scheint in der Mitte der HGR1 eine Turtle in Form eines Quadrates, die ihren Schwanz, der mit einem Schreibstift ver- sehen ist, zum Boden gesenkt hat und in Richtung Bildschirmoberkante schaut. !m unteren Teil des Bildschirmes erscheint der Doppelpunkt als Promptzeichen; die Turtle erwartet einen Befehl. Gibt man nun zum Beispiel ,50 MOVE“ ein, so bewegt sich die Turtle um 50 Bild- punkte nach oben. ,,90 TURN 50 MOVE“ dreht die Turtle um 90 Grad nach rechts und bewegt sie wieder um 50 Bildpunkte. Wiederholt man dies noch zweimal, so hat sie ein Quadrat gezeichnet. Die Befehle, die die Turtle ausfilhren kann, lauten wie folgt: MOVE bewegt die Turtle um die angege- bene Anzahl von Punkten in die Richtung, in der sie gerade steht. 26 TURN dreht die Turtle um die angegebene Gradzahl, wobei positive Zahlen nach rechts drehen und negative nach links. MOVETO bewegt die Turtle zu den ange- gebenen Koordinaten, wie sie bei HPLOT benutzt werden (279 - 159 Punkte). TURNTO dreht die Turtle in die angegebe- ne Richtung, (,-90 TURNTO“ dreht die Turtle in Richtung des linken Bildschirm- randes.) TURTLE ldscht den Bildschirm und posi- tioniert die Turtle wie beim Programmstart. PENUP hebt den Schreibstift, so daB bei der nachsten Bewegung kein Strich gezo- gen wird. PENDOWN senkt den Schreibstift wieder. Der Leser wird sich vielleicht fragen, war- um die Parameter vor dem Befehl stehen. Tippt man eine Zahl ein, so wird diese auf dem sogenannten Stack (Stapel) abgelegt. Brauch die Turtle einen Parameter, so holt sie sich diesen vom Stack. Ein Quadrat laBt sich also auch durch Eingabe von ,,50 90 50 90 50 90 50 MOVE TURN MOVE TURN MOVE TURN MOVE" zeichnen. Das gleiche gilt auch fur die Arithmetik; die Turtle kennt die vier Grundrechenarten. Zuerst werden die Operanden auf dem Stack abgelegt und dann der Operator dar- auf angewandt. So ergibt ,20 30 + MOVE" eine Bewegung um 50 Schritte. Dieses Verfahren nennt sich Reverse Po- lish Notation (Umgekehrte polnische Nota- tion) oder auch Postfix-Notation. Um dies noch einmal an einem Beispiel zu erlau- tern, sei der Ausdruck (1+2) * (8+4) zu berechnen: Das Ergebnis wtirde lauten » 12434 + * “. Die Turtle stellt nun einige Befehie zur Verfiigung, um den Stack zu manipulieren: + —+*/ holen zwei Zahlen vom Stack, verkniipfen sie mit dem jeweiligen Opera- tor und legen das Ergebnis wieder auf dem Stack ab. PULL holt eine Zahl vom Stack, ohne sie zu benutzen. DUP dupliziert die oberste Zahl auf dem Stack. ,,DUP *“ ware somit die Operation zum Potenzieren. SWAP vertauscht die oberen beiden Zah- len auf dem Stack. ,3 10 SWAP -" ergibt also 7, wahrend ,,3 10 -“ -7 ergibt. PICK holt sich einen Index vom Stack und kopiert dann die von oben indizierte Zahi auf den Stack. Ein Beispiel macht dies wohl deutlicher:,,10 20 30 2 Pick" ergibt auf dem Stack 10 20 30 20", ,1 PICK“ enspricht also dem DUP-Befehl. Bei dem Quadrat oben wide es sich als praktisch erweisen, wenn mehrmals zu wiederholende Befehle als Schleife (Loop) eingegeben werden kénnten. Selbstver- standlich ist die Turtle auch dazu in der Lage. Die zu wiederholenden Befehle werden zwischen ,,DO“ und ,,LOOP“ ein- geschlossen. Als Schleifenzahler holt sich »DO“ eine Zahi vom Stack. ,4 DO 50 MOVE 90 TURN LOOP" wiirde also unser Quadrat zeichnen. Unsere Turtle kann jedoch noch mehr, namlich neue Befehle lernen. Eine zu ler- nende Befehisfolge wird durch , LEARN>“ und ,<"“ eingeschlossen, wobei nach »LEARN>" der Name des neuen Befehls folgt. Nach der Eingabe von ,LEARN> QUADRAT 4 DO 50 MOVE 90 TURN LOOP <“ zeichnet die Turtle jedesmal ein Quadrat, wenn der Befehl ,QUADRAT“ eingegeben wird. Der linke Stern in der Grafik 1 wird somit gezeichnet durch die Befehle ,20 DO QUADRAT 18 TURN LOOP“ Grafik 1 Es sei nicht verschwiegen, wie der Finf- zack in der abgebildeten Grafik erzeugt wird. ,LEARN> FUENFZACK 216 TURN- TO PENUP DUP 2 / MOVE PENDOWN 18 TURNTO 5 DO DUP MOVE 144 TURN LOOP <“ zeichnet einen Fiinfzack um die Stelle, an der sich die Turtle gerade befin- det, in der angegebenen GroBe. Dem Leser sei es Uberlassen auszutiifteln, wie die Figur in der Bildmitte entsteht. Ein Tip: Es handelt sich um eine Menge ver- drehter Siebenecke. AbschlieBend sollen noch einige Befehle erlautert werden, die das Arbeiten mit der Turtle erleichtern: TEXT schaltet auf nur Text um, so daB der ganze Bildschirm zur Eingabe von Befeh- len zur Verfligung steht. GRAPH schaltet zurtick auf HGR1, ohne den Bildschirm zu léschen. 4pqralik 454 LIST listet alle Befehisworter samt der neu erlernten. Nach 22 Wértern geht es erst nach Tastendruck weiter. FORGET vergi8t alle Befehle ab dem spe- zifizierten. Da neue Befehle bereits neu erlernte beinhalten kénnen, geht die Turtle davon aus, daB nach Loschen des Befehls »QUADRAT“ auch der Befehl ,, FUENF- ZACK" nicht mehr ausgefiihrt werden kann. STACK listet den gesamten Stack, wobei auch hier nach 22 Zahlen auf einen Ta- stendruck gewartet wird. Der Stack kann insgesamt 101 Zahlen beinhalten BYE verabschiedet sich und springt zu- riick in den Applesoft-Direktmodus. Zur Eingabe sei folgendes bemerkt: In einer Eingabezeile konnen bis zu 50 Be- fehle stehen, die von mindestens einem Blank (Leerzeichen) voneinander getrennt sein missen. AuBer den Namen nach »LEARN>“ und ,FORGET“ kénnen sie aber auch einzeln eingegeben werden. Tritt wahrend des Lernens ein Fehler auf, so wird alles ignoriert. Dasselbe gilt, wenn mehr ,DO" als , LOOP“ Befehle oder um- gekehrt im Lernmodus auftauchen. Schlei- fen werden dadurch realisiert, daB deren Inhalt voribergehend gelernt wird. Daher gilt flr sie dasselbe wie oben. Wahrend des Lernens flhrt die Turtle die Befehle nicht aus. Solite sie also einmal wider Er- warten nicht reagieren, so kann das daran liegen, daB ein ,<“ oder , LOOP“ fehit. »<" schlieBi im Direktmodus alle Schlei- fen, ohne sie auszufuihren, meldet sich aber mit , MISSING DO“. Die Standardbe- fehle kénnen nicht mit ,FORGET“ ge- léscht werden, und ein bereits erlernter Befehl kann nicht nochmals gelernt werden. Die Fehlermeldungen sind im groBen und ganzen selbsterklarend. , OUT OF MEMO- RY“ tritt auf, wenn die Anzahl der erlernten Befehle plus der der aktiven Schleifen 21 Uberschreitet. Wahrend die Turtle ein Programm abarbei- tet, kann sie durch Ctrl-S gestoppt werden. Die Turtle kann sich nicht uber den Bild- schirmrand hinaus bewegen, sondern schneidet die Koordinaten ab, was bei gré- Beren Figuren zu Verzerrungen fuhrt. Das Programm selbst ist nicht im Hinblick auf maximale Geschwindigkeit, sondern auf Lesbarkeit hin geschrieben worden. eB 27 i : | Der einzige Beitrag zur Erhéhung der Ge- schwindigkeit ist die Verlegung der Initiali- sierungsroutine an den SchluB (Zeile 9000-9995) und die Nennung der Varia- blen in der Reihenfolge ihrer Haufigkeit. In Zeile 20-60 wird auf die Eingabezeile gewartet und daraus in der Routine 8000- 8999 ein einzelner Befehl abgespalten und dessen Index (Variable K) gesucht. Danach wird in der Routine 70-99 in das entsprechende Unterprogramm verzweigt. Hier wird auch das Learnflag gesetzt und mit Hilfe von Epsilon die Schleifentiefe gezahit. Ist der Befeh! selbst eine Zahl, so wird K um OFFSET erhoht, somit enthalt K die Information Uber die Zahl. Die Routinen in 100-999 sind die ver- schiedenen Unterprogramme flr die Tur- tle, die in 1000-1999 die fiir den Stack. Bevor auf die LOOP- und LEARN>-teile eingegangen wird, ist es sinnvoll, die Ab- speicherung der neuen Befehle zu erlau- tern. Fir die neu zu lernenden Befehle gibt es eine Matrix L, die aus 21 Zeilen zu je 50 Spalten besteht. Ein Befehl besetzt nun eine Zeile derart, daB dessen Indizes in dieser Zeile nacheinander abgelegt wer- den, gefolgt von einer Null. Wird nun einer dieser Befehle aufgerufen, so verzweigt das Programm nach 7000, wo diese einzelnen K-Werte ausgelesen und dem Verteiler ab Zeile 70 zugeflhrt werden. Da es méglich ist, in einem neuen Befeh! einen ebenfalls neuen Befeh| auf- zurufen, kann dieses Unterprogramm sich selbst neu aufrufen. Damit bei dieser Re- kursion keine Zeiger verlorengehen, mus- sen diese in Form von Vektoren L1,L2 und deren Pointer NLP aufbewahrt werden. Dasselbe gilt fiir die Routine in 2500-2999, die dieselbe Rekursion flr geschachtelte Schleifen darstellt, wobei diese Uber einen anderen Pointer LLP verwaltet werden. Bleibt noch der Schieifenstart in 2000- 2499, der einsichtig ist, und die Lernrouti- ne in 3000-3999: Dort wird der Name ab- gefragt, abgespeichert und die Pointer zur Abspeicherung in der L-Matrix geseizt, beziehungsweise eine Null ans Ende der Zeile geschrieben und die Anzahl der Be- fehle IT um eins erhéht. In der Fehlerbehandlungsroutine in 6000- 6999 ist Zeile 6510 zu erlautern. Diese Interpreter-Routine initialisiert den Return- stack. Dies ist erforderlich, da sonst nach einem Programmabsturz der Returnstack noch belastet ware und die fir die Rekur- sionen benétigte Schachtelungstiefe nicht mehr erreicht wurde. (Der Returnstack kann nur 25 Returnadressen aufnehmen). Es ist in diesem Zusammenhang auch da- von abzuraten, die Variable NL zu vergr6- Bern, da in nicht mehr wie 25 Unterpro- grammebenen gesprungen werden kann. Zuletzt noch ein paar Tips fur diejenigen, die das Programm durch eigene Befehle erweitern wollen. Zuerst schreibe man sei- ne Erweiterung in einen freien Bereich. Danach gebe man dieser einen Namen und flige diesen in Zeile 9220 an. Sodann erhéhe man IS in Zeile 9110 um eins und erweitere die Zeilenliste in Zeile 90 um seine neue Routine. Es ist davon abzuraten, seinen neuen Be- fehi in der Mitte der vorhandenen Befehle anzuordnen, da dann die Abfragen in Zeile 70-99 nicht mehr stimmen. & MESON Il, 48 K MESON Il, 64 K (16 K + Z 80-Card) Z 80-Card 16 K-Card Floppy-Disk 5'4” Controller-Card PAL-Card + Modulator MESON Il, Leerplatine cig beide Rechner mit 10er-Block, 1 Jahr Garantie Tastaturen und Gehause auf Anfrage TEMBSTONE-MICRO Th. Tank & G. Korber 1100,- DM Joyport, zum AnschluB von zwei ATARI-Joysticks 40,- DM 1250,- DM ADD2 B, (VIA 6522) mit RAM + Backup 170,- DM 125,- DM ADD2 L, Leerplatine 55,- DM 125,- DM ADD4 B, (PIA 6821) 480,- DM mit RAM + Backup 150,- DM 150,- DM ADD4 L, Leerplatine 45,- DM 170,- DM PIA-Card mit'Wrap-Feld ausgertstet 85,- DM Gardeschiitzenweg 72, 1000 Berlin 45 @ 030/8 33 1303 (SHOP), Q 74657 28 (BURO) Entwicklungen auf Anfrage ile 28 EBA saqgcntikaag 82 84 86 88 30 92 99 100 ilo 120 130 HC REM REM REM REM LOMEM: 44 16 1 3 REM Hinter HGR GosuB 9000 GOSUB 100 Seeeeeeted TURTLE GRAPHIK eerneeeetrer Ts REM Hole Eingabezeile und arbeite sie ab PRIGHT INPUT " GOSUB 8000 IF K = 0 THEN 25 IF K = IT + 2 THEN ERFLG = 1: GOTO 6000 GOSUB 70 GoTo 35 REM Vertoiler IF PEEK (KBD) = CS THEN 6000 IF K = 22 THEN LRNFLG = LRNFLG - EPS: REM INS = "LOOP" IF LRNFLG = 0 OR K = 24 THEN 88: REM Direkt Modus oder INS = "<" IF LRNFLG < 0 THEN ERFLG = 5: GOTO 6000 IF K = 21 THEN LRNFLG = LRNFLG + EPS: REM IN$="Do" L(LLP,L2(LLP)) = K:L2(LLP) = L2(LLP) + 1: IF L2(LLP) < = INS THEN 86 ERFLG = 8: GOTO 6000 RETURN IF K > IS + NL + 2 THEN 1100 ON K GOTO 100, 200, 300, 400, 800, 600 , 650, 700, 750,800, 900, 1200, 1300, 1400, 1600, 1600 , 1600, 1600, 1600, 1900 , 2000, 2500, 3000, 3500, 9996 GOTO 7000: REM gelernten Befehls K > IS + 1 —> Ausfuehren eines REM TURTLE HOME : HGR : VTAB 21 DIR = 0:PX = NX / 2:PY = MY / 2 = 1: HCOLOR= 3 140 : 150 160 170 180 190 REM DRAW TURTLE XDRAW 1 AT PX, PY IF NOT HC THEN 190 HPLOT PX, PY RETURN 199 : 200 205 210 215 220 225 230 235 245 250 255 500 310 320 330 340 400 410 420 430 440 450 460 499 500 510 520 530 REM MOVE GOSUB 1000 GOSUB 150 PX = PX + SIN (DIR / 180 » PI) # ST PY = PY - COS (DIR / 180 * PI) + ST IF PX > MX THEN PX = MX IF PX < 0 THEN PX IF PY > MY THEN PY IF PY <0 THEN PY = IF NOT HC THEN 255 HPLOT TO PX,PY GoTO 150 REM TURN GOSUB 1000 DIR = DIR + ST DIR = 360 # (DIR / 360 ~ RETURN INT (DIR / 360)) REM MOVETO GOSUB 1000 A=ST GosuB GOsUB Stacks PY = A:PX = ST GOTO 225 1000 150: REM Kein XDRAW der Turtle vor Pruefung des REM TURNTO GosUB 1000 DIR = ST GoTo 330 599 : 600 610 620 650 660 “REM PENUP He = 0 RETURN “REM _PENDOWN He = 1 670 700 no 720 730 740 149 50 760 770 780 ‘790 799 800 810 820 830 840 850 860 899 900 910 920 930 940 950 960 970 1000 1010 1030 1040 1050 1100 1110 1120 1130 1140 1200 1210 1220 1230 1299 1300 1310 1320 1330 1399 1400 1410 1420 1430 1440 1499 1500 1510 1530 1540 1550 1560 1570 1580 1600 1610 1620 1630 1640 1650 1660 1670 1699 1900 1905 1920 1930 1940 1950 1960 1999 999 : 1099 : 1520 1 1910 1 RETURN 699 REM TEXT TEXT : HOME ; INVERSE PRINT SPC( 13); "TURTLE GRAPHIK"; SPC( 13) NORMAL : POKE 34,1: REM Textfenster: WINDOWTOP RETURN REM GRAPH POKE ~ 16504,0: REM HGR Schalter; andere Schalter durch TURTLE gesetzt HOME VTAB 21 RETURN REM LIST FOR I T0 IT PRINT "~ ";28(I) IF (I +1) / 22 < > INT ((I +1) / 22) THEN 850 GET A$: IF ASC (A$) = CS - 128 THEN I = IT REM FORGET IF LRNFLG < GOSUB 8000 IF K > IS +1 AND K < ERFLG = 9: GOTO 6000 IT =K— LLP = IT - Is -1 RETURN > 0 THEN 940 = IT + 1 THEN 950 REM Hole vom Stack IF SP < 0 THEN ERFLG = 2: GOTO 6000 ST = ST(SP) SP = SP -1 RETURN REM Schiebs auf den Stack IF SP = 100 THEN ERFLG = 3: GOTO 6000 SP = SP +1 ST(SP) = RETURN ~ OFFSET 1199 : REM PULL holt ein “Dummy” SP = SP -1 IF SP < - 1 THEN SP= -1 RETURN REM DUPliziere IF SP < 0 THEN 1010 K = ST(SP) + OFFSET GoTo 1110 REM SWAP vertausoht die oberen beiden Stackelemente A = ST(SP) St(SP) = ST(SP - 1) ST(SP ~ 1) =A RETURN REM PICK holt das von oben indizierte Stackelement GOSUB 1000 = SP -sT+1 IF SP < 0 THEN 1010 IF I > SP THEN 1580 IF I <0 THENI=0 SP = SP +1 ST(SP) = ST(I) RETURN 1599 REM STACK + ~ GosuB 1000 ON K - 15 GOTO ST(SP) = ST(SP) ST(SP) = ST(SP) ~ ST: RETURN ST(SP) = ST(SP) # ST: RETURN IF ST = 0 THEN ERFLG = 4: GOTO 6000 st(sP) = ST(SP) / ST: RETURN */ 1630, 1640, 1650, 1660 + ST: RETURN REM STACK Tis ot = 141: IF I> SP THEN 1 PRINT CHRS (91);" ";ST(I) CHRS. (93) IF (L+1) /22< > INT ((1+1) / 22) THEN 1950 GBT AS: IF ASC (AS) = CS — 128 THEN I = SP coro 1910 RETURN 29 2000 2010 2020 2050 2040 2050 2499 2500 2510 2520 2530 2540 2550 2560 2870 REM DO-Schleifenstart LRNFLG = LRNFLG + EPS ULP = LLP +1 IF LLP > NL THEN ERFLG = 7: GOTO 6000 L2(LLP) = 0 RETURN REM Schleifenende (LOOP) L(LLP,L2(LLP)) = 0 GOSUB 1000: COUNT(LLP) = ST IF COUNT(LLP) < = 0 THEN 2560 K = IS + LLP + 2: GOSUB 7000 2999 : 3000 3010 3020 3030 3040 3050 3060 3070 3080 3090 3499 3500 3510 3520 3550 3640 3650 3560 8140 8150 8999 9000 COUNT(LLP) = COUNT(LLP) - 1: GOTO 2630 LLP = LLP - 1 RETURN REM LEARN IF LRNFLG < > 0 THEN 3040 GOSUB 8000 IF K = IT + 2 THEN 3050 ERFLG = 1: GOTO 6000 LRNFLG = 1 IF IT - IS > NL THEN ERFLG = 7: GOTO 6000 18(IT + 1) = INS LLP = LLP + 1:L2(LLP) = 0 RETURN REM "<" Ende des Lernmodus IF LRNFLG = 0 THEN 6200 LRNFLG = LRNFLG - 1 IF LRNFLG < 0 THEN ERFLG = 5: GOTO 6000 IF LRNFLG > 0 THEN ERFLG = 6: GOTO 6000 Iv=1T+1 L(LLP,L2(LLP)) = 0 RETURN REM Fehlerbehandlungsroutine POKE 49168,0 REM Tastaturruecksetzimpuls PRINT GS; ON ERFLG GOTO 6060 , 6070, 6080, 6090, 6100,6110,6120,6150,6140 Goro 6200 PRINT "SYNTAX ERROR": GOTO 6200 PRINT "STACK EMPTY": GOTO 6200 PRINT "STACK FULL": GOTO 6200 PRINT "DIVISION BY ZERO": GOTO 6200 PRINT "MISSING DO": GOTO 6200 PRINT "MISSING LOOP": GOTO 6200 PRINT "OUT OF MEMORY": GOTO 6200 PRINT "TO MANY INSTRUCTIONS": GOTO 6200 PRINT "CAN'T FORGET" ERFLG = 0:LRNFLG = 0 NIP= ~ 1:LLP = IT -Is-1 CALL =~ 10621 REM Initialisiere Basic-Return-Stack GoTo 25 REM Fuehre einen gelernten Befeh] aus NIP = NIP +1 IF K > IS + NL + 2 THEN K = K — OFFSET L1(NIP) = K ~ 2 - 18:L2(NIP) = 0 K = L(L1(NIP),L2(NIP)):L2(NIP) = L2(NIP) + 1 IF K = 0 THEN NIP = NIP - 1: GoTO 7070 GOSUB 70: GOTO 7040 RETURN REM Naechster Instruktions-Index LINES = LINES +" "" PRIGHT = PRIGHT + 1: IF PRIGHT > LEN (LINES) THEN K 0: RETURN IF MID$ (LINES,PRIGHT,1) =" " THEN 8020 PLEFT = PRIGHT PRIGHT = PRIGHT + 1: IF MID$ (LINES,PRIGHT.1) < >" ‘THEN 8050 INS = MIDS (LINES, PLEFT, PRIGHT ~ PLEFT) IF VAL (INS) = 0 AND IN$ < > "0" THEN 8100 K = OFFSET + VAL (INS): RETURN K=IT+1 FOR I = 0 70 IT IF I8(I) < > INS THEN 8140 = ee or NEXT :K=K +1 RETURN REM Initialisierung 9010 9020 2030 9040 2050 2060 9070 9080 9090 9100 9110 9120 9130 9140 9150 2160 9170 9180 9190 9200 9210 9220 9230 9240 9250 9260 9270 9280 9290 9300 9310 9320 9330 9340 9360 9360 9370 9380 9390 9400 9410 9420 9430 9440 9450 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 FOR I = 768 70 768 + 9 READ A: POKE I,A: NEXT DATA 1,0,4,0,40,54,63,56,4,0 POKE 232,0: POKE 233,3 ROT= 0: SCALE= 1 REM Formtabelle fuer die Turtle DIM ST(100): REM 101 Stackelemente SP = -1:ST=0: REM Stapelzeiger (Stackpointer) und angefordertes Stackelement NU = 20: REM Anzahl der zu lernenden Befehle INS = 60: REM Anzahl der Instruktiuonen pro Befehl IS = 24: REM Anzahl der Standartbefehle IT = IS: REM Anzahl der Befehle insgesamt DIM I$(IS + NL +1): REM Feld mit den Befehisnamen FOR I = 0 To IS READ I§(I): NEXT DATA TURTLE, MOVE, TURN, MOVETO DATA TURNTO, PENUP, PENDOWN DATA TEXT, GRAPH, LIST, FORGET DATA PULL, DUP, SWAP, PICK DATA +,-,¥,/,STACK DATA DO, LOOP, LEARN>, < DATA BYE DIM L(NL,INS): REM Matrix mit NL Befehlen zu je INS Instruktionen DIM L1(NL),L2(NL) NLM-Matrix DIM COUNT(NL): REM Zaehler fuer geschachtelte Schleifen K = 0: REM Instruktionsindex KBD = 49152: REM PEEK zur Tastaturabfrage CS = 147: REM CS = ASC (CTRL-S) OFFSET = 2 } 15: REM K wird um OFFSET erhoeht um Zahlen als Instruktionen abzuspeichern LLP = - 1: REM Zaehler fuer LEARN> und aktive Schleifen NIP = LLP: REM Zaehler fuer geschachtelte Befehle LRNFLG = 0: REM Wird waehrend des Lernmodus auf 1 gesetzt ERRFLG = 0: REM Fehlercode fuer Fehlerbehandlung EPS = 1 / 64: REM LRNFLG wird bei jedem DO um EPS erhoeht und bei jedem LOOP erniedrigt PI = ATN (1) #4 PX = 0:PY = 0: REM Plot-Koordinaten REM Zeilen- und Spaltenindex der HC = 0: REM Logische Variable fuer PENUP/PENDOWN DIR = 0: REM Richtung der Turtle in Grad MX = 279:MY = 159: REM HGR Fonster PLEFT = 0: REM Linker Zeiger der Eingabezeile PRIGHT = 0: REM Rechter Zeiger dor Eingabezeile A= 0:1 = 0: REM Allgemeine Variablen G$ = CHRS (135): REM Bell REM LINE$,IN$ sind die Eingabezeile und die daraus abgespaltenen Befehlo RETURN REM Ende des Programms TEXT ; HOME PRINT "END OF TURTLE GRAPHIC” END REM HINWEIS: REM Wer dieses Programm mit allen REM's abtippt REM und es dann ausfuehrt wird sich wundern. REM Programme, die mehr als 25 Diskettensektoren lang sind REM und die HGR aufrufen, loeschen sich zum Teil selbst. Peeker-Sammeldiskette Die abgedruckten gréBeren Programme sind auch als Sammeldisketten erhaltlich, die etwa jeden zweiten Monat erscheinen und die Listings der vorangehenden zwei Hefte zusammenfassen. 30 APPLE Il - Anwenderhandbuch (L. Poole} itfadens werden Sie einsetzen, denn it ber das Literatur naterial g as herstellerseit 1 wir APPLE II PASCAL ~ Eine praktische Anleitung A. Luehrmann, H. Peckhar fir alle, die die Programmie ache PASCAL lernen wollen und Zugang zu einem Apple-Cor or haben. 5 cover, DM 6502 - Programmieren in Assembler (L. Leventhal) Dieser Tit Bich Noch im Programm: VisiCalc, 50 Programme auf Diskette, DM79, APPLE MASCHINEN SPRACHE Der Einstieg iiber BASIC! Die Idee: Maschinenbefehle des Mikroprozessors 6502 iiber die BASIC-Befehle POKE, CALL, PEEK im Apple abspeichern, ablaufen lassen und Ergebnisse in das BASIC-Programm zurticklesen. Grundkenntnisse in Basic sind erforderlich. Anschauliche Darstellung der 6502-Funktionen, der Speicher im Apple und der Wirkungen von Maschinenbefehlen — verbunden mit Experimentierprogrammen zur Grafik, Akustik, Arith- metik, Textdarstellung, Verbindung von Bild und Ton sowie zum Aufruf der zahlreichen, bereits vorhandenen Maschinenprogramme im Apple. Der Héhepunkt: Eine schrittweise Einfiihrung in die professionelle Entwicklung von Maschinenprogram- men mit APPLE SYSTEM-MONITOR und APPLE MINI ASSEMBLER. Von D. Inman/K. Inman, 224 Seiten, Softcover, DM 49,- te-wi Verlag GmbH Theo-Prosel-Weg I 8000 Miinchen 40 tai LOGO - Jeder kann programmieren (Daniel Watt) Buch des Jahres in den USA. Fir die Computer C64, ATARI, APPLE Il, IBM-PC und TE99, Hochwertiges Textbuch fir Logo-Kurse fiir zu Hause und im Lehrbereich. A4, DM 59. (4. Quartal 84) rs LOGo APPLE Il - Bewegte 3D-Graphik (Phil Cohen) Selbstentworfene Graphiken und Dia: gramme ~ animiert oder als Standbilder eben oder raumlich: alle erforderlichen BASIC Programme mit Erklarung finden Sie in diesem Buch, . 190 Seiten, Softcover, DM 49.- . Macintosh Programmier-Handbuch (David Lien) Macintosh ~ Pionier des graphischen Computerdialogs — benutzt MICROSOFT BASIC. D. Lien’s Buch ist eine souveraine, zuverlassige Einfhrung und Referenz zu Macintosh’s Basic. 450 Seiten, DM 59.— (4. Quartal 84) 77 BASIC-Programme, A4, DM 39, @ CP/M und Wordstar, DM 29,80. Wie man die Grafik verdoppelt Patt | Teil 1: Double Lores ett . lle = 64K-Karte [a8t sich auf vielfaltige | Weise einsetzen, z.B. als | Whe — 80-Zeichen-Bildschirm-Teilspeicher 8 — RAM-Diskspeicher a u — Teilspeicher fiir doppelte hochauflésen- de Grafik (Double Hires: 560 mal 192 statt 280 mal 192 Bildpunkte) — Teilspeicher flr doppelte niedrigauflé- sende Grafik (Double Lores: 80 mal 48 statt 40 mal 48 Kasten). Die erweiterte 80-Zeichenkarte des Apple Je tI hd 8 ha Zur Double Hires werden von Apple in den technischen Unterlagen nur vage Anga- Hi j ben gemacht, und die Méglichkeit von alt aus Sh, We Double Lores wird tiberhaupt nicht ange- " { deutet. Im ersten Teil dieser Folge wird auf a &; a i die Double Lores eingegangen, wahrend Senane sich der zweite Teil mit der Double Hires befaBt. Die Double Lores wird meines Wissens hier erstmals geschildert. Mangels techni- scher Informationen war es nicht einfach herauszufinden, ob sie Uberhaupt und, wenn ja, wie méglich ist, doch zeigte sich im nachhinein, da8 Double Lores nicht nur verbliiffend einfach ist, sondern auch in einem reinen Applesoft-Programm be- nutzt werden kann, da hier keine Ge- schwindigkeitsprobleme auftreten. (Um- gekehrt muB die Double Hires in Assem- bler geschrieben werden, da sonst die HPLOT-Funktion viel zu langsam ist.) Ulrich Stiehl | 32 1. Normale Lores-Grafik Bevor wir auf die Double Lores eingehen, seien die normalen Lores-Grafik-Befehle kurz wiederholt. Der Lores-Grafikbild- schirm ist speichermaBig mit dem 40-Zei- chen-Textbildschirm identisch. Wahrend der 40-Zeichen-Textbildschirm jedoch 24 Zeilen zu je 40 Zeichen umfaBt, kann bei dem Lores-Grafikbildschirm genau die doppelte Menge an Grafik-Kastchen ge- plottet werden. Dies riinrt daher, daB in jeder Bildschirmspeicherstelle anstelle e/- nes Buchstabens je zwei Kastchen unter- gebracht werden. Der Bildschirm nimmt den Speicherbereich $0400-$07FF ein ($0400 = dezimal 1024). Jedes Bytes die- ses Bereichs — mit Ausnahme sog. ver- steckter Bildschirmspeicherstellen — kann mithin zwei Kastchen aufnehmen. Es gilt also: Textbildschirm: 24 Zeilen zu je 40 Zeichen Loresbildschirm: 48 Zeilen zu je 40 Kast- chen Geteilter Loresbildschirm: 40 Zeilen zu je 40 Kastchen plus 4 Textzeilen am unteren Bildschirmrand. Experiment 1 Zu Testzwecken schalten wir mit dem Be- fehl GR auf Lores-Grafik um und gehen dann mit CALL -151 in den Monitor. Nunmehr geben wir 400:0F ein und sehen, daB ganz links oben (= Zeile 0, Spalte 0) ein Kastchen geplottet wurde. Geben wir jetzt 400:FO ein, wird ein Kastchen in derselben Spalte, aber statt in der ersten in der zweiten Zeile geplottet (= Zeile 1, Spalte 0). Geben wir abschlieBend 400:FF ein, dann wird sowohl das obere wie das untere Kastchen sichtbar. $FF ist 1 Byte und besteht aus 2 Halbbytes $F und $F. Da jedes Halbbyte einen Wert von $0-$F oder dezimal 0 bis 15 einnehmen kann, gibt es theoretisch 16 Farben von 0 (= schwarz) bis 15 (= weiB), die allerdings auf einem griinen Monitor nur als unter- schiedliche WeiB-Griin-Abstufungen sicht- bar werden. Wer liber einen Farbmonitor verfiigt, kann mit dem Befehl COLOR = F wobei F als Variablenwert im Bereich 0-15 liegt, die gewiinschte Farbe definieren, die dann fir alle nachfolgend geplotteten Kastchen gilt. Lores-Befehle Soviel zur Theorie des Lores-Bildschirm- speichers. Um die Plot-Befehle zu verste- hen, arbeite man am besten mit einem Koordinatensystem in der Art des abgebil- deten Diagramms 1. In Abweichung vom »normalen“ Koordinatensystem ist der Origo = Ursprung links oben statt links unten. Die X-Achse oder Abszisse kann Werte im Bereich 0-39 und die Y-Achse oder Ordinate Werte im Bereich 0-39 (bei geteiltem Bildschirm) oder 0-47 (bei vol- lem Bildschirm) einnehmen. Eine waag- rechte Linie von X1 bis X2 heiBt Zeile, und eine senkrechte Linie von Y1 bis Y2 heiBt Spalte. ir HLINE -—_—<—e xX % xX Diagramm 1 GR schaltet auf Lores-Grafik mit geteiltem Bildschirm und Farbe = 0 = schwarz um. Deshalb muB man danach mit COLOR = F, z.B. COLOR = 15 die gewiinschte Farbe festlegen. POKE -16302, 0 schaltet vom geteilten zum vollen Bild- schirm um. Danach kann man bei Bedarf mit CALL -1998 die unteren Zeilen des Lores-Bildschirms léschen ($F832 = -1998 = CLRSCR). TEXT hebt den Grafik-Modus wieder auf. PLOT X, Y, z.B. PLOT 39, 39 plottet ein Kastchen im Schnittpunkt von horizontaler X- und senkrechter Y-Achse. rr electronic Elektronik -Fachiiteratur Personsl-Computer Qualitats- Disketten 1.Wahl BASF-Disketten softsektoriert in Pappkarton 2:25-Disketen ate ‘one Aufprels mit Verstarkungsring, {-seitig, doppeite Dicht , -seltig, dappelte Dicht 2/96V...96 TPI, 2-seitig, doppelte Dich ‘Aufarels fOr 1Oer-Pack In Hart-PVC-Klappbox 3M/Scotch Sicherheits—Disketten 5,25'-Disketten mit Verstarkungsring; softsektoriert. 744-0 . 48 TPI, 1-seitig, doppelte Dichte —. 59,00 579,00 745-0 _ 48 TPI, 2-seitig, doppelte Dichte 92,50 887,00 746-0 96 TPI, I-seltig, doppelte Dichte — 62,50 775,00 747-0 _ 96 TPI, 2-seitig, doppelte Dichte 98,00 922,00 Wichtig fUr die sichene Funktion Ihrer Disketten-Lautwerke 7440 .... Kopf-Reinigungsset fur 5,25'-Lautwerke..... 49,50 * ~ Micro-Disketten usa una acinrose NEU ‘3,5°-Disketten 1-seltig, doppelte Dichte im Ser-Pack 74,50 Plastikbox fir 5,25" - Disketten Formschone Klappbox aus Hart-PVC fir ca 10 Disketten in den Farben grin, orange, schwarz, hellgrau, elfenbein oder anthrazit, Bitte dle gewinschte Farbe angeben. Mischbar. 1Stk..... 6.95 10 Stk ..... 59.50 100 Stk... 499.50 5,25°-Diskettenbox — Sehr preiswert! Reprasentat ve Disketten-Box aus deutscher Fertigung in den Abmessungen (T xB x #) 306x174x144 mm ohne Scho8 mit topas farbenem Deckel fr ca. 8 Disketten und 4 beschrift- baren Stutzplatten. | Stk ... 27.50 ab 10 Stk ... 24.75 ABA - Diskettentrége Kompakter Trog mit rauchfarbenem Deckel und SchioB. Das UntertetT ist platzsparend Im Deckel abste! bar. Je nach Grofe incl. 4 bzw, 9 beschriftbaren Statzpiatten. MBS .. Abm. 210x100x175mm Or 40 Disk.... 47,50 43,90 MBS... Adm. 310x100x175mm Ur 90 Disk. 69,50 65,40 40 _ Abm: 210x180x175mm fur 40 Disk. 69,50 65,40 F90__ Abm_ 350x180x175mm fOr 90 Disk. @9,50 85,90 @m@ || Datenkassetten Universal « 1.Wahl Geeignet far alle gangigen Home - Computer Bandmateriat: Etsenoxid Bendmaterial: Chromdioxid 51. 100'St. CIO-FE.15,95 74,80 142,50 C10-CR.17,95 85,00 162,50 C20-FE.16,95 79,50 152,50 C20-CR.19,50 92,00 175,50 C30-FE.18,65 87,50 167,50 C30-CR 22,25 105,00 199,50 Hochwertiges Band aus deutscher Fertigung. Jede CC in einer autklappbaren Schutzbox mit Je 2 Blanco-Aurkleber Je Box. Apple ~ Zubehor WEEREEDD) 80 Zeichen/64kB-RAM i ia fae | fir APPLE ve 290,— Z80B/64kB-Karte (CP/115.0,CBASIC 65x80). 1195,00 Original ALS incl. samtlicher Software. CP/M-PLUS-Manuals (CP/113.0) 75,00 Kompletter Satz bestehend aus: User's Guide, SID, System Guide, Programmer's Utilitles- und Programmer's Guide. ITOH/EPSON-Vollgrafikinterface mKabel .._ 250,00 Serlelles Interface fOr APPLE imagewriter 235,00 RS-252C - Karte (Serielle Schnittstelle) 175,00 7-80 Karte (ohne Software) Importkarte — 149,00 7-80 Karte (ohne Software) deutsche Herstellung 230,00 Disk-Controller (ohne Software) 4 Betrlebsarten 195,00 DISTAR- Lauf werk voll APPLE kompatibel hhalbspurfénig, Spur-0-Erkennung, 40 Spuren, 143 KB Einzeln getestel fur 00S, ProD0S, CP/M und PASCAL Original APPLE PASCAL-Manuals _ 75,00 (Satz=Language- und Operat ing System Reference Manual) Der aktuelle Hinweis: ‘SOFTWARE/HARDWARE - Gelegenheiten AIM/KIN/SYM/SUPERBOARO/NASCOM/SORCERER/APPLE Ua. Aktuelle Preisliste gegen Freiumschlag anfordern. Sofort ab Lager lieferbar: Macintosh, Apple Ile /lIc Unverbindliche Vorfiihrung und Beratung. 900 Heidelberg | Breslauerstr.29 Tel,06221/781500 Geschaftszetten: Mo. - Fr. 9-13 +14~ 18 Sa. 9-13 Une Versandanschrift: 6900 Heidelberg 1 Dammweg 7 fa 33 HLIN X1, X2 AT Y, z.B. HLIN 0, 39 AT 10 plottet einen Balken (= Kastchen-Zeile) vom linken X1-Wert bis zum rechten X2- Wert in der Zeile Y. VLIN Y1, Y2 AT X, z.B. VLIN 0, 47 AT 20 plottet einen Balken (= Kastchen-Spalte) vom oberen Y1-Wert bis zum unteren Y2- Wert in der Spalte X. F = SCRN (X, Y), z.B. F = SCRN (10, 20) ermittelt die Farbe oder Farbnummer (0- 15) im Schnittpunkt von X und Y. 2. 80-Zeichen-Textbildschirm Wie ist nunmehr doppelte Lores-Grafik méglich? Wir erinnern uns, da8 der Lores- Grafikbildschirm speichermaBig mit dem 40-Zeichen-Textbildschirm identisch ist. Schaltet man den Apple Ile mit PR#3. auf 80-Zeichendarstellung, dann umfaBt der 80-Zeichen-Textbildschirm 24 Zeilen zu je 80 Zeichen. Der Bildschirmspeicher selbst ist dann in 2 Halften unterteilt, nam- lich in a) den unteren Bereich $0400-$07FF auf dem 64K-Motherboard, und b) den oberen Bereich $0400-$07FF auf der 64K-Karte Die 80 Spalten oder Stellen einer 80 Zei- chen umfassenden Zeile werden von 0-79 numeriert, wobei zwischen den ungeraden und geraden Spalten unterschieden wird: 1, 3,5, ... 77, 79 ungerade = oben 0, 2, 4, ... 76, 78 gerade = unten Damit gibt es ,oben“ 40 ungerade und unten“ 40 gerade Spalten. Die 80-Zei- chen-Bildschirmroutinen funktionieren im Prinzip wie die entsprechenden 40-Zei- chen-Routinen: a) Zunachst wird ermittelt, ob die Spalten- zahl im Bereich 0-79 eine gerade oder eine ungerade Zahl ist. b) Dann wird durch einen Softswitch ent- weder die ,obere“ Halfte fiir die ungerade oder die ,,untere“

Showing the first 100000 of 237007 characters.

mp.ls