Autor Thema: Firebee-Coldfire Assembler Coding  (Gelesen 21631 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Firebee-Coldfire Assembler Coding
« am: Fr 12.12.2014, 18:27:10 »
Hallo!
Ich mach mal hier ein Thread für´s Coldfire Assembler Coding auf, da es doch einige Unterschiede zu 68k-Assembler gibt.

Da ich parallel mit dem Assembler Coding unter 68k gerade angefangen habe, möchte ich natürlich die Gelegenheit nutzen und den selben Beispiel-Test-Code auch unter der Firebee laufen lassen, doch da erscheint schon die erste Hürde:

Adressierungsart - Absolut lang mit dem move-Befehl
 
da geht folgendes nicht:

move.w   #$700,$ffff8240      red background color

VASM meint dazu dazu "illegal Kombination of Coldfire Adresse modes"

Was ist dazu dann die Alternative?

Und für weitere Hinweise für Alternativ-Befehle für CF wäre ich dankbar, evtl. gibt es eine Übersicht.

Auf http://www.microapl.co.uk/Porting/ColdFire/ findet sich ja einige Infos, leider aber keine GENAUE  Aufstellung; auch das CF68Lib PDF gibt darüber kein Aufschluss.

Hat da evtl. jemand schon so eine Umsetzungtabelle/arbeit gemacht, dann wäre es sehr nett, wenn er diese hier allen zukommen lassen könnte!

Danke!

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #1 am: Fr 12.12.2014, 19:44:25 »
Eine Translation-Tabelle habe ich noch nicht gefunden, aber auf der PortAsm-Seite gibt es ein Translator, leider nur für Win, Linux oder Solaris, aber nicht Mac; so musste Parallels herhalten.

pacf (so der Programmname) macht ja einige Merkwürdigkeiten die VSAM nicht verträgt, aber für die gesuchte Umsetzung reicht das Programm.

Aus:
move.w   #$700,$ffff8240      red background color

Wird unter CF wie folgt umgeschrieben werden:
   move.l    #$700,d0
   move.w    d0,0$ffff8240

Der Translator bietet an:
   move.l    #0x700,d0
   move.w    d0,0xffff8240

aber diese Syntax mag VSAM nicht!

Interessant auch, das der Translator aus
old_stack       dc.l    0
folgendes machen möchte:
old_stack:
   .long   0
Das habe ich zunächst mal ignoriert!

Das kleine Tos File hat unter der Biene keine Fehler geworfen, aber leider das Terminalfenster nicht Rot gemacht, wie den Desktop unter den alten Atari´s. Evtl. hat das Background Register keine Wirkung unter der Biene!

Bin immer noch an Erfahrungshinweise dankbar!

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: Firebee-Coldfire Assembler Coding
« Antwort #2 am: Fr 12.12.2014, 20:18:02 »
$ffff8240 ist eine Hardwareadresse? Ich glaube, diese wirst du auf der Biene nicht finden. Das sagt mir jedenfalls erstmal mein Bauchgefühl...
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #3 am: Fr 12.12.2014, 20:41:06 »
$ffff8240 ist eine Hardwareadresse? Ich glaube, diese wirst du auf der Biene nicht finden. Das sagt mir jedenfalls erstmal mein Bauchgefühl...

Natürlich eine Hardware-Adresse, Auszug aus der Atari ST Hardware Register Listing für Atari ST/E, TT und Falcon.

$FF8240|word |Video palette register 0 Lowercase = LSB|R/W

Und da die Firebee im Prinzip ein Falcon ist, nur mit einer anderen CPU, sollte das schon gehen.
Oder wie glaubst du läuft Arkanoid von Klaz auf der Biene ohne Hardware Register?



Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #4 am: Fr 12.12.2014, 22:59:27 »
Das geht schon so (auch bei der Firebee).

Aber nur, wenn 1. der Videocontroller im FPGA tatsächlich im Falcon-Modus ist (also eine Falcon-Auflösung aktiv ist) und 2. die Palettenregister überhaupt verwendet werden (also kein True-Color Mode aktiv ist).
And remember: Beethoven wrote his first symphony in C

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #5 am: Sa 13.12.2014, 11:10:43 »
Grundsätzlich gilt für Coldfire-Assembler: Instruktionen sind 1-3 (16-Bit) Worte lang.

Das bedeutet dann natürlich: alles, was einen m68k-Befehl länger macht als drei Worte, gibt's bei Coldfire nicht. Also gibt's auch "immediate word" nach "immediate long" nicht als Adressierungsart (das wäre ja ein 4 Worte langer Befehl), das muß stattdessen durch ein Register durch. "Übersetzungsmöglichkeiten" gibt's viele, es muß nicht unbedingt die sein, die die cf68klib verwendet (die ist meist, allerdings längst nicht immer, optimal).

move.w   #$700,$ffff8240      red background color

Hier kannst Du den linken oder auch den rechten Operanden in ein Register packen:
        move.w  #0x700,d0
        move.w  d0,0xffff8240

        move.l  #0xffff8240,a0
        move.w  #0x700,(a0)

Wenn Du ernsthaft mit Coldfire-Assembler programmieren willst, brauchst Du jedenfalls das entsprechende Manual dazu: www.freescale.com/files/dsp/doc/ref_manual/CFPRM.pdf und am besten holst Du dir auch gleich das Hardware Reference Manual zum MCF5474: www.freescale.com/files/32bit/doc/ref_manual/MCF5475RM.pdf. Der MCF5474, wie er in der Firebee verbaut ist, kann den Befehlssatz ISA_B, Coldfires allgemein können bis ISA_C+ (da muß man ein bißchen aufpassen, weil das CFPRM alle Prozessoren beschreibt).

Gruß,
Markus
« Letzte Änderung: Sa 13.12.2014, 11:34:51 von mfro »
And remember: Beethoven wrote his first symphony in C

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #6 am: Sa 13.12.2014, 11:17:27 »
Danke mfro! Super Erklärung! Das hilft weiter!

Und ja ich bin ernsthaft an der Assembler Programmierung interessiert.
Da dies Essentiell für die Atari Programmierung darstellt.

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #7 am: Sa 13.12.2014, 12:29:34 »
Wenn Du grad' kein Register übrig hast (weil dein m68k-Code schon alle aufbraucht), geht auch das:

        move.w  #0x700,-(sp)
        move.w  (sp)+,0xffff8240

Ist allerdings ein wenig langsamer (drei statt zwei Zyklen).
And remember: Beethoven wrote his first symphony in C

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #8 am: Sa 13.12.2014, 12:40:06 »
Grins! Danke mfro, das wollte ich gerade fragen, was wenn alle Register weg sind! :-)

