C64 Programmieren in Maschinensprache

Aus C64-Wiki
Wechseln zu: Navigation, Suche


C64 Programmieren in Maschinensprache
Cover/Buchdeckel
Sprache deutsch
Autor(en) Winfried Kassera, Frank Kassera
Verlag Markt&Technik Verlag AG
Jahr 1985
ISBN ISBN 3-89090-168-9
Neupreis DM 52,00.- SFR 47,80.- ÖS 405,60.-
Datenträger Icon disk525.png
Seitenzahl 327
letzte Auflage 1., unveränderte Auflage 1985
Genre Profi / Programmierung
Information




Vorwort[Bearbeiten]

Dieses Buch ist zunächst entstanden als Sammlung von Programmierschritten in ASSEMBLER, die sich bei der Lösung von Simulationsproblemen, Bildschirmgestaltung, Textverarbeitung usw. auf COMMODORE-Geräten ergeben hatten. Wir haben dann den Themenkreis erweitert und so gut wie alle Punkte erfaßt, die für Maschinenprogramme relevant sind.

Als Schwerpunkt hat sich dabei der Einsatz der betriebsinternen ROM-Routinen herauskristallisiert, der,die Erstellung von ASSEMBLER-Programmen wesentlich vereinfacht. Denn was es schon gibt, braucht man nicht noch einmal erfinden.

Wir sagen Ihnen aber nicht nur, wo die einzelnen Einsprungadressen liegen (das tun viele Veröffentlichungen), sondern erklären auch die Zusammenhänge anhand von sehr einfachen bis sehr anspruchsvollen Beispielen. Unser Prinzip heißt hier: Vom Einfachen zum Schweren. Und damit ergibt sich ein methodisch sinnvoller und für den Leser leicht nachvollziehbarer Aufbau.

Alle vorkommenden Routinen wurden mehrfach von Frank Kassera getestet und verbessert, der zu diesem Buch auch eine Diskette für den C64 mit allen beschriebenen Programmen zusammengestellt hat.

Trotz aller Sorgfalt und Mühe, die wir uns beim Schreiben, Testen und Korrigieren gegeben haben, ist es nicht ganz auszuschließen, daß sich in den Text der eine oder andere Tipp- oder Druckfehler eingeschlichen hat, der uns trotz mehrfacher Durchsicht entgangen ist. Wir versichern Ihnen aber, daß alle vorgestellten Programme einwandfrei laufen: Nicht ein einziges wurde nur so "auf Papier" entwickelt. Sollten Sie daher auf Unstimmigkeiten stoßen, dann könnte eventuell die Unbarmherzigkeit des Druckfehlerteufels dahinterstecken. Für einen entsprechenden Hinweis - vielleicht schon mit einem Verbesserungsvorschlag - wären wir Ihnen dankbar.

Inhaltsverzeichnis (gekürzt)[Bearbeiten]

1    Zur Programmierung in ASSEMBLER ............................ 13
1.1  Warum nicht bei BASIC bleiben? ............................. 15
1.2  Hinweise zum Gebrauch des Buches ........................... 17
1.3  Schreibweisen - Vereinbarungen ............................. 20

2    Bewegte Bildschirmobjekte .................................. 23
2.1  Ein Beispiel: "Wendezeigerpinsel", ein Richtungsanzeiger ... 25
2.2  Variieren des Moduls ....................................... 34
2.3  Abweichungen für die 40/80XX -Geräte ....................... 36
2.4  Erweiterungs- und Übungsaufgaben ........................... 37

3    Erweiterung der Interrupt-Routine - ein Beispiel ........... 39
3.1  Die IR-Routine ............................................. 41
3.2  Erzeugung eines Taktes mit der IR-Routine .................. 42
3.3  Wichtige Adressen des "04-taktmodul " ...................... 42
3.4  Ablauf von "04-taktmodul" .................................. 43
3.5  ASSEMBLER- Programm "04-taktmodul" ......................... 43
3.6  Abstimmung des Taktes ...................................... 44
3.7  Eine kleine Testroutine zur Bestimmung der Taktfrequenz .... 44
3.8  Einstellen des IRQ-Vektors ................................. 45

4    Zahlen, Variablen - Formate ................................ 49
4.1  Rechnen mit Ganzzahlen (Integer-Zahlen) .................... 51
4.2  Arbeiten mit reellen Zahlen ................................ 61
4.3  Zahlenumwandlungen ......................................... 65

