Assembler Subroutinen fürs AtariWiki

Moderator: Rockford

Benutzeravatar
LarsImNetz
Beiträge: 216
Registriert: 24.08.2021 18:27
Has thanked: 201 times
Been thanked: 112 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von LarsImNetz »

Dr. Irata hat geschrieben:
05.01.2024 13:23
... erste kleine Subroutine ist drin - bitte mal testen !

--> Mathe / Betrag
Top!
Aber!
Um das jetzt gleich mal zur Diskussion zu stellen, ich würde es etwas ausführlicher machen.

1. Ruhig etwas mehr Prosa
2. Gerne ab und zu die "Enter/Return" Taste, damit Werte leichter verständlich sind. Ich mag es nicht und finde es schrecklich, wenn in einer Zeile bla und blub und foo und bar stehen.
3. Gerne darf auch ein Beispiel in Basic folgen.
4. Desweiteren sollten wir uns angewöhnen den Wertebereich mit anzugeben. Gerade bei 16 Bit kommt gerne mal verwirrender Code dabei heraus.
5. In Assembler sollte eine Sprungmarke immer eine eigene Zeile bekommen, sonst zerreißt es den Code gerne mal.
6. Assembler-Code sollte immer mit einem Namen für die "Funktion" anfangen.
7. Bitte gerne auch Kommentare, warum es einen Sprung gibt (hier hinter bcs) oder.


Meine Idee(n) würden also so aussehen:

------------------- snip ----------------------
Betrag bestimmen bei Subtraktion:

mathematisch:
Beispiel:
c = |a-b|
also bei
a=10 und b=6 => c=4
und bei
a=6 und b=10 => c=4

In Basic:
c = abs(a-b)

In Assembler:
Der Wertebereich ist hier nur 8Bit also 0-255

Code: Alles auswählen

betrag
	sec
	lda a
	sbc b
	bcs weiter  ; (a >= b) --> weiter
	sbc #0
	eor #$ff    ; Zahl nochmal negieren
weiter
	sta c

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

Hallo Lars,
für Wünsche, Korrekturen und Verbesserungen bin ich immer sehr empfänglich.
Ich werde das berücksichtigen und wir werden mit der Zeit da auch ein einheitlicheres Schriftbild entwickeln.
Basic Beispiele finde ich durchaus gut, sie sollten aber nicht zu lang sein.
Auch wenn es vielleicht nicht jedem gefällt, aber ich möchte die Subroutinen so machen, daß sie direkt in den MADS-Crossassembler passen. Es wird einen eigenen Unterpunkt für MADS und auch Eclipse geben, wo man spezielle Dinge genau erklärt.
Liebe Grüße
Peter

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

... 2 erste Beiträge sind drin, wobei ich Beitrag 2 noch überarbeiten muss ...

Den Beitrag für "betrag" habe ich angepasst. Dabei bin ich mir noch nicht so ganz sicher, wie die Systematik wird.
Es sollen ja primär Subroutinen für Assembler sein als Nachschlagwerk, wo man einfach Routinen, die man braucht findet und in sein Programm einbinden kann. Da viele in MADS entwickeln kann das schon auch MADS - spezifisch sein, wobei ich aber durchaus komplexere Eigenheiten raushalten will, so daß jeder den Code problemlos verstehen kann.

Die Subroutinen kommen direkt nach ganz oben, die Erklärungen und auch mögliche Basic-Beispiele folgen weiter unten. Das hat den Vorteil, daß man die nötigen Routinen direkt hat und für sich kopieren kann.
Wer nachlesen will, bekommt das ja darunter erklärt.

Wir fangen erstmal so an und werden sicherlich noch einiges anpassen und verändern mit der Zeit!

Es fehlt dann noch der Link von ABBUC auf das Wiki...

Benutzeravatar
pps
Beiträge: 764
Registriert: 18.06.2021 23:05
Has thanked: 189 times
Been thanked: 371 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von pps »

Wie machen wir das nun? Alles an @Dr.Irata schicken oder ein Konto im wiki aufmachen, selbst eintragen und Peter schaut dann drüber, ob es so passt?
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
skr
Beiträge: 267
Registriert: 07.06.2021 00:25
Wohnort: Seeshaupt, Germany
Has thanked: 157 times
Been thanked: 144 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von skr »