Zu den Dokus! Hm,..., das geht ja tief rein!

Was ich mir für die Firebee wünsche, wäre sowas wie "Atari ST Assembler-Buch" oder so Kurse wie "The Atari ST MC68000 Assembly Language Tutorial v0.84".

Also ein SDK, wo ich genau nachlesen kann, was ich tun kann mit dem Gerät. Das fehlt leider!
Und ohne eine solches SDK, was ich als essentiell ansehe, sehe ich die Software-Entwicklung sein es jetzt "neu" oder "gepacht Old" als schwierig an.
« Letzte Änderung: Sa 13.12.2014, 13:03:56 von AngelikaZ »

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #9 am: Sa 13.12.2014, 14:02:16 »
Zu den Dokus! Hm,..., das geht ja tief rein!
Dann holst Du dir am besten noch die Doku zum Cyclone III FPGA (http://www.altera.com/literature/hb/cyc3/cyclone3_handbook.pdf) und es geht noch (350 Seiten) tiefer ;).

Was ich mir für die Firebee wünsche, wäre sowas wie "Atari ST Assembler-Buch" oder so Kurse wie "The Atari ST MC68000 Assembly Language Tutorial v0.84".

Also ein SDK, wo ich genau nachlesen kann, was ich tun kann mit dem Gerät. Das fehlt leider!
Und ohne eine solches SDK, was ich als essentiell ansehe, sehe ich die Software-Entwicklung sein es jetzt "neu" oder "gepacht Old" als schwierig an.

Da hast Du nicht ganz unrecht. Dokumentation ist knapp.

Aber auch nicht ganz einfach zu schreiben - die wäre ja keine "Firebee-Doku" sondern eine, die den aktuellen Stand der FPGA-Config beschreibt. Wenn man da dran drei Zeilen ändern würde, müsste man wieder eine neue schreiben.

Fangen wir mal andersrum an: es gibt (m.E.) zwei Gründe eine Firebee zu kaufen:
  • man will "bloß" einen schnellen Falcon haben. Dann kann man mit der existierenden Falcon-Dokumentation m.E. nach gut leben. Das meiste davon (fast alles, was heutzutage wichtig ist) funktioniert auch auf der Firebee. EmuTOS für die Firebee beispielsweise unterscheidet sich (abgesehen davon natürlich, daß es für den Coldfire compiliert ist) nur in ein paar Kleinigkeiten von dem für den Falcon
  • man will einen Computer, wo man wirklich "an jeder Schraube drehen" kann. Kann man bei der Firebee. Dann muß man aber auch bereit sein, den ganzen Krempel zu lesen und allerhand Neues zu lernen ;)
And remember: Beethoven wrote his first symphony in C

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #10 am: Sa 13.12.2014, 15:16:48 »
Ja, das mit VHDL habe ich mir auch schon angeschaut. Um dorthin zu kommen, so denke ich, muss man Assembler können und somit die Architektur von 68k bis CF. Denn ich wünsche mir schon einen schnellen kompatiblen Falcon. Zunächst ist mein Ziel Grafik auf der FB ohne GEM zu laufen zu bekommen.

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #11 am: Sa 13.12.2014, 15:42:54 »
... Um dorthin zu kommen, so denke ich, muss man Assembler können...

