home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.uni-stuttgart.de/pub/systems/acorn/
/
Acorn.tar
/
Acorn
/
acornet
/
fun
/
mags
/
hl-04-93.arc
/
!HL-04_93_Text_-Coding
< prev
next >
Wrap
Text File
|
1993-10-04
|
25KB
|
471 lines
ÿÿÿÿÿÿÿÿÿÿ Programmierung ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
An alle Assembler-Programmierer!
Wer kann mir helfen, den Vector &1D (UpcallV) zu CLAIMen? Im Grunde ist dies
doch ein ganz normaler Vektor, den man mit
MOV r0,#&1D
ADR r1,upcall_routine%
MOV r2,#0
SWI "OS_Claim"
claimt, oder? Ich habe das gemacht, meine upcall_routine% sah dann schlie▀lich
so aus:
.upcall_routine%
MOVS PC,r14
was (nach den PRMs) die Kontrolle immer an den nΣchsten CLAIMant weitergibt.
Alles ist auch Word-Aligned etc., sprich richtig, und doch kommt bei jedem
Upcall ein Fehler: entweder ┤Undefined Instruction┤ genau beim MOVS PC,r14,
oder ┤Address Exception┤ (irgendwo im Kernel). Verzweifelt wie ich war, habe
ich auch schon MOV PC,r14 und LDMFD r13!,{PC} benutzt, natⁿrlich ohne Erfolg.
Da mit dieser upcall_routine% eigentlich GAR nichts passieren dⁿrfte, hat mich
dieses seltsame Verhalten doch sehr betrⁿbt.
Wer wei▀ darⁿber Bescheid?
Sorcerer
(Ich jedenfalls nicht.)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Wei▀ jemand, wie ich von einem Assemblerprogramm aus eine bestimme BASIC-
Zeile anspringen kann ? Es wird da doch bestimmt irgendeine ROM-Routine
geben...
Acero
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Hat jemand eine schnelle Routine, um die Bytes innerhalb eines Wortes zu
vertauschen ? Aus dem Wort B1 B2 B3 B4 soll also das Wort B4 B3 B2 B1
werden. Irgendwo habe ich schon mal eine geeignete Routine von Roger Wilson
gesehen, aber leider wei▀ ich nicht mehr, wo. Seine L÷sung verbraucht nur
drei oder vier Taktzyklen, glaube ich.
Acero
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Also ich schnall da irgendwas micht.
Ich hab versucht eine Sprite-Routine zu schreiben, die gleichzeitig noch
testet, ob eine Kollision mit irgend einem Farbcode au▀er Null passiert.
Ich denk mir doch mal das ich da den ganzen Mist byteweise hin und her-
schieben mu▀.
Aber irgenwie steht dann meine Karre und kommt nicht mehr aus dem Knie.
ASPHYX
(Sprites sollte man nicht byte-, sondern wordweise plotten. Dazu kann man
die Sprites entweder im Preprocessing vorshiften oder aber wΣhrend der
Laufzeit ⁿber die LSx,ASx und ROR-Anweisungen an die Wort-Positionen
"anpassen".
Zur Kollisionsabfrage: Meistens reicht es vollkommen aus, lediglich am
Rand der Sprites ein paar Punkte abzufragen. Bestimme einfach zw÷lf Punkte
in Kreisform um das Sprite und lese diese aus ! Das kostet kaum Rechenzeit
und ist ausreichend genau.)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Wei▀ eigentlich irgend jemand, wo ich einen Oberon oder Modula2 Compiler her-
bekomme, der halbwegs stabil lΣuft.
Hey Mathematiker, wenn du zugang zum Internet hast schau doch mal dort nach,
ich hab geh÷rt, da▀ es bei der Uni in Stuttgart geile Sachen gibt.
ASPHYX
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Hi ACE!!!!
Schreib weiter Tips fⁿr die 500.
WΣre echt nett, wenn du jedesmal ca. 10KB an Text ver÷ffentlichen wⁿrdest.
O.k. war etwas ⁿbertrieben.
Dann werden mehr Leute besser programmieren k÷nnen und Demos, wo mann nur
Scrolltext und Logo sieht werden aussterben, meine [unver÷ffentlichten] Demos
sehen nemlich alle irgendwie so aus, na ja fast jedenfalls.
ASPHYX
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Da hab' ich doch letztlich M.S.'s !ArcInfo geplⁿndert und seh' da 'nen Kom-
mentar, da▀ eine Routine unbedingt auf 'ner 256er Adresse anfangen mⁿsse. Na
ganz so extrem ist die Sache nicht aber trotzdem existiert das Problem.
Bei eingeschaltetem Cache braucht ein Branch genau 3 Takte (2S+1N)(F cycles).
Schaltet man ihn (den Cache natⁿrlich) aus, (Drek!) dann ist nichts mehr ir-
gendwie festgelegt. Wegen den Umschaltung auf MCLK (A5000 i.A. 12MHz, A3000
8MHz) ist dann 1N=2S also 4 Takte. Pustekuchen! Ich hab' mir mal 'nen Tag
genommen und diesen dummen Befehl analysiert. Verge▀t es!
Effektiv kam heraus, da▀ ein Branch auf einer &xxxxxxx4 Adresse irgendwie
am schnellsten ist. Fⁿr &xxxxxxx8 und ~C braucht er definitiv einen Takt
mehr. Bei ~0 bin ich mir nicht ganz so sicher! Ich habe einfach eine NOP
Schleife 'zigmal durchlaufen lassen und ⁿber den Timer die Zeit gemessen.
Sinnigerweise erh÷hte sich die Anzahl der theoretischen Takte bei jedem
Sprung ⁿber eine WordBoundary hinaus um einen Takt... Ich hab's dann aber
aufgegeben, da eine Schleife mit 2 Sprⁿngen (vor und zurⁿck) alles andere
als definiertes Verhalten zeigte. ▄brigens sind die folgenden Sequenzen
mal vom logischen abgesehen nicht gleich schnell (Cache Off!):
MOV R0,R1,LSL R2 MOV R4,R5
MOV R4,R5 MOV R0,R1,LSL R2
Sie unterscheiden sich um genau einen Takt. (Fragt mich nicht ob links oder
rechts schneller ist!) Entweder ist das wieder adressabhΣngig oder die Pre-
fetchqueue hat ihre Finger im Spiel. Im Data Manual zum ChipSet ist irgendwo
ein worst case Rechenbeispiel. Da braucht die Routine fast das Doppelte an
Zeit. Ich versteh' die Welt nicht mehr! Aber programmieren tu' ich trotzdem
noch.
greetings blackICe
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Gute Frage Acero!
Wo ist denn die deutsche Programmiererszene ??? Das Problem liegt vielleicht
darin, da▀ die meisten recht 'harmlos' programmieren und dieses Wissen als
nicht erwΣhnenswert einstufen. Die anderen haben dann wohl eher Angst, jemand
k÷nnte ihre Idee stehlen ... totaler Bl÷dsinn. Irgendwann kriegt derjenige
es doch 'raus. Au▀erdem hat es doch was wenn man sagen kann 'das stammt von
mir'. Bestimmte Sachen werden irgendwann sowieso von irgendjemand zuerst ent-
deckt/-wickelt. Ich wⁿrde das Rad auch nicht nochmal erfinden wollen. Man mu▀
sich wohl damit abfinden, da▀ heutzutage nicht mehr soviel und sooft 'ne
geniale Idee geboren wird. (Ist alles schon vergeben. Hi Hi Hi!)
Dann bemⁿht man sich halt um Verbesserungen von Vorhandenem. Wie hei▀t es so
sch÷n: Widersprⁿche treiben die Entwicklung voran ... Nicht da▀ ich hier zum
"Wettstreit um die schnellste Additionsroutine" o.Σ. aufrufen will, aber Er-
fahrungsaustausch ist doch gerade fⁿr die Einsteiger eine wertvolle Hilfe.
Auch wenn bestimmte Sachen mit dem eigentlichen Problem nichts tu tun haben,
so k÷nnen sie doch Anregungen usw. geben. Aber wenn wir das Potential nicht
nutzen ... Das kann doch der Verbreitung des Archimedes nur nⁿtzlich sein.
Denkt mal d'rⁿber nach. Ich dachte z.B. Rasterprogrammierung wΣre 'n Tabu fⁿr
mich, und jetzt ist das fⁿr mich fast alltΣglich. Man mu▀ mit dem vorhandenem
Wissen nur umgehen k÷nnen. So schnell geht Hardware nicht kaputt. (Ich kenn'
da 'nen Kumpel aus meiner Schulzeit, der programmiert bestimmte Sachen aus
Angst nicht, bis ihm ein in seinen Augen "Kompetenter" das "Verfahren" abseg-
net. Zum totlachen ...
Hab' ich jetzt den roten Faden verloren ? (Ich schreib' nΣmlich grⁿn auf
schwarz ........................................... Okay, war'n Scherz!)
also ciao,
greetings blackICe
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Asphyx: Die neueste Version des Coconizerplayermodules kannst Du direkt von
Armaxess kriegen, dazu solltest Du ein Demo von Ihnen haben und dort Ihre
Adresse suchen, oder natⁿrlich im Coconizer nachschauen! Aber ich glaub nicht,
da▀ es eine neuere Version als die vom Coconizer 1.37 gibt!
QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Ich kenne bisher nur 4 Assemblerkurse, dies wΣren: Archimedessonderheft 2
(deutsch, aber recht kurz), Assemblerkurs (mehrere Textfiles, deutsch),
Archimedes Assembly Language von Dabs Press (englisch, aber sehr gut) und den
aus der ArcStudy (deutsch und einfach genial). Gibt es noch welche?
QArc
(Seltsam. Da besteht der relevante Befehlssatz des ARMs aus vielleicht 15
Mnemonics, und trotzdem versuchen eine Menge Leute, diese fⁿnfzehn Befehle
in immer umfangreicheren Kursen zu beschreiben. Why ? Der "Kurzkurs" im
zweiten Archimedes-Magazin sollte vollkommen ausreichen ! Puristen werden
eventuell sogar mit der Beschreibung in den PRMs auskommen.)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Ace hat recht, schneller kann man keine 2 Register miteinander tauschen, als
mit der EOR-Methode, selbst mit MOV geht es nicht schneller, sondern nur
gleichschnell. Alles in allem spart die EOR-Methode noch 1 Register, nicht
schlecht...
QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Ace und Eduard Pfarr: Im letzten Hardliner war ja unter Tips'n'Trix der
Scrollkurs, unteranderem war auch das Programm VIDC1 dabei, als
Beispielprogramm. Dort verwendet Ace ein 'teqp pc,#0: movnv r0,r0'. Mir ist
klar, da▀ dieses movnv (also ein Move Never) zum synchronisieren der
Registerbanks dient (liegt am teqp davor), aber Acorn rΣt dem User ja davon ab,
mit dem Condition Code Never zu arbeiten, weil er wahrscheinlich anders belegt
wird, wenn die neuen Prozessoren kommen (Quelle: PRM's 3 und Risc User, sowie
ArcStudy). Das bedeutet doch, da▀ viele Demos (und andere Programme!) nicht
mehr laufen! Was sagst Du (Ace und Eduard) dazu?
QArc
(Interessiert Dich auch, was ich dazu sage ? Ja ? Also: Schmarrn ! Hauptsache,
auf dem ARM2 und dem ARM3 laufen jene Demos. Auf gr÷▀eren Prozessoren werden
die heutigen Demos sowieso nur noch belΣchelt werden. Au▀erdem wΣre es
vermutlich sinnbringender, mal Demos herauszubringen, die auf eine bestimmte
Konfiguration zugeschnitten sind. Dann k÷nnte man wirklich das Optimum
herausholen.
Allerdings gebe ich zu, da▀ auch ich nur noch MOV R0,R0 benutze.)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Wenn eine Applikation mehrere Spritefiles fⁿr verschiedene Modis (also !Sprites
fⁿr Mode 12, !Sprites22 fⁿr Mode 20 und !Sprites23 fⁿr monochrom Modes) bietet,
so werden die nicht bei einem Moduswechsel aktiviert, erst wenn die Applikation
nochmals gebooted wird! Anders verhΣlt es sich mit Toolicons, diese haben ja an
ihrem Namen die Endung fⁿr den Mode, die werden auch bei einem Modewechsel neu
dargestellt!!
QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Warum braucht das IconSpriten eigentlich soviel Zeit? Beim BootUp verbringt
mein 3000er etwa 30 Sekunden mit IconSpriten (ich habe 2 Dateien mit etwa 300
Sprites!), wenn ich sie nachtrΣglich nochmal iconsprite dauert das ganze mehr
als 1 Minute!!! Warum?
QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Die Spriteroutinen aus Hardliner 2 sind ja nicht schlecht, aber die Maske habe
ich bisher noch nicht gebraucht! Meine Scrollroutine (fⁿr die Grⁿ▀e, usw) wird
ohne Maske auskommen, und die anderen wahrscheinlich auch. Liegt aber auch
daran, da▀ jedesmal der komplette Screen neu aufgebaut wird, also jedesmal die
Stars, das Logo und der Scroller neugezeichnet werden. Und damit die Sterne
durch den Hintergrund durchgehen (in einer Schrift zum Beispiel) werden sie als
letztes geplottet! Mal schaun, ob ich mit meinen ineffizienten Routinen auch
noch Musik im Hintergrund spielen kann, und das ohne Screenflipping!!!
QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Hier mal ne Routine mit der man ein Starfield erzeugen kann:
DIM colour%(3)
colour%(0) = 45
colour%(1) = 47
colour%(2) = 210
colour%(3) = 252 : REM Farbdefinitionen fⁿr die 4 verschiedenen Speeds
Stars% = 255 : REM Anzahl der Sterne
DIM StarRout &1000,L%-1 : REM Platz fⁿr die Routine schaffen
FOR pass% = 12 TO 14 STEP %10
P% = &8000
O% = StarRout
[OPT pass% ; Hier geht's jetzt los
SWI &100+22
SWI &100+13 ; in Mode 13 schalten
SWI "OS_ReadDynamicArea" ; Screengr÷▀e von Mode 13 in R1 laden
RSB R10,R1,#&02000000 ; Screenstart steht jetzt in R10
MOV R11,#0 ; Hintergrundfarbe in R11 (schwarz)
.screenloop
MOV R0,#19
SWI "OS_Byte" ; Warte auf den Rasterzeilenruecklauf = Wait
ADR R12,StarTab ; Startabelle nach R12
MOV R0,#Stars%+1 ; Sternenzahl nach R0
.lineloop
LDMIA R12,{R1-R3} ;R1 = xposition
;R2 = speed
;R3 = colour
ADD R6,R10,R1 ;R6 = Videostart+Spalte
ADD R6,R6,R0,LSL#8 ;R6 = Videostart+Spalte+256*Zeile
STRB R11,[R6,R0,LSL#6] ;alten Stern l÷schen!
ADD R1,R1,R2 ;R1 = Spalte + Speed
CMP R1,#320
SUBGE R1,R1,#320 ; Spalte > 319 -> R1-=320
ADD R6,R10,R1
ADD R6,R6,R0,LSL#8
STRB R3,[R6,R0,LSL#6] ; Stern setzen
STMIA R12!,{R1-R3} ; Neue Werte speichern und erhoehen
SUBS R0,R0,#1
BNE lineloop ; nΣchste Zeile
SWI "OS_ReadEscapeState"
BCC screenloop ; ESC? nein? dann nochmal
MOV PC,R14
.StarTab
]
FOR x%= 0 TO Stars%:speed%=RND(4)
[OPT pass%
EQUD RND(320)-1
EQUD speed%
EQUD colour%(speed%-1)
]
NEXT
[OPT pass%
]
NEXT pass%
CALL StarRout
END
So das war's auch schon, recht kurz? OK, diese Routine erzeugt ein von rechts
nach links scrollendes Sternenfeld in 4 verschiedenen Geschwindigkeiten. Die
Sterne werden mit jedem VSync gel÷scht und neu gezeichnet. Wenn Ihr auf dem
Bildschirm zusΣtzlich ein Sprite habt, fliegen die Sterne 'hinter' dem Sprite
vorbei, sie zerst÷ren es nicht! Wer wei▀, wie man's schneller macht soll hier
seine Routine reinsetzen! Nochwas, diese Routine habe ich am 4.1.1993 ge-
schrieben, ich hatte damals keinen Bock nochmehr aufs Abi zu lernen und da hab
ich mich halt mal hingesetzt, nach 30 Minuten (ist das lang?) war sie fertig.
Zudem war das die erste Routine in Assembler die auch funktioniert hat, ich
hab noch nie vorher irgendwas in ArcAssembler programmiert, aber dank der AAL
hat's ja geklappt!
QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
In manchen Demos sieht man ja, da▀ ⁿber einem Text ein Schatten ist. Zum Teil
bewegt sich dieser Schatten dann auch noch (so wie der Plasmaeffekt in
Nirvana). So einen Schatten kann man sehr einfach erzeugen, wenn man einen
16 Farbmodus verwendet und auch nur 8 Farben braucht. Zu erst erzeugt man
eine Palette, in der die unteren 8 Farben normale Farben sind, und die oberen
8 Farben, die Schatten dazu darstellen. Das sieht dann wie folgt aus:
Normale Farben: %0000 - %0111
Schatten Farben: %1000 - %1111
seht Ihr den Trick? Wenn Ihr also einen Schatten ⁿber eine Farbe legen wollt,
so mⁿ▀t Ihr seinen Wert nur mit ORR %1000 verknⁿpfen, wegkriegen tut Ihr den
Schatten mit AND %0111, wollt Ihr den Schatten 'invertieren' so benutzt Ihr
ein EOR %1000.
Leider hat der 16 Farbmodus auch noch 2 Nachteile:
1.) In einem Byte sind immer 2 Pixel, deshalb kann man fⁿr 2 Pixel den
Schatten folgenderma▀en an und aus machen:
an: ORR %10001000
aus: AND %01110111
Das geht ja eigentlich noch, da man hΣufig nicht den Unterschied zischen
2 Pixel und 1 Pixel sieht, will man aber viel Zeit sparen, benutzt man ja
Words und nicht Bytes, somit hat man aber immer gleich 8 Pixel aufeinmal, was
nun wirklich nicht geht!
In einem 256 Farbmodus wⁿ▀te ich keine Alternative, als da▀ man die Pixel aus-
liest und in einer Tabelle nach dem Schatten schaut (=512 Byte), allerdings
k÷nnte man (wie in Basic) mit der TINT-Option einen Schatten erzeugen, dazu
mⁿ▀te man aber wissen, wie sich die TINT-Option auf die Farbnummer auswirkt,
dies ginge dann aber nur Pixelweise, Wordweise nicht! Also, wer wei▀ wie man's
effektiver macht, soll sich hier melden!
QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
BytePool Produxion: Euer Nirvana lΣuft ja nun endlich in seiner 2.en Version,
aber mit einer SCSI-Platte zusammen gibt's ein Problem: Der letzte Part, also
dieser Up-Scroller wird nicht eingeladen, das Programm hΣngt sich mit der
rotierenden Amigahand auf. Da Acero ja eine AT-Bus-Platte hat, nehme ich an,
da▀ es dort lΣuft, warum lΣuft es aber nicht mit einer SCSI-Platte? Vorallem,
warum laufen die anderen Parts?
QArc
(Ich habe nicht die geringste Ahnung und - ehrlich gesagt - auch keine Lust,
da mal nachzuforschen. Tritt dieses Problem denn bei anderen SCSIlern auch
auf ?)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Tim, Dein ZISS ist wirklich genial (hab Ihn mir gestern mal nΣher angeschaut)!
Nachdem ich den Text 5mal durchgelesen hatte, war mein Knoten im Hirn endlich
offen, Du hΣttest das aber auch besser klar machen k÷nnen, ich hab die ganze
Zeit gedacht, Du wⁿrdest den Buffer alle 32 Zeilen um einen Block nach oben
kopieren, aber woher kommt dann das ZI, naja, nachdem ich dann den SourceCode
noch einbi▀chen durchackert hab bin ich dann dahinter gekommen! ▄brigens: Wie
macht Ihr das RⁿckwΣrtsscrollen? Habt Ihr da einen Pointer zum Anfang-32 des
Puffers? Ach halt, da braucht man ja gar keinen zweiten Puffer, der ist ja
zirkular, Ihr schreibt also einfach in den hinteren Buffer die Zeile die oben
erscheinen soll und fangt eine Zeile weiter oben mit darstellen an! Echt
genial, mal schaun, ob ich diese Routine verwenden kann!
QArc
(Hm, "genial" ist der ZISS nun wirklich nicht. Genial sind eher andere
Effekte bzw. Code-Techniken: Linecompiler, Gourauds, Texturen, Farbmorphs,
Kreistunnel, usw...)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
5 Tage nachdem ich den ersten Text ⁿber die Schattenroutine geschrieben habe,
hab ich sie mal auf dem Archie ausprobiert, das Ergebnis war ernⁿchternd!!!
Da ich nur alle 2 Pixel aufeinmal mit einem Schattenversehe (also Byteweise),
geht meine Routine bei breiten Schatten in stark in die Knie, sie braucht dann
mehr als 1 VSync an Rechenzeit (inklusive Schattenl÷schen), dadurch kommt ein
Ruckeln ins Scrolling (ja, der Schatten scrollt! ─hnlich wie der Ziss).
Jetzt habe ich meinen Schatten schmaler gemacht, seine h÷chste Breite betrΣgt
jetzt 16 Pixel, damit kriegt man ein flottes, ruckfreies Scrolling hin, auch
bei 32 Pixel funktionierts noch einwandfrei, allerdings kann das nicht der
Weisheit letzter Schlu▀ sein, ich bin mir sicher, da▀ sich meine Routine noch
soweit optimieren lΣ▀t, da▀ auch 64 Pixel m÷glich sind, aber mit 64 Pixel
kriegt man auch nichts hin. Und wenn ich zum PC rⁿberschiele, sehe ich grad
einen Schatten der mindestens 128 Pixel breit ist und besser scrollt als
meiner, rein SpeedmΣ▀ig ist der PC etwa 1.5mal schneller als mein 3000er,
aber dafⁿr haben die ja auch noch einen Textfader eingebaut!
Mal schaun, ob man meine Routine noch schneller hinkriegt! ▄brigens arbeite
ich grade an einem M-ZISS, wenn der fertig ist, wird er garantiert die volle
Rechenleistung eines Arm 2 brauchen, wahrscheinlich (99%) sogar nochmehr,
hoffentlich hab ich den am 17. September fertig (noch 5 Tage). QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Ich hab nochmal ⁿber meinen Gedankengang der Schattenroutine nachgedacht, und
bin zu einer anderen Methode gekommen, diese hat allerdings einen Nachteil, man
kann den Schatten nicht so ohne weiteres wieder l÷schen. Vorher ging das ja
mit AND, jetzt nicht mehr. Der Hauptvorteil der neuen Routine liegt darin, da▀
sie mit weniger Farben auskommt (nur 1 Farbe mehr als die normalen Farben!).
Um das zu erreichen erzeugt man eine Palette mit den Grundfarben (16 Colour
Mode), diese Grundfarben werden so angeordnet, da▀ auf die erste Farbe eine
Farbe folgt, die der Schatten der ersten Farbe ist, diese Farbe ist gleich-
zeitig wieder Grundfarbe und hat als Schatten die 3. Farbe, usw... Hier eine
Tabelle:
Farbnummer Schattenfarbnummer
00 01
01 02
02 03
03 04
04 05
... ...
Am besten lΣ▀t sich sowas mit der Standardpalette machen, man mu▀ dann
allerdings darauf achten, da▀ man in dem Feld, das schattiert werden soll,
keine Farbe 07 (also Schwarz) vorkommt, sonst wird der Schatten tief blau.
Die Schattenroutine erzeugt ihren Schatten dann mit folgendem Befehl:
R1 = Punktfarbe (eigentlich: Punktefarbe)
1 Byte (2 Pixel) : R2 = &1010
ADD R1,R1,R2
4 Byte (8 Pixel) : R2 = &1010101010101010
ADD R1,R1,R2 (hoppsala, genau, gleich!)
So, wenn man also x zu schattierende Farben hat, hat man noch 15-x Farben
frei. GeschwindigkeitsmΣ▀ig ist diese Routine exakt gleichschnell wie die
alte!!! QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
So, der MCiSS ist fertig, nun, was tut er? Ganz einfach, er scrollt ein Riesen-
Sprite (896 Pixel hoch, 480 Pixel breit) von unten nach oben, allerdings hat
dieses Riesensprite eine Maske, soda▀ beim plotten der Hintergrund nicht zer-
st÷rt wird, wenn die Maske gesetzt ist. Der MCiSS arbeitet in Mode 12 und ver-
schiebt pro VSync (0.02 Sekunden) 84480 Byte oder 21120 Words. Obwohl dies doch
recht wenige Daten sind, braucht er gut 80% Rechenzeit, was daran liegt, da▀
das Maskieren ⁿber BIC und ORR geht. Den Rest der Rechenzeit habe ich mit einer
Schattenroutine aufgefⁿllt, die mindestens 15% Rechenzeit braucht!
Fⁿr Demos eignet sich der MCiSS also nicht, da man gerade noch eine Musik und
ein paar Stars machen k÷nnte, aber als kleines Demo schon eher! ▄brigens habe
ich um den MCiSS herum ein Demo geschrieben, welches Ihr eigentlich ⁿberall
bekommen solltet. Ein Problem gibts dabei noch: Dieses Demo ist ⁿber 1MB gro▀,
Diskuser k÷nnen es also nur mittels ArcFS o.Σ. ansehen! Dieses Demo, sein Name
ist ⁿbrigens !ArcInvite, ist deshalb so lang, weil ich 2 Versionen, jeweils fⁿr
den Arm2 und den Arm3 geschrieben habe (hΣtte ich eigentlich auch kⁿrzer machen
k÷nnen!!!), jede Version ist 500K lang! Gepackt ist das Programm etwa 230K
lang. QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Leute, ich such die Farbcodes fⁿr einen Farbverlauf, und zwar brauche ich
die, welche den Regenbogen machen, also wer mir die Werte sagen kann, soll
dies auch tun! QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Nochwas, kann mir einer eine Formel geben, wie ich:
a) WellenlΣnge des Lichtes in Farbcodes fⁿr den Archie umrechnen kann
b) RGB-Werte in Archie-Farbcodes umrechnen kann
c) Farbwert + Tint in Archie-Farbcodes umrechnen kann
wΣre Euch sehr dankbar! QArc
(Zu a): Geht wohl am besten ⁿber eine vorberechnete Tabelle.
Zu b): Hier kannst Du das ColourTrans-Modul benutzen. Es stellt eine gro▀e
Anzahl an SWIs zur Verfⁿgung und wird in den neuen PRMs ab Seite
3-335 erklΣrt.
Ein Beispiel: SWI "ColourTrans_ReturnColourNumber"
on entry: R0=&BBGGRR00 (RGB-Werte)
on exit: R0=colour number.
Zu c): SWI "ColourTrans_GCOLToColourNumber"
on entry: R0=GCOL
on exit: R0=colour number.
Fⁿr Demos ist ColourTrans allerdings viel zu langsam. Da mu▀ man sich schon
eigene Routinen zusammenbasteln.)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
▄brigens suche ich alle m÷glichen FarbverlΣufe, also grⁿn-blau, rot_blau und
was es da noch gibt, immer her damit! QArc
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Ich m÷chte mit meinem BasicInlineAssembler die FPA programmieren!!!!!!!!
irgendwie mu▀ man das Basic doch erweitern k÷nnen, so wie es auch bei den
8-Bittern m÷glich war.
Ich m÷chte auch nicht eingeben mⁿssen: EQUD FN_FP("LDFE F0,[R1,#44]!") oder
Σhnliche Scherze. Ich will ihn genauso programmieren, wie den ARM!
Wer weis Rat?
Ikarus
(Hat sich schon jemand den Spa▀ gemacht und eine FPA-Erweiterung des Basic-
Assemblers erstellt ?)
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