LarsImNetz hat geschrieben:
05.01.2024 15:59
Top!
Aber!
Um das jetzt gleich mal zur Diskussion zu stellen, ich würde es etwas ausführlicher machen.
Volle Zustimmung von meiner Seite! Sonst haben wir nachher nur eine tolle Sammlung von Code, die vielen nicht wirklich hilft, weil einfach zuviel Kontext fehlt.

Der Eintrag "Addition" gefällt mir da schon sehr gut.
/|\ ...*** loading *** .... /|\

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

... das wird sich alles entwickeln ... mehr Erklärungen und Text finde ich auch richtig und wichtig.
Artikel gerne erstmal zu mir, damit ich das sichten und ordnen kann...

Erhard
Beiträge: 1009
Registriert: 04.11.2021 15:52
Has thanked: 121 times
Been thanked: 306 times
Kontaktdaten:

Assembler Subroutinen fürs AtariWiki

Beitrag von Erhard »

Hi,

wenn ich im Bereich SIO mitarbeiten soll würde ich mir eine Umbenennung des Hauptpunktes wünschen, da ich auch SIO-Kommandos von weiteren Peripheriegeräten aufführen würde.

Dann sollte der Punkt vielleicht einfach Atari SIO heißen und die ersten Unterpunkte, die mir so einfallen würden wären "_Standardkommandos für Disk", Atari 810, Atari 1050, Happy 1050, Speedy 1050, PERCOM Block, APE, SIO2USB usw alphabetisch sortiert.

Cheers, Erhard
Wenn man sein Alter hexadezimal angibt kann man gleich wieder Bäume ausreißen :-)

Erhard
Beiträge: 1009
Registriert: 04.11.2021 15:52
Has thanked: 121 times
Been thanked: 306 times
Kontaktdaten:

Assembler Subroutinen fürs AtariWiki

Beitrag von Erhard »

Hi,

mir fällt gerade ein, daß es sich anbieten könnte, noch eine Schicht (Geräteklasse <=> ID) dazwischenzuschieben.

Das sähe dann wie folgt aus (zu erweiterndes Beispiel):
Struktur.png
Struktur.png (6.01 KiB) 15918 mal betrachtet
CU, Erhard
Wenn man sein Alter hexadezimal angibt kann man gleich wieder Bäume ausreißen :-)

Benutzeravatar
cas
Beiträge: 1089
Registriert: 18.06.2021 21:01
Wohnort: Solar System
Has thanked: 293 times
Been thanked: 689 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von cas »

Sachen die man nicht braucht: im Webserver des Atari Wiki hat eine Festplatte den Geist aufgegeben, das Wiki läuft derzeit nur auf einer Platte (ohne Redundanz). Neue Platte(n) sind bestellt.

Erhard
Beiträge: 1009
Registriert: 04.11.2021 15:52
Has thanked: 121 times
Been thanked: 306 times
Kontaktdaten:

Assembler Subroutinen fürs AtariWiki

Beitrag von Erhard »

cas hat geschrieben:
07.01.2024 15:30
das Wiki läuft derzeit nur auf einer Platte (ohne Redundanz)
der typische Zeitpunkt, wo man sicher sein sollte, daß man eine vollständige und rücksicherbare Datensicherung hat :-)

CU, Erhard
Wenn man sein Alter hexadezimal angibt kann man gleich wieder Bäume ausreißen :-)

Benutzeravatar
cas
Beiträge: 1089
Registriert: 18.06.2021 21:01
Wohnort: Solar System
Has thanked: 293 times
Been thanked: 689 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von cas »

Ja, das Backup teste ich gerade :)

Trotz RAID10 (Mirror) hat eine MySQL Datenbank Schaden genommen. Diese spiele ich gerade zurück. Das Backup-Set des für diese DB ist 711 GB gross, und der Restore dauert ~3 Stunden (von Festplatte).

Backup läuft aber nur alle 24 Stunden, daher ist es gut trotzdem ein RAID 10 zu haben.