Nö, glaub' ich nicht. Für VHDL muß man nicht Assembler können. Programmierkenntnisse schaden da generell eher ;).

Kenntnisse in digitaler Schaltungstechnik wären viel nützlicher.
And remember: Beethoven wrote his first symphony in C

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #12 am: Sa 13.12.2014, 16:39:26 »
Ja, mit der Schaltungstechnik hast Du recht. Hab aber leider nicht E-Technik studiert, aber interessant ist es dennoch.
Ich mach meine Übungen mal weiter und schau zu, das ich diese auch unter der Biene zum laufen bekommen. Ist sehr interessant alles, da ich damals mit dem ST gleich auf den C-Zug aufgesprungen bin, hole ich nun das nach, was ich damals versäumt habe und mich jetzt ein bisschen wurmt.

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #13 am: Sa 13.12.2014, 16:48:15 »
Ach ja, was ich suche, sind Assembler oder C-Sourcecode Samples, welche an die Biene mit Coldfire angepasst sind, die sich mit Grafik (ohne GEM) und Sound/DMA beschäftigen.
Kurse sind ja nett, aber ich persönliche lerne von Beispielen.
« Letzte Änderung: Sa 13.12.2014, 16:50:13 von AngelikaZ »

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: Firebee-Coldfire Assembler Coding
« Antwort #14 am: Sa 13.12.2014, 21:55:07 »
Da solltest du am besten wohl mal in FireTOS reinschauen, oder?
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #15 am: Sa 13.12.2014, 23:15:42 »
Da solltest du am besten wohl mal in FireTOS reinschauen, oder?

Da wirst Du bezüglich Grafik und Sound nicht viel (genau genommen gar nix) finden. FireTOS verwendet die Standard-TOS 4.04 Routinen dafür, genau wie ein Falcon oder die CT60.
And remember: Beethoven wrote his first symphony in C

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: Firebee-Coldfire Assembler Coding
« Antwort #16 am: So 14.12.2014, 02:20:36 »
Ok, aber irgendwie muss doch FireTOS die Soundhardware initialisieren und die Grafikmodis einstellen?
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #17 am: So 14.12.2014, 10:52:44 »
Ok, aber irgendwie muss doch FireTOS die Soundhardware initialisieren und die Grafikmodis einstellen?

Klar, ein bißchen was gäb's da schon zu finden.

Dummerweise stehen die FireTOS-Quellen noch immer unter dem Atari-NDA, das Medusa erlaubt, ein modifiziertes Original-TOS zu vertreiben und sind deswegen nicht öffentlich zugänglich.

Trotzdem verpaßt niemand was: EmuTOS in Verbindung mit BaS macht letztendlich (zumindest bei den Umfängen, die bislang unterstützt werden) genau dasselbe auf vollkommen freier Basis - wer wissen will, wie's funktioniert, sollte also da und da reinschauen (da kann ich bei Bedarf gerne auch ein wenig helfen, schließlich stammt ein großer Teil des BaS_gcc Codes von mir). Letztendlich gibt's dabei den Vorteil von "Coldfire-pur" - da gibt's keine cf68klib, die 680xx-Binärcode "übersetzt".

Allerdings muß ich die Hoffnung auf "ein Schatzkästlein mit Assembler-Tricks" gleich mal ein wenig dämpfen. Besonders viel Assembler gibt's nicht zu sehen. Ist m.E. auch gar nicht sinnvoll: schließlich hat Motorola/Freescale den Coldfire-Befehlssatz auf die Befehle hin getrimmt, die C-Compiler benutzen. Bis auf wenige Ausnahmen wird man mit Assembler keine wirklichen Geschwindigkeitsvorteile erreichen. Im Gegenteil: was man bei einem m68k an Optimierungstricks gelernt hat, sollte man nach einem Blick auf die Coldfire-Timing-Tabelle gleich wieder vergessen. Die meisten Coldfire-Befehle mit "simplen" Addressierungsarten laufen in einem Taktzyklus und "Optimierungsversuche" (z.B. PC-relative Addressierung) werden mit einem zusätzlichen bestraft (das ist bei einem 68060 übrigens nicht anders).
And remember: Beethoven wrote his first symphony in C

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Firebee-Coldfire Assembler Coding
« Antwort #18 am: So 14.12.2014, 11:54:36 »
Noch was: der Großteil von dem, was da drin (für den 68060) steht, stimmt auch für die Coldfires.
And remember: Beethoven wrote his first symphony in C

Offline AngelikaZ

  • Benutzer
  • Beiträge: 140
Re: Firebee-Coldfire Assembler Coding
« Antwort #19 am: So 14.12.2014, 11:54:47 »
Danke mfro!
Das ist doch schon mal ein Ansatz! Da schau ich mal rein!
Und das der CF C optimiert ist wusste ich nicht.
Da ging ich von einer anderen Voraussetzung aus.
Solche Infos fehlen eben!