5    Arithmetik mit ROM-Routinen ................................ 71
5.1  Durch 10 dividieren mit FDIV10 ............................. 74
5.2  Mit 10 multiplizieren ...................................... 75
5.3  Addieren des Werts 0.5 mit ADD0.5 .......................... 75
5.4  Addieren beliebiger Zahlen mit ADD ......................... 76
5.5  Addieren beliebiger Zahlen mit M-ADD ....................... 76
5.6  Subtrahieren mit M-SUB ..................................... 77
5.7  Vorzeichenwechsel mit FACMIN ............................... 78
5.8  Betrag einer Zahl mit FACABS ............................... 79
5.9  Multiplizieren mit M-MULT .................................. 79
5.10 Division mit M-DIV ......................................... 80
5.11 Kehrwert bilden mit M-DIV .................................. 80
5.12 Quadratwurzel ziehen mit SQRFAC ............................ 81
5.13 Potenzieren und Radizieren mit POTRAD ...................... 81
5.14 Logarithmieren mit LOGNAT .................................. 83
5.15 Exponentialrechnen mit EHOCHF .............................. 83
5.16 Erzeugen einer Zufallszahl mit ZUFALL ...................... 84
5.17 Winkelfunktionen mit SINUS, COSIN, TANG .................... 85
5.18 Umkehrung der Winkelfunktionen mit ARCTAN .................. 87
5.19 Weitere Arcusfunktionen mit ARCTAN ......................... 88
5.20 Polynomauswertung mit POLNOM ............................... 89
5.21 Wertetabellen für Funktionen mit POLNOM .................... 91
5.22 Vergleichsoperationen mit CMPFAC ........................... 94
5.23 Vorzeichenprüfung mit SGNFAC ............................... 96

6    Bildschirmoperationen ...................................... 101
6.1  Ausgabe einer Integer Zahl mit INTOUT ...................... 103
6.2  Ausgabe einer reellen Zahl mit FLPOUT ...................... 103
6.3  Ausgabe eines ASCII-Zeichens mit CHROUT (BSOUT ) ........... 104
6.4  Vorbereitete Zeichenausgaben ............................... 105
6.5  Cursorposition festlegen ................................... 105
6.6  Ausgabe eines Strings mit STROUT ........ ....... .......... 109
6.7  Umwandlung des FAC-Inhalts in einen String mit FACSTR ...... 109
6.8  Anwendung: eine PRINT USING-Routine ........................ 111
6.9  Ausgabe von Hexzahlen ...................................... 123
6.10 Bewegungssimulation - eine Kompaßanzeige ................... 124

7    Eingabe-ROM-Routinen ....................................... 135
7.1  Eingabe eines Zeichens über die Tastatur mit GETIN ......... 137
7.2  Künstlicher Cursor mit GETIN und CHROUT .................... 138
7.3  Zahleneingabe (reell) mit GETIN und STRFAC ................. 141
7.4  Eingabe mit BASIN .......................................... 143
7.5  Eingabe einer Zeile mit INLINE ............................. 145
7.6  Eingabe von Hexzahlen mit HEXINB und HEXINA ................ 148

8    Verwaltung der Variablen ................................... 151
8.1  Überblick über die BASIC-Variablen ......................... 153
8.2  Einrichten einer Variable .................................. 153

9    Variablen-Arten ............................................ 154
9.1  Struktur der Variablen ..................................... 154
9.2  Einrichten einer Variablen ................................. 154
9.3  Vereinfachungen zur Dateibehandlung ........................ 173
9.4  Behandlung von Dateien - Beispiele ......................... 174
9.5  Arbeiten mit SEQ-Dateien ................................... 175
9.6  REL-Dateien - Schreiben/ Lesen mit OUTBUS/ INBUS ........... 181
9.7  Laden eines Programmes mit LOAD und LOADXX ................. 196
9.8  Anwendung: Modul zum Nachladen von Programmen .............. 197
9.9  Modul "84-quickdirector" mit TALK, INBUS, UNTALK ........... 202
9.10 Modul "85-printdirector" ( Floppy-Drucker) ................. 208
9.11 Direktzugriffe auf Floppy: Modul "86-fastdisk " ............ 216