Benutzeravatar
skr
Beiträge: 267
Registriert: 07.06.2021 00:25
Wohnort: Seeshaupt, Germany
Has thanked: 157 times
Been thanked: 144 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von skr »

Ja, Dinge die man nicht braucht. Ich starte jetzt gleich auf Arbeit ein BackUp und Transfer von 600TB. Was soll schon schiefegehen, sind ja nur drei Gewerke parallel am Start. :D
/|\ ...*** loading *** .... /|\

Benutzeravatar
DjayBee
Beiträge: 1040
Registriert: 17.08.2021 04:02
Has thanked: 743 times
Been thanked: 359 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von DjayBee »

skr hat geschrieben:
07.01.2024 19:45
Ja, Dinge die man nicht braucht. Ich starte jetzt gleich auf Arbeit ein BackUp und Transfer von 600TB. Was soll schon schiefegehen, sind ja nur drei Gewerke parallel am Start. :D
Und wo liegt das Problem wenn bei 600TB ein paar GB fehlen? A bisserl Schwund is immer. :lol:

Stefan
Beiträge: 104
Registriert: 11.09.2021 16:38
Has thanked: 135 times
Been thanked: 82 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Stefan »

cas hat geschrieben:
07.01.2024 15:30
Sachen die man nicht braucht: im Webserver des Atari Wiki hat eine Festplatte den Geist aufgegeben, das Wiki läuft derzeit nur auf einer Platte (ohne Redundanz). Neue Platte(n) sind bestellt.
Dann war das Wiki deshalb nicht erreichbar :shock: und ich habe hier bei mir Fehler gesucht :roll:
Das Retrocomputertreffen in Göttingen
:arrow: https://www.bitte-8-bit.de

Benutzeravatar
skr
Beiträge: 267
Registriert: 07.06.2021 00:25
Wohnort: Seeshaupt, Germany
Has thanked: 157 times
Been thanked: 144 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von skr »

DjayBee hat geschrieben:
07.01.2024 19:58
Und wo liegt das Problem wenn bei 600TB ein paar GB fehlen? A bisserl Schwund is immer. :lol:
Dreh halt mal ein Bit in Deiner Software und frag nochmal. :mrgreen:
/|\ ...*** loading *** .... /|\

Erhard
Beiträge: 1009
Registriert: 04.11.2021 15:52
Has thanked: 121 times
Been thanked: 306 times
Kontaktdaten:

Assembler Subroutinen fürs AtariWiki

Beitrag von Erhard »

Hi,

DjayBee hat geschrieben:
07.01.2024 19:58
ein paar GB fehlen
Du kannst die "paar Gigabyte" ja gerne mit der Hand mal abschreiben :-)

CU, Erhard
Wenn man sein Alter hexadezimal angibt kann man gleich wieder Bäume ausreißen :-)

Benutzeravatar
Mathy
Beiträge: 1754
Registriert: 18.06.2021 11:13
Wohnort: Heerlen, NL
Has thanked: 846 times
Been thanked: 481 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Mathy »

.
Hallo Erhard

Wieso abschreiben, das geht doch mit dem TurboFreezer, oder?

:mrgreen:

Tschüß

Mathy
Schreibe nicht der Absicht zu, was man mit Dummheit oder Ignoranz erklären kann.

Benutzeravatar
cas
Beiträge: 1089
Registriert: 18.06.2021 21:01
Wohnort: Solar System
Has thanked: 293 times
Been thanked: 689 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von cas »

Die neue Platte ist eingebaut, in den kommenden Stunden wird das RAID die Daten auf die neue Platte kopieren, der Server ist in dieser Zeit ein wenig langsamer.

Benutzeravatar
CharlieChaplin
Beiträge: 971
Registriert: 18.06.2021 22:59
Has thanked: 290 times
Been thanked: 331 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von CharlieChaplin »

Erhard hat geschrieben:
09.01.2024 16:28
Hi,

DjayBee hat geschrieben:
07.01.2024 19:58
ein paar GB fehlen
Du kannst die "paar Gigabyte" ja gerne mit der Hand mal abschreiben :-)