10    Maschinenmodu1e in BASIC-Programmen ....................... 223
10.1  Übernahme von BASIC-Parametern ............................ 225
10.2  Zeichen aus dem BASIC-Text holen mit CHRGET und CHRGOT .... 226
10.3  Byte- Auswertung mit GETBYT und VALBYT .................... 228
10.4  Eine Anwendung: PRINT AT - Routine mit Fehlermeldung ...... 233
10.5  Zu den Fehlermeldungen .................................... 235
10.6  Zur Schreibweise der BASIC-Befehle ........................ 236
10.7  Auswertung mit VAREAL ..................................... 238
10.8  Auswertung mit VALKLA ..................................... 239
10.9  Auswertung von Integerzahlen mit VALINT und INTADR ........ 239
10.10 Auswertung mit VALPAR, VALSTR, PARFLG und TYPFLG .......... 241
10.11 Übernahme einer BASIC-Variablen mit GETVAR ................ 243
10.12 Ein vielseitiges Modul: "98-onstring" ..................... 244
10.13 "99- onstring" für 40/8oXX- Geräte ........................ 250
10.14 Verknüpfen von Modulen - zwei Anwendungen ................. 254
10.15 Modulverknüpfung mit einer Sprung leiste .................. 258

11    Diverse ROM-Hilfen-Anwendungen ............................ 265
11.1  BASIC-Start vom Maschinenprogramm aus mit RUN ............. 267
11.2  Warmstart mit MGOTO ab einer bestimmten Zeilennummer ...... 267
11.3  Startadresse einer BASIC-Zeile suchen mit BLINAD .......... 270
11.4  Umschalten von Text- auf Graphikmodus ..................... 270
11.5  Abfrage der STOP-Taste mit STOPRY und STOPO ............... 272
11.6  Sprung in den READY-Modus mit MREADY ...................... 272
11.7  Verschieben von RAM - Bereichen mit TRABLO ................ 272
11.8  Abspeichern eines Datenbereichs mit MSAVE ................. 274
11.9  Laden eines Programms mit veränderter Startadresse ........ 275
11.10 Speichern eines Datenblocks mit variabler Anfangsadresse .. 279

12    ASSEMBLER-Kurzschule ...................................... 283
12.1  Die Register des 65XX-Prozessors .......................... 285
12.2  Das Prozessor Statusregister P ............................ 285
12.3  Beeinflussung der Flags durch Befehle ..................... 285
12.4  Der Befehlssatz in ASSEMBLER .............................. 286

13 ROM-Routinen - thematisch, mit Kurzbeschreibung .............. 297
14 ROM-Routinen - alphabetisch .................................. 313
15 Wichtige Adressen - alphabetisch ............................. 319
16 Stichwortverzeichnis ......................................... 325
17 Übersicht weiterer Markt&Technik-Bücher ...................... 328

Leseprobe[Bearbeiten]

Seite 83, (5.14 Logarithmieren mit LOGNAT)

Alle Logarithmen beziehen sich hier auf die Basis e. Wir rechnen also mit dem Logarithmus naturalis.

Vorbedingung

Der Numerus kann erzeugt werden oder im RAM oder ROM stehen.

Ablauf
01 Erzeugen der Zahl 1000 im FAC1
02 Aufruf von LOGNAT
03 Ablegen von In(1000) ab (16515)
...
ASSEMBLER-Beispiel "34-log nat" (C64)
01 lda #3
   ldy #232   ; Zahl 1000 nach
   jsr 45969  ; FAC1 mit INTFLP
02 jsr 47594  ; LOGNAT bildet Logarithmus von 1000 
03 ldx #131
   ldy #64    ; ab (16515)
   jsr 48087  ; mit FACMEM das Eregebnis ablegen
04 jsr 43708
   rts        ; Bildschirmausgabe mit FLPOUT : 6.90775528 

Meinung[Bearbeiten]

Werner: "Die Lesbarkeit der Assembler-Listings leidet enorm unter der dezimale Schreibweise. Diese schwere Kost ist, wenn überhaupt, nur für Profis zu empfehlen."

Bamse: "Die Autoren beginnen das Buch mit einer glatten Fehlentscheidung: Dezimal statt Hexadezimal. Dadurch werden u.a. die Lo/Hi-Byte Übergaben (gerade für Anfänger) unnötig kompliziert / wenig nachvollziehbar. Dazu wirkt das ganze Buch sehr trocken & mathematisch, und dient wohl höchstens dem Profi als Nachschlagewerk für mathematische Formeln (vielmehr steht eh nicht drin). Obwohl das Buch wie ein Schulbuch wirkt schult es leider überhaupt nicht. Fazit: Nicht zu empfehlen - stattdessen den Buchtitel mal googlen und über die Initiative zum ´Zurück-an-den-Autor-senden´ lachen..."

Weblinks[Bearbeiten]