CU, Erhard
Zur Strafe: Abtippen mit AMPEL ! :mrgreen:

Benutzeravatar
cas
Beiträge: 1089
Registriert: 18.06.2021 21:01
Wohnort: Solar System
Has thanked: 293 times
Been thanked: 689 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von cas »

Die Internetanbindung im Rechenzentrum ist ausgefallen ... daher gibt es derzeit keinen Zugriff auf das Atari Entwickler Wiki.

Die Störung sollte bald behoben sein.

Carsten

Benutzeravatar
JAC!
Beiträge: 177
Registriert: 18.06.2021 23:13
Has thanked: 134 times
Been thanked: 177 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von JAC! »

Neuer Wikispace für das Thema und auf Deutsch klingt nach einer guten Idee. D.h. User dafür wäre erst mal separat, korrekt?
Ich mache beruflich fast alles mit (Confuence) Wiki und mein Tipp wäre, die Navigation links primär alphabethisch zu sortieren (ggfs. mit "Übersicht/Einführung") als TOP je Kapitel.
Visit https://www.wudsn.com the home of WUDSN IDE.

Benutzeravatar
LarsImNetz
Beiträge: 216
Registriert: 24.08.2021 18:27
Has thanked: 201 times
Been thanked: 112 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von LarsImNetz »

Bin gerade über ein Stückchen ASM-Code gestolpert, wo ich überlegen musste, was das macht.

Code: Alles auswählen

; Irgend ein Wert in den Akku laden...
        lda Value

; Wert, auf den wir vergleichen wollen, hier $FF
        cmp #$ff ; sollte der Value $ff enthalten, ist das Status Register ......ZC 

; Hier der besagte Code, die Kommentare hab ich mal drangepinselt, fürs Verständnis.
        php      ; Status Register auf Stack sichern
        pla      ; Status Register vom Stack in Akku auslesen
        lsr      ; ......ZC -> .......Z
        and #1   ; 1. Bit maskieren
        
; liefert 1 im Akku, wenn Value == $FF oder 0 wenn Value != $FF und das in nur 5 Bytes.

Erhard
Beiträge: 1009
Registriert: 04.11.2021 15:52
Has thanked: 121 times
Been thanked: 306 times
Kontaktdaten:

Assembler Subroutinen fürs AtariWiki

Beitrag von Erhard »

Hi,

von _tricksigem_ Assembler hab ich ja keine Ahnung ... aber doch vielleicht ein Gedanke:

Bei einem Vergleich folgt ja üblicherweise eine Verzweigung mit BNE/BEQ usw

Hier könnte man mit dem Ergebnis des Vergleichs aber rechnen oder das Bit speichern und das ohne unterschiedliche Anzahl von Taktzyklen bei Verzweigung oder Nicht-Verzweigung...

CU, Erhard
Wenn man sein Alter hexadezimal angibt kann man gleich wieder Bäume ausreißen :-)

yMoreT8
Beiträge: 43
Registriert: 18.03.2024 17:33
Has thanked: 7 times
Been thanked: 2 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von yMoreT8 »

LarsImNetz hat geschrieben:
19.03.2024 16:17
Bin gerade über ein Stückchen ASM-Code gestolpert, wo ich überlegen musste, was das macht.
Ich würde Deinen Ausführungen so zustimmen, auch wenn ich rätsele was man mit dem Ergebnis machen sollte? Einen Wert in einem Register zu haben hat ja noch keine Funktion. Wird dann danach mit dem Wert gerechnet oder konditionell verzweigt (Branch)? Dann könnte man doch direkt eine CMP+BNE/BEQ ausführen?

Benutzeravatar
JAC!
Beiträge: 177
Registriert: 18.06.2021 23:13
Has thanked: 134 times
Been thanked: 177 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von JAC! »

Bei bestimmten Timing-kritischen Routine kommt es auf jede Takt an oder halt darauf, es man immer genau gleich viele Takte braucht. Das gilt bei Highspeed SIO/Interrupt-Routinen oder beim "Racing the Beam" auf dem Atari VCS. Dort muss man in jeder Bildschirmzeile taktgenau die TIA Register updaten. Sonst ruckelt/flackert es Und BNE usw. brauch nun mal unterschiedlich viele Takt je nach "springen/kein springen".

In "normalen" Assemblerroutine kommt es nicht auf 1-2 Takte an und man würde das einfacher codieren.
Visit https://www.wudsn.com the home of WUDSN IDE.

Benutzeravatar
DjayBee
Beiträge: 1040
Registriert: 17.08.2021 04:02
Has thanked: 743 times
Been thanked: 359 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von DjayBee »

Mir wurde gerade folgender Link zugespielt mit drei sehr schnellen 8 Bit*8 Bit=16 Bit Multiplikationsroutinen (90 bzw. 110-150 Zyklen) - für den Preis von 512 bzw. 768 Byte Lookup-Tabellen.

https://everything2.com/title/Fast+6502+multiplication

Das könnte etwas für unser Code-Repo im Wiki sein.

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

Hallo DjayBee,

danke für den Link, den ich mir gerade angeschaut habe.
Ich finde den Code und die Erklärung zunächst etwas unübersichtlich.
Im Grunde macht dieser Code folgendes:
Das reine Quadrieren erfolgt ausschließlich über Tabellen, denn logischerweise gibt es für das Quadrat einer 8 Bit-Zahl genau 256 Lösungen. Jede Lösung wird entsprechend in zwei Tabellen (Hi-/Lo-Byte) codiert und muss nur abgefragt werden. Ich nehme also die 8 Bit Zahl, frage die 2 Tabellen ab und habe sofort das Ergebnis als 16-Bit-Zahl. Für die Multiplakation von a*x muss ich das also insgesamt 3* durchfürhren nach der Formal: ax = (a + x)2/2 - a2/2 + x2/2
Vorher noch a+x bilden, dann alle drei Quadrate durch 2 teilen (was ja super schnell gent) und dann den Summanden bilden.
Die Idee ist so einfach wie gut...

LG
Peter

Benutzeravatar
Mathy
Beiträge: 1754
Registriert: 18.06.2021 11:13
Wohnort: Heerlen, NL
Has thanked: 846 times
Been thanked: 481 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Mathy »

.
Hallo Peter

Dr. Irata hat geschrieben:
05.01.2025 16:31
ax = (a + x)2/2 - a2/2 + x2/2
Sieht etwas komisch aus. Du meist (a2 + x2)/2 - a2/2 + x2/2?

Tschüß

Mathy

Kurzer Test: a² a₂ Funktioniert bei mir. Aber ob das Forum die hergibt...
Schreibe nicht der Absicht zu, was man mit Dummheit oder Ignoranz erklären kann.

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

Hallo Mathy,
sorry aber das "Hochzeichen" wurde leider beim kopieren verschluckt...
Es muss so heißen: ax = (a + x)²/2 - a²/2 + x²/2
Danke für den Hinweis
Peter

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

... ich habe mir nochmal die schnelle Multiplikationsroutine angeschaut und da ist mir etwas aufgefallen:
Der Term (a + x)²/2 ist ja insofern blöd, da das Quadrat von einer sehr hohen 8-Bit-Zahl maximal 16 Bit groß sein kann, das Quadrat der Summe von 2 hohen 8-B it-Zahlen aber auch durchaus über 16 Bit groß sein kann!
Beispiel: a=255, x=254 -> ax=64770 aber a+x in diesem Beispiel beträgt 509, 509²=259081 -> 32 Bit
Die Tabelle um das Ergebnis (a+x)² zu bekommen muss also entsprechend sehr groß sein!
Das geht besser und kürtzer!
Ich werde das Thema und den Code jetzt als nächstes in einem Extrapost herleiten und entwickeln!

LG
Peter

Benutzeravatar
LarsImNetz
Beiträge: 216
Registriert: 24.08.2021 18:27
Has thanked: 201 times
Been thanked: 112 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von LarsImNetz »

DjayBee hat geschrieben:
04.01.2025 21:34
Mir wurde gerade folgender Link zugespielt mit drei sehr schnellen 8 Bit*8 Bit=16 Bit Multiplikationsroutinen [...]
So so, 3 ...

Hier, der Hammer! Multiplikationen bis der Arzt kommt, nebst Analysen, etc.

https://github.com/TobyLobster/multiply_test

Benutzeravatar
mega-hz
Beiträge: 1369
Registriert: 03.11.2021 11:23
Has thanked: 392 times
Been thanked: 467 times

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von mega-hz »

Wow!
Da habt ihr ja was richtig tolles auf die Beine gestellt!
Habs jetzt erst endeckt...
Wirklich super geworden!
keine PN's mehr! Bitte per email kontaktieren! atari1450xld©mega-hz.de

Erhard
Beiträge: 1009
Registriert: 04.11.2021 15:52
Has thanked: 121 times
Been thanked: 306 times
Kontaktdaten:

Assembler Subroutinen fürs AtariWiki

Beitrag von Erhard »

Hi,

in der Schule war ich in Mathe gar nicht mal so schlecht und hab alles mitgeschnitten, einschließlich Integral- und Differenzialrechnung sowie Determinanten.

Aber hier verstehe ich absolut nix. Abgesehen von unendlich vielen Additionen in Scheifen wüßre ich überhaupt nicht, wie ich da auf dem Rechner rangehen würde.

Mein erster Versuch für a * b würde wie folgt aussehen (wobei a und b natürlich auch noch in Speicherstellen sein müssen):

LDA #0
STA $D1
LDA b
STA $D0
LDY a
; Schleife ab hier
L1 CLC
LDA a
ADC $D0
ADC $D1
DEY
BNE L1
RTS

Wie man auf sowas hier kommen kann ...

Dr. Irata hat geschrieben:
06.01.2025 09:05
Es muss so heißen: ax = (a + x)²/2 - a²/2 + x²/2
erschließt sich mir überhaupt nicht.

Nachvollziehen kann ich noch nicht einmal das mit der 768-Byte Tabelle, denn für a=255 und b=255 ergibt das Quadrat der Summe 260100. In Hex 0x3F804, also eine 24-Bit Zahl.

Sprich wir haben einen Zeiger von 0...510 mit je einem 24-Bit Ergebnis.

Nun braucht man für Zeigerbereiche bis 255 nur 16-Bit Ergebnisse und könnte demzufolge die Tabelle verkleinern, was dann aber zusätzliche Berechnungen und / oder Vergleiche erfordert.

Das erfordert doch dann für obige Formel:

Für den ersten Term ein 3-Byte LSR sowie für die beiden anderen Terme ein 2-Byte LSR (ein Bit ganz rechts bleibt da ja wohl nicht übrig da Quadrate ja nie ein ungerades Ergebnis produzieren).

Gefolgt von 24-Bit Subtraktion und 24-Bit Addition.

Falls ich das so überhaupt richtig sehe. Aber wie zur Hölle kommt man auf so eine Formel ?

Das V-Flag meines Brains hat soeben den Wert 1 erhalten.

Erhard
Wenn man sein Alter hexadezimal angibt kann man gleich wieder Bäume ausreißen :-)

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

Hallo und guten Morgen!
Danke, daß du das Thema hier nochmal aufführst.
Die Formel ist falsch... es muss heißen: a x b = a²/2 + b²/2 - (a-b)²/2
Damit entfällt zum Glück auch die Problematik über 16-Bit!

Alternativ aber ungünstiger:

a x b = (a+b)²/2 - a²/2 - b²/2

FlorianD
Beiträge: 379
Registriert: 19.08.2021 00:18
Has thanked: 74 times
Been thanked: 150 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von FlorianD »

der guten Form halber: könnte ein Admin die Formeln in den obigen Beiträgen korrigieren, so dass sie überall richtig dargestellt werden?

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

... wäre das mit Erklärung und Herleitung ein Artikel im Magazin wert??

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Assembler Subroutinen fürs AtariWiki

Beitrag von Dr. Irata »

FlorianD hat geschrieben:
16.02.2025 10:51
der guten Form halber: könnte ein Admin die Formeln in den obigen Beiträgen korrigieren, so dass sie überall richtig dargestellt werden?
Es gibt ja einen eigenen Beitrag dafür mit Code.... da müsste alles auch richtig sein!


Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast